@angular/compiler 18.0.0-next.5 → 18.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/src/assertions.mjs +2 -2
- package/esm2022/src/chars.mjs +4 -4
- package/esm2022/src/compiler.mjs +12 -12
- package/esm2022/src/compiler_facade_interface.mjs +1 -1
- package/esm2022/src/config.mjs +2 -2
- package/esm2022/src/constant_pool.mjs +22 -16
- package/esm2022/src/core.mjs +19 -16
- package/esm2022/src/expression_parser/ast.mjs +1 -1
- package/esm2022/src/expression_parser/lexer.mjs +13 -10
- package/esm2022/src/expression_parser/parser.mjs +32 -30
- package/esm2022/src/i18n/digest.mjs +19 -14
- package/esm2022/src/i18n/extractor_merger.mjs +22 -22
- package/esm2022/src/i18n/i18n_ast.mjs +18 -16
- package/esm2022/src/i18n/i18n_html_parser.mjs +3 -5
- package/esm2022/src/i18n/i18n_parser.mjs +10 -10
- package/esm2022/src/i18n/message_bundle.mjs +11 -8
- package/esm2022/src/i18n/serializers/placeholder.mjs +5 -2
- package/esm2022/src/i18n/serializers/serializer.mjs +8 -7
- package/esm2022/src/i18n/serializers/xliff.mjs +45 -16
- package/esm2022/src/i18n/serializers/xliff2.mjs +33 -17
- package/esm2022/src/i18n/serializers/xmb.mjs +30 -11
- package/esm2022/src/i18n/serializers/xml_helper.mjs +5 -3
- package/esm2022/src/i18n/serializers/xtb.mjs +7 -7
- package/esm2022/src/i18n/translation_bundle.mjs +11 -9
- package/esm2022/src/injectable_compiler_2.mjs +10 -7
- package/esm2022/src/jit_compiler_facade.mjs +52 -53
- package/esm2022/src/ml_parser/ast.mjs +8 -8
- package/esm2022/src/ml_parser/defaults.mjs +1 -1
- package/esm2022/src/ml_parser/entities.mjs +2 -2
- package/esm2022/src/ml_parser/html_tags.mjs +55 -16
- package/esm2022/src/ml_parser/html_whitespaces.mjs +3 -4
- package/esm2022/src/ml_parser/icu_ast_expander.mjs +15 -8
- package/esm2022/src/ml_parser/lexer.mjs +49 -25
- package/esm2022/src/ml_parser/parser.mjs +16 -11
- package/esm2022/src/ml_parser/tags.mjs +1 -1
- package/esm2022/src/ml_parser/tokens.mjs +1 -1
- package/esm2022/src/ml_parser/xml_tags.mjs +1 -1
- package/esm2022/src/output/abstract_emitter.mjs +7 -6
- package/esm2022/src/output/abstract_js_emitter.mjs +8 -8
- package/esm2022/src/output/map_util.mjs +2 -2
- package/esm2022/src/output/output_ast.mjs +68 -50
- package/esm2022/src/output/output_jit.mjs +3 -6
- package/esm2022/src/output/output_jit_trusted_types.mjs +1 -1
- package/esm2022/src/output/source_map.mjs +8 -8
- package/esm2022/src/parse_util.mjs +7 -4
- package/esm2022/src/render3/partial/api.mjs +1 -1
- package/esm2022/src/render3/partial/class_metadata.mjs +5 -5
- package/esm2022/src/render3/partial/component.mjs +8 -7
- package/esm2022/src/render3/partial/directive.mjs +29 -22
- package/esm2022/src/render3/partial/factory.mjs +1 -1
- package/esm2022/src/render3/partial/injectable.mjs +2 -2
- package/esm2022/src/render3/partial/injector.mjs +2 -2
- package/esm2022/src/render3/partial/ng_module.mjs +4 -4
- package/esm2022/src/render3/partial/pipe.mjs +2 -2
- package/esm2022/src/render3/partial/util.mjs +3 -3
- package/esm2022/src/render3/r3_ast.mjs +4 -4
- package/esm2022/src/render3/r3_class_debug_info_compiler.mjs +4 -5
- package/esm2022/src/render3/r3_class_metadata_compiler.mjs +9 -7
- package/esm2022/src/render3/r3_control_flow.mjs +24 -19
- package/esm2022/src/render3/r3_deferred_blocks.mjs +2 -2
- package/esm2022/src/render3/r3_deferred_triggers.mjs +1 -1
- package/esm2022/src/render3/r3_factory.mjs +21 -17
- package/esm2022/src/render3/r3_identifiers.mjs +301 -76
- package/esm2022/src/render3/r3_injector_compiler.mjs +4 -2
- package/esm2022/src/render3/r3_jit.mjs +1 -1
- package/esm2022/src/render3/r3_module_compiler.mjs +13 -14
- package/esm2022/src/render3/r3_pipe_compiler.mjs +4 -2
- package/esm2022/src/render3/r3_template_transform.mjs +48 -34
- package/esm2022/src/render3/util.mjs +5 -4
- package/esm2022/src/render3/view/api.mjs +1 -1
- package/esm2022/src/render3/view/compiler.mjs +42 -31
- package/esm2022/src/render3/view/i18n/get_msg_utils.mjs +15 -16
- package/esm2022/src/render3/view/i18n/icu_serializer.mjs +6 -6
- package/esm2022/src/render3/view/i18n/localize_utils.mjs +6 -6
- package/esm2022/src/render3/view/i18n/meta.mjs +19 -14
- package/esm2022/src/render3/view/i18n/util.mjs +3 -3
- package/esm2022/src/render3/view/query_generation.mjs +14 -11
- package/esm2022/src/render3/view/t2_api.mjs +1 -1
- package/esm2022/src/render3/view/t2_binder.mjs +55 -51
- package/esm2022/src/render3/view/template.mjs +11 -8
- package/esm2022/src/render3/view/util.mjs +8 -8
- package/esm2022/src/resource_loader.mjs +1 -1
- package/esm2022/src/schema/dom_element_schema_registry.mjs +5 -5
- package/esm2022/src/schema/dom_security_schema.mjs +10 -7
- package/esm2022/src/schema/element_schema_registry.mjs +1 -1
- package/esm2022/src/schema/trusted_types_sinks.mjs +2 -3
- package/esm2022/src/selector.mjs +15 -11
- package/esm2022/src/shadow_css.mjs +63 -28
- package/esm2022/src/style_url_resolver.mjs +1 -1
- package/esm2022/src/template/pipeline/ir/src/enums.mjs +1 -1
- package/esm2022/src/template/pipeline/ir/src/expression.mjs +16 -17
- package/esm2022/src/template/pipeline/ir/src/handle.mjs +1 -1
- package/esm2022/src/template/pipeline/ir/src/operations.mjs +1 -1
- package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +9 -5
- package/esm2022/src/template/pipeline/ir/src/ops/host.mjs +1 -1
- package/esm2022/src/template/pipeline/ir/src/ops/shared.mjs +1 -1
- package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +3 -3
- package/esm2022/src/template/pipeline/ir/src/traits.mjs +1 -1
- package/esm2022/src/template/pipeline/ir/src/variable.mjs +1 -1
- package/esm2022/src/template/pipeline/src/compilation.mjs +1 -1
- package/esm2022/src/template/pipeline/src/conversion.mjs +9 -3
- package/esm2022/src/template/pipeline/src/emit.mjs +8 -18
- package/esm2022/src/template/pipeline/src/ingest.mjs +41 -36
- package/esm2022/src/template/pipeline/src/instruction.mjs +31 -46
- package/esm2022/src/template/pipeline/src/phases/any_cast.mjs +3 -2
- package/esm2022/src/template/pipeline/src/phases/apply_i18n_expressions.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.mjs +3 -2
- package/esm2022/src/template/pipeline/src/phases/attribute_extraction.mjs +11 -6
- package/esm2022/src/template/pipeline/src/phases/binding_specialization.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/chaining.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/collapse_singleton_interpolations.mjs +3 -2
- package/esm2022/src/template/pipeline/src/phases/conditionals.mjs +3 -5
- package/esm2022/src/template/pipeline/src/phases/const_collection.mjs +10 -7
- package/esm2022/src/template/pipeline/src/phases/convert_i18n_bindings.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/create_i18n_contexts.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/defer_configs.mjs +2 -3
- package/esm2022/src/template/pipeline/src/phases/defer_resolve_targets.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/empty_elements.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/expand_safe_reads.mjs +22 -17
- package/esm2022/src/template/pipeline/src/phases/extract_i18n_messages.mjs +17 -16
- package/esm2022/src/template/pipeline/src/phases/generate_advance.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/generate_projection_def.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/generate_variables.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/has_const_expression_collection.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/host_style_property_parsing.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/i18n_const_collection.mjs +12 -10
- package/esm2022/src/template/pipeline/src/phases/i18n_text_extraction.mjs +4 -3
- package/esm2022/src/template/pipeline/src/phases/naming.mjs +4 -3
- package/esm2022/src/template/pipeline/src/phases/next_context_merging.mjs +3 -2
- package/esm2022/src/template/pipeline/src/phases/nonbindable.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/nullish_coalescing.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/ordering.mjs +19 -11
- package/esm2022/src/template/pipeline/src/phases/parse_extracted_styles.mjs +6 -4
- package/esm2022/src/template/pipeline/src/phases/phase_remove_content_selectors.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/pipe_creation.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/pipe_variadic.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/propagate_i18n_blocks.mjs +2 -3
- package/esm2022/src/template/pipeline/src/phases/pure_function_extraction.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/pure_literal_structures.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/reify.mjs +8 -5
- package/esm2022/src/template/pipeline/src/phases/resolve_contexts.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/resolve_defer_deps_fns.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/resolve_dollar_event.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_element_placeholders.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_expression_placeholders.mjs +5 -5
- package/esm2022/src/template/pipeline/src/phases/resolve_names.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/resolve_sanitizers.mjs +5 -3
- package/esm2022/src/template/pipeline/src/phases/save_restore_view.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/style_binding_specialization.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/temporary_variables.mjs +2 -3
- package/esm2022/src/template/pipeline/src/phases/track_fn_generation.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/track_fn_optimization.mjs +7 -6
- package/esm2022/src/template/pipeline/src/phases/track_variables.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/transform_two_way_binding_set.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/var_counting.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/variable_optimization.mjs +9 -8
- package/esm2022/src/template/pipeline/src/phases/wrap_icus.mjs +1 -1
- package/esm2022/src/template/pipeline/src/util/elements.mjs +1 -1
- package/esm2022/src/template_parser/binding_parser.mjs +22 -17
- package/esm2022/src/template_parser/template_preparser.mjs +2 -2
- package/esm2022/src/util.mjs +3 -3
- package/esm2022/src/version.mjs +1 -1
- package/fesm2022/compiler.mjs +1550 -1033
- package/fesm2022/compiler.mjs.map +1 -1
- package/index.d.ts +5 -15
- package/package.json +2 -2
|
@@ -80,14 +80,14 @@ function inlineAlwaysInlineVariables(ops) {
|
|
|
80
80
|
const vars = new Map();
|
|
81
81
|
for (const op of ops) {
|
|
82
82
|
if (op.kind === ir.OpKind.Variable && op.flags & ir.VariableFlags.AlwaysInline) {
|
|
83
|
-
ir.visitExpressionsInOp(op, expr => {
|
|
83
|
+
ir.visitExpressionsInOp(op, (expr) => {
|
|
84
84
|
if (ir.isIrExpression(expr) && fencesForIrExpression(expr) !== Fence.None) {
|
|
85
85
|
throw new Error(`AssertionError: A context-sensitive variable was marked AlwaysInline`);
|
|
86
86
|
}
|
|
87
87
|
});
|
|
88
88
|
vars.set(op.xref, op);
|
|
89
89
|
}
|
|
90
|
-
ir.transformExpressionsInOp(op, expr => {
|
|
90
|
+
ir.transformExpressionsInOp(op, (expr) => {
|
|
91
91
|
if (expr instanceof ir.ReadVariableExpr && vars.has(expr.xref)) {
|
|
92
92
|
const varOp = vars.get(expr.xref);
|
|
93
93
|
// Inline by cloning, because we might inline into multiple places.
|
|
@@ -136,7 +136,7 @@ function optimizeVariablesInOpList(ops, compatibility) {
|
|
|
136
136
|
// This variable is unused and can be removed. We might need to keep the initializer around,
|
|
137
137
|
// though, if something depends on it running.
|
|
138
138
|
if ((contextIsUsed && opInfo.fences & Fence.ViewContextWrite) ||
|
|
139
|
-
|
|
139
|
+
opInfo.fences & Fence.SideEffectful) {
|
|
140
140
|
// This variable initializer has a side effect which must be retained. Either:
|
|
141
141
|
// * it writes to the view context, and we know there is a future operation which depends
|
|
142
142
|
// on that write, or
|
|
@@ -187,7 +187,7 @@ function optimizeVariablesInOpList(ops, compatibility) {
|
|
|
187
187
|
toInline.push(id);
|
|
188
188
|
}
|
|
189
189
|
let candidate;
|
|
190
|
-
while (candidate = toInline.pop()) {
|
|
190
|
+
while ((candidate = toInline.pop())) {
|
|
191
191
|
// We will attempt to inline this variable. If inlining fails (due to fences for example),
|
|
192
192
|
// no future operation will make inlining legal.
|
|
193
193
|
const decl = varDecls.get(candidate);
|
|
@@ -264,7 +264,7 @@ function fencesForIrExpression(expr) {
|
|
|
264
264
|
function collectOpInfo(op) {
|
|
265
265
|
let fences = Fence.None;
|
|
266
266
|
const variablesUsed = new Set();
|
|
267
|
-
ir.visitExpressionsInOp(op, expr => {
|
|
267
|
+
ir.visitExpressionsInOp(op, (expr) => {
|
|
268
268
|
if (!ir.isIrExpression(expr)) {
|
|
269
269
|
return;
|
|
270
270
|
}
|
|
@@ -305,7 +305,7 @@ function countVariableUsages(op, varUsages, varRemoteUsage) {
|
|
|
305
305
|
* Remove usages of a variable in `op` from the `varUsages` tracking.
|
|
306
306
|
*/
|
|
307
307
|
function uncountVariableUsages(op, varUsages) {
|
|
308
|
-
ir.visitExpressionsInOp(op, expr => {
|
|
308
|
+
ir.visitExpressionsInOp(op, (expr) => {
|
|
309
309
|
if (!ir.isIrExpression(expr)) {
|
|
310
310
|
return;
|
|
311
311
|
}
|
|
@@ -366,7 +366,8 @@ function tryInlineVariableInitializer(id, initializer, target, declFences) {
|
|
|
366
366
|
// at this point, so don't try.
|
|
367
367
|
return expr;
|
|
368
368
|
}
|
|
369
|
-
else if (
|
|
369
|
+
else if (flags & ir.VisitorContextFlag.InChildOperation &&
|
|
370
|
+
declFences & Fence.ViewContextRead) {
|
|
370
371
|
// We cannot inline variables that are sensitive to the current context across operation
|
|
371
372
|
// boundaries.
|
|
372
373
|
return expr;
|
|
@@ -416,4 +417,4 @@ function allowConservativeInlining(decl, target) {
|
|
|
416
417
|
return true;
|
|
417
418
|
}
|
|
418
419
|
}
|
|
419
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVfb3B0aW1pemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3RlbXBsYXRlL3BpcGVsaW5lL3NyYy9waGFzZXMvdmFyaWFibGVfb3B0aW1pemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxDQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDbkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHL0I7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEdBQW1CO0lBQ25ELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLDJCQUEyQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFekMsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDM0UsMkJBQTJCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO1FBRUQseUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUQseUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFMUQsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7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KiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgbyBmcm9tICcuLi8uLi8uLi8uLi9vdXRwdXQvb3V0cHV0X2FzdCc7XG5pbXBvcnQgKiBhcyBpciBmcm9tICcuLi8uLi9pcic7XG5pbXBvcnQge0NvbXBpbGF0aW9uSm9ifSBmcm9tICcuLi9jb21waWxhdGlvbic7XG5cbi8qKlxuICogT3B0aW1pemUgdmFyaWFibGVzIGRlY2xhcmVkIGFuZCB1c2VkIGluIHRoZSBJUi5cbiAqXG4gKiBWYXJpYWJsZXMgYXJlIGVhZ2VybHkgZ2VuZXJhdGVkIGJ5IHBpcGVsaW5lIHN0YWdlcyBmb3IgYWxsIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGNvdWxkIGJlXG4gKiByZWZlcmVuY2VkLiBUaGlzIHN0YWdlIHByb2Nlc3NlcyB0aGUgbGlzdCBvZiBkZWNsYXJlZCB2YXJpYWJsZXMgYW5kIGFsbCB2YXJpYWJsZSB1c2FnZXMsXG4gKiBhbmQgb3B0aW1pemVzIHdoZXJlIHBvc3NpYmxlLiBJdCBwZXJmb3JtcyAzIG1haW4gb3B0aW1pemF0aW9uczpcbiAqXG4gKiAgICogSXQgdHJhbnNmb3JtcyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgdG8gc2lkZSBlZmZlY3RmdWwgZXhwcmVzc2lvbnMgd2hlbiB0aGVcbiAqICAgICB2YXJpYWJsZSBpcyBub3QgdXNlZCwgYnV0IGl0cyBpbml0aWFsaXplciBoYXMgZ2xvYmFsIGVmZmVjdHMgd2hpY2ggb3RoZXJcbiAqICAgICBvcGVyYXRpb25zIHJlbHkgdXBvbi5cbiAqICAgKiBJdCByZW1vdmVzIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBpZiB0aG9zZSB2YXJpYWJsZXMgYXJlIG5vdCByZWZlcmVuY2VkIGFuZFxuICogICAgIGVpdGhlciB0aGV5IGRvIG5vdCBoYXZlIGdsb2JhbCBlZmZlY3RzLCBvciBub3RoaW5nIHJlbGllcyBvbiB0aGVtLlxuICogICAqIEl0IGlubGluZXMgdmFyaWFibGUgZGVjbGFyYXRpb25zIHdoZW4gdGhvc2UgdmFyaWFibGVzIGFyZSBvbmx5IHVzZWQgb25jZVxuICogICAgIGFuZCB0aGUgaW5saW5pbmcgaXMgc2VtYW50aWNhbGx5IHNhZmUuXG4gKlxuICogVG8gZ3VhcmFudGVlIGNvcnJlY3RuZXNzLCBhbmFseXNpcyBvZiBcImZlbmNlc1wiIGluIHRoZSBpbnN0cnVjdGlvbiBsaXN0cyBpcyB1c2VkIHRvIGRldGVybWluZVxuICogd2hpY2ggb3B0aW1pemF0aW9ucyBhcmUgc2FmZSB0byBwZXJmb3JtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3B0aW1pemVWYXJpYWJsZXMoam9iOiBDb21waWxhdGlvbkpvYik6IHZvaWQge1xuICBmb3IgKGNvbnN0IHVuaXQgb2Ygam9iLnVuaXRzKSB7XG4gICAgaW5saW5lQWx3YXlzSW5saW5lVmFyaWFibGVzKHVuaXQuY3JlYXRlKTtcbiAgICBpbmxpbmVBbHdheXNJbmxpbmVWYXJpYWJsZXModW5pdC51cGRhdGUpO1xuXG4gICAgZm9yIChjb25zdCBvcCBvZiB1bml0LmNyZWF0ZSkge1xuICAgICAgaWYgKG9wLmtpbmQgPT09IGlyLk9wS2luZC5MaXN0ZW5lciB8fCBvcC5raW5kID09PSBpci5PcEtpbmQuVHdvV2F5TGlzdGVuZXIpIHtcbiAgICAgICAgaW5saW5lQWx3YXlzSW5saW5lVmFyaWFibGVzKG9wLmhhbmRsZXJPcHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9wdGltaXplVmFyaWFibGVzSW5PcExpc3QodW5pdC5jcmVhdGUsIGpvYi5jb21wYXRpYmlsaXR5KTtcbiAgICBvcHRpbWl6ZVZhcmlhYmxlc0luT3BMaXN0KHVuaXQudXBkYXRlLCBqb2IuY29tcGF0aWJpbGl0eSk7XG5cbiAgICBmb3IgKGNvbnN0IG9wIG9mIHVuaXQuY3JlYXRlKSB7XG4gICAgICBpZiAob3Aua2luZCA9PT0gaXIuT3BLaW5kLkxpc3RlbmVyIHx8IG9wLmtpbmQgPT09IGlyLk9wS2luZC5Ud29XYXlMaXN0ZW5lcikge1xuICAgICAgICBvcHRpbWl6ZVZhcmlhYmxlc0luT3BMaXN0KG9wLmhhbmRsZXJPcHMsIGpvYi5jb21wYXRpYmlsaXR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBIFtmZW5jZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWVtb3J5X2JhcnJpZXIpIGZsYWcgZm9yIGFuIGV4cHJlc3Npb24gd2hpY2ggaW5kaWNhdGVzXG4gKiBob3cgdGhhdCBleHByZXNzaW9uIGNhbiBiZSBvcHRpbWl6ZWQgaW4gcmVsYXRpb24gdG8gb3RoZXIgZXhwcmVzc2lvbnMgb3IgaW5zdHJ1Y3Rpb25zLlxuICpcbiAqIGBGZW5jZWBzIGFyZSBhIGJpdGZpZWxkLCBzbyBtdWx0aXBsZSBmbGFncyBtYXkgYmUgc2V0IG9uIGEgc2luZ2xlIGV4cHJlc3Npb24uXG4gKi9cbmVudW0gRmVuY2Uge1xuICAvKipcbiAgICogRW1wdHkgZmxhZyAobm8gZmVuY2UgZXhpc3RzKS5cbiAgICovXG4gIE5vbmUgPSAwYjAwMCxcblxuICAvKipcbiAgICogQSBjb250ZXh0IHJlYWQgZmVuY2UsIG1lYW5pbmcgdGhhdCB0aGUgZXhwcmVzc2lvbiBpbiBxdWVzdGlvbiByZWFkcyBmcm9tIHRoZSBcImN1cnJlbnQgdmlld1wiXG4gICAqIGNvbnRleHQgb2YgdGhlIHJ1bnRpbWUuXG4gICAqL1xuICBWaWV3Q29udGV4dFJlYWQgPSAwYjAwMSxcblxuICAvKipcbiAgICogQSBjb250ZXh0IHdyaXRlIGZlbmNlLCBtZWFuaW5nIHRoYXQgdGhlIGV4cHJlc3Npb24gaW4gcXVlc3Rpb24gd3JpdGVzIHRvIHRoZSBcImN1cnJlbnQgdmlld1wiXG4gICAqIGNvbnRleHQgb2YgdGhlIHJ1bnRpbWUuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBhbGwgYENvbnRleHRXcml0ZWAgZmVuY2VzIGFyZSBpbXBsaWNpdGx5IGBDb250ZXh0UmVhZGAgZmVuY2VzIGFzIG9wZXJhdGlvbnMgd2hpY2hcbiAgICogY2hhbmdlIHRoZSB2aWV3IGNvbnRleHQgZG8gc28gYmFzZWQgb24gdGhlIGN1cnJlbnQgb25lLlxuICAgKi9cbiAgVmlld0NvbnRleHRXcml0ZSA9IDBiMDEwLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBhIGNhbGwgaXMgcmVxdWlyZWQgZm9yIGl0cyBzaWRlLWVmZmVjdHMsIGV2ZW4gaWYgbm90aGluZyByZWFkcyBpdHMgcmVzdWx0LlxuICAgKlxuICAgKiBUaGlzIGlzIGFsc28gdHJ1ZSBvZiBgVmlld0NvbnRleHRXcml0ZWAgb3BlcmF0aW9ucyAqKmlmKiogdGhleSBhcmUgZm9sbG93ZWQgYnkgYVxuICAgKiBgVmlld0NvbnRleHRSZWFkYC5cbiAgICovXG4gIFNpZGVFZmZlY3RmdWwgPSAwYjEwMCxcbn1cblxuLyoqXG4gKiBTdW1tYXJ5IGRhdGEgY29sbGVjdGVkIGZvciBlYWNoIGBPcGAgaW4gYSBsaXN0LlxuICpcbiAqIFRyYWNraW5nIHRoaXMgZGF0YSBwZXIgb3BlcmF0aW9uIGFsbG93cyB0aGUgb3B0aW1pemVyIHRvIHByb2Nlc3Mgb3BlcmF0aW9ucyBhdCBhIGhpZ2hlciBsZXZlbFxuICogdGhhbiBhbHdheXMgc2Nhbm5pbmcgZXhwcmVzc2lvbnMuXG4gKi9cbmludGVyZmFjZSBPcEluZm8ge1xuICAvKipcbiAgICogQSBgU2V0YCBvZiB2YXJpYWJsZXMgcmVmZXJlbmNlZCBieSBleHByZXNzaW9ucyBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICovXG4gIHZhcmlhYmxlc1VzZWQ6IFNldDxpci5YcmVmSWQ+O1xuXG4gIC8qKlxuICAgKiBGbGFncyBpbmRpY2F0aW5nIGFueSBgRmVuY2VgcyBwcmVzZW50IGZvciB0aGlzIG9wZXJhdGlvbi5cbiAgICovXG4gIGZlbmNlczogRmVuY2U7XG59XG5cbmZ1bmN0aW9uIGlubGluZUFsd2F5c0lubGluZVZhcmlhYmxlcyhvcHM6IGlyLk9wTGlzdDxpci5DcmVhdGVPcHxpci5VcGRhdGVPcD4pOiB2b2lkIHtcbiAgY29uc3QgdmFycyA9IG5ldyBNYXA8aXIuWHJlZklkLCBpci5WYXJpYWJsZU9wPGlyLkNyZWF0ZU9wfGlyLlVwZGF0ZU9wPj4oKTtcbiAgZm9yIChjb25zdCBvcCBvZiBvcHMpIHtcbiAgICBpZiAob3Aua2luZCA9PT0gaXIuT3BLaW5kLlZhcmlhYmxlICYmIG9wLmZsYWdzICYgaXIuVmFyaWFibGVGbGFncy5BbHdheXNJbmxpbmUpIHtcbiAgICAgIGlyLnZpc2l0RXhwcmVzc2lvbnNJbk9wKG9wLCBleHByID0+IHtcbiAgICAgICAgaWYgKGlyLmlzSXJFeHByZXNzaW9uKGV4cHIpICYmIGZlbmNlc0ZvcklyRXhwcmVzc2lvbihleHByKSAhPT0gRmVuY2UuTm9uZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IEEgY29udGV4dC1zZW5zaXRpdmUgdmFyaWFibGUgd2FzIG1hcmtlZCBBbHdheXNJbmxpbmVgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB2YXJzLnNldChvcC54cmVmLCBvcCk7XG4gICAgfVxuXG4gICAgaXIudHJhbnNmb3JtRXhwcmVzc2lvbnNJbk9wKG9wLCBleHByID0+IHtcbiAgICAgIGlmIChleHByIGluc3RhbmNlb2YgaXIuUmVhZFZhcmlhYmxlRXhwciAmJiB2YXJzLmhhcyhleHByLnhyZWYpKSB7XG4gICAgICAgIGNvbnN0IHZhck9wID0gdmFycy5nZXQoZXhwci54cmVmKSE7XG4gICAgICAgIC8vIElubGluZSBieSBjbG9uaW5nLCBiZWNhdXNlIHdlIG1pZ2h0IGlubGluZSBpbnRvIG11bHRpcGxlIHBsYWNlcy5cbiAgICAgICAgcmV0dXJuIHZhck9wLmluaXRpYWxpemVyLmNsb25lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhwcjtcbiAgICB9LCBpci5WaXNpdG9yQ29udGV4dEZsYWcuTm9uZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IG9wIG9mIHZhcnMudmFsdWVzKCkpIHtcbiAgICBpci5PcExpc3QucmVtb3ZlKG9wIGFzIGlyLkNyZWF0ZU9wIHwgaXIuVXBkYXRlT3ApO1xuICB9XG59XG5cbi8qKlxuICogUHJvY2VzcyBhIGxpc3Qgb2Ygb3BlcmF0aW9ucyBhbmQgb3B0aW1pemUgdmFyaWFibGVzIHdpdGhpbiB0aGF0IGxpc3QuXG4gKi9cbmZ1bmN0aW9uIG9wdGltaXplVmFyaWFibGVzSW5PcExpc3QoXG4gICAgb3BzOiBpci5PcExpc3Q8aXIuQ3JlYXRlT3B8aXIuVXBkYXRlT3A+LCBjb21wYXRpYmlsaXR5OiBpci5Db21wYXRpYmlsaXR5TW9kZSk6IHZvaWQge1xuICBjb25zdCB2YXJEZWNscyA9IG5ldyBNYXA8aXIuWHJlZklkLCBpci5WYXJpYWJsZU9wPGlyLkNyZWF0ZU9wfGlyLlVwZGF0ZU9wPj4oKTtcbiAgY29uc3QgdmFyVXNhZ2VzID0gbmV3IE1hcDxpci5YcmVmSWQsIG51bWJlcj4oKTtcblxuICAvLyBUcmFjayB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBpbW1lZGlhdGUgb3BlcmF0aW9uIGxpc3QuIEZvciBleGFtcGxlLCB3aXRoaW5cbiAgLy8gYExpc3RlbmVyT3BgIGhhbmRsZXIgb3BlcmF0aW9ucyBvZiBsaXN0ZW5lcnMgaW4gdGhlIGN1cnJlbnQgb3BlcmF0aW9uIGxpc3QuXG4gIGNvbnN0IHZhclJlbW90ZVVzYWdlcyA9IG5ldyBTZXQ8aXIuWHJlZklkPigpO1xuICBjb25zdCBvcE1hcCA9IG5ldyBNYXA8aXIuQ3JlYXRlT3B8aXIuVXBkYXRlT3AsIE9wSW5mbz4oKTtcblxuICAvLyBGaXJzdCwgZXh0cmFjdCBpbmZvcm1hdGlvbiBhYm91dCB2YXJpYWJsZXMgZGVjbGFyZWQgb3IgdXNlZCB3aXRoaW4gdGhlIHdob2xlIGxpc3QuXG4gIGZvciAoY29uc3Qgb3Agb2Ygb3BzKSB7XG4gICAgaWYgKG9wLmtpbmQgPT09IGlyLk9wS2luZC5WYXJpYWJsZSkge1xuICAgICAgaWYgKHZhckRlY2xzLmhhcyhvcC54cmVmKSB8fCB2YXJVc2FnZXMuaGFzKG9wLnhyZWYpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2hvdWxkIG5vdCBzZWUgdHdvIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSB2YXJpYWJsZTogJHtvcC54cmVmfWApO1xuICAgICAgfVxuICAgICAgdmFyRGVjbHMuc2V0KG9wLnhyZWYsIG9wKTtcbiAgICAgIHZhclVzYWdlcy5zZXQob3AueHJlZiwgMCk7XG4gICAgfVxuXG4gICAgb3BNYXAuc2V0KG9wLCBjb2xsZWN0T3BJbmZvKG9wKSk7XG4gICAgY291bnRWYXJpYWJsZVVzYWdlcyhvcCwgdmFyVXNhZ2VzLCB2YXJSZW1vdGVVc2FnZXMpO1xuICB9XG5cbiAgLy8gVGhlIG5leHQgc3RlcCBpcyB0byByZW1vdmUgYW55IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBmb3IgdmFyaWFibGVzIHRoYXQgYXJlbid0IHVzZWQuIFRoZVxuICAvLyB2YXJpYWJsZSBpbml0aWFsaXplciBleHByZXNzaW9ucyBtYXkgYmUgc2lkZS1lZmZlY3RmdWwsIHNvIHRoZXkgbWF5IG5lZWQgdG8gYmUgcmV0YWluZWQgYXNcbiAgLy8gZXhwcmVzc2lvbiBzdGF0ZW1lbnRzLlxuXG4gIC8vIFRyYWNrIHdoZXRoZXIgd2UndmUgc2VlbiBhbiBvcGVyYXRpb24gd2hpY2ggcmVhZHMgZnJvbSB0aGUgdmlldyBjb250ZXh0IHlldC4gVGhpcyBpcyB1c2VkIHRvXG4gIC8vIGRldGVybWluZSB3aGV0aGVyIGEgd3JpdGUgdG8gdGhlIHZpZXcgY29udGV4dCBpbiBhIHZhcmlhYmxlIGluaXRpYWxpemVyIGNhbiBiZSBvYnNlcnZlZC5cbiAgbGV0IGNvbnRleHRJc1VzZWQgPSBmYWxzZTtcblxuICAvLyBOb3RlIHRoYXQgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGxpc3QgaGFwcGVucyBpbiByZXZlcnNlLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgd2UnbGwgcHJvY2Vzc1xuICAvLyBhbGwgcmVhZHMgb2YgYSB2YXJpYWJsZSBwcmlvciB0byBwcm9jZXNzaW5nIGl0cyBkZWNsYXJhdGlvbi5cbiAgZm9yIChjb25zdCBvcCBvZiBvcHMucmV2ZXJzZWQoKSkge1xuICAgIGNvbnN0IG9wSW5mbyA9IG9wTWFwLmdldChvcCkhO1xuXG4gICAgaWYgKG9wLmtpbmQgPT09IGlyLk9wS2luZC5WYXJpYWJsZSAmJiB2YXJVc2FnZXMuZ2V0KG9wLnhyZWYpISA9PT0gMCkge1xuICAgICAgLy8gVGhpcyB2YXJpYWJsZSBpcyB1bnVzZWQgYW5kIGNhbiBiZSByZW1vdmVkLiBXZSBtaWdodCBuZWVkIHRvIGtlZXAgdGhlIGluaXRpYWxpemVyIGFyb3VuZCxcbiAgICAgIC8vIHRob3VnaCwgaWYgc29tZXRoaW5nIGRlcGVuZHMgb24gaXQgcnVubmluZy5cbiAgICAgIGlmICgoY29udGV4dElzVXNlZCAmJiBvcEluZm8uZmVuY2VzICYgRmVuY2UuVmlld0NvbnRleHRXcml0ZSkgfHxcbiAgICAgICAgICAob3BJbmZvLmZlbmNlcyAmIEZlbmNlLlNpZGVFZmZlY3RmdWwpKSB7XG4gICAgICAgIC8vIFRoaXMgdmFyaWFibGUgaW5pdGlhbGl6ZXIgaGFzIGEgc2lkZSBlZmZlY3Qgd2hpY2ggbXVzdCBiZSByZXRhaW5lZC4gRWl0aGVyOlxuICAgICAgICAvLyAgKiBpdCB3cml0ZXMgdG8gdGhlIHZpZXcgY29udGV4dCwgYW5kIHdlIGtub3cgdGhlcmUgaXMgYSBmdXR1cmUgb3BlcmF0aW9uIHdoaWNoIGRlcGVuZHNcbiAgICAgICAgLy8gICAgb24gdGhhdCB3cml0ZSwgb3JcbiAgICAgICAgLy8gICogaXQncyBhbiBvcGVyYXRpb24gd2hpY2ggaXMgaW5oZXJlbnRseSBzaWRlLWVmZmVjdGZ1bC5cbiAgICAgICAgLy8gV2UgY2FuJ3QgcmVtb3ZlIHRoZSBpbml0aWFsaXplciwgYnV0IHdlIGNhbiByZW1vdmUgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGl0c2VsZiBhbmRcbiAgICAgICAgLy8gcmVwbGFjZSBpdCB3aXRoIGEgc2lkZS1lZmZlY3RmdWwgc3RhdGVtZW50LlxuICAgICAgICBjb25zdCBzdG10T3AgPSBpci5jcmVhdGVTdGF0ZW1lbnRPcChvcC5pbml0aWFsaXplci50b1N0bXQoKSkgYXMgaXIuVXBkYXRlT3A7XG4gICAgICAgIG9wTWFwLnNldChzdG10T3AsIG9wSW5mbyk7XG4gICAgICAgIGlyLk9wTGlzdC5yZXBsYWNlKG9wIGFzIGlyLlVwZGF0ZU9wLCBzdG10T3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSXQncyBzYWZlIHRvIGRlbGV0ZSB0aGlzIGVudGlyZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBhcyBub3RoaW5nIGRlcGVuZHMgb24gaXQsIGV2ZW5cbiAgICAgICAgLy8gc2lkZS1lZmZlY3RmdWxseS4gTm90ZSB0aGF0IGRvaW5nIHRoaXMgbWlnaHQgbWFrZSBvdGhlciB2YXJpYWJsZXMgdW51c2VkLiBTaW5jZSB3ZSdyZVxuICAgICAgICAvLyBpdGVyYXRpbmcgaW4gcmV2ZXJzZSBvcmRlciwgd2Ugc2hvdWxkIGFsd2F5cyBiZSBwcm9jZXNzaW5nIHVzYWdlcyBiZWZvcmUgZGVjbGFyYXRpb25zXG4gICAgICAgIC8vIGFuZCB0aGVyZWZvcmUgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIGEgZGVjbGFyYXRpb24sIGFsbCByZW1vdmFibGUgdXNhZ2VzIHdpbGwgaGF2ZSBiZWVuXG4gICAgICAgIC8vIHJlbW92ZWQuXG4gICAgICAgIHVuY291bnRWYXJpYWJsZVVzYWdlcyhvcCwgdmFyVXNhZ2VzKTtcbiAgICAgICAgaXIuT3BMaXN0LnJlbW92ZShvcCBhcyBpci5VcGRhdGVPcCk7XG4gICAgICB9XG5cbiAgICAgIG9wTWFwLmRlbGV0ZShvcCk7XG4gICAgICB2YXJEZWNscy5kZWxldGUob3AueHJlZik7XG4gICAgICB2YXJVc2FnZXMuZGVsZXRlKG9wLnhyZWYpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gRG9lcyB0aGlzIG9wZXJhdGlvbiBkZXBlbmQgb24gdGhlIHZpZXcgY29udGV4dD9cbiAgICBpZiAob3BJbmZvLmZlbmNlcyAmIEZlbmNlLlZpZXdDb250ZXh0UmVhZCkge1xuICAgICAgY29udGV4dElzVXNlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gTmV4dCwgaW5saW5lIGFueSByZW1haW5pbmcgdmFyaWFibGVzIHdpdGggZXhhY3RseSBvbmUgdXNhZ2UuXG4gIGNvbnN0IHRvSW5saW5lOiBpci5YcmVmSWRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IFtpZCwgY291bnRdIG9mIHZhclVzYWdlcykge1xuICAgIGNvbnN0IGRlY2wgPSB2YXJEZWNscy5nZXQoaWQpITtcbiAgICAvLyBXZSBjYW4gaW5saW5lIHZhcmlhYmxlcyB0aGF0OlxuICAgIC8vICAtIGFyZSB1c2VkIGV4YWN0bHkgb25jZSwgYW5kXG4gICAgLy8gIC0gYXJlIG5vdCB1c2VkIHJlbW90ZWx5XG4gICAgLy8gT1JcbiAgICAvLyAgLSBhcmUgbWFya2VkIGZvciBhbHdheXMgaW5saW5pbmdcbiAgICBjb25zdCBpc0Fsd2F5c0lubGluZSA9ICEhKGRlY2wuZmxhZ3MgJiBpci5WYXJpYWJsZUZsYWdzLkFsd2F5c0lubGluZSk7XG4gICAgaWYgKGNvdW50ICE9PSAxIHx8IGlzQWx3YXlzSW5saW5lKSB7XG4gICAgICAvLyBXZSBjYW4ndCBpbmxpbmUgdGhpcyB2YXJpYWJsZSBhcyBpdCdzIHVzZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFyUmVtb3RlVXNhZ2VzLmhhcyhpZCkpIHtcbiAgICAgIC8vIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBvbmNlLCBidXQgYWNyb3NzIGFuIG9wZXJhdGlvbiBib3VuZGFyeSwgc28gaXQgY2FuJ3QgYmUgaW5saW5lZC5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHRvSW5saW5lLnB1c2goaWQpO1xuICB9XG5cbiAgbGV0IGNhbmRpZGF0ZTogaXIuWHJlZklkfHVuZGVmaW5lZDtcbiAgd2hpbGUgKGNhbmRpZGF0ZSA9IHRvSW5saW5lLnBvcCgpKSB7XG4gICAgLy8gV2Ugd2lsbCBhdHRlbXB0IHRvIGlubGluZSB0aGlzIHZhcmlhYmxlLiBJZiBpbmxpbmluZyBmYWlscyAoZHVlIHRvIGZlbmNlcyBmb3IgZXhhbXBsZSksXG4gICAgLy8gbm8gZnV0dXJlIG9wZXJhdGlvbiB3aWxsIG1ha2UgaW5saW5pbmcgbGVnYWwuXG4gICAgY29uc3QgZGVjbCA9IHZhckRlY2xzLmdldChjYW5kaWRhdGUpITtcbiAgICBjb25zdCB2YXJJbmZvID0gb3BNYXAuZ2V0KGRlY2wgYXMgaXIuQ3JlYXRlT3AgfCBpci5VcGRhdGVPcCkhO1xuICAgIGNvbnN0IGlzQWx3YXlzSW5saW5lID0gISEoZGVjbC5mbGFncyAmIGlyLlZhcmlhYmxlRmxhZ3MuQWx3YXlzSW5saW5lKTtcblxuICAgIGlmIChpc0Fsd2F5c0lubGluZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBc3NlcnRpb25FcnJvcjogRm91bmQgYW4gJ0Fsd2F5c0lubGluZScgdmFyaWFibGUgYWZ0ZXIgdGhlIGFsd2F5cyBpbmxpbmluZyBwYXNzLmApO1xuICAgIH1cblxuICAgIC8vIFNjYW4gb3BlcmF0aW9ucyBmb2xsb3dpbmcgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGFuZCBsb29rIGZvciB0aGUgcG9pbnQgd2hlcmUgdGhhdCB2YXJpYWJsZVxuICAgIC8vIGlzIHVzZWQuIFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSB1c2FnZSBnaXZlbiB0aGUgcHJlY29uZGl0aW9uIGFib3ZlLlxuICAgIGZvciAobGV0IHRhcmdldE9wID0gZGVjbC5uZXh0ITsgdGFyZ2V0T3Aua2luZCAhPT0gaXIuT3BLaW5kLkxpc3RFbmQ7XG4gICAgICAgICB0YXJnZXRPcCA9IHRhcmdldE9wLm5leHQhKSB7XG4gICAgICBjb25zdCBvcEluZm8gPSBvcE1hcC5nZXQodGFyZ2V0T3ApITtcblxuICAgICAgLy8gSXMgdGhlIHZhcmlhYmxlIHVzZWQgaW4gdGhpcyBvcGVyYXRpb24/XG4gICAgICBpZiAob3BJbmZvLnZhcmlhYmxlc1VzZWQuaGFzKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgaWYgKGNvbXBhdGliaWxpdHkgPT09IGlyLkNvbXBhdGliaWxpdHlNb2RlLlRlbXBsYXRlRGVmaW5pdGlvbkJ1aWxkZXIgJiZcbiAgICAgICAgICAgICFhbGxvd0NvbnNlcnZhdGl2ZUlubGluaW5nKGRlY2wsIHRhcmdldE9wKSkge1xuICAgICAgICAgIC8vIFdlJ3JlIGluIGNvbnNlcnZhdGl2ZSBtb2RlLCBhbmQgdGhpcyB2YXJpYWJsZSBpcyBub3QgZWxpZ2libGUgZm9yIGlubGluaW5nIGludG8gdGhlXG4gICAgICAgICAgLy8gdGFyZ2V0IG9wZXJhdGlvbiBpbiB0aGlzIG1vZGUuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBZZXMsIHRyeSB0byBpbmxpbmUgaXQuIElubGluaW5nIG1heSBub3QgYmUgc3VjY2Vzc2Z1bCBpZiBmZW5jZXMgaW4gdGhpcyBvcGVyYXRpb24gYmVmb3JlXG4gICAgICAgIC8vIHRoZSB2YXJpYWJsZSdzIHVzYWdlIGNhbm5vdCBiZSBzYWZlbHkgY3Jvc3NlZC5cbiAgICAgICAgaWYgKHRyeUlubGluZVZhcmlhYmxlSW5pdGlhbGl6ZXIoY2FuZGlkYXRlLCBkZWNsLmluaXRpYWxpemVyLCB0YXJnZXRPcCwgdmFySW5mby5mZW5jZXMpKSB7XG4gICAgICAgICAgLy8gSW5saW5pbmcgd2FzIHN1Y2Nlc3NmdWwhIFVwZGF0ZSB0aGUgdHJhY2tpbmcgc3RydWN0dXJlcyB0byByZWZsZWN0IHRoZSBpbmxpbmVkXG4gICAgICAgICAgLy8gdmFyaWFibGUuXG4gICAgICAgICAgb3BJbmZvLnZhcmlhYmxlc1VzZWQuZGVsZXRlKGNhbmRpZGF0ZSk7XG5cbiAgICAgICAgICAvLyBBZGQgYWxsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSB2YXJpYWJsZSdzIGluaXRpYWxpemVyIHRvIGl0cyBuZXcgdXNhZ2Ugc2l0ZS5cbiAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIHZhckluZm8udmFyaWFibGVzVXNlZCkge1xuICAgICAgICAgICAgb3BJbmZvLnZhcmlhYmxlc1VzZWQuYWRkKGlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNZXJnZSBmZW5jZXMgaW4gdGhlIHZhcmlhYmxlJ3MgaW5pdGlhbGl6ZXIgaW50byBpdHMgbmV3IHVzYWdlIHNpdGUuXG4gICAgICAgICAgb3BJbmZvLmZlbmNlcyB8PSB2YXJJbmZvLmZlbmNlcztcblxuICAgICAgICAgIC8vIERlbGV0ZSB0cmFja2luZyBpbmZvIHJlbGF0ZWQgdG8gdGhlIGRlY2xhcmF0aW9uLlxuICAgICAgICAgIHZhckRlY2xzLmRlbGV0ZShjYW5kaWRhdGUpO1xuICAgICAgICAgIHZhclVzYWdlcy5kZWxldGUoY2FuZGlkYXRlKTtcbiAgICAgICAgICBvcE1hcC5kZWxldGUoZGVjbCBhcyBpci5DcmVhdGVPcCB8IGlyLlVwZGF0ZU9wKTtcblxuICAgICAgICAgIC8vIEFuZCBmaW5hbGx5LCBkZWxldGUgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIGZyb20gdGhlIG9wZXJhdGlvbiBsaXN0LlxuICAgICAgICAgIGlyLk9wTGlzdC5yZW1vdmUoZGVjbCBhcyBpci5VcGRhdGVPcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXaGV0aGVyIGlubGluaW5nIHN1Y2NlZWRlZCBvciBmYWlsZWQsIHdlJ3JlIGRvbmUgcHJvY2Vzc2luZyB0aGlzIHZhcmlhYmxlLlxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCB1c2VkIGluIHRoaXMgb3BlcmF0aW9uLCB0aGVuIHdlJ2QgbmVlZCB0byBpbmxpbmUgYWNyb3NzIGl0LiBDaGVjayBpZlxuICAgICAgLy8gdGhhdCdzIHNhZmUgdG8gZG8uXG4gICAgICBpZiAoIXNhZmVUb0lubGluZVBhc3RGZW5jZXMob3BJbmZvLmZlbmNlcywgdmFySW5mby5mZW5jZXMpKSB7XG4gICAgICAgIC8vIFdlIGNhbid0IHNhZmVseSBpbmxpbmUgdGhpcyB2YXJpYWJsZSBiZXlvbmQgdGhpcyBvcGVyYXRpb24sIHNvIGRvbid0IHByb2NlZWQgd2l0aFxuICAgICAgICAvLyBpbmxpbmluZyB0aGlzIHZhcmlhYmxlLlxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBgaXIuRXhwcmVzc2lvbmAsIHJldHVybnMgdGhlIGBGZW5jZWAgZmxhZ3MgZm9yIHRoYXQgZXhwcmVzc2lvbiB0eXBlLlxuICovXG5mdW5jdGlvbiBmZW5jZXNGb3JJckV4cHJlc3Npb24oZXhwcjogaXIuRXhwcmVzc2lvbik6IEZlbmNlIHtcbiAgc3dpdGNoIChleHByLmtpbmQpIHtcbiAgICBjYXNlIGlyLkV4cHJlc3Npb25LaW5kLk5leHRDb250ZXh0OlxuICAgICAgcmV0dXJuIEZlbmNlLlZpZXdDb250ZXh0UmVhZCB8IEZlbmNlLlZpZXdDb250ZXh0V3JpdGU7XG4gICAgY2FzZSBpci5FeHByZXNzaW9uS2luZC5SZXN0b3JlVmlldzpcbiAgICAgIHJldHVybiBGZW5jZS5WaWV3Q29udGV4dFJlYWQgfCBGZW5jZS5WaWV3Q29udGV4dFdyaXRlIHwgRmVuY2UuU2lkZUVmZmVjdGZ1bDtcbiAgICBjYXNlIGlyLkV4cHJlc3Npb25LaW5kLlJlZmVyZW5jZTpcbiAgICAgIHJldHVybiBGZW5jZS5WaWV3Q29udGV4dFJlYWQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBGZW5jZS5Ob25lO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGBPcEluZm9gIHN0cnVjdHVyZSBmb3IgdGhlIGdpdmVuIGBvcGAuIFRoaXMgcGVyZm9ybXMgdHdvIG9wZXJhdGlvbnM6XG4gKlxuICogICogSXQgdHJhY2tzIHdoaWNoIHZhcmlhYmxlcyBhcmUgdXNlZCBpbiB0aGUgb3BlcmF0aW9uJ3MgZXhwcmVzc2lvbnMuXG4gKiAgKiBJdCByb2xscyB1cCBmZW5jZSBmbGFncyBmb3IgZXhwcmVzc2lvbnMgd2l0aGluIHRoZSBvcGVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RPcEluZm8ob3A6IGlyLkNyZWF0ZU9wfGlyLlVwZGF0ZU9wKTogT3BJbmZvIHtcbiAgbGV0IGZlbmNlcyA9IEZlbmNlLk5vbmU7XG4gIGNvbnN0IHZhcmlhYmxlc1VzZWQgPSBuZXcgU2V0PGlyLlhyZWZJZD4oKTtcbiAgaXIudmlzaXRFeHByZXNzaW9uc0luT3Aob3AsIGV4cHIgPT4ge1xuICAgIGlmICghaXIuaXNJckV4cHJlc3Npb24oZXhwcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV4cHIua2luZCkge1xuICAgICAgY2FzZSBpci5FeHByZXNzaW9uS2luZC5SZWFkVmFyaWFibGU6XG4gICAgICAgIHZhcmlhYmxlc1VzZWQuYWRkKGV4cHIueHJlZik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZmVuY2VzIHw9IGZlbmNlc0ZvcklyRXhwcmVzc2lvbihleHByKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge2ZlbmNlcywgdmFyaWFibGVzVXNlZH07XG59XG5cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiB1c2FnZXMgb2YgZWFjaCB2YXJpYWJsZSwgYmVpbmcgY2FyZWZ1bCB0byB0cmFjayB3aGV0aGVyIHRob3NlIHVzYWdlcyBhcmVcbiAqIGxvY2FsIG9yIHJlbW90ZS5cbiAqL1xuZnVuY3Rpb24gY291bnRWYXJpYWJsZVVzYWdlcyhcbiAgICBvcDogaXIuQ3JlYXRlT3B8aXIuVXBkYXRlT3AsIHZhclVzYWdlczogTWFwPGlyLlhyZWZJZCwgbnVtYmVyPixcbiAgICB2YXJSZW1vdGVVc2FnZTogU2V0PGlyLlhyZWZJZD4pOiB2b2lkIHtcbiAgaXIudmlzaXRFeHByZXNzaW9uc0luT3Aob3AsIChleHByLCBmbGFncykgPT4ge1xuICAgIGlmICghaXIuaXNJckV4cHJlc3Npb24oZXhwcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXhwci5raW5kICE9PSBpci5FeHByZXNzaW9uS2luZC5SZWFkVmFyaWFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb3VudCA9IHZhclVzYWdlcy5nZXQoZXhwci54cmVmKTtcbiAgICBpZiAoY291bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVGhpcyB2YXJpYWJsZSBpcyBkZWNsYXJlZCBvdXRzaWRlIHRoZSBjdXJyZW50IHNjb3BlIG9mIG9wdGltaXphdGlvbi5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyVXNhZ2VzLnNldChleHByLnhyZWYsIGNvdW50ICsgMSk7XG5cbiAgICBpZiAoZmxhZ3MgJiBpci5WaXNpdG9yQ29udGV4dEZsYWcuSW5DaGlsZE9wZXJhdGlvbikge1xuICAgICAgdmFyUmVtb3RlVXNhZ2UuYWRkKGV4cHIueHJlZik7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdXNhZ2VzIG9mIGEgdmFyaWFibGUgaW4gYG9wYCBmcm9tIHRoZSBgdmFyVXNhZ2VzYCB0cmFja2luZy5cbiAqL1xuZnVuY3Rpb24gdW5jb3VudFZhcmlhYmxlVXNhZ2VzKFxuICAgIG9wOiBpci5DcmVhdGVPcHxpci5VcGRhdGVPcCwgdmFyVXNhZ2VzOiBNYXA8aXIuWHJlZklkLCBudW1iZXI+KTogdm9pZCB7XG4gIGlyLnZpc2l0RXhwcmVzc2lvbnNJbk9wKG9wLCBleHByID0+IHtcbiAgICBpZiAoIWlyLmlzSXJFeHByZXNzaW9uKGV4cHIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV4cHIua2luZCAhPT0gaXIuRXhwcmVzc2lvbktpbmQuUmVhZFZhcmlhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSB2YXJVc2FnZXMuZ2V0KGV4cHIueHJlZik7XG4gICAgaWYgKGNvdW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgdmFyaWFibGUgaXMgZGVjbGFyZWQgb3V0c2lkZSB0aGUgY3VycmVudCBzY29wZSBvZiBvcHRpbWl6YXRpb24uXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmFjY3VyYXRlIHZhcmlhYmxlIGNvdW50OiAke2V4cHIueHJlZn0gLSBmb3VuZCBhbm90aGVyIHJlYWQgYnV0IGNvdW50IGlzIGFscmVhZHkgMGApO1xuICAgIH1cbiAgICB2YXJVc2FnZXMuc2V0KGV4cHIueHJlZiwgY291bnQgLSAxKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgaXQncyBzYWZlIHRvIGlubGluZSBhIHZhcmlhYmxlIGFjcm9zcyBhIHBhcnRpY3VsYXIgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSBmZW5jZXMgdGhlIGZlbmNlcyBvZiB0aGUgb3BlcmF0aW9uIHdoaWNoIHRoZSBpbmxpbmluZyB3aWxsIGNyb3NzXG4gKiBAcGFyYW0gZGVjbEZlbmNlcyB0aGUgZmVuY2VzIG9mIHRoZSB2YXJpYWJsZSBiZWluZyBpbmxpbmVkLlxuICovXG5mdW5jdGlvbiBzYWZlVG9JbmxpbmVQYXN0RmVuY2VzKGZlbmNlczogRmVuY2UsIGRlY2xGZW5jZXM6IEZlbmNlKTogYm9vbGVhbiB7XG4gIGlmIChmZW5jZXMgJiBGZW5jZS5WaWV3Q29udGV4dFdyaXRlKSB7XG4gICAgLy8gSXQncyBub3Qgc2FmZSB0byBpbmxpbmUgY29udGV4dCByZWFkcyBhY3Jvc3MgY29udGV4dCB3cml0ZXMuXG4gICAgaWYgKGRlY2xGZW5jZXMgJiBGZW5jZS5WaWV3Q29udGV4dFJlYWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZmVuY2VzICYgRmVuY2UuVmlld0NvbnRleHRSZWFkKSB7XG4gICAgLy8gSXQncyBub3Qgc2FmZSB0byBpbmxpbmUgY29udGV4dCB3cml0ZXMgYWNyb3NzIGNvbnRleHQgcmVhZHMuXG4gICAgaWYgKGRlY2xGZW5jZXMgJiBGZW5jZS5WaWV3Q29udGV4dFdyaXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEF0dGVtcHQgdG8gaW5saW5lIHRoZSBpbml0aWFsaXplciBvZiBhIHZhcmlhYmxlIGludG8gYSB0YXJnZXQgb3BlcmF0aW9uJ3MgZXhwcmVzc2lvbnMuXG4gKlxuICogVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSBzYWZlIHRvIGRvLiBGb3IgZXhhbXBsZSwgdGhlIHZhcmlhYmxlIGNvdWxkIGJlIHJlYWQgZm9sbG93aW5nIHRoZVxuICogZXhlY3V0aW9uIG9mIGFuIGV4cHJlc3Npb24gd2l0aCBmZW5jZXMgdGhhdCBkb24ndCBwZXJtaXQgdGhlIHZhcmlhYmxlIHRvIGJlIGlubGluZWQgYWNyb3NzIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIHRyeUlubGluZVZhcmlhYmxlSW5pdGlhbGl6ZXIoXG4gICAgaWQ6IGlyLlhyZWZJZCwgaW5pdGlhbGl6ZXI6IG8uRXhwcmVzc2lvbiwgdGFyZ2V0OiBpci5DcmVhdGVPcHxpci5VcGRhdGVPcCxcbiAgICBkZWNsRmVuY2VzOiBGZW5jZSk6IGJvb2xlYW4ge1xuICAvLyBXZSB1c2UgYGlyLnRyYW5zZm9ybUV4cHJlc3Npb25zSW5PcGAgdG8gd2FsayB0aGUgZXhwcmVzc2lvbnMgYW5kIGlubGluZSB0aGUgdmFyaWFibGUgaWZcbiAgLy8gcG9zc2libGUuIFNpbmNlIHRoaXMgb3BlcmF0aW9uIGlzIGNhbGxiYWNrLWJhc2VkLCBvbmNlIGlubGluaW5nIHN1Y2NlZWRzIG9yIGZhaWxzIHdlIGNhbid0XG4gIC8vIFwic3RvcFwiIHRoZSBleHByZXNzaW9uIHByb2Nlc3NpbmcsIGFuZCBoYXZlIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBpbmxpbmluZyBoYXMgc3VjY2VlZGVkIG9yXG4gIC8vIGlzIG5vIGxvbmdlciBhbGxvd2VkLlxuICBsZXQgaW5saW5lZCA9IGZhbHNlO1xuICBsZXQgaW5saW5pbmdBbGxvd2VkID0gdHJ1ZTtcblxuICBpci50cmFuc2Zvcm1FeHByZXNzaW9uc0luT3AodGFyZ2V0LCAoZXhwciwgZmxhZ3MpID0+IHtcbiAgICBpZiAoIWlyLmlzSXJFeHByZXNzaW9uKGV4cHIpKSB7XG4gICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICBpZiAoaW5saW5lZCB8fCAhaW5saW5pbmdBbGxvd2VkKSB7XG4gICAgICAvLyBFaXRoZXIgdGhlIGlubGluaW5nIGhhcyBhbHJlYWR5IHN1Y2NlZWRlZCwgb3Igd2UndmUgcGFzc2VkIGEgZmVuY2UgdGhhdCBkaXNhbGxvd3MgaW5saW5pbmdcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHNvIGRvbid0IHRyeS5cbiAgICAgIHJldHVybiBleHByO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChmbGFncyAmIGlyLlZpc2l0b3JDb250ZXh0RmxhZy5JbkNoaWxkT3BlcmF0aW9uKSAmJiAoZGVjbEZlbmNlcyAmIEZlbmNlLlZpZXdDb250ZXh0UmVhZCkpIHtcbiAgICAgIC8vIFdlIGNhbm5vdCBpbmxpbmUgdmFyaWFibGVzIHRoYXQgYXJlIHNlbnNpdGl2ZSB0byB0aGUgY3VycmVudCBjb250ZXh0IGFjcm9zcyBvcGVyYXRpb25cbiAgICAgIC8vIGJvdW5kYXJpZXMuXG4gICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV4cHIua2luZCkge1xuICAgICAgY2FzZSBpci5FeHByZXNzaW9uS2luZC5SZWFkVmFyaWFibGU6XG4gICAgICAgIGlmIChleHByLnhyZWYgPT09IGlkKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyB0aGUgdXNhZ2Ugc2l0ZSBvZiB0aGUgdmFyaWFibGUuIFNpbmNlIG5vdGhpbmcgaGFzIGRpc2FsbG93ZWQgaW5saW5pbmcsIGl0J3NcbiAgICAgICAgICAvLyBzYWZlIHRvIGlubGluZSB0aGUgaW5pdGlhbGl6ZXIgaGVyZS5cbiAgICAgICAgICBpbmxpbmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZXI7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBGb3Igb3RoZXIgdHlwZXMgb2YgYGlyLkV4cHJlc3Npb25gcywgd2hldGhlciBpbmxpbmluZyBpcyBhbGxvd2VkIGRlcGVuZHMgb24gdGhlaXIgZmVuY2VzLlxuICAgICAgICBjb25zdCBleHByRmVuY2VzID0gZmVuY2VzRm9ySXJFeHByZXNzaW9uKGV4cHIpO1xuICAgICAgICBpbmxpbmluZ0FsbG93ZWQgPSBpbmxpbmluZ0FsbG93ZWQgJiYgc2FmZVRvSW5saW5lUGFzdEZlbmNlcyhleHByRmVuY2VzLCBkZWNsRmVuY2VzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBleHByO1xuICB9LCBpci5WaXNpdG9yQ29udGV4dEZsYWcuTm9uZSk7XG4gIHJldHVybiBpbmxpbmVkO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBpbmxpbmluZyBvZiBgZGVjbGAgc2hvdWxkIGJlIGFsbG93ZWQgaW4gXCJjb25zZXJ2YXRpdmVcIiBtb2RlLlxuICpcbiAqIEluIGNvbnNlcnZhdGl2ZSBtb2RlLCBpbmxpbmluZyBiZWhhdmlvciBpcyBsaW1pdGVkIHRvIHRob3NlIG9wZXJhdGlvbnMgd2hpY2ggdGhlXG4gKiBgVGVtcGxhdGVEZWZpbml0aW9uQnVpbGRlcmAgc3VwcG9ydGVkLCB3aXRoIHRoZSBnb2FsIG9mIHByb2R1Y2luZyBlcXVpdmFsZW50IG91dHB1dC5cbiAqL1xuZnVuY3Rpb24gYWxsb3dDb25zZXJ2YXRpdmVJbmxpbmluZyhcbiAgICBkZWNsOiBpci5WYXJpYWJsZU9wPGlyLkNyZWF0ZU9wfGlyLlVwZGF0ZU9wPiwgdGFyZ2V0OiBpci5PcDxpci5DcmVhdGVPcHxpci5VcGRhdGVPcD4pOiBib29sZWFuIHtcbiAgLy8gVE9ETyhhbHhodWIpOiB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IFRlbXBsYXRlRGVmaW5pdGlvbkJ1aWxkZXIgYXBwcm9hY2hlcyBpbmxpbmluZywgYW5kIHJlY29yZFxuICAvLyB0aGF0IGJlaGF2aW9yIGhlcmUuXG4gIHN3aXRjaCAoZGVjbC52YXJpYWJsZS5raW5kKSB7XG4gICAgY2FzZSBpci5TZW1hbnRpY1ZhcmlhYmxlS2luZC5JZGVudGlmaWVyOlxuICAgICAgaWYgKGRlY2wuaW5pdGlhbGl6ZXIgaW5zdGFuY2VvZiBvLlJlYWRWYXJFeHByICYmIGRlY2wuaW5pdGlhbGl6ZXIubmFtZSA9PT0gJ2N0eCcpIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggVGVtcGxhdGVEZWZpbml0aW9uQnVpbGRlciBpcyBjYXV0aW91cyBhYm91dCBpbmxpbmluZywgd2Ugc3RpbGwgd2FudCB0byBkbyBzb1xuICAgICAgICAvLyB3aGVuIHRoZSB2YXJpYWJsZSBpcyB0aGUgY29udGV4dCwgdG8gaW1pdGF0ZSBpdHMgYmVoYXZpb3Igd2l0aCBhbGlhc2VzIGluIGNvbnRyb2wgZmxvd1xuICAgICAgICAvLyBibG9ja3MuIFRoaXMgcXVpcmt5IGJlaGF2aW9yIHdpbGwgYmVjb21lIGRlYWQgY29kZSBvbmNlIGNvbXBhdGliaWxpdHkgbW9kZSBpcyBubyBsb25nZXJcbiAgICAgICAgLy8gc3VwcG9ydGVkLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjYXNlIGlyLlNlbWFudGljVmFyaWFibGVLaW5kLkNvbnRleHQ6XG4gICAgICAvLyBDb250ZXh0IGNhbiBvbmx5IGJlIGlubGluZWQgaW50byBvdGhlciB2YXJpYWJsZXMuXG4gICAgICByZXR1cm4gdGFyZ2V0LmtpbmQgPT09IGlyLk9wS2luZC5WYXJpYWJsZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
|
|
420
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVfb3B0aW1pemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3RlbXBsYXRlL3BpcGVsaW5lL3NyYy9waGFzZXMvdmFyaWFibGVfb3B0aW1pemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxDQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDbkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHL0I7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEdBQW1CO0lBQ25ELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLDJCQUEyQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFekMsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDM0UsMkJBQTJCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO1FBRUQseUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUQseUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFMUQsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7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ZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIG8gZnJvbSAnLi4vLi4vLi4vLi4vb3V0cHV0L291dHB1dF9hc3QnO1xuaW1wb3J0ICogYXMgaXIgZnJvbSAnLi4vLi4vaXInO1xuaW1wb3J0IHtDb21waWxhdGlvbkpvYn0gZnJvbSAnLi4vY29tcGlsYXRpb24nO1xuXG4vKipcbiAqIE9wdGltaXplIHZhcmlhYmxlcyBkZWNsYXJlZCBhbmQgdXNlZCBpbiB0aGUgSVIuXG4gKlxuICogVmFyaWFibGVzIGFyZSBlYWdlcmx5IGdlbmVyYXRlZCBieSBwaXBlbGluZSBzdGFnZXMgZm9yIGFsbCBwb3NzaWJsZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZVxuICogcmVmZXJlbmNlZC4gVGhpcyBzdGFnZSBwcm9jZXNzZXMgdGhlIGxpc3Qgb2YgZGVjbGFyZWQgdmFyaWFibGVzIGFuZCBhbGwgdmFyaWFibGUgdXNhZ2VzLFxuICogYW5kIG9wdGltaXplcyB3aGVyZSBwb3NzaWJsZS4gSXQgcGVyZm9ybXMgMyBtYWluIG9wdGltaXphdGlvbnM6XG4gKlxuICogICAqIEl0IHRyYW5zZm9ybXMgdmFyaWFibGUgZGVjbGFyYXRpb25zIHRvIHNpZGUgZWZmZWN0ZnVsIGV4cHJlc3Npb25zIHdoZW4gdGhlXG4gKiAgICAgdmFyaWFibGUgaXMgbm90IHVzZWQsIGJ1dCBpdHMgaW5pdGlhbGl6ZXIgaGFzIGdsb2JhbCBlZmZlY3RzIHdoaWNoIG90aGVyXG4gKiAgICAgb3BlcmF0aW9ucyByZWx5IHVwb24uXG4gKiAgICogSXQgcmVtb3ZlcyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaWYgdGhvc2UgdmFyaWFibGVzIGFyZSBub3QgcmVmZXJlbmNlZCBhbmRcbiAqICAgICBlaXRoZXIgdGhleSBkbyBub3QgaGF2ZSBnbG9iYWwgZWZmZWN0cywgb3Igbm90aGluZyByZWxpZXMgb24gdGhlbS5cbiAqICAgKiBJdCBpbmxpbmVzIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB3aGVuIHRob3NlIHZhcmlhYmxlcyBhcmUgb25seSB1c2VkIG9uY2VcbiAqICAgICBhbmQgdGhlIGlubGluaW5nIGlzIHNlbWFudGljYWxseSBzYWZlLlxuICpcbiAqIFRvIGd1YXJhbnRlZSBjb3JyZWN0bmVzcywgYW5hbHlzaXMgb2YgXCJmZW5jZXNcIiBpbiB0aGUgaW5zdHJ1Y3Rpb24gbGlzdHMgaXMgdXNlZCB0byBkZXRlcm1pbmVcbiAqIHdoaWNoIG9wdGltaXphdGlvbnMgYXJlIHNhZmUgdG8gcGVyZm9ybS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wdGltaXplVmFyaWFibGVzKGpvYjogQ29tcGlsYXRpb25Kb2IpOiB2b2lkIHtcbiAgZm9yIChjb25zdCB1bml0IG9mIGpvYi51bml0cykge1xuICAgIGlubGluZUFsd2F5c0lubGluZVZhcmlhYmxlcyh1bml0LmNyZWF0ZSk7XG4gICAgaW5saW5lQWx3YXlzSW5saW5lVmFyaWFibGVzKHVuaXQudXBkYXRlKTtcblxuICAgIGZvciAoY29uc3Qgb3Agb2YgdW5pdC5jcmVhdGUpIHtcbiAgICAgIGlmIChvcC5raW5kID09PSBpci5PcEtpbmQuTGlzdGVuZXIgfHwgb3Aua2luZCA9PT0gaXIuT3BLaW5kLlR3b1dheUxpc3RlbmVyKSB7XG4gICAgICAgIGlubGluZUFsd2F5c0lubGluZVZhcmlhYmxlcyhvcC5oYW5kbGVyT3BzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvcHRpbWl6ZVZhcmlhYmxlc0luT3BMaXN0KHVuaXQuY3JlYXRlLCBqb2IuY29tcGF0aWJpbGl0eSk7XG4gICAgb3B0aW1pemVWYXJpYWJsZXNJbk9wTGlzdCh1bml0LnVwZGF0ZSwgam9iLmNvbXBhdGliaWxpdHkpO1xuXG4gICAgZm9yIChjb25zdCBvcCBvZiB1bml0LmNyZWF0ZSkge1xuICAgICAgaWYgKG9wLmtpbmQgPT09IGlyLk9wS2luZC5MaXN0ZW5lciB8fCBvcC5raW5kID09PSBpci5PcEtpbmQuVHdvV2F5TGlzdGVuZXIpIHtcbiAgICAgICAgb3B0aW1pemVWYXJpYWJsZXNJbk9wTGlzdChvcC5oYW5kbGVyT3BzLCBqb2IuY29tcGF0aWJpbGl0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSBbZmVuY2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01lbW9yeV9iYXJyaWVyKSBmbGFnIGZvciBhbiBleHByZXNzaW9uIHdoaWNoIGluZGljYXRlc1xuICogaG93IHRoYXQgZXhwcmVzc2lvbiBjYW4gYmUgb3B0aW1pemVkIGluIHJlbGF0aW9uIHRvIG90aGVyIGV4cHJlc3Npb25zIG9yIGluc3RydWN0aW9ucy5cbiAqXG4gKiBgRmVuY2VgcyBhcmUgYSBiaXRmaWVsZCwgc28gbXVsdGlwbGUgZmxhZ3MgbWF5IGJlIHNldCBvbiBhIHNpbmdsZSBleHByZXNzaW9uLlxuICovXG5lbnVtIEZlbmNlIHtcbiAgLyoqXG4gICAqIEVtcHR5IGZsYWcgKG5vIGZlbmNlIGV4aXN0cykuXG4gICAqL1xuICBOb25lID0gMGIwMDAsXG5cbiAgLyoqXG4gICAqIEEgY29udGV4dCByZWFkIGZlbmNlLCBtZWFuaW5nIHRoYXQgdGhlIGV4cHJlc3Npb24gaW4gcXVlc3Rpb24gcmVhZHMgZnJvbSB0aGUgXCJjdXJyZW50IHZpZXdcIlxuICAgKiBjb250ZXh0IG9mIHRoZSBydW50aW1lLlxuICAgKi9cbiAgVmlld0NvbnRleHRSZWFkID0gMGIwMDEsXG5cbiAgLyoqXG4gICAqIEEgY29udGV4dCB3cml0ZSBmZW5jZSwgbWVhbmluZyB0aGF0IHRoZSBleHByZXNzaW9uIGluIHF1ZXN0aW9uIHdyaXRlcyB0byB0aGUgXCJjdXJyZW50IHZpZXdcIlxuICAgKiBjb250ZXh0IG9mIHRoZSBydW50aW1lLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgYWxsIGBDb250ZXh0V3JpdGVgIGZlbmNlcyBhcmUgaW1wbGljaXRseSBgQ29udGV4dFJlYWRgIGZlbmNlcyBhcyBvcGVyYXRpb25zIHdoaWNoXG4gICAqIGNoYW5nZSB0aGUgdmlldyBjb250ZXh0IGRvIHNvIGJhc2VkIG9uIHRoZSBjdXJyZW50IG9uZS5cbiAgICovXG4gIFZpZXdDb250ZXh0V3JpdGUgPSAwYjAxMCxcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgYSBjYWxsIGlzIHJlcXVpcmVkIGZvciBpdHMgc2lkZS1lZmZlY3RzLCBldmVuIGlmIG5vdGhpbmcgcmVhZHMgaXRzIHJlc3VsdC5cbiAgICpcbiAgICogVGhpcyBpcyBhbHNvIHRydWUgb2YgYFZpZXdDb250ZXh0V3JpdGVgIG9wZXJhdGlvbnMgKippZioqIHRoZXkgYXJlIGZvbGxvd2VkIGJ5IGFcbiAgICogYFZpZXdDb250ZXh0UmVhZGAuXG4gICAqL1xuICBTaWRlRWZmZWN0ZnVsID0gMGIxMDAsXG59XG5cbi8qKlxuICogU3VtbWFyeSBkYXRhIGNvbGxlY3RlZCBmb3IgZWFjaCBgT3BgIGluIGEgbGlzdC5cbiAqXG4gKiBUcmFja2luZyB0aGlzIGRhdGEgcGVyIG9wZXJhdGlvbiBhbGxvd3MgdGhlIG9wdGltaXplciB0byBwcm9jZXNzIG9wZXJhdGlvbnMgYXQgYSBoaWdoZXIgbGV2ZWxcbiAqIHRoYW4gYWx3YXlzIHNjYW5uaW5nIGV4cHJlc3Npb25zLlxuICovXG5pbnRlcmZhY2UgT3BJbmZvIHtcbiAgLyoqXG4gICAqIEEgYFNldGAgb2YgdmFyaWFibGVzIHJlZmVyZW5jZWQgYnkgZXhwcmVzc2lvbnMgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAqL1xuICB2YXJpYWJsZXNVc2VkOiBTZXQ8aXIuWHJlZklkPjtcblxuICAvKipcbiAgICogRmxhZ3MgaW5kaWNhdGluZyBhbnkgYEZlbmNlYHMgcHJlc2VudCBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAqL1xuICBmZW5jZXM6IEZlbmNlO1xufVxuXG5mdW5jdGlvbiBpbmxpbmVBbHdheXNJbmxpbmVWYXJpYWJsZXMob3BzOiBpci5PcExpc3Q8aXIuQ3JlYXRlT3AgfCBpci5VcGRhdGVPcD4pOiB2b2lkIHtcbiAgY29uc3QgdmFycyA9IG5ldyBNYXA8aXIuWHJlZklkLCBpci5WYXJpYWJsZU9wPGlyLkNyZWF0ZU9wIHwgaXIuVXBkYXRlT3A+PigpO1xuICBmb3IgKGNvbnN0IG9wIG9mIG9wcykge1xuICAgIGlmIChvcC5raW5kID09PSBpci5PcEtpbmQuVmFyaWFibGUgJiYgb3AuZmxhZ3MgJiBpci5WYXJpYWJsZUZsYWdzLkFsd2F5c0lubGluZSkge1xuICAgICAgaXIudmlzaXRFeHByZXNzaW9uc0luT3Aob3AsIChleHByKSA9PiB7XG4gICAgICAgIGlmIChpci5pc0lyRXhwcmVzc2lvbihleHByKSAmJiBmZW5jZXNGb3JJckV4cHJlc3Npb24oZXhwcikgIT09IEZlbmNlLk5vbmUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbkVycm9yOiBBIGNvbnRleHQtc2Vuc2l0aXZlIHZhcmlhYmxlIHdhcyBtYXJrZWQgQWx3YXlzSW5saW5lYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFycy5zZXQob3AueHJlZiwgb3ApO1xuICAgIH1cblxuICAgIGlyLnRyYW5zZm9ybUV4cHJlc3Npb25zSW5PcChcbiAgICAgIG9wLFxuICAgICAgKGV4cHIpID0+IHtcbiAgICAgICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBpci5SZWFkVmFyaWFibGVFeHByICYmIHZhcnMuaGFzKGV4cHIueHJlZikpIHtcbiAgICAgICAgICBjb25zdCB2YXJPcCA9IHZhcnMuZ2V0KGV4cHIueHJlZikhO1xuICAgICAgICAgIC8vIElubGluZSBieSBjbG9uaW5nLCBiZWNhdXNlIHdlIG1pZ2h0IGlubGluZSBpbnRvIG11bHRpcGxlIHBsYWNlcy5cbiAgICAgICAgICByZXR1cm4gdmFyT3AuaW5pdGlhbGl6ZXIuY2xvbmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICAgIH0sXG4gICAgICBpci5WaXNpdG9yQ29udGV4dEZsYWcuTm9uZSxcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBvcCBvZiB2YXJzLnZhbHVlcygpKSB7XG4gICAgaXIuT3BMaXN0LnJlbW92ZShvcCBhcyBpci5DcmVhdGVPcCB8IGlyLlVwZGF0ZU9wKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb2Nlc3MgYSBsaXN0IG9mIG9wZXJhdGlvbnMgYW5kIG9wdGltaXplIHZhcmlhYmxlcyB3aXRoaW4gdGhhdCBsaXN0LlxuICovXG5mdW5jdGlvbiBvcHRpbWl6ZVZhcmlhYmxlc0luT3BMaXN0KFxuICBvcHM6IGlyLk9wTGlzdDxpci5DcmVhdGVPcCB8IGlyLlVwZGF0ZU9wPixcbiAgY29tcGF0aWJpbGl0eTogaXIuQ29tcGF0aWJpbGl0eU1vZGUsXG4pOiB2b2lkIHtcbiAgY29uc3QgdmFyRGVjbHMgPSBuZXcgTWFwPGlyLlhyZWZJZCwgaXIuVmFyaWFibGVPcDxpci5DcmVhdGVPcCB8IGlyLlVwZGF0ZU9wPj4oKTtcbiAgY29uc3QgdmFyVXNhZ2VzID0gbmV3IE1hcDxpci5YcmVmSWQsIG51bWJlcj4oKTtcblxuICAvLyBUcmFjayB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBpbW1lZGlhdGUgb3BlcmF0aW9uIGxpc3QuIEZvciBleGFtcGxlLCB3aXRoaW5cbiAgLy8gYExpc3RlbmVyT3BgIGhhbmRsZXIgb3BlcmF0aW9ucyBvZiBsaXN0ZW5lcnMgaW4gdGhlIGN1cnJlbnQgb3BlcmF0aW9uIGxpc3QuXG4gIGNvbnN0IHZhclJlbW90ZVVzYWdlcyA9IG5ldyBTZXQ8aXIuWHJlZklkPigpO1xuICBjb25zdCBvcE1hcCA9IG5ldyBNYXA8aXIuQ3JlYXRlT3AgfCBpci5VcGRhdGVPcCwgT3BJbmZvPigpO1xuXG4gIC8vIEZpcnN0LCBleHRyYWN0IGluZm9ybWF0aW9uIGFib3V0IHZhcmlhYmxlcyBkZWNsYXJlZCBvciB1c2VkIHdpdGhpbiB0aGUgd2hvbGUgbGlzdC5cbiAgZm9yIChjb25zdCBvcCBvZiBvcHMpIHtcbiAgICBpZiAob3Aua2luZCA9PT0gaXIuT3BLaW5kLlZhcmlhYmxlKSB7XG4gICAgICBpZiAodmFyRGVjbHMuaGFzKG9wLnhyZWYpIHx8IHZhclVzYWdlcy5oYXMob3AueHJlZikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaG91bGQgbm90IHNlZSB0d28gZGVjbGFyYXRpb25zIG9mIHRoZSBzYW1lIHZhcmlhYmxlOiAke29wLnhyZWZ9YCk7XG4gICAgICB9XG4gICAgICB2YXJEZWNscy5zZXQob3AueHJlZiwgb3ApO1xuICAgICAgdmFyVXNhZ2VzLnNldChvcC54cmVmLCAwKTtcbiAgICB9XG5cbiAgICBvcE1hcC5zZXQob3AsIGNvbGxlY3RPcEluZm8ob3ApKTtcbiAgICBjb3VudFZhcmlhYmxlVXNhZ2VzKG9wLCB2YXJVc2FnZXMsIHZhclJlbW90ZVVzYWdlcyk7XG4gIH1cblxuICAvLyBUaGUgbmV4dCBzdGVwIGlzIHRvIHJlbW92ZSBhbnkgdmFyaWFibGUgZGVjbGFyYXRpb25zIGZvciB2YXJpYWJsZXMgdGhhdCBhcmVuJ3QgdXNlZC4gVGhlXG4gIC8vIHZhcmlhYmxlIGluaXRpYWxpemVyIGV4cHJlc3Npb25zIG1heSBiZSBzaWRlLWVmZmVjdGZ1bCwgc28gdGhleSBtYXkgbmVlZCB0byBiZSByZXRhaW5lZCBhc1xuICAvLyBleHByZXNzaW9uIHN0YXRlbWVudHMuXG5cbiAgLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBzZWVuIGFuIG9wZXJhdGlvbiB3aGljaCByZWFkcyBmcm9tIHRoZSB2aWV3IGNvbnRleHQgeWV0LiBUaGlzIGlzIHVzZWQgdG9cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgYSB3cml0ZSB0byB0aGUgdmlldyBjb250ZXh0IGluIGEgdmFyaWFibGUgaW5pdGlhbGl6ZXIgY2FuIGJlIG9ic2VydmVkLlxuICBsZXQgY29udGV4dElzVXNlZCA9IGZhbHNlO1xuXG4gIC8vIE5vdGUgdGhhdCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgbGlzdCBoYXBwZW5zIGluIHJldmVyc2UsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB3ZSdsbCBwcm9jZXNzXG4gIC8vIGFsbCByZWFkcyBvZiBhIHZhcmlhYmxlIHByaW9yIHRvIHByb2Nlc3NpbmcgaXRzIGRlY2xhcmF0aW9uLlxuICBmb3IgKGNvbnN0IG9wIG9mIG9wcy5yZXZlcnNlZCgpKSB7XG4gICAgY29uc3Qgb3BJbmZvID0gb3BNYXAuZ2V0KG9wKSE7XG5cbiAgICBpZiAob3Aua2luZCA9PT0gaXIuT3BLaW5kLlZhcmlhYmxlICYmIHZhclVzYWdlcy5nZXQob3AueHJlZikhID09PSAwKSB7XG4gICAgICAvLyBUaGlzIHZhcmlhYmxlIGlzIHVudXNlZCBhbmQgY2FuIGJlIHJlbW92ZWQuIFdlIG1pZ2h0IG5lZWQgdG8ga2VlcCB0aGUgaW5pdGlhbGl6ZXIgYXJvdW5kLFxuICAgICAgLy8gdGhvdWdoLCBpZiBzb21ldGhpbmcgZGVwZW5kcyBvbiBpdCBydW5uaW5nLlxuICAgICAgaWYgKFxuICAgICAgICAoY29udGV4dElzVXNlZCAmJiBvcEluZm8uZmVuY2VzICYgRmVuY2UuVmlld0NvbnRleHRXcml0ZSkgfHxcbiAgICAgICAgb3BJbmZvLmZlbmNlcyAmIEZlbmNlLlNpZGVFZmZlY3RmdWxcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIHZhcmlhYmxlIGluaXRpYWxpemVyIGhhcyBhIHNpZGUgZWZmZWN0IHdoaWNoIG11c3QgYmUgcmV0YWluZWQuIEVpdGhlcjpcbiAgICAgICAgLy8gICogaXQgd3JpdGVzIHRvIHRoZSB2aWV3IGNvbnRleHQsIGFuZCB3ZSBrbm93IHRoZXJlIGlzIGEgZnV0dXJlIG9wZXJhdGlvbiB3aGljaCBkZXBlbmRzXG4gICAgICAgIC8vICAgIG9uIHRoYXQgd3JpdGUsIG9yXG4gICAgICAgIC8vICAqIGl0J3MgYW4gb3BlcmF0aW9uIHdoaWNoIGlzIGluaGVyZW50bHkgc2lkZS1lZmZlY3RmdWwuXG4gICAgICAgIC8vIFdlIGNhbid0IHJlbW92ZSB0aGUgaW5pdGlhbGl6ZXIsIGJ1dCB3ZSBjYW4gcmVtb3ZlIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpdHNlbGYgYW5kXG4gICAgICAgIC8vIHJlcGxhY2UgaXQgd2l0aCBhIHNpZGUtZWZmZWN0ZnVsIHN0YXRlbWVudC5cbiAgICAgICAgY29uc3Qgc3RtdE9wID0gaXIuY3JlYXRlU3RhdGVtZW50T3Aob3AuaW5pdGlhbGl6ZXIudG9TdG10KCkpIGFzIGlyLlVwZGF0ZU9wO1xuICAgICAgICBvcE1hcC5zZXQoc3RtdE9wLCBvcEluZm8pO1xuICAgICAgICBpci5PcExpc3QucmVwbGFjZShvcCBhcyBpci5VcGRhdGVPcCwgc3RtdE9wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEl0J3Mgc2FmZSB0byBkZWxldGUgdGhpcyBlbnRpcmUgdmFyaWFibGUgZGVjbGFyYXRpb24gYXMgbm90aGluZyBkZXBlbmRzIG9uIGl0LCBldmVuXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0ZnVsbHkuIE5vdGUgdGhhdCBkb2luZyB0aGlzIG1pZ2h0IG1ha2Ugb3RoZXIgdmFyaWFibGVzIHVudXNlZC4gU2luY2Ugd2UncmVcbiAgICAgICAgLy8gaXRlcmF0aW5nIGluIHJldmVyc2Ugb3JkZXIsIHdlIHNob3VsZCBhbHdheXMgYmUgcHJvY2Vzc2luZyB1c2FnZXMgYmVmb3JlIGRlY2xhcmF0aW9uc1xuICAgICAgICAvLyBhbmQgdGhlcmVmb3JlIGJ5IHRoZSB0aW1lIHdlIGdldCB0byBhIGRlY2xhcmF0aW9uLCBhbGwgcmVtb3ZhYmxlIHVzYWdlcyB3aWxsIGhhdmUgYmVlblxuICAgICAgICAvLyByZW1vdmVkLlxuICAgICAgICB1bmNvdW50VmFyaWFibGVVc2FnZXMob3AsIHZhclVzYWdlcyk7XG4gICAgICAgIGlyLk9wTGlzdC5yZW1vdmUob3AgYXMgaXIuVXBkYXRlT3ApO1xuICAgICAgfVxuXG4gICAgICBvcE1hcC5kZWxldGUob3ApO1xuICAgICAgdmFyRGVjbHMuZGVsZXRlKG9wLnhyZWYpO1xuICAgICAgdmFyVXNhZ2VzLmRlbGV0ZShvcC54cmVmKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIERvZXMgdGhpcyBvcGVyYXRpb24gZGVwZW5kIG9uIHRoZSB2aWV3IGNvbnRleHQ/XG4gICAgaWYgKG9wSW5mby5mZW5jZXMgJiBGZW5jZS5WaWV3Q29udGV4dFJlYWQpIHtcbiAgICAgIGNvbnRleHRJc1VzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5leHQsIGlubGluZSBhbnkgcmVtYWluaW5nIHZhcmlhYmxlcyB3aXRoIGV4YWN0bHkgb25lIHVzYWdlLlxuICBjb25zdCB0b0lubGluZTogaXIuWHJlZklkW10gPSBbXTtcbiAgZm9yIChjb25zdCBbaWQsIGNvdW50XSBvZiB2YXJVc2FnZXMpIHtcbiAgICBjb25zdCBkZWNsID0gdmFyRGVjbHMuZ2V0KGlkKSE7XG4gICAgLy8gV2UgY2FuIGlubGluZSB2YXJpYWJsZXMgdGhhdDpcbiAgICAvLyAgLSBhcmUgdXNlZCBleGFjdGx5IG9uY2UsIGFuZFxuICAgIC8vICAtIGFyZSBub3QgdXNlZCByZW1vdGVseVxuICAgIC8vIE9SXG4gICAgLy8gIC0gYXJlIG1hcmtlZCBmb3IgYWx3YXlzIGlubGluaW5nXG4gICAgY29uc3QgaXNBbHdheXNJbmxpbmUgPSAhIShkZWNsLmZsYWdzICYgaXIuVmFyaWFibGVGbGFncy5BbHdheXNJbmxpbmUpO1xuICAgIGlmIChjb3VudCAhPT0gMSB8fCBpc0Fsd2F5c0lubGluZSkge1xuICAgICAgLy8gV2UgY2FuJ3QgaW5saW5lIHRoaXMgdmFyaWFibGUgYXMgaXQncyB1c2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhclJlbW90ZVVzYWdlcy5oYXMoaWQpKSB7XG4gICAgICAvLyBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgb25jZSwgYnV0IGFjcm9zcyBhbiBvcGVyYXRpb24gYm91bmRhcnksIHNvIGl0IGNhbid0IGJlIGlubGluZWQuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB0b0lubGluZS5wdXNoKGlkKTtcbiAgfVxuXG4gIGxldCBjYW5kaWRhdGU6IGlyLlhyZWZJZCB8IHVuZGVmaW5lZDtcbiAgd2hpbGUgKChjYW5kaWRhdGUgPSB0b0lubGluZS5wb3AoKSkpIHtcbiAgICAvLyBXZSB3aWxsIGF0dGVtcHQgdG8gaW5saW5lIHRoaXMgdmFyaWFibGUuIElmIGlubGluaW5nIGZhaWxzIChkdWUgdG8gZmVuY2VzIGZvciBleGFtcGxlKSxcbiAgICAvLyBubyBmdXR1cmUgb3BlcmF0aW9uIHdpbGwgbWFrZSBpbmxpbmluZyBsZWdhbC5cbiAgICBjb25zdCBkZWNsID0gdmFyRGVjbHMuZ2V0KGNhbmRpZGF0ZSkhO1xuICAgIGNvbnN0IHZhckluZm8gPSBvcE1hcC5nZXQoZGVjbCBhcyBpci5DcmVhdGVPcCB8IGlyLlVwZGF0ZU9wKSE7XG4gICAgY29uc3QgaXNBbHdheXNJbmxpbmUgPSAhIShkZWNsLmZsYWdzICYgaXIuVmFyaWFibGVGbGFncy5BbHdheXNJbmxpbmUpO1xuXG4gICAgaWYgKGlzQWx3YXlzSW5saW5lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBc3NlcnRpb25FcnJvcjogRm91bmQgYW4gJ0Fsd2F5c0lubGluZScgdmFyaWFibGUgYWZ0ZXIgdGhlIGFsd2F5cyBpbmxpbmluZyBwYXNzLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFNjYW4gb3BlcmF0aW9ucyBmb2xsb3dpbmcgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGFuZCBsb29rIGZvciB0aGUgcG9pbnQgd2hlcmUgdGhhdCB2YXJpYWJsZVxuICAgIC8vIGlzIHVzZWQuIFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSB1c2FnZSBnaXZlbiB0aGUgcHJlY29uZGl0aW9uIGFib3ZlLlxuICAgIGZvciAoXG4gICAgICBsZXQgdGFyZ2V0T3AgPSBkZWNsLm5leHQhO1xuICAgICAgdGFyZ2V0T3Aua2luZCAhPT0gaXIuT3BLaW5kLkxpc3RFbmQ7XG4gICAgICB0YXJnZXRPcCA9IHRhcmdldE9wLm5leHQhXG4gICAgKSB7XG4gICAgICBjb25zdCBvcEluZm8gPSBvcE1hcC5nZXQodGFyZ2V0T3ApITtcblxuICAgICAgLy8gSXMgdGhlIHZhcmlhYmxlIHVzZWQgaW4gdGhpcyBvcGVyYXRpb24/XG4gICAgICBpZiAob3BJbmZvLnZhcmlhYmxlc1VzZWQuaGFzKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbXBhdGliaWxpdHkgPT09IGlyLkNvbXBhdGliaWxpdHlNb2RlLlRlbXBsYXRlRGVmaW5pdGlvbkJ1aWxkZXIgJiZcbiAgICAgICAgICAhYWxsb3dDb25zZXJ2YXRpdmVJbmxpbmluZyhkZWNsLCB0YXJnZXRPcClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gV2UncmUgaW4gY29uc2VydmF0aXZlIG1vZGUsIGFuZCB0aGlzIHZhcmlhYmxlIGlzIG5vdCBlbGlnaWJsZSBmb3IgaW5saW5pbmcgaW50byB0aGVcbiAgICAgICAgICAvLyB0YXJnZXQgb3BlcmF0aW9uIGluIHRoaXMgbW9kZS5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFllcywgdHJ5IHRvIGlubGluZSBpdC4gSW5saW5pbmcgbWF5IG5vdCBiZSBzdWNjZXNzZnVsIGlmIGZlbmNlcyBpbiB0aGlzIG9wZXJhdGlvbiBiZWZvcmVcbiAgICAgICAgLy8gdGhlIHZhcmlhYmxlJ3MgdXNhZ2UgY2Fubm90IGJlIHNhZmVseSBjcm9zc2VkLlxuICAgICAgICBpZiAodHJ5SW5saW5lVmFyaWFibGVJbml0aWFsaXplcihjYW5kaWRhdGUsIGRlY2wuaW5pdGlhbGl6ZXIsIHRhcmdldE9wLCB2YXJJbmZvLmZlbmNlcykpIHtcbiAgICAgICAgICAvLyBJbmxpbmluZyB3YXMgc3VjY2Vzc2Z1bCEgVXBkYXRlIHRoZSB0cmFja2luZyBzdHJ1Y3R1cmVzIHRvIHJlZmxlY3QgdGhlIGlubGluZWRcbiAgICAgICAgICAvLyB2YXJpYWJsZS5cbiAgICAgICAgICBvcEluZm8udmFyaWFibGVzVXNlZC5kZWxldGUoY2FuZGlkYXRlKTtcblxuICAgICAgICAgIC8vIEFkZCBhbGwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHZhcmlhYmxlJ3MgaW5pdGlhbGl6ZXIgdG8gaXRzIG5ldyB1c2FnZSBzaXRlLlxuICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgdmFySW5mby52YXJpYWJsZXNVc2VkKSB7XG4gICAgICAgICAgICBvcEluZm8udmFyaWFibGVzVXNlZC5hZGQoaWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1lcmdlIGZlbmNlcyBpbiB0aGUgdmFyaWFibGUncyBpbml0aWFsaXplciBpbnRvIGl0cyBuZXcgdXNhZ2Ugc2l0ZS5cbiAgICAgICAgICBvcEluZm8uZmVuY2VzIHw9IHZhckluZm8uZmVuY2VzO1xuXG4gICAgICAgICAgLy8gRGVsZXRlIHRyYWNraW5nIGluZm8gcmVsYXRlZCB0byB0aGUgZGVjbGFyYXRpb24uXG4gICAgICAgICAgdmFyRGVjbHMuZGVsZXRlKGNhbmRpZGF0ZSk7XG4gICAgICAgICAgdmFyVXNhZ2VzLmRlbGV0ZShjYW5kaWRhdGUpO1xuICAgICAgICAgIG9wTWFwLmRlbGV0ZShkZWNsIGFzIGlyLkNyZWF0ZU9wIHwgaXIuVXBkYXRlT3ApO1xuXG4gICAgICAgICAgLy8gQW5kIGZpbmFsbHksIGRlbGV0ZSB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gZnJvbSB0aGUgb3BlcmF0aW9uIGxpc3QuXG4gICAgICAgICAgaXIuT3BMaXN0LnJlbW92ZShkZWNsIGFzIGlyLlVwZGF0ZU9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdoZXRoZXIgaW5saW5pbmcgc3VjY2VlZGVkIG9yIGZhaWxlZCwgd2UncmUgZG9uZSBwcm9jZXNzaW5nIHRoaXMgdmFyaWFibGUuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMgbm90IHVzZWQgaW4gdGhpcyBvcGVyYXRpb24sIHRoZW4gd2UnZCBuZWVkIHRvIGlubGluZSBhY3Jvc3MgaXQuIENoZWNrIGlmXG4gICAgICAvLyB0aGF0J3Mgc2FmZSB0byBkby5cbiAgICAgIGlmICghc2FmZVRvSW5saW5lUGFzdEZlbmNlcyhvcEluZm8uZmVuY2VzLCB2YXJJbmZvLmZlbmNlcykpIHtcbiAgICAgICAgLy8gV2UgY2FuJ3Qgc2FmZWx5IGlubGluZSB0aGlzIHZhcmlhYmxlIGJleW9uZCB0aGlzIG9wZXJhdGlvbiwgc28gZG9uJ3QgcHJvY2VlZCB3aXRoXG4gICAgICAgIC8vIGlubGluaW5nIHRoaXMgdmFyaWFibGUuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGFuIGBpci5FeHByZXNzaW9uYCwgcmV0dXJucyB0aGUgYEZlbmNlYCBmbGFncyBmb3IgdGhhdCBleHByZXNzaW9uIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGZlbmNlc0ZvcklyRXhwcmVzc2lvbihleHByOiBpci5FeHByZXNzaW9uKTogRmVuY2Uge1xuICBzd2l0Y2ggKGV4cHIua2luZCkge1xuICAgIGNhc2UgaXIuRXhwcmVzc2lvbktpbmQuTmV4dENvbnRleHQ6XG4gICAgICByZXR1cm4gRmVuY2UuVmlld0NvbnRleHRSZWFkIHwgRmVuY2UuVmlld0NvbnRleHRXcml0ZTtcbiAgICBjYXNlIGlyLkV4cHJlc3Npb25LaW5kLlJlc3RvcmVWaWV3OlxuICAgICAgcmV0dXJuIEZlbmNlLlZpZXdDb250ZXh0UmVhZCB8IEZlbmNlLlZpZXdDb250ZXh0V3JpdGUgfCBGZW5jZS5TaWRlRWZmZWN0ZnVsO1xuICAgIGNhc2UgaXIuRXhwcmVzc2lvbktpbmQuUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIEZlbmNlLlZpZXdDb250ZXh0UmVhZDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEZlbmNlLk5vbmU7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYE9wSW5mb2Agc3RydWN0dXJlIGZvciB0aGUgZ2l2ZW4gYG9wYC4gVGhpcyBwZXJmb3JtcyB0d28gb3BlcmF0aW9uczpcbiAqXG4gKiAgKiBJdCB0cmFja3Mgd2hpY2ggdmFyaWFibGVzIGFyZSB1c2VkIGluIHRoZSBvcGVyYXRpb24ncyBleHByZXNzaW9ucy5cbiAqICAqIEl0IHJvbGxzIHVwIGZlbmNlIGZsYWdzIGZvciBleHByZXNzaW9ucyB3aXRoaW4gdGhlIG9wZXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdE9wSW5mbyhvcDogaXIuQ3JlYXRlT3AgfCBpci5VcGRhdGVPcCk6IE9wSW5mbyB7XG4gIGxldCBmZW5jZXMgPSBGZW5jZS5Ob25lO1xuICBjb25zdCB2YXJpYWJsZXNVc2VkID0gbmV3IFNldDxpci5YcmVmSWQ+KCk7XG4gIGlyLnZpc2l0RXhwcmVzc2lvbnNJbk9wKG9wLCAoZXhwcikgPT4ge1xuICAgIGlmICghaXIuaXNJckV4cHJlc3Npb24oZXhwcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV4cHIua2luZCkge1xuICAgICAgY2FzZSBpci5FeHByZXNzaW9uS2luZC5SZWFkVmFyaWFibGU6XG4gICAgICAgIHZhcmlhYmxlc1VzZWQuYWRkKGV4cHIueHJlZik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZmVuY2VzIHw9IGZlbmNlc0ZvcklyRXhwcmVzc2lvbihleHByKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge2ZlbmNlcywgdmFyaWFibGVzVXNlZH07XG59XG5cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiB1c2FnZXMgb2YgZWFjaCB2YXJpYWJsZSwgYmVpbmcgY2FyZWZ1bCB0byB0cmFjayB3aGV0aGVyIHRob3NlIHVzYWdlcyBhcmVcbiAqIGxvY2FsIG9yIHJlbW90ZS5cbiAqL1xuZnVuY3Rpb24gY291bnRWYXJpYWJsZVVzYWdlcyhcbiAgb3A6IGlyLkNyZWF0ZU9wIHwgaXIuVXBkYXRlT3AsXG4gIHZhclVzYWdlczogTWFwPGlyLlhyZWZJZCwgbnVtYmVyPixcbiAgdmFyUmVtb3RlVXNhZ2U6IFNldDxpci5YcmVmSWQ+LFxuKTogdm9pZCB7XG4gIGlyLnZpc2l0RXhwcmVzc2lvbnNJbk9wKG9wLCAoZXhwciwgZmxhZ3MpID0+IHtcbiAgICBpZiAoIWlyLmlzSXJFeHByZXNzaW9uKGV4cHIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV4cHIua2luZCAhPT0gaXIuRXhwcmVzc2lvbktpbmQuUmVhZFZhcmlhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSB2YXJVc2FnZXMuZ2V0KGV4cHIueHJlZik7XG4gICAgaWYgKGNvdW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgdmFyaWFibGUgaXMgZGVjbGFyZWQgb3V0c2lkZSB0aGUgY3VycmVudCBzY29wZSBvZiBvcHRpbWl6YXRpb24uXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhclVzYWdlcy5zZXQoZXhwci54cmVmLCBjb3VudCArIDEpO1xuXG4gICAgaWYgKGZsYWdzICYgaXIuVmlzaXRvckNvbnRleHRGbGFnLkluQ2hpbGRPcGVyYXRpb24pIHtcbiAgICAgIHZhclJlbW90ZVVzYWdlLmFkZChleHByLnhyZWYpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUmVtb3ZlIHVzYWdlcyBvZiBhIHZhcmlhYmxlIGluIGBvcGAgZnJvbSB0aGUgYHZhclVzYWdlc2AgdHJhY2tpbmcuXG4gKi9cbmZ1bmN0aW9uIHVuY291bnRWYXJpYWJsZVVzYWdlcyhcbiAgb3A6IGlyLkNyZWF0ZU9wIHwgaXIuVXBkYXRlT3AsXG4gIHZhclVzYWdlczogTWFwPGlyLlhyZWZJZCwgbnVtYmVyPixcbik6IHZvaWQge1xuICBpci52aXNpdEV4cHJlc3Npb25zSW5PcChvcCwgKGV4cHIpID0+IHtcbiAgICBpZiAoIWlyLmlzSXJFeHByZXNzaW9uKGV4cHIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV4cHIua2luZCAhPT0gaXIuRXhwcmVzc2lvbktpbmQuUmVhZFZhcmlhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSB2YXJVc2FnZXMuZ2V0KGV4cHIueHJlZik7XG4gICAgaWYgKGNvdW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgdmFyaWFibGUgaXMgZGVjbGFyZWQgb3V0c2lkZSB0aGUgY3VycmVudCBzY29wZSBvZiBvcHRpbWl6YXRpb24uXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW5hY2N1cmF0ZSB2YXJpYWJsZSBjb3VudDogJHtleHByLnhyZWZ9IC0gZm91bmQgYW5vdGhlciByZWFkIGJ1dCBjb3VudCBpcyBhbHJlYWR5IDBgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyVXNhZ2VzLnNldChleHByLnhyZWYsIGNvdW50IC0gMSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGl0J3Mgc2FmZSB0byBpbmxpbmUgYSB2YXJpYWJsZSBhY3Jvc3MgYSBwYXJ0aWN1bGFyIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZmVuY2VzIHRoZSBmZW5jZXMgb2YgdGhlIG9wZXJhdGlvbiB3aGljaCB0aGUgaW5saW5pbmcgd2lsbCBjcm9zc1xuICogQHBhcmFtIGRlY2xGZW5jZXMgdGhlIGZlbmNlcyBvZiB0aGUgdmFyaWFibGUgYmVpbmcgaW5saW5lZC5cbiAqL1xuZnVuY3Rpb24gc2FmZVRvSW5saW5lUGFzdEZlbmNlcyhmZW5jZXM6IEZlbmNlLCBkZWNsRmVuY2VzOiBGZW5jZSk6IGJvb2xlYW4ge1xuICBpZiAoZmVuY2VzICYgRmVuY2UuVmlld0NvbnRleHRXcml0ZSkge1xuICAgIC8vIEl0J3Mgbm90IHNhZmUgdG8gaW5saW5lIGNvbnRleHQgcmVhZHMgYWNyb3NzIGNvbnRleHQgd3JpdGVzLlxuICAgIGlmIChkZWNsRmVuY2VzICYgRmVuY2UuVmlld0NvbnRleHRSZWFkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2UgaWYgKGZlbmNlcyAmIEZlbmNlLlZpZXdDb250ZXh0UmVhZCkge1xuICAgIC8vIEl0J3Mgbm90IHNhZmUgdG8gaW5saW5lIGNvbnRleHQgd3JpdGVzIGFjcm9zcyBjb250ZXh0IHJlYWRzLlxuICAgIGlmIChkZWNsRmVuY2VzICYgRmVuY2UuVmlld0NvbnRleHRXcml0ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBBdHRlbXB0IHRvIGlubGluZSB0aGUgaW5pdGlhbGl6ZXIgb2YgYSB2YXJpYWJsZSBpbnRvIGEgdGFyZ2V0IG9wZXJhdGlvbidzIGV4cHJlc3Npb25zLlxuICpcbiAqIFRoaXMgbWF5IG9yIG1heSBub3QgYmUgc2FmZSB0byBkby4gRm9yIGV4YW1wbGUsIHRoZSB2YXJpYWJsZSBjb3VsZCBiZSByZWFkIGZvbGxvd2luZyB0aGVcbiAqIGV4ZWN1dGlvbiBvZiBhbiBleHByZXNzaW9uIHdpdGggZmVuY2VzIHRoYXQgZG9uJ3QgcGVybWl0IHRoZSB2YXJpYWJsZSB0byBiZSBpbmxpbmVkIGFjcm9zcyB0aGVtLlxuICovXG5mdW5jdGlvbiB0cnlJbmxpbmVWYXJpYWJsZUluaXRpYWxpemVyKFxuICBpZDogaXIuWHJlZklkLFxuICBpbml0aWFsaXplcjogby5FeHByZXNzaW9uLFxuICB0YXJnZXQ6IGlyLkNyZWF0ZU9wIHwgaXIuVXBkYXRlT3AsXG4gIGRlY2xGZW5jZXM6IEZlbmNlLFxuKTogYm9vbGVhbiB7XG4gIC8vIFdlIHVzZSBgaXIudHJhbnNmb3JtRXhwcmVzc2lvbnNJbk9wYCB0byB3YWxrIHRoZSBleHByZXNzaW9ucyBhbmQgaW5saW5lIHRoZSB2YXJpYWJsZSBpZlxuICAvLyBwb3NzaWJsZS4gU2luY2UgdGhpcyBvcGVyYXRpb24gaXMgY2FsbGJhY2stYmFzZWQsIG9uY2UgaW5saW5pbmcgc3VjY2VlZHMgb3IgZmFpbHMgd2UgY2FuJ3RcbiAgLy8gXCJzdG9wXCIgdGhlIGV4cHJlc3Npb24gcHJvY2Vzc2luZywgYW5kIGhhdmUgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGlubGluaW5nIGhhcyBzdWNjZWVkZWQgb3JcbiAgLy8gaXMgbm8gbG9uZ2VyIGFsbG93ZWQuXG4gIGxldCBpbmxpbmVkID0gZmFsc2U7XG4gIGxldCBpbmxpbmluZ0FsbG93ZWQgPSB0cnVlO1xuXG4gIGlyLnRyYW5zZm9ybUV4cHJlc3Npb25zSW5PcChcbiAgICB0YXJnZXQsXG4gICAgKGV4cHIsIGZsYWdzKSA9PiB7XG4gICAgICBpZiAoIWlyLmlzSXJFeHByZXNzaW9uKGV4cHIpKSB7XG4gICAgICAgIHJldHVybiBleHByO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5saW5lZCB8fCAhaW5saW5pbmdBbGxvd2VkKSB7XG4gICAgICAgIC8vIEVpdGhlciB0aGUgaW5saW5pbmcgaGFzIGFscmVhZHkgc3VjY2VlZGVkLCBvciB3ZSd2ZSBwYXNzZWQgYSBmZW5jZSB0aGF0IGRpc2FsbG93cyBpbmxpbmluZ1xuICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBzbyBkb24ndCB0cnkuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZmxhZ3MgJiBpci5WaXNpdG9yQ29udGV4dEZsYWcuSW5DaGlsZE9wZXJhdGlvbiAmJlxuICAgICAgICBkZWNsRmVuY2VzICYgRmVuY2UuVmlld0NvbnRleHRSZWFkXG4gICAgICApIHtcbiAgICAgICAgLy8gV2UgY2Fubm90IGlubGluZSB2YXJpYWJsZXMgdGhhdCBhcmUgc2Vuc2l0aXZlIHRvIHRoZSBjdXJyZW50IGNvbnRleHQgYWNyb3NzIG9wZXJhdGlvblxuICAgICAgICAvLyBib3VuZGFyaWVzLlxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChleHByLmtpbmQpIHtcbiAgICAgICAgY2FzZSBpci5FeHByZXNzaW9uS2luZC5SZWFkVmFyaWFibGU6XG4gICAgICAgICAgaWYgKGV4cHIueHJlZiA9PT0gaWQpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHVzYWdlIHNpdGUgb2YgdGhlIHZhcmlhYmxlLiBTaW5jZSBub3RoaW5nIGhhcyBkaXNhbGxvd2VkIGlubGluaW5nLCBpdCdzXG4gICAgICAgICAgICAvLyBzYWZlIHRvIGlubGluZSB0aGUgaW5pdGlhbGl6ZXIgaGVyZS5cbiAgICAgICAgICAgIGlubGluZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxpemVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBGb3Igb3RoZXIgdHlwZXMgb2YgYGlyLkV4cHJlc3Npb25gcywgd2hldGhlciBpbmxpbmluZyBpcyBhbGxvd2VkIGRlcGVuZHMgb24gdGhlaXIgZmVuY2VzLlxuICAgICAgICAgIGNvbnN0IGV4cHJGZW5jZXMgPSBmZW5jZXNGb3JJckV4cHJlc3Npb24oZXhwcik7XG4gICAgICAgICAgaW5saW5pbmdBbGxvd2VkID0gaW5saW5pbmdBbGxvd2VkICYmIHNhZmVUb0lubGluZVBhc3RGZW5jZXMoZXhwckZlbmNlcywgZGVjbEZlbmNlcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhwcjtcbiAgICB9LFxuICAgIGlyLlZpc2l0b3JDb250ZXh0RmxhZy5Ob25lLFxuICApO1xuICByZXR1cm4gaW5saW5lZDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgaW5saW5pbmcgb2YgYGRlY2xgIHNob3VsZCBiZSBhbGxvd2VkIGluIFwiY29uc2VydmF0aXZlXCIgbW9kZS5cbiAqXG4gKiBJbiBjb25zZXJ2YXRpdmUgbW9kZSwgaW5saW5pbmcgYmVoYXZpb3IgaXMgbGltaXRlZCB0byB0aG9zZSBvcGVyYXRpb25zIHdoaWNoIHRoZVxuICogYFRlbXBsYXRlRGVmaW5pdGlvbkJ1aWxkZXJgIHN1cHBvcnRlZCwgd2l0aCB0aGUgZ29hbCBvZiBwcm9kdWNpbmcgZXF1aXZhbGVudCBvdXRwdXQuXG4gKi9cbmZ1bmN0aW9uIGFsbG93Q29uc2VydmF0aXZlSW5saW5pbmcoXG4gIGRlY2w6IGlyLlZhcmlhYmxlT3A8aXIuQ3JlYXRlT3AgfCBpci5VcGRhdGVPcD4sXG4gIHRhcmdldDogaXIuT3A8aXIuQ3JlYXRlT3AgfCBpci5VcGRhdGVPcD4sXG4pOiBib29sZWFuIHtcbiAgLy8gVE9ETyhhbHhodWIpOiB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IFRlbXBsYXRlRGVmaW5pdGlvbkJ1aWxkZXIgYXBwcm9hY2hlcyBpbmxpbmluZywgYW5kIHJlY29yZFxuICAvLyB0aGF0IGJlaGF2aW9yIGhlcmUuXG4gIHN3aXRjaCAoZGVjbC52YXJpYWJsZS5raW5kKSB7XG4gICAgY2FzZSBpci5TZW1hbnRpY1ZhcmlhYmxlS2luZC5JZGVudGlmaWVyOlxuICAgICAgaWYgKGRlY2wuaW5pdGlhbGl6ZXIgaW5zdGFuY2VvZiBvLlJlYWRWYXJFeHByICYmIGRlY2wuaW5pdGlhbGl6ZXIubmFtZSA9PT0gJ2N0eCcpIHtcbiAgICAgICAgLy8gQWx0aG91Z2ggVGVtcGxhdGVEZWZpbml0aW9uQnVpbGRlciBpcyBjYXV0aW91cyBhYm91dCBpbmxpbmluZywgd2Ugc3RpbGwgd2FudCB0byBkbyBzb1xuICAgICAgICAvLyB3aGVuIHRoZSB2YXJpYWJsZSBpcyB0aGUgY29udGV4dCwgdG8gaW1pdGF0ZSBpdHMgYmVoYXZpb3Igd2l0aCBhbGlhc2VzIGluIGNvbnRyb2wgZmxvd1xuICAgICAgICAvLyBibG9ja3MuIFRoaXMgcXVpcmt5IGJlaGF2aW9yIHdpbGwgYmVjb21lIGRlYWQgY29kZSBvbmNlIGNvbXBhdGliaWxpdHkgbW9kZSBpcyBubyBsb25nZXJcbiAgICAgICAgLy8gc3VwcG9ydGVkLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjYXNlIGlyLlNlbWFudGljVmFyaWFibGVLaW5kLkNvbnRleHQ6XG4gICAgICAvLyBDb250ZXh0IGNhbiBvbmx5IGJlIGlubGluZWQgaW50byBvdGhlciB2YXJpYWJsZXMuXG4gICAgICByZXR1cm4gdGFyZ2V0LmtpbmQgPT09IGlyLk9wS2luZC5WYXJpYWJsZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -38,4 +38,4 @@ export function wrapI18nIcus(job) {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcF9pY3VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3RlbXBsYXRlL3BpcGVsaW5lL3NyYy9waGFzZXMvd3JhcF9pY3VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRy9COztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFtQjtJQUM5QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLGFBQWEsR0FBMEIsSUFBSSxDQUFDO1FBQ2hELElBQUksV0FBVyxHQUFxQixJQUFJLENBQUM7UUFDekMsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTO29CQUN0QixhQUFhLEdBQUcsRUFBRSxDQUFDO29CQUNuQixNQUFNO2dCQUNSLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPO29CQUNwQixhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUNyQixNQUFNO2dCQUNSLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRO29CQUNyQixJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUUsQ0FBQzt3QkFDM0IsV0FBVyxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDbkMsMERBQTBEO3dCQUMxRCxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FDcEIsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFDOUQsRUFBRSxDQUNILENBQUM7b0JBQ0osQ0FBQztvQkFDRCxNQUFNO2dCQUNSLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNO29CQUNuQixJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQzt3QkFDekIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQWMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQzlFLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ3JCLENBQUM7b0JBQ0QsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgaXIgZnJvbSAnLi4vLi4vaXInO1xuaW1wb3J0IHtDb21waWxhdGlvbkpvYn0gZnJvbSAnLi4vY29tcGlsYXRpb24nO1xuXG4vKipcbiAqIFdyYXBzIElDVXMgdGhhdCBkbyBub3QgYWxyZWFkeSBiZWxvbmcgdG8gYW4gaTE4biBibG9jayBpbiBhIG5ldyBpMThuIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcEkxOG5JY3VzKGpvYjogQ29tcGlsYXRpb25Kb2IpOiB2b2lkIHtcbiAgZm9yIChjb25zdCB1bml0IG9mIGpvYi51bml0cykge1xuICAgIGxldCBjdXJyZW50STE4bk9wOiBpci5JMThuU3RhcnRPcCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBhZGRlZEkxOG5JZDogaXIuWHJlZklkIHwgbnVsbCA9IG51bGw7XG4gICAgZm9yIChjb25zdCBvcCBvZiB1bml0LmNyZWF0ZSkge1xuICAgICAgc3dpdGNoIChvcC5raW5kKSB7XG4gICAgICAgIGNhc2UgaXIuT3BLaW5kLkkxOG5TdGFydDpcbiAgICAgICAgICBjdXJyZW50STE4bk9wID0gb3A7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgaXIuT3BLaW5kLkkxOG5FbmQ6XG4gICAgICAgICAgY3VycmVudEkxOG5PcCA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgaXIuT3BLaW5kLkljdVN0YXJ0OlxuICAgICAgICAgIGlmIChjdXJyZW50STE4bk9wID09PSBudWxsKSB7XG4gICAgICAgICAgICBhZGRlZEkxOG5JZCA9IGpvYi5hbGxvY2F0ZVhyZWZJZCgpO1xuICAgICAgICAgICAgLy8gSUNVIGkxOG4gc3RhcnQvZW5kIG9wcyBzaG91bGQgbm90IHJlY2VpdmUgc291cmNlIHNwYW5zLlxuICAgICAgICAgICAgaXIuT3BMaXN0Lmluc2VydEJlZm9yZTxpci5DcmVhdGVPcD4oXG4gICAgICAgICAgICAgIGlyLmNyZWF0ZUkxOG5TdGFydE9wKGFkZGVkSTE4bklkLCBvcC5tZXNzYWdlLCB1bmRlZmluZWQsIG51bGwpLFxuICAgICAgICAgICAgICBvcCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGlyLk9wS2luZC5JY3VFbmQ6XG4gICAgICAgICAgaWYgKGFkZGVkSTE4bklkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpci5PcExpc3QuaW5zZXJ0QWZ0ZXI8aXIuQ3JlYXRlT3A+KGlyLmNyZWF0ZUkxOG5FbmRPcChhZGRlZEkxOG5JZCwgbnVsbCksIG9wKTtcbiAgICAgICAgICAgIGFkZGVkSTE4bklkID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -26,4 +26,4 @@ export function createOpXrefMap(unit) {
|
|
|
26
26
|
}
|
|
27
27
|
return map;
|
|
28
28
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci9zcmMvdGVtcGxhdGUvcGlwZWxpbmUvc3JjL3V0aWwvZWxlbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHL0I7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUFxQjtJQUVyQixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBbUQsQ0FBQztJQUN2RSxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakMsU0FBUztRQUNYLENBQUM7UUFDRCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckIsa0ZBQWtGO1FBQ2xGLHVGQUF1RjtRQUN2Riw2RUFBNkU7UUFDN0UsdUVBQXVFO1FBQ3ZFLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBpciBmcm9tICcuLi8uLi9pcic7XG5pbXBvcnQgdHlwZSB7Q29tcGlsYXRpb25Vbml0fSBmcm9tICcuLi9jb21waWxhdGlvbic7XG5cbi8qKlxuICogR2V0cyBhIG1hcCBvZiBhbGwgZWxlbWVudHMgaW4gdGhlIGdpdmVuIHZpZXcgYnkgdGhlaXIgeHJlZiBpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9wWHJlZk1hcChcbiAgdW5pdDogQ29tcGlsYXRpb25Vbml0LFxuKTogTWFwPGlyLlhyZWZJZCwgaXIuQ29uc3VtZXNTbG90T3BUcmFpdCAmIGlyLkNyZWF0ZU9wPiB7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8aXIuWHJlZklkLCBpci5Db25zdW1lc1Nsb3RPcFRyYWl0ICYgaXIuQ3JlYXRlT3A+KCk7XG4gIGZvciAoY29uc3Qgb3Agb2YgdW5pdC5jcmVhdGUpIHtcbiAgICBpZiAoIWlyLmhhc0NvbnN1bWVzU2xvdFRyYWl0KG9wKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG1hcC5zZXQob3AueHJlZiwgb3ApO1xuXG4gICAgLy8gVE9ETyhkeWxodW5uKTogYEBmb3JgIGxvb3BzIHdpdGggYEBlbXB0eWAgYmxvY2tzIG5lZWQgdG8gYmUgc3BlY2lhbC1jYXNlZCBoZXJlLFxuICAgIC8vIGJlY2F1c2UgdGhlIHNsb3QgY29uc3VtZXIgdHJhaXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgb25lIHNsb3QgcGVyIGNvbnN1bWVyIGFuZCB3ZVxuICAgIC8vIG5lZWQgdHdvLiBUaGlzIHNob3VsZCBiZSByZXZpc2l0ZWQgd2hlbiBtYWtpbmcgdGhlIHJlZmFjdG9ycyBtZW50aW9uZWQgaW46XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9wdWxsLzUzNjIwI2Rpc2N1c3Npb25fcjE0MzA5MTg4MjJcbiAgICBpZiAob3Aua2luZCA9PT0gaXIuT3BLaW5kLlJlcGVhdGVyQ3JlYXRlICYmIG9wLmVtcHR5VmlldyAhPT0gbnVsbCkge1xuICAgICAgbWFwLnNldChvcC5lbXB0eVZpZXcsIG9wKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hcDtcbn1cbiJdfQ==
|