cdk-preflight 0.0.31 → 0.0.33

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.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BUNDLED_RULES = void 0;
3
+ exports.BUNDLED_LIBS = exports.BUNDLED_RULES = void 0;
4
4
  exports.BUNDLED_RULES = [
5
5
  {
6
6
  "id": "pf-apigw-access-log-format-request-id",
@@ -2480,6 +2480,41 @@ exports.BUNDLED_RULES = [
2480
2480
  ],
2481
2481
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n# The engine's E3027 validates rate() bounds for AWS::Events::Rule but not\n# for AWS::Scheduler::Schedule — same constraint family, different resource.\n# Only the value bound is checked here; unit spellings differ between the two\n# services and were not measured for Scheduler.\nviolation contains make_diag_full(\"pf-scheduler-rate-positive\", \"ERROR\", name,\n\t\"Properties.ScheduleExpression\",\n\tsprintf(\"The rate value in '%s' is not positive; CreateSchedule fails with \\\"Invalid Schedule Expression %s.\\\"\", [expr, expr]),\n\t\"Use a rate of 1 or more (e.g. rate(5 minutes))\",\n\t\"https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html\") if {\n\tsome name in resources_of_type(\"AWS::Scheduler::Schedule\")\n\texpr := resolve(name, \"Properties.ScheduleExpression\")\n\tis_string(expr)\n\tt := trim_space(expr)\n\tstartswith(t, \"rate(\")\n\tendswith(t, \")\")\n\tinner := trim_space(substring(t, 5, count(t) - 6))\n\tparts := split(inner, \" \")\n\tn := to_number(parts[0])\n\tn <= 0\n}\n"
2482
2482
  },
2483
+ {
2484
+ "id": "pf-sns-delivery-policy",
2485
+ "service": "sns",
2486
+ "severity": "ERROR",
2487
+ "title": "HTTP/S DeliveryPolicy retry values: minDelayTarget >= 1, maxDelayTarget <= 3600 and >= minDelayTarget, numRetries 0..100 and at least the sum of the phase retries, phase counts >= 0, backoffFunction one of arithmetic|exponential|geometric|linear, maxReceivesPerSecond >= 1 (subscription DeliveryPolicy and topic DeliveryPolicy.http)",
2488
+ "upstream": "none",
2489
+ "resourceTypes": [
2490
+ "AWS::SNS::Subscription",
2491
+ "AWS::SNS::Topic"
2492
+ ],
2493
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsdp_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-message-delivery-retries.html\"\n\n_pf_snsdp_fix := \"Keep the retry policy inside the documented ranges (see the delivery policy table)\"\n\n# [name, path prefix, healthyRetryPolicy object, throttlePolicy object or null]\n_pf_snsdp_obj(v) := v if is_object(v)\n\n_pf_snsdp_obj(v) := o if {\n\tis_string(v)\n\to := json.unmarshal(v)\n\tis_object(o)\n}\n\n_pf_snsdp_pol contains [name, \"Properties.DeliveryPolicy\", dp] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tdp := _pf_snsdp_obj(object.get(input.resources[name].properties, \"DeliveryPolicy\", null))\n}\n\n_pf_snsdp_pol contains [name, \"Properties.DeliveryPolicy.http\", dp] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\ttop := _pf_snsdp_obj(object.get(input.resources[name].properties, \"DeliveryPolicy\", null))\n\tdp := object.get(top, \"http\", null)\n\tis_object(dp)\n}\n\n_pf_snsdp_retry contains [name, path, hr] if {\n\tsome [name, p, dp] in _pf_snsdp_pol\n\tsome key in [\"healthyRetryPolicy\", \"defaultHealthyRetryPolicy\"]\n\thr := object.get(dp, key, null)\n\tis_object(hr)\n\tpath := sprintf(\"%s.%s\", [p, key])\n}\n\n_pf_snsdp_min contains [\"minDelayTarget\", 1]\n\n_pf_snsdp_min contains [\"numRetries\", 0]\n\n_pf_snsdp_min contains [\"numNoDelayRetries\", 0]\n\n_pf_snsdp_min contains [\"numMinDelayRetries\", 0]\n\n_pf_snsdp_min contains [\"numMaxDelayRetries\", 0]\n\n_pf_snsdp_max contains [\"maxDelayTarget\", 3600]\n\n_pf_snsdp_max contains [\"numRetries\", 100]\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [path, f]),\n\tsprintf(\"%s %v is below %v; the create call fails with \\\"DeliveryPolicy: ...%s must be greater than or equal to %v\\\"\", [f, v, m, f, m]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, path, hr] in _pf_snsdp_retry\n\tsome [f, m] in _pf_snsdp_min\n\tv := object.get(hr, f, null)\n\tis_number(v)\n\tv < m\n}\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [path, f]),\n\tsprintf(\"%s %v is above %v; the create call fails with \\\"DeliveryPolicy: ...%s must be less than or equal to %v\\\"\", [f, v, m, f, m]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, path, hr] in _pf_snsdp_retry\n\tsome [f, m] in _pf_snsdp_max\n\tv := object.get(hr, f, null)\n\tis_number(v)\n\tv > m\n}\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.maxDelayTarget\", [path]),\n\tsprintf(\"maxDelayTarget %v is below minDelayTarget %v; the create call fails with \\\"DeliveryPolicy: ...maxDelayTarget must be greater than or equal to minDelayTarget\\\"\", [mx, mn]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, path, hr] in _pf_snsdp_retry\n\tmn := object.get(hr, \"minDelayTarget\", null)\n\tmx := object.get(hr, \"maxDelayTarget\", null)\n\tis_number(mn)\n\tis_number(mx)\n\tmx < mn\n}\n\n_pf_snsdp_phase(hr, f) := v if {\n\tv := object.get(hr, f, null)\n\tis_number(v)\n}\n\n_pf_snsdp_phase(hr, f) := 0 if not is_number(object.get(hr, f, null))\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.numRetries\", [path]),\n\tsprintf(\"numRetries %v is below the phase total %v (numNoDelayRetries + numMinDelayRetries + numMaxDelayRetries); the create call fails with \\\"DeliveryPolicy: ...numRetries must be greater than or equal to total of numMinDelayRetries, numNoDelayRetries and numMaxDelayRetries\\\"\", [n, total]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, path, hr] in _pf_snsdp_retry\n\tn := object.get(hr, \"numRetries\", null)\n\tis_number(n)\n\ttotal := (_pf_snsdp_phase(hr, \"numNoDelayRetries\") + _pf_snsdp_phase(hr, \"numMinDelayRetries\")) + _pf_snsdp_phase(hr, \"numMaxDelayRetries\")\n\tn < total\n}\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.backoffFunction\", [path]),\n\tsprintf(\"backoffFunction '%s' is not arithmetic, exponential, geometric or linear; the create call fails with \\\"DeliveryPolicy: ... the value [%s] is not a valid backoff function\\\"\", [b, b]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, path, hr] in _pf_snsdp_retry\n\tb := object.get(hr, \"backoffFunction\", null)\n\tis_string(b)\n\tnot b in {\"arithmetic\", \"exponential\", \"geometric\", \"linear\"}\n}\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.%s.maxReceivesPerSecond\", [p, key]),\n\tsprintf(\"maxReceivesPerSecond %v is below 1; the create call fails with \\\"DeliveryPolicy: throttlePolicy.maxReceivesPerSecond must be >= 1\\\"\", [v]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, p, dp] in _pf_snsdp_pol\n\tsome key in [\"throttlePolicy\", \"defaultThrottlePolicy\"]\n\ttp := object.get(dp, key, null)\n\tis_object(tp)\n\tv := object.get(tp, \"maxReceivesPerSecond\", null)\n\tis_number(v)\n\tv < 1\n}\n"
2494
+ },
2495
+ {
2496
+ "id": "pf-sns-fifo-only-attributes",
2497
+ "service": "sns",
2498
+ "severity": "ERROR",
2499
+ "title": "ContentBasedDeduplication, ArchivePolicy and FifoThroughputScope are FIFO-only topic attributes, and ArchivePolicy.MessageRetentionPeriod is 1..365 days",
2500
+ "upstream": "none",
2501
+ "resourceTypes": [
2502
+ "AWS::SNS::Topic"
2503
+ ],
2504
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsfo_url := \"https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html\"\n\n_pf_snsfo_fix := \"Set FifoTopic: true (with a *.fifo TopicName) or drop the FIFO-only attributes; keep the archive retention within 1-365 days\"\n\n_pf_snsfo_std(t) if {\n\tprops := input.resources[t].properties\n\tis_object(props)\n\tobject.get(props, \"FifoTopic\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_snsfo_std(t) if resolve(t, \"Properties.FifoTopic\") in {false, \"false\"}\n\nviolation contains make_diag_full(\"pf-sns-fifo-only-attributes\", \"ERROR\", name,\n\tsprintf(\"Properties.%s\", [attr]),\n\tsprintf(\"%s is set on a standard topic (FifoTopic is not true); CreateTopic fails with \\\"Invalid parameter: Attributes Reason: Unknown attribute %s\\\"\", [attr, attr]),\n\t_pf_snsfo_fix, _pf_snsfo_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\t_pf_snsfo_std(name)\n\tsome attr in [\"ContentBasedDeduplication\", \"ArchivePolicy\", \"FifoThroughputScope\"]\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, attr, \"__pf_absent\") != \"__pf_absent\"\n}\n\n_pf_snsfo_archive(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"ArchivePolicy\", null)\n\tis_object(pol)\n}\n\n_pf_snsfo_archive(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"ArchivePolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n_pf_snsfo_num(v) := v if is_number(v)\n\n_pf_snsfo_num(v) := to_number(v) if {\n\tis_string(v)\n\tregex.match(\"^[0-9]+$\", v)\n}\n\nviolation contains make_diag_full(\"pf-sns-fifo-only-attributes\", \"ERROR\", name,\n\t\"Properties.ArchivePolicy.MessageRetentionPeriod\",\n\tsprintf(\"ArchivePolicy.MessageRetentionPeriod %v is outside 1..365 days; CreateTopic fails with \\\"Invalid parameter: Attributes Reason: ArchivePolicy: MessageRetentionPeriod value is invalid\\\"\", [n]),\n\t_pf_snsfo_fix, _pf_snsfo_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tn := _pf_snsfo_num(object.get(_pf_snsfo_archive(name), \"MessageRetentionPeriod\", null))\n\t_pf_snsfo_out(n)\n}\n\n_pf_snsfo_out(n) if n < 1\n\n_pf_snsfo_out(n) if n > 365\n"
2505
+ },
2506
+ {
2507
+ "id": "pf-sns-fifo-queue-on-standard-topic",
2508
+ "service": "sns",
2509
+ "severity": "ERROR",
2510
+ "title": "A FIFO SQS queue cannot subscribe to a standard topic (a FIFO topic may fan out to standard queues, not the reverse)",
2511
+ "upstream": "none",
2512
+ "resourceTypes": [
2513
+ "AWS::SNS::Subscription",
2514
+ "AWS::SNS::Topic"
2515
+ ],
2516
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsfqs_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html\"\n\n_pf_snsfqs_fix := \"Subscribe the FIFO queue to a FIFO topic, or use a standard queue\"\n\n_pf_snsfqs_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsfqs_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsfqs_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\n# topic is FIFO: an in-template topic with FifoTopic true, or a literal ARN ending in .fifo\n_pf_snsfqs_tfifo(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tresolve(t, \"Properties.FifoTopic\") in {true, \"true\"}\n}\n\n_pf_snsfqs_tfifo(t) if {\n\tstartswith(t, \"arn:\")\n\tendswith(t, \".fifo\")\n}\n\n_pf_snsfqs_tstd(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tprops := input.resources[t].properties\n\tis_object(props)\n\tobject.get(props, \"FifoTopic\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_snsfqs_tstd(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tresolve(t, \"Properties.FifoTopic\") in {false, \"false\"}\n}\n\n_pf_snsfqs_tstd(t) if {\n\tstartswith(t, \"arn:\")\n\tnot endswith(t, \".fifo\")\n}\n\n_pf_snsfqs_qfifo(ep) if {\n\tep in resources_of_type(\"AWS::SQS::Queue\")\n\tresolve(ep, \"Properties.FifoQueue\") in {true, \"true\"}\n}\n\n_pf_snsfqs_qfifo(ep) if {\n\tstartswith(ep, \"arn:\")\n\tendswith(ep, \".fifo\")\n}\n\nviolation contains make_diag_full(\"pf-sns-fifo-queue-on-standard-topic\", \"ERROR\", name,\n\tsprintf(\"%s.Endpoint\", [path]),\n\t\"a FIFO queue is subscribed to a standard topic; Subscribe fails with \\\"Invalid parameter: Endpoint Reason: FIFO SQS Queues can not be subscribed to standard SNS topics\\\"\",\n\t_pf_snsfqs_fix, _pf_snsfqs_url) if {\n\tsome [name, path, sub, topic] in _pf_snsfqs_sub\n\t_pf_snsfqs_tstd(topic)\n\t_pf_snsfqs_proto(name, path) == \"sqs\"\n\tep := resolve(name, sprintf(\"%s.Endpoint\", [path]))\n\tis_string(ep)\n\t_pf_snsfqs_qfifo(ep)\n}\n"
2517
+ },
2483
2518
  {
2484
2519
  "id": "pf-sns-fifo-topic-name",
2485
2520
  "service": "sns",
@@ -2491,6 +2526,100 @@ exports.BUNDLED_RULES = [
2491
2526
  ],
2492
2527
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsfifo_fix := \"Give FIFO topics a TopicName ending in '.fifo' (or drop TopicName to let CloudFormation generate one), and set FifoTopic: true whenever the name ends in '.fifo'\"\n\n_pf_snsfifo_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-create-fifo-topic.html\"\n\n_pf_snsfifo_true(name) if resolve(name, \"Properties.FifoTopic\") in {true, \"true\"}\n\n# FifoTopic が存在し、リテラル false 以外(true やトークン)なら「FIFO かもしれない」扱い\n_pf_snsfifo_maybe_fifo(name) if {\n\tv := resolve(name, \"Properties.FifoTopic\")\n\tnot v in {false, \"false\"}\n}\n\nviolation contains make_diag_full(\"pf-sns-fifo-topic-name\", \"ERROR\", name,\n\t\"Properties.TopicName\",\n\tsprintf(\"FifoTopic is true but TopicName '%s' does not end with '.fifo'; SNS rejects the topic at deploy time\", [tn]),\n\t_pf_snsfifo_fix, _pf_snsfifo_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\t_pf_snsfifo_true(name)\n\ttn := resolve(name, \"Properties.TopicName\")\n\tis_string(tn)\n\tnot endswith(tn, \".fifo\")\n}\n\nviolation contains make_diag_full(\"pf-sns-fifo-topic-name\", \"ERROR\", name,\n\t\"Properties.TopicName\",\n\tsprintf(\"TopicName '%s' ends with '.fifo' but FifoTopic is not true; SNS rejects the topic name at deploy time\", [tn]),\n\t_pf_snsfifo_fix, _pf_snsfifo_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\ttn := resolve(name, \"Properties.TopicName\")\n\tis_string(tn)\n\tendswith(tn, \".fifo\")\n\tnot _pf_snsfifo_maybe_fifo(name)\n}\n"
2493
2528
  },
2529
+ {
2530
+ "id": "pf-sns-fifo-topic-protocol",
2531
+ "service": "sns",
2532
+ "severity": "ERROR",
2533
+ "title": "A FIFO topic only accepts sqs subscriptions (lambda, http/https, email, email-json, sms, firehose are rejected)",
2534
+ "upstream": "none",
2535
+ "resourceTypes": [
2536
+ "AWS::SNS::Subscription",
2537
+ "AWS::SNS::Topic"
2538
+ ],
2539
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsftp_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html\"\n\n_pf_snsftp_fix := \"Subscribe an SQS queue (FIFO or standard) to the FIFO topic, or use a standard topic for other protocols\"\n\n_pf_snsftp_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsftp_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsftp_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\n# topic is FIFO: an in-template topic with FifoTopic true, or a literal ARN ending in .fifo\n_pf_snsftp_tfifo(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tresolve(t, \"Properties.FifoTopic\") in {true, \"true\"}\n}\n\n_pf_snsftp_tfifo(t) if {\n\tstartswith(t, \"arn:\")\n\tendswith(t, \".fifo\")\n}\n\n_pf_snsftp_tstd(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tprops := input.resources[t].properties\n\tis_object(props)\n\tobject.get(props, \"FifoTopic\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_snsftp_tstd(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tresolve(t, \"Properties.FifoTopic\") in {false, \"false\"}\n}\n\n_pf_snsftp_tstd(t) if {\n\tstartswith(t, \"arn:\")\n\tnot endswith(t, \".fifo\")\n}\n\nviolation contains make_diag_full(\"pf-sns-fifo-topic-protocol\", \"ERROR\", name,\n\tsprintf(\"%s.Protocol\", [path]),\n\tsprintf(\"a FIFO topic is subscribed with protocol %s; Subscribe fails with \\\"Invalid parameter: Invalid protocol type: %s\\\"\", [proto, proto]),\n\t_pf_snsftp_fix, _pf_snsftp_url) if {\n\tsome [name, path, sub, topic] in _pf_snsftp_sub\n\t_pf_snsftp_tfifo(topic)\n\tproto := _pf_snsftp_proto(name, path)\n\tproto != \"sqs\"\n}\n"
2540
+ },
2541
+ {
2542
+ "id": "pf-sns-filter-policy",
2543
+ "service": "sns",
2544
+ "severity": "ERROR",
2545
+ "title": "FilterPolicy shape: at most 5 keys, every value an array or object, no empty arrays, no arrays inside arrays, nesting only with FilterPolicyScope MessageBody, and FilterPolicyScope is MessageAttributes or MessageBody",
2546
+ "upstream": "none",
2547
+ "resourceTypes": [
2548
+ "AWS::SNS::Subscription",
2549
+ "AWS::SNS::Topic"
2550
+ ],
2551
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsfp_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-subscription-filter-policies.html\"\n\n_pf_snsfp_fix := \"Keep the filter policy to 5 keys of non-empty arrays (or nested objects with FilterPolicyScope: MessageBody)\"\n\n_pf_snsfp_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsfp_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsfp_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\n_pf_snsfp_pol(sub) := pol if {\n\tpol := object.get(sub, \"FilterPolicy\", null)\n\tis_object(pol)\n}\n\n_pf_snsfp_pol(sub) := pol if {\n\traw := object.get(sub, \"FilterPolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n_pf_snsfp_err := \"Invalid parameter: Attributes Reason: FilterPolicy: \"\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicy\", [path]),\n\tsprintf(\"FilterPolicy has %d keys (maximum 5); Subscribe fails with \\\"%sFilter policy can not have more than 5 keys\\\"\", [n, _pf_snsfp_err]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\tn := count(object.keys(_pf_snsfp_pol(sub)))\n\tn > 5\n}\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicy.%s\", [path, k]),\n\tsprintf(\"FilterPolicy key '%s' has a scalar value; each key takes an array of match values (or an object with FilterPolicyScope MessageBody), and Subscribe fails with \\\"%s\\\\\\\"%s\\\\\\\" must be an object or an array\\\"\", [k, _pf_snsfp_err, k]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\tsome k, v in _pf_snsfp_pol(sub)\n\tnot is_array(v)\n\tnot is_object(v)\n}\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicy.%s\", [path, k]),\n\tsprintf(\"FilterPolicy key '%s' is an empty array; Subscribe fails with \\\"%sEmpty arrays are not allowed\\\"\", [k, _pf_snsfp_err]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\tsome k, v in _pf_snsfp_pol(sub)\n\tis_array(v)\n\tcount(v) == 0\n}\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicy.%s\", [path, k]),\n\tsprintf(\"FilterPolicy key '%s' has an array inside its array; Subscribe fails with \\\"%sMatch value must be String, number, true, false, or null\\\"\", [k, _pf_snsfp_err]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\tsome k, v in _pf_snsfp_pol(sub)\n\tis_array(v)\n\tsome e in v\n\tis_array(e)\n}\n\n_pf_snsfp_attr_scope(sub) if object.get(sub, \"FilterPolicyScope\", \"MessageAttributes\") == \"MessageAttributes\"\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicy.%s\", [path, k]),\n\tsprintf(\"FilterPolicy key '%s' nests an object while FilterPolicyScope is MessageAttributes; Subscribe fails with \\\"Invalid parameter: Attributes Reason: Filter policy scope MessageAttributes does not support nested filter policy\\\"\", [k]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\t_pf_snsfp_attr_scope(sub)\n\tsome k, v in _pf_snsfp_pol(sub)\n\tis_object(v)\n}\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicyScope\", [path]),\n\tsprintf(\"FilterPolicyScope '%s' is not MessageAttributes or MessageBody; Subscribe fails with \\\"Invalid parameter: Attributes Reason: FilterPolicyScope: Invalid value [%s]. Please use either MessageBody or MessageAttributes\\\"\", [s, s]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\ts := resolve(name, sprintf(\"%s.FilterPolicyScope\", [path]))\n\tis_string(s)\n\tnot s in {\"MessageAttributes\", \"MessageBody\"}\n}\n"
2552
+ },
2553
+ {
2554
+ "id": "pf-sns-firehose-subscription-role",
2555
+ "service": "sns",
2556
+ "severity": "ERROR",
2557
+ "title": "A firehose subscription requires SubscriptionRoleArn",
2558
+ "upstream": "none",
2559
+ "resourceTypes": [
2560
+ "AWS::SNS::Subscription",
2561
+ "AWS::SNS::Topic"
2562
+ ],
2563
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsfh_url := \"https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html\"\n\n_pf_snsfh_fix := \"Set SubscriptionRoleArn to a role SNS can assume that may write to the delivery stream\"\n\n_pf_snsfh_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsfh_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsfh_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\nviolation contains make_diag_full(\"pf-sns-firehose-subscription-role\", \"ERROR\", name,\n\tsprintf(\"%s.SubscriptionRoleArn\", [path]),\n\t\"Protocol firehose has no SubscriptionRoleArn; Subscribe fails with \\\"Invalid parameter: Delivery protocol firehose can only be subscribed with subscription role arn\\\"\",\n\t_pf_snsfh_fix, _pf_snsfh_url) if {\n\tsome [name, path, sub, _] in _pf_snsfh_sub\n\t_pf_snsfh_proto(name, path) == \"firehose\"\n\tobject.get(sub, \"SubscriptionRoleArn\", \"__pf_absent\") == \"__pf_absent\"\n}\n"
2564
+ },
2565
+ {
2566
+ "id": "pf-sns-raw-message-delivery",
2567
+ "service": "sns",
2568
+ "severity": "ERROR",
2569
+ "title": "RawMessageDelivery is only supported for sqs, http, https and firehose subscriptions",
2570
+ "upstream": "none",
2571
+ "resourceTypes": [
2572
+ "AWS::SNS::Subscription",
2573
+ "AWS::SNS::Topic"
2574
+ ],
2575
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsraw_url := \"https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html\"\n\n_pf_snsraw_fix := \"Drop RawMessageDelivery for email / email-json / sms / lambda / application subscriptions\"\n\n_pf_snsraw_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsraw_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsraw_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\nviolation contains make_diag_full(\"pf-sns-raw-message-delivery\", \"ERROR\", name,\n\tsprintf(\"%s.RawMessageDelivery\", [path]),\n\tsprintf(\"RawMessageDelivery is true on a %s subscription; Subscribe fails with \\\"Invalid parameter: Attributes Reason: Delivery protocol [%s] does not support raw message delivery.\\\"\", [proto, proto]),\n\t_pf_snsraw_fix, _pf_snsraw_url) if {\n\tsome [name, path, sub, _] in _pf_snsraw_sub\n\tresolve(name, sprintf(\"%s.RawMessageDelivery\", [path])) in {true, \"true\"}\n\tproto := _pf_snsraw_proto(name, path)\n\tnot proto in {\"sqs\", \"http\", \"https\", \"firehose\"}\n}\n"
2576
+ },
2577
+ {
2578
+ "id": "pf-sns-subscription-endpoint",
2579
+ "service": "sns",
2580
+ "severity": "ERROR",
2581
+ "title": "Subscription Protocol is one of the nine SNS protocols and the Endpoint matches it: an ARN of the right service for sqs/lambda/firehose/application, an email address, a URL with the same scheme for http/https, a phone number for sms",
2582
+ "upstream": "none",
2583
+ "resourceTypes": [
2584
+ "AWS::SNS::Subscription",
2585
+ "AWS::SNS::Topic"
2586
+ ],
2587
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsep_url := \"https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html\"\n\n_pf_snsep_fix := \"Give the subscription the endpoint form its protocol expects (Fn::GetAtt Queue.Arn for sqs, https:// URL for https, ...)\"\n\n_pf_snsep_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsep_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsep_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\n_pf_snsep_protocols := {\"http\", \"https\", \"email\", \"email-json\", \"sms\", \"sqs\", \"application\", \"lambda\", \"firehose\"}\n\nviolation contains make_diag_full(\"pf-sns-subscription-endpoint\", \"ERROR\", name,\n\tsprintf(\"%s.Protocol\", [path]),\n\tsprintf(\"Protocol '%s' is not an SNS protocol; Subscribe fails with \\\"Invalid parameter: Amazon SNS does not support this protocol string: %s\\\"\", [proto, proto]),\n\t_pf_snsep_fix, _pf_snsep_url) if {\n\tsome [name, path, sub, _] in _pf_snsep_sub\n\tproto := _pf_snsep_proto(name, path)\n\tnot proto in _pf_snsep_protocols\n}\n\n# [protocol, endpoint pattern, service error]\n_pf_snsep_shape contains [\"sqs\", \"^arn:[^:]+:sqs:\", \"Invalid parameter: SQS endpoint ARN\"]\n\n_pf_snsep_shape contains [\"lambda\", \"^arn:[^:]+:lambda:\", \"Invalid parameter: Lambda endpoint ARN\"]\n\n_pf_snsep_shape contains [\"firehose\", \"^arn:[^:]+:firehose:\", \"Invalid parameter: Firehose endpoint ARN\"]\n\n_pf_snsep_shape contains [\"application\", \"^arn:[^:]+:sns:[^:]*:[^:]*:endpoint/\", \"Invalid parameter: Application endpoint arn invalid\"]\n\n_pf_snsep_shape contains [\"email\", \"^[^@ ]+@[^@ ]+$\", \"Invalid parameter: Email address\"]\n\n_pf_snsep_shape contains [\"email-json\", \"^[^@ ]+@[^@ ]+$\", \"Invalid parameter: Email address\"]\n\n_pf_snsep_shape contains [\"http\", \"^http://\", \"Invalid parameter: Endpoint must match the specified protocol\"]\n\n_pf_snsep_shape contains [\"https\", \"^https://\", \"Invalid parameter: Endpoint must match the specified protocol\"]\n\n_pf_snsep_shape contains [\"sms\", \"^[+]?[0-9][0-9 -]*$\", \"Invalid SMS endpoint\"]\n\n# Only literal endpoints are judged: a Ref / Fn::GetAtt to a resource in the\n# template resolves to that resource's logical ID and is skipped.\nviolation contains make_diag_full(\"pf-sns-subscription-endpoint\", \"ERROR\", name,\n\tsprintf(\"%s.Endpoint\", [path]),\n\tsprintf(\"Endpoint '%s' does not have the form the %s protocol expects; Subscribe fails with \\\"%s\\\"\", [ep, proto, err]),\n\t_pf_snsep_fix, _pf_snsep_url) if {\n\tsome [name, path, sub, _] in _pf_snsep_sub\n\tproto := _pf_snsep_proto(name, path)\n\tsome [p2, pattern, err] in _pf_snsep_shape\n\tp2 == proto\n\tep := resolve(name, sprintf(\"%s.Endpoint\", [path]))\n\tis_string(ep)\n\tnot ep in object.keys(input.resources)\n\tnot contains(ep, \"${\")\n\tnot regex.match(pattern, ep)\n}\n"
2588
+ },
2589
+ {
2590
+ "id": "pf-sns-subscription-redrive",
2591
+ "service": "sns",
2592
+ "severity": "ERROR",
2593
+ "title": "Subscription RedrivePolicy needs deadLetterTargetArn, which must be an SQS queue ARN in the deploy region",
2594
+ "upstream": "none",
2595
+ "resourceTypes": [
2596
+ "AWS::SNS::Subscription",
2597
+ "AWS::SNS::Topic"
2598
+ ],
2599
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snssrd_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-dead-letter-queues.html\"\n\n_pf_snssrd_fix := \"Set deadLetterTargetArn to Fn::GetAtt Queue.Arn of a queue in this stack\"\n\n_pf_snssrd_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snssrd_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snssrd_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\n_pf_snssrd_pol(sub) := pol if {\n\tpol := object.get(sub, \"RedrivePolicy\", null)\n\tis_object(pol)\n}\n\n_pf_snssrd_pol(sub) := pol if {\n\traw := object.get(sub, \"RedrivePolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\nviolation contains make_diag_full(\"pf-sns-subscription-redrive\", \"ERROR\", name,\n\tsprintf(\"%s.RedrivePolicy\", [path]),\n\t\"RedrivePolicy has no deadLetterTargetArn; Subscribe fails with \\\"Invalid parameter: Attributes Reason: RedrivePolicy: Missing deadLetterTargetArn attribute\\\"\",\n\t_pf_snssrd_fix, _pf_snssrd_url) if {\n\tsome [name, path, sub, _] in _pf_snssrd_sub\n\tpol := _pf_snssrd_pol(sub)\n\tobject.get(pol, \"deadLetterTargetArn\", \"__pf_absent\") == \"__pf_absent\"\n}\n\nviolation contains make_diag_full(\"pf-sns-subscription-redrive\", \"ERROR\", name,\n\tsprintf(\"%s.RedrivePolicy.deadLetterTargetArn\", [path]),\n\tsprintf(\"deadLetterTargetArn '%s' is not an SQS queue ARN; Subscribe fails with \\\"Invalid parameter: Attributes Reason: RedrivePolicy: deadLetterTargetArn must be a SQS queue\\\"\", [arn]),\n\t_pf_snssrd_fix, _pf_snssrd_url) if {\n\tsome [name, path, sub, _] in _pf_snssrd_sub\n\tarn := object.get(_pf_snssrd_pol(sub), \"deadLetterTargetArn\", null)\n\tis_string(arn)\n\tnot contains(arn, \"${\")\n\tnot regex.match(\"^arn:[^:]+:sqs:\", arn)\n}\n\n# Region comparison needs the deploy region (enforce mode only; see AGENTS.md).\nviolation contains make_diag_full(\"pf-sns-subscription-redrive\", \"ERROR\", name,\n\tsprintf(\"%s.RedrivePolicy.deadLetterTargetArn\", [path]),\n\tsprintf(\"deadLetterTargetArn is in '%s' but the subscription deploys to '%s'; Subscribe fails with \\\"Invalid parameter: Attributes Reason: RedrivePolicy: deadLetterTargetArn must be in the same region as the subscription\\\"\", [parts[3], region]),\n\t_pf_snssrd_fix, _pf_snssrd_url) if {\n\tregion := data.cdk_preflight.deploy_region\n\tsome [name, path, sub, _] in _pf_snssrd_sub\n\tarn := object.get(_pf_snssrd_pol(sub), \"deadLetterTargetArn\", null)\n\tis_string(arn)\n\tparts := split(arn, \":\")\n\tcount(parts) >= 6\n\tparts[2] == \"sqs\"\n\tparts[3] != region\n}\n"
2600
+ },
2601
+ {
2602
+ "id": "pf-sns-subscription-region",
2603
+ "service": "sns",
2604
+ "severity": "ERROR",
2605
+ "title": "Subscription.Region must be the topic's region (the region in a literal TopicArn, or the deploy region for a topic in this template)",
2606
+ "upstream": "none",
2607
+ "resourceTypes": [
2608
+ "AWS::SNS::Subscription"
2609
+ ],
2610
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snssrg_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-subscription.html\"\n\n_pf_snssrg_fix := \"Set Region to the topic's own region, or drop it for a topic in this stack\"\n\nviolation contains make_diag_full(\"pf-sns-subscription-region\", \"ERROR\", name,\n\t\"Properties.Region\",\n\tsprintf(\"Region '%s' differs from the topic's region '%s' in TopicArn; the resource handler fails with \\\"Invalid parameter: TopicArn\\\"\", [reg, parts[3]]),\n\t_pf_snssrg_fix, _pf_snssrg_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\treg := resolve(name, \"Properties.Region\")\n\tis_string(reg)\n\tt := resolve(name, \"Properties.TopicArn\")\n\tis_string(t)\n\tstartswith(t, \"arn:\")\n\tparts := split(t, \":\")\n\tcount(parts) >= 6\n\tparts[3] != reg\n}\n\n# A topic created in this template lives in the deploy region (enforce mode only; see AGENTS.md).\nviolation contains make_diag_full(\"pf-sns-subscription-region\", \"ERROR\", name,\n\t\"Properties.Region\",\n\tsprintf(\"Region '%s' differs from the deploy region '%s' of the topic in this template; the resource handler fails with \\\"Invalid parameter: TopicArn\\\"\", [reg, region]),\n\t_pf_snssrg_fix, _pf_snssrg_url) if {\n\tregion := data.cdk_preflight.deploy_region\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\treg := resolve(name, \"Properties.Region\")\n\tis_string(reg)\n\tt := resolve(name, \"Properties.TopicArn\")\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\treg != region\n}\n"
2611
+ },
2612
+ {
2613
+ "id": "pf-sns-topic-attribute-values",
2614
+ "service": "sns",
2615
+ "severity": "ERROR",
2616
+ "title": "Topic DisplayName is at most 100 characters, SignatureVersion is 1 or 2, and TracingConfig is PassThrough or Active",
2617
+ "upstream": "none",
2618
+ "resourceTypes": [
2619
+ "AWS::SNS::Topic"
2620
+ ],
2621
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snstav_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-topic.html\"\n\n_pf_snstav_fix := \"Shorten DisplayName to 100 characters; use SignatureVersion \\\"1\\\"/\\\"2\\\" and TracingConfig PassThrough/Active\"\n\nviolation contains make_diag_full(\"pf-sns-topic-attribute-values\", \"ERROR\", name,\n\t\"Properties.DisplayName\",\n\tsprintf(\"DisplayName is %d characters long (maximum 100); CreateTopic fails with \\\"Invalid parameter: Attributes Reason: DisplayName\\\"\", [count(v)]),\n\t_pf_snstav_fix, _pf_snstav_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tv := resolve(name, \"Properties.DisplayName\")\n\tis_string(v)\n\tcount(v) > 100\n}\n\nviolation contains make_diag_full(\"pf-sns-topic-attribute-values\", \"ERROR\", name,\n\t\"Properties.SignatureVersion\",\n\tsprintf(\"SignatureVersion '%v' is not 1 or 2; CreateTopic fails with \\\"Invalid parameter: Attributes Reason: SignatureVersion: Invalid value. Must be 1 or 2.\\\"\", [v]),\n\t_pf_snstav_fix, _pf_snstav_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tv := resolve(name, \"Properties.SignatureVersion\")\n\t_pf_snstav_scalar(v)\n\tnot sprintf(\"%v\", [v]) in {\"1\", \"2\"}\n}\n\n_pf_snstav_scalar(v) if is_string(v)\n\n_pf_snstav_scalar(v) if is_number(v)\n\nviolation contains make_diag_full(\"pf-sns-topic-attribute-values\", \"ERROR\", name,\n\t\"Properties.TracingConfig\",\n\tsprintf(\"TracingConfig '%s' is not PassThrough or Active; CreateTopic fails with \\\"Invalid parameter: Attributes Reason: Invalid tracing config value: %s\\\"\", [v, v]),\n\t_pf_snstav_fix, _pf_snstav_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tv := resolve(name, \"Properties.TracingConfig\")\n\tis_string(v)\n\tnot v in {\"PassThrough\", \"Active\"}\n}\n"
2622
+ },
2494
2623
  {
2495
2624
  "id": "pf-sns-topic-name-format",
2496
2625
  "service": "sns",
@@ -2502,6 +2631,61 @@ exports.BUNDLED_RULES = [
2502
2631
  ],
2503
2632
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsname_ok(n) if regex.match(`^[a-zA-Z0-9_-]{1,256}$`, n)\n\n_pf_snsname_ok(n) if regex.match(`^[a-zA-Z0-9_-]{1,251}\\.fifo$`, n)\n\nviolation contains make_diag_full(\"pf-sns-topic-name-format\", \"ERROR\", name,\n\t\"Properties.TopicName\",\n\tsprintf(\"TopicName '%s' is rejected with \\\"Invalid parameter: Topic Name\\\": SNS accepts only letters, numbers, hyphen and underscore (a FIFO topic adds the .fifo suffix)\", [n]),\n\t\"Rename the topic using [a-zA-Z0-9_-] (append .fifo only for FIFO topics)\",\n\t\"https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html\") if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tn := resolve(name, \"Properties.TopicName\")\n\tis_string(n)\n\tnot _pf_snsname_ok(n)\n}\n"
2504
2633
  },
2634
+ {
2635
+ "id": "pf-sns-topic-policy-topics",
2636
+ "service": "sns",
2637
+ "severity": "ERROR",
2638
+ "title": "TopicPolicy.Topics takes topic ARNs (Ref Topic), not topic names",
2639
+ "upstream": "none",
2640
+ "resourceTypes": [
2641
+ "AWS::SNS::TopicPolicy"
2642
+ ],
2643
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snstp_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-topicpolicy.html\"\n\n_pf_snstp_fix := \"List topics with Ref (the ARN), not Fn::GetAtt Topic.TopicName or a bare name\"\n\nviolation contains make_diag_full(\"pf-sns-topic-policy-topics\", \"ERROR\", name,\n\tsprintf(\"Properties.Topics.%d\", [i]),\n\t\"Topics entry is the topic name (Fn::GetAtt Topic.TopicName) but TopicPolicy expects the topic ARN; the resource handler fails with \\\"Invalid parameter: TopicArn Reason: An ARN must have at least 6 elements, not 1\\\"\",\n\t_pf_snstp_fix, _pf_snstp_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::TopicPolicy\")\n\tts := object.get(input.resources[name].properties, \"Topics\", null)\n\tis_array(ts)\n\tsome i, t in ts\n\tis_object(t)\n\tobject.get(t, \"__kind\", null) == \"getatt:TopicName\"\n}\n\nviolation contains make_diag_full(\"pf-sns-topic-policy-topics\", \"ERROR\", name,\n\tsprintf(\"Properties.Topics.%d\", [i]),\n\tsprintf(\"Topics entry '%s' is not an ARN; the resource handler fails with \\\"Invalid parameter: TopicArn Reason: An ARN must have at least 6 elements\\\"\", [t]),\n\t_pf_snstp_fix, _pf_snstp_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::TopicPolicy\")\n\tts := object.get(input.resources[name].properties, \"Topics\", null)\n\tis_array(ts)\n\tsome i, t in ts\n\tis_string(t)\n\tnot startswith(t, \"arn:\")\n\tnot contains(t, \"${\")\n}\n"
2644
+ },
2645
+ {
2646
+ "id": "pf-sqs-dlq-same-type",
2647
+ "service": "sqs",
2648
+ "severity": "ERROR",
2649
+ "title": "A dead-letter queue named by a literal ARN must be the same type as its source (FIFO for FIFO, standard for standard); Fn::GetAtt wiring is covered by engine rule E3502",
2650
+ "upstream": "none",
2651
+ "resourceTypes": [
2652
+ "AWS::SQS::Queue"
2653
+ ],
2654
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsdlq_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqsdlq_fix := \"Point a FIFO queue at a FIFO dead-letter queue (*.fifo) and a standard queue at a standard one\"\n\n_pf_sqsdlq_fifo(q) if resolve(q, \"Properties.FifoQueue\") in {true, \"true\"}\n\n# Standard queue: FifoQueue absent or literally false (an unresolvable value is neither).\n_pf_sqsdlq_std(q) if {\n\tprops := input.resources[q].properties\n\tis_object(props)\n\tobject.get(props, \"FifoQueue\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_sqsdlq_std(q) if resolve(q, \"Properties.FifoQueue\") in {false, \"false\"}\n\n# RedrivePolicy arrives as a JSON object or as a JSON string (both are valid CloudFormation).\n_pf_sqsdlq_pol(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_object(pol)\n}\n\n_pf_sqsdlq_pol(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n# The engine's E3502 (CFN_LINT) already compares the types when\n# deadLetterTargetArn is Fn::GetAtt of a queue in the template (verified\n# against 1.7.0-beta on 2026-09-05). Only a literal ARN — an imported queue —\n# escapes it, and the .fifo suffix tells the type.\n_pf_sqsdlq_literal(name) := arn if {\n\tarn := object.get(_pf_sqsdlq_pol(name), \"deadLetterTargetArn\", null)\n\tis_string(arn)\n\tregex.match(\"^arn:[^:]+:sqs:\", arn)\n\tnot contains(arn, \"${\")\n}\n\nviolation contains make_diag_full(\"pf-sqs-dlq-same-type\", \"ERROR\", name,\n\t\"Properties.RedrivePolicy.deadLetterTargetArn\",\n\tsprintf(\"a FIFO queue points at the standard dead-letter queue '%s'; CreateQueue fails with \\\"Dead-letter queue must be same type of queue as the source.\\\"\", [arn]),\n\t_pf_sqsdlq_fix, _pf_sqsdlq_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\t_pf_sqsdlq_fifo(name)\n\tarn := _pf_sqsdlq_literal(name)\n\tnot endswith(arn, \".fifo\")\n}\n\nviolation contains make_diag_full(\"pf-sqs-dlq-same-type\", \"ERROR\", name,\n\t\"Properties.RedrivePolicy.deadLetterTargetArn\",\n\tsprintf(\"a standard queue points at the FIFO dead-letter queue '%s'; CreateQueue fails with \\\"Dead-letter queue must be same type of queue as the source.\\\"\", [arn]),\n\t_pf_sqsdlq_fix, _pf_sqsdlq_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\t_pf_sqsdlq_std(name)\n\tarn := _pf_sqsdlq_literal(name)\n\tendswith(arn, \".fifo\")\n}\n"
2655
+ },
2656
+ {
2657
+ "id": "pf-sqs-fifo-name-suffix",
2658
+ "service": "sqs",
2659
+ "severity": "ERROR",
2660
+ "title": "A QueueName ending in .fifo requires FifoQueue: true (a FIFO queue without the suffix is engine rule E2504)",
2661
+ "upstream": "none",
2662
+ "resourceTypes": [
2663
+ "AWS::SQS::Queue"
2664
+ ],
2665
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqssfx_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqssfx_fix := \"Set FifoQueue: true or drop the .fifo suffix\"\n\n_pf_sqssfx_fifo(q) if resolve(q, \"Properties.FifoQueue\") in {true, \"true\"}\n\n# Standard queue: FifoQueue absent or literally false (an unresolvable value is neither).\n_pf_sqssfx_std(q) if {\n\tprops := input.resources[q].properties\n\tis_object(props)\n\tobject.get(props, \"FifoQueue\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_sqssfx_std(q) if resolve(q, \"Properties.FifoQueue\") in {false, \"false\"}\n\n# The opposite direction (FifoQueue true, name without .fifo) is the engine's\n# E2504 / E3501; verified against 1.7.0-beta on 2026-09-05.\nviolation contains make_diag_full(\"pf-sqs-fifo-name-suffix\", \"ERROR\", name,\n\t\"Properties.QueueName\",\n\tsprintf(\"QueueName '%s' ends with .fifo but the queue is standard (FifoQueue is not true); CreateQueue fails with \\\"Can only include alphanumeric characters, hyphens, or underscores. 1 to 80 in length\\\"\", [n]),\n\t_pf_sqssfx_fix, _pf_sqssfx_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tn := resolve(name, \"Properties.QueueName\")\n\tis_string(n)\n\tendswith(n, \".fifo\")\n\t_pf_sqssfx_std(name)\n}\n"
2666
+ },
2667
+ {
2668
+ "id": "pf-sqs-fifo-only-attributes",
2669
+ "service": "sqs",
2670
+ "severity": "ERROR",
2671
+ "title": "ContentBasedDeduplication, DeduplicationScope and FifoThroughputLimit are FIFO-only queue attributes (and the two enums are messageGroup|queue and perQueue|perMessageGroupId)",
2672
+ "upstream": "none",
2673
+ "resourceTypes": [
2674
+ "AWS::SQS::Queue"
2675
+ ],
2676
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsfo_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqsfo_fix := \"Set FifoQueue: true (and name the queue *.fifo) or drop the FIFO-only attributes\"\n\n_pf_sqsfo_fifo(q) if resolve(q, \"Properties.FifoQueue\") in {true, \"true\"}\n\n# Standard queue: FifoQueue absent or literally false (an unresolvable value is neither).\n_pf_sqsfo_std(q) if {\n\tprops := input.resources[q].properties\n\tis_object(props)\n\tobject.get(props, \"FifoQueue\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_sqsfo_std(q) if resolve(q, \"Properties.FifoQueue\") in {false, \"false\"}\n\n_pf_sqsfo_msg := {\n\t\"ContentBasedDeduplication\": \"Unknown Attribute ContentBasedDeduplication.\",\n\t\"DeduplicationScope\": \"You can specify the DeduplicationScope only when FifoQueue is set to true.\",\n\t\"FifoThroughputLimit\": \"You can specify the FifoThroughputLimit only when FifoQueue is set to true.\",\n}\n\nviolation contains make_diag_full(\"pf-sqs-fifo-only-attributes\", \"ERROR\", name,\n\tsprintf(\"Properties.%s\", [attr]),\n\tsprintf(\"%s is set on a standard queue (FifoQueue is not true); CreateQueue fails with \\\"%s\\\"\", [attr, _pf_sqsfo_msg[attr]]),\n\t_pf_sqsfo_fix, _pf_sqsfo_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\t_pf_sqsfo_std(name)\n\tsome attr, _ in _pf_sqsfo_msg\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, attr, \"__pf_absent\") != \"__pf_absent\"\n}\n\n_pf_sqsfo_enum contains [\"DeduplicationScope\", {\"messageGroup\", \"queue\"}]\n\n_pf_sqsfo_enum contains [\"FifoThroughputLimit\", {\"perQueue\", \"perMessageGroupId\"}]\n\nviolation contains make_diag_full(\"pf-sqs-fifo-only-attributes\", \"ERROR\", name,\n\tsprintf(\"Properties.%s\", [attr]),\n\tsprintf(\"%s '%s' is not one of %v; CreateQueue fails with \\\"Invalid value for the parameter %s. Reason: not a supported value.\\\"\", [attr, v, allowed, attr]),\n\t_pf_sqsfo_fix, _pf_sqsfo_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tsome [attr, allowed] in _pf_sqsfo_enum\n\tv := resolve(name, sprintf(\"Properties.%s\", [attr]))\n\tis_string(v)\n\tnot v in allowed\n}\n"
2677
+ },
2678
+ {
2679
+ "id": "pf-sqs-high-throughput-pairing",
2680
+ "service": "sqs",
2681
+ "severity": "ERROR",
2682
+ "title": "FifoThroughputLimit perMessageGroupId requires DeduplicationScope messageGroup",
2683
+ "upstream": "none",
2684
+ "resourceTypes": [
2685
+ "AWS::SQS::Queue"
2686
+ ],
2687
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsht_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html\"\n\n_pf_sqsht_fix := \"Set DeduplicationScope: messageGroup together with FifoThroughputLimit: perMessageGroupId (both are needed for high throughput)\"\n\nviolation contains make_diag_full(\"pf-sqs-high-throughput-pairing\", \"ERROR\", name,\n\t\"Properties.FifoThroughputLimit\",\n\tsprintf(\"FifoThroughputLimit is perMessageGroupId but DeduplicationScope is %s; CreateQueue fails with \\\"Invalid value for the parameter FifoThroughputLimit. Reason: To set FifoThroughputLimit to perMessageGroupId, the DeduplicationScope must be messageGroup.\\\"\", [shown]),\n\t_pf_sqsht_fix, _pf_sqsht_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tresolve(name, \"Properties.FifoThroughputLimit\") == \"perMessageGroupId\"\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tscope := object.get(props, \"DeduplicationScope\", null)\n\t_pf_sqsht_bad(scope)\n\tshown := _pf_sqsht_show(scope)\n}\n\n_pf_sqsht_bad(scope) if scope == null\n\n_pf_sqsht_bad(scope) if {\n\tis_string(scope)\n\tscope != \"messageGroup\"\n}\n\n_pf_sqsht_show(scope) := \"absent\" if scope == null\n\n_pf_sqsht_show(scope) := sprintf(\"'%s'\", [scope]) if is_string(scope)\n"
2688
+ },
2505
2689
  {
2506
2690
  "id": "pf-sqs-queue-name-format",
2507
2691
  "service": "sqs",
@@ -2513,16 +2697,349 @@ exports.BUNDLED_RULES = [
2513
2697
  ],
2514
2698
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsname_ok(n) if regex.match(`^[a-zA-Z0-9_-]{1,80}$`, n)\n\n_pf_sqsname_ok(n) if regex.match(`^[a-zA-Z0-9_-]{1,75}\\.fifo$`, n)\n\nviolation contains make_diag_full(\"pf-sqs-queue-name-format\", \"ERROR\", name,\n\t\"Properties.QueueName\",\n\tsprintf(\"QueueName '%s' is rejected: SQS accepts 1-80 characters of letters, numbers, hyphen and underscore (a FIFO queue adds the .fifo suffix)\", [n]),\n\t\"Rename the queue using [a-zA-Z0-9_-] within 80 characters (append .fifo only for FIFO queues)\",\n\t\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\") if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tn := resolve(name, \"Properties.QueueName\")\n\tis_string(n)\n\tnot _pf_sqsname_ok(n)\n}\n"
2515
2699
  },
2700
+ {
2701
+ "id": "pf-sqs-queue-policy-queues",
2702
+ "service": "sqs",
2703
+ "severity": "ERROR",
2704
+ "title": "QueuePolicy.Queues takes queue URLs (Ref Queue), never ARNs (Fn::GetAtt Queue.Arn), and must not be empty",
2705
+ "upstream": "none",
2706
+ "resourceTypes": [
2707
+ "AWS::SQS::QueuePolicy"
2708
+ ],
2709
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsqp_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sqs-queuepolicy.html\"\n\n_pf_sqsqp_fix := \"List the queues with Ref (the queue URL), not Fn::GetAtt Queue.Arn\"\n\nviolation contains make_diag_full(\"pf-sqs-queue-policy-queues\", \"ERROR\", name,\n\t\"Properties.Queues\",\n\t\"Queues is empty; the resource handler fails with \\\"Queues are required\\\"\",\n\t_pf_sqsqp_fix, _pf_sqsqp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::QueuePolicy\")\n\tqs := object.get(input.resources[name].properties, \"Queues\", null)\n\tis_array(qs)\n\tcount(qs) == 0\n}\n\n# Fn::GetAtt appears in the preprocessed document as a marker object whose\n# __kind names the attribute; Ref (the URL) is \"resource\". Literal ARNs are\n# strings.\nviolation contains make_diag_full(\"pf-sqs-queue-policy-queues\", \"ERROR\", name,\n\tsprintf(\"Properties.Queues.%d\", [i]),\n\t\"Queues entry is the queue ARN (Fn::GetAtt Queue.Arn) but QueuePolicy expects the queue URL; the resource handler fails with \\\"The address arn:aws:sqs:... is not valid for this endpoint.\\\"\",\n\t_pf_sqsqp_fix, _pf_sqsqp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::QueuePolicy\")\n\tqs := object.get(input.resources[name].properties, \"Queues\", null)\n\tis_array(qs)\n\tsome i, q in qs\n\tis_object(q)\n\tobject.get(q, \"__kind\", null) == \"getatt:Arn\"\n}\n\nviolation contains make_diag_full(\"pf-sqs-queue-policy-queues\", \"ERROR\", name,\n\tsprintf(\"Properties.Queues.%d\", [i]),\n\tsprintf(\"Queues entry '%s' is an ARN but QueuePolicy expects the queue URL (https://sqs.<region>.amazonaws.com/<account>/<name>); the resource handler fails with \\\"The address ... is not valid for this endpoint.\\\"\", [q]),\n\t_pf_sqsqp_fix, _pf_sqsqp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::QueuePolicy\")\n\tqs := object.get(input.resources[name].properties, \"Queues\", null)\n\tis_array(qs)\n\tsome i, q in qs\n\tis_string(q)\n\tstartswith(q, \"arn:\")\n}\n"
2710
+ },
2711
+ {
2712
+ "id": "pf-sqs-redrive-allow-policy",
2713
+ "service": "sqs",
2714
+ "severity": "ERROR",
2715
+ "title": "RedriveAllowPolicy: redrivePermission is required (allowAll|denyAll|byQueue); byQueue needs 1..10 sourceQueueArns and the other two forbid them",
2716
+ "upstream": "none",
2717
+ "resourceTypes": [
2718
+ "AWS::SQS::Queue"
2719
+ ],
2720
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsrap_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqsrap_fix := \"Use byQueue with 1-10 sourceQueueArns, or allowAll / denyAll without sourceQueueArns\"\n\n# RedriveAllowPolicy arrives as a JSON object or as a JSON string (both are valid CloudFormation).\n_pf_sqsrap_pol(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"RedriveAllowPolicy\", null)\n\tis_object(pol)\n}\n\n_pf_sqsrap_pol(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"RedriveAllowPolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n_pf_sqsrap_msg := \"Amazon SQS can't create the redrive allow policy\"\n\nviolation contains make_diag_full(\"pf-sqs-redrive-allow-policy\", \"ERROR\", name,\n\t\"Properties.RedriveAllowPolicy.redrivePermission\",\n\tsprintf(\"RedriveAllowPolicy has no redrivePermission; CreateQueue fails with \\\"%s, as it's in an unsupported format.\\\"\", [_pf_sqsrap_msg]),\n\t_pf_sqsrap_fix, _pf_sqsrap_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrap_pol(name)\n\tobject.get(pol, \"redrivePermission\", \"__pf_absent\") == \"__pf_absent\"\n}\n\nviolation contains make_diag_full(\"pf-sqs-redrive-allow-policy\", \"ERROR\", name,\n\t\"Properties.RedriveAllowPolicy.redrivePermission\",\n\tsprintf(\"redrivePermission '%s' is not allowAll, denyAll or byQueue; CreateQueue fails with \\\"%s, as it's in an unsupported format.\\\"\", [perm, _pf_sqsrap_msg]),\n\t_pf_sqsrap_fix, _pf_sqsrap_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tperm := object.get(_pf_sqsrap_pol(name), \"redrivePermission\", null)\n\tis_string(perm)\n\tnot perm in {\"allowAll\", \"denyAll\", \"byQueue\"}\n}\n\nviolation contains make_diag_full(\"pf-sqs-redrive-allow-policy\", \"ERROR\", name,\n\t\"Properties.RedriveAllowPolicy.sourceQueueArns\",\n\tsprintf(\"redrivePermission byQueue has %d sourceQueueArns (1 to 10 required); CreateQueue fails with \\\"%s. When you specify the byQueue permission type, you must also specify between 1 and 10 source queue ARNs.\\\"\", [n, _pf_sqsrap_msg]),\n\t_pf_sqsrap_fix, _pf_sqsrap_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrap_pol(name)\n\tobject.get(pol, \"redrivePermission\", null) == \"byQueue\"\n\tn := _pf_sqsrap_count(object.get(pol, \"sourceQueueArns\", null))\n\t_pf_sqsrap_out(n)\n}\n\n_pf_sqsrap_count(v) := 0 if v == null\n\n_pf_sqsrap_count(v) := count(v) if is_array(v)\n\n_pf_sqsrap_out(n) if n < 1\n\n_pf_sqsrap_out(n) if n > 10\n\nviolation contains make_diag_full(\"pf-sqs-redrive-allow-policy\", \"ERROR\", name,\n\t\"Properties.RedriveAllowPolicy.sourceQueueArns\",\n\tsprintf(\"redrivePermission %s does not take sourceQueueArns; CreateQueue fails with \\\"%s. You can specify source queue ARNs only when the permission type is byQueue.\\\"\", [perm, _pf_sqsrap_msg]),\n\t_pf_sqsrap_fix, _pf_sqsrap_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrap_pol(name)\n\tperm := object.get(pol, \"redrivePermission\", null)\n\tperm in {\"allowAll\", \"denyAll\"}\n\tobject.get(pol, \"sourceQueueArns\", \"__pf_absent\") != \"__pf_absent\"\n}\n"
2721
+ },
2722
+ {
2723
+ "id": "pf-sqs-redrive-arn-region",
2724
+ "service": "sqs",
2725
+ "severity": "ERROR",
2726
+ "title": "The dead-letter target and every RedriveAllowPolicy source queue must sit in the deploy region",
2727
+ "upstream": "none",
2728
+ "resourceTypes": [
2729
+ "AWS::SQS::Queue"
2730
+ ],
2731
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsrr_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html\"\n\n_pf_sqsrr_fix := \"Reference queues in the same region (Fn::GetAtt Queue.Arn of queues in this stack)\"\n\n# RedrivePolicy arrives as a JSON object or as a JSON string (both are valid CloudFormation).\n_pf_sqsrr_pol(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_object(pol)\n}\n\n_pf_sqsrr_pol(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n_pf_sqsrr_allow(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"RedriveAllowPolicy\", null)\n\tis_object(pol)\n}\n\n_pf_sqsrr_allow(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"RedriveAllowPolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n_pf_sqsrr_region(arn) := parts[3] if {\n\tstartswith(arn, \"arn:\")\n\tparts := split(arn, \":\")\n\tcount(parts) >= 6\n\tparts[2] == \"sqs\"\n}\n\n# Region comparison needs the deploy region, which only this pack sees\n# (data.cdk_preflight.deploy_region is defined in enforce mode; the rule\n# skips without it).\nviolation contains make_diag_full(\"pf-sqs-redrive-arn-region\", \"ERROR\", name,\n\t\"Properties.RedrivePolicy.deadLetterTargetArn\",\n\tsprintf(\"deadLetterTargetArn is in '%s' but the queue deploys to '%s'; CreateQueue fails with \\\"Dead-letter target must be in same region as the source.\\\"\", [r, region]),\n\t_pf_sqsrr_fix, _pf_sqsrr_url) if {\n\tregion := data.cdk_preflight.deploy_region\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tarn := object.get(_pf_sqsrr_pol(name), \"deadLetterTargetArn\", null)\n\tis_string(arn)\n\tr := _pf_sqsrr_region(arn)\n\tr != region\n}\n\nviolation contains make_diag_full(\"pf-sqs-redrive-arn-region\", \"ERROR\", name,\n\tsprintf(\"Properties.RedriveAllowPolicy.sourceQueueArns.%d\", [i]),\n\tsprintf(\"source queue '%s' is in '%s' but the queue deploys to '%s'; CreateQueue fails with \\\"All source queue ARNs must be in the same region as the current SQS queue.\\\"\", [arn, r, region]),\n\t_pf_sqsrr_fix, _pf_sqsrr_url) if {\n\tregion := data.cdk_preflight.deploy_region\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tarns := object.get(_pf_sqsrr_allow(name), \"sourceQueueArns\", null)\n\tis_array(arns)\n\tsome i, arn in arns\n\tis_string(arn)\n\tr := _pf_sqsrr_region(arn)\n\tr != region\n}\n"
2732
+ },
2733
+ {
2734
+ "id": "pf-sqs-redrive-policy",
2735
+ "service": "sqs",
2736
+ "severity": "ERROR",
2737
+ "title": "RedrivePolicy needs deadLetterTargetArn (an SQS queue ARN) and maxReceiveCount in 1..1000",
2738
+ "upstream": "none",
2739
+ "resourceTypes": [
2740
+ "AWS::SQS::Queue"
2741
+ ],
2742
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsrp_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqsrp_fix := \"Set both deadLetterTargetArn (Fn::GetAtt Queue.Arn) and maxReceiveCount between 1 and 1000\"\n\n# RedrivePolicy arrives as a JSON object or as a JSON string (both are valid CloudFormation).\n_pf_sqsrp_pol(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_object(pol)\n}\n\n_pf_sqsrp_pol(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\nviolation contains make_diag_full(\"pf-sqs-redrive-policy\", \"ERROR\", name,\n\tsprintf(\"Properties.RedrivePolicy.%s\", [key]),\n\tsprintf(\"RedrivePolicy has no %s; CreateQueue fails with \\\"Redrive policy does not contain mandatory attribute: %s.\\\"\", [key, key]),\n\t_pf_sqsrp_fix, _pf_sqsrp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrp_pol(name)\n\tsome key in [\"deadLetterTargetArn\", \"maxReceiveCount\"]\n\tobject.get(pol, key, \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_sqsrp_num(v) := v if is_number(v)\n\n_pf_sqsrp_num(v) := to_number(v) if {\n\tis_string(v)\n\tregex.match(\"^[0-9]+$\", v)\n}\n\nviolation contains make_diag_full(\"pf-sqs-redrive-policy\", \"ERROR\", name,\n\t\"Properties.RedrivePolicy.maxReceiveCount\",\n\tsprintf(\"maxReceiveCount %v is outside 1..1000; CreateQueue fails with \\\"Invalid value for maxReceiveCount: %v, valid values are from 1 to 1000 both inclusive.\\\"\", [n, n]),\n\t_pf_sqsrp_fix, _pf_sqsrp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrp_pol(name)\n\tn := _pf_sqsrp_num(object.get(pol, \"maxReceiveCount\", null))\n\t_pf_sqsrp_out(n)\n}\n\n_pf_sqsrp_out(n) if n < 1\n\n_pf_sqsrp_out(n) if n > 1000\n\nviolation contains make_diag_full(\"pf-sqs-redrive-policy\", \"ERROR\", name,\n\t\"Properties.RedrivePolicy.deadLetterTargetArn\",\n\tsprintf(\"deadLetterTargetArn '%s' is not an SQS queue ARN; CreateQueue fails with \\\"Only SQS queues are valid resources for deadLetterTargetArn\\\"\", [arn]),\n\t_pf_sqsrp_fix, _pf_sqsrp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrp_pol(name)\n\tarn := object.get(pol, \"deadLetterTargetArn\", null)\n\tis_string(arn)\n\tnot contains(arn, \"${\")\n\tnot regex.match(\"^arn:[^:]+:sqs:\", arn)\n}\n"
2743
+ },
2744
+ {
2745
+ "id": "pf-sqs-sse-exclusive",
2746
+ "service": "sqs",
2747
+ "severity": "ERROR",
2748
+ "title": "SqsManagedSseEnabled: true and KmsMasterKeyId are mutually exclusive (one SSE type per queue)",
2749
+ "upstream": "none",
2750
+ "resourceTypes": [
2751
+ "AWS::SQS::Queue"
2752
+ ],
2753
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqssse_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqssse_fix := \"Keep either SqsManagedSseEnabled: true (SSE-SQS) or KmsMasterKeyId (SSE-KMS); SqsManagedSseEnabled: false with a key is fine\"\n\nviolation contains make_diag_full(\"pf-sqs-sse-exclusive\", \"ERROR\", name,\n\t\"Properties.KmsMasterKeyId\",\n\t\"SqsManagedSseEnabled is true and KmsMasterKeyId is set; CreateQueue fails with \\\"You can use one type of server-side encryption (SSE) at one time. You can either enable KMS SSE or SQS SSE.\\\"\",\n\t_pf_sqssse_fix, _pf_sqssse_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tresolve(name, \"Properties.SqsManagedSseEnabled\") in {true, \"true\"}\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"KmsMasterKeyId\", \"__pf_absent\") != \"__pf_absent\"\n}\n"
2754
+ },
2755
+ {
2756
+ "id": "pf-sfn-asl-branch-shape",
2757
+ "service": "stepfunctions",
2758
+ "severity": "ERROR",
2759
+ "title": "Parallel Branches is a non-empty array and every branch / Map ItemProcessor / Iterator carries both StartAt and States",
2760
+ "upstream": "none",
2761
+ "resourceTypes": [
2762
+ "AWS::StepFunctions::StateMachine"
2763
+ ],
2764
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnbr_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-parallel.html\"\n\n_pf_sfnbr_fix := \"Give every branch and item processor a StartAt and a States object; a Parallel needs at least one branch\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-branch-shape\", \"ERROR\", name,\n\tsprintf(\"%s.Branches\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Parallel state '%s' has an empty Branches array; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value cannot be empty\\\"\", [sname]),\n\t_pf_sfnbr_fix, _pf_sfnbr_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Parallel\"\n\tarr := object.get(st, \"Branches\", null)\n\tis_array(arr)\n\tcount(arr) == 0\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-branch-shape\", \"ERROR\", name,\n\tsprintf(\"%s.Branches[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Parallel state '%s' branch %d has no %s; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [%s]\\\"\", [sname, i, req, req]),\n\t_pf_sfnbr_fix, _pf_sfnbr_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tarr := object.get(st, \"Branches\", [])\n\tis_array(arr)\n\tsome i, b in arr\n\tis_object(b)\n\tsome req in [\"StartAt\", \"States\"]\n\tnot _pf_sfnlib_has(b, req)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-branch-shape\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"Map state '%s' %s has no %s; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [%s]\\\"\", [sname, key, req, req]),\n\t_pf_sfnbr_fix, _pf_sfnbr_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome key in [\"ItemProcessor\", \"Iterator\"]\n\tproc := object.get(st, key, null)\n\tis_object(proc)\n\tsome req in [\"StartAt\", \"States\"]\n\tnot _pf_sfnlib_has(proc, req)\n}\n"
2765
+ },
2766
+ {
2767
+ "id": "pf-sfn-asl-choice-rules",
2768
+ "service": "stepfunctions",
2769
+ "severity": "ERROR",
2770
+ "title": "Choice rules: Choices is non-empty, each top-level rule has Next and exactly one selector (Variable / And / Or / Not / Condition), a Variable rule has exactly one comparator, and Next never sits inside And/Or/Not",
2771
+ "upstream": "none",
2772
+ "resourceTypes": [
2773
+ "AWS::StepFunctions::StateMachine"
2774
+ ],
2775
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnch_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-choice.html\"\n\n_pf_sfnch_fix := \"Give every top-level Choice rule one comparison (or one And/Or/Not/Condition) and a Next; nested rules carry no Next\"\n\n_pf_sfnch_cmp := {\"StringEquals\", \"StringEqualsPath\", \"StringLessThan\", \"StringLessThanPath\", \"StringGreaterThan\", \"StringGreaterThanPath\", \"StringLessThanEquals\", \"StringLessThanEqualsPath\", \"StringGreaterThanEquals\", \"StringGreaterThanEqualsPath\", \"StringMatches\", \"NumericEquals\", \"NumericEqualsPath\", \"NumericLessThan\", \"NumericLessThanPath\", \"NumericGreaterThan\", \"NumericGreaterThanPath\", \"NumericLessThanEquals\", \"NumericLessThanEqualsPath\", \"NumericGreaterThanEquals\", \"NumericGreaterThanEqualsPath\", \"BooleanEquals\", \"BooleanEqualsPath\", \"TimestampEquals\", \"TimestampEqualsPath\", \"TimestampLessThan\", \"TimestampLessThanPath\", \"TimestampGreaterThan\", \"TimestampGreaterThanPath\", \"TimestampLessThanEquals\", \"TimestampLessThanEqualsPath\", \"TimestampGreaterThanEquals\", \"TimestampGreaterThanEqualsPath\", \"IsNull\", \"IsPresent\", \"IsNumeric\", \"IsString\", \"IsBoolean\", \"IsTimestamp\"}\n\n_pf_sfnch_sel := {\"And\", \"Or\", \"Not\", \"Variable\", \"Condition\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Choice state '%s' has an empty Choices array; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value cannot be empty\\\"\", [sname]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Choice\"\n\tarr := object.get(st, \"Choices\", null)\n\tis_array(arr)\n\tcount(arr) == 0\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d has no Next; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [Next]\\\"\", [sname, i]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tnot _pf_sfnlib_has(c, \"Next\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d].%s\", [_pf_sfnlib_path(name, p, sname), i, op]),\n\tsprintf(\"Choice state '%s' rule %d nests a Next inside %s; only the top-level rule may carry Next, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field 'Next' is not supported\\\"\", [sname, i, op]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tsome op in [\"And\", \"Or\"]\n\tarr := object.get(c, op, [])\n\tis_array(arr)\n\tsome sub in arr\n\tis_object(sub)\n\t_pf_sfnlib_has(sub, \"Next\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d].Not\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d nests a Next inside Not; only the top-level rule may carry Next, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field 'Next' is not supported\\\"\", [sname, i]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tsub := object.get(c, \"Not\", null)\n\tis_object(sub)\n\t_pf_sfnlib_has(sub, \"Next\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d has %d comparison operators; a Variable rule takes exactly one, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: There should only be one of the following fields: [StringEquals, ...]\\\"\", [sname, i, n]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\t_pf_sfnlib_has(c, \"Variable\")\n\tn := count({k | some k, _ in c; k in _pf_sfnch_cmp})\n\tn != 1\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-choice-rules\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d must have exactly one of And / Or / Not / Variable / Condition (found %d); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The object must have only one of the following fields, [And, Or, Not, Variable, Condition]\\\"\", [sname, i, n]),\n\t_pf_sfnch_fix, _pf_sfnch_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tn := count({k | some k, _ in c; k in _pf_sfnch_sel})\n\tn != 1\n}\n"
2776
+ },
2777
+ {
2778
+ "id": "pf-sfn-asl-credentials",
2779
+ "service": "stepfunctions",
2780
+ "severity": "ERROR",
2781
+ "title": "A Task Credentials object needs RoleArn, and Credentials is not accepted on an Activity resource",
2782
+ "upstream": "none",
2783
+ "resourceTypes": [
2784
+ "AWS::StepFunctions::StateMachine"
2785
+ ],
2786
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfncred_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-task.html\"\n\n_pf_sfncred_fix := \"Set Credentials.RoleArn (or RoleArn.$); drop Credentials from activity tasks\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-credentials\", \"ERROR\", name,\n\tsprintf(\"%s.Credentials\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' has Credentials without RoleArn; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field 'RoleArn' is required but was missing\\\"\", [sname]),\n\t_pf_sfncred_fix, _pf_sfncred_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tcred := object.get(st, \"Credentials\", null)\n\tis_object(cred)\n\tnot _pf_sfnlib_has(cred, \"RoleArn\")\n\tnot _pf_sfnlib_has(cred, \"RoleArn.$\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-credentials\", \"ERROR\", name,\n\tsprintf(\"%s.Credentials\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' sets Credentials on an Activity resource; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field 'Credentials' is not supported for activities\\\"\", [sname]),\n\t_pf_sfncred_fix, _pf_sfncred_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_has(st, \"Credentials\")\n\tres := object.get(st, \"Resource\", null)\n\tis_string(res)\n\tregex.match(\"^arn:[^:]+:states:[^:]+:[^:]+:activity:\", res)\n}\n"
2787
+ },
2788
+ {
2789
+ "id": "pf-sfn-asl-duplicate-state-name",
2790
+ "service": "stepfunctions",
2791
+ "severity": "ERROR",
2792
+ "title": "ASL state names must be unique across the whole state machine, including Parallel branches and Map item processors",
2793
+ "upstream": "none",
2794
+ "resourceTypes": [
2795
+ "AWS::StepFunctions::StateMachine"
2796
+ ],
2797
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfndup_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-parallel.html\"\n\n_pf_sfndup_fix := \"Rename one of the states; names are global to the state machine, not to the branch\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-duplicate-state-name\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p2, sname),\n\tsprintf(\"state name '%s' is defined in both %s and %s; names must be unique across the whole state machine, and CreateStateMachine fails with \\\"DUPLICATE_STATE_NAME: Duplicate State name: %s\\\"\", [sname, p1, p2, sname]),\n\t_pf_sfndup_fix, _pf_sfndup_url) if {\n\tsome [name, p1, _, sname, _] in _pf_sfnlib_states\n\tsome [n2, p2, _, sn2, _] in _pf_sfnlib_states\n\tn2 == name\n\tsn2 == sname\n\tp1 < p2\n}\n"
2798
+ },
2799
+ {
2800
+ "id": "pf-sfn-asl-integration-parameters",
2801
+ "service": "stepfunctions",
2802
+ "severity": "ERROR",
2803
+ "title": "An arn:<partition>:states::: integration Task needs Parameters (JSONPath) or Arguments (JSONata), and the common integrations need their required fields (lambda:invoke FunctionName, sqs:sendMessage QueueUrl+MessageBody, sns:publish Message, dynamodb:putItem TableName+Item, dynamodb:getItem TableName+Key, states:startExecution StateMachineArn, events:putEvents Entries, ecs:runTask TaskDefinition, glue:startJobRun JobName)",
2804
+ "upstream": "none",
2805
+ "resourceTypes": [
2806
+ "AWS::StepFunctions::StateMachine"
2807
+ ],
2808
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnip_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html\"\n\n_pf_sfnip_fix := \"Add a Parameters (or Arguments) object with the fields the integration requires\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-integration-parameters\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"Task state '%s' calls the %s:%s integration without a Parameters object; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Parameters field is required for resource ARN: arn:aws:states:::%s:%s\\\"\", [sname, svc, api, svc, api]),\n\t_pf_sfnip_fix, _pf_sfnip_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\t_pf_sfnlib_ql(name, st) == \"JSONPath\"\n\tnot _pf_sfnlib_has(st, \"Parameters\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-integration-parameters\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"JSONata Task state '%s' calls the %s:%s integration without an Arguments object; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Arguments field is required for resource ARN: arn:aws:states:::%s:%s\\\"\", [sname, svc, api, svc, api]),\n\t_pf_sfnip_fix, _pf_sfnip_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\tnot _pf_sfnlib_has(st, \"Arguments\")\n}\n\n# Required request fields, measured with ValidateStateMachineDefinition on\n# 2026-09-05 (a \".$\" suffixed key counts as present).\n_pf_sfnip_req contains [\"lambda\", \"invoke\", \"FunctionName\"]\n\n_pf_sfnip_req contains [\"sqs\", \"sendMessage\", \"QueueUrl\"]\n\n_pf_sfnip_req contains [\"sqs\", \"sendMessage\", \"MessageBody\"]\n\n_pf_sfnip_req contains [\"sns\", \"publish\", \"Message\"]\n\n_pf_sfnip_req contains [\"dynamodb\", \"putItem\", \"TableName\"]\n\n_pf_sfnip_req contains [\"dynamodb\", \"putItem\", \"Item\"]\n\n_pf_sfnip_req contains [\"dynamodb\", \"getItem\", \"TableName\"]\n\n_pf_sfnip_req contains [\"dynamodb\", \"getItem\", \"Key\"]\n\n_pf_sfnip_req contains [\"states\", \"startExecution\", \"StateMachineArn\"]\n\n_pf_sfnip_req contains [\"events\", \"putEvents\", \"Entries\"]\n\n_pf_sfnip_req contains [\"ecs\", \"runTask\", \"TaskDefinition\"]\n\n_pf_sfnip_req contains [\"glue\", \"startJobRun\", \"JobName\"]\n\n_pf_sfnip_params(st) := prm if {\n\tprm := object.get(st, \"Parameters\", null)\n\tis_object(prm)\n}\n\n_pf_sfnip_params(st) := prm if {\n\tnot is_object(object.get(st, \"Parameters\", null))\n\tprm := object.get(st, \"Arguments\", null)\n\tis_object(prm)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-integration-parameters\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"Task state '%s' calls %s:%s without the required field '%s'; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field '%s' is required but was missing\\\"\", [sname, svc, base, field, field]),\n\t_pf_sfnip_fix, _pf_sfnip_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\tbase := regex.replace(api, \"[.](sync|waitForTaskToken)(:2)?$\", \"\")\n\tsome [s2, b2, field] in _pf_sfnip_req\n\ts2 == svc\n\tb2 == base\n\tprm := _pf_sfnip_params(st)\n\tnot _pf_sfnlib_has(prm, field)\n\tnot _pf_sfnlib_has(prm, sprintf(\"%s.$\", [field]))\n}\n"
2809
+ },
2810
+ {
2811
+ "id": "pf-sfn-asl-jsonpath-syntax",
2812
+ "service": "stepfunctions",
2813
+ "severity": "ERROR",
2814
+ "title": "JSONPath fields start with $ (InputPath, OutputPath, *Path, Choice Variable), ResultPath/ItemsPath are Reference Paths (no *, .., ?, @), values of \".$\" keys are a path or a States.* intrinsic, and Assign variable names are alphanumeric and not the reserved \"states\"",
2815
+ "upstream": "none",
2816
+ "resourceTypes": [
2817
+ "AWS::StepFunctions::StateMachine"
2818
+ ],
2819
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnjp_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/input-output-paths.html\"\n\n_pf_sfnjp_fix := \"Write paths as $.field (Reference Paths for ResultPath/ItemsPath), \\\".$\\\" values as $.path or States.Func(...), and variable names as letters/digits\"\n\n_pf_sfnjp_pathfields := {\"InputPath\", \"OutputPath\", \"ResultPath\", \"ItemsPath\", \"TimeoutSecondsPath\", \"HeartbeatSecondsPath\", \"SecondsPath\", \"TimestampPath\", \"MaxConcurrencyPath\", \"ToleratedFailurePercentagePath\", \"ToleratedFailureCountPath\", \"ErrorPath\", \"CausePath\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' %s '%s' is not a JSONPath (must start with $); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value must be a valid JSONPath.\\\"\", [sname, f, v]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f in _pf_sfnjp_pathfields\n\tv := object.get(st, f, null)\n\tis_string(v)\n\tnot startswith(v, \"$\")\n\tnot contains(v, \"${\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d].%s\", [_pf_sfnlib_path(name, p, sname), i, k]),\n\tsprintf(\"Choice state '%s' rule %d %s '%s' is not a Reference Path (must start with $); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value is not a Reference Path: Reference path didn't start with '$'\\\"\", [sname, i, k, v]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tsome k, v in c\n\tis_string(v)\n\tk in {\"Variable\", \"StringEqualsPath\", \"StringLessThanPath\", \"StringGreaterThanPath\", \"StringLessThanEqualsPath\", \"StringGreaterThanEqualsPath\", \"NumericEqualsPath\", \"NumericLessThanPath\", \"NumericGreaterThanPath\", \"NumericLessThanEqualsPath\", \"NumericGreaterThanEqualsPath\", \"BooleanEqualsPath\", \"TimestampEqualsPath\", \"TimestampLessThanPath\", \"TimestampGreaterThanPath\", \"TimestampLessThanEqualsPath\", \"TimestampGreaterThanEqualsPath\"}\n\tnot startswith(v, \"$\")\n}\n\n_pf_sfnjp_refpath contains [name, path, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f in [\"ResultPath\", \"ItemsPath\"]\n\tv := object.get(st, f, null)\n\tis_string(v)\n\tpath := sprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f])\n}\n\n_pf_sfnjp_refpath contains [name, path, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tarr := object.get(st, \"Catch\", [])\n\tis_array(arr)\n\tsome i, c in arr\n\tis_object(c)\n\tv := object.get(c, \"ResultPath\", null)\n\tis_string(v)\n\tpath := sprintf(\"%s.Catch[%d].ResultPath\", [_pf_sfnlib_path(name, p, sname), i])\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tpath,\n\tsprintf(\"'%s' is not a Reference Path: wildcards, filters and deep scans (* .. ? @) are not allowed where a single JSON node is addressed; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value is not a Reference Path\\\"\", [v]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, path, v] in _pf_sfnjp_refpath\n\tregex.match(\"[*?@]|[.][.]\", v)\n}\n\n# \".$\" keys of payload templates (Parameters / ResultSelector / ItemSelector),\n# two levels deep.\n_pf_sfnjp_dollar contains [name, path, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f in [\"Parameters\", \"ResultSelector\", \"ItemSelector\"]\n\to := object.get(st, f, null)\n\tis_object(o)\n\tsome k, v in o\n\tendswith(k, \".$\")\n\tis_string(v)\n\tpath := sprintf(\"%s.%s.%s\", [_pf_sfnlib_path(name, p, sname), f, k])\n}\n\n_pf_sfnjp_dollar contains [name, path, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f in [\"Parameters\", \"ResultSelector\", \"ItemSelector\"]\n\to := object.get(st, f, null)\n\tis_object(o)\n\tsome k, o2 in o\n\tis_object(o2)\n\tsome k2, v in o2\n\tendswith(k2, \".$\")\n\tis_string(v)\n\tpath := sprintf(\"%s.%s.%s.%s\", [_pf_sfnlib_path(name, p, sname), f, k, k2])\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tpath,\n\tsprintf(\"value '%s' of a \\\".$\\\" key must be a JSONPath ($...) or an intrinsic function (States....); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The value for the field '...$' must be a valid JSONPath or a valid intrinsic function call\\\"\", [v]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, path, v] in _pf_sfnjp_dollar\n\tnot startswith(v, \"$\")\n\tnot startswith(v, \"States.\")\n\tnot contains(v, \"${\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tsprintf(\"%s.Assign.%s\", [_pf_sfnlib_path(name, p, sname), k]),\n\tsprintf(\"state '%s' assigns the reserved variable name 'states'; CreateStateMachine fails with \\\"RESERVED_VARIABLE_NAME: Cannot assign to reserved variable '$states'.\\\"\", [sname]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\ta := object.get(st, \"Assign\", null)\n\tis_object(a)\n\tsome k, _ in a\n\tk == \"states\"\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-jsonpath-syntax\", \"ERROR\", name,\n\tsprintf(\"%s.Assign.%s\", [_pf_sfnlib_path(name, p, sname), k]),\n\tsprintf(\"state '%s' assigns variable '%s'; variable names are letters and digits starting with a letter, and CreateStateMachine fails with \\\"INVALID_VARIABLE_NAME: Invalid variable name '%s': the variable name contains invalid characters.\\\"\", [sname, k, k]),\n\t_pf_sfnjp_fix, _pf_sfnjp_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\ta := object.get(st, \"Assign\", null)\n\tis_object(a)\n\tsome k, _ in a\n\tnot regex.match(\"^[A-Za-z][A-Za-z0-9_]*$\", k)\n}\n"
2820
+ },
2821
+ {
2822
+ "id": "pf-sfn-asl-map-distributed",
2823
+ "service": "stepfunctions",
2824
+ "severity": "ERROR",
2825
+ "title": "Map ProcessorConfig and ItemReader shape: DISTRIBUTED requires ExecutionType (STANDARD|EXPRESS) and INLINE forbids it; ItemReader.Resource is s3:getObject or s3:listObjectsV2; CSV input needs CSVHeaderLocation (GIVEN needs CSVHeaders) and JSON input forbids it",
2826
+ "upstream": "none",
2827
+ "resourceTypes": [
2828
+ "AWS::StepFunctions::StateMachine"
2829
+ ],
2830
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnmd_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-map-distributed.html\"\n\n_pf_sfnmd_fix := \"Set ProcessorConfig.ExecutionType for DISTRIBUTED mode only, and shape ItemReader per the Distributed Map documentation\"\n\n_pf_sfnmd_cfg contains [name, p, sname, key, cfg] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome key in [\"ItemProcessor\", \"Iterator\"]\n\tproc := object.get(st, key, null)\n\tis_object(proc)\n\tcfg := object.get(proc, \"ProcessorConfig\", null)\n\tis_object(cfg)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.%s.ProcessorConfig\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"Map state '%s' runs in DISTRIBUTED mode without ExecutionType; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [ExecutionType]\\\"\", [sname]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, key, cfg] in _pf_sfnmd_cfg\n\tobject.get(cfg, \"Mode\", null) == \"DISTRIBUTED\"\n\tnot _pf_sfnlib_has(cfg, \"ExecutionType\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.%s.ProcessorConfig.ExecutionType\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"Map state '%s' ExecutionType '%s' is not STANDARD or EXPRESS; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value should be one of the following: [STANDARD, EXPRESS]\\\"\", [sname, et]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, key, cfg] in _pf_sfnmd_cfg\n\tet := object.get(cfg, \"ExecutionType\", null)\n\tis_string(et)\n\tnot et in {\"STANDARD\", \"EXPRESS\"}\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.%s.ProcessorConfig.ExecutionType\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"Map state '%s' sets ExecutionType in INLINE mode; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field 'ExecutionType' is not supported\\\"\", [sname]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, key, cfg] in _pf_sfnmd_cfg\n\tobject.get(cfg, \"Mode\", null) == \"INLINE\"\n\t_pf_sfnlib_has(cfg, \"ExecutionType\")\n}\n\n_pf_sfnmd_reader contains [name, p, sname, ir] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Map\"\n\tir := object.get(st, \"ItemReader\", null)\n\tis_object(ir)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.ItemReader.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Map state '%s' ItemReader.Resource '%s' is not s3:getObject or s3:listObjectsV2; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field 'Resource' does not match any of the allowed values\\\"\", [sname, res]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, ir] in _pf_sfnmd_reader\n\tres := object.get(ir, \"Resource\", null)\n\tis_string(res)\n\tnot contains(res, \"${\")\n\tnot regex.match(\"^arn:[^:]+:states:::s3:(getObject|listObjectsV2)$\", res)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.ItemReader.ReaderConfig\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Map state '%s' reads CSV without CSVHeaderLocation; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field 'CSVHeaderLocation' is required\\\"\", [sname]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, ir] in _pf_sfnmd_reader\n\trc := object.get(ir, \"ReaderConfig\", null)\n\tis_object(rc)\n\tobject.get(rc, \"InputType\", null) == \"CSV\"\n\tnot _pf_sfnlib_has(rc, \"CSVHeaderLocation\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.ItemReader.ReaderConfig.CSVHeaderLocation\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Map state '%s' reads JSON but sets CSVHeaderLocation; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field 'CSVHeaderLocation' is not supported\\\"\", [sname]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, ir] in _pf_sfnmd_reader\n\trc := object.get(ir, \"ReaderConfig\", null)\n\tis_object(rc)\n\tobject.get(rc, \"InputType\", null) == \"JSON\"\n\t_pf_sfnlib_has(rc, \"CSVHeaderLocation\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-map-distributed\", \"ERROR\", name,\n\tsprintf(\"%s.ItemReader.ReaderConfig\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Map state '%s' sets CSVHeaderLocation GIVEN without CSVHeaders; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [CSVHeaders]\\\"\", [sname]),\n\t_pf_sfnmd_fix, _pf_sfnmd_url) if {\n\tsome [name, p, sname, ir] in _pf_sfnmd_reader\n\trc := object.get(ir, \"ReaderConfig\", null)\n\tis_object(rc)\n\tobject.get(rc, \"CSVHeaderLocation\", null) == \"GIVEN\"\n\tnot _pf_sfnlib_has(rc, \"CSVHeaders\")\n}\n"
2831
+ },
2516
2832
  {
2517
2833
  "id": "pf-sfn-asl-missing-state",
2518
2834
  "service": "stepfunctions",
2519
2835
  "severity": "ERROR",
2520
- "title": "ASL Next/Default/Choices must reference a defined state (top-level states; a dangling StartAt is covered by engine rule E3601)",
2836
+ "title": "ASL Next/Default/Choices[].Next/Catch[].Next must reference a state defined in the same States block, at every nesting level (a dangling StartAt is covered by engine rule E3601)",
2837
+ "upstream": "none",
2838
+ "resourceTypes": [
2839
+ "AWS::StepFunctions::StateMachine"
2840
+ ],
2841
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnmiss_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/statemachine-structure.html\"\n\n_pf_sfnmiss_fix := \"Point Next/Default/Choices[].Next/Catch[].Next at a state defined in the same States block\"\n\n# [name, scope path, scope states, state name, field label, target]\n_pf_sfnmiss_ref contains [name, p, s, sname, key, target] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome key in [\"Next\", \"Default\"]\n\ttarget := object.get(st, key, null)\n\tis_string(target)\n}\n\n_pf_sfnmiss_ref contains [name, p, s, sname, key, target] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome field in [\"Choices\", \"Catch\"]\n\tarr := object.get(st, field, [])\n\tis_array(arr)\n\tsome i, c in arr\n\tis_object(c)\n\ttarget := object.get(c, \"Next\", null)\n\tis_string(target)\n\tkey := sprintf(\"%s[%d].Next\", [field, i])\n}\n\n# NOTE: a dangling StartAt (top level and Parallel branches) is deliberately\n# NOT checked here — the engine's built-in E3601 (ERROR/CFN_LINT) covers it\n# (verified against 1.7.0-beta on 2026-09-05). A Branch may not transition to\n# a state outside its own States block either: the service scopes names.\nviolation contains make_diag_full(\"pf-sfn-asl-missing-state\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"state '%s' references state '%s' via %s, but no state with that name is defined in the same States block; CreateStateMachine fails with \\\"MISSING_TRANSITION_TARGET: Missing 'Next' target: %s\\\"\", [sname, target, key, target]),\n\t_pf_sfnmiss_fix, _pf_sfnmiss_url) if {\n\tsome [name, p, s, sname, key, target] in _pf_sfnmiss_ref\n\tnot target in object.keys(s)\n}\n"
2842
+ },
2843
+ {
2844
+ "id": "pf-sfn-asl-name-limits",
2845
+ "service": "stepfunctions",
2846
+ "severity": "ERROR",
2847
+ "title": "ASL state names are at most 80 characters; a Distributed Map Label is at most 40 characters and unique within the state machine",
2848
+ "upstream": "none",
2849
+ "resourceTypes": [
2850
+ "AWS::StepFunctions::StateMachine"
2851
+ ],
2852
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnnm_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/service-quotas.html\"\n\n_pf_sfnnm_fix := \"Shorten the state name / Label; give each Distributed Map a distinct Label\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-name-limits\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"state name '%s' is %d characters long (maximum 80); CreateStateMachine fails with \\\"INVALID_STATE_NAME: ... exceeds the 80-character limit allowed by the service\\\"\", [sname, count(sname)]),\n\t_pf_sfnnm_fix, _pf_sfnnm_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tcount(sname) > 80\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-name-limits\", \"ERROR\", name,\n\tsprintf(\"%s.Label\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"state '%s' Label is %d characters long (maximum 40); CreateStateMachine fails with \\\"INVALID_LABEL_NAME: ... exceeds the 40-character limit allowed by the service\\\"\", [sname, count(l)]),\n\t_pf_sfnnm_fix, _pf_sfnnm_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tl := object.get(st, \"Label\", null)\n\tis_string(l)\n\tcount(l) > 40\n}\n\n_pf_sfnnm_label contains [name, path, l] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tl := object.get(st, \"Label\", null)\n\tis_string(l)\n\tpath := _pf_sfnlib_path(name, p, sname)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-name-limits\", \"ERROR\", name,\n\tsprintf(\"%s.Label\", [path2]),\n\tsprintf(\"Label '%s' is used by both %s and %s; Map labels must be unique, and CreateStateMachine fails with \\\"DUPLICATE_LABEL_NAME: Duplicate Label name: %s\\\"\", [l, path1, path2, l]),\n\t_pf_sfnnm_fix, _pf_sfnnm_url) if {\n\tsome [name, path1, l] in _pf_sfnnm_label\n\tsome [n2, path2, l2] in _pf_sfnnm_label\n\tn2 == name\n\tl2 == l\n\tpath1 < path2\n}\n"
2853
+ },
2854
+ {
2855
+ "id": "pf-sfn-asl-next-end",
2856
+ "service": "stepfunctions",
2857
+ "severity": "ERROR",
2858
+ "title": "A Task/Pass/Wait/Parallel/Map state carries exactly one of Next or End: true",
2859
+ "upstream": "none",
2860
+ "resourceTypes": [
2861
+ "AWS::StepFunctions::StateMachine"
2862
+ ],
2863
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnne_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/statemachine-structure.html\"\n\n_pf_sfnne_fix := \"Keep either Next (transition) or End: true (terminal) on the state, never both and never neither\"\n\n_pf_sfnne_types := {\"Task\", \"Pass\", \"Wait\", \"Parallel\", \"Map\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-next-end\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"state '%s' has both Next and End: true; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: There should only be one of the following fields: [Next, End]\\\"\", [sname]),\n\t_pf_sfnne_fix, _pf_sfnne_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) in _pf_sfnne_types\n\t_pf_sfnlib_has(st, \"Next\")\n\tobject.get(st, \"End\", false) == true\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-next-end\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"state '%s' has neither Next nor End: true, so the execution cannot leave it; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: This object should have only one of the following fields: [Next, End]\\\"\", [sname]),\n\t_pf_sfnne_fix, _pf_sfnne_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) in _pf_sfnne_types\n\tnot _pf_sfnlib_has(st, \"Next\")\n\tobject.get(st, \"End\", false) != true\n}\n"
2864
+ },
2865
+ {
2866
+ "id": "pf-sfn-asl-numeric-ranges",
2867
+ "service": "stepfunctions",
2868
+ "severity": "ERROR",
2869
+ "title": "ASL numeric fields have service-side ranges the schema does not carry: TimeoutSeconds/HeartbeatSeconds 1..99999999, Wait Seconds 0..99999999, MaxConcurrency >= 0, ToleratedFailurePercentage <= 100, Retry MaxAttempts 0..99999999, BackoffRate >= 1.0, MaxDelaySeconds 1..31622400, and integers must be numbers",
2870
+ "upstream": "none",
2871
+ "resourceTypes": [
2872
+ "AWS::StepFunctions::StateMachine"
2873
+ ],
2874
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnnum_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-task.html\"\n\n_pf_sfnnum_fix := \"Use a value inside the documented range (JSONata states may use a {% %} expression instead)\"\n\n# Measured with ValidateStateMachineDefinition on 2026-09-05. Retry\n# IntervalSeconds 0 and the top-level TimeoutSeconds 0 are accepted, so they\n# are deliberately absent here.\n_pf_sfnnum_min contains [\"TimeoutSeconds\", 1]\n\n_pf_sfnnum_min contains [\"HeartbeatSeconds\", 1]\n\n_pf_sfnnum_min contains [\"Seconds\", 0]\n\n_pf_sfnnum_min contains [\"MaxConcurrency\", 0]\n\n_pf_sfnnum_max contains [\"TimeoutSeconds\", 99999999]\n\n_pf_sfnnum_max contains [\"HeartbeatSeconds\", 99999999]\n\n_pf_sfnnum_max contains [\"Seconds\", 99999999]\n\n_pf_sfnnum_max contains [\"ToleratedFailurePercentage\", 100]\n\n_pf_sfnnum_rmin contains [\"MaxAttempts\", 0]\n\n_pf_sfnnum_rmin contains [\"BackoffRate\", 1]\n\n_pf_sfnnum_rmin contains [\"MaxDelaySeconds\", 1]\n\n_pf_sfnnum_rmax contains [\"MaxAttempts\", 99999999]\n\n_pf_sfnnum_rmax contains [\"MaxDelaySeconds\", 31622400]\n\n_pf_sfnnum_int := {\"TimeoutSeconds\", \"HeartbeatSeconds\", \"Seconds\", \"MaxConcurrency\", \"ToleratedFailurePercentage\", \"ToleratedFailureCount\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-numeric-ranges\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' %s is %v, below the minimum %v; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Minimum value is %v\\\"\", [sname, f, v, m, m]),\n\t_pf_sfnnum_fix, _pf_sfnnum_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome [f, m] in _pf_sfnnum_min\n\tv := object.get(st, f, null)\n\tis_number(v)\n\tv < m\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-numeric-ranges\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' %s is %v, above the maximum %v; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Maximum value is %v\\\"\", [sname, f, v, m, m]),\n\t_pf_sfnnum_fix, _pf_sfnnum_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome [f, m] in _pf_sfnnum_max\n\tv := object.get(st, f, null)\n\tis_number(v)\n\tv > m\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-numeric-ranges\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' %s is the string '%s'; the field takes an integer (or a {%% %%} JSONata expression), and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Expected value of type Integer\\\"\", [sname, f, v]),\n\t_pf_sfnnum_fix, _pf_sfnnum_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f in _pf_sfnnum_int\n\tv := object.get(st, f, null)\n\tis_string(v)\n\tnot startswith(v, \"{%\")\n\tnot contains(v, \"${\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-numeric-ranges\", \"ERROR\", name,\n\tsprintf(\"%s.Retry[%d].%s\", [_pf_sfnlib_path(name, p, sname), i, f]),\n\tsprintf(\"state '%s' Retry[%d] %s is %v, below the minimum %v; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Minimum value is %v\\\"\", [sname, i, f, v, m, m]),\n\t_pf_sfnnum_fix, _pf_sfnnum_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tarr := object.get(st, \"Retry\", [])\n\tis_array(arr)\n\tsome i, r in arr\n\tis_object(r)\n\tsome [f, m] in _pf_sfnnum_rmin\n\tv := object.get(r, f, null)\n\tis_number(v)\n\tv < m\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-numeric-ranges\", \"ERROR\", name,\n\tsprintf(\"%s.Retry[%d].%s\", [_pf_sfnlib_path(name, p, sname), i, f]),\n\tsprintf(\"state '%s' Retry[%d] %s is %v, above the maximum %v; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Maximum value is %v\\\"\", [sname, i, f, v, m, m]),\n\t_pf_sfnnum_fix, _pf_sfnnum_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tarr := object.get(st, \"Retry\", [])\n\tis_array(arr)\n\tsome i, r in arr\n\tis_object(r)\n\tsome [f, m] in _pf_sfnnum_rmax\n\tv := object.get(r, f, null)\n\tis_number(v)\n\tv > m\n}\n"
2875
+ },
2876
+ {
2877
+ "id": "pf-sfn-asl-path-exclusive",
2878
+ "service": "stepfunctions",
2879
+ "severity": "ERROR",
2880
+ "title": "A static ASL field and its Path variant are mutually exclusive (TimeoutSeconds/TimeoutSecondsPath, HeartbeatSeconds/HeartbeatSecondsPath, MaxConcurrency/MaxConcurrencyPath, ToleratedFailurePercentage/-Path, Error/ErrorPath, Cause/CausePath), and a Map state has exactly one of ItemProcessor / Iterator",
2881
+ "upstream": "none",
2882
+ "resourceTypes": [
2883
+ "AWS::StepFunctions::StateMachine"
2884
+ ],
2885
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnpx_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-task.html\"\n\n_pf_sfnpx_fix := \"Keep either the static field or its Path variant; give a Map state one ItemProcessor (Iterator is the legacy spelling)\"\n\n_pf_sfnpx_pair contains [\"TimeoutSeconds\", \"TimeoutSecondsPath\"]\n\n_pf_sfnpx_pair contains [\"HeartbeatSeconds\", \"HeartbeatSecondsPath\"]\n\n_pf_sfnpx_pair contains [\"MaxConcurrency\", \"MaxConcurrencyPath\"]\n\n_pf_sfnpx_pair contains [\"ToleratedFailurePercentage\", \"ToleratedFailurePercentagePath\"]\n\n_pf_sfnpx_pair contains [\"Error\", \"ErrorPath\"]\n\n_pf_sfnpx_pair contains [\"Cause\", \"CausePath\"]\n\n_pf_sfnpx_pair contains [\"ItemProcessor\", \"Iterator\"]\n\nviolation contains make_diag_full(\"pf-sfn-asl-path-exclusive\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), b]),\n\tsprintf(\"state '%s' sets both %s and %s; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: There should only be one of the following fields: [%s, %s]\\\"\", [sname, a, b, a, b]),\n\t_pf_sfnpx_fix, _pf_sfnpx_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome [a, b] in _pf_sfnpx_pair\n\t_pf_sfnlib_has(st, a)\n\t_pf_sfnlib_has(st, b)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-path-exclusive\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"Map state '%s' has neither ItemProcessor nor Iterator; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: This object should have only one of the following fields: [ItemProcessor, Iterator]\\\"\", [sname]),\n\t_pf_sfnpx_fix, _pf_sfnpx_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Map\"\n\tnot _pf_sfnlib_has(st, \"ItemProcessor\")\n\tnot _pf_sfnlib_has(st, \"Iterator\")\n}\n"
2886
+ },
2887
+ {
2888
+ "id": "pf-sfn-asl-query-language",
2889
+ "service": "stepfunctions",
2890
+ "severity": "ERROR",
2891
+ "title": "JSONPath-only fields (InputPath, OutputPath, ResultPath, Parameters, ResultSelector, Result, *Path, Variable rules) and JSONata-only fields (Arguments, Output, Items, Condition) must match the effective QueryLanguage; a JSONata state machine cannot contain JSONPath states; {% must close with %}",
2892
+ "upstream": "none",
2893
+ "resourceTypes": [
2894
+ "AWS::StepFunctions::StateMachine"
2895
+ ],
2896
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnql_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/transforming-data.html\"\n\n_pf_sfnql_fix := \"Use Arguments/Output/Items/Condition in JSONata states and the Path-style fields in JSONPath states; set QueryLanguage consistently\"\n\n_pf_sfnql_pathonly := {\"InputPath\", \"OutputPath\", \"ResultPath\", \"Parameters\", \"ResultSelector\", \"Result\", \"ItemsPath\", \"TimeoutSecondsPath\", \"HeartbeatSecondsPath\", \"SecondsPath\", \"TimestampPath\", \"MaxConcurrencyPath\", \"ToleratedFailurePercentagePath\", \"ToleratedFailureCountPath\", \"ErrorPath\", \"CausePath\"}\n\n_pf_sfnql_jsonataonly := {\"Arguments\", \"Output\", \"Items\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' uses JSONata but has the JSONPath-only field '%s'; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The QueryLanguage is set to 'JSONata', but field '%s' is only supported for the 'JSONPath' QueryLanguage\\\"\", [sname, f, f]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\tsome f, _ in st\n\tf in _pf_sfnql_pathonly\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' uses JSONPath but has the JSONata-only field '%s'; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The QueryLanguage is set to 'JSONPath', but field '%s' is only supported for the 'JSONata' QueryLanguage\\\"\", [sname, f, f]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_ql(name, st) == \"JSONPath\"\n\tsome f, _ in st\n\tf in _pf_sfnql_jsonataonly\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d uses Variable/comparison fields in a JSONata state; JSONata rules take Condition, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: ... field 'Variable' is only supported for the 'JSONPath' QueryLanguage\\\"\", [sname, i]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tst := s[sname]\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\t_pf_sfnlib_has(c, \"Variable\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.Choices[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"Choice state '%s' rule %d uses Condition in a JSONPath state; JSONPath rules take Variable plus a comparison, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: ... field 'Condition' is only supported for the 'JSONata' QueryLanguage\\\"\", [sname, i]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, i, c] in _pf_sfnlib_choice\n\tst := s[sname]\n\t_pf_sfnlib_ql(name, st) == \"JSONPath\"\n\t_pf_sfnlib_has(c, \"Condition\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.QueryLanguage\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"state '%s' sets QueryLanguage JSONPath inside a state machine whose top-level QueryLanguage is JSONata; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: 'QueryLanguage' can not be 'JSONPath' if set to 'JSONata' for whole state machine\\\"\", [sname]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(_pf_sfnlib_asl(name), \"QueryLanguage\", null) == \"JSONata\"\n\tobject.get(st, \"QueryLanguage\", null) == \"JSONPath\"\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.QueryLanguage\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"state '%s' QueryLanguage '%s' is not JSONPath or JSONata; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value should be one of the following: [JSONPath, JSONata]\\\"\", [sname, q]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tq := object.get(st, \"QueryLanguage\", null)\n\tis_string(q)\n\tnot q in {\"JSONPath\", \"JSONata\"}\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.QueryLanguage\", [_pf_sfnlib_prop(name)]),\n\tsprintf(\"top-level QueryLanguage '%s' is not JSONPath or JSONata; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value should be one of the following: [JSONPath, JSONata]\\\"\", [q]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tq := object.get(_pf_sfnlib_asl(name), \"QueryLanguage\", null)\n\tis_string(q)\n\tnot q in {\"JSONPath\", \"JSONata\"}\n}\n\n# String values of a JSONata state, up to two levels inside object/array\n# fields (Arguments, Output, Assign, ItemSelector, Choices[].Condition ...).\n_pf_sfnql_str contains [name, p, sname, where, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\tsome f, v in st\n\tis_string(v)\n\twhere := f\n}\n\n# Iterating a scalar with `some .. in` is a hard evaluation error in this\n# engine (not undefined), so every nested value is type-guarded first.\n_pf_sfnql_coll(x) if is_object(x)\n\n_pf_sfnql_coll(x) if is_array(x)\n\n_pf_sfnql_str contains [name, p, sname, where, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\tsome f, o in st\n\t_pf_sfnql_coll(o)\n\tsome k, v in o\n\tis_string(v)\n\twhere := sprintf(\"%s.%v\", [f, k])\n}\n\n_pf_sfnql_str contains [name, p, sname, where, v] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\t_pf_sfnlib_ql(name, st) == \"JSONata\"\n\tsome f, o in st\n\t_pf_sfnql_coll(o)\n\tsome k, o2 in o\n\t_pf_sfnql_coll(o2)\n\tsome k2, v in o2\n\tis_string(v)\n\twhere := sprintf(\"%s.%v.%v\", [f, k, k2])\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-query-language\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), where]),\n\tsprintf(\"state '%s' %s value '%s' opens a JSONata expression with {%% but does not close it with %%}; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: JSONata string must start with {%% and end with %%}\\\"\", [sname, where, v]),\n\t_pf_sfnql_fix, _pf_sfnql_url) if {\n\tsome [name, p, sname, where, v] in _pf_sfnql_str\n\tstartswith(v, \"{%\")\n\tnot endswith(v, \"%}\")\n}\n"
2897
+ },
2898
+ {
2899
+ "id": "pf-sfn-asl-resource-arn",
2900
+ "service": "stepfunctions",
2901
+ "severity": "ERROR",
2902
+ "title": "Task Resource is an ARN, and an integration pattern the service does not offer fails creation: .sync on Lambda/SNS/SQS/DynamoDB/EventBridge/API Gateway/aws-sdk, .waitForTaskToken on Athena/Batch/CodeBuild/EMR/Glue/DataBrew/MediaConvert/SageMaker/DynamoDB, and .sync:2 anywhere but states:startExecution",
2903
+ "upstream": "none",
2904
+ "resourceTypes": [
2905
+ "AWS::StepFunctions::StateMachine"
2906
+ ],
2907
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnres_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/integrate-optimized.html\"\n\n_pf_sfnres_fix := \"Use the integration pattern the service supports (see the optimized integrations table); a Lambda call waits for the function anyway (no .sync)\"\n\nviolation contains make_diag_full(\"pf-sfn-asl-resource-arn\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' Resource '%s' is not an ARN; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value is not a valid resource ARN\\\"\", [sname, res]),\n\t_pf_sfnres_fix, _pf_sfnres_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Task\"\n\tres := object.get(st, \"Resource\", null)\n\tis_string(res)\n\tnot contains(res, \"${\")\n\tnot startswith(res, \"arn:\")\n}\n\n# Services whose optimized integration never offers the pattern (doc table,\n# confirmed with ValidateStateMachineDefinition on 2026-09-05). Support on the\n# positive side is per API, so only the impossible combinations are judged.\n_pf_sfnres_nosync := {\"lambda\", \"sns\", \"sqs\", \"dynamodb\", \"events\", \"apigateway\", \"aws-sdk\", \"bedrock-agentcore\"}\n\n_pf_sfnres_notoken := {\"athena\", \"batch\", \"codebuild\", \"elasticmapreduce\", \"emr-containers\", \"emr-serverless\", \"glue\", \"databrew\", \"mediaconvert\", \"sagemaker\", \"dynamodb\", \"bedrock-agentcore\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-resource-arn\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' uses the .sync (Run a Job) pattern on the %s integration, which does not support it; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The resource provided arn:aws:states:::%s:%s is not recognized\\\"\", [sname, svc, svc, api]),\n\t_pf_sfnres_fix, _pf_sfnres_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\tsvc in _pf_sfnres_nosync\n\tregex.match(\"[.]sync(:2)?$\", api)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-resource-arn\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' uses the .waitForTaskToken (callback) pattern on the %s integration, which does not support it; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The resource provided arn:aws:states:::%s:%s is not recognized\\\"\", [sname, svc, svc, api]),\n\t_pf_sfnres_fix, _pf_sfnres_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\tsvc in _pf_sfnres_notoken\n\tendswith(api, \".waitForTaskToken\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-resource-arn\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Task state '%s' uses .sync:2 on %s:%s; only states:startExecution.sync:2 exists, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The resource provided ... is not recognized\\\"\", [sname, svc, api]),\n\t_pf_sfnres_fix, _pf_sfnres_url) if {\n\tsome [name, p, s, sname, st, svc, api] in _pf_sfnlib_integration\n\tendswith(api, \".sync:2\")\n\tsvc != \"states\"\n}\n"
2908
+ },
2909
+ {
2910
+ "id": "pf-sfn-asl-retry-catch",
2911
+ "service": "stepfunctions",
2912
+ "severity": "ERROR",
2913
+ "title": "Retry/Catch entries: ErrorEquals is present and non-empty, States.ALL appears alone and only in the last entry, every Catch has Next, and JitterStrategy is NONE or FULL",
2914
+ "upstream": "none",
2915
+ "resourceTypes": [
2916
+ "AWS::StepFunctions::StateMachine"
2917
+ ],
2918
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnrc_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html\"\n\n_pf_sfnrc_fix := \"Move the States.ALL catch-all to the last entry by itself; give every catcher a Next\"\n\n# [name, path, state name, field, index, entry, entries count]\n_pf_sfnrc_entry contains [name, p, sname, field, i, e, n] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome field in [\"Retry\", \"Catch\"]\n\tarr := object.get(st, field, null)\n\tis_array(arr)\n\tn := count(arr)\n\tsome i, e in arr\n\tis_object(e)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.%s[%d]\", [_pf_sfnlib_path(name, p, sname), field, i]),\n\tsprintf(\"state '%s' %s[%d] has no ErrorEquals; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [ErrorEquals]\\\"\", [sname, field, i]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, _] in _pf_sfnrc_entry\n\tnot _pf_sfnlib_has(e, \"ErrorEquals\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.%s[%d].ErrorEquals\", [_pf_sfnlib_path(name, p, sname), field, i]),\n\tsprintf(\"state '%s' %s[%d] has an empty ErrorEquals; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value cannot be empty\\\"\", [sname, field, i]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, _] in _pf_sfnrc_entry\n\tee := object.get(e, \"ErrorEquals\", null)\n\tis_array(ee)\n\tcount(ee) == 0\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.%s[%d].ErrorEquals\", [_pf_sfnlib_path(name, p, sname), field, i]),\n\tsprintf(\"state '%s' %s[%d] lists States.ALL together with other error names; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: States.ALL must appear alone and at end of list\\\"\", [sname, field, i]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, _] in _pf_sfnrc_entry\n\tee := object.get(e, \"ErrorEquals\", null)\n\tis_array(ee)\n\t\"States.ALL\" in ee\n\tcount(ee) > 1\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.%s[%d].ErrorEquals\", [_pf_sfnlib_path(name, p, sname), field, i]),\n\tsprintf(\"state '%s' %s[%d] catches States.ALL but is not the last entry (%d entries); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: States.ALL must appear alone and at end of list\\\"\", [sname, field, i, n]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, n] in _pf_sfnrc_entry\n\tee := object.get(e, \"ErrorEquals\", null)\n\tis_array(ee)\n\t\"States.ALL\" in ee\n\ti < n - 1\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.Catch[%d]\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"state '%s' Catch[%d] has no Next; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: These fields are required: [Next]\\\"\", [sname, i]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, _] in _pf_sfnrc_entry\n\tfield == \"Catch\"\n\tnot _pf_sfnlib_has(e, \"Next\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-retry-catch\", \"ERROR\", name,\n\tsprintf(\"%s.Retry[%d].JitterStrategy\", [_pf_sfnlib_path(name, p, sname), i]),\n\tsprintf(\"state '%s' Retry[%d] JitterStrategy '%s' is not NONE or FULL; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Value should be one of the following: [NONE, FULL]\\\"\", [sname, i, j]),\n\t_pf_sfnrc_fix, _pf_sfnrc_url) if {\n\tsome [name, p, sname, field, i, e, _] in _pf_sfnrc_entry\n\tfield == \"Retry\"\n\tj := object.get(e, \"JitterStrategy\", null)\n\tis_string(j)\n\tnot j in {\"NONE\", \"FULL\"}\n}\n"
2919
+ },
2920
+ {
2921
+ "id": "pf-sfn-asl-state-fields",
2922
+ "service": "stepfunctions",
2923
+ "severity": "ERROR",
2924
+ "title": "ASL fields are per state type: a known field placed on a type that does not accept it (Retry on Pass, End on Choice, Next on Fail, ...) fails creation",
2925
+ "upstream": "none",
2926
+ "resourceTypes": [
2927
+ "AWS::StepFunctions::StateMachine"
2928
+ ],
2929
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnfld_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/statemachine-structure.html\"\n\n_pf_sfnfld_fix := \"Remove the field or move the logic to a state type that supports it (see the ASL state pages)\"\n\n# Measured with ValidateStateMachineDefinition on 2026-09-05 (8 types x 50\n# fields). Type/Comment/QueryLanguage are accepted everywhere.\n_pf_sfnfld_common := {\"Type\", \"Comment\", \"QueryLanguage\"}\n\n_pf_sfnfld_allowed := {\n\t\"Pass\": {\"InputPath\", \"OutputPath\", \"Result\", \"ResultPath\", \"Parameters\", \"Output\", \"Assign\", \"Next\", \"End\"},\n\t\"Task\": {\"InputPath\", \"OutputPath\", \"ResultPath\", \"Parameters\", \"Arguments\", \"Output\", \"Assign\", \"Resource\", \"Credentials\", \"ResultSelector\", \"Retry\", \"Catch\", \"TimeoutSeconds\", \"TimeoutSecondsPath\", \"HeartbeatSeconds\", \"HeartbeatSecondsPath\", \"Next\", \"End\"},\n\t\"Wait\": {\"InputPath\", \"OutputPath\", \"Output\", \"Assign\", \"Seconds\", \"Timestamp\", \"SecondsPath\", \"TimestampPath\", \"Next\", \"End\"},\n\t\"Parallel\": {\"InputPath\", \"OutputPath\", \"ResultPath\", \"Parameters\", \"Arguments\", \"Output\", \"Assign\", \"ResultSelector\", \"Retry\", \"Catch\", \"Branches\", \"Next\", \"End\"},\n\t\"Map\": {\"InputPath\", \"OutputPath\", \"ResultPath\", \"Parameters\", \"Output\", \"Assign\", \"ResultSelector\", \"Retry\", \"Catch\", \"ItemProcessor\", \"Iterator\", \"ItemsPath\", \"Items\", \"ItemSelector\", \"ItemReader\", \"ItemBatcher\", \"ResultWriter\", \"MaxConcurrency\", \"MaxConcurrencyPath\", \"ToleratedFailurePercentage\", \"ToleratedFailurePercentagePath\", \"ToleratedFailureCount\", \"ToleratedFailureCountPath\", \"Label\", \"Next\", \"End\"},\n\t\"Choice\": {\"InputPath\", \"OutputPath\", \"Output\", \"Assign\", \"Choices\", \"Default\"},\n\t\"Succeed\": {\"InputPath\", \"OutputPath\", \"Output\"},\n\t\"Fail\": {\"Error\", \"Cause\", \"ErrorPath\", \"CausePath\"},\n}\n\n_pf_sfnfld_known := {f | some _, fs in _pf_sfnfld_allowed; some f in fs} | _pf_sfnfld_common\n\n# ponytail: only fields the service already knows are judged; a field that no\n# type accepts is left alone because it may be a newer ASL feature rather than\n# a typo (a false positive here would block valid deploys). Case variants of a\n# known field (ASL is case-sensitive) are judged too.\nviolation contains make_diag_full(\"pf-sfn-asl-state-fields\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' (Type %s) has field '%s', which Step Functions does not accept on that state type; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field '%s' is not supported\\\"\", [sname, t, f, f]),\n\t_pf_sfnfld_fix, _pf_sfnfld_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tt := object.get(st, \"Type\", null)\n\tallowed := _pf_sfnfld_allowed[t]\n\tsome f, _ in st\n\tnot f in _pf_sfnfld_common\n\tnot f in allowed\n\tf in _pf_sfnfld_known\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-state-fields\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_path(name, p, sname), f]),\n\tsprintf(\"state '%s' has field '%s'; ASL field names are case-sensitive (did you mean '%s'?), and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field '%s' is not supported\\\"\", [sname, f, k, f]),\n\t_pf_sfnfld_fix, _pf_sfnfld_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome f, _ in st\n\tnot f in _pf_sfnfld_known\n\tsome k in _pf_sfnfld_known\n\tlower(k) == lower(f)\n}\n\n_pf_sfnfld_top := {\"Comment\", \"QueryLanguage\", \"StartAt\", \"TimeoutSeconds\", \"Version\", \"States\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-state-fields\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [_pf_sfnlib_prop(name), f]),\n\tsprintf(\"top-level field '%s' is not an ASL field (did you mean '%s'?); CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Field '%s' is not supported\\\"\", [f, k, f]),\n\t_pf_sfnfld_fix, _pf_sfnfld_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tasl := _pf_sfnlib_asl(name)\n\tsome f, _ in asl\n\tnot f in _pf_sfnfld_top\n\tsome k in _pf_sfnfld_top\n\tlower(k) == lower(f)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-state-fields\", \"ERROR\", name,\n\tsprintf(\"%s.Version\", [_pf_sfnlib_prop(name)]),\n\tsprintf(\"ASL Version '%s' is not supported; the only accepted value is \\\"1.0\\\" (CreateStateMachine: \\\"SCHEMA_VALIDATION_FAILED: Value should be one of the following: [1.0]\\\")\", [v]),\n\t_pf_sfnfld_fix, _pf_sfnfld_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tv := object.get(_pf_sfnlib_asl(name), \"Version\", null)\n\tis_string(v)\n\tv != \"1.0\"\n}\n"
2930
+ },
2931
+ {
2932
+ "id": "pf-sfn-asl-terminal-state",
2933
+ "service": "stepfunctions",
2934
+ "severity": "ERROR",
2935
+ "title": "An ASL state machine needs at least one terminal state (End: true, Succeed or Fail) at the top level",
2936
+ "upstream": "none",
2937
+ "resourceTypes": [
2938
+ "AWS::StepFunctions::StateMachine"
2939
+ ],
2940
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnterm_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/statemachine-structure.html\"\n\n_pf_sfnterm_fix := \"Mark the last state with End: true or end with a Succeed/Fail state\"\n\n_pf_sfnterm_ok(name) if {\n\tsome [n, p, s, _] in _pf_sfnlib_scopes\n\tn == name\n\tp == \"States\"\n\tsome _, st in s\n\tis_object(st)\n\tobject.get(st, \"End\", false) == true\n}\n\n_pf_sfnterm_ok(name) if {\n\tsome [n, p, s, _] in _pf_sfnlib_scopes\n\tn == name\n\tp == \"States\"\n\tsome _, st in s\n\tis_object(st)\n\tobject.get(st, \"Type\", null) in {\"Succeed\", \"Fail\"}\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-terminal-state\", \"ERROR\", name,\n\tsprintf(\"%s.States\", [_pf_sfnlib_prop(name)]),\n\t\"no top-level state is terminal (End: true, Succeed or Fail); CreateStateMachine fails with \\\"MISSING_END_STATE: Workflow has no terminal state\\\"\",\n\t_pf_sfnterm_fix, _pf_sfnterm_url) if {\n\tsome [name, p, s, _] in _pf_sfnlib_scopes\n\tp == \"States\"\n\tnot _pf_sfnterm_ok(name)\n}\n"
2941
+ },
2942
+ {
2943
+ "id": "pf-sfn-asl-unreachable-state",
2944
+ "service": "stepfunctions",
2945
+ "severity": "ERROR",
2946
+ "title": "Every ASL state must be reachable: a state that is not StartAt and that no other state transitions to fails creation",
2947
+ "upstream": "none",
2948
+ "resourceTypes": [
2949
+ "AWS::StepFunctions::StateMachine"
2950
+ ],
2951
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnunr_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/statemachine-structure.html\"\n\n_pf_sfnunr_fix := \"Transition to the state from another state (Next/Default/Choices/Catch) or remove it\"\n\n# [name, scope path, from state, target state]\n_pf_sfnunr_edge contains [name, p, sname, target] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome key in [\"Next\", \"Default\"]\n\ttarget := object.get(st, key, null)\n\tis_string(target)\n}\n\n_pf_sfnunr_edge contains [name, p, sname, target] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome field in [\"Choices\", \"Catch\"]\n\tarr := object.get(st, field, [])\n\tis_array(arr)\n\tsome c in arr\n\tis_object(c)\n\ttarget := object.get(c, \"Next\", null)\n\tis_string(target)\n}\n\n_pf_sfnunr_in(name, p, t) if {\n\tsome [n2, p2, from, t2] in _pf_sfnunr_edge\n\tn2 == name\n\tp2 == p\n\tt2 == t\n\tfrom != t\n}\n\n# ponytail: sound subset of the service's reachability check — a state with no\n# incoming edge from another state is certainly unreachable, but a cycle of\n# orphans passes (needs graph.reachable, which the engine lacks). A dangling\n# StartAt is left to engine rule E3601.\nviolation contains make_diag_full(\"pf-sfn-asl-unreachable-state\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"state '%s' is not reachable: it is not the StartAt ('%s') and no other state in its States block transitions to it; CreateStateMachine fails with \\\"MISSING_TRANSITION_TARGET: State \\\\\\\"%s\\\\\\\" is not reachable.\\\"\", [sname, sa, sname]),\n\t_pf_sfnunr_fix, _pf_sfnunr_url) if {\n\tsome [name, p, s, sa] in _pf_sfnlib_scopes\n\tis_string(sa)\n\tsa in object.keys(s)\n\tsome sname, st in s\n\tis_object(st)\n\tsname != sa\n\tnot _pf_sfnunr_in(name, p, sname)\n}\n"
2952
+ },
2953
+ {
2954
+ "id": "pf-sfn-asl-wait-timing",
2955
+ "service": "stepfunctions",
2956
+ "severity": "ERROR",
2957
+ "title": "A Wait state carries exactly one of Seconds / Timestamp / SecondsPath / TimestampPath, and a literal Timestamp is RFC3339 with T and Z (all four absent is covered by engine rule E3601)",
2521
2958
  "upstream": "none",
2522
2959
  "resourceTypes": [
2523
2960
  "AWS::StepFunctions::StateMachine"
2524
2961
  ],
2525
- "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfn_fix := \"Point Next/Default/Choices at an existing state name\"\n\n_pf_sfn_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-states.html\"\n\n_pf_sfn_asl(name) := asl if {\n\tdef := resolve(name, \"Properties.DefinitionString\")\n\tis_string(def)\n\tasl := json.unmarshal(def)\n\tis_object(asl)\n}\n\n_pf_sfn_defined(asl) := {sn | some sn, _ in object.get(asl, \"States\", {})}\n\n# NOTE: a dangling StartAt is deliberately NOT checked here — the engine's\n# built-in rule E3601 (ERROR/CFN_LINT) already covers it. Verified against\n# @aws/cloudformation-validate 1.7.0-beta on 2026-09-01: E3601 fires for\n# StartAt only and does not check Next/Default/Choices, which is what this\n# rule adds.\n\nviolation contains make_diag_full(\"pf-sfn-asl-missing-state\", \"ERROR\", name,\n\t\"Properties.DefinitionString\",\n\tsprintf(\"state '%s' references state '%s' via %s, but no state with that name is defined\", [sname, target, key]),\n\t_pf_sfn_fix, _pf_sfn_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tasl := _pf_sfn_asl(name)\n\tsome sname, st in object.get(asl, \"States\", {})\n\tis_object(st)\n\tsome key in {\"Next\", \"Default\"}\n\ttarget := object.get(st, key, null)\n\tis_string(target)\n\tnot target in _pf_sfn_defined(asl)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-missing-state\", \"ERROR\", name,\n\t\"Properties.DefinitionString\",\n\tsprintf(\"state '%s' has a Choice rule referencing state '%s', but no state with that name is defined\", [sname, target]),\n\t_pf_sfn_fix, _pf_sfn_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tasl := _pf_sfn_asl(name)\n\tsome sname, st in object.get(asl, \"States\", {})\n\tis_object(st)\n\tchoices := object.get(st, \"Choices\", [])\n\tis_array(choices)\n\tsome c in choices\n\tis_object(c)\n\ttarget := object.get(c, \"Next\", null)\n\tis_string(target)\n\tnot target in _pf_sfn_defined(asl)\n}\n"
2962
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnwait_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/state-wait.html\"\n\n_pf_sfnwait_fix := \"Keep one timing field; write Timestamp as 2030-01-01T00:00:00Z\"\n\n_pf_sfnwait_fields := {\"Seconds\", \"Timestamp\", \"SecondsPath\", \"TimestampPath\"}\n\nviolation contains make_diag_full(\"pf-sfn-asl-wait-timing\", \"ERROR\", name,\n\t_pf_sfnlib_path(name, p, sname),\n\tsprintf(\"Wait state '%s' sets %d of Seconds/Timestamp/SecondsPath/TimestampPath; exactly one is allowed, and CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: There should only be one of the following fields: [SecondsPath, Seconds, TimestampPath, Timestamp]\\\"\", [sname, n]),\n\t_pf_sfnwait_fix, _pf_sfnwait_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Wait\"\n\tn := count({k | some k, _ in st; k in _pf_sfnwait_fields})\n\tn > 1\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-wait-timing\", \"ERROR\", name,\n\tsprintf(\"%s.Timestamp\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"Wait state '%s' Timestamp '%s' is not an RFC3339 timestamp with an uppercase T separator and Z suffix; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: String does not match RFC3339 timestamp\\\"\", [sname, ts]),\n\t_pf_sfnwait_fix, _pf_sfnwait_url) if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Wait\"\n\tts := object.get(st, \"Timestamp\", null)\n\tis_string(ts)\n\tnot startswith(ts, \"{%\")\n\tnot regex.match(\"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]+)?Z$\", ts)\n}\n"
2963
+ },
2964
+ {
2965
+ "id": "pf-sfn-definition-exactly-one",
2966
+ "service": "stepfunctions",
2967
+ "severity": "ERROR",
2968
+ "title": "A state machine carries exactly one of Definition, DefinitionString or DefinitionS3Location",
2969
+ "upstream": "none",
2970
+ "resourceTypes": [
2971
+ "AWS::StepFunctions::StateMachine"
2972
+ ],
2973
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfndef_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-stepfunctions-statemachine.html\"\n\n_pf_sfndef_fix := \"Keep one of Definition / DefinitionString / DefinitionS3Location\"\n\nviolation contains make_diag_full(\"pf-sfn-definition-exactly-one\", \"ERROR\", name,\n\t\"Properties\",\n\tsprintf(\"%d of Definition / DefinitionString / DefinitionS3Location are set; exactly one is required, and the resource handler fails with \\\"Property validation failed. Please use one of [DefinitionS3Location], [DefinitionString] or [Definition].\\\"\", [n]),\n\t_pf_sfndef_fix, _pf_sfndef_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tn := count({k | some k in [\"Definition\", \"DefinitionString\", \"DefinitionS3Location\"]; _pf_sfnlib_has(props, k)})\n\tn != 1\n}\n"
2974
+ },
2975
+ {
2976
+ "id": "pf-sfn-encryption-config",
2977
+ "service": "stepfunctions",
2978
+ "severity": "ERROR",
2979
+ "title": "EncryptionConfiguration: CUSTOMER_MANAGED_KMS_KEY requires KmsKeyId, and AWS_OWNED_KEY rejects KmsKeyId and KmsDataKeyReusePeriodSeconds (state machines and activities)",
2980
+ "upstream": "none",
2981
+ "resourceTypes": [
2982
+ "AWS::StepFunctions::StateMachine",
2983
+ "AWS::StepFunctions::Activity"
2984
+ ],
2985
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnenc_url := \"https://docs.aws.amazon.com/step-functions/latest/apireference/API_EncryptionConfiguration.html\"\n\n_pf_sfnenc_fix := \"Pair CUSTOMER_MANAGED_KMS_KEY with a KmsKeyId; leave KmsKeyId/KmsDataKeyReusePeriodSeconds out for AWS_OWNED_KEY\"\n\n_pf_sfnenc_res contains [name, enc, t] if {\n\tsome rt in [\"AWS::StepFunctions::StateMachine\", \"AWS::StepFunctions::Activity\"]\n\tsome name in resources_of_type(rt)\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tenc := object.get(props, \"EncryptionConfiguration\", null)\n\tis_object(enc)\n\tt := resolve(name, \"Properties.EncryptionConfiguration.Type\")\n\tis_string(t)\n}\n\nviolation contains make_diag_full(\"pf-sfn-encryption-config\", \"ERROR\", name,\n\t\"Properties.EncryptionConfiguration\",\n\t\"EncryptionConfiguration.Type is CUSTOMER_MANAGED_KMS_KEY without a KmsKeyId; the create call fails with \\\"InvalidEncryptionConfiguration: Must set a valid kmsKeyId.\\\"\",\n\t_pf_sfnenc_fix, _pf_sfnenc_url) if {\n\tsome [name, enc, t] in _pf_sfnenc_res\n\tt == \"CUSTOMER_MANAGED_KMS_KEY\"\n\tnot _pf_sfnlib_has(enc, \"KmsKeyId\")\n}\n\nviolation contains make_diag_full(\"pf-sfn-encryption-config\", \"ERROR\", name,\n\tsprintf(\"Properties.EncryptionConfiguration.%s\", [f]),\n\tsprintf(\"EncryptionConfiguration.Type is AWS_OWNED_KEY but %s is set; the create call fails with \\\"InvalidEncryptionConfiguration: Custom %s is not allowed when selecting AWS_OWNED_KEY.\\\"\", [f, lc]),\n\t_pf_sfnenc_fix, _pf_sfnenc_url) if {\n\tsome [name, enc, t] in _pf_sfnenc_res\n\tt == \"AWS_OWNED_KEY\"\n\tsome [f, lc] in _pf_sfnenc_owned\n\t_pf_sfnlib_has(enc, f)\n}\n\n_pf_sfnenc_owned contains [\"KmsKeyId\", \"kmsKeyId\"]\n\n_pf_sfnenc_owned contains [\"KmsDataKeyReusePeriodSeconds\", \"kmsDataKeyReusePeriodSeconds\"]\n"
2986
+ },
2987
+ {
2988
+ "id": "pf-sfn-express-unsupported",
2989
+ "service": "stepfunctions",
2990
+ "severity": "ERROR",
2991
+ "title": "An EXPRESS state machine cannot use .sync / .waitForTaskToken integrations, Activity resources, or Distributed Map (at any nesting level)",
2992
+ "upstream": "none",
2993
+ "resourceTypes": [
2994
+ "AWS::StepFunctions::StateMachine"
2995
+ ],
2996
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnex_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/choosing-workflow-type.html\"\n\n_pf_sfnex_fix := \"Switch the state machine to STANDARD, or use Request-Response integrations and Inline Map in the Express workflow\"\n\nviolation contains make_diag_full(\"pf-sfn-express-unsupported\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"EXPRESS state machine: Task state '%s' Resource '%s' uses a %s integration pattern; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Express state machine does not support '%s' service integration\\\"\", [sname, res, pat, pat]),\n\t_pf_sfnex_fix, _pf_sfnex_url) if {\n\t_pf_sfnlib_type(name) == \"EXPRESS\"\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Task\"\n\tres := object.get(st, \"Resource\", null)\n\tis_string(res)\n\tsome pat in [\".sync\", \".waitForTaskToken\"]\n\tregex.match(sprintf(\"[%s](:2)?$\", [pat]), res)\n}\n\nviolation contains make_diag_full(\"pf-sfn-express-unsupported\", \"ERROR\", name,\n\tsprintf(\"%s.Resource\", [_pf_sfnlib_path(name, p, sname)]),\n\tsprintf(\"EXPRESS state machine: Task state '%s' targets an Activity; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: Express state machine does not support Activity ARN\\\"\", [sname]),\n\t_pf_sfnex_fix, _pf_sfnex_url) if {\n\t_pf_sfnlib_type(name) == \"EXPRESS\"\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tres := object.get(st, \"Resource\", null)\n\tis_string(res)\n\tregex.match(\"^arn:[^:]+:states:[^:]+:[^:]+:activity:\", res)\n}\n\nviolation contains make_diag_full(\"pf-sfn-express-unsupported\", \"ERROR\", name,\n\tsprintf(\"%s.%s.ProcessorConfig.Mode\", [_pf_sfnlib_path(name, p, sname), key]),\n\tsprintf(\"EXPRESS state machine: Map state '%s' runs in DISTRIBUTED mode; CreateStateMachine fails with \\\"SCHEMA_VALIDATION_FAILED: The field 'Mode' with value 'DISTRIBUTED' is not supported inside 'EXPRESS' state machines\\\"\", [sname]),\n\t_pf_sfnex_fix, _pf_sfnex_url) if {\n\t_pf_sfnlib_type(name) == \"EXPRESS\"\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tsome key in [\"ItemProcessor\", \"Iterator\"]\n\tproc := object.get(st, key, null)\n\tis_object(proc)\n\tobject.get(object.get(proc, \"ProcessorConfig\", {}), \"Mode\", null) == \"DISTRIBUTED\"\n}\n"
2997
+ },
2998
+ {
2999
+ "id": "pf-sfn-kms-key-region",
3000
+ "service": "stepfunctions",
3001
+ "severity": "ERROR",
3002
+ "title": "EncryptionConfiguration.KmsKeyId must be a key in the deploy region (state machines and activities)",
3003
+ "upstream": "none",
3004
+ "resourceTypes": [
3005
+ "AWS::StepFunctions::StateMachine",
3006
+ "AWS::StepFunctions::Activity"
3007
+ ],
3008
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnkms_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/encryption-at-rest.html\"\n\n_pf_sfnkms_fix := \"Use a KMS key created in the same region as the state machine (Fn::GetAtt Key.Arn of a key in this stack)\"\n\n# Region comparison needs the deploy region, which only this pack sees\n# (data.cdk_preflight.deploy_region is defined in enforce mode; the rule\n# skips without it).\nviolation contains make_diag_full(\"pf-sfn-kms-key-region\", \"ERROR\", name,\n\t\"Properties.EncryptionConfiguration.KmsKeyId\",\n\tsprintf(\"KmsKeyId is a key in '%s' but the deploy region is '%s'; KMS rejects the key at create time with \\\"InvalidEncryptionConfiguration: Invalid arn %s\\\"\", [parts[3], region, parts[3]]),\n\t_pf_sfnkms_fix, _pf_sfnkms_url) if {\n\tregion := data.cdk_preflight.deploy_region\n\tsome rt in [\"AWS::StepFunctions::StateMachine\", \"AWS::StepFunctions::Activity\"]\n\tsome name in resources_of_type(rt)\n\tarn := resolve(name, \"Properties.EncryptionConfiguration.KmsKeyId\")\n\tis_string(arn)\n\tstartswith(arn, \"arn:\")\n\tparts := split(arn, \":\")\n\tcount(parts) >= 6\n\tparts[2] == \"kms\"\n\tparts[3] != \"\"\n\tparts[3] != region\n}\n"
3009
+ },
3010
+ {
3011
+ "id": "pf-sfn-logging-destination",
3012
+ "service": "stepfunctions",
3013
+ "severity": "ERROR",
3014
+ "title": "LoggingConfiguration with Level other than OFF needs exactly one Destinations entry carrying CloudWatchLogsLogGroup.LogGroupArn, and a literal ARN must be a CloudWatch Logs log-group ARN ending in :*",
3015
+ "upstream": "none",
3016
+ "resourceTypes": [
3017
+ "AWS::StepFunctions::StateMachine"
3018
+ ],
3019
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnlog_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-stepfunctions-statemachine-loggingconfiguration.html\"\n\n_pf_sfnlog_fix := \"Reference the log group with Fn::GetAtt LogGroup.Arn (it already ends in :*) in a single Destinations entry\"\n\n# An empty Destinations array is stopped by the schema (F3032 minItems);\n# the absent-while-enabled and two-entries cases are not.\n_pf_sfnlog_on(name) if {\n\tlvl := resolve(name, \"Properties.LoggingConfiguration.Level\")\n\tis_string(lvl)\n\tlvl != \"OFF\"\n}\n\nviolation contains make_diag_full(\"pf-sfn-logging-destination\", \"ERROR\", name,\n\t\"Properties.LoggingConfiguration.Destinations\",\n\tsprintf(\"LoggingConfiguration has %d Destinations entries while Level is not OFF; exactly one is required, and CreateStateMachine fails with \\\"InvalidLoggingConfiguration: Must specify exactly one Log Destination.\\\"\", [n]),\n\t_pf_sfnlog_fix, _pf_sfnlog_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\t_pf_sfnlog_on(name)\n\tn := count(flatten_list(name, \"Properties.LoggingConfiguration.Destinations\"))\n\tn != 1\n}\n\nviolation contains make_diag_full(\"pf-sfn-logging-destination\", \"ERROR\", name,\n\tsprintf(\"Properties.LoggingConfiguration.Destinations.%d\", [d.index]),\n\t\"a Destinations entry has no CloudWatchLogsLogGroup; CreateStateMachine fails with \\\"InvalidLoggingConfiguration: Must set valid CloudWatch Log Group ARN.\\\"\",\n\t_pf_sfnlog_fix, _pf_sfnlog_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\t_pf_sfnlog_on(name)\n\tsome d in flatten_list(name, \"Properties.LoggingConfiguration.Destinations\")\n\tis_object(d.value)\n\tnot _pf_sfnlib_has(d.value, \"CloudWatchLogsLogGroup\")\n}\n\n_pf_sfnlog_arn contains [name, idx, arn] if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\t_pf_sfnlog_on(name)\n\tsome d in flatten_list(name, \"Properties.LoggingConfiguration.Destinations\")\n\tis_object(d.value)\n\tarn := object.get(object.get(d.value, \"CloudWatchLogsLogGroup\", {}), \"LogGroupArn\", null)\n\tis_string(arn)\n\tstartswith(arn, \"arn:\")\n\tidx := d.index\n}\n\nviolation contains make_diag_full(\"pf-sfn-logging-destination\", \"ERROR\", name,\n\tsprintf(\"Properties.LoggingConfiguration.Destinations.%d.CloudWatchLogsLogGroup.LogGroupArn\", [idx]),\n\tsprintf(\"LogGroupArn '%s' is not a CloudWatch Logs log-group ARN; CreateStateMachine fails with \\\"InvalidLoggingConfiguration: Provided ARN is not CloudWatch Logs Log Group ARN.\\\"\", [arn]),\n\t_pf_sfnlog_fix, _pf_sfnlog_url) if {\n\tsome [name, idx, arn] in _pf_sfnlog_arn\n\tnot regex.match(\"^arn:[^:]+:logs:[^:]*:[^:]*:log-group:\", arn)\n}\n\nviolation contains make_diag_full(\"pf-sfn-logging-destination\", \"ERROR\", name,\n\tsprintf(\"Properties.LoggingConfiguration.Destinations.%d.CloudWatchLogsLogGroup.LogGroupArn\", [idx]),\n\tsprintf(\"LogGroupArn '%s' lacks the :* qualifier (Fn::GetAtt LogGroup.Arn includes it); CreateStateMachine fails with \\\"InvalidLoggingConfiguration: Log Group ARN must be provided with '*' qualifier.\\\"\", [arn]),\n\t_pf_sfnlog_fix, _pf_sfnlog_url) if {\n\tsome [name, idx, arn] in _pf_sfnlog_arn\n\tregex.match(\"^arn:[^:]+:logs:[^:]*:[^:]*:log-group:\", arn)\n\tnot endswith(arn, \":*\")\n}\n"
3020
+ },
3021
+ {
3022
+ "id": "pf-sfn-logging-name-ascii",
3023
+ "service": "stepfunctions",
3024
+ "severity": "ERROR",
3025
+ "title": "With CloudWatch Logs logging enabled (Level other than OFF) the StateMachineName may only contain 0-9, A-Z, a-z, . - and _ (non-ASCII names are accepted only without logging)",
3026
+ "upstream": "none",
3027
+ "resourceTypes": [
3028
+ "AWS::StepFunctions::StateMachine"
3029
+ ],
3030
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnlogname_url := \"https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachine.html\"\n\n_pf_sfnlogname_fix := \"Rename the state machine to [0-9A-Za-z._-]+ or turn logging off\"\n\n# The name itself accepts non-ASCII characters (measured: 'テスト' creates\n# fine); it is the log delivery resourceId pattern ^[0-9A-Za-z.\\/\\-_:]+$\n# (quoted verbatim from the service error) that rejects it once\n# LoggingConfiguration.Level is not OFF. The class mirrors that pattern; the\n# / and : it admits are already rejected by the name itself (pf-sfn-name-charset).\nviolation contains make_diag_full(\"pf-sfn-logging-name-ascii\", \"ERROR\", name,\n\t\"Properties.StateMachineName\",\n\tsprintf(\"StateMachineName '%s' contains characters outside [0-9A-Za-z._-] while LoggingConfiguration.Level is %s; CreateStateMachine fails with \\\"InvalidLoggingConfiguration: ... Value 'arn:...:stateMachine:%s' at 'resourceId' failed to satisfy constraint: Member must satisfy regular expression pattern\\\"\", [n, lvl, n]),\n\t_pf_sfnlogname_fix, _pf_sfnlogname_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tlvl := resolve(name, \"Properties.LoggingConfiguration.Level\")\n\tis_string(lvl)\n\tlvl != \"OFF\"\n\tn := resolve(name, \"Properties.StateMachineName\")\n\tis_string(n)\n\tnot regex.match(\"^[0-9A-Za-z._:/-]+$\", n)\n}\n"
3031
+ },
3032
+ {
3033
+ "id": "pf-sfn-name-charset",
3034
+ "service": "stepfunctions",
3035
+ "severity": "ERROR",
3036
+ "title": "StateMachineName and Activity Name may not contain whitespace, brackets (< > { } [ ]), wildcards (? *), the special characters \" # % \\ ^ | ~ ` $ & , ; : / or control characters (non-ASCII letters are accepted)",
3037
+ "upstream": "none",
3038
+ "resourceTypes": [
3039
+ "AWS::StepFunctions::StateMachine",
3040
+ "AWS::StepFunctions::Activity"
3041
+ ],
3042
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfnname_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/service-quotas.html\"\n\n_pf_sfnname_fix := \"Use letters, digits, - and _ in the name\"\n\n# Measured 2026-09-05: 'my machine', 'a/b' and 'a<b>' are rejected with\n# InvalidName; 'テスト' is accepted (so no ASCII-only check here — see\n# pf-sfn-logging-name-ascii for the logging case). The schema carries only\n# the 80-character maximum (F3033).\n_pf_sfnname_bad := \"[\\\\s<>{}\\\\[\\\\]?*\\\"#%\\\\\\\\^|~`$&,;:/\\\\x00-\\\\x1f\\\\x7f-\\\\x9f]\"\n\n_pf_sfnname_prop contains [\"AWS::StepFunctions::StateMachine\", \"Properties.StateMachineName\"]\n\n_pf_sfnname_prop contains [\"AWS::StepFunctions::Activity\", \"Properties.Name\"]\n\nviolation contains make_diag_full(\"pf-sfn-name-charset\", \"ERROR\", name,\n\tprop,\n\tsprintf(\"name '%s' contains a character Step Functions rejects (whitespace, < > { } [ ] ? * \\\" # %% \\\\ ^ | ~ ` $ & , ; : / or a control character); the create call fails with \\\"InvalidName: Invalid Name: '%s'\\\"\", [n, n]),\n\t_pf_sfnname_fix, _pf_sfnname_url) if {\n\tsome [rt, prop] in _pf_sfnname_prop\n\tsome name in resources_of_type(rt)\n\tn := resolve(name, prop)\n\tis_string(n)\n\tregex.match(_pf_sfnname_bad, n)\n}\n"
2526
3043
  },
2527
3044
  {
2528
3045
  "id": "pf-tags-aws-prefix",
@@ -2547,4 +3064,11 @@ exports.BUNDLED_RULES = [
2547
3064
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n# The AWS-wide limit is 50 user tags per resource. Counted on the rendered\n# template, which is the only place the merged Tags.of() result exists.\n_pf_tagcount_bad contains [name, n] if {\n\tsome name in object.keys(input.resources)\n\ttags := flatten_list(name, \"Properties.Tags\")\n\tn := count(tags)\n\tn > 50\n}\n\nviolation contains make_diag_full(\"pf-tags-count-max\", \"ERROR\", name,\n\t\"Properties.Tags\",\n\tsprintf(\"%d tags are attached to this resource; AWS allows at most 50 per resource and rejects the create call (\\\"More than 50 tags specified.\\\")\", [n]),\n\t\"Reduce the tag set to 50 or fewer - remember that Tags.of() adds tags from every enclosing scope\",\n\t\"https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html\") if {\n\tsome [name, n] in _pf_tagcount_bad\n}\n"
2548
3065
  }
2549
3066
  ];
2550
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUsdUNBQXVDO1FBQzdDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxzREFBc0Q7UUFDL0QsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysd0JBQXdCO1NBQ3pCO1FBQ0QsTUFBTSxFQUFFLDQ0QkFBNDRCO0tBQ3I1QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxTQUFTLEVBQUUsWUFBWTtRQUN2QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsK0NBQStDO1FBQ3hELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLDZCQUE2QjtTQUM5QjtRQUNELE1BQU0sRUFBRSw4eUJBQTh5QjtLQUN2ekI7SUFDRDtRQUNFLElBQUksRUFBRSwyQ0FBMkM7UUFDakQsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGtEQUFrRDtRQUMzRCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiw2QkFBNkI7U0FDOUI7UUFDRCxNQUFNLEVBQUUsMmhDQUEyaEM7S0FDcGlDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0NBQWdDO1FBQ3RDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSx3REFBd0Q7UUFDakUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsNkJBQTZCO1NBQzlCO1FBQ0QsTUFBTSxFQUFFLDAzQ0FBMDNDO0tBQ240QztJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxTQUFTLEVBQUUs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QUUsS0FBSztRQUNoQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsOEZBQThGO1FBQ3ZHLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLGlCQUFpQjtTQUNsQjtRQUNELE1BQU0sRUFBRSxreUJBQWt5QjtLQUMzeUI7SUFDRDtRQUNFLElBQUksRUFBRSwwQkFBMEI7UUFDaEMsU0FBUyxFQUFFLGVBQWU7UUFDMUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGdJQUFnSTtRQUN6SSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixrQ0FBa0M7U0FDbkM7UUFDRCxNQUFNLEVBQUUsMitEQUEyK0Q7S0FDcC9EO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwrQ0FBK0M7UUFDeEQsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsR0FBRztTQUNKO1FBQ0QsTUFBTSxFQUFFLGdpQ0FBZ2lDO0tBQ3ppQztJQUNEO1FBQ0UsSUFBSSxFQUFFLG1CQUFtQjtRQUN6QixTQUFTLEVBQUUsTUFBTTtRQUNqQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsc0NBQXNDO1FBQy9DLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLEdBQUc7U0FDSjtRQUNELE1BQU0sRUFBRSx5MUJBQXkxQjtLQUNsMkI7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHNjcmlwdHMvYnVuZGxlLXJ1bGVzLnRzIGZyb20gcnVsZXMvKiouIERvIG5vdCBlZGl0IGJ5IGhhbmQuXG4vLyB+fiBSZWdlbmVyYXRlIHdpdGg6IG5weCBwcm9qZW4gYnVuZGxlLXJ1bGVzXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVkUnVsZURhdGEge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBzZXJ2aWNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNldmVyaXR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVwc3RyZWFtOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZWdvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBCVU5ETEVEX1JVTEVTOiBCdW5kbGVkUnVsZURhdGFbXSA9IFtcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1hY2Nlc3MtbG9nLWZvcm1hdC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBY2Nlc3MgbG9nIGZvcm1hdCBtdXN0IGluY2x1ZGUgYSByZXF1ZXN0IGlkIHZhcmlhYmxlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlN0YWdlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZm9ybWF0IHN0cmluZyBpcyBvcGFxdWUgdG8gZXZlcnkgc2NoZW1hIGxheWVyOyB0aGUgc2VydmljZSByZXF1aXJlcyBhXFxuIyByZXF1ZXN0IGlkIHZhcmlhYmxlIHNvbWV3aGVyZSBpbnNpZGUgaXQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1hY2Nlc3MtbG9nLWZvcm1hdC1yZXF1ZXN0LWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NMb2dTZXR0aW5nLkZvcm1hdFxcXCIsXFxuXFx0XFxcIkFjY2VzcyBsb2cgZm9ybWF0IGhhcyBubyByZXF1ZXN0IGlkIHZhcmlhYmxlOyB0aGUgc3RhZ2UgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgTG9nIGZvcm1hdCBtdXN0IGluY2x1ZGUgZWl0aGVyICRjb250ZXh0LnJlcXVlc3RJZCBvciAkY29udGV4dC5leHRlbmRlZFJlcXVlc3RJZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkICRjb250ZXh0LnJlcXVlc3RJZCAob3IgJGNvbnRleHQuZXh0ZW5kZWRSZXF1ZXN0SWQpIHRvIHRoZSBhY2Nlc3MgbG9nIGZvcm1hdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXQtdXAtbG9nZ2luZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVxcXCIpXFxuXFx0Zm10IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWNjZXNzTG9nU2V0dGluZy5Gb3JtYXRcXFwiKVxcblxcdGlzX3N0cmluZyhmbXQpXFxuXFx0bm90IGNvbnRhaW5zKGZtdCwgXFxcIiRjb250ZXh0LnJlcXVlc3RJZFxcXCIpXFxuXFx0bm90IGNvbnRhaW5zKGZtdCwgXFxcIiRjb250ZXh0LmV4dGVuZGVkUmVxdWVzdElkXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1hdXRob3JpemVyLXR0bC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXV0aG9yaXplclJlc3VsdFR0bEluU2Vjb25kcyB0b3BzIG91dCBhdCAzNjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgdHlwZXMgdGhlIFRUTCBhcyBhIGJhcmUgaW50ZWdlcjsgdGhlIDM2MDAgY2VpbGluZyBpc1xcbiMgb25seSBpbiB0aGUgc2VydmljZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LWF1dGhvcml6ZXItdHRsLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzICV2IGlzIG92ZXIgdGhlIGNhcDsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBdXRob3JpemVyIHJlc3VsdCBUVEwgb3V0c2lkZSBhbGxvd2FibGUgcmFuZ2UuIFRUTCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMCBzZWNvbmRzLlxcXFxcXFwiXFxcIiwgW3R0bF0pLFxcblxcdFxcXCJVc2UgYSBUVEwgYmV0d2VlbiAwIGFuZCAzNjAwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclxcXCIpXFxuXFx0dHRsIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJSZXN1bHRUdGxJblNlY29uZHNcXFwiKSlcXG5cXHR0dGwgPiAzNjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctY29nbml0by1hdXRob3JpemVyLXByb3ZpZGVyLWFybnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVycyBuZWVkIFByb3ZpZGVyQVJOc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIENvZ25pdG8gYXV0aG9yaXplciB2YWxpZGF0ZXMgdG9rZW5zIGFnYWluc3QgdGhlIHVzZXIgcG9vbHMgbGlzdGVkIGluXFxuIyBQcm92aWRlckFSTnM7IHRoZSBjcmVhdGUgY2FsbCByZWplY3RzIGl0cyBhYnNlbmNlLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnY3BhX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJQcm92aWRlckFSTnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctY29nbml0by1hdXRob3JpemVyLXByb3ZpZGVyLWFybnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3ZpZGVyQVJOc1xcXCIsXFxuXFx0XFxcIkNPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVyIGhhcyBubyBQcm92aWRlckFSTnM7IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvdmlkZXJBUk5zIGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFByb3ZpZGVyQVJOcyB0byB0aGUgQ29nbml0byB1c2VyIHBvb2wgQVJOKHMpIHRoaXMgYXV0aG9yaXplciBzaG91bGQgdXNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1hdXRob3JpemVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJDT0dOSVRPX1VTRVJfUE9PTFNcXFwiXFxuXFx0X3BmX2FwZ2NwYV9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctZGVwbG95bWVudC1uby1tZXRob2RzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIERlcGxveW1lbnQgbmVlZHMgYXQgbGVhc3Qgb25lIE1ldGhvZCBvbiBpdHMgUkVTVCBBUElcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRGVwbG95aW5nIGFuIEFQSSB3aXRoIHplcm8gbWV0aG9kcyBmYWlscy4gSnVkZ2VkIG9ubHkgd2hlbiB0aGUgd2hvbGVcXG4jIHBpY3R1cmUgaXMgaW4gdGhpcyB0ZW1wbGF0ZTogdGhlIGFwaSBpcyBhIHNpYmxpbmcgcmVzb3VyY2UgYW5kIGl0IGhhcyBub1xcbiMgT3BlbkFQSSBib2R5ICh3aGljaCB3b3VsZCBkZWZpbmUgbWV0aG9kcyBpbnZpc2libHkpLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnZG5tX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2FwZ2RubV9zZXJ2ZWQoYXBpKSBpZiB7XFxuXFx0c29tZSBtIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFxcXCIpXFxuXFx0cmVzb2x2ZShtLCBcXFwiUHJvcGVydGllcy5SZXN0QXBpSWRcXFwiKSA9PSBhcGlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1kZXBsb3ltZW50LW5vLW1ldGhvZHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlc3RBcGlJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUkVTVCBBUEkgJyVzJyBoYXMgbm8gQVdTOjpBcGlHYXRld2F5OjpNZXRob2QgaW4gdGhpcyB0ZW1wbGF0ZTsgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBSRVNUIEFQSSBkb2Vzbid0IGNvbnRhaW4gYW55IG1ldGhvZHNcXFxcXFxcIlxcXCIsIFthcGldKSxcXG5cXHRcXFwiQWRkIGF0IGxlYXN0IG9uZSBBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCB0byB0aGUgQVBJIGJlZm9yZSBkZXBsb3lpbmcgaXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWRlcGxveW1lbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFxcXCIpXFxuXFx0YXBpIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVzdEFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaVxcXCIpXFxuXFx0X3BmX2FwZ2RubV9hYnNlbnQoYXBpLCBcXFwiQm9keVxcXCIpXFxuXFx0X3BmX2FwZ2RubV9hYnNlbnQoYXBpLCBcXFwiQm9keVMzTG9jYXRpb25cXFwiKVxcblxcdG5vdCBfcGZfYXBnZG5tX3NlcnZlZChhcGkpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctaW50ZWdyYXRpb24taHR0cC1tZXRob2RcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vbi1NT0NLIGludGVncmF0aW9ucyBuZWVkIEludGVncmF0aW9uSHR0cE1ldGhvZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IGludGVncmF0aW9uIHR5cGUgZXhjZXB0IE1PQ0sgY2FsbHMgYSBiYWNrZW5kIGFuZCBuZWVkcyB0aGUgSFRUUFxcbiMgbWV0aG9kIHRvIGNhbGwgaXQgd2l0aC4gVmVyaWZpZWQgZm9yIGFsbCBmb3VyIG5vbi1NT0NLIHR5cGVzLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnaWhtX3R5cGVzIDo9IHtcXFwiQVdTXFxcIiwgXFxcIkFXU19QUk9YWVxcXCIsIFxcXCJIVFRQXFxcIiwgXFxcIkhUVFBfUFJPWFlcXFwifVxcblxcbl9wZl9hcGdpaG1fbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0aW50ZWcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkludGVncmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGludGVnKVxcblxcdG9iamVjdC5nZXQoaW50ZWcsIFxcXCJJbnRlZ3JhdGlvbkh0dHBNZXRob2RcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctaW50ZWdyYXRpb24taHR0cC1tZXRob2RcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkludGVncmF0aW9uLkludGVncmF0aW9uSHR0cE1ldGhvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW50ZWdyYXRpb24gdHlwZSAnJXMnIGhhcyBubyBJbnRlZ3JhdGlvbkh0dHBNZXRob2Q7IHRoZSBtZXRob2QgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJFbnVtZXJhdGlvbiB2YWx1ZSBmb3IgSHR0cE1ldGhvZCBtdXN0IGJlIG5vbi1lbXB0eVxcXFxcXFwiXFxcIiwgW3RdKSxcXG5cXHRcXFwiU2V0IEludGVncmF0aW9uLkludGVncmF0aW9uSHR0cE1ldGhvZCAoUE9TVCBmb3IgQVdTL0FXU19QUk9YWSBMYW1iZGEgYmFja2VuZHMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tZXRob2QuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXFxcIilcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb24uVHlwZVxcXCIpXFxuXFx0dCBpbiBfcGZfYXBnaWhtX3R5cGVzXFxuXFx0X3BmX2FwZ2lobV9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctbWV0aG9kLWF1dGhvcml6ZXItaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNVU1RPTSBhbmQgQ09HTklUT19VU0VSX1BPT0xTIGF1dGhvcml6YXRpb24gbmVlZCBBdXRob3JpemVySWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGF1dGhvcml6ZXItYmFja2VkIGF1dGhvcml6YXRpb24gdHlwZXMgcG9pbnQgYXQgYW4gQXV0aG9yaXplcjsgdGhlXFxuIyBtZXRob2QgY3JlYXRlIHJlamVjdHMgdGhlbSB3aXRob3V0IG9uZS4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FwZ21haWRfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkF1dGhvcml6ZXJJZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1tZXRob2QtYXV0aG9yaXplci1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplcklkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBdXRob3JpemF0aW9uVHlwZSAnJXMnIGlzIHNldCBidXQgQXV0aG9yaXplcklkIGlzIG5vdDsgdGhlIG1ldGhvZCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgYXV0aG9yaXplciBJRCBzcGVjaWZpZWQuIFNldHRpbmcgdGhlIGF1dGhvcml6YXRpb24gdHlwZSB0byBDVVNUT00gb3IgQ09HTklUT19VU0VSX1BPT0xTIHJlcXVpcmVzIGEgdmFsaWQgYXV0aG9yaXplci5cXFxcXFxcIlxcXCIsIFthdF0pLFxcblxcdFxcXCJTZXQgQXV0aG9yaXplcklkIHRvIHRoZSBhdXRob3JpemVyIHRoaXMgbWV0aG9kIHNob3VsZCB1c2UsIG9yIGNoYW5nZSBBdXRob3JpemF0aW9uVHlwZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktbWV0aG9kLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFxcXCIpXFxuXFx0YXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemF0aW9uVHlwZVxcXCIpXFxuXFx0YXQgaW4ge1xcXCJDVVNUT01cXFwiLCBcXFwiQ09HTklUT19VU0VSX1BPT0xTXFxcIn1cXG5cXHRfcGZfYXBnbWFpZF9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctbW9kZWwtc2NoZW1hLXR5cGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1vZGVsIHNjaGVtYSAndHlwZScgbXVzdCBiZSBhIEpTT04gU2NoZW1hIGRyYWZ0LTQgdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIFNjaGVtYSBib2R5IGlzIG9wYXF1ZSBKU09OIHRvIGV2ZXJ5IHNjaGVtYSBsYXllci4gRnVsbCBkcmFmdC00XFxuIyB2YWxpZGF0aW9uIGlzIG91dCBvZiBzY29wZTsgYSBsaXRlcmFsIHRvcC1sZXZlbCBcXFwidHlwZVxcXCIgb3V0c2lkZSB0aGVcXG4jIGRyYWZ0LTQgc2V0IChhIGNvbW1vbiB0eXBvIGxpa2UgXFxcIlN0cmluZ1xcXCIpIGlzIHByb3ZhYmx5IGZhdGFsLlxcbl9wZl9hcGdtc3RfdHlwZXMgOj0ge1xcXCJhcnJheVxcXCIsIFxcXCJib29sZWFuXFxcIiwgXFxcImludGVnZXJcXFwiLCBcXFwibnVsbFxcXCIsIFxcXCJudW1iZXJcXFwiLCBcXFwib2JqZWN0XFxcIiwgXFxcInN0cmluZ1xcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1tb2RlbC1zY2hlbWEtdHlwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2NoZW1hLnR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIk1vZGVsIHNjaGVtYSB0eXBlICclcycgaXMgbm90IGEgSlNPTiBTY2hlbWEgZHJhZnQtNCB0eXBlOyB0aGUgbW9kZWwgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIG1vZGVsIHNwZWNpZmllZDogVmFsaWRhdGlvbiBSZXN1bHQ6IHdhcm5pbmdzIDogW10sIGVycm9ycyA6IFtJbnZhbGlkIG1vZGVsIHNjaGVtYSBzcGVjaWZpZWRdXFxcXFxcXCJcXFwiLCBbdF0pLFxcblxcdFxcXCJVc2Ugb25lIG9mIGFycmF5LCBib29sZWFuLCBpbnRlZ2VyLCBudWxsLCBudW1iZXIsIG9iamVjdCwgc3RyaW5nIChsb3dlcmNhc2UpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tb2RlbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFxcXCIpXFxuXFx0c2NoIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2NoZW1hXFxcIilcXG5cXHRpc19vYmplY3Qoc2NoKVxcblxcdHQgOj0gb2JqZWN0LmdldChzY2gsIFxcXCJ0eXBlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHR0ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRpc19zdHJpbmcodClcXG5cXHRub3QgdCBpbiBfcGZfYXBnbXN0X3R5cGVzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctcmVzb3VyY2UtcGF0aC1wYXJ0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQYXRoUGFydCBhbGxvd3MgYS16QS1aMC05Ll8tOiBvciBvbmUgY3VybHktYnJhY2UgdmFyaWFibGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVzb3VyY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFZhbGlkIGZvcm1zIHBlciB0aGUgc2VydmljZSBlcnJvciBpdHNlbGY6IHBsYWluIFthLXpBLVowLTkuXzotXSssIG9yIGFcXG4jIHdob2xlLXBhcnQgdmFyaWFibGUge25hbWV9IC8gZ3JlZWR5IHtuYW1lK30uXFxuX3BmX2FwZ3JwcF9vayhwcCkgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Ll86LV0rJGAsIHBwKVxcblxcbl9wZl9hcGdycHBfb2socHApIGlmIHJlZ2V4Lm1hdGNoKGBeXFxcXHtbYS16QS1aMC05Ll8tXStcXFxcKz9cXFxcfSRgLCBwcClcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LXJlc291cmNlLXBhdGgtcGFydFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGF0aFBhcnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBhdGhQYXJ0ICclcycgaGFzIGNoYXJhY3RlcnMgdGhlIHNlcnZpY2UgcmVqZWN0czsgdGhlIHJlc291cmNlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUmVzb3VyY2UncyBwYXRoIHBhcnQgb25seSBhbGxvdyBhLXpBLVowLTkuXy06IG9yIGEgdmFsaWQgZ3JlZWR5IHBhdGggdmFyaWFibGUgYW5kIGN1cmx5IGJyYWNlcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kLlxcXFxcXFwiXFxcIiwgW3BwXSksXFxuXFx0XFxcIlVzZSBvbmx5IGEtekEtWjAtOS5fLTogaW4gdGhlIHBhdGggcGFydCwgb3IgYSBzaW5nbGUge3ZhcmlhYmxlfSAvIHtncmVlZHkrfSBmb3JtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1yZXNvdXJjZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVxcXCIpXFxuXFx0cHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QYXRoUGFydFxcXCIpXFxuXFx0aXNfc3RyaW5nKHBwKVxcblxcdG5vdCBfcGZfYXBncnBwX29rKHBwKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LXN0YWdlLXZhcmlhYmxlLXZhbHVlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGFnZSB2YXJpYWJsZSB2YWx1ZXMgaGF2ZSBhIHJlc3RyaWN0ZWQgY2hhcmFjdGVyIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQWxsb3dlZCBwZXIgdGhlIHNlcnZpY2UgZXJyb3IgaXRzZWxmOiBhbHBoYW51bWVyaWNzIHBsdXMgc3BhY2UgYW5kXFxuIyAtIC4gXyA6IC8gPyAmID0gLCAobm90ZTogc3BhY2UgSVMgbGVnYWwpLlxcbl9wZl9hcGdzdnZfb2sodikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05IC5fOi8/Jj0sLV0qJGAsIHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1zdGFnZS12YXJpYWJsZS12YWx1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5WYXJpYWJsZXMuJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIlN0YWdlIHZhcmlhYmxlICclcycgaGFzIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYWxsb3dlZCBzZXQ7IHRoZSBzdGFnZSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgc3RhZ2UgdmFyaWFibGUgdmFsdWUgb2Yga2V5ICVzLiAgUGxlYXNlIHVzZSB2YWx1ZXMgd2l0aCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdGhlIHN5bWJvbHMgJyAnLCAtJywgJy4nLCAnXycsICc6JywgJy8nLCAnPycsICcmJywgJz0nLCBhbmQgJywnLlxcXFxcXFwiXFxcIiwgW2ssIGtdKSxcXG5cXHRcXFwiUmVzdHJpY3QgdGhlIHZhbHVlIHRvIGFscGhhbnVtZXJpY3MgYW5kICcgJywgLSwgLiwgXywgOiwgLywgPywgJiwgPSwgLFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zdGFnZS12YXJpYWJsZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6U3RhZ2VcXFwiKVxcblxcdHZhcnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WYXJpYWJsZXNcXFwiKVxcblxcdGlzX29iamVjdCh2YXJzKVxcblxcdHNvbWUgaywgdiBpbiB2YXJzXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IF9wZl9hcGdzdnZfb2sodilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy10b2tlbi1hdXRob3JpemVyLWlkZW50aXR5LXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVE9LRU4gYXV0aG9yaXplcnMgbmVlZCBJZGVudGl0eVNvdXJjZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUT0tFTiBhdXRob3JpemVycyByZWFkIHRoZSB0b2tlbiBmcm9tIHRoZSBoZWFkZXIgbmFtZWQgYnkgSWRlbnRpdHlTb3VyY2UsXFxuIyBzbyB0aGUgY3JlYXRlIGNhbGwgcmVqZWN0cyBpdHMgYWJzZW5jZS4gUkVRVUVTVCBhdXRob3JpemVycyBhcmUgb3V0IG9mXFxuIyBzY29wZTogdGhleSBuZWVkIGl0IG9ubHkgd2l0aCBjYWNoaW5nIGVuYWJsZWQgKHVubWVhc3VyZWQpLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBndGlzX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJJZGVudGl0eVNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy10b2tlbi1hdXRob3JpemVyLWlkZW50aXR5LXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSWRlbnRpdHlTb3VyY2VcXFwiLFxcblxcdFxcXCJUT0tFTiBhdXRob3JpemVyIGhhcyBubyBJZGVudGl0eVNvdXJjZTsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJZGVudGl0eVNvdXJjZSBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBJZGVudGl0eVNvdXJjZSwgZS5nLiBtZXRob2QucmVxdWVzdC5oZWFkZXIuQXV0aG9yaXphdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiVE9LRU5cXFwiXFxuXFx0X3BmX2FwZ3Rpc19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1hcGktbmFtZS1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBBcGkgbmVlZHMgYSBOYW1lIHVubGVzcyBhbiBPcGVuQVBJIGJvZHkgcHJvdmlkZXMgb25lXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNaXJyb3JzIGNmbi1saW50IEUzNjYwIGZvciBSRVNUIEFQSXMsIHdoaWNoIGhhcyBubyBBcGlHYXRld2F5VjJcXG4jIGNvdW50ZXJwYXJ0OiB3aXRob3V0IGEgQm9keSB0byBjYXJyeSBpbmZvLnRpdGxlLCBOYW1lIGlzIG1hbmRhdG9yeS5cXG4jIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItYXBpLW5hbWUtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiLFxcblxcdFxcXCJBcGkgaGFzIG5vIE5hbWUgYW5kIG5vIE9wZW5BUEkgYm9keSB0byB0YWtlIG9uZSBmcm9tOyB0aGUgQVBJIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBBUEkgbmFtZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBOYW1lLCBvciBwcm92aWRlIHRoZSBkZWZpbml0aW9uIHZpYSBCb2R5IC8gQm9keVMzTG9jYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXBpLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRfcGZfYWd2MmFucl9hYnNlbnQobmFtZSwgXFxcIk5hbWVcXFwiKVxcblxcdF9wZl9hZ3YyYW5yX2Fic2VudChuYW1lLCBcXFwiQm9keVxcXCIpXFxuXFx0X3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIFxcXCJCb2R5UzNMb2NhdGlvblxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1hd3MtcHJveHktcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFXU19QUk9YWSBpbnRlZ3JhdGlvbnMgdGFrZSBQYXlsb2FkRm9ybWF0VmVyc2lvbiAxLjAgb3IgMi4wXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFNjb3BlZCB0byBpbnRlZ3JhdGlvbnMgd2hvc2UgQXBpIHNpYmxpbmcgaXMgcHJvdmFibHkgSFRUUCAodGhlIGJlbmNoZWRcXG4jIHNoYXBlKTsgV2ViU29ja2V0IGludGVncmF0aW9ucyBhcmUgb3V0IG9mIHNjb3BlLlxcbl9wZl9hZ3YyYXBwX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1hd3MtcHJveHktcGF5bG9hZC12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUGF5bG9hZEZvcm1hdFZlcnNpb24gJyVzJyBkb2VzIG5vdCBleGlzdDsgdGhlIGludGVncmF0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiVW5zdXBwb3J0ZWQgUGF5bG9hZEZvcm1hdFZlcnNpb246ICVzXFxcXFxcXCJcXFwiLCBbcHYsIHB2XSksXFxuXFx0XFxcIlVzZSAxLjAgb3IgMi4wXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb25UeXBlXFxcIikgPT0gXFxcIkFXU19QUk9YWVxcXCJcXG5cXHRfcGZfYWd2MmFwcF9odHRwX2FwaShuYW1lKVxcblxcdHB2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiKVxcblxcdGlzX3N0cmluZyhwdilcXG5cXHRub3QgcHYgaW4ge1xcXCIxLjBcXFwiLCBcXFwiMi4wXFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWNvcnMtY3JlZGVudGlhbHMtd2lsZGNhcmRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ09SUyBBbGxvd0NyZWRlbnRpYWxzIGNhbm5vdCBwYWlyIHdpdGggYSB3aWxkY2FyZCBvcmlnaW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBDT1JTIHNwZWMgZm9yYmlkcyBjcmVkZW50aWFsZWQgcmVxdWVzdHMgYWdhaW5zdCBhIHdpbGRjYXJkIG9yaWdpbixcXG4jIGFuZCB0aGUgQVBJIGNyZWF0ZSBlbmZvcmNlcyBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItY29ycy1jcmVkZW50aWFscy13aWxkY2FyZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd09yaWdpbnMuJWRcXFwiLCBbby5pbmRleF0pLFxcblxcdFxcXCJDb3JzQ29uZmlndXJhdGlvbiBzZXRzIEFsbG93Q3JlZGVudGlhbHMgd2l0aCBhICcqJyBvcmlnaW47IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJhbGxvdy1jcmVkZW50aWFscyBpcyBub3Qgc3VwcG9ydGVkIGlmICdhbGxvdy1vcmlnaW4nIGlzICpcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkxpc3QgZXhwbGljaXQgb3JpZ2lucywgb3IgZHJvcCBBbGxvd0NyZWRlbnRpYWxzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWNvcnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29yc0NvbmZpZ3VyYXRpb24uQWxsb3dDcmVkZW50aWFsc1xcXCIpKSA9PSB0cnVlXFxuXFx0c29tZSBvIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd09yaWdpbnNcXFwiKVxcblxcdG8udmFsdWUgPT0gXFxcIipcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1odHRwLXByb3h5LXBheWxvYWQtdmVyc2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIVFRQX1BST1hZIGludGVncmF0aW9ucyBvbmx5IHRha2UgUGF5bG9hZEZvcm1hdFZlcnNpb24gMS4wXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSAyLjAgZXZlbnQgZm9ybWF0IGlzIExhbWJkYS1vbmx5OyBIVFRQX1BST1hZIGJhY2tlbmRzIG11c3Qgc3RheSBvblxcbiMgMS4wLiBTY29wZWQgdG8gdGhlIGJlbmNoZWQgc2hhcGUgKEFwaSBzaWJsaW5nIHByb3ZhYmx5IEhUVFApLlxcbl9wZl9hZ3YyaHBwX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1odHRwLXByb3h5LXBheWxvYWQtdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiLFxcblxcdFxcXCJIVFRQX1BST1hZIGludGVncmF0aW9ucyBvbmx5IHN1cHBvcnQgUGF5bG9hZEZvcm1hdFZlcnNpb24gMS4wOyB0aGUgaW50ZWdyYXRpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJQYXlsb2FkRm9ybWF0VmVyc2lvbiAyLjAgaXMgbm90IHN1cHBvcnRlZCBmb3IgaW50ZWdyYXRpb24gb2YgdHlwZSBIVFRQX1BST1hZXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgUGF5bG9hZEZvcm1hdFZlcnNpb24gdG8gMS4wIChvciBvbWl0IGl0KSwgb3Igc3dpdGNoIHRvIGFuIEFXU19QUk9YWSBpbnRlZ3JhdGlvbiBmb3IgMi4wXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb25UeXBlXFxcIikgPT0gXFxcIkhUVFBfUFJPWFlcXFwiXFxuXFx0X3BmX2FndjJocHBfaHR0cF9hcGkobmFtZSlcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIikgPT0gXFxcIjIuMFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUta2V5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFAgQVBJIHJvdXRlIGtleXMgYXJlIFxcXCJNRVRIT0QgL3BhdGhcXFwiIG9yICRkZWZhdWx0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdlYlNvY2tldCByb3V0ZSBrZXlzIGFyZSBmcmVlLWZvcm0sIHNvIHRoaXMgb25seSBqdWRnZXMgcm91dGVzIHdob3NlIEFwaVxcbiMgc2libGluZyBpcyBwcm92YWJseSBIVFRQLiBUUkFDRSBpcyBkZXBsb3ktdmVyaWZpZWQgYXMgcmVqZWN0ZWQ7IHBhdGhzIHdpdGhcXG4jIHNwYWNlcyBhcmUgbGVmdCBhbG9uZSAodW5tZWFzdXJlZCkuXFxuX3BmX2FndjJya19tZXRob2RzIDo9IHtcXFwiR0VUXFxcIiwgXFxcIlBPU1RcXFwiLCBcXFwiUFVUXFxcIiwgXFxcIlBBVENIXFxcIiwgXFxcIkRFTEVURVxcXCIsIFxcXCJIRUFEXFxcIiwgXFxcIk9QVElPTlNcXFwiLCBcXFwiQU5ZXFxcIn1cXG5cXG5fcGZfYWd2MnJrX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbl9wZl9hZ3Yycmtfb2socmspIGlmIHJrID09IFxcXCIkZGVmYXVsdFxcXCJcXG5cXG5fcGZfYWd2MnJrX29rKHJrKSBpZiB7XFxuXFx0cGFydHMgOj0gc3BsaXQocmssIFxcXCIgXFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gMlxcblxcdHBhcnRzWzBdIGluIF9wZl9hZ3YycmtfbWV0aG9kc1xcblxcdHN0YXJ0c3dpdGgocGFydHNbMV0sIFxcXCIvXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUta2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZUtleVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUm91dGVLZXkgJyVzJyBpcyBtYWxmb3JtZWQgZm9yIGFuIEhUVFAgQVBJOyB0aGUgcm91dGUgY3JlYXRlIGZhaWxzIHdpdGggJ1RoZSBwcm92aWRlZCByb3V0ZSBrZXkgaXMgbm90IGZvcm1hdHRlZCBwcm9wZXJseSBmb3IgSFRUUCBwcm90b2NvbC4gRm9ybWF0IHNob3VsZCBiZSBcXFxcXFxcIltIVFRQIE1FVEhPRF0gL1tSRVNPVVJDRSBQQVRIXVxcXFxcXFwiIG9yIFxcXFxcXFwiJGRlZmF1bHRcXFxcXFxcIidcXFwiLCBbcmtdKSxcXG5cXHRcXFwiVXNlIFxcXFxcXFwiTUVUSE9EIC9wYXRoXFxcXFxcXCIgd2l0aCBNRVRIT0Qgb25lIG9mIEdFVCBQT1NUIFBVVCBQQVRDSCBERUxFVEUgSEVBRCBPUFRJT05TIEFOWSwgb3IgJGRlZmF1bHRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktZGV2ZWxvcC1yb3V0ZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVxcXCIpXFxuXFx0X3BmX2FndjJya19odHRwX2FwaShuYW1lKVxcblxcdHJrIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUm91dGVLZXlcXFwiKVxcblxcdGlzX3N0cmluZyhyaylcXG5cXHRub3QgX3BmX2FndjJya19vayhyaylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUtc2VsZWN0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFAgQVBJcyBhY2NlcHQgb25seSB0aGUgbWV0aG9kLXBhdGggcm91dGUgc2VsZWN0aW9uIGV4cHJlc3Npb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJvdGggc3BlbGxpbmdzIGRlcGxveS12ZXJpZmllZCBhcyBhY2NlcHRlZDogdGhlIGRvY3VtZW50ZWRcXG4jIFxcXCIkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aFxcXCIgYW5kIHRoZSBcXFwiJHtyZXF1ZXN0Lm1ldGhvZH0gJHtyZXF1ZXN0LnBhdGh9XFxcIlxcbiMgZm9ybSB0aGUgc2VydmljZSBlcnJvciBpdHNlbGYgcHJpbnRzIChiZW5jaCB2MDJiKS5cXG5fcGZfYWd2Mmhyc19hbGxvd2VkIDo9IHtcXFwiJHJlcXVlc3QubWV0aG9kICRyZXF1ZXN0LnBhdGhcXFwiLCBcXFwiJHtyZXF1ZXN0Lm1ldGhvZH0gJHtyZXF1ZXN0LnBhdGh9XFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItaHR0cC1yb3V0ZS1zZWxlY3Rpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSFRUUCBBUEkgUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uICclcycgaXMgbm90IHN1cHBvcnRlZDsgdGhlIEFQSSBjcmVhdGUgZmFpbHMgd2l0aCAnUm91dGUgc2VsZWN0aW9uIGV4cHJlc3Npb24gaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gXFxcXFxcXCIke3JlcXVlc3QubWV0aG9kfSAke3JlcXVlc3QucGF0aH1cXFxcXFxcIidcXFwiLCBbcnNlXSksXFxuXFx0XFxcIlVzZSAkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aCwgb3Igb21pdCB0aGUgcHJvcGVydHkgKEhUVFAgQVBJcyBkZWZhdWx0IHRvIGl0KVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxuXFx0cnNlIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXFxcIilcXG5cXHRpc19zdHJpbmcocnNlKVxcblxcdG5vdCByc2UgaW4gX3BmX2FndjJocnNfYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItand0LWF1dGhvcml6ZXItY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkpXVCBhdXRob3JpemVycyBuZWVkIEp3dENvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIEpXVCBhdXRob3JpemVyIGlzIG5vdGhpbmcgYnV0IGl0cyBpc3N1ZXIvYXVkaWVuY2UgY29uZmlnLCBzbyB0aGVcXG4jIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3YyamFjX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJKd3RDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItand0LWF1dGhvcml6ZXItY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Kd3RDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiSldUIGF1dGhvcml6ZXIgaGFzIG5vIEp3dENvbmZpZ3VyYXRpb247IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSnd0Q29uZmlndXJhdGlvbiBtdXN0IG5vdCBiZSBudWxsIGZvciBKV1QgQXV0aG9yaXplclxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IEp3dENvbmZpZ3VyYXRpb24gd2l0aCBJc3N1ZXIgYW5kIEF1ZGllbmNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJUeXBlXFxcIikgPT0gXFxcIkpXVFxcXCJcXG5cXHRfcGZfYWd2MmphY19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1yZXF1ZXN0LWF1dGhvcml6ZXItcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJFUVVFU1QgYXV0aG9yaXplcnMgb24gSFRUUCBBUElzIG5lZWQgQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVxdWlyZWQgb24gSFRUUCBBUElzIG9ubHkgLSBXZWJTb2NrZXQgUkVRVUVTVCBhdXRob3JpemVycyBtdXN0IE5PVCBzZXRcXG4jIGl0LCBzbyB0aGUgcnVsZSBmaXJlcyBzb2xlbHkgd2hlbiB0aGUgQXBpIHNpYmxpbmcgaXMgcHJvdmFibHkgSFRUUC5cXG4jIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJyYXBfaHR0cF9hcGkobmFtZSkgaWYge1xcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUoYXBpLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG59XFxuXFxuX3BmX2FndjJyYXBfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLXJlcXVlc3QtYXV0aG9yaXplci1wYXlsb2FkLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0XFxcIlJFUVVFU1QgYXV0aG9yaXplciBvbiBhbiBIVFRQIEFQSSBoYXMgbm8gQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uOyB0aGUgYXV0aG9yaXplciBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvbiBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgUkVRVUVTVCBhdXRob3JpemVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uIHRvIDEuMCBvciAyLjBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiUkVRVUVTVFxcXCJcXG5cXHRfcGZfYWd2MnJhcF9odHRwX2FwaShuYW1lKVxcblxcdF9wZl9hZ3YycmFwX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLXdlYnNvY2tldC1yb3V0ZS1zZWxlY3Rpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiV2ViU29ja2V0IEFQSXMgbmVlZCBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdlYlNvY2tldCBBUElzIHJvdXRlIGJ5IGV2YWx1YXRpbmcgdGhpcyBleHByZXNzaW9uIGFnYWluc3QgZWFjaCBtZXNzYWdlLFxcbiMgc28gdGhlIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3Yyd3JzX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi13ZWJzb2NrZXQtcm91dGUtc2VsZWN0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiLFxcblxcdFxcXCJXZWJTb2NrZXQgQVBJIGhhcyBubyBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb247IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvbiwgZS5nLiAkcmVxdWVzdC5ib2R5LmFjdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIldFQlNPQ0tFVFxcXCJcXG5cXHRfcGZfYWd2Mndyc19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLWNvb2xkb3duLW5vbi1uZWdhdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvb2xkb3duIGNhbm5vdCBiZSBuZWdhdGl2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ29vbGRvd24gaXMgYSBzdHJpbmcgaW4gdGhlIHNjaGVtYTsgb25seSB0aGUgc2VydmljZSBrbm93cyBpdCBpcyBhXFxuIyBub24tbmVnYXRpdmUgaW50ZWdlci5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy1jb29sZG93bi1ub24tbmVnYXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvb2xkb3duXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDb29sZG93biAldiBpcyBuZWdhdGl2ZTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMFxcXFxcXFwiXFxcIiwgW2NdKSxcXG5cXHRcXFwiVXNlIHplcm8gb3IgYSBwb3NpdGl2ZSBudW1iZXIgb2Ygc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29vbGRvd25cXFwiKSlcXG5cXHRjIDwgMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1kZXNpcmVkLWNhcGFjaXR5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGVzaXJlZENhcGFjaXR5IG11c3Qgc2l0IGJldHdlZW4gTWluU2l6ZSBhbmQgTWF4U2l6ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNpemVzIGFyZSBzdHJpbmctdHlwZWQgaW4gdGhlIHNjaGVtYTsgdGhlIGJldHdlZW4tcmVsYXRpb25zaGlwIGlzXFxuIyBhIHRocmVlLXdheSBjcm9zcy1wcm9wZXJ0eSBjaGVjay4gVGhlIG1pbj5tYXggcGFpciBpdHNlbGYgaXMgZW5naW5lXFxuIyB0ZXJyaXRvcnkgKEUzNzA2KSBhbmQgbm90IHJlcGVhdGVkIGhlcmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctZGVzaXJlZC1jYXBhY2l0eS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVzaXJlZENhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZXNpcmVkQ2FwYWNpdHkgJXYgaXMgb3V0c2lkZSBbJXYsICV2XTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiRGVzaXJlZCBjYXBhY2l0eToldiBtdXN0IGJlIGJldHdlZW4gdGhlIHNwZWNpZmllZCBtaW4gc2l6ZToldiBhbmQgbWF4IHNpemU6JXZcXFxcXFxcIlxcXCIsIFtkYywgbW4sIG14LCBkYywgbW4sIG14XSksXFxuXFx0XFxcIktlZXAgTWluU2l6ZSA8PSBEZXNpcmVkQ2FwYWNpdHkgPD0gTWF4U2l6ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGRjIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc2lyZWRDYXBhY2l0eVxcXCIpKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1pblNpemVcXFwiKSlcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXhTaXplXFxcIikpXFxuXFx0bW4gPD0gbXhcXG5cXHRfcGZfYXNnZGNyX291dChkYywgbW4sIG14KVxcbn1cXG5cXG5fcGZfYXNnZGNyX291dChkYywgbW4sIF8pIGlmIGRjIDwgbW5cXG5cXG5fcGZfYXNnZGNyX291dChkYywgXywgbXgpIGlmIGRjID4gbXhcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1oZWFsdGgtY2hlY2stZ3JhY2UtcGVyaW9kXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCBjYW5ub3QgYmUgbmVnYXRpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgdHlwZXMgaXQgYXMgYSBiYXJlIGludGVnZXIgd2l0aCBubyBmbG9vcjsgemVybyBpcyB0aGVcXG4jIHNlcnZpY2UgZGVmYXVsdCwgc28gb25seSBuZWdhdGl2ZXMgYXJlIGNsYWltZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctaGVhbHRoLWNoZWNrLWdyYWNlLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCAldiBpcyBuZWdhdGl2ZTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiR3JhY2UgcGVyaW9kIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLlxcXFxcXFwiXFxcIiwgW2ddKSxcXG5cXHRcXFwiVXNlIHplcm8gb3IgYSBwb3NpdGl2ZSBudW1iZXIgb2Ygc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGcgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFxcXCIpKVxcblxcdGcgPCAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLW9uZGVtYW5kLXBlcmNlbnRhZ2UtbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHkgdG9wcyBvdXQgYXQgMTAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIHBlcmNlbnRhZ2Ugc3BsaXQgY2Fubm90IGV4Y2VlZCAxMDA7IHRoZSBzY2hlbWEgaGFzIG5vIG1heGltdW0uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctb25kZW1hbmQtcGVyY2VudGFnZS1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1peGVkSW5zdGFuY2VzUG9saWN5Lkluc3RhbmNlc0Rpc3RyaWJ1dGlvbi5PbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHkgJXYgaXMgb3ZlciAxMDA7IHRoZSBncm91cCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiVXNlIGEgcGVyY2VudGFnZSBiZXR3ZWVuIDAgYW5kIDEwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC1pbnN0YW5jZXNkaXN0cmlidXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdHAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWl4ZWRJbnN0YW5jZXNQb2xpY3kuSW5zdGFuY2VzRGlzdHJpYnV0aW9uLk9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5XFxcIikpXFxuXFx0cCA+IDEwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy10YXJnZXQtdmFsdWUtcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXJnZXQgdHJhY2tpbmcgbmVlZHMgYSBwb3NpdGl2ZSBUYXJnZXRWYWx1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6U2NhbGluZ1BvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgZmxvb3IgaXMgZWZmZWN0aXZlbHkgXFxcInBvc2l0aXZlXFxcIiAoOC41ZS0xMik7IHplcm8gYW5kXFxuIyBuZWdhdGl2ZXMgYXJlIHJlamVjdGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXNnLXRhcmdldC12YWx1ZS1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFyZ2V0VHJhY2tpbmdDb25maWd1cmF0aW9uLlRhcmdldFZhbHVlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYXJnZXRWYWx1ZSAldiBpcyBub3QgcG9zaXRpdmU7IHRoZSBwb2xpY3kgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJUYXJnZXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDguNTE1OTJFLTEyIGFuZCAxLjE3NDI3MUUxN1xcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRcXFwiVXNlIGEgcG9zaXRpdmUgdGFyZ2V0IHZhbHVlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctc2NhbGluZ3BvbGljeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6U2NhbGluZ1BvbGljeVxcXCIpXFxuXFx0diA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRUcmFja2luZ0NvbmZpZ3VyYXRpb24uVGFyZ2V0VmFsdWVcXFwiKSlcXG5cXHR2IDw9IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctem9uZS1vci1zdWJuZXQtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGdyb3VwIG5lZWRzIEF2YWlsYWJpbGl0eVpvbmVzLCBBdmFpbGFiaWxpdHlab25lSWRzLCBvciBzdWJuZXRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBQbGFjZW1lbnQgbXVzdCBjb21lIGZyb20gc29tZXdoZXJlLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXNnenNyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctem9uZS1vci1zdWJuZXQtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlZQQ1pvbmVJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiTmVpdGhlciBBdmFpbGFiaWxpdHlab25lcywgQXZhaWxhYmlsaXR5Wm9uZUlkcywgbm9yIFZQQ1pvbmVJZGVudGlmaWVyIGlzIHNldDsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiWW91IG11c3Qgc3BlY2lmeSAxIG9mIGVpdGhlciBBdmFpbGFiaWxpdHlab25lcywgQXZhaWxhYmlsaXR5Wm9uZUlkcywgb3IgU3VibmV0c1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFZQQ1pvbmVJZGVudGlmaWVyIHdpdGggdGhlIHRhcmdldCBzdWJuZXRzIChvciBBdmFpbGFiaWxpdHlab25lcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXFxcIilcXG5cXHRfcGZfYXNnenNyX2Fic2VudChuYW1lLCBcXFwiQXZhaWxhYmlsaXR5Wm9uZXNcXFwiKVxcblxcdF9wZl9hc2d6c3JfYWJzZW50KG5hbWUsIFxcXCJBdmFpbGFiaWxpdHlab25lSWRzXFxcIilcXG5cXHRfcGZfYXNnenNyX2Fic2VudChuYW1lLCBcXFwiVlBDWm9uZUlkZW50aWZpZXJcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWNlLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb21wdXRlIGVudmlyb25tZW50IG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWNlLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVFbnZpcm9ubWVudE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkNvbXB1dGVFbnZpcm9ubWVudE5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDEyOCBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDEyOCBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZUVudmlyb25tZW50TmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDEyOH0kYCwgdilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1jZS12Y3B1cy1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1heHZDcHVzIG11c3QgYmUgYXQgbGVhc3QgTWludkNwdXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtY2UtdmNwdXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuTWF4dkNwdXNcXFwiLFxcblxcdHNwcmludGYoXFxcIk1heHZDcHVzICV2IGlzIGJlbG93IE1pbnZDcHVzICV2IChcXFxcXFxcIm1heHZDcHVzIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWludkNwdXMuXFxcXFxcXCIpXFxcIiwgW214LCBtbl0pLFxcblxcdFxcXCJLZWVwIE1pbnZDcHVzIDw9IE1heHZDcHVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRtbiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLk1pbnZDcHVzXFxcIikpXFxuXFx0bXggOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5NYXh2Q3B1c1xcXCIpKVxcblxcdG14IDwgbW5cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1mYXJnYXRlLWNlLWZpZWxkc1wiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZhcmdhdGUgY29tcHV0ZSBlbnZpcm9ubWVudHMgY2Fubm90IHRha2UgQWxsb2NhdGlvblN0cmF0ZWd5IG9yIEluc3RhbmNlVHlwZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaGZjZl9jcihuYW1lKSA6PSBjciBpZiB7XFxuXFx0Y3IgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLlR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhjcilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWNlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLiVzXFxcIiwgW2ZpZWxkXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgaXMgbm90IGFwcGxpY2FibGUgZm9yICVzIGNvbXB1dGUgZW52aXJvbm1lbnRzOyBCYXRjaCByZWplY3RzIHRoZSBjcmVhdGUgY2FsbFxcXCIsIFtmaWVsZCwgY3JdKSxcXG5cXHRcXFwiUmVtb3ZlIHRoZSBFQzItb25seSBmaWVsZCwgb3Igc3dpdGNoIENvbXB1dGVSZXNvdXJjZXMuVHlwZSB0byBFQzIvU1BPVFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDb21wdXRlRW52aXJvbm1lbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFxcXCIpXFxuXFx0Y3IgOj0gX3BmX2JhdGNoZmNmX2NyKG5hbWUpXFxuXFx0Y3IgaW4ge1xcXCJGQVJHQVRFXFxcIiwgXFxcIkZBUkdBVEVfU1BPVFxcXCJ9XFxuXFx0Y3JlcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzXFxuXFx0aXNfb2JqZWN0KGNyZXMpXFxuXFx0c29tZSBmaWVsZCBpbiB7XFxcIkFsbG9jYXRpb25TdHJhdGVneVxcXCIsIFxcXCJJbnN0YW5jZVR5cGVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KGNyZXMsIGZpZWxkLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtZmFyZ2F0ZS1jcHUtbWVtb3J5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSBqb2IgZGVmaW5pdGlvbnMgbXVzdCB1c2UgYSBzdXBwb3J0ZWQgdkNQVS9tZW1vcnkgY29tYmluYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfYmF0Y2hmY21fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L3VzZXJndWlkZS9mYXJnYXRlLmh0bWxcXFwiXFxuXFxuIyBNZW1vcnkgc3BlYyBwZXIgdkNQVSB0aWVyOiAwLjI1IGlzIGFuIGV4cGxpY2l0IHNldDsgdGhlIHJlc3QgYXJlXFxuIyBbbWluLCBtYXgsIHN0ZXBdIGFyaXRobWV0aWMgcmFuZ2VzLiBLZXlzIGFyZSBudW1iZXJzIHNvIFxcXCIxLjBcXFwiIGFuZFxcbiMgXFxcIjFcXFwiIGJvdGggbGFuZCBvbiB0aGUgc2FtZSB0aWVyIGFmdGVyIHRvX251bWJlci5cXG5fcGZfYmF0Y2hmY21fc2V0IDo9IHs1MTIsIDEwMjQsIDIwNDh9XFxuXFxuX3BmX2JhdGNoZmNtX3JhbmdlIDo9IHswLjU6IFsxMDI0LCA0MDk2LCAxMDI0XSwgMTogWzIwNDgsIDgxOTIsIDEwMjRdLCAyOiBbNDA5NiwgMTYzODQsIDEwMjRdLCA0OiBbODE5MiwgMzA3MjAsIDEwMjRdLCA4OiBbMTYzODQsIDYxNDQwLCA0MDk2XSwgMTY6IFszMjc2OCwgMTIyODgwLCA4MTkyXX1cXG5cXG5fcGZfYmF0Y2hmY21fZmFyZ2F0ZShuYW1lKSBpZiB7XFxuXFx0c29tZSBwYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUGxhdGZvcm1DYXBhYmlsaXRpZXNcXFwiKVxcblxcdHBjLnZhbHVlID09IFxcXCJGQVJHQVRFXFxcIlxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fcmVxKG5hbWUsIHJ0eXBlKSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXMuUmVzb3VyY2VSZXF1aXJlbWVudHNcXFwiKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0b2JqZWN0LmdldChlbnRyeSwgXFxcIlR5cGVcXFwiLCBcXFwiXFxcIikgPT0gcnR5cGVcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHYgOj0gdG9fbnVtYmVyKHJhdylcXG59XFxuXFxuX3BmX2JhdGNoZmNtX2JhZCh2LCBtKSBpZiB7XFxuXFx0diA9PSAwLjI1XFxuXFx0bm90IG0gaW4gX3BmX2JhdGNoZmNtX3NldFxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fYmFkKHYsIG0pIGlmIHtcXG5cXHRzcGVjIDo9IF9wZl9iYXRjaGZjbV9yYW5nZVt2XVxcblxcdG0gPCBzcGVjWzBdXFxufVxcblxcbl9wZl9iYXRjaGZjbV9iYWQodiwgbSkgaWYge1xcblxcdHNwZWMgOj0gX3BmX2JhdGNoZmNtX3JhbmdlW3ZdXFxuXFx0bSA+IHNwZWNbMV1cXG59XFxuXFxuX3BmX2JhdGNoZmNtX2JhZCh2LCBtKSBpZiB7XFxuXFx0c3BlYyA6PSBfcGZfYmF0Y2hmY21fcmFuZ2Vbdl1cXG5cXHQobSAtIHNwZWNbMF0pICUgc3BlY1syXSAhPSAwXFxufVxcblxcbl9wZl9iYXRjaGZjbV90aWVyKHYpIGlmIHYgPT0gMC4yNVxcblxcbl9wZl9iYXRjaGZjbV90aWVyKHYpIGlmIF9wZl9iYXRjaGZjbV9yYW5nZVt2XVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtZmFyZ2F0ZS1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJQcm9wZXJ0aWVzLlJlc291cmNlUmVxdWlyZW1lbnRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJWQ1BVICV2IGlzIG5vdCBhIEZhcmdhdGUgdGllciAoMC4yNSwgMC41LCAxLCAyLCA0LCA4LCAxNik7IEJhdGNoIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVzb3VyY2UgcmVxdWlyZW1lbnRzIC4uLiBub3QgdmFsaWQuXFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdFxcXCJVc2Ugb25lIG9mIHRoZSBGYXJnYXRlIHZDUFUgdGllcnNcXFwiLFxcblxcdF9wZl9iYXRjaGZjbV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdF9wZl9iYXRjaGZjbV9mYXJnYXRlKG5hbWUpXFxuXFx0diA6PSBfcGZfYmF0Y2hmY21fcmVxKG5hbWUsIFxcXCJWQ1BVXFxcIilcXG5cXHRub3QgX3BmX2JhdGNoZmNtX3RpZXIodilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWNwdS1tZW1vcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXMuUmVzb3VyY2VSZXF1aXJlbWVudHNcXFwiLFxcblxcdHNwcmludGYoXFxcIk1FTU9SWSAldiBNaUIgaXMgbm90IHZhbGlkIGZvciBWQ1BVICV2OyBCYXRjaCByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJGYXJnYXRlIHJlc291cmNlIHJlcXVpcmVtZW50cyAoJXYgdkNQVSwgJXYgTWlCKSBub3QgdmFsaWQuXFxcXFxcXCJcXFwiLCBbbSwgdiwgdiwgbV0pLFxcblxcdFxcXCJQaWNrIGEgbWVtb3J5IHZhbHVlIGZyb20gdGhlIHRpZXIncyBzdXBwb3J0ZWQgbGlzdFxcXCIsXFxuXFx0X3BmX2JhdGNoZmNtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2JhdGNoZmNtX2ZhcmdhdGUobmFtZSlcXG5cXHR2IDo9IF9wZl9iYXRjaGZjbV9yZXEobmFtZSwgXFxcIlZDUFVcXFwiKVxcblxcdG0gOj0gX3BmX2JhdGNoZmNtX3JlcShuYW1lLCBcXFwiTUVNT1JZXFxcIilcXG5cXHRfcGZfYmF0Y2hmY21fYmFkKHYsIG0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtZmFyZ2F0ZS1leGVjdXRpb24tcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZhcmdhdGUgam9iIGRlZmluaXRpb25zIHJlcXVpcmUgRXhlY3V0aW9uUm9sZUFyblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaGZlcl9mYXJnYXRlKG5hbWUpIGlmIHtcXG5cXHRzb21lIHBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5QbGF0Zm9ybUNhcGFiaWxpdGllc1xcXCIpXFxuXFx0cGMudmFsdWUgPT0gXFxcIkZBUkdBVEVcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtZmFyZ2F0ZS1leGVjdXRpb24tcm9sZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyUHJvcGVydGllcy5FeGVjdXRpb25Sb2xlQXJuXFxcIixcXG5cXHRcXFwiUGxhdGZvcm1DYXBhYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgRXhlY3V0aW9uUm9sZUFybiBpcyBtaXNzaW5nIChcXFxcXFxcImV4ZWN1dGlvblJvbGVBcm4gaXMgcmVxdWlyZWQgZm9yIEZhcmdhdGUgam9icy5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJTZXQgQ29udGFpbmVyUHJvcGVydGllcy5FeGVjdXRpb25Sb2xlQXJuXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1JlZ2lzdGVySm9iRGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2JhdGNoZmVyX2ZhcmdhdGUobmFtZSlcXG5cXHRjcCA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcy5Db250YWluZXJQcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KGNwKVxcblxcdG9iamVjdC5nZXQoY3AsIFxcXCJFeGVjdXRpb25Sb2xlQXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWZhcmdhdGUtbXVsdGlub2RlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTXVsdGktbm9kZSBwYXJhbGxlbCBqb2JzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEZhcmdhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWZhcmdhdGUtbXVsdGlub2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QbGF0Zm9ybUNhcGFiaWxpdGllc1xcXCIsXFxuXFx0XFxcIlR5cGUgbXVsdGlub2RlIGNhbm5vdCBydW4gb24gRmFyZ2F0ZSAoXFxcXFxcXCJGYXJnYXRlIGRvZXMgbm90IHN1cHBvcnQgTU5QIGpvYnNcXFxcXFxcIilcXFwiLFxcblxcdFxcXCJVc2UgRUMyIHBsYXRmb3JtIGNhcGFiaWxpdGllcyBmb3IgbXVsdGktbm9kZSBwYXJhbGxlbCBqb2JzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC91c2VyZ3VpZGUvbXVsdGktbm9kZS1wYXJhbGxlbC1qb2JzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwibXVsdGlub2RlXFxcIlxcblxcdHNvbWUgcGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBsYXRmb3JtQ2FwYWJpbGl0aWVzXFxcIilcXG5cXHRwYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1qZC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSm9iIGRlZmluaXRpb24gbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWpkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkpvYkRlZmluaXRpb25OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJKb2JEZWZpbml0aW9uTmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJKb2JEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSm9iRGVmaW5pdGlvbk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwxMjh9JGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtbWFuYWdlZC1jb21wdXRlLXJlc291cmNlc1wiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1BTkFHRUQgY29tcHV0ZSBlbnZpcm9ubWVudHMgcmVxdWlyZSBDb21wdXRlUmVzb3VyY2VzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLW1hbmFnZWQtY29tcHV0ZS1yZXNvdXJjZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXNcXFwiLFxcblxcdFxcXCJUeXBlIE1BTkFHRUQgcmVxdWlyZXMgQ29tcHV0ZVJlc291cmNlcyAoXFxcXFxcXCJjb21wdXRlUmVzb3VyY2VzIG11c3QgYmUgcHJvdmlkZWQgZm9yIGEgTUFOQUdFRCBjb21wdXRlIGVudmlyb25tZW50XFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiQWRkIGEgQ29tcHV0ZVJlc291cmNlcyBibG9jaywgb3IgdXNlIFR5cGUgVU5NQU5BR0VEXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiTUFOQUdFRFxcXCJcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29tcHV0ZVJlc291cmNlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1xdWV1ZS1vcmRlci1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIG1heSBub3QgYmUgZW1wdHlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2NoZW1hIGFjY2VwdHMgYW4gZW1wdHkgbGlzdDsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdC4gVHJ1ZVxcbiMgYWJzZW5jZSBpcyBzY2hlbWEgdGVycml0b3J5LCBzbyBvbmx5IHRoZSBwcmVzZW50LWFuZC1lbXB0eSBzaGFwZVxcbiMgaXMgY2xhaW1lZCAoaW5wdXQucmVzb3VyY2VzIHNlZXMgdGhlIHJhdyBsaXN0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLXF1ZXVlLW9yZGVyLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db21wdXRlRW52aXJvbm1lbnRPcmRlclxcXCIsXFxuXFx0XFxcIkNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIGlzIGVtcHR5IChcXFxcXFxcImNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIGlzIHJlcXVpcmVkLlxcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIkxpc3QgYXQgbGVhc3Qgb25lIGNvbXB1dGUgZW52aXJvbm1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlSm9iUXVldWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYlF1ZXVlXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvcmRlciA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29tcHV0ZUVudmlyb25tZW50T3JkZXJcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KG9yZGVyKVxcblxcdGNvdW50KG9yZGVyKSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtcmV0cnktYXR0ZW1wdHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZXRyeVN0cmF0ZWd5LkF0dGVtcHRzIG1heSBub3QgZXhjZWVkIDEwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1yZXRyeS1hdHRlbXB0c1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmV0cnlTdHJhdGVneS5BdHRlbXB0c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiUmV0cnlTdHJhdGVneS5BdHRlbXB0cyAldiBpcyBhYm92ZSB0aGUgbWF4aW11bSAoXFxcXFxcXCJSZXRyeUF0dGVtcHRzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMC5cXFxcXFxcIilcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCAxMCBhdHRlbXB0c1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZWdpc3RlckpvYkRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmV0cnlTdHJhdGVneS5BdHRlbXB0c1xcXCIpKVxcblxcdG4gPiAxMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLXRpbWVvdXQtbWluaW11bVwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kcyBtdXN0IGJlIGF0IGxlYXN0IDYwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC10aW1lb3V0LW1pbmltdW1cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGltZW91dCAldiBzZWNvbmRzIGlzIGJlbG93IHRoZSBtaW5pbXVtIChcXFxcXFxcIkF0dGVtcHREdXJhdGlvblNlY29uZHMgaW4gVGltZW91dCBtdXN0IGJlIGF0IGxlYXN0IDYwIHNlY29uZHMuXFxcXFxcXCIpXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGF0IGxlYXN0IDYwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJKb2JEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kc1xcXCIpKVxcblxcdG4gPCA2MFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLXVubWFuYWdlZC1mYXJnYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVU5NQU5BR0VEIGNvbXB1dGUgZW52aXJvbm1lbnRzIGNhbm5vdCBiZSBGYXJnYXRlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfYmF0Y2h1bWZfY3IobmFtZSkgOj0gY3IgaWYge1xcblxcdGNyIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5UeXBlXFxcIilcXG5cXHRpc19zdHJpbmcoY3IpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtdW5tYW5hZ2VkLWZhcmdhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuVHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVHlwZSBVTk1BTkFHRUQgY2Fubm90IHBhaXIgd2l0aCBDb21wdXRlUmVzb3VyY2VzLlR5cGUgJXMgKFxcXFxcXFwiQ2Fubm90IGNyZWF0ZSBhbiBVTk1BTkFHRUQgRmFyZ2F0ZSBDb21wdXRlIEVudmlyb25tZW50LlxcXFxcXFwiKVxcXCIsIFtjcl0pLFxcblxcdFxcXCJVc2UgTUFOQUdFRCBmb3IgRmFyZ2F0ZSwgb3IgRUMyIHJlc291cmNlcyBmb3IgVU5NQU5BR0VEXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiVU5NQU5BR0VEXFxcIlxcblxcdGNyIDo9IF9wZl9iYXRjaHVtZl9jcihuYW1lKVxcblxcdGNyIGluIHtcXFwiRkFSR0FURVxcXCIsIFxcXCJGQVJHQVRFX1NQT1RcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFnZW50Y29yZS1nYXRld2F5LWp3dC1hdXRob3JpemVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmVkcm9jay1hZ2VudGNvcmVcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2F0ZXdheXMgd2l0aCBBdXRob3JpemVyVHlwZSBDVVNUT01fSldUIHJlcXVpcmUgQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6R2F0ZXdheVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9nd2p3dF9oYXNfY29uZmlnKG5hbWUpIGlmIGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJDb25maWd1cmF0aW9uXFxcIikpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hZ2VudGNvcmUtZ2F0ZXdheS1qd3QtYXV0aG9yaXplclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBdXRob3JpemVyVHlwZSBpcyBDVVNUT01fSldUIGJ1dCBBdXRob3JpemVyQ29uZmlndXJhdGlvbiBpcyBtaXNzaW5nOyB0aGUgQ3JlYXRlR2F0ZXdheSBBUEkgcmVxdWlyZXMgaXQgYW5kIHRoZSBkZXBsb3ltZW50IGZhaWxzIHdpdGggYSBWYWxpZGF0aW9uRXhjZXB0aW9uXFxcIixcXG5cXHRcXFwiQWRkIEF1dGhvcml6ZXJDb25maWd1cmF0aW9uLkN1c3RvbUpXVEF1dGhvcml6ZXIgKGRpc2NvdmVyeVVybCBhbmQgYWxsb3dlZEF1ZGllbmNlL2FsbG93ZWRDbGllbnRzKSwgb3Igc3dpdGNoIEF1dGhvcml6ZXJUeXBlIHRvIEFXU19JQU1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVHYXRld2F5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkdhdGV3YXlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiQ1VTVE9NX0pXVFxcXCJcXG5cXHRub3QgX3BmX2d3and0X2hhc19jb25maWcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hZ2VudGNvcmUtcnVudGltZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmVkcm9jay1hZ2VudGNvcmVcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWdlbnRDb3JlIFJ1bnRpbWUgbmFtZXMgbXVzdCBtYXRjaCBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSAobm8gaHlwaGVucylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENsb3VkRm9ybWF0aW9uIOOCueOCreODvOODnuOBryBBZ2VudFJ1bnRpbWVOYW1lIOOBruODkeOCv+ODvOODs+OCkuaMgeOBn+OBquOBhO+8iOOCqOODs+OCuOODs+e0oOmAmuOCiuOAgVxcbiMgMjAyNi0wOS0wMSDjgasgMS43LjAtYmV0YSDjgafnorroqo3vvInjgYzjgIFDcmVhdGVBZ2VudFJ1bnRpbWUgQVBJIOOBr1xcbiMgW2EtekEtWl1bYS16QS1aMC05X117MCw0N30g44KS5by35Yi244GZ44KL44CC44OP44Kk44OV44Oz5YWl44KK44GuIENESyDpoqjlkb3lkI3jgYzlrprnlarjga7mrbvlm6DjgIJcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFnZW50Y29yZS1ydW50aW1lLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFnZW50UnVudGltZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkFnZW50UnVudGltZU5hbWUgJyVzJyBpcyBpbnZhbGlkOiBpdCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCB1bmRlcnNjb3JlcyAobWF4IDQ4IGNoYXJhY3RlcnMsIGh5cGhlbnMgYXJlIG5vdCBhbGxvd2VkKTsgQ3JlYXRlQWdlbnRSdW50aW1lIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGFuIHVuZGVyc2NvcmUtc2VwYXJhdGVkIG5hbWUgc3VjaCBhcyAnbXlfYWdlbnRfcnVudGltZSdcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVBZ2VudFJ1bnRpbWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFnZW50UnVudGltZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1hY20tY2VydC1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNsb3VkRnJvbnQgdmlld2VyIGNlcnRpZmljYXRlcyBtdXN0IGxpdmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1hY20tY2VydC1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZUFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCByZXF1aXJlcyB0aGUgQUNNIGNlcnRpZmljYXRlIHRvIGJlIGluIHVzLWVhc3QtMSwgYnV0IHRoZSBjZXJ0aWZpY2F0ZSBpcyBpbiAlc1xcXCIsIFtyZWdpb25dKSxcXG5cXHRcXFwiSXNzdWUgb3IgaW1wb3J0IHRoZSBjZXJ0aWZpY2F0ZSBpbiB1cy1lYXN0LTEgKGUuZy4gYSBkZWRpY2F0ZWQgdXMtZWFzdC0xIHN0YWNrKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NuYW1lcy1hbmQtaHR0cHMtcmVxdWlyZW1lbnRzLmh0bWwjaHR0cHMtcmVxdWlyZW1lbnRzLWNlcnRpZmljYXRlLWlzc3VlclxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQWNtQ2VydGlmaWNhdGVBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzJdID09IFxcXCJhY21cXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1hbGlhc2VzLXJlcXVpcmUtY3VzdG9tLWNlcnRpZmljYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGRpc3RyaWJ1dGlvbiB3aXRoIEFsaWFzZXMgY2Fubm90IHVzZSB0aGUgQ2xvdWRGcm9udCBkZWZhdWx0IGNlcnRpZmljYXRlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9hbGlhc2NlcnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLXZpZXdlcmNlcnRpZmljYXRlLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2FsaWFzY2VydF9maXggOj0gXFxcIkF0dGFjaCBhbiBBQ00gY2VydGlmaWNhdGUgKEFjbUNlcnRpZmljYXRlQXJuLCB1cy1lYXN0LTEpIG9yIGFuIElBTSBjZXJ0aWZpY2F0ZSwgdG9nZXRoZXIgd2l0aCBTc2xTdXBwb3J0TWV0aG9kIGFuZCBNaW5pbXVtUHJvdG9jb2xWZXJzaW9uXFxcIlxcblxcbl9wZl9jZl9hbGlhc2NlcnRfY291bnQobmFtZSkgOj0gY291bnQoWzEgfFxcblxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkFsaWFzZXNcXFwiKVxcbl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWFsaWFzZXMtcmVxdWlyZS1jdXN0b20tY2VydGlmaWNhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZVxcXCIsXFxuXFx0XFxcIkEgZGlzdHJpYnV0aW9uIHdpdGggQWxpYXNlcyBjYW5ub3QgdXNlIHRoZSBDbG91ZEZyb250IGRlZmF1bHQgY2VydGlmaWNhdGVcXFwiLFxcblxcdF9wZl9jZl9hbGlhc2NlcnRfZml4LCBfcGZfY2ZfYWxpYXNjZXJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdF9wZl9jZl9hbGlhc2NlcnRfY291bnQobmFtZSkgPiAwXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQ2xvdWRGcm9udERlZmF1bHRDZXJ0aWZpY2F0ZVxcXCIpID09IHRydWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWNhY2hlLXBvbGljeS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZSBwb2xpY3kgbmFtZXMgYWxsb3cgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkNhY2hlUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWNhY2hlLXBvbGljeS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DYWNoZVBvbGljeUNvbmZpZy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDYWNoZVBvbGljeUNvbmZpZy5OYW1lICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IGFscGhhbnVtZXJpY3MsIGRhc2ggYW5kIHVuZGVyc2NvcmVcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ2FjaGVQb2xpY3kuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6Q2FjaGVQb2xpY3lcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DYWNoZVBvbGljeUNvbmZpZy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dKyRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtY2FjaGVkLW1ldGhvZHMtc3Vic2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZWRNZXRob2RzIG11c3QgYmUgYSBzdWJzZXQgb2YgQWxsb3dlZE1ldGhvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX21ldGhvZHNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWNhY2hlYmVoYXZpb3IuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfbWV0aG9kc19iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKSwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbiMgQ2xvdWRGcm9udCBkZWZhdWx0cyBBbGxvd2VkTWV0aG9kcyB0byBHRVQvSEVBRCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBvbWl0dGVkLFxcbiMgc28gYW4gb21pdHRlZCBBbGxvd2VkTWV0aG9kcyBzdGlsbCBjb25zdHJhaW5zIHdoYXQgbWF5IGJlIGNhY2hlZC5cXG5fcGZfY2ZfbWV0aG9kc19hbGxvd2VkKGIpIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkFsbG93ZWRNZXRob2RzXFxcIiwgW1xcXCJHRVRcXFwiLCBcXFwiSEVBRFxcXCJdKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1jYWNoZWQtbWV0aG9kcy1zdWJzZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNhY2hlZE1ldGhvZHNcXFwiLCBbYi5wYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiQ2FjaGVkTWV0aG9kcyBjb250YWlucyAlcywgd2hpY2ggaXMgbm90IGluIEFsbG93ZWRNZXRob2RzICV2XFxcIiwgW21ldGhvZCwgYWxsb3dlZF0pLFxcblxcdFxcXCJFdmVyeSBtZXRob2QgaW4gQ2FjaGVkTWV0aG9kcyBtdXN0IGFsc28gYXBwZWFyIGluIEFsbG93ZWRNZXRob2RzXFxcIixcXG5cXHRfcGZfY2ZfbWV0aG9kc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX21ldGhvZHNfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0Y2FjaGVkIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkNhY2hlZE1ldGhvZHNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGNhY2hlZClcXG5cXHRhbGxvd2VkIDo9IF9wZl9jZl9tZXRob2RzX2FsbG93ZWQoYilcXG5cXHRpc19hcnJheShhbGxvd2VkKVxcblxcdHNvbWUgbWV0aG9kIGluIGNhY2hlZFxcblxcdG5vdCBtZXRob2QgaW4gYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgZGlzdHJpYnV0aW9uIG11c3QgYmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9lZGdlcmVnaW9uX2ZpeCA6PSBcXFwiQ3JlYXRlIHRoZSBMYW1iZGFARWRnZSBmdW5jdGlvbiBpbiB1cy1lYXN0LTEgKGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiBkb2VzIHRoaXMgZm9yIHlvdSkgYW5kIGFzc29jaWF0ZSB0aGF0IHZlcnNpb24ncyBBUk5cXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvbGFtYmRhLWF0LWVkZ2UtZnVuY3Rpb24tcmVzdHJpY3Rpb25zLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIn0gfFxcblxcdFxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucy4lZC5MYW1iZGFGdW5jdGlvbkFSTlxcXCIsIFtiLnBhdGgsIGEuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgbXVzdCBsaXZlIGluIHVzLWVhc3QtMSwgYnV0IHRoaXMgZnVuY3Rpb24gaXMgaW4gJXNcXFwiLCBbcmVnaW9uXSksXFxuXFx0X3BmX2NmX2VkZ2VyZWdpb25fZml4LCBfcGZfY2ZfZWRnZXJlZ2lvbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDdcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBhc3NvY2lhdGlvbnMgbXVzdCByZWZlcmVuY2UgYSB2ZXJzaW9uIEFSTiwgbm90IGFuIGFsaWFzIG9yICRMQVRFU1RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfZml4IDo9IFxcXCJBc3NvY2lhdGUgYSB2ZXJzaW9uIEFSTiAoaW4gdGhlIENESywgZm4uY3VycmVudFZlcnNpb24uZWRnZUFybikgaW5zdGVhZCBvZiB0aGUgdW5xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBhbiBhbGlhcywgb3IgJExBVEVTVFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXZlcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tbGFtYmRhZnVuY3Rpb25hc3NvY2lhdGlvbi5odG1sXFxcIlxcblxcbl9wZl9jZl9lZGdldmVyX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCJ9IHxcXG5cXHRcXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxuIyBMYW1iZGEgQVJOcyBzcGxpdCBpbnRvIDcgc2VnbWVudHMgd2hlbiB1bnF1YWxpZmllZFxcbiMgKGFybjpwYXJ0aXRpb246bGFtYmRhOnJlZ2lvbjphY2NvdW50OmZ1bmN0aW9uOm5hbWUpIGFuZCA4IHdoZW4gYSB2ZXJzaW9uIG9yXFxuIyBhbGlhcyBxdWFsaWZpZXIgaXMgYXBwZW5kZWQuIE9ubHkgYW4gYWxsLWRpZ2l0IHF1YWxpZmllciBpcyBhIHZlcnNpb24uXFxuX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKSA6PSBbe1xcXCJwYXRoXFxcIjogcGF0aCwgXFxcImFyblxcXCI6IGFybiwgXFxcInBhcnRzXFxcIjogcGFydHN9IHxcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2V2ZXJfYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHBhcnRzWzVdID09IFxcXCJmdW5jdGlvblxcXCJcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zLiVkLkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgW2IucGF0aCwgYS5pbmRleF0pXFxuXVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRcXFwiTGFtYmRhQEVkZ2UgcmVxdWlyZXMgYSB2ZXJzaW9uLXF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGJ1dCB0aGlzIEFSTiBoYXMgbm8gcXVhbGlmaWVyXFxcIixcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA3XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSByZXF1aXJlcyBhIHZlcnNpb24tcXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYnV0ICclcycgaXMgYW4gYWxpYXMgb3IgJExBVEVTVFxcXCIsIFtxdWFsaWZpZXJdKSxcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA4XFxuXFx0cXVhbGlmaWVyIDo9IGl0LnBhcnRzWzddXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOV0rJFxcXCIsIHF1YWxpZmllcilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LW9yaWdpbi1ncm91cC1tZW1iZXItb3JpZ2luXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPcmlnaW4gZ3JvdXAgbWVtYmVycyBtdXN0IHJlZmVyZW5jZSBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gdGhlIGRpc3RyaWJ1dGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2Zfb2dtZW1iZXJfaWRzKG5hbWUpIDo9IHtpZCB8XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbnNcXFwiKVxcblxcdGlkIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJJZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGlkKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtb3JpZ2luLWdyb3VwLW1lbWJlci1vcmlnaW5cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbkdyb3Vwcy5JdGVtcy4lZC5NZW1iZXJzXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJPcmlnaW4gZ3JvdXAgbWVtYmVyICclcycgZG9lcyBub3QgbWF0Y2ggYW55IG9yaWdpbiBJZCBpbiB0aGUgZGlzdHJpYnV0aW9uXFxcIiwgW29pZF0pLFxcblxcdFxcXCJQb2ludCBldmVyeSBvcmlnaW4gZ3JvdXAgbWVtYmVyIGF0IHRoZSBJZCBvZiBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gT3JpZ2luc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tb3JpZ2luZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5PcmlnaW5Hcm91cHMuSXRlbXNcXFwiKVxcblxcdG1lbWJlcnMgOj0gb2JqZWN0LmdldChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJNZW1iZXJzXFxcIiwge30pLCBcXFwiSXRlbXNcXFwiLCBbXSlcXG5cXHRzb21lIG0gaW4gbWVtYmVyc1xcblxcdG9pZCA6PSBvYmplY3QuZ2V0KG0sIFxcXCJPcmlnaW5JZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKG9pZClcXG5cXHRub3Qgb2lkIGluIF9wZl9jZl9vZ21lbWJlcl9pZHMobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2FjaGUgYmVoYXZpb3IgVFRMcyBtdXN0IHNhdGlzZnkgTWluVFRMIDw9IERlZmF1bHRUVEwgPD0gTWF4VFRMXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl90dGxfZml4IDo9IFxcXCJPcmRlciB0aGUgVFRMcyBhcyBNaW5UVEwgPD0gRGVmYXVsdFRUTCA8PSBNYXhUVExcXFwiXFxuXFxuX3BmX2NmX3R0bF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIsIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJNaW5UVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNYXhUVEwgKCV2KVxcXCIsIFttbiwgbXhdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRteCA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTWF4VFRMXFxcIiwgbnVsbCkpXFxuXFx0bW4gPiBteFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIk1pblRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIERlZmF1bHRUVEwgKCV2KVxcXCIsIFttbiwgZGZdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG1uID4gZGZcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJEZWZhdWx0VFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTWF4VFRMICgldilcXFwiLCBbZGYsIG14XSksXFxuXFx0X3BmX2NmX3R0bF9maXgsIF9wZl9jZl90dGxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBiIGluIF9wZl9jZl9iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG14IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNYXhUVExcXFwiLCBudWxsKSlcXG5cXHRkZiA+IG14XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgV0FGdjIgd2ViIEFDTCBhdHRhY2hlZCB0byBDbG91ZEZyb250IG11c3QgYmUgZ2xvYmFsbHkgc2NvcGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBXQUZ2MiBBUk4gY2FycmllcyBpdHMgc2NvcGUgaW4gdGhlIHJlc291cmNlIHNlZ21lbnQ6XFxuIyAgIGFybjphd3M6d2FmdjI6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpnbG9iYWwvd2ViYWNsL25hbWUvaWQgICAgKENMT1VERlJPTlQpXFxuIyAgIGFybjphd3M6d2FmdjI6YXAtbm9ydGhlYXN0LTE6MTIzNDU2Nzg5MDEyOnJlZ2lvbmFsL3dlYmFjbC8uLi4gKFJFR0lPTkFMKVxcbiMgQ2xvdWRGcm9udCBhY2NlcHRzIG9ubHkgdGhlIGdsb2JhbCBmb3JtLiBDaGVja2luZyB0aGUgcmVnaW9uIGFsb25lIHdvdWxkIG1pc3NcXG4jIGEgUkVHSU9OQUwgd2ViIEFDTCB0aGF0IGhhcHBlbnMgdG8gaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gdXMtZWFzdC0xLCB3aGljaCBpc1xcbiMgdGhlIGVhc3kgbWlzdGFrZSB0byBtYWtlLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5XZWJBQ0xJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCBvbmx5IGFjY2VwdHMgYSBnbG9iYWxseSBzY29wZWQgd2ViIEFDTCwgYnV0IHRoaXMgQVJOIGlzIHNjb3BlZCAnJXMnXFxcIiwgW3Njb3BlXSksXFxuXFx0XFxcIkNyZWF0ZSB0aGUgd2ViIEFDTCB3aXRoIHNjb3BlIENMT1VERlJPTlQgaW4gdXMtZWFzdC0xICh3YWZ2Mi5DZm5XZWJBQ0wgd2l0aCBzY29wZTogJ0NMT1VERlJPTlQnKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utd2FmdjItd2ViYWNsLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLldlYkFDTElkXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwid2FmdjJcXFwiXFxuXFx0c2VnbWVudHMgOj0gc3BsaXQocGFydHNbNV0sIFxcXCIvXFxcIilcXG5cXHRzY29wZSA6PSBzZWdtZW50c1swXVxcblxcdHNjb3BlICE9IFxcXCJnbG9iYWxcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1hbGFybS1wZXJpb2RcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBlcmlvZCBtdXN0IGJlIDEwLCAyMCwgMzAgb3IgYSBtdWx0aXBsZSBvZiA2MFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyBQZXJpb2QgYXMgYSBiYXJlIGludGVnZXI7IHRoZSB2YWxpZCB2YWx1ZXMgYXJlXFxuIyBvbmx5IGluIHRoZSBzZXJ2aWNlIChcXFwiUGVyaW9kIG11c3QgYmUgMTAsIDIwLCAzMCBvciBhIG11bHRpcGxlIG9mIDYwXFxcIikuXFxuIyBUaGUgc2FtZSBjb25zdHJhaW50IGFwcGxpZXMgaW5zaWRlIE1ldHJpY1N0YXQgKGJlbmNoIHcxMSwgMjAyNi0wOS0wMykuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGVyaW9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQZXJpb2QgJXYgaXMgaW52YWxpZDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlBlcmlvZCBtdXN0IGJlIDEwLCAyMCwgMzAgb3IgYSBtdWx0aXBsZSBvZiA2MFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiVXNlIDEwLCAyMCwgMzAsIG9yIGEgbXVsdGlwbGUgb2YgNjAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdHAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGVyaW9kXFxcIikpXFxuXFx0bm90IHAgaW4gezEwLCAyMCwgMzB9XFxuXFx0cCAlIDYwICE9IDBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNzIChNZXRyaWNTdGF0LlBlcmlvZCBvZiBxdWVyeSAlZClcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcIk1ldHJpY1N0YXQgUGVyaW9kICV2IGlzIGludmFsaWQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJQZXJpb2QgbXVzdCBiZSAxMCwgMjAsIDMwIG9yIGEgbXVsdGlwbGUgb2YgNjBcXFxcXFxcIlxcXCIsIFtwXSksXFxuXFx0XFxcIlVzZSAxMCwgMjAsIDMwLCBvciBhIG11bHRpcGxlIG9mIDYwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jbG91ZHdhdGNoLWFsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKVxcblxcdGkgOj0gaXRlbS5pbmRleFxcblxcdHEgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChxKVxcblxcdHAgOj0gb2JqZWN0LmdldChxLCBbXFxcIk1ldHJpY1N0YXRcXFwiLCBcXFwiUGVyaW9kXFxcIl0sIG51bGwpXFxuXFx0aXNfbnVtYmVyKHApXFxuXFx0bm90IHAgaW4gezEwLCAyMCwgMzB9XFxuXFx0cCAlIDYwICE9IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXRocmVzaG9sZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RhbmRhcmQgb3BlcmF0b3JzIG5lZWQgVGhyZXNob2xkLCByYW5nZSBvcGVyYXRvcnMgbmVlZCBUaHJlc2hvbGRNZXRyaWNJZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jd2F0aF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCJcXG5cXG4jIFRoZSB0d28gcmFuZ2Ugb3BlcmF0b3JzIGFuY2hvciB0byBhbiBhbm9tYWx5LWRldGVjdGlvbiBiYW5kIHZpYVxcbiMgVGhyZXNob2xkTWV0cmljSWQ7IGV2ZXJ5IG90aGVyIG9wZXJhdG9yIG5lZWRzIGEgc3RhdGljIFRocmVzaG9sZC4gQWJzZW5jZVxcbiMgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2N3YXRoX3JhbmdlX29wcyA6PSB7XFxcIkxlc3NUaGFuTG93ZXJPckdyZWF0ZXJUaGFuVXBwZXJUaHJlc2hvbGRcXFwiLCBcXFwiTGVzc1RoYW5Mb3dlclRocmVzaG9sZFxcXCIsIFxcXCJHcmVhdGVyVGhhblVwcGVyVGhyZXNob2xkXFxcIn1cXG5cXG5fcGZfY3dhdGhfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tdGhyZXNob2xkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UaHJlc2hvbGRcXFwiLFxcblxcdHNwcmludGYoXFxcIkNvbXBhcmlzb25PcGVyYXRvciAnJXMnIG5lZWRzIGEgc3RhdGljIFRocmVzaG9sZCBidXQgbm9uZSBpcyBzZXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJQdXRNZXRyaWNBbGFybSByZXF1ZXN0IHNob3VsZCBoYXZlIHZhbGlkIFRocmVzaG9sZCBwYXJhbWV0ZXJcXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJTZXQgVGhyZXNob2xkLCBvciBzd2l0Y2ggdG8gYW4gYW5vbWFseS1kZXRlY3Rpb24gb3BlcmF0b3Igd2l0aCBUaHJlc2hvbGRNZXRyaWNJZFxcXCIsXFxuXFx0X3BmX2N3YXRoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0b3AgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wYXJpc29uT3BlcmF0b3JcXFwiKVxcblxcdGlzX3N0cmluZyhvcClcXG5cXHRub3Qgb3AgaW4gX3BmX2N3YXRoX3JhbmdlX29wc1xcblxcdF9wZl9jd2F0aF9hYnNlbnQobmFtZSwgXFxcIlRocmVzaG9sZFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1hbGFybS10aHJlc2hvbGRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRocmVzaG9sZE1ldHJpY0lkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDb21wYXJpc29uT3BlcmF0b3IgJyVzJyBpcyBhIHJhbmdlIG9wZXJhdG9yIGJ1dCBUaHJlc2hvbGRNZXRyaWNJZCBpcyBub3Qgc2V0OyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiQ29tcGFyaXNvbk9wZXJhdG9ycyBmb3IgcmFuZ2VzIHJlcXVpcmUgVGhyZXNob2xkTWV0cmljSWQgdG8gYmUgc2V0XFxcXFxcXCJcXFwiLCBbb3BdKSxcXG5cXHRcXFwiUG9pbnQgVGhyZXNob2xkTWV0cmljSWQgYXQgdGhlIEFOT01BTFlfREVURUNUSU9OX0JBTkQgcXVlcnkgaWQsIG9yIHVzZSBhIHN0YXRpYy10aHJlc2hvbGQgb3BlcmF0b3JcXFwiLFxcblxcdF9wZl9jd2F0aF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdG9wIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcGFyaXNvbk9wZXJhdG9yXFxcIilcXG5cXHRvcCBpbiBfcGZfY3dhdGhfcmFuZ2Vfb3BzXFxuXFx0X3BmX2N3YXRoX2Fic2VudChuYW1lLCBcXFwiVGhyZXNob2xkTWV0cmljSWRcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtY29tcG9zaXRlLWFsYXJtLXJ1bGUtc3ludGF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBBbGFybVJ1bGUgbXVzdCBzdGFydCB3aXRoIGEgdmFsaWQgZXhwcmVzc2lvbiB0b2tlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpDb21wb3NpdGVBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgbmFtZXMgdGhlIG9ubHkgdG9rZW5zIGEgcnVsZSBleHByZXNzaW9uIG1heSBzdGFydCB3aXRoOyB0aGlzXFxuIyBjaGVja3MganVzdCB0aGF0IGZpcnN0IHRva2VuIOKAlCBhIGZ1bGwgZ3JhbW1hciBpcyBvdXQgb2Ygc2NvcGUuIEZ1bmN0aW9uXFxuIyB0b2tlbnMgdGFrZSBhbiBhcmd1bWVudCBsaXN0LCBrZXl3b3JkcyBzdGFuZCBhbG9uZS5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiKFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIk5PVCBcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJOT1QoXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiQVRfTEVBU1RcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiB0ID09IFxcXCJUUlVFXFxcIlxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiB0ID09IFxcXCJGQUxTRVxcXCJcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiQUxBUk0oXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiT0soXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiSU5TVUZGSUNJRU5UX0RBVEEoXFxcIilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtY29tcG9zaXRlLWFsYXJtLXJ1bGUtc3ludGF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGFybVJ1bGVcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsYXJtUnVsZSAnJXMnIGRvZXMgbm90IHN0YXJ0IHdpdGggYSB2YWxpZCB0b2tlbjsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiRXJyb3IgaW4gQWxhcm1SdWxlIFtVbnN1cHBvcnRlZCB0b2tlbiAuLi4gbXVzdCBiZTogJygnLCAnTk9UJywgQVRfTEVBU1QsIFRSVUUgb3IgRkFMU0UsIEFMQVJNLCBPSywgb3IgSU5TVUZGSUNJRU5UX0RBVEFdXFxcXFxcXCJcXFwiLCBbZXhwcl0pLFxcblxcdFxcXCJTdGFydCB0aGUgcnVsZSB3aXRoIEFMQVJNKC4uLiksIE9LKC4uLiksIElOU1VGRklDSUVOVF9EQVRBKC4uLiksIE5PVCwgQVRfTEVBU1QsIFRSVUUsIEZBTFNFLCBvciBhIHBhcmVudGhlc2l6ZWQgZ3JvdXBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9DcmVhdGVfQ29tcG9zaXRlX0FsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXFxcIilcXG5cXHRleHByIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxhcm1SdWxlXFxcIilcXG5cXHRpc19zdHJpbmcoZXhwcilcXG5cXHR0IDo9IHRyaW1fc3BhY2UoZXhwcilcXG5cXHR0ICE9IFxcXCJcXFwiXFxuXFx0bm90IF9wZl9jd2Nhc192YWxpZF9zdGFydCh0KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLWJvZHktanNvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGFzaGJvYXJkQm9keSBtdXN0IGJlIHZhbGlkIEpTT05cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC1ib2R5LWpzb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiLFxcblxcdFxcXCJEYXNoYm9hcmRCb2R5IGRvZXMgbm90IHBhcnNlIGFzIEpTT047IFB1dERhc2hib2FyZCBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGZpZWxkIERhc2hib2FyZEJvZHkgbXVzdCBiZSBhIHZhbGlkIEpTT04gb2JqZWN0XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJGaXggdGhlIEpTT04gc3ludGF4IG9mIHRoZSBkYXNoYm9hcmQgYm9keVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQ2xvdWRXYXRjaC1EYXNoYm9hcmQtQm9keS1TdHJ1Y3R1cmUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0bm90IGpzb24uaXNfdmFsaWQoYm9keSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmQgbmFtZXMgYWxsb3cgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXh0cmEgcGFpbmZ1bCBhdCBkZXBsb3kgdGltZTogdGhlIGludmFsaWQgbmFtZSBhbHNvIGJyZWFrcyB0aGUgcm9sbGJhY2tcXG4jIERFTEVURSwgbGVhdmluZyB0aGUgc3RhY2sgaW4gUk9MTEJBQ0tfRkFJTEVEIChiZW5jaGVkKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkRhc2hib2FyZE5hbWUgJyVzJyBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM7IFB1dERhc2hib2FyZCBhbGxvd3Mgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoICgtKSBhbmQgdW5kZXJzY29yZSAoXyksIGFuZCB0aGUgZmFpbGVkIHN0YWNrIGNhbm5vdCBldmVuIHJvbGwgYmFjayBjbGVhbmx5XFxcIiwgW2RuXSksXFxuXFx0XFxcIlVzZSBvbmx5IGxldHRlcnMsIGRpZ2l0cywgZGFzaCBhbmQgdW5kZXJzY29yZSBpbiB0aGUgZGFzaGJvYXJkIG5hbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdXREYXNoYm9hcmQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRkbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhkbilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05Xy1dKyRgLCBkbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC13aWRnZXQtZmllbGRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFdmVyeSBkYXNoYm9hcmQgd2lkZ2V0IHJlcXVpcmVzIHR5cGUgYW5kIHByb3BlcnRpZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IGtleSBwcmVzZW5jZSBpcyBjaGVja2VkOiB0aGUgc2VydmljZSBhY2NlcHRzIGFyYml0cmFyeSB0eXBlIHZhbHVlc1xcbiMgKGJlbmNoIGR3MDQsIHR5cGUgXFxcIm1ldHJpY2NcXFwiIGRlcGxveWVkIGNsZWFuKSwgc28gbm8gZW51bSB2YWxpZGF0aW9uLlxcbl9wZl9jd2R3Zl93aWRnZXRzKG5hbWUpIDo9IHdzIGlmIHtcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0anNvbi5pc192YWxpZChib2R5KVxcblxcdG9iaiA6PSBqc29uLnVubWFyc2hhbChib2R5KVxcblxcdHdzIDo9IG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHdzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1maWVsZHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keSAod2lkZ2V0c1slZF0pXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJEYXNoYm9hcmQgd2lkZ2V0ICVkIGlzIG1pc3NpbmcgJyVzJzsgUHV0RGFzaGJvYXJkIGZhaWxzIHdpdGggXFxcXFxcXCJTaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnJXMnXFxcXFxcXCJcXFwiLCBbaSwga2V5LCBrZXldKSxcXG5cXHRcXFwiR2l2ZSBldmVyeSB3aWRnZXQgYSB0eXBlIGFuZCBhIHByb3BlcnRpZXMgb2JqZWN0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9DbG91ZFdhdGNoLURhc2hib2FyZC1Cb2R5LVN0cnVjdHVyZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcXFwiKVxcblxcdHNvbWUgaSwgdyBpbiBfcGZfY3dkd2Zfd2lkZ2V0cyhuYW1lKVxcblxcdGlzX29iamVjdCh3KVxcblxcdHNvbWUga2V5IGluIHtcXFwidHlwZVxcXCIsIFxcXCJwcm9wZXJ0aWVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KHcsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1wb3NpdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGFzaGJvYXJkIHdpZGdldCB4IHRvcHMgb3V0IGF0IDIzIGFuZCB3aWR0aCBhdCAyNFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIHR3byBiZW5jaGVkIG1heGltYSBhcmUgY2xhaW1lZCAoeCA8PSAyMywgd2lkdGggPD0gMjQpLlxcbl9wZl9jd2R3cF93aWRnZXRzKG5hbWUpIDo9IHdzIGlmIHtcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0anNvbi5pc192YWxpZChib2R5KVxcblxcdG9iaiA6PSBqc29uLnVubWFyc2hhbChib2R5KVxcblxcdHdzIDo9IG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHdzKVxcbn1cXG5cXG5fcGZfY3dkd3BfbWF4IDo9IHtcXFwieFxcXCI6IDIzLCBcXFwid2lkdGhcXFwiOiAyNH1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1wb3NpdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5ICh3aWRnZXRzWyVkXS4lcylcXFwiLCBbaSwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwiRGFzaGJvYXJkIHdpZGdldCAlZCBoYXMgJXM9JXYsIGFib3ZlIHRoZSBtYXhpbXVtICV2OyBQdXREYXNoYm9hcmQgZmFpbHMgd2l0aCBcXFxcXFxcIlNob3VsZCBiZSA8PSAldlxcXFxcXFwiXFxcIiwgW2ksIGtleSwgdiwgbSwgbV0pLFxcblxcdFxcXCJLZWVwIHggd2l0aGluIDAtMjMgYW5kIHdpZHRoIHdpdGhpbiAxLTI0ICgyNC1jb2x1bW4gZ3JpZClcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0Nsb3VkV2F0Y2gtRGFzaGJvYXJkLUJvZHktU3RydWN0dXJlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFxcXCIpXFxuXFx0c29tZSBpLCB3IGluIF9wZl9jd2R3cF93aWRnZXRzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KHcpXFxuXFx0c29tZSBrZXksIG0gaW4gX3BmX2N3ZHdwX21heFxcblxcdHYgOj0gb2JqZWN0LmdldCh3LCBrZXksIDApXFxuXFx0aXNfbnVtYmVyKHYpXFxuXFx0diA+IG1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC13aWRnZXRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmRCb2R5IHJlcXVpcmVzIGEgd2lkZ2V0cyBhcnJheVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiLFxcblxcdFxcXCJEYXNoYm9hcmRCb2R5IGhhcyBubyAnd2lkZ2V0cycga2V5OyBQdXREYXNoYm9hcmQgZmFpbHMgd2l0aCBcXFxcXFxcIlNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICd3aWRnZXRzJ1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgd2lkZ2V0cyBhcnJheSB0byB0aGUgZGFzaGJvYXJkIGJvZHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0Nsb3VkV2F0Y2gtRGFzaGJvYXJkLUJvZHktU3RydWN0dXJlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFxcXCIpXFxuXFx0Ym9keSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiKVxcblxcdGlzX3N0cmluZyhib2R5KVxcblxcdGpzb24uaXNfdmFsaWQoYm9keSlcXG5cXHRvYmogOj0ganNvbi51bm1hcnNoYWwoYm9keSlcXG5cXHRpc19vYmplY3Qob2JqKVxcblxcdG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhdGFwb2ludHMtZXZhbHVhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGF0YXBvaW50c1RvQWxhcm0gbXVzdCBub3QgZXhjZWVkIEV2YWx1YXRpb25QZXJpb2RzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWRhdGFwb2ludHMtZXZhbHVhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGF0YXBvaW50c1RvQWxhcm1cXFwiLFxcblxcdHNwcmludGYoXFxcIkRhdGFwb2ludHNUb0FsYXJtICgldikgZXhjZWVkcyBFdmFsdWF0aW9uUGVyaW9kcyAoJXYpOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiRGF0YXBvaW50c1RvQWxhcm0gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRXZhbHVhdGlvblBlcmlvZHNcXFxcXFxcIlxcXCIsIFtkLCBldl0pLFxcblxcdFxcXCJMb3dlciBEYXRhcG9pbnRzVG9BbGFybSB0byBhdCBtb3N0IEV2YWx1YXRpb25QZXJpb2RzLCBvciByYWlzZSBFdmFsdWF0aW9uUGVyaW9kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdGQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGF0YXBvaW50c1RvQWxhcm1cXFwiKSlcXG5cXHRldiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmFsdWF0aW9uUGVyaW9kc1xcXCIpKVxcblxcdGQgPiBldlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZXh0ZW5kZWQtc3RhdGlzdGljXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHBlcmNlbnRpbGUgc3RhdGlzdGljIGNhbm5vdCBleGNlZWQgcDEwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGVyY2VudGlsZSBzdGF0aXN0aWNzIHJ1biBwMC4wIHRvIHAxMDAuIE9ubHkgdGhlIHBOIGZvcm0gaXMgY2hlY2tlZDsgb3RoZXJcXG4jIGV4dGVuZGVkIGZvcm1zICh0bSwgd20sIHRjLCB0cywgLi4uKSBoYXZlIHRoZWlyIG93biBncmFtbWFycyBhbmQgd2VyZSBub3RcXG4jIG1lYXN1cmVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1leHRlbmRlZC1zdGF0aXN0aWNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkU3RhdGlzdGljXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFeHRlbmRlZFN0YXRpc3RpYyAnJXMnIGlzIGJleW9uZCBwMTAwOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIHZhbHVlICVzIGZvciBwYXJhbWV0ZXIgRXh0ZW5kZWRTdGF0aXN0aWMgaXMgbm90IHN1cHBvcnRlZC5cXFxcXFxcIlxcXCIsIFtzLCBzXSksXFxuXFx0XFxcIlVzZSBhIHBlcmNlbnRpbGUgYmV0d2VlbiBwMC4wIGFuZCBwMTAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L21vbml0b3JpbmcvY2xvdWR3YXRjaF9jb25jZXB0cy5odG1sI1BlcmNlbnRpbGVzXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0cyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkU3RhdGlzdGljXFxcIilcXG5cXHRpc19zdHJpbmcocylcXG5cXHRzdGFydHN3aXRoKHMsIFxcXCJwXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihzdWJzdHJpbmcocywgMSwgY291bnQocykgLSAxKSlcXG5cXHRuID4gMTAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtbmFtZXNwYWNlLWFzY2lpXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZXRyaWMgbmFtZXNwYWNlcyBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1uYW1lc3BhY2UtYXNjaWlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVzcGFjZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmFtZXNwYWNlICclcycgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnM7IENsb3VkV2F0Y2ggcmVqZWN0cyB0aGUgYWxhcm0gd2l0aCBcXFxcXFxcIk5hbWVzcGFjZSBtdXN0IG5vdCBjb250YWluIE5vbi1BU0NJSSBjaGFyYWN0ZXJzLlxcXFxcXFwiXFxcIiwgW25zXSksXFxuXFx0XFxcIlVzZSBBU0NJSSBvbmx5IGluIHRoZSBtZXRyaWMgbmFtZXNwYWNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0TWV0cmljQWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdG5zIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZXNwYWNlXFxcIilcXG5cXHRpc19zdHJpbmcobnMpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW1xcXFx4MDAtXFxcXHg3Zl0qJGAsIG5zKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHBlciBxdWVyeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIHF1ZXJ5IGVudHJ5IGlzIGVpdGhlciBhIG1hdGggZXhwcmVzc2lvbiBvciBhIG1ldHJpYyBmZXRjaCwgbmV2ZXIgYm90aC5cXG4jIFRoZSBzcGVjaWZ5LW5laXRoZXIgc2hhcGUgZmFpbHMgdG9vLCBidXQgd2l0aCBhbiB1bnJlbGF0ZWQgZXJyb3IgKFxcXCJQZXJpb2RcXG4jIG11c3Qgbm90IGJlIG51bGxcXFwiLCBiZW5jaCB3MDNiKSDigJQgc28gb25seSB0aGUgYm90aC1zZXQgZGlyZWN0aW9uIGlzIGNsYWltZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1xdWVyeS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTWV0cmljcy4lZFxcXCIsIFtxLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTWV0cmljIHF1ZXJ5ICclcycgc2V0cyBib3RoIEV4cHJlc3Npb24gYW5kIE1ldHJpY1N0YXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgcGFyYW1ldGVycyBNZXRyaWNEYXRhUXVlcnkgRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGFuZCB5b3UgaGF2ZSBzcGVjaWZpZWQgYm90aC5cXFxcXFxcIlxcXCIsIFtxaWRdKSxcXG5cXHRcXFwiS2VlcCB0aGUgRXhwcmVzc2lvbiBhbmQgZHJvcCBNZXRyaWNTdGF0IChmZXRjaCB0aGUgaW5wdXRzIGluIHNlcGFyYXRlIHF1ZXJpZXMpLCBvciB2aWNlIHZlcnNhXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZHdhdGNoLWFsYXJtLW1ldHJpY2RhdGFxdWVyeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0c29tZSBxIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIilcXG5cXHRpc19vYmplY3QocS52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHEudmFsdWUsIFxcXCJFeHByZXNzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIk1ldHJpY1N0YXRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0cWlkIDo9IG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIklkXFxcIiwgXFxcIjxxdWVyeT5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LXJldHVybmRhdGFcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV4YWN0bHkgb25lIG1ldHJpYyBxdWVyeSBtdXN0IHJldHVybiBkYXRhXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBbiBhbGFybSBvbiBhIE1ldHJpY3MgYXJyYXkgbmVlZHMgZXhhY3RseSBvbmUgcXVlcnkgcmV0dXJuaW5nIGRhdGEuXFxuIyBSZXR1cm5EYXRhIGRlZmF1bHRzIHRvIHRydWUgd2hlbiBhYnNlbnQgKGJlbmNoIHcwNGIpLCBhbmQgZXhwbGljaXQgZmFsc2VcXG4jIGV2ZXJ5d2hlcmUgaXMgcmVqZWN0ZWQgdG9vICh3MDRjKS4gQSBxdWVyeSB3aG9zZSBSZXR1cm5EYXRhIGlzIGFuXFxuIyB1bnJlc29sdmFibGUgaW50cmluc2ljIG1ha2VzIHRoZSBjb3VudCB1bmtub3dhYmxlLCBzbyB0aGUgcnVsZSBza2lwcy5cXG5fcGZfY3dtcXJfY291bnRhYmxlKHEpIGlmIG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFxuX3BmX2N3bXFyX2NvdW50YWJsZShxKSBpZiBpc19ib29sZWFuKG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCBudWxsKSlcXG5cXG5fcGZfY3dtcXJfcmV0dXJucyhxKSBpZiBvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgdHJ1ZSkgPT0gdHJ1ZVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtcXVlcnktcmV0dXJuZGF0YVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWV0cmljc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgb2YgdGhlIG1ldHJpYyBxdWVyaWVzIHJldHVybiBkYXRhIChSZXR1cm5EYXRhIGRlZmF1bHRzIHRvIHRydWUpOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiRXhhY3RseSBvbmUgZWxlbWVudCBvZiB0aGUgbWV0cmljcyBsaXN0IHNob3VsZCByZXR1cm4gZGF0YS5cXFxcXFxcIlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBSZXR1cm5EYXRhOiBmYWxzZSBvbiBldmVyeSBxdWVyeSBleGNlcHQgdGhlIG9uZSB0aGUgYWxhcm0gc2hvdWxkIHdhdGNoXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZHdhdGNoLWFsYXJtLW1ldHJpY2RhdGFxdWVyeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0aXRlbXMgOj0gW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0ZXZlcnkgcSBpbiBpdGVtcyB7XFxuXFx0XFx0aXNfb2JqZWN0KHEudmFsdWUpXFxuXFx0XFx0X3BmX2N3bXFyX2NvdW50YWJsZShxLnZhbHVlKVxcblxcdH1cXG5cXHRuIDo9IGNvdW50KFtxIHwgc29tZSBxIGluIGl0ZW1zOyBfcGZfY3dtcXJfcmV0dXJucyhxLnZhbHVlKV0pXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC10aHJlc2hvbGQtbWV0cmljLWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaHJlc2hvbGRNZXRyaWNJZCBtdXN0IG1hdGNoIGEgbWV0cmljIHF1ZXJ5IHRoYXQgcmV0dXJucyBkYXRhXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNYXRjaGluZyBtZWFucyBJZCBlcXVhbGl0eSBBTkQgZWZmZWN0aXZlIFJldHVybkRhdGEgdHJ1ZSAoZGVmYXVsdCB0cnVlLFxcbiMgYmVuY2ggdzA0Yik7IHcxMiBwcm92ZWQgYW4gSWQgbWF0Y2ggd2l0aCBSZXR1cm5EYXRhIGZhbHNlIGRvZXMgbm90IGNvdW50LlxcbiMgT25seSBuID09IDAgZmlyZXMgLSB0aGUgZHVwbGljYXRlLW1hdGNoIHNpZGUgaXMgdW5iZW5jaGVkLiBRdWVyaWVzIHdpdGhcXG4jIHVucmVzb2x2YWJsZSBJZC9SZXR1cm5EYXRhIG1ha2UgdGhlIGNvdW50IHVua25vd2FibGUsIHNvIHRoZSBydWxlIHNraXBzLlxcbl9wZl9jd3RtaV9jb3VudGFibGUocSkgaWYgb2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXG5fcGZfY3d0bWlfY291bnRhYmxlKHEpIGlmIGlzX2Jvb2xlYW4ob2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIG51bGwpKVxcblxcbl9wZl9jd3RtaV9tYXRjaGVzKHEsIHRtaWQpIGlmIHtcXG5cXHRvYmplY3QuZ2V0KHEsIFxcXCJJZFxcXCIsIG51bGwpID09IHRtaWRcXG5cXHRvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgdHJ1ZSkgPT0gdHJ1ZVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtdGhyZXNob2xkLW1ldHJpYy1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGhyZXNob2xkTWV0cmljSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIk5vIG1ldHJpYyBxdWVyeSB3aXRoIElkICclcycgcmV0dXJucyBkYXRhOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiTWV0cmljcyBsaXN0IG11c3QgY29udGFpbiBleGFjdGx5IG9uZSBtZXRyaWMgbWF0Y2hpbmcgdGhlIFRocmVzaG9sZE1ldHJpY0lkIHBhcmFtZXRlclxcXFxcXFwiXFxcIiwgW3RtaWRdKSxcXG5cXHRcXFwiUG9pbnQgVGhyZXNob2xkTWV0cmljSWQgYXQgYSBxdWVyeSB3aG9zZSBSZXR1cm5EYXRhIGlzIHRydWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jbG91ZHdhdGNoLWFsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHR0bWlkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyZXNob2xkTWV0cmljSWRcXFwiKVxcblxcdGlzX3N0cmluZyh0bWlkKVxcblxcdGl0ZW1zIDo9IFtxIHwgc29tZSBxIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IHEgaW4gaXRlbXMge1xcblxcdFxcdGlzX29iamVjdChxLnZhbHVlKVxcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KHEudmFsdWUsIFxcXCJJZFxcXCIsIG51bGwpKVxcblxcdFxcdF9wZl9jd3RtaV9jb3VudGFibGUocS52YWx1ZSlcXG5cXHR9XFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gaXRlbXM7IF9wZl9jd3RtaV9tYXRjaGVzKHEudmFsdWUsIHRtaWQpXSkgPT0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tYWxpYXMtdXNlcm5hbWUtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbGlhc0F0dHJpYnV0ZXMgYW5kIFVzZXJuYW1lQXR0cmlidXRlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBLZXkgcHJlc2VuY2UgaXMgdGhlIHZpb2xhdGlvbiByZWdhcmRsZXNzIG9mIHZhbHVlcywgc28gdGhpcyBjaGVja3MgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgZGlyZWN0bHkgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9jb2dhdWVfc2V0KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tYWxpYXMtdXNlcm5hbWUtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Vc2VybmFtZUF0dHJpYnV0ZXNcXFwiLFxcblxcdFxcXCJCb3RoIEFsaWFzQXR0cmlidXRlcyBhbmQgVXNlcm5hbWVBdHRyaWJ1dGVzIGFyZSBzZXQ7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiT25seSBvbmUgb2YgdGhlIGFsaWFzQXR0cmlidXRlcyBvciB1c2VybmFtZUF0dHJpYnV0ZXMgY2FuIGJlIHNldCBpbiBhIFVzZXIgcG9vbC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIktlZXAgb25lOiBhbGlhc2VzIGZvciBzaWduLWluIGFsdGVybmF0aXZlcywgb3IgdXNlcm5hbWUgYXR0cmlidXRlcyB0byByZXBsYWNlIHVzZXJuYW1lc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2wuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdF9wZl9jb2dhdWVfc2V0KG5hbWUsIFxcXCJBbGlhc0F0dHJpYnV0ZXNcXFwiKVxcblxcdF9wZl9jb2dhdWVfc2V0KG5hbWUsIFxcXCJVc2VybmFtZUF0dHJpYnV0ZXNcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tY2xpZW50LWNyZWRlbnRpYWxzLWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiY2xpZW50X2NyZWRlbnRpYWxzIGNhbm5vdCBjb21iaW5lIHdpdGggY29kZSBvciBpbXBsaWNpdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTWFjaGluZS10by1tYWNoaW5lIGFuZCB1c2VyLWZhY2luZyBncmFudHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBvbiBvbmVcXG4jIGNsaWVudC5cXG5fcGZfY29nY2NlX2Zsb3dzKG5hbWUpIDo9IHtmLnZhbHVlIHwgc29tZSBmIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1xcXCIpfVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxsb3dlZE9BdXRoRmxvd3MgY29tYmluZXMgY2xpZW50X2NyZWRlbnRpYWxzIHdpdGggJyVzJzsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNsaWVudF9jcmVkZW50aWFscyBmbG93IGNhbiBub3QgYmUgc2VsZWN0ZWQgYWxvbmcgd2l0aCBjb2RlIGZsb3cgb3IgaW1wbGljaXQgZmxvdy5cXFxcXFxcIlxcXCIsIFtvdGhlcl0pLFxcblxcdFxcXCJTcGxpdCB0aGUgZmxvd3MgYWNyb3NzIHNlcGFyYXRlIHVzZXIgcG9vbCBjbGllbnRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Zmxvd3MgOj0gX3BmX2NvZ2NjZV9mbG93cyhuYW1lKVxcblxcdFxcXCJjbGllbnRfY3JlZGVudGlhbHNcXFwiIGluIGZsb3dzXFxuXFx0c29tZSBvdGhlciBpbiB7XFxcImNvZGVcXFwiLCBcXFwiaW1wbGljaXRcXFwifVxcblxcdG90aGVyIGluIGZsb3dzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtc2VjcmV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJjbGllbnRfY3JlZGVudGlhbHMgbmVlZHMgYSBjbGllbnQgc2VjcmV0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNYWNoaW5lLXRvLW1hY2hpbmUgYXV0aCBpcyBzZWNyZXQtYmFzZWQuIEdlbmVyYXRlU2VjcmV0IGRlZmF1bHRzIHRvXFxuIyBmYWxzZSwgc28gYm90aCB0aGUgbGl0ZXJhbCBmYWxzZSBhbmQgdGhlIGFic2VudCBrZXkgbGVhdmUgdGhlIGNsaWVudFxcbiMgc2VjcmV0bGVzcy4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWVcXG4jIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ2Njc19ub19zZWNyZXQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJHZW5lcmF0ZVNlY3JldFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2NvZ2Njc19ub19zZWNyZXQobmFtZSkgaWYgY29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5HZW5lcmF0ZVNlY3JldFxcXCIpKSA9PSBmYWxzZVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtc2VjcmV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5HZW5lcmF0ZVNlY3JldFxcXCIsXFxuXFx0XFxcImNsaWVudF9jcmVkZW50aWFscyBmbG93IG9uIGEgY2xpZW50IHdpdGhvdXQgYSBzZWNyZXQ7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJjbGllbnRfY3JlZGVudGlhbHMgZmxvdyBjYW4gbm90IGJlIHNlbGVjdGVkIGlmIGNsaWVudCBkb2VzIG5vdCBoYXZlIGEgY2xpZW50IHNlY3JldC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBHZW5lcmF0ZVNlY3JldDogdHJ1ZSBvbiB0aGlzIGNsaWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHNvbWUgZiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcblxcdGYudmFsdWUgPT0gXFxcImNsaWVudF9jcmVkZW50aWFsc1xcXCJcXG5cXHRfcGZfY29nY2NzX25vX3NlY3JldChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tY2xpZW50LW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlVzZXIgcG9vbCBjbGllbnQgbmFtZXMgYWxsb3cgb25seSB3b3JkIGNoYXJhY3RlcnMsIHNwYWNlcyBhbmQgKz0sLkAtXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWNsaWVudC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DbGllbnROYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbGllbnROYW1lICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IHdvcmQgY2hhcmFjdGVycywgc3BhY2VzIGFuZCArID0gLCAuIEAgLVxcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IHdvcmQgY2hhcmFjdGVycywgc3BhY2VzIGFuZCArID0gLCAuIEAgLVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvLXVzZXItaWRlbnRpdHktcG9vbHMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVXNlclBvb2xDbGllbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DbGllbnROYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05XyBcXFxcdCs9LC5ALV0rJGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1kb21haW4tcmVzZXJ2ZWQtd29yZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRG9tYWluIHByZWZpeGVzIGNhbm5vdCBjb250YWluIHJlc2VydmVkIHdvcmRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSByZWZ1c2VzIHByZWZpeGVzIHdpdGggYSByZXNlcnZlZCB3b3JkIGFzIGEgaHlwaGVuLWRlbGltaXRlZFxcbiMgdG9rZW4sIHdpdGggb25seSBhIGdlbmVyaWMgZXJyb3IuIFBpbm5lZCBieSBjb250cm9sbGVkIHBhaXJzOiAtYXdzLSAvXFxuIyAtYW1hem9uLSAvIC1jb2duaXRvLSBmYWlsIHdoaWxlIC1hd3NvbWUtIGRlcGxveXMgKGJlbmNoIGMwNy1jMDdlKSwgc29cXG4jIGEgdG9rZW4gbWVyZWx5IGNvbnRhaW5pbmcgYSB3b3JkIHN0YXlzIGxlZ2FsLlxcbl9wZl9jb2dkcndfd29yZHMgOj0ge1xcXCJhd3NcXFwiLCBcXFwiYW1hem9uXFxcIiwgXFxcImNvZ25pdG9cXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1kb21haW4tcmVzZXJ2ZWQtd29yZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRG9tYWluXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEb21haW4gcHJlZml4ICclcycgaGFzIHRoZSByZXNlcnZlZCB3b3JkICclcycgYXMgYSBzZWdtZW50OyB0aGUgZG9tYWluIGNyZWF0ZSBmYWlscyB3aXRoIHRoZSBnZW5lcmljIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXFxcXFxcXCJcXFwiLCBbZCwgd10pLFxcblxcdFxcXCJSZW5hbWUgb3IgbWVyZ2UgdGhhdCBzZWdtZW50IChlLmcuIG15YXBwLWF1dGgpOyB3b3JkcyBtZXJlbHkgaW5zaWRlIGEgbG9uZ2VyIHNlZ21lbnQgYXJlIGZpbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY29nbml0by11c2VyLXBvb2xzLWFzc2lnbi1kb21haW4tcHJlZml4Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXFxcIilcXG5cXHRkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRG9tYWluXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRzb21lIHcgaW4gX3BmX2NvZ2Ryd193b3Jkc1xcblxcdHcgaW4gc3BsaXQoZCwgXFxcIi1cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tbWZhLXNtcy1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1GQSB3aXRob3V0IGFueSBmYWN0b3IgY29uZmlndXJhdGlvbiBjYW5ub3QgZGVwbG95XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBXaXRoIE1GQSBvbiBhbmQgbm8gRW5hYmxlZE1mYXMsIENvZ25pdG8gZmFsbHMgYmFjayB0byBTTVMgTUZBLCB3aGljaFxcbiMgbmVlZHMgU21zQ29uZmlndXJhdGlvbi4gQSBwb29sIGRlY2xhcmluZyBFbmFibGVkTWZhcyAoZS5nLiBUT1RQIG9ubHksXFxuIyBiZW5jaCBjMDViKSBpcyB2YWxpZCB3aXRob3V0IFNNUywgc28gaXRzIHByZXNlbmNlIG11dGVzIHRoZSBydWxlLlxcbiMgQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nbXNjX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW1mYS1zbXMtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZmFDb25maWd1cmF0aW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNZmFDb25maWd1cmF0aW9uICclcycgd2l0aCBubyBTbXNDb25maWd1cmF0aW9uIGFuZCBubyBFbmFibGVkTWZhczsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJTTVMgY29uZmlndXJhdGlvbiBhbmQgQXV0byB2ZXJpZmljYXRpb24gZm9yIHBob25lX251bWJlciBhcmUgcmVxdWlyZWQgd2hlbiBNRkEgaXMgcmVxdWlyZWQvb3B0aW9uYWxcXFxcXFxcIlxcXCIsIFttZmFdKSxcXG5cXHRcXFwiQ29uZmlndXJlIFNtc0NvbmZpZ3VyYXRpb24gKFNNUyBNRkEpLCBvciBwaWNrIGZhY3RvcnMgdmlhIEVuYWJsZWRNZmFzIChlLmcuIFNPRlRXQVJFX1RPS0VOX01GQSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRtZmEgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NZmFDb25maWd1cmF0aW9uXFxcIilcXG5cXHRtZmEgaW4ge1xcXCJPTlxcXCIsIFxcXCJPUFRJT05BTFxcXCJ9XFxuXFx0X3BmX2NvZ21zY19hYnNlbnQobmFtZSwgXFxcIlNtc0NvbmZpZ3VyYXRpb25cXFwiKVxcblxcdF9wZl9jb2dtc2NfYWJzZW50KG5hbWUsIFxcXCJFbmFibGVkTWZhc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1vYXV0aC1jYWxsYmFjay1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiY29kZSBhbmQgaW1wbGljaXQgT0F1dGggZmxvd3MgbmVlZCBDYWxsYmFja1VSTHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlZGlyZWN0LWJhc2VkIGZsb3dzIG5lZWQgc29tZXdoZXJlIHRvIHJlZGlyZWN0IHRvLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nb2NyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW9hdXRoLWNhbGxiYWNrLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DYWxsYmFja1VSTHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzIGhhcyAnJXMnIGJ1dCBDYWxsYmFja1VSTHMgaXMgbm90IHNldDsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkNhbGxiYWNrVXJscyBjYW4gbm90IGJlIGVtcHR5IHdoZW4gY29kZSBmbG93IG9yIGltcGxpY2l0IGZsb3cgaXMgc2VsZWN0ZWRcXFxcXFxcIlxcXCIsIFtmLnZhbHVlXSksXFxuXFx0XFxcIkFkZCBhdCBsZWFzdCBvbmUgY2FsbGJhY2sgVVJMXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRzb21lIGYgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIilcXG5cXHRmLnZhbHVlIGluIHtcXFwiY29kZVxcXCIsIFxcXCJpbXBsaWNpdFxcXCJ9XFxuXFx0X3BmX2NvZ29jcl9hYnNlbnQobmFtZSwgXFxcIkNhbGxiYWNrVVJMc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsaW5nIE9BdXRoIHJlcXVpcmVzIGJvdGggQWxsb3dlZE9BdXRoRmxvd3MgYW5kIEFsbG93ZWRPQXV0aFNjb3Blc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQm90aCBkaXJlY3Rpb25zIGRlcGxveS12ZXJpZmllZC4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ29mc19hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2dvZnNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiXFxuXFxuX3BmX2NvZ29mc19tc2cgOj0gXFxcInRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBbGxvd2VkT0F1dGhGbG93cyBhbmQgQWxsb3dlZE9BdXRoU2NvcGVzIGFyZSByZXF1aXJlZCBpZiB1c2VyIHBvb2wgY2xpZW50IGlzIGFsbG93ZWQgdG8gdXNlIE9BdXRoIGZsb3dzLlxcXFxcXFwiXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50IGlzIHRydWUgYnV0IEFsbG93ZWRPQXV0aEZsb3dzIGlzIG5vdCBzZXQ7ICVzXFxcIiwgW19wZl9jb2dvZnNfbXNnXSksXFxuXFx0XFxcIlNldCBBbGxvd2VkT0F1dGhGbG93cywgb3IgZHJvcCBBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIixcXG5cXHRfcGZfY29nb2ZzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRfcGZfY29nb2ZzX2Fic2VudChuYW1lLCBcXFwiQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tb2F1dGgtZmxvd3Mtc2NvcGVzLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhTY29wZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnQgaXMgdHJ1ZSBidXQgQWxsb3dlZE9BdXRoU2NvcGVzIGlzIG5vdCBzZXQ7ICVzXFxcIiwgW19wZl9jb2dvZnNfbXNnXSksXFxuXFx0XFxcIlNldCBBbGxvd2VkT0F1dGhTY29wZXMsIG9yIGRyb3AgQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudFxcXCIsXFxuXFx0X3BmX2NvZ29mc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudFxcXCIpKSA9PSB0cnVlXFxuXFx0X3BmX2NvZ29mc19hYnNlbnQobmFtZSwgXFxcIkFsbG93ZWRPQXV0aFNjb3Blc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1wYXNzd29yZC1taW4tbGVuZ3RoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQYXNzd29yZFBvbGljeSBNaW5pbXVtTGVuZ3RoIHJ1bnMgNiB0byA5OVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyBNaW5pbXVtTGVuZ3RoIGFzIGEgYmFyZSBpbnRlZ2VyOyBib3RoIGJvdW5kc1xcbiMgYXJlIGRlcGxveS12ZXJpZmllZC5cXG5fcGZfY29ncG1sX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jb2duaXRvLXVzZXJwb29sLXBhc3N3b3JkcG9saWN5Lmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXBhc3N3b3JkLW1pbi1sZW5ndGhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLlBhc3N3b3JkUG9saWN5Lk1pbmltdW1MZW5ndGhcXFwiLFxcblxcdHNwcmludGYoXFxcIk1pbmltdW1MZW5ndGggJXYgaXMgdW5kZXIgdGhlIGZsb29yOyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDZcXFxcXFxcIlxcXCIsIFttbF0pLFxcblxcdFxcXCJVc2UgYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aCBiZXR3ZWVuIDYgYW5kIDk5XFxcIixcXG5cXHRfcGZfY29ncG1sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0bWwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIpKVxcblxcdG1sIDwgNlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tcGFzc3dvcmQtbWluLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWluaW11bUxlbmd0aCAldiBpcyBvdmVyIHRoZSBjYXA7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gOTlcXFxcXFxcIlxcXCIsIFttbF0pLFxcblxcdFxcXCJVc2UgYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aCBiZXR3ZWVuIDYgYW5kIDk5XFxcIixcXG5cXHRfcGZfY29ncG1sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0bWwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIpKVxcblxcdG1sID4gOTlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXJlY292ZXJ5LWR1cGxpY2F0ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVjb3ZlcnkgbWVjaGFuaXNtcyBjYW5ub3QgcmVwZWF0IHByaW9yaXRpZXMgb3IgbmFtZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhaXJ3aXNlIGR1cGxpY2F0ZSBjaGVjayBvbiB0aGUgbWVjaGFuaXNtIGxpc3Q7IHRoZSBzZXJ2aWNlIGVycm9yIG5hbWVzXFxuIyBib3RoIGR1cGxpY2F0ZSBwcmlvcml0aWVzIGFuZCBkdXBsaWNhdGUgbWVjaGFuaXNtIG5hbWVzLlxcbl9wZl9jb2dyZHBfZHVwKGEsIGIpIGlmIHtcXG5cXHRwYSA6PSB0b19udW1iZXIob2JqZWN0LmdldChhLCBcXFwiUHJpb3JpdHlcXFwiLCAtMSkpXFxuXFx0cGIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYiwgXFxcIlByaW9yaXR5XFxcIiwgLTIpKVxcblxcdHBhID09IHBiXFxufVxcblxcbl9wZl9jb2dyZHBfZHVwKGEsIGIpIGlmIHtcXG5cXHRuIDo9IG9iamVjdC5nZXQoYSwgXFxcIk5hbWVcXFwiLCBcXFwiX19wZl9hXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRuID09IG9iamVjdC5nZXQoYiwgXFxcIk5hbWVcXFwiLCBcXFwiX19wZl9iXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXJlY292ZXJ5LWR1cGxpY2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtcy4lZFxcXCIsIFtiLmluZGV4XSksXFxuXFx0XFxcIlJlY292ZXJ5IG1lY2hhbmlzbXMgcmVwZWF0IGEgcHJpb3JpdHkgb3IgbmFtZTsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2NvdW50IFJlY292ZXJ5IFNldHRpbmcgY2Fubm90IGhhdmUgZHVwbGljYXRlIHByaW9yaXRpZXMgb3IgcmVjb3ZlcnkgbWVjaGFuaXNtcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkdpdmUgZWFjaCByZWNvdmVyeSBtZWNoYW5pc20gYSBkaXN0aW5jdCBwcmlvcml0eSBhbmQgbmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY29nbml0by11c2VycG9vbC1yZWNvdmVyeW9wdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRpc19vYmplY3QoYS52YWx1ZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRfcGZfY29ncmRwX2R1cChhLnZhbHVlLCBiLnZhbHVlKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tc2NoZW1hLWF0dHItbGVuZ3RoLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTY2hlbWEgYXR0cmlidXRlIE1heExlbmd0aCBjYW5ub3QgdW5kZXJjdXQgTWluTGVuZ3RoXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgY29uc3RyYWludHMgYXJlIHR5cGVkIGFzIHN0cmluZ3MsIHNvIG5vIHNjaGVtYSBsYXllciBjYW4gY29tcGFyZVxcbiMgdGhlbSBudW1lcmljYWxseS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tc2NoZW1hLWF0dHItbGVuZ3RoLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlNjaGVtYS4lZC5TdHJpbmdBdHRyaWJ1dGVDb25zdHJhaW50c1xcXCIsIFthdHQuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBdHRyaWJ1dGUgJyVzJyBoYXMgTWluTGVuZ3RoICV2IG92ZXIgTWF4TGVuZ3RoICV2OyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNhbm5vdCBoYXZlIGEgbWF4IGxlbmd0aCBzaG9ydGVyIHRoYW4gaXQncyBtaW4gbGVuZ3RoXFxcXFxcXCJcXFwiLCBbb2JqZWN0LmdldChhdHQudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjxhdHRyPlxcXCIpLCBtbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5MZW5ndGggbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE1heExlbmd0aFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY29nbml0by11c2VycG9vbC1zY2hlbWFhdHRyaWJ1dGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdHNvbWUgYXR0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlbWFcXFwiKVxcblxcdGlzX29iamVjdChhdHQudmFsdWUpXFxuXFx0c2FjIDo9IG9iamVjdC5nZXQoYXR0LnZhbHVlLCBcXFwiU3RyaW5nQXR0cmlidXRlQ29uc3RyYWludHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc2FjKVxcblxcdG1uX3JhdyA6PSBvYmplY3QuZ2V0KHNhYywgXFxcIk1pbkxlbmd0aFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0bW5fcmF3ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRteF9yYXcgOj0gb2JqZWN0LmdldChzYWMsIFxcXCJNYXhMZW5ndGhcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdG14X3JhdyAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG1uX3JhdylcXG5cXHRteCA6PSB0b19udW1iZXIobXhfcmF3KVxcblxcdG1uID4gbXhcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjY2VzcyBhbmQgaWQgdG9rZW5zIGNhbm5vdCBvdXRsaXZlIHRoZSByZWZyZXNoIHRva2VuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDcm9zcy1wcm9wZXJ0eSBpbmVxdWFsaXR5IGJldHdlZW4gZGlmZmVyZW50bHktdW5pdGVkIGR1cmF0aW9ucyAtIG9ubHlcXG4jIGNvbXBhcmFibGUgYWZ0ZXIgbm9ybWFsaXppbmcgdG8gc2Vjb25kcy4gVW5pdCBkZWZhdWx0cyBhcmUgdGhlXFxuIyBkZXBsb3ktdmVyaWZpZWQgaG91cnMvaG91cnMvZGF5cy5cXG5fcGZfY29ndGVvX3VuaXRfc2VjcyA6PSB7XFxcInNlY29uZHNcXFwiOiAxLCBcXFwibWludXRlc1xcXCI6IDYwLCBcXFwiaG91cnNcXFwiOiAzNjAwLCBcXFwiZGF5c1xcXCI6IDg2NDAwfVxcblxcbl9wZl9jb2d0ZW9fdW5pdChuYW1lLCB1bml0S2V5LCBfKSA6PSB1IGlmIHtcXG5cXHR1IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Ub2tlblZhbGlkaXR5VW5pdHMuJXNcXFwiLCBbdW5pdEtleV0pKVxcblxcdGlzX3N0cmluZyh1KVxcbn1cXG5cXG5fcGZfY29ndGVvX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdCkgOj0gZGVmVW5pdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0dHZ1IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUb2tlblZhbGlkaXR5VW5pdHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QodHZ1KVxcblxcdG9iamVjdC5nZXQodHZ1LCB1bml0S2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2d0ZW9fc2VjcyhuYW1lLCB2YWxLZXksIHVuaXRLZXksIGRlZlVuaXQpIDo9IHMgaWYge1xcblxcdHYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFt2YWxLZXldKSkpXFxuXFx0dSA6PSBfcGZfY29ndGVvX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdClcXG5cXHRzIDo9IHYgKiBfcGZfY29ndGVvX3VuaXRfc2Vjc1t1XVxcbn1cXG5cXG5fcGZfY29ndGVvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by10b2tlbi1leHBpcmF0aW9uLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBY2Nlc3MgdG9rZW4gdmFsaWRpdHkgKCV2IHMpIGV4Y2VlZHMgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eSAoJXYgcyk7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgYW5kIElkIFRva2VuIGV4cGlyYXRpb24gdGltZXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmVmcmVzaCB0b2tlbiBleHBpcmF0aW9uIHRpbWVzLlxcXFxcXFwiXFxcIiwgW2EsIHJdKSxcXG5cXHRcXFwiU2hvcnRlbiB0aGUgYWNjZXNzIHRva2VuIHZhbGlkaXR5IG9yIGxlbmd0aGVuIHRoZSByZWZyZXNoIHRva2VuIHZhbGlkaXR5XFxcIixcXG5cXHRfcGZfY29ndGVvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0YSA6PSBfcGZfY29ndGVvX3NlY3MobmFtZSwgXFxcIkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLCBcXFwiQWNjZXNzVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdHIgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0YSA+IHJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklkVG9rZW5WYWxpZGl0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSWQgdG9rZW4gdmFsaWRpdHkgKCV2IHMpIGV4Y2VlZHMgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eSAoJXYgcyk7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgYW5kIElkIFRva2VuIGV4cGlyYXRpb24gdGltZXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmVmcmVzaCB0b2tlbiBleHBpcmF0aW9uIHRpbWVzLlxcXFxcXFwiXFxcIiwgW2ksIHJdKSxcXG5cXHRcXFwiU2hvcnRlbiB0aGUgaWQgdG9rZW4gdmFsaWRpdHkgb3IgbGVuZ3RoZW4gdGhlIHJlZnJlc2ggdG9rZW4gdmFsaWRpdHlcXFwiLFxcblxcdF9wZl9jb2d0ZW9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRpIDo9IF9wZl9jb2d0ZW9fc2VjcyhuYW1lLCBcXFwiSWRUb2tlblZhbGlkaXR5XFxcIiwgXFxcIklkVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdHIgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0aSA+IHJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXRva2VuLXZhbGlkaXR5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUb2tlbiB2YWxpZGl0eSByYW5nZXMgZGVwZW5kIG9uIHRva2VuIHR5cGUgYW5kIHVuaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgdHlwZXMgdGhlIHZhbGlkaXRpZXMgYXMgYmFyZSBpbnRlZ2VyczsgdGhlIHJlYWwgcmFuZ2VzIGFyZVxcbiMgcGVyIHRva2VuIHR5cGUgQU5EIHVuaXQgKGFjY2Vzcy9pZDogNSBtaW51dGVzLTEgZGF5LCByZWZyZXNoOiA2MFxcbiMgbWludXRlcy0xMCB5ZWFycykuIFVuaXQgZGVmYXVsdHMgKGhvdXJzL2hvdXJzL2RheXMpIGFyZSBkZXBsb3ktdmVyaWZpZWQuXFxuX3BmX2NvZ3R2cl91bml0X3NlY3MgOj0ge1xcXCJzZWNvbmRzXFxcIjogMSwgXFxcIm1pbnV0ZXNcXFwiOiA2MCwgXFxcImhvdXJzXFxcIjogMzYwMCwgXFxcImRheXNcXFwiOiA4NjQwMH1cXG5cXG5fcGZfY29ndHZyX3VuaXQobmFtZSwgdW5pdEtleSwgXykgOj0gdSBpZiB7XFxuXFx0dSA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuVG9rZW5WYWxpZGl0eVVuaXRzLiVzXFxcIiwgW3VuaXRLZXldKSlcXG5cXHRpc19zdHJpbmcodSlcXG59XFxuXFxuX3BmX2NvZ3R2cl91bml0KG5hbWUsIHVuaXRLZXksIGRlZlVuaXQpIDo9IGRlZlVuaXQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHR2dSA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiVG9rZW5WYWxpZGl0eVVuaXRzXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHR2dSlcXG5cXHRvYmplY3QuZ2V0KHR2dSwgdW5pdEtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfY29ndHZyX3NlY3MobmFtZSwgdmFsS2V5LCB1bml0S2V5LCBkZWZVbml0KSA6PSBzIGlmIHtcXG5cXHR2IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbdmFsS2V5XSkpKVxcblxcdHUgOj0gX3BmX2NvZ3R2cl91bml0KG5hbWUsIHVuaXRLZXksIGRlZlVuaXQpXFxuXFx0cyA6PSB2ICogX3BmX2NvZ3R2cl91bml0X3NlY3NbdV1cXG59XFxuXFxuX3BmX2NvZ3R2cl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCJcXG5cXG5fcGZfY29ndHZyX2FpX2JhZChzKSBpZiBzIDwgMzAwXFxuXFxuX3BmX2NvZ3R2cl9haV9iYWQocykgaWYgcyA+IDg2NDAwXFxuXFxuX3BmX2NvZ3R2cl9ydF9iYWQocykgaWYgcyA8IDM2MDBcXG5cXG5fcGZfY29ndHZyX3J0X2JhZChzKSBpZiBzID4gMzE1MzYwMDAwXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLXZhbGlkaXR5LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBY2Nlc3NUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDUgbWludXRlcy0xIGRheTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmFuZ2UgZm9yIHRva2VuIHZhbGlkaXR5LlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiS2VlcCB0aGUgYWNjZXNzIHRva2VuIHZhbGlkaXR5IGJldHdlZW4gNSBtaW51dGVzIGFuZCAxIGRheVxcXCIsXFxuXFx0X3BmX2NvZ3R2cl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHMgOj0gX3BmX2NvZ3R2cl9zZWNzKG5hbWUsIFxcXCJBY2Nlc3NUb2tlblZhbGlkaXR5XFxcIiwgXFxcIkFjY2Vzc1Rva2VuXFxcIiwgXFxcImhvdXJzXFxcIilcXG5cXHRfcGZfY29ndHZyX2FpX2JhZChzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklkVG9rZW5WYWxpZGl0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSWRUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDUgbWludXRlcy0xIGRheTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmFuZ2UgZm9yIHRva2VuIHZhbGlkaXR5LlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiS2VlcCB0aGUgaWQgdG9rZW4gdmFsaWRpdHkgYmV0d2VlbiA1IG1pbnV0ZXMgYW5kIDEgZGF5XFxcIixcXG5cXHRfcGZfY29ndHZyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0cyA6PSBfcGZfY29ndHZyX3NlY3MobmFtZSwgXFxcIklkVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJJZFRva2VuXFxcIiwgXFxcImhvdXJzXFxcIilcXG5cXHRfcGZfY29ndHZyX2FpX2JhZChzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZnJlc2hUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eSB3b3JrcyBvdXQgdG8gJXYgc2Vjb25kcywgb3V0c2lkZSA2MCBtaW51dGVzLTEwIHllYXJzOyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByYW5nZSBmb3IgdG9rZW4gdmFsaWRpdHkuXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJLZWVwIHRoZSByZWZyZXNoIHRva2VuIHZhbGlkaXR5IGJldHdlZW4gNjAgbWludXRlcyBhbmQgMTAgeWVhcnNcXFwiLFxcblxcdF9wZl9jb2d0dnJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRzIDo9IF9wZl9jb2d0dnJfc2VjcyhuYW1lLCBcXFwiUmVmcmVzaFRva2VuVmFsaWRpdHlcXFwiLCBcXFwiUmVmcmVzaFRva2VuXFxcIiwgXFxcImRheXNcXFwiKVxcblxcdF9wZl9jb2d0dnJfcnRfYmFkKHMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by11c2VyLXBvb2wtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVXNlciBwb29sIG5hbWVzIGFsbG93IG9ubHkgd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICs9LC5ALVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by11c2VyLXBvb2wtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVXNlclBvb2xOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJVc2VyUG9vbE5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8tdXNlci1pZGVudGl0eS1wb29scy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVVc2VyUG9vbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlVzZXJQb29sTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW0EtWmEtejAtOV8gXFxcXHQrPSwuQC1dKyRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWF0dHJpYnV0ZS1kZWZpbml0aW9ucy11c2FnZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV2ZXJ5IEF0dHJpYnV0ZURlZmluaXRpb25zIGVudHJ5IG11c3QgYmUgdXNlZCBieSBhIGtleSBzY2hlbWFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEeW5hbW9EQiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaDogZXZlcnkgQXR0cmlidXRlRGVmaW5pdGlvbnMgZW50cnkgbXVzdCBiZVxcbiMgdXNlZCBieSB0aGUgdGFibGUga2V5IHNjaGVtYSBvciBhbiBpbmRleCBrZXkgc2NoZW1hLiBUaGUgZW5naW5lJ3MgRTMwMzlcXG4jIGNoZWNrcyB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9ubHkgKGtleSBhdHRyaWJ1dGUgbm90IGRlZmluZWQpLCBzbyB0aGVcXG4jIGNsYXNzaWMgXFxcInJlbW92ZWQgYSBHU0ksIGxlZnQgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uXFxcIiBtaXN0YWtlIHNhaWxzIHRocm91Z2guXFxuXFxuX3BmX2RkYmFkdV90YWJsZV9rZXlzKG5hbWUpIDo9IHthIHxcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdGEgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfZGRiYWR1X2luZGV4X2tleXMobmFtZSwgcHJvcCkgOj0ge2EgfFxcblxcdHNvbWUgaXggaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGl4LnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuX3BmX2RkYmFkdV91c2VkKG5hbWUpIDo9ICgoX3BmX2RkYmFkdV90YWJsZV9rZXlzKG5hbWUpIHxcXG5cXHRfcGZfZGRiYWR1X2luZGV4X2tleXMobmFtZSwgXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKSkgfFxcblxcdF9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIikpXFxuXFxuIyBBbnkgdW5yZXNvbHZhYmxlIEF0dHJpYnV0ZU5hbWUgaW4gYSBrZXkgc2NoZW1hIG1lYW5zIHRoZSB1c2VkLXNldCBpc1xcbiMgaW5jb21wbGV0ZSwgc28gdGhlIHJ1bGUgbXVzdCBzdGF5IHNpbGVudCByYXRoZXIgdGhhbiBndWVzcy5cXG5fcGZfZGRiYWR1X3VucmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHRub3QgaXNfc3RyaW5nKG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxufVxcblxcbl9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRzb21lIHByb3AgaW4gW1xcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIiwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCJdXFxuXFx0c29tZSBpeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQoaXgudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRub3QgaXNfc3RyaW5nKG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1hdHRyaWJ1dGUtZGVmaW5pdGlvbnMtdXNhZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnMuJWRcXFwiLCBbZC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGlzIGRlZmluZWQgYnV0IHVzZWQgYnkgbm8ga2V5IHNjaGVtYTsgRHluYW1vREIgcmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2ggYW5kIGZhaWxzIHdpdGggXFxcXFxcXCJOdW1iZXIgb2YgYXR0cmlidXRlcyBpbiBLZXlTY2hlbWEgZG9lcyBub3QgZXhhY3RseSBtYXRjaCBudW1iZXIgb2YgYXR0cmlidXRlcyBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXFxcXFxcXCJcXFwiLCBbYXR0cl0pLFxcblxcdFxcXCJSZW1vdmUgdGhlIHVudXNlZCBkZWZpbml0aW9uIChub24ta2V5IGF0dHJpYnV0ZXMgc3VjaCBhcyBhIFRUTCBhdHRyaWJ1dGUgbXVzdCBOT1QgYmUgZGVjbGFyZWQpLCBvciBhZGQgdGhlIGluZGV4IHRoYXQgdXNlcyBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0bm90IF9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpXFxuXFx0c29tZSBkIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0YXR0ciA6PSBvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXR0cilcXG5cXHRub3QgYXR0ciBpbiBfcGZfZGRiYWR1X3VzZWQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQcm92aXNpb25lZFRocm91Z2hwdXQgbXVzdCBtYXRjaCBCaWxsaW5nTW9kZSAocmVxdWlyZWQgZm9yIFBST1ZJU0lPTkVELCBmb3JiaWRkZW4gZm9yIFBBWV9QRVJfUkVRVUVTVClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmJ0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLlJlYWRXcml0ZUNhcGFjaXR5TW9kZS5odG1sXFxcIlxcblxcbl9wZl9kZGJidF9oYXNfcHQobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIikpXFxuXFxuX3BmX2RkYmJ0X2JpbGxpbmdfcHJlc2VudChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIilcXG5cXG4jIEJpbGxpbmdNb2RlIOOBjOODquODhuODqeODqyBcXFwiUFJPVklTSU9ORURcXFwi44CB44G+44Gf44Gv5pyq5oyH5a6a77yI44OH44OV44Kp44Or44OIIFBST1ZJU0lPTkVE77yJ44CCXFxuIyDjg4jjg7zjgq/jg7PlgKTvvIhSZWYg562J77yJ44Gv5Yik5a6a44Gr5L2/44KP44Gq44GE77yI6Kqk5qSc55+l6Ziy5q2i77yJ44CCXFxuX3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUFJPVklTSU9ORURcXFwiXFxuXFxuX3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIG5vdCBfcGZfZGRiYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsXFxuXFx0XFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCBjYW5ub3QgYmUgc3BlY2lmaWVkIHdoZW4gQmlsbGluZ01vZGUgaXMgUEFZX1BFUl9SRVFVRVNUOyBDcmVhdGVUYWJsZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQcm92aXNpb25lZFRocm91Z2hwdXQsIG9yIHN3aXRjaCBCaWxsaW5nTW9kZSB0byBQUk9WSVNJT05FRFxcXCIsXFxuXFx0X3BmX2RkYmJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUEFZX1BFUl9SRVFVRVNUXFxcIlxcblxcdF9wZl9kZGJidF9oYXNfcHQobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsXFxuXFx0XFxcIkJpbGxpbmdNb2RlIGlzIFBST1ZJU0lPTkVEICh0aGUgZGVmYXVsdCkgYnV0IFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBpcyBtaXNzaW5nOyBDcmVhdGVUYWJsZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIkFkZCBQcm92aXNpb25lZFRocm91Z2hwdXQgKFJlYWRDYXBhY2l0eVVuaXRzIC8gV3JpdGVDYXBhY2l0eVVuaXRzKSwgb3Igc2V0IEJpbGxpbmdNb2RlIHRvIFBBWV9QRVJfUkVRVUVTVFxcXCIsXFxuXFx0X3BmX2RkYmJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdF9wZl9kZGJidF9wcm92aXNpb25lZChuYW1lKVxcblxcdG5vdCBfcGZfZGRiYnRfaGFzX3B0KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZHVwbGljYXRlLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1wiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkF0dHJpYnV0ZURlZmluaXRpb25zIG11c3Qgbm90IGRlZmluZSB0aGUgc2FtZSBhdHRyaWJ1dGUgdHdpY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtYXR0cmlidXRlLWRlZmluaXRpb25zXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zLiVkXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBdHRyaWJ1dGUgJyVzJyBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIEF0dHJpYnV0ZURlZmluaXRpb25zOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiQW4gYXR0cmlidXRlIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthbl0pLFxcblxcdFxcXCJLZWVwIGEgc2luZ2xlIGRlZmluaXRpb24gcGVyIGF0dHJpYnV0ZSBuYW1lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdGFuIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhbilcXG5cXHRvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkgPT0gYW5cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtaW5kZXgtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY29uZGFyeSBpbmRleCBuYW1lcyBtdXN0IGJlIHVuaXF1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZGluX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCJcXG5cXG4jIER1cGxpY2F0ZXMgd2l0aGluIHRoZSBzYW1lIGluZGV4IGxpc3Qgb25seTsgYSBHU0kvTFNJIGNyb3NzLWxpc3QgY2xhc2ggd2FzXFxuIyBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtaW5kZXgtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5JbmRleE5hbWVcXFwiLCBbcHJvcCwgYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkluZGV4IG5hbWUgJyVzJyBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiRHVwbGljYXRlIGluZGV4IG5hbWVcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IHNlY29uZGFyeSBpbmRleCBhIHVuaXF1ZSBJbmRleE5hbWVcXFwiLFxcblxcdF9wZl9kZGJkaW5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBwcm9wIGluIFtcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiXVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGluYW1lKVxcblxcdG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIG51bGwpID09IGluYW1lXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZ2xvYmFsLXRhYmxlLXJlcGxpY2EtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2xvYmFsVGFibGUgUmVwbGljYXMgbXVzdCBpbmNsdWRlIHRoZSBkZXBsb3ltZW50IHJlZ2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6R2xvYmFsVGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgb25seSB3aGVuIHRoZSBlbmZvcmNlIHBsdWdpblxcbiMga25vd3MgdGhlIGFwcCdzIGNvbmNyZXRlIHJlZ2lvbiAoc2VlIHNyYy9wcml2YXRlL2VuZm9yY2UudHMpOyB3aXRob3V0IGl0IHRoZVxcbiMgcmVmZXJlbmNlIGlzIHVuZGVmaW5lZCBhbmQgdGhpcyBydWxlIHNraXBzLiBSZXBsaWNhcyB3aXRoIHVucmVzb2x2YWJsZVxcbiMgUmVnaW9uIHZhbHVlcyBhbHNvIG1ha2UgdGhlIHJ1bGUgc2tpcCDigJQgYWJzZW5jZSBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nbG9iYWwtdGFibGUtcmVwbGljYS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2FzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgUmVwbGljYXMgbGlzdCAldiBkb2VzIG5vdCBpbmNsdWRlIHRoZSBkZXBsb3ltZW50IHJlZ2lvbiAnJXMnOyBDcmVhdGVHbG9iYWxUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIFJlcGxpY2FzIHNlY3Rpb24gbXVzdCBjb250YWluIGFuIGVudHJ5IGZvciB0aGUgY3VycmVudCByZWdpb25cXFxcXFxcIlxcXCIsIFtyZXBsaWNhcywgcmVnaW9uXSksXFxuXFx0XFxcIkFkZCBhIHJlcGxpY2EgZW50cnkgZm9yIHRoZSByZWdpb24gdGhlIHN0YWNrIGRlcGxveXMgdG8gKENESyBUYWJsZVYyIGRvZXMgdGhpcyBhdXRvbWF0aWNhbGx5KVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLWdsb2JhbHRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVxcXCIpXFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0aXNfc3RyaW5nKHJlZ2lvbilcXG5cXHRpdGVtcyA6PSBbaXQgfCBzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5SZXBsaWNhc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBpdCBpbiBpdGVtcyB7XFxuXFx0XFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJSZWdpb25cXFwiLCBudWxsKSlcXG5cXHR9XFxuXFx0cmVwbGljYXMgOj0gW3IgfCBzb21lIGl0IGluIGl0ZW1zOyByIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJSZWdpb25cXFwiLCBudWxsKV1cXG5cXHRub3QgcmVnaW9uIGluIHJlcGxpY2FzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZ3NpLWJpbGxpbmctdGhyb3VnaHB1dFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdTSSBQcm92aXNpb25lZFRocm91Z2hwdXQgbXVzdCBtYXRjaCB0aGUgdGFibGUgQmlsbGluZ01vZGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmdidF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvSG93SXRXb3Jrcy5SZWFkV3JpdGVDYXBhY2l0eU1vZGUuaHRtbFxcXCJcXG5cXG4jIEdTSS1sZXZlbCBjb3VudGVycGFydCBvZiBwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXQgKHdoaWNoIGNvdmVycyB0aGVcXG4jIHRhYmxlLWxldmVsIHBhaXIgb25seSkuIFNhbWUgdG9rZW4gc2FmZXR5OiBsaXRlcmFsIEJpbGxpbmdNb2RlIG9yIGFic2VudFxcbiMgKGRlZmF1bHQgUFJPVklTSU9ORUQpOyB0b2tlbiB2YWx1ZXMgbmV2ZXIganVkZ2VkLlxcbl9wZl9kZGJnYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKVxcblxcbl9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQUk9WSVNJT05FRFxcXCJcXG5cXG5fcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIG5vdCBfcGZfZGRiZ2J0X2JpbGxpbmdfcHJlc2VudChuYW1lKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgc3BlY2lmaWVzIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBidXQgQmlsbGluZ01vZGUgaXMgUEFZX1BFUl9SRVFVRVNUOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvcGVydHkgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbid0IGJlIHVzZWQgd2l0aCBQQVlfUEVSX1JFUVVFU1QgQmlsbGluZ01vZGVcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJSZW1vdmUgdGhlIEdTSSdzIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCwgb3Igc3dpdGNoIHRoZSB0YWJsZSB0byBQUk9WSVNJT05FRFxcXCIsXFxuXFx0X3BmX2RkYmdidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBBWV9QRVJfUkVRVUVTVFxcXCJcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdGlzX29iamVjdChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBudWxsKSlcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBpcyBtaXNzaW5nIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCB3aGlsZSB0aGUgdGFibGUgYmlsbHMgUFJPVklTSU9ORUQgKHRoZSBkZWZhdWx0KTsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb3BlcnR5IFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJBZGQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IHRvIHRoZSBHU0ksIG9yIHNldCBCaWxsaW5nTW9kZSB0byBQQVlfUEVSX1JFUVVFU1RcXFwiLFxcblxcdF9wZl9kZGJnYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0X3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0bm90IGlzX29iamVjdChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBudWxsKSlcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nc2ktcHJvamVjdGlvbi1ub25rZXlcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOb25LZXlBdHRyaWJ1dGVzIGdvZXMgd2l0aCBJTkNMVURFLCBhbmQgb25seSB3aXRoIElOQ0xVREVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmdwbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZHluYW1vZGItdGFibGUtcHJvamVjdGlvbi5odG1sXFxcIlxcblxcbiMgR1NJIHByb2plY3Rpb25zIG9ubHk6IHRoZSBMU0kgc2hhcGUgYW5kIHRoZSBLRVlTX09OTFkrTm9uS2V5QXR0cmlidXRlcyBjb21ib1xcbiMgd2VyZSBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktcHJvamVjdGlvbi1ub25rZXlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm9qZWN0aW9uXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyB1c2VzIFByb2plY3Rpb25UeXBlIElOQ0xVREUgd2l0aG91dCBOb25LZXlBdHRyaWJ1dGVzOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvamVjdGlvblR5cGUgaXMgSU5DTFVERSwgYnV0IE5vbktleUF0dHJpYnV0ZXMgaXMgbm90IHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkxpc3QgdGhlIHByb2plY3RlZCBhdHRyaWJ1dGVzIGluIE5vbktleUF0dHJpYnV0ZXMsIG9yIHN3aXRjaCBQcm9qZWN0aW9uVHlwZSB0byBBTEwgLyBLRVlTX09OTFlcXFwiLFxcblxcdF9wZl9kZGJncG5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRwcm9qIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb2plY3Rpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm9qKVxcblxcdG9iamVjdC5nZXQocHJvaiwgXFxcIlByb2plY3Rpb25UeXBlXFxcIiwgbnVsbCkgPT0gXFxcIklOQ0xVREVcXFwiXFxuXFx0Y291bnQob2JqZWN0LmdldChwcm9qLCBcXFwiTm9uS2V5QXR0cmlidXRlc1xcXCIsIFtdKSkgPT0gMFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb2plY3Rpb25cXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIGNvbWJpbmVzIFByb2plY3Rpb25UeXBlIEFMTCB3aXRoIE5vbktleUF0dHJpYnV0ZXM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9qZWN0aW9uVHlwZSBpcyBBTEwsIGJ1dCBOb25LZXlBdHRyaWJ1dGVzIGlzIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkRyb3AgTm9uS2V5QXR0cmlidXRlcyAoQUxMIGFscmVhZHkgcHJvamVjdHMgZXZlcnl0aGluZyksIG9yIHN3aXRjaCBQcm9qZWN0aW9uVHlwZSB0byBJTkNMVURFXFxcIixcXG5cXHRfcGZfZGRiZ3BuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0cHJvaiA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm9qZWN0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocHJvailcXG5cXHRvYmplY3QuZ2V0KHByb2osIFxcXCJQcm9qZWN0aW9uVHlwZVxcXCIsIG51bGwpID09IFxcXCJBTExcXFwiXFxuXFx0Y291bnQob2JqZWN0LmdldChwcm9qLCBcXFwiTm9uS2V5QXR0cmlidXRlc1xcXCIsIFtdKSkgPiAwXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIktleVNjaGVtYSBtdXN0IGJlIFtIQVNIXSBvciBbSEFTSCwgUkFOR0VdXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJrc2hfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIlxcblxcbiMgVGFibGUtbGV2ZWwga2V5IHNjaGVtYSBvbmx5OiBpbmRleCBrZXkgc2NoZW1hcyBwcm9kdWNlIGRpZmZlcmVudCBzZXJ2aWNlXFxuIyBlcnJvcnMgYW5kIHdlcmUgbm90IG1lYXN1cmVkIChpc3N1ZSAjMjEpLlxcbl9wZl9kZGJrc2hfdHlwZShuYW1lLCBpKSA6PSBrdCBpZiB7XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHRpdC5pbmRleCA9PSBpXFxuXFx0a3QgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIktleVR5cGVcXFwiLCBudWxsKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWtleS1zY2hlbWEtc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYS4wLktleVR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBmaXJzdCBLZXlTY2hlbWEgZWxlbWVudCBtdXN0IGJlIEhBU0gsIGdvdCAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBLZXlTY2hlbWE6IFRoZSBmaXJzdCBLZXlTY2hlbWFFbGVtZW50IGlzIG5vdCBhIEhBU0gga2V5IHR5cGVcXFxcXFxcIlxcXCIsIFtrdF0pLFxcblxcdFxcXCJQdXQgdGhlIHBhcnRpdGlvbiBrZXkgKEtleVR5cGUgSEFTSCkgZmlyc3QgYW5kIHRoZSBvcHRpb25hbCBzb3J0IGtleSAoUkFOR0UpIHNlY29uZFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRrdCA6PSBfcGZfZGRia3NoX3R5cGUobmFtZSwgMClcXG5cXHRpc19zdHJpbmcoa3QpXFxuXFx0a3QgIT0gXFxcIkhBU0hcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hLjEuS2V5VHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHNlY29uZCBLZXlTY2hlbWEgZWxlbWVudCBtdXN0IGJlIFJBTkdFLCBnb3QgJyVzJzsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgS2V5U2NoZW1hOiBUaGUgc2Vjb25kIEtleVNjaGVtYUVsZW1lbnQgaXMgbm90IGEgUkFOR0Uga2V5IHR5cGVcXFxcXFxcIlxcXCIsIFtrdF0pLFxcblxcdFxcXCJVc2UgZXhhY3RseSBvbmUgSEFTSCBlbGVtZW50LCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IG9uZSBSQU5HRSBlbGVtZW50XFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGt0IDo9IF9wZl9kZGJrc2hfdHlwZShuYW1lLCAxKVxcblxcdGlzX3N0cmluZyhrdClcXG5cXHRrdCAhPSBcXFwiUkFOR0VcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJLZXlTY2hlbWEgY2FuIGhvbGQgYXQgbW9zdCAyIGVsZW1lbnRzIChIQVNIICsgb3B0aW9uYWwgUkFOR0UpLCBnb3QgJWRcXFwiLCBbbl0pLFxcblxcdFxcXCJNb2RlbCBleHRyYSBhY2Nlc3MgcGF0dGVybnMgYXMgZ2xvYmFsIG9yIGxvY2FsIHNlY29uZGFyeSBpbmRleGVzIGluc3RlYWRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0biA6PSBjb3VudChbMSB8IHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIildKVxcblxcdG4gPiAyXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGIta2luZXNpcy1zdHJlYW0tcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBLaW5lc2lzIHN0cmVhbWluZyBkZXN0aW5hdGlvbiBtdXN0IGJlIGluIHRoZSB0YWJsZSdzIHJlZ2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgS2luZXNpcyBEYXRhIFN0cmVhbXMgZGVzdGluYXRpb24gbXVzdCBsaXZlIGluIHRoZSBzYW1lIHJlZ2lvbiBhcyB0aGVcXG4jIHRhYmxlLiBUaGUgZGVwbG95LXRpbWUgZmFpbHVyZSBtb2RlIGlzIHVnbHk6IHRoZSB0YWJsZSBpcyBjcmVhdGVkLCB0aGVcXG4jIHN0cmVhbWluZyBkZXN0aW5hdGlvbiBuZXZlciBzdGFiaWxpemVzLCBhbmQgQ2xvdWRGb3JtYXRpb24gcm9sbHMgYmFjayBvblxcbiMgTm90U3RhYmlsaXplZCBtaW51dGVzIGxhdGVyIOKAlCBub3RoaW5nIG5hbWVzIHRoZSByZWdpb24gbWlzbWF0Y2guXFxuIyBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvbiBpcyBkZWZpbmVkIG9ubHkgaW4gZW5mb3JjZSBtb2RlIHdpdGggYVxcbiMgY29uY3JldGUgcmVnaW9uOyBvdGhlcndpc2UgdGhpcyBydWxlIHNraXBzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2luZXNpcy1zdHJlYW0tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LaW5lc2lzU3RyZWFtU3BlY2lmaWNhdGlvbi5TdHJlYW1Bcm5cXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBLaW5lc2lzIHN0cmVhbSBsaXZlcyBpbiAnJXMnIGJ1dCB0aGUgdGFibGUgZGVwbG95cyB0byAnJXMnOyB0aGUgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG5ldmVyIHN0YWJpbGl6ZXMgYW5kIHRoZSBzdGFjayByb2xscyBiYWNrXFxcIiwgW3N0cmVhbVJlZ2lvbiwgcmVnaW9uXSksXFxuXFx0XFxcIlBvaW50IEtpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFybiBhdCBhIHN0cmVhbSBpbiB0aGUgdGFibGUncyBvd24gcmVnaW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9rZHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRpc19zdHJpbmcocmVnaW9uKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcImtpbmVzaXNcXFwiXFxuXFx0c3RyZWFtUmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0c3RyZWFtUmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0c3RyZWFtUmVnaW9uICE9IHJlZ2lvblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWxzaS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMU0kga2V5IGF0dHJpYnV0ZXMgbXVzdCBiZSBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDM5IGNoZWNrcyB0YWJsZSBhbmQgR1NJIGtleSBzY2hlbWFzIGFnYWluc3RcXG4jIEF0dHJpYnV0ZURlZmluaXRpb25zIGJ1dCBpcyBibGluZCB0byBMb2NhbFNlY29uZGFyeUluZGV4ZXMgKG1lYXN1cmVkXFxuIyAyMDI2LTA5LTAyLCAxLjcuMC1iZXRhKS4gVGhpcyBydWxlIGNvdmVycyBleGFjdGx5IHRoYXQgZ2FwLlxcblxcbl9wZl9kZGJsYWRfZGVmcyhuYW1lKSA6PSB7YSB8XFxuXFx0c29tZSBkIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuIyBJZiBhbnkgZGVmaW5pdGlvbidzIG5hbWUgaXMgdW5yZXNvbHZhYmxlIHRoZSBzZXQgaXMgaW5jb21wbGV0ZSDigJQgc3RheSBzaWxlbnQuXFxuX3BmX2RkYmxhZF9kZWZzX3Jlc29sdmFibGUobmFtZSkgaWYge1xcblxcdGV2ZXJ5IGQgaW4gW3ggfCBzb21lIHggaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIildIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChkLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktYXR0cmlidXRlLWRlZmluaXRpb25zXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlcy4lZC5LZXlTY2hlbWFcXFwiLCBbbC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxTSSBrZXkgYXR0cmlidXRlICclcycgaXMgbm90IGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJBbiBhdHRyaWJ1dGUgcmVmZXJlbmNlZCBpbiBhIEtleVNjaGVtYSBlbGVtZW50IGlzIG5vdCBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXFxcXFxcXCJcXFwiLCBbYXR0cl0pLFxcblxcdFxcXCJBZGQgdGhlIGF0dHJpYnV0ZSB0byBBdHRyaWJ1dGVEZWZpbml0aW9ucyAoYW5kIG5vd2hlcmUgZWxzZTogb25seSBrZXkgYXR0cmlidXRlcyBiZWxvbmcgdGhlcmUpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1sb2NhbHNlY29uZGFyeWluZGV4Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0Y291bnQoX3BmX2RkYmxhZF9kZWZzKG5hbWUpKSA+IDBcXG5cXHRfcGZfZGRibGFkX2RlZnNfcmVzb2x2YWJsZShuYW1lKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0YXR0ciA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXR0cilcXG5cXHRub3QgYXR0ciBpbiBfcGZfZGRibGFkX2RlZnMobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBMU0kgbmVlZHMgYSBSQU5HRSBrZXkgYW5kIHRoZSB0YWJsZSdzIGxlYWRpbmcgaGFzaCBrZXlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmxzaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZHluYW1vZGItdGFibGUtbG9jYWxzZWNvbmRhcnlpbmRleC5odG1sXFxcIlxcblxcbl9wZl9kZGJsc2hfa2V5dHlwZXMoa3MpIDo9IHtrdCB8XFxuXFx0c29tZSBrIGluIGtzXFxuXFx0a3QgOj0gb2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGt0KVxcbn1cXG5cXG4jIE9ubHkganVkZ2UgYSBrZXkgc2NoZW1hIHdob3NlIEtleVR5cGVzIGFyZSBhbGwgbGl0ZXJhbCBzdHJpbmdzLlxcbl9wZl9kZGJsc2hfcmVzb2x2YWJsZShrcykgaWYgY291bnQoX3BmX2RkYmxzaF9rZXl0eXBlcyhrcykpID4gMFxcblxcbl9wZl9kZGJsc2hfcmVzb2x2YWJsZV9hbGwoa3MpIGlmIHtcXG5cXHRldmVyeSBrIGluIGtzIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTG9jYWwgc2Vjb25kYXJ5IGluZGV4ICclcycgaGFzIG5vIFJBTkdFIGtleTsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkluZGV4IEtleVNjaGVtYSBkb2VzIG5vdCBoYXZlIGEgcmFuZ2Uga2V5IGZvciBpbmRleFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkdpdmUgdGhlIExTSSBhIHNvcnQga2V5OiBbdGFibGUgSEFTSCBrZXksIGl0cyBvd24gUkFOR0Uga2V5XVxcXCIsXFxuXFx0X3BmX2RkYmxzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGwgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0a3MgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0Y291bnQoa3MpID4gMFxcblxcdF9wZl9kZGJsc2hfcmVzb2x2YWJsZV9hbGwoa3MpXFxuXFx0bm90IFxcXCJSQU5HRVxcXCIgaW4gX3BmX2RkYmxzaF9rZXl0eXBlcyhrcylcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTG9jYWwgc2Vjb25kYXJ5IGluZGV4ICclcycgdXNlcyBoYXNoIGtleSAnJXMnIGJ1dCB0aGUgdGFibGUncyBoYXNoIGtleSBpcyAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW5kZXggS2V5U2NoZW1hIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgbGVhZGluZyBoYXNoIGtleSBhcyB0YWJsZSBLZXlTY2hlbWFcXFxcXFxcIlxcXCIsIFtpbmFtZSwgbHNpSGFzaCwgdGFibGVIYXNoXSksXFxuXFx0XFxcIkFuIExTSSBtdXN0IHJldXNlIHRoZSB0YWJsZSdzIHBhcnRpdGlvbiBrZXk7IHVzZSBhIGdsb2JhbCBzZWNvbmRhcnkgaW5kZXggZm9yIGEgZGlmZmVyZW50IGhhc2gga2V5XFxcIixcXG5cXHRfcGZfZGRibHNoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHR0LmluZGV4ID09IDBcXG5cXHR0YWJsZUhhc2ggOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhYmxlSGFzaClcXG5cXHRzb21lIGwgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0a3MgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0c29tZSBrIGluIGtzXFxuXFx0b2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpID09IFxcXCJIQVNIXFxcIlxcblxcdGxzaUhhc2ggOj0gb2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGxzaUhhc2gpXFxuXFx0bHNpSGFzaCAhPSB0YWJsZUhhc2hcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhYmxlIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZSwgZG90IGFuZCBoeXBoZW4gKG1heCAyNTUpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiLFxuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbl0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIiwgXFxcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy4tXXsxLDI1NX0kYCwgbilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYWJsZU5hbWUgJyVzJyBpcyByZWplY3RlZDogRHluYW1vREIgYWNjZXB0cyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmUsIGRvdCBhbmQgaHlwaGVuLCB1cCB0byAyNTUgY2hhcmFjdGVyc1xcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgdGFibGUgdXNpbmcgW2EtekEtWjAtOV8uLV0gd2l0aGluIDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgbl0gaW4gX3BmX2RkYm5hbWVfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItdGFibGUtbmFtZS1sZW5ndGhcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYWJsZU5hbWUgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgKG1pbmltdW0gMyBjaGFyYWN0ZXJzKSBpcyBlbmZvcmNlZC4gVGhlIDI1NS1jaGFyXFxuIyBtYXhpbXVtIGFuZCB0aGUgY2hhcmFjdGVyIHBhdHRlcm4gd2VyZSBub3QgbWVhc3VyZWQuIE5vdGUgcmVzb2x2ZSgpIHR1cm5zIGFcXG4jIFJlZi10by1yZXNvdXJjZSBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElEOyBhIGxvZ2ljYWwgSUQgc2hvcnQgZW5vdWdoIHRvXFxuIyB0cmlwIHRoaXMgcnVsZSB3aGlsZSBmZWVkaW5nIGEgVGFibGVOYW1lIGlzIHRyZWF0ZWQgYXMgdGhlIGJ1ZyBpdCBhbG1vc3RcXG4jIGNlcnRhaW5seSBpcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtbGVuZ3RoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRhYmxlTmFtZSAnJXMnIGlzIHNob3J0ZXIgdGhhbiAzIGNoYXJhY3RlcnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIGxlbmd0aCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gM1xcXFxcXFwiXFxcIiwgW3RuXSksXFxuXFx0XFxcIlVzZSBhIHRhYmxlIG5hbWUgb2YgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzLCBvciBvbWl0IFRhYmxlTmFtZSBhbmQgbGV0IENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlIG9uZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVUYWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0Y291bnQodG4pIDwgM1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1pbnN0YW5jZS1hbWktYXJjaFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbnN0YW5jZSB0eXBlIGFyY2hpdGVjdHVyZSBtdXN0IG1hdGNoIHRoZSBTU00gcHVibGljLXBhcmFtZXRlciBBTUkgYXJjaGl0ZWN0dXJlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6SW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMyaWFhX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlLXR5cGVzLmh0bWxcXFwiXFxuXFxuIyBHcmF2aXRvbiBuYW1pbmcgY29udmVudGlvbjogYSBcXFwiZ1xcXCIgYW1vbmcgdGhlIGxldHRlcnMgYWZ0ZXIgdGhlXFxuIyBnZW5lcmF0aW9uIGRpZ2l0ICh0NGcsIGM3Z24sIGltNGduLCBnNWcpLCBwbHVzIHRoZSBwcmUtY29udmVudGlvbiBhMS5cXG4jIG1hYyogZmFtaWxpZXMgYXJlIGV4Y2x1ZGVkIGZyb20ganVkZ21lbnQgZW50aXJlbHkuXFxuX3BmX2VjMmlhYV9hcm1fZmFtKGZhbSkgaWYgcmVnZXgubWF0Y2goYF5bYS16XStbMC05XStbYS16MC05XSpnW2EtejAtOV0qJGAsIGZhbSlcXG5cXG5fcGZfZWMyaWFhX2FybV9mYW0oZmFtKSBpZiBmYW0gPT0gXFxcImExXFxcIlxcblxcbl9wZl9lYzJpYWFfZmFtKG5hbWUpIDo9IGZhbSBpZiB7XFxuXFx0aXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhpdClcXG5cXHRmYW0gOj0gc3BsaXQoaXQsIFxcXCIuXFxcIilbMF1cXG5cXHRub3Qgc3RhcnRzd2l0aChmYW0sIFxcXCJtYWNcXFwiKVxcbn1cXG5cXG4jIHt7cmVzb2x2ZTpzc206Li4ufX0gc3RyaW5ncyBzdXJmYWNlIGFzIHtcXFwiX19keW5hbWljXFxcIjogXFxcImR5bmFtaWNcXG4jIHJlZmVyZW5jZToge3tyZXNvbHZlOnNzbTo8cGF0aD59fVxcXCJ9IG1hcmtlciBvYmplY3RzIChtZWFzdXJlZFxcbiMgMjAyNi0wOS0wMyk7IHRoZSByZWZlcmVuY2UgdGV4dCBpcyByZWFkIGZyb20gdGhlIG1hcmtlci5cXG5fcGZfZWMyaWFhX2ltZyhuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkltYWdlSWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChyYXcpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHJhdywgXFxcIl9fZHluYW1pY1xcXCIsIFxcXCJcXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdGNvbnRhaW5zKGQsIFxcXCJ7e3Jlc29sdmU6c3NtOlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbWFnZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnN0YW5jZSB0eXBlICclcycgaXMgeDg2XzY0IGJ1dCB0aGUgQU1JIHBhcmFtZXRlciBwYXRoIG5hbWVzIGFybTY0OyB0aGUgbGF1bmNoIGZhaWxzIHdpdGggYW4gYXJjaGl0ZWN0dXJlIG1pc21hdGNoXFxcIiwgW3Jlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIildKSxcXG5cXHRcXFwiVXNlIGFuIGFybTY0IChHcmF2aXRvbikgaW5zdGFuY2UgdHlwZSBvciB0aGUgeDg2XzY0IEFNSSBwYXRoXFxcIixcXG5cXHRfcGZfZWMyaWFhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRmYW0gOj0gX3BmX2VjMmlhYV9mYW0obmFtZSlcXG5cXHRub3QgX3BmX2VjMmlhYV9hcm1fZmFtKGZhbSlcXG5cXHRpbWcgOj0gX3BmX2VjMmlhYV9pbWcobmFtZSlcXG5cXHRjb250YWlucyhpbWcsIFxcXCJhcm02NFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbWFnZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnN0YW5jZSB0eXBlICclcycgaXMgYXJtNjQgKEdyYXZpdG9uKSBidXQgdGhlIEFNSSBwYXJhbWV0ZXIgcGF0aCBuYW1lcyB4ODZfNjQ7IHRoZSBsYXVuY2ggZmFpbHMgd2l0aCBhbiBhcmNoaXRlY3R1cmUgbWlzbWF0Y2hcXFwiLCBbcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKV0pLFxcblxcdFxcXCJVc2UgYW4geDg2XzY0IGluc3RhbmNlIHR5cGUgb3IgdGhlIGFybTY0IEFNSSBwYXRoXFxcIixcXG5cXHRfcGZfZWMyaWFhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRmYW0gOj0gX3BmX2VjMmlhYV9mYW0obmFtZSlcXG5cXHRfcGZfZWMyaWFhX2FybV9mYW0oZmFtKVxcblxcdGltZyA6PSBfcGZfZWMyaWFhX2ltZyhuYW1lKVxcblxcdGNvbnRhaW5zKGltZywgXFxcIng4Nl82NFxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLWxhdW5jaC10ZW1wbGF0ZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhdW5jaCB0ZW1wbGF0ZSBuYW1lcyBhcmUgMy0xMjggY2hhcnMgb2YgbGV0dGVycywgbnVtYmVycyBhbmQgLSgpLi9fXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1sYXVuY2gtdGVtcGxhdGUtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMYXVuY2hUZW1wbGF0ZU5hbWUgJyVzJyBpcyByZWplY3RlZDogRUMyIHJlcXVpcmVzIDMtMTI4IGNoYXJhY3RlcnMgb2YgbGV0dGVycywgbnVtYmVycyBhbmQgLSAoICkgLiAvIF9cXFwiLCBbbl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGxhdW5jaCB0ZW1wbGF0ZSB1c2luZyBvbmx5IGxldHRlcnMsIG51bWJlcnMgYW5kIC0gKCApIC4gLyBfICgzLTEyOCBjaGFyYWN0ZXJzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTGF1bmNoVGVtcGxhdGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFRlbXBsYXRlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOSgpLi9fLV17MywxMjh9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLW5hdGd3LWFsbG9jYXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTkFUIGdhdGV3YXkgQWxsb2NhdGlvbklkIGlzIHJlcXVpcmVkIGZvciBwdWJsaWMgY29ubmVjdGl2aXR5IGFuZCBmb3JiaWRkZW4gZm9yIHByaXZhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpOYXRHYXRld2F5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMm5nYV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjMi1uYXRnYXRld2F5Lmh0bWxcXFwiXFxuXFxuX3BmX2VjMm5nYV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbiMgQ29ubmVjdGl2aXR5VHlwZSBkZWZhdWx0cyB0byBwdWJsaWM7IGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBza2lwcyBib3RoIGRpcmVjdGlvbnMuXFxuX3BmX2VjMm5nYV9wdWJsaWMobmFtZSkgaWYgX3BmX2VjMm5nYV9hYnNlbnQobmFtZSwgXFxcIkNvbm5lY3Rpdml0eVR5cGVcXFwiKVxcblxcbl9wZl9lYzJuZ2FfcHVibGljKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29ubmVjdGl2aXR5VHlwZVxcXCIpID09IFxcXCJwdWJsaWNcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb2NhdGlvbklkXFxcIixcXG5cXHRcXFwiQSBwcml2YXRlIE5BVCBnYXRld2F5IGNhbm5vdCB0YWtlIEFsbG9jYXRpb25JZCAoXFxcXFxcXCJBbGxvY2F0aW9uSWQgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBOQVQgR2F0ZXdheSB3aXRoIENvbm5lY3Rpdml0eSBUeXBlIHByaXZhdGUuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIEFsbG9jYXRpb25JZCwgb3Igc3dpdGNoIENvbm5lY3Rpdml0eVR5cGUgdG8gcHVibGljXFxcIixcXG5cXHRfcGZfZWMybmdhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Ok5hdEdhdGV3YXlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29ubmVjdGl2aXR5VHlwZVxcXCIpID09IFxcXCJwcml2YXRlXFxcIlxcblxcdG5vdCBfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQWxsb2NhdGlvbklkXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb2NhdGlvbklkXFxcIixcXG5cXHRcXFwiQSBwdWJsaWMgTkFUIGdhdGV3YXkgcmVxdWlyZXMgQWxsb2NhdGlvbklkIChcXFxcXFxcIlRoZSByZXF1ZXN0IG11c3QgaW5jbHVkZSB0aGUgQWxsb2NhdGlvbklkIHBhcmFtZXRlci5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJBbGxvY2F0ZSBhbiBFSVAgYW5kIHBhc3MgaXRzIEFsbG9jYXRpb25JZCwgb3Igc2V0IENvbm5lY3Rpdml0eVR5cGU6IHByaXZhdGVcXFwiLFxcblxcdF9wZl9lYzJuZ2FfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6TmF0R2F0ZXdheVxcXCIpXFxuXFx0X3BmX2VjMm5nYV9wdWJsaWMobmFtZSlcXG5cXHRfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQWxsb2NhdGlvbklkXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItcGctY2x1c3Rlci1idXJzdGFibGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQnVyc3RhYmxlIGluc3RhbmNlIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGNsdXN0ZXIgcGxhY2VtZW50IGdyb3Vwc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ3Jvc3MtcmVzb3VyY2U6IG9ubHkgZmlyZXMgd2hlbiB0aGUgcmVmZXJlbmNlZCBwbGFjZW1lbnQgZ3JvdXAgaXMgaW5cXG4jIHRoZSB0ZW1wbGF0ZSB3aXRoIFN0cmF0ZWd5IGNsdXN0ZXIuIEEgbGl0ZXJhbCAocHJlLWV4aXN0aW5nKSBncm91cFxcbiMgbmFtZSBjYXJyaWVzIG5vIHN0cmF0ZWd5IGluZm9ybWF0aW9uIGFuZCBzdGF5cyBzaWxlbnQuXFxuX3BmX2VjMnBnYl9idXJzdGFibGUoZmFtKSBpZiBmYW0gaW4ge1xcXCJ0MlxcXCIsIFxcXCJ0M1xcXCIsIFxcXCJ0M2FcXFwiLCBcXFwidDRnXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1wZy1jbHVzdGVyLWJ1cnN0YWJsZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbHVzdGVyIHBsYWNlbWVudCBncm91cHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICclcycgaW5zdGFuY2UgdHlwZTsgdGhlIGxhdW5jaCBmYWlscyBhdCBkZXBsb3lcXFwiLCBbaXRdKSxcXG5cXHRcXFwiVXNlIGEgbm9uLWJ1cnN0YWJsZSB0eXBlLCBvciBhIHNwcmVhZC9wYXJ0aXRpb24gcGxhY2VtZW50IGdyb3VwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3BsYWNlbWVudC1ncm91cHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCIpXFxuXFx0aXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhpdClcXG5cXHRfcGZfZWMycGdiX2J1cnN0YWJsZShzcGxpdChpdCwgXFxcIi5cXFwiKVswXSlcXG5cXHRwZyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBsYWNlbWVudEdyb3VwTmFtZVxcXCIpXFxuXFx0cGcgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFxcXCIpXFxuXFx0cmVzb2x2ZShwZywgXFxcIlByb3BlcnRpZXMuU3RyYXRlZ3lcXFwiKSA9PSBcXFwiY2x1c3RlclxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItcm91dGUtdGFyZ2V0LWV4YWN0bHktb25lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcm91dGUgbXVzdCBuYW1lIGV4YWN0bHkgb25lIHRhcmdldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlJvdXRlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgMTEgdGFyZ2V0IHByb3BlcnRpZXMsIHN0cmFpZ2h0IGZyb20gdGhlIEVDMiBlcnJvciBtZXNzYWdlLlxcbl9wZl9lYzJydGVfdGFyZ2V0cyA6PSBbXFxcIkdhdGV3YXlJZFxcXCIsIFxcXCJMb2NhbEdhdGV3YXlJZFxcXCIsIFxcXCJDYXJyaWVyR2F0ZXdheUlkXFxcIiwgXFxcIk5hdEdhdGV3YXlJZFxcXCIsIFxcXCJOZXR3b3JrSW50ZXJmYWNlSWRcXFwiLCBcXFwiVnBjUGVlcmluZ0Nvbm5lY3Rpb25JZFxcXCIsIFxcXCJFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWRcXFwiLCBcXFwiVHJhbnNpdEdhdGV3YXlJZFxcXCIsIFxcXCJWcGNFbmRwb2ludElkXFxcIiwgXFxcIkNvcmVOZXR3b3JrQXJuXFxcIiwgXFxcIkluc3RhbmNlSWRcXFwiXVxcblxcbl9wZl9lYzJydGVfY291bnQobmFtZSkgOj0gbiBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZWMycnRlX3RhcmdldHM7IG9iamVjdC5nZXQocHJvcHMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJdKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1yb3V0ZS10YXJnZXQtZXhhY3RseS1vbmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcm91dGUgbmFtZXMgJXYgdGFyZ2V0czsgRUMyIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9mIEdhdGV3YXlJZCwgTG9jYWxHYXRld2F5SWQsIENhcnJpZXJHYXRld2F5SWQsIE5hdEdhdGV3YXlJZCwgTmV0d29ya0ludGVyZmFjZUlkLCBWcGNQZWVyaW5nQ29ubmVjdGlvbklkLCBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWQsIFRyYW5zaXRHYXRld2F5SWQsIFZwY0VuZHBvaW50SWQsIENvcmVOZXR3b3JrQXJuIG9yIEluc3RhbmNlSWRcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgdGFyZ2V0IHByb3BlcnR5IG9uIHRoZSByb3V0ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjMi1yb3V0ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlJvdXRlXFxcIilcXG5cXHRuIDo9IF9wZl9lYzJydGVfY291bnQobmFtZSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctY2lkci12YWxpZFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBydWxlIENpZHJJcCBtdXN0IGJlIGEgd2VsbC1mb3JtZWQgSVB2NCBDSURSXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMyc2N2X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcy5odG1sXFxcIlxcblxcbl9wZl9lYzJzY3ZfbWFsZm9ybWVkKGMpIGlmIHtcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHR0b19udW1iZXIoc3BsaXQoYywgXFxcIi9cXFwiKVsxXSkgPiAzMlxcbn1cXG5cXG5fcGZfZWMyc2N2X21hbGZvcm1lZChjKSBpZiB7XFxuXFx0cmVnZXgubWF0Y2goYF5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XSsvWzAtOV0rJGAsIGMpXFxuXFx0c29tZSBvIGluIHNwbGl0KHNwbGl0KGMsIFxcXCIvXFxcIilbMF0sIFxcXCIuXFxcIilcXG5cXHR0b19udW1iZXIobykgPiAyNTVcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctY2lkci12YWxpZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5DaWRySXBcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ2lkcklwICclcycgaXMgbWFsZm9ybWVkIChvY3RldHMgbXVzdCBiZSAwLTI1NSwgcHJlZml4IDAtMzIpOyBFQzIgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQ0lEUiBibG9jayAlcyBpcyBtYWxmb3JtZWRcXFxcXFxcIlxcXCIsIFtjLCBjXSksXFxuXFx0XFxcIkZpeCB0aGUgQ0lEUiBub3RhdGlvblxcXCIsXFxuXFx0X3BmX2VjMnNjdl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGRpciBpbiB7XFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtkaXJdKSlcXG5cXHRlbnRyeSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdGMgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIkNpZHJJcFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGMpXFxuXFx0X3BmX2VjMnNjdl9tYWxmb3JtZWQoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctY2lkci12YWxpZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2lkcklwXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDaWRySXAgJyVzJyBpcyBtYWxmb3JtZWQgKG9jdGV0cyBtdXN0IGJlIDAtMjU1LCBwcmVmaXggMC0zMik7IEVDMiByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJDSURSIGJsb2NrICVzIGlzIG1hbGZvcm1lZFxcXFxcXFwiXFxcIiwgW2MsIGNdKSxcXG5cXHRcXFwiRml4IHRoZSBDSURSIG5vdGF0aW9uXFxcIixcXG5cXHRfcGZfZWMyc2N2X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkcklwXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRfcGZfZWMyc2N2X21hbGZvcm1lZChjKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1ncm91cC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIG5hbWVzIG1heSBub3Qgc3RhcnQgd2l0aCBzZy1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctZ3JvdXAtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR3JvdXBOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJHcm91cE5hbWUgJyVzJyBzdGFydHMgd2l0aCB0aGUgcmVzZXJ2ZWQgcHJlZml4OyBFQzIgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiR3JvdXAgbmFtZXMgbWF5IG5vdCBiZSBpbiB0aGUgZm9ybWF0IHNnLSpcXFxcXFxcIlxcXCIsIFtnbl0pLFxcblxcdFxcXCJQaWNrIGEgbmFtZSB0aGF0IGRvZXMgbm90IHN0YXJ0IHdpdGggc2ctXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZWN1cml0eUdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0Z24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Hcm91cE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhnbilcXG5cXHRzdGFydHN3aXRoKGduLCBcXFwic2ctXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcG9ydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBUQ1AvVURQIHBvcnRzIG11c3QgYmUgd2l0aGluIDAtNjU1MzUgYW5kIEZyb21Qb3J0IDw9IFRvUG9ydFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnX2ZpeCA6PSBcXFwiVXNlIGEgcG9ydCBiZXR3ZWVuIDAgYW5kIDY1NTM1IHdpdGggRnJvbVBvcnQgPD0gVG9Qb3J0XFxcIlxcblxcbl9wZl9zZ191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA+IDY1NTM1XFxuXFxuX3BmX3RjcF91ZHAocCkgaWYgcCBpbiB7XFxcInRjcFxcXCIsIFxcXCJ1ZHBcXFwiLCBcXFwiNlxcXCIsIFxcXCIxN1xcXCIsIDYsIDE3fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuJXNcXFwiLCBbZGlyLCBpdGVtLmluZGV4LCBwbmFtZV0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIG91dHNpZGUgdGhlIHZhbGlkIFRDUC9VRFAgcG9ydCByYW5nZSAwLTY1NTM1XFxcIiwgW3BuYW1lLCBuXSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRzb21lIHBuYW1lIGluIHtcXFwiRnJvbVBvcnRcXFwiLCBcXFwiVG9Qb3J0XFxcIn1cXG5cXHRuIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBwbmFtZSwgbnVsbCkpXFxuXFx0X3BmX3BvcnRfb3V0KG4pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuRnJvbVBvcnRcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiRnJvbVBvcnRcXFwiLCBudWxsKSlcXG5cXHR0IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVG9Qb3J0XFxcIiwgbnVsbCkpXFxuXFx0ZiA+PSAwXFxuXFx0dCA8PSA2NTUzNVxcblxcdGYgPiB0XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcG5hbWVdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyAldiBpcyBvdXRzaWRlIHRoZSB2YWxpZCBUQ1AvVURQIHBvcnQgcmFuZ2UgMC02NTUzNVxcXCIsIFtwbmFtZSwgbl0pLFxcblxcdF9wZl9zZ19maXgsIF9wZl9zZ191cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0X3BmX3RjcF91ZHAocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JcFByb3RvY29sXFxcIikpXFxuXFx0c29tZSBwbmFtZSBpbiB7XFxcIkZyb21Qb3J0XFxcIiwgXFxcIlRvUG9ydFxcXCJ9XFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BuYW1lXSkpKVxcblxcdF9wZl9wb3J0X291dChuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1wb3J0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Gcm9tUG9ydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRfcGZfdGNwX3VkcChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklwUHJvdG9jb2xcXFwiKSlcXG5cXHRmIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZyb21Qb3J0XFxcIikpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub1BvcnRcXFwiKSlcXG5cXHRmID49IDBcXG5cXHR0IDw9IDY1NTM1XFxuXFx0ZiA+IHRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcnVsZS1kZXNjcmlwdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBydWxlIGRlc2NyaXB0aW9ucyBhcmUgbGltaXRlZCB0byAyNTUgY2hhcnMgb2YgYSByZXN0cmljdGVkIEFTQ0lJIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnZGVzY191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfc2dkZXNjX3BhdCA6PSBgXlthLXpBLVowLTkuXyA6LygpIyxAXFxcXFtcXFxcXSs9Jjt7fSEkKi1dezAsMjU1fSRgXFxuXFxuIyBpbmxpbmUgcnVsZSBsaXN0cyBvbiBhIHNlY3VyaXR5IGdyb3VwXFxuX3BmX3NnZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIGRlc2NdIGlmIHtcXG5cXHRzb21lIG4gaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGtleSBpbiBbXFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwiXVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3Qobiwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtrZXldKSlcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRkZXNjIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkRlc2NyaXB0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoZGVzYylcXG5cXHRub3QgcmVnZXgubWF0Y2goX3BmX3NnZGVzY19wYXQsIGRlc2MpXFxuXFx0bmFtZSA6PSBuXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkRlc2NyaXB0aW9uXFxcIiwgW2tleSwgci5pbmRleF0pXFxufVxcblxcbiMgc3RhbmRhbG9uZSBydWxlIHJlc291cmNlc1xcbl9wZl9zZ2Rlc2NfYmFkIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkZXNjXSBpZiB7XFxuXFx0c29tZSB0IGluIFtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIl1cXG5cXHRzb21lIG4gaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRkZXNjIDo9IHJlc29sdmUobiwgXFxcIlByb3BlcnRpZXMuRGVzY3JpcHRpb25cXFwiKVxcblxcdGlzX3N0cmluZyhkZXNjKVxcblxcdG5vdCByZWdleC5tYXRjaChfcGZfc2dkZXNjX3BhdCwgZGVzYylcXG5cXHRuYW1lIDo9IG5cXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1ydWxlLWRlc2NyaXB0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRwYXRoLFxcblxcdHNwcmludGYoXFxcIlNlY3VyaXR5IGdyb3VwIHJ1bGUgZGVzY3JpcHRpb24gJyVzJyBpcyByZWplY3RlZDogRUMyIGFsbG93cyBmZXdlciB0aGFuIDI1NiBjaGFyYWN0ZXJzIGZyb20gdGhlIHNldCBhLXpBLVowLTkuIF8tOi8oKSMsQFtdKz0mO3t9ISQqIChub24tQVNDSUkgdGV4dCBzdWNoIGFzIEphcGFuZXNlIGlzIHJlamVjdGVkKVxcXCIsIFtkZXNjXSksXFxuXFx0XFxcIldyaXRlIHRoZSBydWxlIGRlc2NyaXB0aW9uIGluIHRoZSBhbGxvd2VkIEFTQ0lJIHNldCBhbmQga2VlcCBpdCB1bmRlciAyNTYgY2hhcmFjdGVyc1xcXCIsXFxuXFx0X3BmX3NnZGVzY191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkZXNjXSBpbiBfcGZfc2dkZXNjX2JhZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgc2VjdXJpdHkgZ3JvdXAgcnVsZSB0YWtlcyBleGFjdGx5IG9uZSBzb3VyY2UvZGVzdGluYXRpb24gZmllbGRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJzc2VfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0F1dGhvcml6ZVNlY3VyaXR5R3JvdXBJbmdyZXNzLmh0bWxcXFwiXFxuXFxuIyBUaGUgbWVtYmVyIHNldHMgY29tZSB2ZXJiYXRpbSBmcm9tIHRoZSBFQzIgZXJyb3IgbWVzc2FnZXMuXFxuX3BmX2VjMnNzZV9zZXRzIDo9IHtcXFwiaW5cXFwiOiBbXFxcIkNpZHJJcFxcXCIsIFxcXCJDaWRySXB2NlxcXCIsIFxcXCJTb3VyY2VTZWN1cml0eUdyb3VwSWRcXFwiLCBcXFwiU291cmNlUHJlZml4TGlzdElkXFxcIl0sIFxcXCJvdXRcXFwiOiBbXFxcIkNpZHJJcFxcXCIsIFxcXCJDaWRySXB2NlxcXCIsIFxcXCJEZXN0aW5hdGlvblByZWZpeExpc3RJZFxcXCIsIFxcXCJEZXN0aW5hdGlvblNlY3VyaXR5R3JvdXBJZFxcXCJdfVxcblxcbl9wZl9lYzJzc2VfZGlya2V5IDo9IHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiOiBcXFwiaW5cXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCI6IFxcXCJvdXRcXFwifVxcblxcbl9wZl9lYzJzc2VfcmtleSA6PSB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCI6IFxcXCJpblxcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCI6IFxcXCJvdXRcXFwifVxcblxcbl9wZl9lYzJzc2VfY291bnQoZW50cnksIHNldGtleSkgOj0gbiBpZiB7XFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdG4gOj0gY291bnQoW2sgfCBzb21lIGsgaW4gX3BmX2VjMnNzZV9zZXRzW3NldGtleV07IG9iamVjdC5nZXQoZW50cnksIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJdKVxcbn1cXG5cXG4jIEVtYmVkZGVkIHJ1bGVzOiB0d28gb3IgbW9yZSBtZW1iZXJzIGlzIGFuIGVycm9yOyB6ZXJvIGlzIHRvbGVyYXRlZFxcbiMgKGEgc291cmNlLWxlc3MgZW1iZWRkZWQgaW5ncmVzcyBkZXBsb3llZCBjbGVhbiBvbiAyMDI2LTA5LTAzKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkXFxcIiwgW2RpciwgaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlRoZSBydWxlIHNldHMgJXYgb2YgJXY7IEVDMiBhbGxvd3Mgb25seSBvbmUgKFxcXFxcXFwiT25seSBvbmUgb2YgJXMgY2FuIGJlIHNwZWNpZmllZFxcXFxcXFwiKVxcXCIsIFtuLCBfcGZfZWMyc3NlX3NldHNba10sIGNvbmNhdChcXFwiLCBcXFwiLCBfcGZfZWMyc3NlX3NldHNba10pXSksXFxuXFx0XFxcIktlZXAgZXhhY3RseSBvbmUgc291cmNlL2Rlc3RpbmF0aW9uIGZpZWxkIG9uIHRoZSBydWxlXFxcIixcXG5cXHRfcGZfZWMyc3NlX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGsgOj0gX3BmX2VjMnNzZV9kaXJrZXlbZGlyXVxcblxcdG4gOj0gX3BmX2VjMnNzZV9jb3VudChpdGVtLnZhbHVlLCBrKVxcblxcdG4gPj0gMlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJ1bGUgc2V0cyAldiBvZiAldjsgRUMyIHJlcXVpcmVzIGV4YWN0bHkgb25lIChcXFxcXFxcIkV4YWN0bHkgb25lIG9mICVzIG11c3QgYmUgc3BlY2lmaWVkIGFuZCBub3QgZW1wdHlcXFxcXFxcIilcXFwiLCBbbiwgX3BmX2VjMnNzZV9zZXRzW2tdLCBjb25jYXQoXFxcIiwgXFxcIiwgX3BmX2VjMnNzZV9zZXRzW2tdKV0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgc291cmNlL2Rlc3RpbmF0aW9uIGZpZWxkIG9uIHRoZSBydWxlIHJlc291cmNlXFxcIixcXG5cXHRfcGZfZWMyc3NlX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRrIDo9IF9wZl9lYzJzc2VfcmtleVtydHlwZV1cXG5cXHRuIDo9IF9wZl9lYzJzc2VfY291bnQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIGspXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXN1Ym5ldC1jaWRyLXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3VibmV0IElQdjQgQ0lEUiBuZXRtYXNrIG11c3QgYmUgYmV0d2VlbiAvMTYgYW5kIC8yOFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlN1Ym5ldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zdWJuZXRjaWRyX2xlbihjKSA6PSB0b19udW1iZXIocGFydHNbMV0pIGlmIHtcXG5cXHRwYXJ0cyA6PSBzcGxpdChjLCBcXFwiL1xcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc3VibmV0LWNpZHItc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTdWJuZXQgQ0lEUiAnJXMnIGhhcyBhIC8lZCBuZXRtYXNrOyBFQzIgYWNjZXB0cyAvMTYgdGhyb3VnaCAvMjggYW5kIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsIG90aGVyd2lzZVxcXCIsIFtjLCBuXSksXFxuXFx0XFxcIlJlc2l6ZSB0aGUgc3VibmV0IENJRFIgdG8gYSBuZXRtYXNrIGJldHdlZW4gLzE2IGFuZCAvMjhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvc3VibmV0LXNpemluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlN1Ym5ldFxcXCIpXFxuXFx0YyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNpZHJCbG9ja1xcXCIpXFxuXFx0aXNfc3RyaW5nKGMpXFxuXFx0biA6PSBfcGZfc3VibmV0Y2lkcl9sZW4oYylcXG5cXHRfcGZfc3VibmV0Y2lkcl9vdXQobilcXG59XFxuXFxuX3BmX3N1Ym5ldGNpZHJfb3V0KG4pIGlmIG4gPCAxNlxcblxcbl9wZl9zdWJuZXRjaWRyX291dChuKSBpZiBuID4gMjhcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi11c2VyZGF0YS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVDMiB1c2VyIGRhdGEgaXMgbGltaXRlZCB0byAxNjM4NCBieXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl91ZHN6X2ZpeCA6PSBcXFwiS2VlcCB1c2VyIGRhdGEgdW5kZXIgMTYzODQgYnl0ZXM7IG1vdmUgbGFyZ2UgcGF5bG9hZHMgdG8gUzMgYW5kIGZldGNoIHRoZW0gZnJvbSBhIHNtYWxsIGJvb3RzdHJhcCBzY3JpcHRcXFwiXFxuXFxuX3BmX3Vkc3pfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvaW5zdGFuY2VkYXRhLWFkZC11c2VyLWRhdGEuaHRtbFxcXCJcXG5cXG5fcGZfdWRzel9saW1pdCA6PSAxNjM4NFxcblxcbiMgYmFzZTY0IOaWh+Wtl+WIl+OBruODh+OCs+ODvOODieW+jOODkOOCpOODiOaVsO+8iOODkeODh+OCo+ODs+OCsOiAg+aFru+8iVxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKChjb3VudChzKSAqIDMpIC8gNCkgLSAyIGlmIGVuZHN3aXRoKHMsIFxcXCI9PVxcXCIpXFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoKGNvdW50KHMpICogMykgLyA0KSAtIDEgaWYge1xcblxcdGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXHRub3QgZW5kc3dpdGgocywgXFxcIj09XFxcIilcXG59XFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoY291bnQocykgKiAzKSAvIDQgaWYgbm90IGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXG5fcGZfdWRzel9wYXRocyA6PSB7XFxuXFx0XFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCI6IFxcXCJQcm9wZXJ0aWVzLlVzZXJEYXRhXFxcIixcXG5cXHRcXFwiQVdTOjpFQzI6OkxhdW5jaFRlbXBsYXRlXFxcIjogXFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVEYXRhLlVzZXJEYXRhXFxcIixcXG59XFxuXFxuIyBVc2VyRGF0YSDjgYzjg6rjg4bjg6njg6sgYmFzZTY0IOaWh+Wtl+WIl+OBruOCseODvOOCuVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXVzZXJkYXRhLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBwLFxcblxcdHNwcmludGYoXFxcIlVzZXJEYXRhIGRlY29kZXMgdG8gYWJvdXQgJXYgYnl0ZXMsIGJ1dCBFQzIgbGltaXRzIHVzZXIgZGF0YSB0byAlZCBieXRlczsgUnVuSW5zdGFuY2VzIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW3NpemUsIF9wZl91ZHN6X2xpbWl0XSksXFxuXFx0X3BmX3Vkc3pfZml4LCBfcGZfdWRzel91cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBwIGluIF9wZl91ZHN6X3BhdGhzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHVkIDo9IHJlc29sdmUobmFtZSwgcClcXG5cXHRpc19zdHJpbmcodWQpXFxuXFx0c2l6ZSA6PSBfcGZfdWRzel9kZWNvZGVkKHVkKVxcblxcdHNpemUgPiBfcGZfdWRzel9saW1pdFxcbn1cXG5cXG4jIFVzZXJEYXRhIOOBjCB7XFxcIkZuOjpCYXNlNjRcXFwiOiBcXFwiPGxpdGVyYWw+XFxcIn0g44Gu44Kx44O844K577yI44Ko44Oz44Kz44O844OJ5YmN44Gu55Sf44OQ44Kk44OI5pWw44Gn5Yik5a6a77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIHAsXFxuXFx0c3ByaW50ZihcXFwiVXNlckRhdGEgaXMgJWQgYnl0ZXMgYmVmb3JlIGJhc2U2NCBlbmNvZGluZywgYnV0IEVDMiBsaW1pdHMgdXNlciBkYXRhIHRvICVkIGJ5dGVzOyBSdW5JbnN0YW5jZXMgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbY291bnQoaW5uZXIpLCBfcGZfdWRzel9saW1pdF0pLFxcblxcdF9wZl91ZHN6X2ZpeCwgX3BmX3Vkc3pfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgcCBpbiBfcGZfdWRzel9wYXRoc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHR1ZCA6PSByZXNvbHZlKG5hbWUsIHApXFxuXFx0aXNfb2JqZWN0KHVkKVxcblxcdGlubmVyIDo9IG9iamVjdC5nZXQodWQsIFxcXCJGbjo6QmFzZTY0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5uZXIpXFxuXFx0Y291bnQoaW5uZXIpID4gX3BmX3Vkc3pfbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLWlvcHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRUJTIElvcHMvVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgdHlwZSdzIHN1cHBvcnRlZCByYW5nZXMgYW5kIHJhdGlvc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl92b2xpb3BzX2ZpeCA6PSBcXFwiTWF0Y2ggSW9wcy9UaHJvdWdocHV0IHRvIHRoZSB2b2x1bWUgdHlwZTogZ3AzIDMwMDAtODAwMDAgSU9QUyAobWF4IDUwMC9HaUIsIHRocm91Z2hwdXQgMTI1LTIwMDAgTWlCL3MgYW5kIGF0IG1vc3QgSU9QUy80KSwgaW8xIDEwMC02NDAwMCAobWF4IDUwL0dpQiksIGlvMiAxMDAtMjU2MDAwIChtYXggMTAwMC9HaUIpOyBncDIvc3QxL3NjMS9zdGFuZGFyZCBhY2NlcHQgbmVpdGhlciBwcm9wZXJ0eVxcXCJcXG5cXG5fcGZfdm9saW9wc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWxcXFwiXFxuXFxuX3BmX3ZvbGlvcHNfcmFuZ2UgOj0ge1xcXCJncDNcXFwiOiBbMzAwMCwgODAwMDBdLCBcXFwiaW8xXFxcIjogWzEwMCwgNjQwMDBdLCBcXFwiaW8yXFxcIjogWzEwMCwgMjU2MDAwXX1cXG5cXG5fcGZfdm9saW9wc19wZXJfZ2liIDo9IHtcXFwiZ3AzXFxcIjogNTAwLCBcXFwiaW8xXFxcIjogNTAsIFxcXCJpbzJcXFwiOiAxMDAwfVxcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPCBsb1xcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPiBoaVxcblxcbl9wZl92b2xpb3BzX2hhc19pb3BzKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpXFxuXFxuIyBJT1BTIOOBjOWei+OBlOOBqOOBrue1tuWvvuODrOODs+OCuOWkllxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyAldiBpcyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgJWQtJWQgZm9yICVzIHZvbHVtZXNcXFwiLCBbbiwgclswXSwgclsxXSwgdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyIDo9IF9wZl92b2xpb3BzX3JhbmdlW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dChuLCByWzBdLCByWzFdKVxcbn1cXG5cXG4jIElPUFMgOiDjgrXjgqTjgrrmr5Tjga7otoXpgY5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgZXhjZWVkcyB0aGUgbWF4aW11bSByYXRpbyBvZiAlZCBJT1BTIHBlciBHaUIgZm9yICVzIChTaXplICV2IEdpQiBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbbiwgcmF0aW8sIHZ0LCBzLCBzICogcmF0aW9dKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyYXRpbyA6PSBfcGZfdm9saW9wc19wZXJfZ2liW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2l6ZVxcXCIpKVxcblxcdG4gPiBzICogcmF0aW9cXG59XFxuXFxuIyBJb3BzIOOCkuWPl+OBkeS7mOOBkeOBquOBhOWei+OBqyBJb3BzIOOCkuaMh+WumlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcyB2b2x1bWVzICh2YWxpZCBvbmx5IGZvciBncDMsIGlvMSwgaW8yKTsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsXFxcIiwgW3Z0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0dnQgaW4ge1xcXCJncDJcXFwiLCBcXFwic3QxXFxcIiwgXFxcInNjMVxcXCIsIFxcXCJzdGFuZGFyZFxcXCJ9XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIilcXG59XFxuXFxuIyBUaHJvdWdocHV0IOOBryBncDMg5bCC55SoXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzIHZvbHVtZXMgKHZhbGlkIG9ubHkgZm9yIGdwMyk7IEVDMiByZWplY3RzIHRoZSBDcmVhdGVWb2x1bWUgY2FsbFxcXCIsIFt2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyh2dClcXG5cXHR2dCAhPSBcXFwiZ3AzXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQg44Gu57W25a++44Os44Oz44K4XFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGlzIG91dHNpZGUgdGhlIHN1cHBvcnRlZCByYW5nZSAxMjUtMjAwMCBmb3IgZ3AzIHZvbHVtZXNcXFwiLCBbdF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKSA9PSBcXFwiZ3AzXFxcIlxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dCh0LCAxMjUsIDIwMDApXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQgOiBJT1BTIOavlO+8iOacgOWkpyAwLjI1IE1pQi9zIHBlciBJT1BT77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGV4Y2VlZHMgdGhlIG1heGltdW0gcmF0aW8gb2YgMC4yNSBNaUIvcyBwZXIgcHJvdmlzaW9uZWQgSU9QUyAoJXYgSU9QUyBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbdCwgbiwgbiAvIDRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHR0ICogNCA+IG5cXG59XFxuXFxuIyBncDMg44GnIElvcHMg5pyq5oyH5a6a77yI44OH44OV44Kp44Or44OIIDMwMDDvvInjga7jgajjgY3jga4gVGhyb3VnaHB1dCDmr5RcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgJXYgTWlCL3MgZXhjZWVkcyA3NTAsIHRoZSBtYXhpbXVtIGZvciB0aGUgZGVmYXVsdCAzMDAwIElPUFMgKDAuMjUgTWlCL3MgcGVyIElPUFMpOyBwcm92aXNpb24gSW9wcyBleHBsaWNpdGx5IG9yIGxvd2VyIHRoZSB0aHJvdWdocHV0XFxcIiwgW3RdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHRub3QgX3BmX3ZvbGlvcHNfaGFzX2lvcHMobmFtZSlcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHR0ID4gNzUwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1pb3BzLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImlvMSBhbmQgaW8yIHZvbHVtZXMgcmVxdWlyZSB0aGUgSW9wcyBwcm9wZXJ0eVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgcGYtZWMyLXZvbHVtZS1pb3BzIHZhbGlkYXRlcyBJb3BzIHZhbHVlczsgdGhpcyBydWxlIGNvdmVycyB0aGVcXG4jIGNvbmRpdGlvbmFsIHJlcXVpcmVtZW50IChhYnNlbmNlKSB0aGF0IHRoZSBzY2hlbWEgY2Fubm90IGV4cHJlc3MuXFxuX3BmX2VjMnZpcl9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlcyB2b2x1bWVzIHJlcXVpcmUgSW9wczsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsIHdpdGggXFxcXFxcXCJUaGUgcGFyYW1ldGVyIGlvcHMgbXVzdCBiZSBzcGVjaWZpZWQgZm9yICVzIHZvbHVtZXMuXFxcXFxcXCJcXFwiLCBbdnQsIHZ0XSksXFxuXFx0XFxcIlNldCBJb3BzIChpbzE6IDEwMC02NDAwMCwgaW8yOiAxMDAtMjU2MDAwKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHZ0IGluIHtcXFwiaW8xXFxcIiwgXFxcImlvMlxcXCJ9XFxuXFx0X3BmX2VjMnZpcl9hYnNlbnQobmFtZSwgXFxcIklvcHNcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12b2x1bWUta21zLWVuY3J5cHRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJLbXNLZXlJZCBvbiBhIHZvbHVtZSByZXF1aXJlcyBFbmNyeXB0ZWQgdG8gYmUgdHJ1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJ2a2VfYmFkKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRW5jcnlwdGVkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfZWMydmtlX2JhZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVuY3J5cHRlZFxcXCIpID09IGZhbHNlXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWttcy1lbmNyeXB0ZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkttc0tleUlkXFxcIixcXG5cXHRcXFwiS21zS2V5SWQgaXMgc2V0IGJ1dCBFbmNyeXB0ZWQgaXMgbm90IHRydWU7IEVDMiByZWplY3RzIHRoZSB2b2x1bWUgd2l0aCBcXFxcXFxcIlRoZSBwYXJhbWV0ZXIgW0ttc0tleUlkXSByZXF1aXJlcyB0aGUgcGFyYW1ldGVyIEVuY3J5cHRlZCB0byBiZSBzZXQuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgRW5jcnlwdGVkOiB0cnVlIGFsb25nc2lkZSBLbXNLZXlJZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiS21zS2V5SWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0X3BmX2VjMnZrZV9iYWQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLXNpemUtbWluaW11bVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQlMgdm9sdW1lIHNpemUgbXVzdCBtZWV0IHRoZSB2b2x1bWUgdHlwZSBtaW5pbXVtIChpbzEvaW8yIDQgR2lCLCBzdDEvc2MxIDEyNSBHaUIpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IG1pbmltdW1zOiB0aGUgaGlzdG9yaWNhbCAxNjM4NCBHaUIgbWF4aW11bSBubyBsb25nZXIgaG9sZHNcXG4jIChhIDE3MDAwIEdpQiBncDMgZGVwbG95ZWQgY2xlYW4gb24gMjAyNi0wOS0wMykuXFxuX3BmX2VjMnZzbV9taW4gOj0ge1xcXCJpbzFcXFwiOiA0LCBcXFwiaW8yXFxcIjogNCwgXFxcInN0MVxcXCI6IDEyNSwgXFxcInNjMVxcXCI6IDEyNX1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtc2l6ZS1taW5pbXVtXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TaXplXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTaXplICV2IEdpQiBpcyBiZWxvdyB0aGUgJXYgR2lCIG1pbmltdW0gZm9yICVzIHZvbHVtZXMgKFxcXFxcXFwiJXMgdm9sdW1lcyBtdXN0IGJlIGF0IGxlYXN0ICV2IEdpQiBpbiBzaXplLlxcXFxcXFwiKVxcXCIsIFtzLCBtbiwgdnQsIHZ0LCBtbl0pLFxcblxcdFxcXCJSYWlzZSBTaXplIHRvIHRoZSB2b2x1bWUgdHlwZSBtaW5pbXVtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0bW4gOj0gX3BmX2VjMnZzbV9taW5bdnRdXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TaXplXFxcIikpXFxuXFx0cyA8IG1uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwYy1jaWRyLWJsb2NrLXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVlBDIElQdjQgQ0lEUiBibG9jayBuZXRtYXNrIG11c3QgYmUgYmV0d2VlbiAvMTYgYW5kIC8yOFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSB2YWxpZGF0ZXMgc3VibmV0IGNvbnRhaW5tZW50IChFMzA1OSkgYW5kIG92ZXJsYXAgKEUzMDYwKVxcbiMgYnV0IGFjY2VwdHMgYW55IFZQQyBuZXRtYXNrOyBFQzIgcmVqZWN0cyBhbnl0aGluZyBvdXRzaWRlIC8xNi4uLzI4LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwYy1jaWRyLWJsb2NrLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNpZHJCbG9ja1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVlBDIENJRFIgYmxvY2sgJyVzJyBoYXMgbmV0bWFzayAvJXY7IEVDMiBvbmx5IGFjY2VwdHMgLzE2IHRocm91Z2ggLzI4IChcXFxcXFxcIlRoZSBDSURSICclcycgaXMgaW52YWxpZC5cXFxcXFxcIilcXFwiLCBbYywgcCwgY10pLFxcblxcdFxcXCJVc2UgYSBuZXRtYXNrIGJldHdlZW4gLzE2IGFuZCAvMjhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDXFxcIilcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHRwIDo9IHRvX251bWJlcihzcGxpdChjLCBcXFwiL1xcXCIpWzFdKVxcblxcdF9wZl9lYzJ2Y3Nfb3V0KHApXFxufVxcblxcbl9wZl9lYzJ2Y3Nfb3V0KHApIGlmIHAgPCAxNlxcblxcbl9wZl9lYzJ2Y3Nfb3V0KHApIGlmIHAgPiAyOFxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2UtZ2F0ZXdheS1zZXJ2aWNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdhdGV3YXkgVlBDIGVuZHBvaW50cyBvbmx5IGV4aXN0IGZvciBTMyBhbmQgRHluYW1vREJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVnBjRW5kcG9pbnRUeXBlIGRlZmF1bHRzIHRvIEdhdGV3YXkgKG1lYXN1cmVkOiBhIHR5cGUtbGVzcyBlbmRwb2ludFxcbiMgZmFpbHMgd2l0aCBcXFwiRW5kcG9pbnQgdHlwZSAoR2F0ZXdheSkgLi4uXFxcIiBtZXNzYWdlcykuXFxuX3BmX2VjMnZnc19nYXRld2F5KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVnBjRW5kcG9pbnRUeXBlXFxcIiwgXFxcIkdhdGV3YXlcXFwiKSA9PSBcXFwiR2F0ZXdheVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS1nYXRld2F5LXNlcnZpY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJPbmx5IFMzIGFuZCBEeW5hbW9EQiBvZmZlciBHYXRld2F5IGVuZHBvaW50czsgXFxcXFxcXCIlc1xcXFxcXFwiIGZhaWxzIHdpdGggXFxcXFxcXCJFbmRwb2ludCB0eXBlIChHYXRld2F5KSBkb2VzIG5vdCBtYXRjaCBhdmFpbGFibGUgc2VydmljZSB0eXBlc1xcXFxcXFwiXFxcIiwgW2NvbmNhdChcXFwiLlxcXCIsIHBhcnRzKV0pLFxcblxcdFxcXCJVc2UgY29tLmFtYXpvbmF3cy48cmVnaW9uPi5zMyBvciAuZHluYW1vZGIsIG9yIHN3aXRjaCBWcGNFbmRwb2ludFR5cGUgdG8gSW50ZXJmYWNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvcHJpdmF0ZWxpbmsvZ2F0ZXdheS1lbmRwb2ludHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENFbmRwb2ludFxcXCIpXFxuXFx0X3BmX2VjMnZnc19nYXRld2F5KG5hbWUpXFxuXFx0c24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHNuKVxcblxcdHBhcnRzIDo9IHNwbGl0KHNuLCBcXFwiLlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDRcXG5cXHRwYXJ0c1swXSA9PSBcXFwiY29tXFxcIlxcblxcdHBhcnRzWzFdID09IFxcXCJhbWF6b25hd3NcXFwiXFxuXFx0bm90IHBhcnRzWzNdIGluIHtcXFwiczNcXFwiLCBcXFwiZHluYW1vZGJcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12cGNlLXNlcnZpY2UtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlZQQyBlbmRwb2ludCBzZXJ2aWNlIG5hbWVzIG11c3QgdXNlIHRoZSBkZXBsb3kgcmVnaW9uIHVubGVzcyBTZXJ2aWNlUmVnaW9uIGlzIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnZzcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3ByaXZhdGVsaW5rL3ByaXZhdGVsaW5rLWFjY2Vzcy1hd3Mtc2VydmljZXMuaHRtbFxcXCJcXG5cXG4jIE9ubHkgY29tLmFtYXpvbmF3cy48cmVnaW9uPi48c2VydmljZT4gbmFtZXMgd2hlcmUgdGhlIHRoaXJkIHNlZ21lbnQgaXNcXG4jIHJlZ2lvbi1zaGFwZWQ7IG5hbWVzIGxpa2UgY29tLmFtYXpvbmF3cy5zMy1nbG9iYWwuYWNjZXNzcG9pbnQgc3RheSBvdXQuXFxuX3BmX2VjMnZzcl9wYXJ0cyhuYW1lKSA6PSBwYXJ0cyBpZiB7XFxuXFx0c24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHNuKVxcblxcdHBhcnRzIDo9IHNwbGl0KHNuLCBcXFwiLlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDRcXG5cXHRwYXJ0c1swXSA9PSBcXFwiY29tXFxcIlxcblxcdHBhcnRzWzFdID09IFxcXCJhbWF6b25hd3NcXFwiXFxuXFx0cmVnZXgubWF0Y2goYF5bYS16XXsyfSgtW2Etel0rKSstWzAtOV0rJGAsIHBhcnRzWzJdKVxcbn1cXG5cXG5fcGZfZWMydnNyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS1zZXJ2aWNlLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2VydmljZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkVuZHBvaW50IHNlcnZpY2UgJyVzJyBuYW1lcyByZWdpb24gJXMgYnV0IHRoaXMgc3RhY2sgZGVwbG95cyB0byAlczsgd2l0aG91dCBTZXJ2aWNlUmVnaW9uIHRoZSBsb29rdXAgaXMgcmVnaW9uYWwgYW5kIHRoZSBjcmVhdGUgZmFpbHNcXFwiLCBbY29uY2F0KFxcXCIuXFxcIiwgcGFydHMpLCBwYXJ0c1syXSwgcmVnaW9uXSksXFxuXFx0XFxcIlVzZSBjb20uYW1hem9uYXdzLjxkZXBsb3ktcmVnaW9uPi48c2VydmljZT4sIG9yIHNldCBTZXJ2aWNlUmVnaW9uIGZvciBjcm9zcy1yZWdpb24gUHJpdmF0ZUxpbmtcXFwiLFxcblxcdF9wZl9lYzJ2c3JfdXJsKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdHBhcnRzIDo9IF9wZl9lYzJ2c3JfcGFydHMobmFtZSlcXG5cXHRwYXJ0c1syXSAhPSByZWdpb25cXG5cXHRfcGZfZWMydnNyX2Fic2VudChuYW1lLCBcXFwiU2VydmljZVJlZ2lvblxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3VibmV0SWRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEdhdGV3YXkgZW5kcG9pbnRzIChhbmQgUm91dGVUYWJsZUlkcyBvbmx5IG9uIEdhdGV3YXkpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMydnRjX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWMyLXZwY2VuZHBvaW50Lmh0bWxcXFwiXFxuXFxuX3BmX2VjMnZ0Y190eXBlKG5hbWUpIDo9IHQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlZwY0VuZHBvaW50VHlwZVxcXCIsIFxcXCJHYXRld2F5XFxcIilcXG59XFxuXFxuX3BmX2VjMnZ0Y19oYXMobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN1Ym5ldElkc1xcXCIsXFxuXFx0XFxcIkEgR2F0ZXdheSBlbmRwb2ludCBjYW5ub3QgdGFrZSBTdWJuZXRJZHMgKFxcXFxcXFwiU3VibmV0IElEcyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIEludGVyZmFjZSBhbmQgR2F0ZXdheUxvYWRCYWxhbmNlciB0eXBlIFZQQyBFbmRwb2ludHMuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFN1Ym5ldElkcywgb3Igc2V0IFZwY0VuZHBvaW50VHlwZTogSW50ZXJmYWNlXFxcIixcXG5cXHRfcGZfZWMydnRjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XFxcIilcXG5cXHRfcGZfZWMydnRjX3R5cGUobmFtZSkgPT0gXFxcIkdhdGV3YXlcXFwiXFxuXFx0X3BmX2VjMnZ0Y19oYXMobmFtZSwgXFxcIlN1Ym5ldElkc1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlVGFibGVJZHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkEgJXMgZW5kcG9pbnQgY2Fubm90IHRha2UgUm91dGVUYWJsZUlkczsgb25seSBHYXRld2F5IGVuZHBvaW50cyBhdHRhY2ggdG8gcm91dGUgdGFibGVzXFxcIiwgW3RdKSxcXG5cXHRcXFwiUmVtb3ZlIFJvdXRlVGFibGVJZHMsIG9yIHNldCBWcGNFbmRwb2ludFR5cGU6IEdhdGV3YXlcXFwiLFxcblxcdF9wZl9lYzJ2dGNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdHQgOj0gX3BmX2VjMnZ0Y190eXBlKG5hbWUpXFxuXFx0dCAhPSBcXFwiR2F0ZXdheVxcXCJcXG5cXHRpc19zdHJpbmcodClcXG5cXHRfcGZfZWMydnRjX2hhcyhuYW1lLCBcXFwiUm91dGVUYWJsZUlkc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNsdXN0ZXItbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQ1MgY2x1c3RlciBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAobWF4IDI1NSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpDbHVzdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY2x1c3Rlci1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DbHVzdGVyTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2x1c3Rlck5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDbHVzdGVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6Q2x1c3RlclxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNsdXN0ZXJOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItZGVmaW5pdGlvbnMtZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyRGVmaW5pdGlvbnMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjb250YWluZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzY2RlX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2Vjc2NkZV9tc2cgOj0gXFxcIlJlZ2lzdGVyVGFza0RlZmluaXRpb24gbmVlZHMgYXQgbGVhc3Qgb25lIGNvbnRhaW5lcjsgdGhlIHNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBsaXN0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIlxcblxcbl9wZl9lY3NjZGVfZml4IDo9IFxcXCJBZGQgYXQgbGVhc3Qgb25lIGVudHJ5IHRvIENvbnRhaW5lckRlZmluaXRpb25zXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBtYXJrcyBubyBUYXNrRGVmaW5pdGlvbiBwcm9wZXJ0eSBhcyByZXF1aXJlZCwgc28gYW5cXG4jIGFic2VudCBvciBlbXB0eSBDb250YWluZXJEZWZpbml0aW9ucyBzYWlscyB0aHJvdWdoIHNjaGVtYSB2YWxpZGF0aW9uIGFuZFxcbiMgZGllcyBhdCByZWdpc3RyYXRpb24uIGZsYXR0ZW5fbGlzdCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIGFic2VudCBhbmRcXG4jIGVtcHR5IGFsaWtlLCBzbyBib3RoIGJsb2NrcyByZWFkIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcylcXG4jIHRvIHRlbGwgYSBsaXRlcmFsIGVtcHR5IGxpc3QgZnJvbSBhbiB1bnJlc29sdmFibGUgdmFsdWUgc3VjaCBhcyBGbjo6SWYuXFxuX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvbnRhaW5lckRlZmluaXRpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShyYXcpXFxuXFx0Y291bnQocmF3KSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIE1lbW9yeSBtdXN0IG5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgc2luZ2xlIGNvbnRhaW5lcidzIGhhcmQgTWVtb3J5IGxpbWl0IGNhbm5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LlxcbiMgVGFzayBNZW1vcnkgYXJyaXZlcyBhcyBhIHN0cmluZyAoXFxcIjUxMlxcXCIpOyB0b19udW1iZXIgY292ZXJzIGJvdGggc3BlbGxpbmdzIGFuZFxcbiMgbWFrZXMgdGhlIHJ1bGUgc2tpcCB3aGVuIGVpdGhlciBzaWRlIGlzIHVucmVzb2x2YWJsZSBvciBHQi1zdWZmaXhlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LW92ZXItdGFza1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlcXFwiLCBbYy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciAnJXMnIHNldHMgTWVtb3J5ICV2IGFib3ZlIHRoZSB0YXNrLWxldmVsIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiVGhlICdtZW1vcnknIHNldHRpbmcgZm9yIGNvbnRhaW5lciAnJXMnIGlzIGdyZWF0ZXIgdGhhbiBmb3IgdGhlIHRhc2tcXFxcXFxcIlxcXCIsIFtjbmFtZSwgY20sIHRtLCBjbmFtZV0pLFxcblxcdFxcXCJMb3dlciB0aGUgY29udGFpbmVyIE1lbW9yeSB0byBhdCBtb3N0IHRoZSB0YXNrLWxldmVsIE1lbW9yeSwgb3IgcmFpc2UgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHRtIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1lbW9yeVxcXCIpKVxcblxcdHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdChjLnZhbHVlKVxcblxcdGNtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRjbSA+IHRtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIG5lZWRzIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbiB3aGVuIHRoZSB0YXNrIHNldHMgbm8gTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzbWVtcmVxX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgV2hlbiB0aGUgdGFzayBkZWZpbml0aW9uIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeSwgZXZlcnkgY29udGFpbmVyIG11c3Qgc2V0XFxuIyBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb24uIFByb3ZpbmcgdHJ1ZSBhYnNlbmNlIG5lZWRzIHRoZSBwcmVwcm9jZXNzZWRcXG4jIGRvY3VtZW50IChpbnB1dC5yZXNvdXJjZXMpOiByZXNvbHZlKCkgaXMgdW5kZWZpbmVkIGZvciBhIG1pc3Npbmcga2V5IGFuZCBmb3JcXG4jIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBhbGlrZSwgc28gaXQgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwiUmVmIHRvIGFcXG4jIHBhcmFtZXRlclxcXCIuIFRoZSBpc19vYmplY3QgZ3VhcmQgZmFpbHMgY2xvc2VkIGlmIHRoYXQgaW50ZXJuYWwgc2hhcGUgY2hhbmdlcy5cXG5fcGZfZWNzbWVtcmVxX3Rhc2tfbWVtb3J5X2Fic2VudChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1lbW9yeVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZFxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBuZWl0aGVyIE1lbW9yeSBub3IgTWVtb3J5UmVzZXJ2YXRpb24gYW5kIHRoZSB0YXNrIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mICdtZW1vcnknIG9yICdtZW1vcnlSZXNlcnZhdGlvbicgbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtjbmFtZV0pLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnksIG9yIGdpdmUgdGhlIGNvbnRhaW5lciBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb25cXFwiLFxcblxcdF9wZl9lY3NtZW1yZXFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdGNuYW1lIDo9IG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZW1vcnlSZXNlcnZhdGlvbiBtdXN0IG5vdCBleGNlZWQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1lbW9yeVJlc2VydmF0aW9uIGlzIGEgc29mdCBmbG9vciBhbmQgTWVtb3J5IGEgaGFyZCBjZWlsaW5nOyB0aGUgc2VydmljZVxcbiMgcmVqZWN0cyBhIGZsb29yIGFib3ZlIHRoZSBjZWlsaW5nLiB0b19udW1iZXIgZmFpbHMgKGFuZCB0aGUgcnVsZSBza2lwcykgd2hlblxcbiMgZWl0aGVyIHZhbHVlIGlzIGFic2VudCBvciB1bnJlc29sdmFibGUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlSZXNlcnZhdGlvblxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnlSZXNlcnZhdGlvbiAldiBhYm92ZSBNZW1vcnkgJXY7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIidtZW1vcnknIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICdtZW1vcnlSZXNlcnZhdGlvbidcXFxcXFxcIlxcXCIsIFtjbmFtZSwgbXIsIG1dKSxcXG5cXHRcXFwiTG93ZXIgTWVtb3J5UmVzZXJ2YXRpb24gdG8gYXQgbW9zdCBNZW1vcnksIG9yIHJhaXNlIE1lbW9yeVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkpXFxuXFx0bXIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkpXFxuXFx0bXIgPiBtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIGRpYWdub3N0aWMgcGVyIGR1cGxpY2F0ZWQgbGF0ZXIgb2NjdXJyZW5jZTsgb25seSBsaXRlcmFsIHN0cmluZyBuYW1lc1xcbiMgY2FuIGJlIGNvbXBhcmVkLCBzbyBhIFJlZi12YWx1ZWQgTmFtZSBza2lwcyBpdHMgcGFpcnMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZHVwbGljYXRlLWNvbnRhaW5lci1uYW1lc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5OYW1lXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgbmFtZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cXFxcXFxcIlxcXCIsIFtuYV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IGNvbnRhaW5lciBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGEgZGlzdGluY3QgTmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRuYSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobmEpXFxuXFx0bmEgPT0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTmFtZVxcXCIsIG51bGwpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVwaGVtZXJhbFN0b3JhZ2UgU2l6ZUluR2lCIG11c3QgYmUgMjEtMjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2VwaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWVwaGVtZXJhbHN0b3JhZ2UuaHRtbFxcXCJcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgY2FycmllcyBubyBtaW5pbXVtL21heGltdW0gZm9yIFNpemVJbkdpQiwgc28gMjEtMjAwIGlzXFxuIyBlbmZvcmNlZCBvbmx5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYmVsb3cgMjE7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbGVhc3QgMjFcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQiwgb3IgZHJvcCBFcGhlbWVyYWxTdG9yYWdlIHRvIGtlZXAgdGhlIGRlZmF1bHQgMjAgR2lCXFxcIixcXG5cXHRfcGZfZWNzZXBoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIikpXFxuXFx0cyA8IDIxXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYWJvdmUgMjAwOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJFcGhlbWVyYWxTdG9yYWdlIHNpemUgc2hvdWxkIGJlIGF0IG1vc3QgMjAwXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJVc2UgYSBzaXplIGJldHdlZW4gMjEgYW5kIDIwMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzID4gMjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVzc2VudGlhbC1jb250YWluZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXQgbGVhc3Qgb25lIGNvbnRhaW5lciBtdXN0IGJlIGVzc2VudGlhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFc3NlbnRpYWwgZGVmYXVsdHMgdG8gdHJ1ZSwgc28gdGhlIHJ1bGUgZmlyZXMgb25seSB3aGVuIGV2ZXJ5IGNvbnRhaW5lciBzYXlzXFxuIyBFc3NlbnRpYWw6IGZhbHNlIGV4cGxpY2l0bHkuIEEgY29udGFpbmVyIHdob3NlIEVzc2VudGlhbCBpcyB1bnJlc29sdmFibGUgKG9yXFxuIyBhIG5vbi1ib29sZWFuKSBicmVha3MgdGhlIGBldmVyeWAsIGFuZCB0aGUgcnVsZSBza2lwcyDigJQgYWJzZW5jZSBvZiBhblxcbiMgZXNzZW50aWFsIGNvbnRhaW5lciBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdFxcXCJFdmVyeSBjb250YWluZXIgc2V0cyBFc3NlbnRpYWw6IGZhbHNlOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUYXNrIGRlZmluaXRpb24gZG9lc24ndCBoYXZlIGFueSBlc3NlbnRpYWwgY29udGFpbmVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJNYXJrIGF0IGxlYXN0IG9uZSBjb250YWluZXIgRXNzZW50aWFsOiB0cnVlLCBvciBvbWl0IEVzc2VudGlhbCAoaXQgZGVmYXVsdHMgdG8gdHJ1ZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdGl0ZW1zIDo9IFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBjIGluIGl0ZW1zIHtcXG5cXHRcXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJFc3NlbnRpYWxcXFwiLCBudWxsKSA9PSBmYWxzZVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmUgTmV0d29ya01vZGUgJ2F3c3ZwYydcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NubV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2tfZGVmaW5pdGlvbl9wYXJhbWV0ZXJzLmh0bWwjbmV0d29ya19tb2RlXFxcIlxcblxcbiMgcmVzb2x2ZSgpIGNhbm5vdCB0ZWxsIFxcXCJhYnNlbnRcXFwiIGZyb20gXFxcInVucmVzb2x2YWJsZVxcXCIgKGJvdGggdW5kZWZpbmVkKSwgc28gdHJ1ZVxcbiMgYWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50OyBhIFJlZi12YWx1ZWQgTmV0d29ya01vZGVcXG4jIG5vIGxvbmdlciB0cmlwcyB0aGUgbm90LXNldCBibG9jay5cXG5fcGZfZWNzbm1fYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya01vZGVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmV0d29ya01vZGUgaXMgJyVzJyBidXQgdGFzayBkZWZpbml0aW9ucyByZXF1aXJpbmcgRkFSR0FURSBjb21wYXRpYmlsaXR5IG11c3QgdXNlICdhd3N2cGMnOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25tXSksXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRubSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIilcXG5cXHRpc19zdHJpbmcobm0pXFxuXFx0bm0gIT0gXFxcImF3c3ZwY1xcXCJcXG59XFxuXFxuIyBOZXR3b3JrTW9kZSDmnKrmjIflrprjgafjgoIgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiDjga9cXG4jIFxcXCJGYXJnYXRlIG9ubHkgc3VwcG9ydHMgbmV0d29yayBtb2RlICdhd3N2cGMnLlxcXCIg44Gn5aSx5pWX44GZ44KL77yIMjAyNi0wOS0wMSDlrp8gQVBJIOeiuuiqje+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0XFxcIk5ldHdvcmtNb2RlIGlzIG5vdCBzZXQsIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCBzZXQgaXQgdG8gJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJTZXQgTmV0d29ya01vZGUgdG8gJ2F3c3ZwYydcXFwiLFxcblxcdF9wZl9lY3NubV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cmMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXF1aXJlc0NvbXBhdGliaWxpdGllc1xcXCIpXFxuXFx0aXNfYXJyYXkocmMpXFxuXFx0XFxcIkZBUkdBVEVcXFwiIGluIHJjXFxuXFx0X3BmX2Vjc25tX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGQVJHQVRFIGNvbXBhdGliaWxpdHkgcmVxdWlyZXMgdGFzay1sZXZlbCBDcHUgYW5kIE1lbW9yeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2ZhcmdjbV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjcy10YXNrZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDQ3IGNoZWNrcyB0aGUgQ3B1L01lbW9yeSBwYWlyaW5nIG9ubHkgd2hlbiBib3RoIGFyZSBwcmVzZW50O1xcbiMgbGVhdmluZyBvbmUgb3V0IGVudGlyZWx5IGlzIGNhdWdodCBieSBub3RoaW5nIGJlZm9yZSByZWdpc3RyYXRpb24uIFRydWVcXG4jIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIHBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxuIyBmb3IgdGhlIGlkaW9tKS5cXG5fcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSkgaWYge1xcblxcdHNvbWUgcmMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRyYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXFxuX3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DcHVcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBDcHUgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdjcHUnIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIENwdSAoYW5kIE1lbW9yeSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJDcHVcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIixcXG5cXHRcXFwiUmVxdWlyZXNDb21wYXRpYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5IGlzIG1pc3Npbmc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVxdWlyZXMgdGhhdCAnbWVtb3J5JyBiZSBkZWZpbmVkIGF0IHRoZSB0YXNrIGxldmVsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnkgKGFuZCBDcHUpIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEZhcmdhdGUgY29tYmluYXRpb25zXFxcIixcXG5cXHRfcGZfZWNzZmFyZ2NtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSlcXG5cXHRfcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBcXFwiTWVtb3J5XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1jb2RlZGVwbG95LWxiXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNPREVfREVQTE9ZIGRlcGxveW1lbnQgY29udHJvbGxlciByZXF1aXJlcyBhIGxvYWQgYmFsYW5jZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBGaXJlcyBvbiBhIG1pc3Npbmcga2V5IG9yIGEgcHJlc2VudC1idXQtZW1wdHkgbGlzdDsgYW4gdW5yZXNvbHZhYmxlXFxuIyBMb2FkQmFsYW5jZXJzIHZhbHVlIHN0YXlzIHNpbGVudCAobWFya2VyIG9iamVjdHMgYXJlIFxcXCJwcmVzZW50XFxcIikuXFxuX3BmX2Vjc2NkbGJfbm9uZShuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkxvYWRCYWxhbmNlcnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9lY3NjZGxiX25vbmUobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGxicyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiTG9hZEJhbGFuY2Vyc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkobGJzKVxcblxcdGNvdW50KGxicykgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWNvZGVkZXBsb3ktbGJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb250cm9sbGVyXFxcIixcXG5cXHRcXFwiRGVwbG95bWVudENvbnRyb2xsZXIgaXMgQ09ERV9ERVBMT1kgYnV0IG5vIExvYWRCYWxhbmNlcnMgYXJlIGNvbmZpZ3VyZWQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcInRoZSBzZXJ2aWNlIHJlcXVpcmVzIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBMb2FkQmFsYW5jZXJzIGVudHJ5IHdpdGggYSB0YXJnZXQgZ3JvdXAsIG9yIHVzZSB0aGUgRUNTIGNvbnRyb2xsZXJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb250cm9sbGVyLlR5cGVcXFwiKSA9PSBcXFwiQ09ERV9ERVBMT1lcXFwiXFxuXFx0X3BmX2Vjc2NkbGJfbm9uZShuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLWRhZW1vbi1kZXNpcmVkLWNvdW50XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRBRU1PTiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRvZXMgbm90IGFjY2VwdCBEZXNpcmVkQ291bnRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZXNpcmVkQ291bnQgMCBmYWlscyB0b28gKHN2MDNiKSAtIGFueSBwcmVzZW5jZSBvZiB0aGUga2V5IGlzIHRoZSB2aW9sYXRpb24uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1kYWVtb24tZGVzaXJlZC1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVzaXJlZENvdW50XFxcIixcXG5cXHRcXFwiU2NoZWR1bGluZ1N0cmF0ZWd5IGlzIERBRU1PTiBidXQgRGVzaXJlZENvdW50IGlzIHNldDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGRhZW1vbiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRvZXMgbm90IHN1cHBvcnQgYSBkZXNpcmVkIGNvdW50IGZvciBzZXJ2aWNlc1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiUmVtb3ZlIERlc2lyZWRDb3VudCBmcm9tIERBRU1PTiBzZXJ2aWNlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2NoZWR1bGluZ1N0cmF0ZWd5XFxcIikgPT0gXFxcIkRBRU1PTlxcXCJcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRub3Qgb2JqZWN0LmdldChwcm9wcywgXFxcIkRlc2lyZWRDb3VudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1kZXBsb3ltZW50LXBlcmNlbnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGVwbG95bWVudENvbmZpZ3VyYXRpb24gcGVyY2VudCBib3VuZHMgKG1pbiA8PSAxMDAsIG1heCA+PSAxMDApXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtZGVwbG95bWVudC1wZXJjZW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NaW5pbXVtSGVhbHRoeVBlcmNlbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1pbmltdW1IZWFsdGh5UGVyY2VudCAldiBleGNlZWRzIDEwMDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwibWluaW11bUhlYWx0aHlQZXJjZW50IG11c3QgYmUgYXQgbW9zdCAxMDBcXFxcXFxcIlxcXCIsIFttaW5wXSksXFxuXFx0XFxcIktlZXAgTWluaW11bUhlYWx0aHlQZXJjZW50IGF0IDEwMCBvciBiZWxvd1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdG1pbnAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbmZpZ3VyYXRpb24uTWluaW11bUhlYWx0aHlQZXJjZW50XFxcIikpXFxuXFx0bWlucCA+IDEwMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWRlcGxveW1lbnQtcGVyY2VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbmZpZ3VyYXRpb24uTWF4aW11bVBlcmNlbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1heGltdW1QZXJjZW50ICV2IGlzIGJlbG93IDEwMDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwibWF4aW11bVBlcmNlbnQgbXVzdCBiZSBhdCBsZWFzdCAxMDBcXFxcXFxcIlxcXCIsIFttYXhwXSksXFxuXFx0XFxcIktlZXAgTWF4aW11bVBlcmNlbnQgYXQgMTAwIG9yIGFib3ZlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0bWF4cCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NYXhpbXVtUGVyY2VudFxcXCIpKVxcblxcdG1heHAgPCAxMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1mYXJnYXRlLXBsYWNlbWVudFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQbGFjZW1lbnQgY29uc3RyYWludHMgYW5kIHN0cmF0ZWdpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gRkFSR0FURVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWZhcmdhdGUtcGxhY2VtZW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2tleV0pLFxcblxcdHNwcmludGYoXFxcIiVzIGlzIHNldCBidXQgdGhlIEZBUkdBVEUgbGF1bmNoIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCB0YXNrIHBsYWNlbWVudDsgQ3JlYXRlU2VydmljZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtrZXldKSxcXG5cXHRcXFwiUmVtb3ZlIHBsYWNlbWVudCBjb25zdHJhaW50cy9zdHJhdGVnaWVzIGZyb20gRmFyZ2F0ZSBzZXJ2aWNlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTGF1bmNoVHlwZVxcXCIpID09IFxcXCJGQVJHQVRFXFxcIlxcblxcdHNvbWUga2V5IGluIHtcXFwiUGxhY2VtZW50Q29uc3RyYWludHNcXFwiLCBcXFwiUGxhY2VtZW50U3RyYXRlZ2llc1xcXCJ9XFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBba2V5XSkpXSkgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbGF1bmNoLXR5cGUtY2FwYWNpdHktcHJvdmlkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGF1bmNoVHlwZSBhbmQgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5IGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1sYXVuY2gtdHlwZS1jYXBhY2l0eS1wcm92aWRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMYXVuY2hUeXBlICclcycgYW5kIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneSBjYW5ub3QgYm90aCBiZSBzZXQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIlNwZWNpZnlpbmcgYm90aCBhIGxhdW5jaCB0eXBlIGFuZCBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLCBbbHRdKSxcXG5cXHRcXFwiUmVtb3ZlIExhdW5jaFR5cGUgb3IgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0bHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5MYXVuY2hUeXBlXFxcIilcXG5cXHRpc19zdHJpbmcobHQpXFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneVxcXCIpXSkgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbGItdGFyZ2V0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGxvYWQgYmFsYW5jZXIgZW50cnkgdGFrZXMgZWl0aGVyIFRhcmdldEdyb3VwQXJuIG9yIExvYWRCYWxhbmNlck5hbWUsIG5vdCBib3RoXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtbGItdGFyZ2V0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2Vyc1xcXCIsXFxuXFx0XFxcIkEgTG9hZEJhbGFuY2VycyBlbnRyeSBzZXRzIGJvdGggVGFyZ2V0R3JvdXBBcm4gYW5kIExvYWRCYWxhbmNlck5hbWU7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcImxvYWRCYWxhbmNlck5hbWUgYW5kIHRhcmdldEdyb3VwQXJuIGNhbm5vdCBib3RoIGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSBvZiBUYXJnZXRHcm91cEFybiAoQUxCL05MQikgb3IgTG9hZEJhbGFuY2VyTmFtZSAoQ0xCKSBwZXIgZW50cnlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvYWRCYWxhbmNlcnNcXFwiKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0bm90IG9iamVjdC5nZXQoZW50cnksIFxcXCJUYXJnZXRHcm91cEFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRub3Qgb2JqZWN0LmdldChlbnRyeSwgXFxcIkxvYWRCYWxhbmNlck5hbWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQ1Mgc2VydmljZSBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAobWF4IDI1NSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiU2VydmljZU5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDbHVzdGVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLW5ldHdvcmstY29uZmlnLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTmV0d29ya0NvbmZpZ3VyYXRpb24gcmVxdWlyZXMgYW4gYXdzdnBjIHRhc2sgZGVmaW5pdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIixcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lIHNoaXBzIEUzMDUyIGZvciB0aGUgaW52ZXJzZSAoYXdzdnBjIHRhc2sgZGVmaW5pdGlvbiB3aXRob3V0XFxuIyBOZXR3b3JrQ29uZmlndXJhdGlvbik7IHRoaXMgZGlyZWN0aW9uIGlzIHVuZ3VhcmRlZC4gT25seSBhbiBleHBsaWNpdFxcbiMgbm9uLWF3c3ZwYyBOZXR3b3JrTW9kZSBmaXJlcyAtIHRoZSBhYnNlbnQtbW9kZSBkZWZhdWx0IGlzIHVuYmVuY2hlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLW5ldHdvcmstY29uZmlnLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtDb25maWd1cmF0aW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJOZXR3b3JrQ29uZmlndXJhdGlvbiBpcyBzZXQgYnV0IHRoZSByZWZlcmVuY2VkIHRhc2sgZGVmaW5pdGlvbiB1c2VzIE5ldHdvcmtNb2RlICclcyc7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIk5ldHdvcmsgQ29uZmlndXJhdGlvbiBpcyBub3QgdmFsaWQgZm9yIHRoZSBnaXZlbiBuZXR3b3JrTW9kZSBvZiB0aGlzIHRhc2sgZGVmaW5pdGlvbi5cXFxcXFxcIlxcXCIsIFtubV0pLFxcblxcdFxcXCJVc2UgYW4gYXdzdnBjIHRhc2sgZGVmaW5pdGlvbiwgb3IgZHJvcCBOZXR3b3JrQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG5vdCBvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0dGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0dGQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0bm0gOj0gcmVzb2x2ZSh0ZCwgXFxcIlByb3BlcnRpZXMuTmV0d29ya01vZGVcXFwiKVxcblxcdGlzX3N0cmluZyhubSlcXG5cXHRubSAhPSBcXFwiYXdzdnBjXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLXBsYXRmb3JtLXZlcnNpb24tZWMyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBsYXRmb3JtVmVyc2lvbiBpcyBub3QgYWxsb3dlZCB3aXRoIHRoZSBFQzIgbGF1bmNoIHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1wbGF0Zm9ybS12ZXJzaW9uLWVjMlxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGxhdGZvcm1WZXJzaW9uXFxcIixcXG5cXHRcXFwiTGF1bmNoVHlwZSBpcyBFQzIgYnV0IFBsYXRmb3JtVmVyc2lvbiBpcyBzZXQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG11c3QgYmUgbnVsbCB3aGVuIHNwZWNpZnlpbmcgYW4gRUMyIGxhdW5jaCB0eXBlXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgUGxhdGZvcm1WZXJzaW9uIChpdCBhcHBsaWVzIHRvIEZhcmdhdGUgb25seSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFR5cGVcXFwiKSA9PSBcXFwiRUMyXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG5vdCBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUGxhdGZvcm1WZXJzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy10YXNrZGVmLWZhbWlseVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXNrIGRlZmluaXRpb24gRmFtaWx5IGFsbG93cyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtdGFza2RlZi1mYW1pbHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZhbWlseVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRmFtaWx5ICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAyNTUgY2hhcmFjdGVyc1xcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAyNTUgY2hhcmFjdGVyc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmFtaWx5XFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLWFsYi1zdWJuZXQtY291bnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBcHBsaWNhdGlvbiBsb2FkIGJhbGFuY2VycyBuZWVkIGF0IGxlYXN0IHR3byBzdWJuZXRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lbGJzY19hbGIobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJUeXBlXFxcIiwgXFxcImFwcGxpY2F0aW9uXFxcIikgPT0gXFxcImFwcGxpY2F0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWFsYi1zdWJuZXQtY291bnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN1Ym5ldHNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBhcHBsaWNhdGlvbiBsb2FkIGJhbGFuY2VyIGxpc3RzICV2IHN1Ym5ldChzKTsgRUxCIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBpbiBkaWZmZXJlbnQgQVpzIChcXFxcXFxcIkF0IGxlYXN0IHR3byBzdWJuZXRzIGluIHR3byBkaWZmZXJlbnQgQXZhaWxhYmlsaXR5IFpvbmVzIG11c3QgYmUgc3BlY2lmaWVkXFxcXFxcXCIpXFxcIiwgW2NvdW50KHN1YnMpXSksXFxuXFx0XFxcIkxpc3QgdHdvIG9yIG1vcmUgc3VibmV0cyBmcm9tIGRpZmZlcmVudCBBdmFpbGFiaWxpdHkgWm9uZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTG9hZEJhbGFuY2VyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0X3BmX2VsYnNjX2FsYihuYW1lKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHN1YnMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlN1Ym5ldHNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KHN1YnMpXFxuXFx0Y291bnQoc3VicykgPCAyXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItYXBwLWNvb2tpZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiYXBwX2Nvb2tpZSBzdGlja2luZXNzIHJlcXVpcmVzIGEgY29va2llIG5hbWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxiYWNuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9zdGlja3ktc2Vzc2lvbnMuaHRtbFxcXCJcXG5cXG5fcGZfZWxiYWNuX2F0dHIobmFtZSwga2V5KSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRvYmplY3QuZ2V0KGVudHJ5LCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IGtleVxcblxcdHYgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG59XFxuXFxuX3BmX2VsYmFjbl9oYXMobmFtZSwga2V5KSBpZiBfcGZfZWxiYWNuX2F0dHIobmFtZSwga2V5KVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItYXBwLWNvb2tpZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiLFxcblxcdFxcXCJzdGlja2luZXNzLnR5cGUgYXBwX2Nvb2tpZSBoYXMgbm8gc3RpY2tpbmVzcy5hcHBfY29va2llLmNvb2tpZV9uYW1lIChcXFxcXFxcIllvdSBtdXN0IHNldCBhbiBhcHBsaWNhdGlvbiBjb29raWUgbmFtZSB0byBlbmFibGUgc3RpY2tpbmVzcyBvZiB0eXBlICdhcHBfY29va2llJ1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIkFkZCB0aGUgc3RpY2tpbmVzcy5hcHBfY29va2llLmNvb2tpZV9uYW1lIGF0dHJpYnV0ZVxcXCIsXFxuXFx0X3BmX2VsYmFjbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdF9wZl9lbGJhY25fYXR0cihuYW1lLCBcXFwic3RpY2tpbmVzcy5lbmFibGVkXFxcIikgPT0gXFxcInRydWVcXFwiXFxuXFx0X3BmX2VsYmFjbl9hdHRyKG5hbWUsIFxcXCJzdGlja2luZXNzLnR5cGVcXFwiKSA9PSBcXFwiYXBwX2Nvb2tpZVxcXCJcXG5cXHRub3QgX3BmX2VsYmFjbl9oYXMobmFtZSwgXFxcInN0aWNraW5lc3MuYXBwX2Nvb2tpZS5jb29raWVfbmFtZVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItaGMtdGltZW91dC1pbnRlcnZhbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhlYWx0aCBjaGVjayB0aW1lb3V0IG11c3QgYmUgc3RyaWN0bHkgc21hbGxlciB0aGFuIHRoZSBpbnRlcnZhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXF1YWxpdHkgaXMgcmVqZWN0ZWQgdG9vIChiZW5jaGVkKTogdGhlIHJlcXVpcmVtZW50IGlzIHN0cmljdGx5IGxlc3MuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1oYy10aW1lb3V0LWludGVydmFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5IZWFsdGhDaGVja1RpbWVvdXRTZWNvbmRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIZWFsdGhDaGVja1RpbWVvdXRTZWNvbmRzICV2IGlzIG5vdCBzbWFsbGVyIHRoYW4gSGVhbHRoQ2hlY2tJbnRlcnZhbFNlY29uZHMgJXYgKFxcXFxcXFwiSGVhbHRoIGNoZWNrIHRpbWVvdXQgJyV2JyBtdXN0IGJlIHNtYWxsZXIgdGhhbiB0aGUgaW50ZXJ2YWwgJyV2J1xcXFxcXFwiKVxcXCIsIFt0LCBpLCB0LCBpXSksXFxuXFx0XFxcIktlZXAgdGhlIHRpbWVvdXQgc3RyaWN0bHkgYmVsb3cgdGhlIGludGVydmFsXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrVGltZW91dFNlY29uZHNcXFwiKSlcXG5cXHRpIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrSW50ZXJ2YWxTZWNvbmRzXFxcIikpXFxuXFx0dCA+PSBpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItbGFtYmRhLXRhcmdldC1wcm90b2NvbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYSB0YXJnZXQgZ3JvdXBzIGNhbm5vdCBzcGVjaWZ5IFByb3RvY29sXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYW1iZGEtdGFyZ2V0LXByb3RvY29sXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIsXFxuXFx0XFxcIlRhcmdldFR5cGUgbGFtYmRhIGNhbm5vdCB0YWtlIFByb3RvY29sIChcXFxcXFxcIlByb3RvY29sIGNhbm5vdCBiZSBzcGVjaWZpZWQgZm9yIHRhcmdldCBncm91cHMgd2l0aCB0YXJnZXQgdHlwZSAnbGFtYmRhJ1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQcm90b2NvbCBmcm9tIHRoZSBsYW1iZGEgdGFyZ2V0IGdyb3VwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldFR5cGVcXFwiKSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJQcm90b2NvbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBTEIgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaWRsZV90aW1lb3V0X291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPiA0MDAwXFxuXFxuX3BmX25vbl9hbGIobmFtZSkgaWYge1xcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIilcXG5cXHR0ICE9IFxcXCJhcHBsaWNhdGlvblxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXR0cmlidXRlcy4lZC5WYWx1ZVxcXCIsIFtpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQwMDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDQwMDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2FwcGxpY2F0aW9uLWxvYWQtYmFsYW5jZXJzLmh0bWwjY29ubmVjdGlvbi1pZGxlLXRpbWVvdXRcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0bm90IF9wZl9ub25fYWxiKG5hbWUpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9pZGxlX3RpbWVvdXRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTG9hZCBiYWxhbmNlciBuYW1lcyBhcmUgYXQgbW9zdCAzMiBhbHBoYW51bWVyaWMvaHlwaGVuIGNoYXJzIGFuZCBjYW5ub3QgYmVnaW4gd2l0aCBpbnRlcm5hbC0gb3IgYSBoeXBoZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VsYm5hbWVfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTG9hZEJhbGFuY2VyLmh0bWxcXFwiXFxuXFxuX3BmX2VsYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuLCB3aHldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0c3RhcnRzd2l0aChuLCBcXFwiaW50ZXJuYWwtXFxcIilcXG5cXHR3aHkgOj0gXFxcImNhbm5vdCBiZWdpbiB3aXRoICdpbnRlcm5hbC0nXFxcIlxcbn1cXG5cXG5fcGZfZWxibmFtZV9iYWQgY29udGFpbnMgW25hbWUsIG4sIHdoeV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRlbmRzd2l0aChuLCBcXFwiLVxcXCIpXFxuXFx0d2h5IDo9IFxcXCJjYW5ub3QgZW5kIHdpdGggYSBoeXBoZW4oLSlcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdHN0YXJ0c3dpdGgobiwgXFxcIi1cXFwiKVxcblxcdHdoeSA6PSBcXFwiY2Fubm90IGJlZ2luIHdpdGggYSBoeXBoZW4oLSlcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdGNvdW50KG4pID4gMzJcXG5cXHR3aHkgOj0gXFxcImNhbm5vdCBiZSBsb25nZXIgdGhhbiAnMzInIGNoYXJhY3RlcnNcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXltBLVphLXowLTktXSokYCwgbilcXG5cXHR3aHkgOj0gXFxcImNhbiBvbmx5IGNvbnRhaW4gY2hhcmFjdGVycyB0aGF0IGFyZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgaHlwaGVucygtKVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgbG9hZCBiYWxhbmNlciBuYW1lICclcycgJXM7IEVMQiByZWplY3RzIHRoZSBjcmVhdGUgY2FsbFxcXCIsIFtuLCB3aHldKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBsb2FkIGJhbGFuY2VyIHRvIGF0IG1vc3QgMzIgYWxwaGFudW1lcmljIG9yIGh5cGhlbiBjaGFyYWN0ZXJzLCB3aXRob3V0IGEgbGVhZGluZy90cmFpbGluZyBoeXBoZW4gb3IgdGhlIHJlc2VydmVkIGludGVybmFsLSBwcmVmaXhcXFwiLFxcblxcdF9wZl9lbGJuYW1lX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIG4sIHdoeV0gaW4gX3BmX2VsYm5hbWVfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItbGlzdGVuZXItcHJvdG9jb2wtbGItdHlwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxpc3RlbmVyIHByb3RvY29scyBtdXN0IG1hdGNoIHRoZSBsb2FkIGJhbGFuY2VyIHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcIixcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFsbG93LXNldHMgdmVyYmF0aW0gZnJvbSB0aGUgdHdvIGJlbmNoZWQgc2VydmljZSBlcnJvcnMuXFxuX3BmX2VsYmxwdF9hbGxvdyA6PSB7XFxcImFwcGxpY2F0aW9uXFxcIjoge1xcXCJIVFRQXFxcIiwgXFxcIkhUVFBTXFxcIn0sIFxcXCJuZXR3b3JrXFxcIjoge1xcXCJUQ1BcXFwiLCBcXFwiUVVJQ1xcXCIsIFxcXCJUQ1BfUVVJQ1xcXCIsIFxcXCJVRFBcXFwiLCBcXFwiVENQX1VEUFxcXCIsIFxcXCJUTFNcXFwifX1cXG5cXG5fcGZfZWxibHB0X3R5cGUobGIpIDo9IHQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tsYl0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHR0IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUeXBlXFxcIiwgXFxcImFwcGxpY2F0aW9uXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1saXN0ZW5lci1wcm90b2NvbC1sYi10eXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTGlzdGVuZXIgcHJvdG9jb2wgJyVzJyBpcyBub3QgdmFsaWQgZm9yIGEgJXMgbG9hZCBiYWxhbmNlciAoYWxsb3dlZDogJXYpXFxcIiwgW3Byb3RvLCB0LCBhbGxvd10pLFxcblxcdFxcXCJVc2UgSFRUUC9IVFRQUyBvbiBhcHBsaWNhdGlvbiBMQnMgYW5kIFRDUC9VRFAvVExTL1FVSUMgdmFyaWFudHMgb24gbmV0d29yayBMQnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTGlzdGVuZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcXFwiKVxcblxcdGxiIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXJuXFxcIilcXG5cXHRsYiBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcXFwiKVxcblxcdHQgOj0gX3BmX2VsYmxwdF90eXBlKGxiKVxcblxcdGFsbG93IDo9IF9wZl9lbGJscHRfYWxsb3dbdF1cXG5cXHRwcm90byA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sXFxcIilcXG5cXHRpc19zdHJpbmcocHJvdG8pXFxuXFx0bm90IHByb3RvIGluIGFsbG93XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItcnVsZS1wcmlvcml0eS11bmlxdWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMaXN0ZW5lciBydWxlcyBvbiB0aGUgc2FtZSBsaXN0ZW5lciBtdXN0IGhhdmUgZGlzdGluY3QgcHJpb3JpdGllc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIHJlc29sdmUoKSB0dXJucyBhIFJlZi9HZXRBdHQgdG8gYSBzaWJsaW5nIGxpc3RlbmVyIGludG8gaXRzIGxvZ2ljYWxcXG4jIGlkLCBzbyBib3RoIFJlZi13aXJlZCBhbmQgaWRlbnRpY2FsLWxpdGVyYWwgTGlzdGVuZXJBcm5zIGNvbXBhcmUgZXF1YWwuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1ydWxlLXByaW9yaXR5LXVuaXF1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIHIyLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByaW9yaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmlvcml0eSAldiBpcyBhbHNvIHVzZWQgYnkgJyVzJyBvbiB0aGUgc2FtZSBsaXN0ZW5lciAoXFxcXFxcXCJQcmlvcml0eSAnJXYnIGlzIGN1cnJlbnRseSBpbiB1c2VcXFxcXFxcIilcXFwiLCBbcDEsIHIxLCBwMV0pLFxcblxcdFxcXCJHaXZlIGVhY2ggcnVsZSBvbiBhIGxpc3RlbmVyIGEgZGlzdGluY3QgcHJpb3JpdHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUnVsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgcjEgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlXFxcIilcXG5cXHRzb21lIHIyIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyUnVsZVxcXCIpXFxuXFx0cjEgPCByMlxcblxcdGwxIDo9IHJlc29sdmUocjEsIFxcXCJQcm9wZXJ0aWVzLkxpc3RlbmVyQXJuXFxcIilcXG5cXHRsMiA6PSByZXNvbHZlKHIyLCBcXFwiUHJvcGVydGllcy5MaXN0ZW5lckFyblxcXCIpXFxuXFx0bDEgPT0gbDJcXG5cXHRwMSA6PSB0b19udW1iZXIocmVzb2x2ZShyMSwgXFxcIlByb3BlcnRpZXMuUHJpb3JpdHlcXFwiKSlcXG5cXHRwMiA6PSB0b19udW1iZXIocmVzb2x2ZShyMiwgXFxcIlByb3BlcnRpZXMuUHJpb3JpdHlcXFwiKSlcXG5cXHRwMSA9PSBwMlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXN0aWNraW5lc3MtdHlwZS1wcm90b2NvbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN0aWNraW5lc3MgdHlwZSBsYl9jb29raWUgbmVlZHMgYW4gSFRUUC1wcm90b2NvbCB0YXJnZXQgZ3JvdXAsIHNvdXJjZV9pcCBhIFRDUCBvbmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxic3RwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9zdGlja3ktc2Vzc2lvbnMuaHRtbFxcXCJcXG5cXG5fcGZfZWxic3RwX2F0dHIobmFtZSwga2V5KSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRvYmplY3QuZ2V0KGVudHJ5LCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IGtleVxcblxcdHYgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG59XFxuXFxuIyBPbmx5IHRoZSB0d28gYmVuY2hlZCBwYWlycyBhcmUgY2xhaW1lZC5cXG5fcGZfZWxic3RwX2JhZChuYW1lKSA6PSBbXFxcImxiX2Nvb2tpZVxcXCIsIFxcXCJUQ1BcXFwiXSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIpID09IFxcXCJUQ1BcXFwiXFxuXFx0X3BmX2VsYnN0cF9hdHRyKG5hbWUsIFxcXCJzdGlja2luZXNzLnR5cGVcXFwiKSA9PSBcXFwibGJfY29va2llXFxcIlxcbn1cXG5cXG5fcGZfZWxic3RwX2JhZChuYW1lKSA6PSBbXFxcInNvdXJjZV9pcFxcXCIsIFxcXCJIVFRQXFxcIl0gaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG5cXHRfcGZfZWxic3RwX2F0dHIobmFtZSwgXFxcInN0aWNraW5lc3MudHlwZVxcXCIpID09IFxcXCJzb3VyY2VfaXBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItc3RpY2tpbmVzcy10eXBlLXByb3RvY29sXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlN0aWNraW5lc3MgdHlwZSAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRhcmdldCBncm91cHMgd2l0aCB0aGUgJXMgcHJvdG9jb2xcXFwiLCBbcGFpclswXSwgcGFpclsxXV0pLFxcblxcdFxcXCJVc2Ugc291cmNlX2lwIHN0aWNraW5lc3MgZm9yIFRDUCB0YXJnZXQgZ3JvdXBzIGFuZCBjb29raWUgc3RpY2tpbmVzcyBmb3IgSFRUUCBvbmVzXFxcIixcXG5cXHRfcGZfZWxic3RwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0cGFpciA6PSBfcGZfZWxic3RwX2JhZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRjcC1oZWFsdGgtY2hlY2stcGF0aFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRDUCBoZWFsdGggY2hlY2tzIGNhbm5vdCB0YWtlIGEgaGVhbHRoIGNoZWNrIHBhdGhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxidGNocF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVUYXJnZXRHcm91cC5odG1sXFxcIlxcblxcbl9wZl9lbGJ0Y2hwX3RjcF9oYyhuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrUHJvdG9jb2xcXFwiKSA9PSBcXFwiVENQXFxcIlxcblxcbiMgSGVhbHRoQ2hlY2tQcm90b2NvbCBkZWZhdWx0cyB0byB0aGUgdGFyZ2V0IGdyb3VwIHByb3RvY29sIChiZW5jaGVkIHZpYSBlMDRiKS5cXG5fcGZfZWxidGNocF90Y3BfaGMobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJIZWFsdGhDaGVja1Byb3RvY29sXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xcXFwiKSA9PSBcXFwiVENQXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRjcC1oZWFsdGgtY2hlY2stcGF0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tQYXRoXFxcIixcXG5cXHRcXFwiVGhlIGVmZmVjdGl2ZSBoZWFsdGggY2hlY2sgcHJvdG9jb2wgaXMgVENQLCB3aGljaCBjYW5ub3QgdGFrZSBIZWFsdGhDaGVja1BhdGggKFxcXFxcXFwiSGVhbHRoIGNoZWNrIHBhdGhzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBUQ1AgaGVhbHRoIGNoZWNrc1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBIZWFsdGhDaGVja1BhdGgsIG9yIHVzZSBhbiBIVFRQL0hUVFBTIGhlYWx0aCBjaGVjayBwcm90b2NvbFxcXCIsXFxuXFx0X3BmX2VsYnRjaHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRfcGZfZWxidGNocF90Y3BfaGMobmFtZSlcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiSGVhbHRoQ2hlY2tQYXRoXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRnLWRlcmVnaXN0cmF0aW9uLWRlbGF5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZXJlZ19kZWxheV9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfZGVyZWdfZGVsYXlfb3V0KG4pIGlmIG4gPiAzNjAwXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi10Zy1kZXJlZ2lzdHJhdGlvbi1kZWxheS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXMuJWQuVmFsdWVcXFwiLCBbaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcImRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM2MDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyB0byBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMzYwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vZWRpdC10YXJnZXQtZ3JvdXAtYXR0cmlidXRlcy5odG1sI2RlcmVnaXN0cmF0aW9uLWRlbGF5XFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiKVxcblxcdGF0dHIgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChhdHRyKVxcblxcdG9iamVjdC5nZXQoYXR0ciwgXFxcIktleVxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzXFxcIlxcblxcdG51bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChhdHRyLCBcXFwiVmFsdWVcXFwiLCBudWxsKSlcXG5cXHRfcGZfZGVyZWdfZGVsYXlfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIG5hbWVzIGFyZSBhdCBtb3N0IDMyIGFscGhhbnVtZXJpYy9oeXBoZW4gY2hhcnMgYW5kIGNhbm5vdCBzdGFydCBvciBlbmQgd2l0aCBhIGh5cGhlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl90Z25hbWVfYmFkKG4pIDo9IFxcXCJjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMzIgY2hhcmFjdGVyc1xcXCIgaWYgY291bnQobikgPiAzMlxcblxcbl9wZl90Z25hbWVfYmFkKG4pIDo9IFxcXCJtYXkgdXNlIG9ubHkgYWxwaGFudW1lcmljcyBhbmQgaHlwaGVucywgYW5kIGNhbm5vdCBzdGFydCBvciBlbmQgd2l0aCBhIGh5cGhlblxcXCIgaWYge1xcblxcdGNvdW50KG4pIDw9IDMyXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW0EtWmEtejAtOV0oW0EtWmEtejAtOS1dKltBLVphLXowLTldKT8kYCwgbilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi10Zy1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgdGFyZ2V0IGdyb3VwIG5hbWUgJyVzJyAlczsgRUxCIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsXFxcIiwgW24sIHdoeV0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIHRhcmdldCBncm91cCB0byBhdCBtb3N0IDMyIGFscGhhbnVtZXJpYyBvciBoeXBoZW4gY2hhcmFjdGVycywgbm90IHN0YXJ0aW5nIG9yIGVuZGluZyB3aXRoIGEgaHlwaGVuXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0d2h5IDo9IF9wZl90Z25hbWVfYmFkKG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgbXVzdCBiZSAwIG9yIGJldHdlZW4gMzAgYW5kIDkwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiB7XFxuXFx0biA+IDBcXG5cXHRuIDwgMzBcXG59XFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIG4gPiA5MDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRnLXNsb3ctc3RhcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgaXMgJXYgYnV0IG11c3QgYmUgMCAoZGlzYWJsZWQpIG9yIGJldHdlZW4gMzAgYW5kIDkwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgc2xvd19zdGFydC5kdXJhdGlvbl9zZWNvbmRzIHRvIDAgb3IgYSB2YWx1ZSBiZXR3ZWVuIDMwIGFuZCA5MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2VkaXQtdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXMuaHRtbCNzbG93LXN0YXJ0LW1vZGVcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0YXR0ciA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGF0dHIpXFxuXFx0b2JqZWN0LmdldChhdHRyLCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9zbG93X3N0YXJ0X291dChudW0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLWlucHV0LXRyYW5zZm9ybWVyLXBsYWNlaG9sZGVyc1wiLFxuICAgIFwic2VydmljZVwiOiBcImV2ZW50c1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbnB1dFRlbXBsYXRlIHBsYWNlaG9sZGVycyBtdXN0IGJlIGRlY2xhcmVkIGluIElucHV0UGF0aHNNYXBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFdmVyeSA8cGxhY2Vob2xkZXI+IGluIElucHV0VGVtcGxhdGUgbXVzdCBiZSBkZWNsYXJlZCBpbiBJbnB1dFBhdGhzTWFwLFxcbiMgZXhjZXB0IHRoZSBhd3MuZXZlbnRzLiogcHJlZGVmaW5lZCB2YXJpYWJsZXMuIEFuIElucHV0UGF0aHNNYXAgdGhhdCBpcyBhblxcbiMgdW5yZXNvbHZhYmxlIGludHJpbnNpYyAobm9ybWFsaXplZCB3aXRoIF9fLXByZWZpeGVkIG1hcmtlciBrZXlzKSBtYWtlcyB0aGVcXG4jIGRlY2xhcmVkIHNldCB1bmtub3dhYmxlLCBzbyB0aGUgcnVsZSBza2lwcy5cXG5fcGZfZXZpdHBfcGxhY2Vob2xkZXJzKHRtcGwpIDo9IHtzdWJzdHJpbmcoZiwgMSwgY291bnQoZikgLSAyKSB8IHNvbWUgZiBpbiByZWdleC5maW5kX24oYDwoW0EtWmEtejAtOV8uLV0rKT5gLCB0bXBsLCAtMSl9XFxuXFxuX3BmX2V2aXRwX3BsYWluX21hcChwbSkgaWYge1xcblxcdGlzX29iamVjdChwbSlcXG5cXHRldmVyeSBrLCBfIGluIHBtIHtcXG5cXHRcXHRub3Qgc3RhcnRzd2l0aChrLCBcXFwiX19cXFwiKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1ldmVudHMtaW5wdXQtdHJhbnNmb3JtZXItcGxhY2Vob2xkZXJzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRhcmdldHMuJWQuSW5wdXRUcmFuc2Zvcm1lci5JbnB1dFRlbXBsYXRlXFxcIiwgW3QuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJJbnB1dFRlbXBsYXRlIHVzZXMgPCVzPiBidXQgSW5wdXRQYXRoc01hcCBkb2VzIG5vdCBkZWNsYXJlIGl0OyBQdXRUYXJnZXRzIGZhaWxzIHdpdGggXFxcXFxcXCJJbnB1dFRlbXBsYXRlIGZvciB0YXJnZXQgJXMgY29udGFpbnMgaW52YWxpZCBwbGFjZWhvbGRlciAlc1xcXFxcXFwiXFxcIiwgW3AsIHRpZCwgcF0pLFxcblxcdHNwcmludGYoXFxcIkFkZCAnJXMnIHRvIElucHV0UGF0aHNNYXAsIG9yIHJlbW92ZSB0aGUgcGxhY2Vob2xkZXIgZnJvbSB0aGUgdGVtcGxhdGVcXFwiLCBbcF0pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L3VzZXJndWlkZS9lYi10cmFuc2Zvcm0tdGFyZ2V0LWlucHV0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkV2ZW50czo6UnVsZVxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRzXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRpdCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJJbnB1dFRyYW5zZm9ybWVyXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoaXQpXFxuXFx0dG1wbCA6PSBvYmplY3QuZ2V0KGl0LCBcXFwiSW5wdXRUZW1wbGF0ZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRtcGwpXFxuXFx0cG0gOj0gb2JqZWN0LmdldChpdCwgXFxcIklucHV0UGF0aHNNYXBcXFwiLCB7fSlcXG5cXHRfcGZfZXZpdHBfcGxhaW5fbWFwKHBtKVxcblxcdHNvbWUgcCBpbiBfcGZfZXZpdHBfcGxhY2Vob2xkZXJzKHRtcGwpXFxuXFx0bm90IHN0YXJ0c3dpdGgocCwgXFxcImF3cy5ldmVudHMuXFxcIilcXG5cXHRub3QgcG1bcF1cXG5cXHR0aWQgOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiSWRcXFwiLCBcXFwiPHRhcmdldD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWV2ZW50cy1wYXR0ZXJuLWVtcHR5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIGVtcHR5IEV2ZW50UGF0dGVybiBjb3VudHMgYXMgbm8gcGF0dGVybiBhdCBhbGxcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRjMwNTggZmlyZXMgd2hlbiB0aGUgRXZlbnRQYXR0ZXJuIEtFWSBpcyBhYnNlbnQsIGJ1dCBhbiBlbXB0eVxcbiMgb2JqZWN0IHBhc3NlcyB0aGUgc2NoZW1hIGFuZCB0aGUgaGFuZGxlciB0aGVuIHRyZWF0cyBpdCBhcyBubyBwYXR0ZXJuIGF0XFxuIyBhbGwuIEZpcmVzIG9ubHkgd2hlbiBTY2hlZHVsZUV4cHJlc3Npb24gaXMgYWxzbyBsaXRlcmFsbHkgYWJzZW50IOKAlCB0aGVcXG4jIGJlbmNoLXZlcmlmaWVkIHNoYXBlIChhYnNlbmNlIHByb3ZlbiB2aWEgaW5wdXQucmVzb3VyY2VzLCBzZWUgQUdFTlRTLm1kKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1wYXR0ZXJuLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm5cXFwiLFxcblxcdFxcXCJFdmVudFBhdHRlcm4gaXMgYW4gZW1wdHkgb2JqZWN0LCB3aGljaCB0aGUgaGFuZGxlciB0cmVhdHMgYXMgbm8gcGF0dGVybjsgUHV0UnVsZSBmYWlscyB3aXRoIFxcXFxcXFwiUGFyYW1ldGVyKHMpIEV2ZW50UGF0dGVybiBvciBTY2hlZHVsZUV4cHJlc3Npb24gbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkdpdmUgRXZlbnRQYXR0ZXJuIGF0IGxlYXN0IG9uZSBtYXRjaGVyIChlLmcuIHNvdXJjZSksIG9yIHVzZSBTY2hlZHVsZUV4cHJlc3Npb24gaW5zdGVhZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvdXNlcmd1aWRlL2ViLWV2ZW50LXBhdHRlcm5zLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkV2ZW50czo6UnVsZVxcXCIpXFxuXFx0ZXAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm5cXFwiKVxcblxcdGlzX29iamVjdChlcClcXG5cXHRjb3VudChlcCkgPT0gMFxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJTY2hlZHVsZUV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLXBhdHRlcm4tc2NhbGFyLXZhbHVlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV2ZW50IHBhdHRlcm4gdmFsdWVzIG11c3QgYmUgYXJyYXlzIG9yIG9iamVjdHMsIG5vdCBzY2FsYXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkV2ZW50czo6UnVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9ldnBzdl9zY2FsYXIodikgaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX2V2cHN2X3NjYWxhcih2KSBpZiBpc19udW1iZXIodilcXG5cXG5fcGZfZXZwc3Zfc2NhbGFyKHYpIGlmIGlzX2Jvb2xlYW4odilcXG5cXG4jIEV2ZXJ5IG1hdGNoZXIgaW4gYW4gZXZlbnQgcGF0dGVybiBtdXN0IGJlIGFuIGFycmF5IChvciBhbiBvYmplY3QgaG9sZGluZ1xcbiMgb3BlcmF0b3JzKTsgYSBiYXJlIHNjYWxhciBpcyByZWplY3RlZCBwZXIga2V5LiBPbmx5IHRoZSB0b3AgbGV2ZWwgaXNcXG4jIGNoZWNrZWQg4oCUIHRoYXQgaXMgdGhlIGJlbmNoLXZlcmlmaWVkIHNjb3BlLCBhbmQgaXQgZG9kZ2VzIG9wZXJhdG9yIG9iamVjdHNcXG4jIGxpa2Uge1xcXCJwcmVmaXhcXFwiOiBcXFwiLi4uXFxcIn0gdGhhdCBsZWdhbGx5IGNhcnJ5IHNjYWxhcnMgZGVlcGVyIGRvd24uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1ldmVudHMtcGF0dGVybi1zY2FsYXItdmFsdWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRXZlbnRQYXR0ZXJuLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJFdmVudFBhdHRlcm4ga2V5ICclcycgaG9sZHMgYSBiYXJlIHNjYWxhcjsgUHV0UnVsZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJFdmVudCBwYXR0ZXJuIGlzIG5vdCB2YWxpZC4gUmVhc29uOiBcXFxcXFxcXFxcXFxcXFwiJXNcXFxcXFxcXFxcXFxcXFwiIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5XFxcXFxcXCJcXFwiLCBbaywga10pLFxcblxcdHNwcmludGYoXFxcIldyYXAgdGhlIHZhbHVlIGluIGFuIGFycmF5OiBcXFxcXFxcIiVzXFxcXFxcXCI6IFsuLi5dXFxcIiwgW2tdKSxcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC91c2VyZ3VpZGUvZWItZXZlbnQtcGF0dGVybnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRlcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIpXFxuXFx0aXNfb2JqZWN0KGVwKVxcblxcdHNvbWUgaywgdiBpbiBlcFxcblxcdF9wZl9ldnBzdl9zY2FsYXIodilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1kZmNjLXJlcXVpcmVkLWNvbmZpZ3NcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFbmFibGVkIGZvcm1hdCBjb252ZXJzaW9uIG5lZWRzIGlucHV0LCBvdXRwdXQsIGFuZCBzY2hlbWEgY29uZmlnc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgdGhyZWUgc3ViLWNvbmZpZ3VyYXRpb25zIGFyZSB1bmNvbmRpdGlvbmFsbHkgcmVxdWlyZWQgb25jZSBFbmFibGVkXFxuIyBpcyB0cnVlOyB0aGUgc2VydmljZSByZWplY3RzIGVhY2ggYWJzZW5jZSBpbiB0dXJuLiBSZWFkIGZyb20gdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maGRmY2Nfb3V0ZXIobmFtZSkgOj0gYyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjKVxcbn1cXG5cXG5fcGZfZmhkZmNjX2NvbmYobmFtZSkgOj0gYyBpZiB7XFxuXFx0eCA6PSBfcGZfZmhkZmNjX291dGVyKG5hbWUpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHgsIFxcXCJEYXRhRm9ybWF0Q29udmVyc2lvbkNvbmZpZ3VyYXRpb25cXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1kZmNjLXJlcXVpcmVkLWNvbmZpZ3NcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5EYXRhRm9ybWF0Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIkRhdGEgZm9ybWF0IGNvbnZlcnNpb24gaXMgZW5hYmxlZCB3aXRob3V0ICVzOyB0aGUgc3RyZWFtIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiJXMgbXVzdCBub3QgYmUgbnVsbFxcXFxcXFwiXFxcIiwgW2ssIGtdKSxcXG5cXHRcXFwiU2V0IElucHV0Rm9ybWF0Q29uZmlndXJhdGlvbiwgT3V0cHV0Rm9ybWF0Q29uZmlndXJhdGlvbiwgYW5kIFNjaGVtYUNvbmZpZ3VyYXRpb24gdG9nZXRoZXJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS1kYXRhZm9ybWF0Y29udmVyc2lvbmNvbmZpZ3VyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0YyA6PSBfcGZfZmhkZmNjX2NvbmYobmFtZSlcXG5cXHRjb2VyY2VfdG9fYm9vbChvYmplY3QuZ2V0KGMsIFxcXCJFbmFibGVkXFxcIiwgZmFsc2UpKSA9PSB0cnVlXFxuXFx0c29tZSBrIGluIHtcXFwiSW5wdXRGb3JtYXRDb25maWd1cmF0aW9uXFxcIiwgXFxcIk91dHB1dEZvcm1hdENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiU2NoZW1hQ29uZmlndXJhdGlvblxcXCJ9XFxuXFx0b2JqZWN0LmdldChjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtZHluYW1pYy1wYXJ0aXRpb25pbmctYnVmZmVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRHluYW1pYyBwYXJ0aXRpb25pbmcgbmVlZHMgYSA2NCBNQiBidWZmZXIgZmxvb3JcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNjaGVtYSBmbG9vciBpcyAxOyB0aGUgNjQgZmxvb3Igb25seSBhcHBsaWVzIHdpdGggZHluYW1pY1xcbiMgcGFydGl0aW9uaW5nIG9uIC0gYSBjb25kaXRpb25hbCBib3VuZCBubyBzY2hlbWEgbGF5ZXIgY2FuIGV4cHJlc3MuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1idWZmZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uQnVmZmVyaW5nSGludHMuU2l6ZUluTUJzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTaXplSW5NQnMgJXYgd2l0aCBkeW5hbWljIHBhcnRpdGlvbmluZzsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkJ1ZmZlcmluZ0hpbnRzLlNpemVJbk1CcyBtdXN0IGJlIGF0IGxlYXN0IDY0IHdoZW4gRHluYW1pYyBQYXJ0aXRpb25pbmcgaXMgZW5hYmxlZC5cXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlJhaXNlIFNpemVJbk1CcyB0byBhdCBsZWFzdCA2NFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMta2luZXNpc2ZpcmVob3NlLWRlbGl2ZXJ5c3RyZWFtLWR5bmFtaWNwYXJ0aXRpb25pbmdjb25maWd1cmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5EeW5hbWljUGFydGl0aW9uaW5nQ29uZmlndXJhdGlvbi5FbmFibGVkXFxcIikpID09IHRydWVcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uQnVmZmVyaW5nSGludHMuU2l6ZUluTUJzXFxcIikpXFxuXFx0cyA8IDY0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtZHluYW1pYy1wYXJ0aXRpb25pbmctcHJlZml4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRHluYW1pYyBwYXJ0aXRpb25pbmcgbmVlZHMgcGFydGl0aW9uIG5hbWVzcGFjZXMgaW4gdGhlIHByZWZpeFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBQYXJ0aXRpb25lZCBkZWxpdmVyeSBoYXMgbm93aGVyZSB0byBwdXQgdGhlIGtleXMgdW5sZXNzIHRoZSBwcmVmaXhcXG4jIGludGVycG9sYXRlcyB0aGVtIHZpYSAhe3BhcnRpdGlvbktleUZyb20uLi59IG5hbWVzcGFjZXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1wcmVmaXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uUHJlZml4XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmVmaXggJyVzJyBoYXMgbm8gcGFydGl0aW9uIG5hbWVzcGFjZTsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIFByZWZpeCBzaG91bGQgY29udGFpbiBEeW5hbWljIFBhcnRpdGlvbmluZyBuYW1lc3BhY2VzIHdoZW4gRHluYW1pYyBQYXJ0aXRpb25pbmcgaXMgZW5hYmxlZFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiSW50ZXJwb2xhdGUgYXQgbGVhc3Qgb25lICF7cGFydGl0aW9uS2V5RnJvbVF1ZXJ5Oi4uLn0gb3IgIXtwYXJ0aXRpb25LZXlGcm9tTGFtYmRhOi4uLn0gaW50byB0aGUgcHJlZml4XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ZpcmVob3NlL2xhdGVzdC9kZXYvZHluYW1pYy1wYXJ0aXRpb25pbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLkR5bmFtaWNQYXJ0aXRpb25pbmdDb25maWd1cmF0aW9uLkVuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLlByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHApXFxuXFx0bm90IGNvbnRhaW5zKHAsIFxcXCIhe3BhcnRpdGlvbktleVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2Uta2luZXNpcy1zb3VyY2UtY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiS2luZXNpc1N0cmVhbUFzU291cmNlIHN0cmVhbXMgbmVlZCBLaW5lc2lzU3RyZWFtU291cmNlQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoaXMgZGlyZWN0aW9uIGlzIGEgZGVwbG95IGZhaWx1cmUgLSBEaXJlY3RQdXQgd2l0aCBhIChzaWxlbnRseVxcbiMgaWdub3JlZCkgc291cmNlIGNvbmZpZ3VyYXRpb24gZGVwbG95cyBmaW5lIChiZW5jaCBmMDYpLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfZmhrc2NfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIktpbmVzaXNTdHJlYW1Tb3VyY2VDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWtpbmVzaXMtc291cmNlLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNvdXJjZUNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJEZWxpdmVyeVN0cmVhbVR5cGUgaXMgS2luZXNpc1N0cmVhbUFzU291cmNlIGJ1dCBubyBzb3VyY2UgY29uZmlndXJhdGlvbiBpcyBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJLaW5lc2lzU291cmNlU3RyZWFtQ29uZmlnIGlzIG1hbmRhdG9yeSBmb3IgS2luZXNpc1N0cmVhbUFzU291cmNlIHN0cmVhbSB0eXBlLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIEtpbmVzaXNTdHJlYW1Tb3VyY2VDb25maWd1cmF0aW9uIHdpdGggdGhlIHN0cmVhbSBBUk4gYW5kIHJvbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWxpdmVyeVN0cmVhbVR5cGVcXFwiKSA9PSBcXFwiS2luZXNpc1N0cmVhbUFzU291cmNlXFxcIlxcblxcdF9wZl9maGtzY19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2Utb25lLWRlc3RpbmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBkZWxpdmVyeSBzdHJlYW0gdGFrZXMgZXhhY3RseSBvbmUgZGVzdGluYXRpb24gY29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGRpcmVjdGlvbnMgZGVwbG95LXZlcmlmaWVkOiBub25lIHNldCwgYW5kIHR3byBzZXQuIEtleSBwcmVzZW5jZSBpc1xcbiMgcmVhZCBmcm9tIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maG9kX2Rlc3RzIDo9IHtcXG5cXHRcXFwiUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJFeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiUmVkc2hpZnREZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJFbGFzdGljc2VhcmNoRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiQW1hem9ub3BlbnNlYXJjaHNlcnZpY2VEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBbWF6b25PcGVuU2VhcmNoU2VydmVybGVzc0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlNwbHVua0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkh0dHBFbmRwb2ludERlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlNub3dmbGFrZURlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkljZWJlcmdEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLW9uZS1kZXN0aW5hdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIGRlc3RpbmF0aW9uIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJFeGFjdGx5IG9uZSBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uIGlzIHN1cHBvcnRlZCBmb3IgYSBGaXJlaG9zZVxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IGV4YWN0bHkgb25lICpEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZmhvZF9kZXN0czsgb2JqZWN0LmdldChwcm9wcywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIl0pXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtczMtYmFja3VwLWNvbmZpZ1wiLFxuICAgIFwic2VydmljZVwiOiBcImZpcmVob3NlXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsaW5nIFMzIGJhY2t1cCBuZWVkcyBTM0JhY2t1cENvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQmFja3VwIG1vZGUgcG9pbnRzIGRlbGl2ZXJpZXMgYXQgYSBzZWNvbmQgYnVja2V0IHRoYXQgbXVzdCBiZVxcbiMgY29uZmlndXJlZC4gU2NvcGVkIHRvIHRoZSBiZW5jaGVkIEV4dGVuZGVkUzMgZGVzdGluYXRpb24uIEFic2VuY2UgaXNcXG4jIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maHNiY19vdXRlcihuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJFeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZmlyZWhvc2UtczMtYmFja3VwLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5TM0JhY2t1cENvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJTM0JhY2t1cE1vZGUgaXMgRW5hYmxlZCBidXQgUzNCYWNrdXBDb25maWd1cmF0aW9uIGlzIG5vdCBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJTMyBiYWNrdXAgZGVzdGluYXRpb24gY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCB3aGVuIGVuYWJsaW5nIFMzIGJhY2t1cC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBTM0JhY2t1cENvbmZpZ3VyYXRpb24gKGJ1Y2tldCBhbmQgcm9sZSksIG9yIGRyb3AgUzNCYWNrdXBNb2RlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0tZXh0ZW5kZWRzM2Rlc3RpbmF0aW9uY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uUzNCYWNrdXBNb2RlXFxcIikgPT0gXFxcIkVuYWJsZWRcXFwiXFxuXFx0eCA6PSBfcGZfZmhzYmNfb3V0ZXIobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHgsIFxcXCJTM0JhY2t1cENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLWlkZW50aXR5LXBvbGljeS1uby1wcmluY2lwYWxcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSWRlbnRpdHkgcG9saWNpZXMgY2Fubm90IGNhcnJ5IGEgUHJpbmNpcGFsIGZpZWxkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBJZGVudGl0eSBwb2xpY2llcyBhdHRhY2ggdG8gdGhlaXIgcHJpbmNpcGFsIGltcGxpY2l0bHk7IHRoZSBmaWVsZFxcbiMgYmVsb25ncyB0byByZXNvdXJjZS1iYXNlZCBwb2xpY2llcy5cXG5fcGZfaWlucF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lpbnBfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2lpbnBfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lpbnBfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1pZGVudGl0eS1wb2xpY3ktbm8tcHJpbmNpcGFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuUHJpbmNpcGFsXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRcXFwiSWRlbnRpdHkgcG9saWN5IHN0YXRlbWVudCBoYXMgYSBQcmluY2lwYWwgZmllbGQ7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlBvbGljeSBkb2N1bWVudCBzaG91bGQgbm90IHNwZWNpZnkgYSBwcmluY2lwYWwuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgUHJpbmNpcGFsIChpZGVudGl0eSBwb2xpY2llcyBhcHBseSB0byB0aGUgaWRlbnRpdHkgdGhleSBhdHRhY2ggdG8pXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9paW5wX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWlucF9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdG9iamVjdC5nZXQocywgXFxcIlByaW5jaXBhbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0taW5saW5lLXBvbGljeS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklubGluZSBwb2xpY3kgZG9jdW1lbnRzIGFyZSBsaW1pdGVkIHBlciBpZGVudGl0eSAocm9sZSAxMDI0MCAvIGdyb3VwIDUxMjAgLyB1c2VyIDIwNDggY2hhcmFjdGVycylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06OlVzZXJQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2lubGluZV9wb2xpY3lfbGltaXRzIDo9IHtcXG5cXHRcXFwiQVdTOjpJQU06OlBvbGljeVxcXCI6IDEwMjQwLFxcblxcdFxcXCJBV1M6OklBTTo6Um9sZVBvbGljeVxcXCI6IDEwMjQwLFxcblxcdFxcXCJBV1M6OklBTTo6VXNlclBvbGljeVxcXCI6IDIwNDgsXFxuXFx0XFxcIkFXUzo6SUFNOjpHcm91cFBvbGljeVxcXCI6IDUxMjAsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLWlubGluZS1wb2xpY3ktc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBvbGljeURvY3VtZW50IGlzICVkIGNoYXJhY3RlcnMgKEpTT04gd2l0aG91dCB3aGl0ZXNwYWNlKSBidXQgdGhlIGlubGluZSBwb2xpY3kgbGltaXQgZm9yICVzIGlzICVkIChyb2xlOiAxMDI0MCwgZ3JvdXA6IDUxMjAsIHVzZXI6IDIwNDgpXFxcIiwgW3NpemUsIHJ0eXBlLCBsaW1pdF0pLFxcblxcdFxcXCJNb3ZlIHN0YXRlbWVudHMgaW50byBtYW5hZ2VkIHBvbGljaWVzIG9yIHNob3J0ZW4gdGhlIGRvY3VtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgbGltaXQgaW4gX3BmX2lubGluZV9wb2xpY3lfbGltaXRzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdGRvYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIilcXG5cXHRpc19vYmplY3QoZG9jKVxcblxcdHNpemUgOj0gY291bnQoanNvbi5tYXJzaGFsKGRvYykpXFxuXFx0c2l6ZSA+IGxpbWl0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLWluc3RhbmNlLXByb2ZpbGUtc2luZ2xlLXJvbGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gaW5zdGFuY2UgcHJvZmlsZSBob2xkcyBleGFjdGx5IG9uZSByb2xlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6SW5zdGFuY2VQcm9maWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgXFxcInF1b3RhXFxcIiBpcyBhIGhhcmQgbGltaXQgb2Ygb25lIHJvbGU7IHRoZSBzY2hlbWEgaGFzIG5vIG1heEl0ZW1zLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLWluc3RhbmNlLXByb2ZpbGUtc2luZ2xlLXJvbGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvbGVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCByb2xlcyBvbiBvbmUgaW5zdGFuY2UgcHJvZmlsZTsgdGhlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQ2Fubm90IGV4Y2VlZCBxdW90YSBmb3IgSW5zdGFuY2VTZXNzaW9uc1Blckluc3RhbmNlUHJvZmlsZTogMVxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSByb2xlIHBlciBpbnN0YW5jZSBwcm9maWxlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtaWFtLWluc3RhbmNlcHJvZmlsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06Okluc3RhbmNlUHJvZmlsZVxcXCIpXFxuXFx0biA6PSBjb3VudChmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUm9sZXNcXFwiKSlcXG5cXHRuID4gMVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljaWVzIHBlciBpZGVudGl0eSBhcmUgY2FwcGVkIChoYXJkIG1heGltdW1zIHJvbGUgMjUgLyB1c2VyIDIwIC8gZ3JvdXAgMTApXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODj+ODvOODieS4iumZkO+8iFNlcnZpY2UgUXVvdGFzIOOBruOAjE1heGltdW0gcXVvdGHjgI09IOOBneOCjOS7peS4iuW8leOBjeS4iuOBkuS4jeWPr+iDveOBquWApO+8iTpcXG4jICAgcm9sZSAyNSAvIHVzZXIgMjAgLyBncm91cCAxMO+8iGdyb3VwIOOBryBhZGp1c3RhYmxlOiBmYWxzZeOAgeWun+a4rOOBp+OCgueiuuiqje+8ieOAglxcbiMg44OH44OV44Kp44Or44OI77yIcm9sZSAyMCAvIHVzZXIgMTAgLyBncm91cCAxMO+8iei2heOBr+OCouOCq+OCpuODs+ODiOOBruOCr+OCqeODvOOCv+W8leOBjeS4iuOBkuasoeesrOOBp1xcbiMg5oiQ5Yqf44GX5b6X44KL44Gf44KBIEVSUk9SIOOBq+OBl+OBquOBhO+8iGJlbmNoIOOCouOCq+OCpuODs+ODiOOBriByb2xlPTIwIOOBpyAxMSDlgIvmiJDlip/jgpLlrp/muKzmuIjjgb/vvInjgIJcXG5fcGZfaWFtcG9sX2xpbWl0cyA6PSB7XFxuXFx0XFxcIkFXUzo6SUFNOjpSb2xlXFxcIjogMjUsXFxuXFx0XFxcIkFXUzo6SUFNOjpVc2VyXFxcIjogMjAsXFxuXFx0XFxcIkFXUzo6SUFNOjpHcm91cFxcXCI6IDEwLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIG1hbmFnZWQgcG9saWNpZXMgYXJlIGF0dGFjaGVkLCBidXQgdGhlIGhhcmQgbWF4aW11bSBmb3IgJXMgaXMgJWQgKHF1b3RhIGRlZmF1bHRzOiByb2xlIDIwLCB1c2VyIDEwLCBncm91cCAxMDsgcmFpc2FibGUgb25seSB1cCB0byB0aGUgaGFyZCBtYXhpbXVtKTsgZGVwbG95bWVudCBmYWlscyB3aXRoIExpbWl0RXhjZWVkZWRcXFwiLCBbbiwgcnR5cGUsIGxpbWl0XSksXFxuXFx0XFxcIkNvbnNvbGlkYXRlIHN0YXRlbWVudHMgaW50byBmZXdlciBtYW5hZ2VkIHBvbGljaWVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgbGltaXQgaW4gX3BmX2lhbXBvbF9saW1pdHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0YXJyIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRuIDo9IGNvdW50KGFycilcXG5cXHRuID4gbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbWFuYWdlZC1wb2xpY3ktc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljeSBkb2N1bWVudHMgYXJlIGxpbWl0ZWQgdG8gNjE0NCBjaGFyYWN0ZXJzICh3aGl0ZXNwYWNlIGV4Y2x1ZGVkKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5RG9jdW1lbnQgaXMgJWQgY2hhcmFjdGVycyAoSlNPTiB3aXRob3V0IHdoaXRlc3BhY2UpIGJ1dCB0aGUgbWFuYWdlZCBwb2xpY3kgbGltaXQgaXMgNjE0NFxcXCIsIFtzaXplXSksXFxuXFx0XFxcIlNwbGl0IHRoZSBkb2N1bWVudCBpbnRvIG11bHRpcGxlIG1hbmFnZWQgcG9saWNpZXMgb3Igc2hvcnRlbiBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWFtLXF1b3Rhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwiKVxcblxcdGRvYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIilcXG5cXHRpc19vYmplY3QoZG9jKVxcblxcdHNpemUgOj0gY291bnQoanNvbi5tYXJzaGFsKGRvYykpXFxuXFx0c2l6ZSA+IDYxNDRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbmFtZS1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSUFNIGVudGl0eSBuYW1lcyBhbGxvdyBvbmx5IGFscGhhbnVtZXJpY3MgYW5kICs9LC5ALV9cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9pYW1uYW1lX3BhdCA6PSBgXltBLVphLXowLTkrPSwuQF8tXSskYFxcblxcbl9wZl9pYW1uYW1lX3Byb3AodCwgcHJvcCkgOj0gW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKF9wZl9pYW1uYW1lX3BhdCwgdilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pXFxufVxcblxcbl9wZl9pYW1uYW1lX2JhZCBjb250YWlucyBfcGZfaWFtbmFtZV9wcm9wKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIsIFxcXCJSb2xlTmFtZVxcXCIpXFxuXFxuX3BmX2lhbW5hbWVfYmFkIGNvbnRhaW5zIF9wZl9pYW1uYW1lX3Byb3AoXFxcIkFXUzo6SUFNOjpVc2VyXFxcIiwgXFxcIlVzZXJOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgX3BmX2lhbW5hbWVfcHJvcChcXFwiQVdTOjpJQU06Okdyb3VwXFxcIiwgXFxcIkdyb3VwTmFtZVxcXCIpXFxuXFxuX3BmX2lhbW5hbWVfYmFkIGNvbnRhaW5zIF9wZl9pYW1uYW1lX3Byb3AoXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIiwgXFxcIk1hbmFnZWRQb2xpY3lOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6Um9sZVxcXCIsIFxcXCJBV1M6OklBTTo6VXNlclxcXCIsIFxcXCJBV1M6OklBTTo6R3JvdXBcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdHYgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5TmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKF9wZl9pYW1uYW1lX3BhdCwgdilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5TmFtZVxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tbmFtZS1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiSUFNIG5hbWUgJyVzJyBpcyByZWplY3RlZDogb25seSBhbHBoYW51bWVyaWNzIGFuZCArID0gLCAuIEAgXyAtIGFyZSBhY2NlcHRlZCAobm9uLUFTQ0lJIHRleHQgc3VjaCBhcyBKYXBhbmVzZSBpcyByZWplY3RlZClcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGVudGl0eSB1c2luZyBhbHBoYW51bWVyaWNzIGFuZCArID0gLCAuIEAgXyAtIG9ubHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVJvbGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCB2XSBpbiBfcGZfaWFtbmFtZV9iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWFjdGlvbi1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWN0aW9ucyBtdXN0IGNhcnJ5IGEgc2VydmljZSBwcmVmaXhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgYmFyZSBhY3Rpb24gbmFtZSBoYXMgbm8gc2VydmljZSB0byBhdHRhY2ggdG8uIEludHJpbnNpY3MgaW5zaWRlIHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IGFyZSBtYXJrZXIgb2JqZWN0cywgc28gaXNfc3RyaW5nIG11dGVzIHRoZW0uXFxuX3BmX2lhZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lhZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWFmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pYWZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaWFmX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pYWZfdmFscyh2KSA6PSB2IGlmIGlzX2FycmF5KHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWFjdGlvbi1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkFjdGlvbiAnJXMnIGhhcyBubyBzZXJ2aWNlIHByZWZpeDsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiQWN0aW9ucy9Db25kaXRpb25zIG11c3QgYmUgcHJlZmFjZWQgYnkgYSB2ZW5kb3IsIGUuZy4sIGlhbSwgc2RiLCBlYzIsIGV0Yy5cXFxcXFxcIlxcXCIsIFthXSksXFxuXFx0XFxcIldyaXRlIGFjdGlvbnMgYXMgc2VydmljZTpBY3Rpb24gKGUuZy4gczM6R2V0T2JqZWN0KSwgb3IgKlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWFmX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWFmX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c29tZSBhIGluIF9wZl9pYWZfdmFscyhvYmplY3QuZ2V0KHMsIFxcXCJBY3Rpb25cXFwiLCBbXSkpXFxuXFx0aXNfc3RyaW5nKGEpXFxuXFx0YSAhPSBcXFwiKlxcXCJcXG5cXHRub3QgY29udGFpbnMoYSwgXFxcIjpcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktY29uZGl0aW9uLW9wZXJhdG9yXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbmRpdGlvbiBvcGVyYXRvcnMgY29tZSBmcm9tIGEgY2xvc2VkIGdyYW1tYXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJhc2Ugb3BlcmF0b3JzIHBsdXMgdGhlIElmRXhpc3RzIHN1ZmZpeCBhbmQgc2V0LW9wZXJhdG9yIHByZWZpeGVzLlxcbiMgQSB0eXBvIGxpa2UgU3RyaW5nRXF1YWwvU3RyaW5nRXF1YWx6IGlzIHVucmVhY2hhYmxlIGZvciBldmVyeSBvdGhlclxcbiMgbGF5ZXIgYmVjYXVzZSB0aGUgZG9jdW1lbnQgaXMgb3BhcXVlIGpzb24uXFxuX3BmX2ljb19iYXNlIDo9IHtcXG5cXHRcXFwiU3RyaW5nRXF1YWxzXFxcIiwgXFxcIlN0cmluZ05vdEVxdWFsc1xcXCIsIFxcXCJTdHJpbmdFcXVhbHNJZ25vcmVDYXNlXFxcIiwgXFxcIlN0cmluZ05vdEVxdWFsc0lnbm9yZUNhc2VcXFwiLFxcblxcdFxcXCJTdHJpbmdMaWtlXFxcIiwgXFxcIlN0cmluZ05vdExpa2VcXFwiLFxcblxcdFxcXCJOdW1lcmljRXF1YWxzXFxcIiwgXFxcIk51bWVyaWNOb3RFcXVhbHNcXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuXFxcIiwgXFxcIk51bWVyaWNMZXNzVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIk51bWVyaWNHcmVhdGVyVGhhblxcXCIsIFxcXCJOdW1lcmljR3JlYXRlclRoYW5FcXVhbHNcXFwiLFxcblxcdFxcXCJEYXRlRXF1YWxzXFxcIiwgXFxcIkRhdGVOb3RFcXVhbHNcXFwiLCBcXFwiRGF0ZUxlc3NUaGFuXFxcIiwgXFxcIkRhdGVMZXNzVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIkRhdGVHcmVhdGVyVGhhblxcXCIsIFxcXCJEYXRlR3JlYXRlclRoYW5FcXVhbHNcXFwiLFxcblxcdFxcXCJCb29sXFxcIiwgXFxcIkJpbmFyeUVxdWFsc1xcXCIsIFxcXCJJcEFkZHJlc3NcXFwiLCBcXFwiTm90SXBBZGRyZXNzXFxcIixcXG5cXHRcXFwiQXJuRXF1YWxzXFxcIiwgXFxcIkFybkxpa2VcXFwiLCBcXFwiQXJuTm90RXF1YWxzXFxcIiwgXFxcIkFybk5vdExpa2VcXFwiLCBcXFwiTnVsbFxcXCIsXFxufVxcblxcbl9wZl9pY29fZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pY29fZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2ljb19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWNvX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxuIyBTdHJpcCBhbiBvcHRpb25hbCBGb3JBbGxWYWx1ZXM6L0ZvckFueVZhbHVlOiBwcmVmaXgsIHRoZW4gSWZFeGlzdHMuXFxuX3BmX2ljb191bnByZWZpeGVkKG9wKSA6PSBwYXJ0c1tjb3VudChwYXJ0cykgLSAxXSBpZiBwYXJ0cyA6PSBzcGxpdChvcCwgXFxcIjpcXFwiKVxcblxcbl9wZl9pY29fcm9vdChvcCkgOj0gc3Vic3RyaW5nKGIsIDAsIGNvdW50KGIpIC0gOCkgaWYge1xcblxcdGIgOj0gX3BmX2ljb191bnByZWZpeGVkKG9wKVxcblxcdGVuZHN3aXRoKGIsIFxcXCJJZkV4aXN0c1xcXCIpXFxufVxcblxcbl9wZl9pY29fcm9vdChvcCkgOj0gYiBpZiB7XFxuXFx0YiA6PSBfcGZfaWNvX3VucHJlZml4ZWQob3ApXFxuXFx0bm90IGVuZHN3aXRoKGIsIFxcXCJJZkV4aXN0c1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1jb25kaXRpb24tb3BlcmF0b3JcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5Db25kaXRpb25cXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkNvbmRpdGlvbiBvcGVyYXRvciAnJXMnIGRvZXMgbm90IGV4aXN0OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTeW50YXggZXJyb3JzIGluIHBvbGljeS5cXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJVc2UgYSBkb2N1bWVudGVkIG9wZXJhdG9yIChTdHJpbmdFcXVhbHMsIEFybkxpa2UsIC4uLiksIG9wdGlvbmFsbHkgd2l0aCBJZkV4aXN0cyBvciBhIEZvckFsbFZhbHVlczovRm9yQW55VmFsdWU6IHByZWZpeFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pY29fZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pY29fc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRjb25kIDo9IG9iamVjdC5nZXQocywgXFxcIkNvbmRpdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjb25kKVxcblxcdHNvbWUgb3AsIF8gaW4gY29uZFxcblxcdGlzX3N0cmluZyhvcClcXG5cXHRub3QgX3BmX2ljb19yb290KG9wKSBpbiBfcGZfaWNvX2Jhc2VcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWR1cGxpY2F0ZS1zaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RhdGVtZW50IElEcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBwb2xpY3lcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhaXJ3aXNlIHVuaXF1ZW5lc3Mgd2l0aGluIG9uZSBkb2N1bWVudDsgc2VwYXJhdGUgZG9jdW1lbnRzIG1heSByZXVzZVxcbiMgaWRzIGZyZWVseS5cXG5fcGZfaWRzX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaWRzX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pZHNfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lkc19zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1kdXBsaWNhdGUtc2lkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuU2lkXFxcIiwgW3BhdGgsIGpdKSxcXG5cXHRzcHJpbnRmKFxcXCJTaWQgJyVzJyByZXBlYXRzIHdpdGhpbiBvbmUgcG9saWN5OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTdGF0ZW1lbnQgSURzIChTSUQpIGluIGEgc2luZ2xlIHBvbGljeSBtdXN0IGJlIHVuaXF1ZS5cXFxcXFxcIlxcXCIsIFtzaWRdKSxcXG5cXHRcXFwiR2l2ZSBldmVyeSBzdGF0ZW1lbnQgaW4gdGhlIGRvY3VtZW50IGEgZGlzdGluY3QgU2lkIChvciBkcm9wIHRoZSBkdXBsaWNhdGVzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWRzX2RvY3NcXG5cXHRzdG10cyA6PSBfcGZfaWRzX3N0bXRzKGQpXFxuXFx0c29tZSBbaSwgYV0gaW4gc3RtdHNcXG5cXHRzb21lIFtqLCBiXSBpbiBzdG10c1xcblxcdGkgPCBqXFxuXFx0aXNfb2JqZWN0KGEpXFxuXFx0aXNfb2JqZWN0KGIpXFxuXFx0c2lkIDo9IG9iamVjdC5nZXQoYSwgXFxcIlNpZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfc3RyaW5nKHNpZClcXG5cXHRzaWQgPT0gb2JqZWN0LmdldChiLCBcXFwiU2lkXFxcIiwgXFxcIl9fcGZfb3RoZXJcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktZWZmZWN0LWNhc2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRWZmZWN0IGlzIGNhc2Utc2Vuc2l0aXZlIEFsbG93IG9yIERlbnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIExvd2VyY2FzZSBlZmZlY3RzIGFyZSBhIGNsYXNzaWMgaGFuZC13cml0dGVuLUpTT04gdHlwbyB0aGUgc2NoZW1hXFxuIyBjYW5ub3Qgc2VlICh0aGUgZG9jdW1lbnQgaXMgb3BhcXVlIGpzb24pLlxcbl9wZl9pZWNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZWNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2llY19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWVjX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWVmZmVjdC1jYXNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuRWZmZWN0XFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJFZmZlY3QgJyVzJyBpcyBub3QgQWxsb3cgb3IgRGVueSAoY2FzZS1zZW5zaXRpdmUpOyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJUaGUgcG9saWN5IGZhaWxlZCBsZWdhY3kgcGFyc2luZ1xcXFxcXFwiXFxcIiwgW2VmXSksXFxuXFx0XFxcIlVzZSBFZmZlY3Q6IEFsbG93IG9yIEVmZmVjdDogRGVueVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWVjX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWVjX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0ZWYgOj0gb2JqZWN0LmdldChzLCBcXFwiRWZmZWN0XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19zdHJpbmcoZWYpXFxuXFx0bm90IGVmIGluIHtcXFwiQWxsb3dcXFwiLCBcXFwiRGVueVxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1leGNsdXNpdmUtZmllbGRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjdGlvbi9Ob3RBY3Rpb24gYW5kIFJlc291cmNlL05vdFJlc291cmNlIGFyZSBleGNsdXNpdmUgcGFpcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEVhY2ggcGFpciBpcyBlaXRoZXItb3IgcGVyIHN0YXRlbWVudDsgYm90aCBhdCBvbmNlIGlzIGEgc3ludGF4IGVycm9yLlxcbl9wZl9pZWZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZWZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2llZl9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWVmX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxuX3BmX2llZl9wYWlycyA6PSB7W1xcXCJBY3Rpb25cXFwiLCBcXFwiTm90QWN0aW9uXFxcIl0sIFtcXFwiUmVzb3VyY2VcXFwiLCBcXFwiTm90UmVzb3VyY2VcXFwiXX1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktZXhjbHVzaXZlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLiVzXFxcIiwgW3BhdGgsIGksIHBhaXJbMV1dKSxcXG5cXHRzcHJpbnRmKFxcXCJTdGF0ZW1lbnQgc2V0cyBib3RoICVzIGFuZCAlczsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiU3ludGF4IGVycm9ycyBpbiBwb2xpY3kuXFxcXFxcXCJcXFwiLCBbcGFpclswXSwgcGFpclsxXV0pLFxcblxcdFxcXCJLZWVwIG9uZSBvZiB0aGUgcGFpciBwZXIgc3RhdGVtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pZWZfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pZWZfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzb21lIHBhaXIgaW4gX3BmX2llZl9wYWlyc1xcblxcdG9iamVjdC5nZXQocywgcGFpclswXSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocywgcGFpclsxXSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktcmVzb3VyY2UtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlc291cmNlcyBtdXN0IGJlIEFSTnMgb3IgKlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSBsaXRlcmFsIHN0cmluZ3MgYXJlIGp1ZGdlZCAtIEZuOjpHZXRBdHQgLyBGbjo6U3ViIHZhbHVlcyBzdXJmYWNlXFxuIyBhcyBtYXJrZXIgb2JqZWN0cyBpbiB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChtZWFzdXJlZCksIHNvIHRoZVxcbiMgaXNfc3RyaW5nIGd1YXJkIG11dGVzIHRoZW0uXFxuX3BmX2lyZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lyZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaXJmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pcmZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaXJmX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pcmZfdmFscyh2KSA6PSB2IGlmIGlzX2FycmF5KHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXJlc291cmNlLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJSZXNvdXJjZSAnJXMnIGlzIG5vdCBhbiBBUk47IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlJlc291cmNlICVzIG11c3QgYmUgaW4gQVJOIGZvcm1hdCBvciAnKicuXFxcXFxcXCJcXFwiLCBbciwgcl0pLFxcblxcdFxcXCJVc2UgYSBmdWxsIEFSTiAoYXJuOi4uLikgb3IgKlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXJmX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXJmX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c29tZSByIGluIF9wZl9pcmZfdmFscyhvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFtdKSlcXG5cXHRpc19zdHJpbmcocilcXG5cXHRyICE9IFxcXCIqXFxcIlxcblxcdG5vdCBzdGFydHN3aXRoKHIsIFxcXCJhcm46XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LXNpZC1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUG9saWN5IHN0YXRlbWVudCBTaWQgbXVzdCBiZSBhbHBoYW51bWVyaWNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NpZGZtdF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlJvbGVcXFwiLCBcXFwiQVdTOjpJQU06OlVzZXJcXFwiLCBcXFwiQVdTOjpJQU06Okdyb3VwXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc2lkZm10X2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX3NpZGZtdF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfc2lkZm10X3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9zaWRmbXRfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktc2lkLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLlNpZFxcXCIsIFtwYXRoLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiU2lkICclcycgaXMgbm90IGFscGhhbnVtZXJpYzsgSUFNIHJlamVjdHMgdGhlIHBvbGljeSB3aXRoIFxcXFxcXFwiU3RhdGVtZW50IElEcyAoU0lEKSBtdXN0IGJlIGFscGhhLW51bWVyaWNcXFxcXFxcIlxcXCIsIFtzaWRdKSxcXG5cXHRcXFwiVXNlIG9ubHkgbGV0dGVycyBhbmQgZGlnaXRzIGluIHRoZSBTaWQgKGRyb3AgaHlwaGVucywgdW5kZXJzY29yZXMgYW5kIHNwYWNlcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9zaWRmbXRfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9zaWRmbXRfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzaWQgOj0gb2JqZWN0LmdldChzLCBcXFwiU2lkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoc2lkKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlswLTlBLVphLXpdKiRgLCBzaWQpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1zdGF0ZW1lbnQtcmVzb3VyY2UtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSWRlbnRpdHkgcG9saWN5IHN0YXRlbWVudHMgbmVlZCBSZXNvdXJjZSBvciBOb3RSZXNvdXJjZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBzdGF0ZW1lbnQgc2NvcGVkIHRvIG5vdGhpbmcgaXMgcmVqZWN0ZWQuXFxuX3BmX2lzcnJfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pc3JyX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pc3JyX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pc3JyX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXN0YXRlbWVudC1yZXNvdXJjZS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRcXFwiU3RhdGVtZW50IGhhcyBuZWl0aGVyIFJlc291cmNlIG5vciBOb3RSZXNvdXJjZTsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiUG9saWN5IHN0YXRlbWVudCBtdXN0IGNvbnRhaW4gcmVzb3VyY2VzLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIFJlc291cmNlIChhbiBBUk4gb3IgKikgdG8gdGhlIHN0YXRlbWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXNycl9kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2lzcnJfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRvYmplY3QuZ2V0KHMsIFxcXCJOb3RSZXNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUG9saWN5IFZlcnNpb24gbXVzdCBiZSAyMDEyLTEwLTE3IG9yIDIwMDgtMTAtMTdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSB2ZXJzaW9uIHN0cmluZyBpcyBhbiBlbnVtIG9mIHR3byBkYXRlczsgYW55dGhpbmcgZWxzZSBpcyBhIHN5bnRheFxcbiMgZXJyb3IgYXQgY3JlYXRlLlxcbl9wZl9pcHZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pcHZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlZlcnNpb25cXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcIlBvbGljeSBWZXJzaW9uICclcycgZG9lcyBub3QgZXhpc3Q7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlN5bnRheCBlcnJvcnMgaW4gcG9saWN5LlxcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRcXFwiVXNlIFZlcnNpb246IDIwMTItMTAtMTdcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3ZlcnNpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXB2X2RvY3NcXG5cXHR2IDo9IG9iamVjdC5nZXQoZCwgXFxcIlZlcnNpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCB2IGluIHtcXFwiMjAxMi0xMC0xN1xcXCIsIFxcXCIyMDA4LTEwLTE3XFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tdHJ1c3QtcG9saWN5LW5vLXJlc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRydXN0IHBvbGljaWVzIGNhbm5vdCBjYXJyeSBhIFJlc291cmNlIGZpZWxkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJvbGUgaXRzZWxmIGlzIHRoZSByZXNvdXJjZSBvZiBpdHMgdHJ1c3QgcG9saWN5OyBhbiBleHBsaWNpdFxcbiMgUmVzb3VyY2UgZmllbGQgaXMgcHJvaGliaXRlZC5cXG5fcGZfaXRucl90cnVzdChuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChkKVxcbn1cXG5cXG5fcGZfaXRucl9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaXRucl9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXRydXN0LXBvbGljeS1uby1yZXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Bc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSxcXG5cXHRcXFwiVHJ1c3QgcG9saWN5IHN0YXRlbWVudCBoYXMgYSBSZXNvdXJjZSBmaWVsZDsgdGhlIHJvbGUgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJIYXMgcHJvaGliaXRlZCBmaWVsZCBSZXNvdXJjZVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFJlc291cmNlIGZyb20gdGhlIHRydXN0IHBvbGljeSBzdGF0ZW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0ZCA6PSBfcGZfaXRucl90cnVzdChuYW1lKVxcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pdG5yX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0b2JqZWN0LmdldChzLCBcXFwiUmVzb3VyY2VcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXRydXN0LXBvbGljeS1zZXJ2aWNlLXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXJ2aWNlIHByaW5jaXBhbHMgbGl2ZSB1bmRlciBhbWF6b25hd3MuY29tXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgU2hhcGUgY2hlY2sgb25seTogZXZlcnkgc2VydmljZSBwcmluY2lwYWwgZW5kcyBpbiAuYW1hem9uYXdzLmNvbSAob3JcXG4jIC5hbWF6b25hd3MuY29tLmNuIGluIHRoZSBDaGluYSBwYXJ0aXRpb24pLiBXaGV0aGVyIGEgd2VsbC1zaGFwZWQgbmFtZVxcbiMgZXhpc3RzIGlzIGxlZnQgdG8gdGhlIHNlcnZpY2UuXFxuX3BmX2l0c3BfdHJ1c3QobmFtZSkgOj0gZCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQXNzdW1lUm9sZVBvbGljeURvY3VtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QoZClcXG59XFxuXFxuX3BmX2l0c3Bfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2l0c3Bfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaXRzcF92YWxzKHYpIDo9IFt2XSBpZiBpc19zdHJpbmcodilcXG5cXG5fcGZfaXRzcF92YWxzKHYpIDo9IHYgaWYgaXNfYXJyYXkodilcXG5cXG5fcGZfaXRzcF9vayhzcCkgaWYgZW5kc3dpdGgoc3AsIFxcXCIuYW1hem9uYXdzLmNvbVxcXCIpXFxuXFxuX3BmX2l0c3Bfb2soc3ApIGlmIGVuZHN3aXRoKHNwLCBcXFwiLmFtYXpvbmF3cy5jb20uY25cXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXRydXN0LXBvbGljeS1zZXJ2aWNlLXByaW5jaXBhbFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Bc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlByaW5jaXBhbC5TZXJ2aWNlXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJTZXJ2aWNlIHByaW5jaXBhbCAnJXMnIGlzIG5vdCBhbiBhbWF6b25hd3MuY29tIGRvbWFpbjsgdGhlIHJvbGUgY3JlYXRlIGZhaWxzIHdpdGggJ0ludmFsaWQgcHJpbmNpcGFsIGluIHBvbGljeTogXFxcXFxcXCJTRVJWSUNFXFxcXFxcXCI6XFxcXFxcXCIlc1xcXFxcXFwiJ1xcXCIsIFtzcCwgc3BdKSxcXG5cXHRcXFwiVXNlIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBuYW1lLCBlLmcuIGxhbWJkYS5hbWF6b25hd3MuY29tXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19wcmluY2lwYWwuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRkIDo9IF9wZl9pdHNwX3RydXN0KG5hbWUpXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2l0c3Bfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRwIDo9IG9iamVjdC5nZXQocywgXFxcIlByaW5jaXBhbFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChwKVxcblxcdHNvbWUgc3AgaW4gX3BmX2l0c3BfdmFscyhvYmplY3QuZ2V0KHAsIFxcXCJTZXJ2aWNlXFxcIiwgW10pKVxcblxcdGlzX3N0cmluZyhzcClcXG5cXHRub3QgX3BmX2l0c3Bfb2soc3ApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWNvZGUtczMtcGFpclwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTMy1iYXNlZCBDb2RlIG5lZWRzIGJvdGggUzNCdWNrZXQgYW5kIFMzS2V5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEhhbGYgYW4gUzMgcmVmZXJlbmNlIGNhbm5vdCBiZSBmZXRjaGVkLiBPbmx5IGp1ZGdlZCB3aGVuIG5laXRoZXIgWmlwRmlsZVxcbiMgbm9yIEltYWdlVXJpIGlzIHByZXNlbnQgKHRob3NlIHNoYXBlcyBiZWxvbmcgdG8gdGhlIGV4Y2x1c2l2ZSBydWxlKS5cXG5fcGZfbGNzcF9jb2RlKG5hbWUpIDo9IGMgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvZGVcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxuX3BmX2xjc3BfaGFzKGMsIGspIGlmIG9iamVjdC5nZXQoYywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcbl9wZl9sY3NwX2hhbGYoYykgOj0gW1xcXCJTM0tleVxcXCIsIFxcXCJTM0J1Y2tldFxcXCJdIGlmIHtcXG5cXHRfcGZfbGNzcF9oYXMoYywgXFxcIlMzQnVja2V0XFxcIilcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJTM0tleVxcXCIpXFxufVxcblxcbl9wZl9sY3NwX2hhbGYoYykgOj0gW1xcXCJTM0J1Y2tldFxcXCIsIFxcXCJTM0tleVxcXCJdIGlmIHtcXG5cXHRfcGZfbGNzcF9oYXMoYywgXFxcIlMzS2V5XFxcIilcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJTM0J1Y2tldFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWNvZGUtczMtcGFpclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db2RlLiVzXFxcIiwgW21pc3NpbmdbMF1dKSxcXG5cXHRzcHJpbnRmKFxcXCJDb2RlIGhhcyAlcyBidXQgbm8gJXM7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIEJ1Y2tldCBhbmQgS2V5IGFyZSByZXF1aXJlZCBmb3IgdXBsb2FkaW5nIHdpdGggUzMgcGFyYW1ldGVycy5cXFxcXFxcIlxcXCIsIFttaXNzaW5nWzFdLCBtaXNzaW5nWzBdXSksXFxuXFx0XFxcIlNldCBib3RoIFMzQnVja2V0IGFuZCBTM0tleVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWNvZGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0YyA6PSBfcGZfbGNzcF9jb2RlKG5hbWUpXFxuXFx0bm90IF9wZl9sY3NwX2hhcyhjLCBcXFwiWmlwRmlsZVxcXCIpXFxuXFx0bm90IF9wZl9sY3NwX2hhcyhjLCBcXFwiSW1hZ2VVcmlcXFwiKVxcblxcdG1pc3NpbmcgOj0gX3BmX2xjc3BfaGFsZihjKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1jb2RlLXppcGZpbGUtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklubGluZSBaaXBGaWxlIGV4Y2x1ZGVzIGV2ZXJ5IG90aGVyIENvZGUgcGFyYW1ldGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEtleSBwcmVzZW5jZSBpbiB0aGUgQ29kZSBvYmplY3QgaXMgdGhlIHZpb2xhdGlvbjsgY2hlY2tlZCBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfbGN6eF9vdGhlciA6PSB7XFxcIlMzQnVja2V0XFxcIiwgXFxcIlMzS2V5XFxcIiwgXFxcIlMzT2JqZWN0VmVyc2lvblxcXCIsIFxcXCJJbWFnZVVyaVxcXCJ9XFxuXFxuX3BmX2xjenhfY29kZShuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb2RlXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWNvZGUtemlwZmlsZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQ29kZS4lc1xcXCIsIFtrXSksXFxuXFx0c3ByaW50ZihcXFwiQ29kZSBzZXRzIFppcEZpbGUgdG9nZXRoZXIgd2l0aCAlczsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUGxlYXNlIGRvIG5vdCBwcm92aWRlIG90aGVyIEZ1bmN0aW9uQ29kZSBwYXJhbWV0ZXJzIHdoZW4gcHJvdmlkaW5nIGEgWmlwRmlsZS5cXFxcXFxcIlxcXCIsIFtrXSksXFxuXFx0XFxcIktlZXAgdGhlIGlubGluZSBaaXBGaWxlIGFsb25lLCBvciBzd2l0Y2ggZW50aXJlbHkgdG8gdGhlIFMzL2ltYWdlIHJlZmVyZW5jZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWNvZGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0YyA6PSBfcGZfbGN6eF9jb2RlKG5hbWUpXFxuXFx0b2JqZWN0LmdldChjLCBcXFwiWmlwRmlsZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRzb21lIGsgaW4gX3BmX2xjenhfb3RoZXJcXG5cXHRvYmplY3QuZ2V0KGMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZGxxLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgZGVhZCBsZXR0ZXIgdGFyZ2V0IG11c3Qgc2l0IGluIHRoZSBkZXBsb3kgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlZ2lvbiBjb21wYXJpc29uIG5lZWRzIHRoZSBkZXBsb3kgcmVnaW9uLCB3aGljaCBvbmx5IHRoaXMgcGFjayBzZWVzXFxuIyAoZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBpbiBlbmZvcmNlIG1vZGU7IHRoZSBydWxlXFxuIyBza2lwcyB3aXRob3V0IGl0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1kbHEtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGVhZCBsZXR0ZXIgdGFyZ2V0IHJlZ2lvbiAnJXMnIGlzIG5vdCB0aGUgZGVwbG95IHJlZ2lvbiAnJXMnOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIGRlYWQgbGV0dGVyIHF1ZXVlIEFSTjogVGhlIHJlc291cmNlIHNwZWNpZmllZCBieSB0aGUgVGFyZ2V0QXJuIG11c3QgYmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSBMYW1iZGEgZnVuY3Rpb24gaXQncyBhc3NvY2lhdGVkIHdpdGguXFxcXFxcXCJcXFwiLCBbcGFydHNbM10sIHJlZ2lvbl0pLFxcblxcdFxcXCJQb2ludCBEZWFkTGV0dGVyQ29uZmlnIGF0IGEgcXVldWUgb3IgdG9waWMgaW4gdGhlIHNhbWUgcmVnaW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tZGVhZGxldHRlcmNvbmZpZy5odG1sXFxcIikgaWYge1xcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbM10gIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWRscS1zZXJ2aWNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkZWFkIGxldHRlciB0YXJnZXQgbXVzdCBiZSBhbiBTUVMgcXVldWUgb3IgU05TIHRvcGljXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIHNlZ21lbnQgbGl2ZXMgaW5zaWRlIHRoZSBBUk4gc3RyaW5nLCBpbnZpc2libGUgdG8gYW55XFxuIyBzY2hlbWEgbGF5ZXIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZGxxLXNlcnZpY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZWFkIGxldHRlciB0YXJnZXQgc2VydmljZSAnJXMnIGlzIG5vdCBzcXMgb3Igc25zOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIGRlYWQgbGV0dGVyIHF1ZXVlIEFSTjogVGhlIHNlcnZpY2Ugc3BlY2lmaWVkIGJ5IHRoZSBUYXJnZXRBcm4gaXMgbm90IHN1cHBvcnRlZCBmb3IgZGVhZCBsZXR0ZXIgY29uZmlndXJhdGlvbi5cXFxcXFxcIlxcXCIsIFtwYXJ0c1syXV0pLFxcblxcdFxcXCJQb2ludCBEZWFkTGV0dGVyQ29uZmlnIGF0IGFuIFNRUyBxdWV1ZSBvciBTTlMgdG9waWMgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tZGVhZGxldHRlcmNvbmZpZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0bm90IHBhcnRzWzJdIGluIHtcXFwic3FzXFxcIiwgXFxcInNuc1xcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVmcy1yZXF1aXJlcy12cGNcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTW91bnRpbmcgRUZTIHJlcXVpcmVzIFZwY0NvbmZpZ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNb3VudGluZyBFRlMgcmVxdWlyZXMgdGhlIGZ1bmN0aW9uIHRvIHJ1biBpbnNpZGUgYSBWUEMuIEtleSBwcmVzZW5jZSBpc1xcbiMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9sZWZzdl9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVmcy1yZXF1aXJlcy12cGNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlZwY0NvbmZpZ1xcXCIsXFxuXFx0XFxcIkZpbGVTeXN0ZW1Db25maWdzIHdpdGhvdXQgVnBjQ29uZmlnOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJGdW5jdGlvbiBtdXN0IGJlIGNvbmZpZ3VyZWQgdG8gZXhlY3V0ZSBpbiBhIFZQQyB0byByZWZlcmVuY2UgYWNjZXNzIHBvaW50IC4uLiBQbGVhc2UgdXBkYXRlIHRoZSBmdW5jdGlvbiBjb25maWd1cmF0aW9uIHRvIGluY2x1ZGUgVlBDIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3Vwcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBWcGNDb25maWcgd2l0aCBzdWJuZXRzIHRoYXQgaGF2ZSBFRlMgbW91bnQgdGFyZ2V0cyBpbiB0aGVpciBBWnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZnVuY3Rpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2xlZnN2X3Byb3BzKG5hbWUpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpbGVTeXN0ZW1Db25maWdzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWcGNDb25maWdcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVudi1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGxpbWl0ZWQgdG8gNDA5NiBieXRlcyBpbiB0b3RhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyDjg6rjg4bjg6njg6vmloflrZfliJfjga7jgq3jg7wv5YCk44Gg44GR44KS5pWw44GI44KL77yI44OI44O844Kv44Oz44Gv44K544Kt44OD44OX77yJ44CC5ZCI6KiI44GM5pei44GrIDQwOTYg44KS6LaF44GI44GmXFxuIyDjgYTjgozjgbDjgIHlrp/pmpvjga7jg4fjg5fjg63jgqTjgafjgoLlv4XjgZrlpLHmlZfjgZnjgovvvIjlrp/jgrXjgqTjgrrjga/mjqjlrprku6XkuIrjgavjgZfjgYvjgarjgonjgarjgYTvvInjgIJcXG4jIE5PVEU6IOOBk+OBruOCqOODs+OCuOODs+OBriBSZWdvIOODkeODvOOCteOBr+WGheWMheihqOiomOWGheOBriAyIOWkieaVsCBzb21l77yIc29tZSBrLCB2IGluIHZhcnPvvInjgpJcXG4jIOWPl+OBkeS7mOOBkeOBquOBhOOBn+OCgeOAgW9iamVjdC5rZXlzIOe1jOeUseOBp+abuOOBj+OAglxcbl9wZl9sZW52X3NpemUodmFycykgOj0gc3VtKFtzIHxcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmtleXModmFycylcXG5cXHRpc19zdHJpbmcodmFyc1trXSlcXG5cXHRzIDo9IGNvdW50KGspICsgY291bnQodmFyc1trXSlcXG5dKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVudi1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FbnZpcm9ubWVudC5WYXJpYWJsZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkVudmlyb25tZW50IHZhcmlhYmxlcyB0b3RhbCBhdCBsZWFzdCAlZCBieXRlcyAobGl0ZXJhbCBrZXlzIGFuZCB2YWx1ZXMpLCBidXQgTGFtYmRhIGxpbWl0cyB0aGUgZW52aXJvbm1lbnQgdG8gNDA5NiBieXRlczsgQ3JlYXRlRnVuY3Rpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG90YWxdKSxcXG5cXHRcXFwiTW92ZSBsYXJnZSB2YWx1ZXMgdG8gU1NNIFBhcmFtZXRlciBTdG9yZSwgU2VjcmV0cyBNYW5hZ2VyLCBvciBhIGJ1bmRsZWQgY29uZmlnIGZpbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9nZXR0aW5nc3RhcnRlZC1saW1pdHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0dmFycyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHZhcnMpXFxuXFx0dG90YWwgOj0gX3BmX2xlbnZfc2l6ZSh2YXJzKVxcblxcdHRvdGFsID4gNDA5Nlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tYmF0Y2hzaXplLXdpbmRvd1wiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTUVMgYmF0Y2ggc2l6ZXMgb3ZlciAxMCBuZWVkIGEgYmF0Y2hpbmcgd2luZG93XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTUVMtb25seSBjb3VwbGluZzogYmlnIGJhdGNoZXMgbXVzdCB3YWl0IGZvciBhIHdpbmRvdy4gS2luZXNpcyBhbmRcXG4jIER5bmFtb0RCIHNvdXJjZXMgdGFrZSBsYXJnZSBiYXRjaGVzIHdpdGhvdXQgb25lLCBoZW5jZSB0aGUgU1FTIGd1YXJkLlxcbl9wZl9sYnN3X2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcbn1cXG5cXG5fcGZfbGJzd19pc19zcXMobmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0c3BsaXQoYXJuLCBcXFwiOlxcXCIpWzJdID09IFxcXCJzcXNcXFwiXFxufVxcblxcbl9wZl9sYnN3X25vX3dpbmRvdyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2xic3dfbm9fd2luZG93KG5hbWUpIGlmIHtcXG5cXHR0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXhpbXVtQmF0Y2hpbmdXaW5kb3dJblNlY29uZHNcXFwiKSkgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1lc20tYmF0Y2hzaXplLXdpbmRvd1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQmF0Y2hTaXplXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYXRjaFNpemUgJXYgd2l0aG91dCBhIGJhdGNoaW5nIHdpbmRvdzsgdGhlIG1hcHBpbmcgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJlcXVlc3QgcHJvdmlkZWQ6IE1heGltdW0gYmF0Y2ggd2luZG93IGluIHNlY29uZHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBpZiBtYXhpbXVtIGJhdGNoIHNpemUgaXMgZ3JlYXRlciB0aGFuIDEwXFxcXFxcXCJcXFwiLCBbYl0pLFxcblxcdFxcXCJTZXQgTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzICgxLTMwMCksIG9yIGtlZXAgQmF0Y2hTaXplIGF0IDEwIG9yIGxlc3NcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZXZlbnRzb3VyY2VtYXBwaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXFxcIilcXG5cXHRfcGZfbGJzd19pc19zcXMobmFtZSlcXG5cXHRiIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhdGNoU2l6ZVxcXCIpKVxcblxcdGIgPiAxMFxcblxcdF9wZl9sYnN3X25vX3dpbmRvdyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tZmlmby1iYXRjaGluZy13aW5kb3dcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRklGTyBxdWV1ZXMgcmVqZWN0IGEgYmF0Y2hpbmcgd2luZG93XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBGSUZPIG9yZGVyaW5nIGZvcmJpZHMgaG9sZGluZyBhIGJhdGNoIG9wZW4uIEZJRk8tbmVzcyBjb21lcyBmcm9tIHRoZVxcbiMgcXVldWUgc2libGluZydzIEZpZm9RdWV1ZSBmbGFnIG9yIHRoZSAuZmlmbyBhcm4gc3VmZml4Llxcbl9wZl9sZmJ3X2lzX2ZpZm8obmFtZSkgaWYge1xcblxcdHEgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpXFxuXFx0cSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpKSA9PSB0cnVlXFxufVxcblxcbl9wZl9sZmJ3X2lzX2ZpZm8obmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0ZW5kc3dpdGgoYXJuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1lc20tZmlmby1iYXRjaGluZy13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kc1xcXCIsXFxuXFx0XFxcIkJhdGNoaW5nIHdpbmRvdyBvbiBhIEZJRk8gcXVldWUgc291cmNlOyB0aGUgbWFwcGluZyBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogQmF0Y2hpbmcgd2luZG93IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEZJRk8gcXVldWVzXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIE1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kcywgb3IgdXNlIGEgc3RhbmRhcmQgcXVldWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZXZlbnRzb3VyY2VtYXBwaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXFxcIilcXG5cXHRfcGZfbGZid19pc19maWZvKG5hbWUpXFxuXFx0dG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzXFxcIikpID4gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tc3FzLXN0YXJ0aW5nLXBvc2l0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNRUyBldmVudCBzb3VyY2VzIHJlamVjdCBTdGFydGluZ1Bvc2l0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTdGFydGluZ1Bvc2l0aW9uIGJlbG9uZ3MgdG8gc3RyZWFtIHNvdXJjZXM7IHF1ZXVlcyBoYXZlIG5vIG9mZnNldHMuXFxuIyBEZXRlY3RlZCB2aWEgYW4gaW4tdGVtcGxhdGUgcXVldWUgc2libGluZyBvciB0aGUgc3FzIGFybiBzZWdtZW50Llxcbl9wZl9sZXNwX2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcbn1cXG5cXG5fcGZfbGVzcF9pc19zcXMobmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0c3BsaXQoYXJuLCBcXFwiOlxcXCIpWzJdID09IFxcXCJzcXNcXFwiXFxufVxcblxcbl9wZl9sZXNwX3NldChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlN0YXJ0aW5nUG9zaXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVzbS1zcXMtc3RhcnRpbmctcG9zaXRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN0YXJ0aW5nUG9zaXRpb25cXFwiLFxcblxcdFxcXCJTdGFydGluZ1Bvc2l0aW9uIG9uIGFuIFNRUyBldmVudCBzb3VyY2U7IHRoZSBtYXBwaW5nIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBTdGFydGluZ1Bvc2l0aW9uIGlzIG5vdCB2YWxpZCBmb3IgU1FTIGV2ZW50IHNvdXJjZXMuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIFN0YXJ0aW5nUG9zaXRpb24gKGl0IG9ubHkgYXBwbGllcyB0byBLaW5lc2lzL0R5bmFtb0RCL0thZmthIHNvdXJjZXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWV2ZW50c291cmNlbWFwcGluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1xcXCIpXFxuXFx0X3BmX2xlc3BfaXNfc3FzKG5hbWUpXFxuXFx0X3BmX2xlc3Bfc2V0KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLW1lbW9yeS1tYXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTWVtb3J5U2l6ZSB0b3BzIG91dCBhdCAxMDI0MFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBoYXMgdGhlIDEyOCBmbG9vciBidXQgaXMgbWlzc2luZyB0aGUgMTAyNDAgY2FwXFxuIyAoZW5naW5lIGNsZWFuIG9uIDIwMDAwLCBGMzAzNCBvbiA2NCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtbWVtb3J5LW1heFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5U2l6ZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWVtb3J5U2l6ZSAldiBpcyBvdmVyIHRoZSBjYXA7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIidNZW1vcnlTaXplJyB2YWx1ZSBmYWlsZWQgdG8gc2F0aXNmeSBjb25zdHJhaW50OiBNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDI0MFxcXFxcXFwiXFxcIiwgW21dKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMTAyNDAgTUJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZnVuY3Rpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0bSA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NZW1vcnlTaXplXFxcIikpXFxuXFx0bSA+IDEwMjQwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLXRpbWVvdXQtbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRpbWVvdXQgdG9wcyBvdXQgYXQgOTAwIHNlY29uZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgaGFzIHRoZSAxIGZsb29yIGJ1dCBpcyBtaXNzaW5nIHRoZSA5MDAgY2FwIChlbmdpbmVcXG4jIGNsZWFuIG9uIDkwMSwgRjMwMzQgb24gMCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtdGltZW91dC1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRpbWVvdXQgJXYgaXMgb3ZlciB0aGUgMTUtbWludXRlIGNhcDsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiVmFsdWUgJyV2JyBhdCAndGltZW91dCcgZmFpbGVkIHRvIHNhdGlzZnkgY29uc3RyYWludDogTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gOTAwXFxcXFxcXCJcXFwiLCBbdCwgdF0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCA5MDAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1mdW5jdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXRcXFwiKSlcXG5cXHR0ID4gOTAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibG9nc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGZpbHRlciBwYXR0ZXJuIHN0YXJ0aW5nIHdpdGggJ1snIG11c3QgZW5kIHdpdGggJ10nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9sZ2ZwYl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9sb2dzL0ZpbHRlckFuZFBhdHRlcm5TeW50YXguaHRtbFxcXCJcXG5cXG5fcGZfbGdmcGJfbXNnKGtpbmQpIDo9IHNwcmludGYoXFxcIlRoZSAlcyBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgYnV0IGRvZXMgbm90IGVuZCB3aXRoICddJzsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiSWYgYSBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgaXQgbXVzdCBlbmQgd2l0aCAnXSdcXFxcXFxcIlxcXCIsIFtraW5kXSlcXG5cXG5fcGZfbGdmcGJfZml4IDo9IFxcXCJDbG9zZSB0aGUgYnJhY2tldCDigJQgYSBzcGFjZS1kZWxpbWl0ZWQgcGF0dGVybiBpcyBbZmllbGQxLCBmaWVsZDIsIC4uLl1cXFwiXFxuXFxuIyBUaGUgc2FtZSBwYXJzZXIgcnVucyBmb3IgbWV0cmljIGZpbHRlcnMgYW5kIHN1YnNjcmlwdGlvbiBmaWx0ZXJzLCBhbmQgaXRcXG4jIHJ1bnMgYmVmb3JlIGFueSBkZXN0aW5hdGlvbiB2YWxpZGF0aW9uIChiZW5jaCBjMDEvYzA2KS4gT25seSB0aGlzXFxuIyBzdGFydC9lbmQgcGFpcmluZyBpcyBjaGVja2VkIGhlcmU7IGEgZnVsbCBwYXR0ZXJuIHBhcnNlciBpcyBvdXQgb2Ygc2NvcGUuXFxuX3BmX2xnZnBiX3VuYmFsYW5jZWQocCkgaWYge1xcblxcdHQgOj0gdHJpbV9zcGFjZShwKVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcIltcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh0LCBcXFwiXVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJtZXRyaWNcXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJzdWJzY3JpcHRpb25cXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZWZhdWx0VmFsdWUgaXMgZW1pdHRlZCB3aGVuIGEgbG9nIGxpbmUgZG9lcyBub3QgbWF0Y2gsIGJ1dCBhIGRpbWVuc2lvblxcbiMgdmFsdWUgY2FuIG9ubHkgY29tZSBmcm9tIGEgbWF0Y2gg4oCUIHRoZSBzZXJ2aWNlIHJlamVjdHMgdGhlIGNvbWJpbmF0aW9uLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNUcmFuc2Zvcm1hdGlvbnMuJWQuRGVmYXVsdFZhbHVlXFxcIiwgW3QuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbiBzZXRzIGJvdGggRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJJbnZhbGlkIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbjogZGltZW5zaW9ucyBhbmQgZGVmYXVsdCB2YWx1ZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHByb3BlcnRpZXNcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgRGVmYXVsdFZhbHVlIHdoZW4gdGhlIHRyYW5zZm9ybWF0aW9uIGhhcyBEaW1lbnNpb25zLCBvciBkcm9wIHRoZSBEaW1lbnNpb25zXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sb2dzLW1ldHJpY2ZpbHRlci1tZXRyaWN0cmFuc2Zvcm1hdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcXFwiKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTWV0cmljVHJhbnNmb3JtYXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEZWZhdWx0VmFsdWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0ZGltcyA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEaW1lbnNpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShkaW1zKVxcblxcdGNvdW50KGRpbXMpID4gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxvZ3Mtc3Vic2NyaXB0aW9uLWtpbmVzaXMtcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBLaW5lc2lzIGRlc3RpbmF0aW9uIG5lZWRzIFJvbGVBcm5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2xnc2tyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2xvZ3MvU3Vic2NyaXB0aW9uRmlsdGVycy5odG1sXFxcIlxcblxcbiMgVGhlIGRlc3RpbmF0aW9uIGlzIHByb3ZhYmx5IEtpbmVzaXMgdHdvIHdheXM6IGEgbGl0ZXJhbFxcbiMgYXJuOjxwYXJ0aXRpb24+OmtpbmVzaXM6IHN0cmluZywgb3IgYSBSZWYvR2V0QXR0IHRoYXQgcmVzb2x2ZSgpIHR1cm5zIGludG9cXG4jIHRoZSBsb2dpY2FsIElEIG9mIGFuIGluLXRlbXBsYXRlIEFXUzo6S2luZXNpczo6U3RyZWFtLiBTY29wZWQgdG8gS2luZXNpcyDigJRcXG4jIHRoZSBiZW5jaCBlcnJvciBuYW1lcyBcXFwidmVuZG9yIGtpbmVzaXNcXFwiOyBvdGhlciB2ZW5kb3JzIHdlcmUgbm90IG1lYXN1cmVkLlxcbl9wZl9sZ3Nrcl9raW5lc2lzX2Rlc3QobmFtZSkgaWYge1xcblxcdGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXN0aW5hdGlvbkFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGQpXFxuXFx0cGFydHMgOj0gc3BsaXQoZCwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSAzXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG59XFxuXFxuX3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKSBpZiB7XFxuXFx0ZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc3RpbmF0aW9uQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRkIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXM6OlN0cmVhbVxcXCIpXFxufVxcblxcbiMgVHJ1ZSBhYnNlbmNlIG9mIFJvbGVBcm4gbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2xnc2tyX3JvbGVfYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiUm9sZUFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLXN1YnNjcmlwdGlvbi1raW5lc2lzLXJvbGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvbGVBcm5cXFwiLFxcblxcdFxcXCJUaGUgc3Vic2NyaXB0aW9uIGZpbHRlciB0YXJnZXRzIGEgS2luZXNpcyBzdHJlYW0gYnV0IHNldHMgbm8gUm9sZUFybjsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiZGVzdGluYXRpb25Bcm4gZm9yIHZlbmRvciBraW5lc2lzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgcm9sZUFyblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgUm9sZUFybiBmb3IgYSByb2xlIHRoYXQgbG9ncy5hbWF6b25hd3MuY29tIGNhbiBhc3N1bWUgd2l0aCBraW5lc2lzOlB1dFJlY29yZCBvbiB0aGUgc3RyZWFtXFxcIixcXG5cXHRfcGZfbGdza3JfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0X3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKVxcblxcdF9wZl9sZ3Nrcl9yb2xlX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1iYWNrdHJhY2tcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQmFja3RyYWNrIG9ubHkgd29ya3Mgb24gYXVyb3JhLW15c3FsLCB3aXRoIGEgd2luZG93IG9mIGF0IG1vc3QgMjU5MjAwIHNlY29uZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQXVyb3JhTXlTUUwuTWFuYWdpbmcuQmFja3RyYWNrLmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtYmFja3RyYWNrXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5CYWNrdHJhY2tXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIkJhY2t0cmFjayBpcyBvbmx5IGF2YWlsYWJsZSBvbiBhdXJvcmEtbXlzcWwgKFxcXFxcXFwiQmFja3RyYWNrIGlzIG5vdCBlbmFibGVkIGZvciB0aGUgJXMgZW5naW5lLlxcXFxcXFwiKVxcXCIsIFtlbmddKSxcXG5cXHRcXFwiUmVtb3ZlIEJhY2t0cmFja1dpbmRvdywgb3IgdXNlIHRoZSBhdXJvcmEtbXlzcWwgZW5naW5lXFxcIixcXG5cXHRfcGZfcmRzYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIpKVxcblxcdG4gPiAwXFxuXFx0ZW5nIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIilcXG5cXHRpc19zdHJpbmcoZW5nKVxcblxcdGVuZyAhPSBcXFwiYXVyb3JhLW15c3FsXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdHJhY2tcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQmFja3RyYWNrV2luZG93ICV2IGlzIG91dHNpZGUgMC0yNTkyMDAgc2Vjb25kcyAoNzIgaG91cnMpXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMjU5MjAwIHNlY29uZHNcXFwiLFxcblxcdF9wZl9yZHNidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIikgPT0gXFxcImF1cm9yYS1teXNxbFxcXCJcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIpKVxcblxcdG4gPiAyNTkyMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtYmFja3VwLXJldGVudGlvbi1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJCYWNrdXBSZXRlbnRpb25QZXJpb2QgbXVzdCBiZSBhdCBtb3N0IDM1IGRheXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtYmFja3VwLXJldGVudGlvbi1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQmFja3VwUmV0ZW50aW9uUGVyaW9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYWNrdXBSZXRlbnRpb25QZXJpb2QgJXYgZXhjZWVkcyB0aGUgbWF4aW11bTsgUkRTIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIlJldGVudGlvbiBwZXJpb2QgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM1LlxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGEgcmV0ZW50aW9uIHBlcmlvZCBvZiAzNSBkYXlzIG9yIGxlc3NcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t1cFJldGVudGlvblBlcmlvZFxcXCIpKVxcblxcdG4gPiAzNVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1iYWNrdXAtd2luZG93LWR1cmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBiYWNrdXAgd2luZG93IG11c3QgYmUgYXQgbGVhc3QgMzAgbWludXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFxcXCJISDpNTVxcXCIgLT4gbWludXRlcyBvZiBkYXk7IHVuZGVmaW5lZCBmb3IgYW55dGhpbmcgZWxzZS4gRGlnaXRzIGdvXFxuIyB0aHJvdWdoIGEgbG9va3VwIHRhYmxlIGJlY2F1c2UgdG9fbnVtYmVyIHJlamVjdHMgbGVhZGluZyB6ZXJvc1xcbiMgKHRvX251bWJlcihcXFwiMDNcXFwiKSBpcyB1bmRlZmluZWQgaW4gdGhlIGVuZ2luZSdzIFJlZ28gYnVpbGQpLlxcbl9wZl9yZHN3ZF9kaWdpdCA6PSB7XFxcIjBcXFwiOiAwLCBcXFwiMVxcXCI6IDEsIFxcXCIyXFxcIjogMiwgXFxcIjNcXFwiOiAzLCBcXFwiNFxcXCI6IDQsIFxcXCI1XFxcIjogNSwgXFxcIjZcXFwiOiA2LCBcXFwiN1xcXCI6IDcsIFxcXCI4XFxcIjogOCwgXFxcIjlcXFwiOiA5fVxcblxcbl9wZl9yZHN3ZF9taW4odCkgOj0gbSBpZiB7XFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0cmVnZXgubWF0Y2goYF4oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRgLCB0KVxcblxcdGggOj0gKF9wZl9yZHN3ZF9kaWdpdFtzdWJzdHJpbmcodCwgMCwgMSldICogMTApICsgX3BmX3Jkc3dkX2RpZ2l0W3N1YnN0cmluZyh0LCAxLCAxKV1cXG5cXHRtaSA6PSAoX3BmX3Jkc3dkX2RpZ2l0W3N1YnN0cmluZyh0LCAzLCAxKV0gKiAxMCkgKyBfcGZfcmRzd2RfZGlnaXRbc3Vic3RyaW5nKHQsIDQsIDEpXVxcblxcdG0gOj0gKGggKiA2MCkgKyBtaVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdXAtd2luZG93LWR1cmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QcmVmZXJyZWRCYWNrdXBXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIlByZWZlcnJlZEJhY2t1cFdpbmRvdyAnJXMnIGlzIG9ubHkgJXYgbWludXRlczsgUkRTIHJlcXVpcmVzIGF0IGxlYXN0IDMwIChcXFxcXFxcIkJhY2t1cCB3aW5kb3cgbXVzdCBiZSBhdCBsZWFzdCAzMCBtaW51dGVzLlxcXFxcXFwiKVxcXCIsIFt3LCBkXSksXFxuXFx0XFxcIldpZGVuIHRoZSB3aW5kb3cgdG8gMzAgbWludXRlcyBvciBtb3JlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0dyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKHcpXFxuXFx0cGFydHMgOj0gc3BsaXQodywgXFxcIi1cXFwiKVxcblxcdGNvdW50KHBhcnRzKSA9PSAyXFxuXFx0cyA6PSBfcGZfcmRzd2RfbWluKHBhcnRzWzBdKVxcblxcdGUgOj0gX3BmX3Jkc3dkX21pbihwYXJ0c1sxXSlcXG5cXHRkIDo9ICgoZSAtIHMpICsgMTQ0MCkgJSAxNDQwXFxuXFx0ZCA8IDMwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlByZWZlcnJlZEJhY2t1cFdpbmRvdyBtdXN0IGJlIGhoMjQ6bWktaGgyNDptaVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdXAtd2luZG93LWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmVmZXJyZWRCYWNrdXBXaW5kb3cgJyVzJyBpcyBub3QgaGgyNDptaS1oaDI0Om1pICgyNEggY2xvY2sgVVRDKTsgUkRTIHJlamVjdHMgaXQgYXQgY3JlYXRlIHRpbWVcXFwiLCBbd10pLFxcblxcdFxcXCJVc2UgdGhlIGhoMjQ6bWktaGgyNDptaSBmb3JtLCBlLmcuIDAzOjAwLTA0OjAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0dyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKHcpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0tKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0kYCwgdylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtZGJuYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJwb3N0Z3JlcyBEQk5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbGV0dGVyLXN0YXJ0IGhhbGYgb2YgdGhlIHNlcnZpY2UgbWVzc2FnZSBpcyBjbGFpbWVkOiB0aGVcXG4jIFxcXCJvbmx5IGFscGhhbnVtZXJpY1xcXCIgaGFsZiBpcyBtZWFzdXJhYmx5IHdyb25nIChiZW5jaF9kYiBkZXBsb3lzKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1kYm5hbWUtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EQk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkRCTmFtZSAnJXMnIGRvZXMgbm90IGJlZ2luIHdpdGggYSBsZXR0ZXIgKFxcXFxcXFwiREJOYW1lIG11c3QgYmVnaW4gd2l0aCBhIGxldHRlclxcXFxcXFwiKTsgdGhlIENyZWF0ZURCSW5zdGFuY2UgY2FsbCBmYWlsc1xcXCIsIFtkbl0pLFxcblxcdFxcXCJTdGFydCB0aGUgZGF0YWJhc2UgbmFtZSB3aXRoIGEgbGV0dGVyXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKSA9PSBcXFwicG9zdGdyZXNcXFwiXFxuXFx0ZG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EQk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhkbilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aXWAsIGRuKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1kZXNjcmlwdGlvbi1wcmludGFibGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUkRTIGdyb3VwIGRlc2NyaXB0aW9ucyBtdXN0IGJlIHByaW50YWJsZSBBU0NJSVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCU3VibmV0R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCUGFyYW1ldGVyR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuREJTdWJuZXRHcm91cERlc2NyaXB0aW9uXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bXFxcXHgyMC1cXFxceDdlXSokYCwgdilcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBEZXNjcmlwdGlvblxcXCJcXG59XFxuXFxuX3BmX3Jkc2Rlc2NfYmFkIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCB2XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJQYXJhbWV0ZXJHcm91cFxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bXFxcXHgyMC1cXFxceDdlXSokYCwgdilcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1kZXNjcmlwdGlvbi1wcmludGFibGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiRGVzY3JpcHRpb24gJyVzJyBpcyByZWplY3RlZDogUkRTIHRyZWF0cyBhbnkgbm9uLUFTQ0lJIGNoYXJhY3RlciBhcyBhIG5vbi1wcmludGFibGUgY29udHJvbCBjaGFyYWN0ZXJcXFwiLCBbdl0pLFxcblxcdFxcXCJXcml0ZSB0aGUgZGVzY3JpcHRpb24gaW4gcHJpbnRhYmxlIEFTQ0lJXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQlN1Ym5ldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgdl0gaW4gX3BmX3Jkc2Rlc2NfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWdwMy1pb3BzLXN0b3JhZ2UtdGhyZXNob2xkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImdwMyBiZWxvdyA0MDAgR2lCIGNhbm5vdCB0YWtlIGN1c3RvbSBJb3BzIG9yIFN0b3JhZ2VUaHJvdWdocHV0IChwb3N0Z3Jlcy9teXNxbClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc2dwM19oYXMobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9yZHNncDNfY3VzdG9tKG5hbWUpIGlmIF9wZl9yZHNncDNfaGFzKG5hbWUsIFxcXCJJb3BzXFxcIilcXG5cXG5fcGZfcmRzZ3AzX2N1c3RvbShuYW1lKSBpZiBfcGZfcmRzZ3AzX2hhcyhuYW1lLCBcXFwiU3RvcmFnZVRocm91Z2hwdXRcXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWdwMy1pb3BzLXN0b3JhZ2UtdGhyZXNob2xkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJncDMgd2l0aCAldiBHaUIgY2Fubm90IHRha2UgY3VzdG9tIElvcHMvU3RvcmFnZVRocm91Z2hwdXQgYmVsb3cgNDAwIEdpQiBmb3IgZW5naW5lICVzIChcXFxcXFxcIllvdSBjYW4ndCBzcGVjaWZ5IElPUFMgb3Igc3RvcmFnZSB0aHJvdWdocHV0IC4uLiBsZXNzIHRoYW4gNDAwLlxcXFxcXFwiKVxcXCIsIFtzLCBlbmddKSxcXG5cXHRcXFwiRHJvcCB0aGUgY3VzdG9tIElvcHMvU3RvcmFnZVRocm91Z2hwdXQsIG9yIGFsbG9jYXRlIGF0IGxlYXN0IDQwMCBHaUJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0ZW5nIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIilcXG5cXHRlbmcgaW4ge1xcXCJwb3N0Z3Jlc1xcXCIsIFxcXCJteXNxbFxcXCJ9XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TdG9yYWdlVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvY2F0ZWRTdG9yYWdlXFxcIikpXFxuXFx0cyA8IDQwMFxcblxcdF9wZl9yZHNncDNfY3VzdG9tKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWlvMS1pb3BzLXJhdGlvXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcInBvc3RncmVzIGlvMSBJb3BzIG1heSBub3QgZXhjZWVkIDUwIHBlciBHaUIgb2Ygc3RvcmFnZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIGJlbmNoZWQgZW5naW5lL3R5cGUgcGFpcjsgdGhlIGhpc3RvcmljYWwgNjQwMDAgSU9QUyBjYXAgaXNcXG4jIGdvbmUgKDgwMDAwIGRlcGxveWVkIGNsZWFuIGF0IHJhdGlvIDQwIG9uIDIwMjYtMDktMDMpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWlvMS1pb3BzLXJhdGlvXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzICV2IGlzICV2IHBlciBHaUIgZm9yICV2IEdpQjsgcG9zdGdyZXMgaW8xIGFsbG93cyBhdCBtb3N0IDUwIChcXFxcXFxcIkludmFsaWQgaW9wcyB0byBzdG9yYWdlIChHaUIpIHJhdGlvXFxcXFxcXCIpXFxcIiwgW24sIG4gLyBzLCBzXSksXFxuXFx0XFxcIktlZXAgSW9wcyBhdCBvciBiZWxvdyA1MCB4IEFsbG9jYXRlZFN0b3JhZ2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKSA9PSBcXFwicG9zdGdyZXNcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TdG9yYWdlVHlwZVxcXCIpID09IFxcXCJpbzFcXFwiXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvY2F0ZWRTdG9yYWdlXFxcIikpXFxuXFx0cyA+IDBcXG5cXHRuID4gcyAqIDUwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWlvcHMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiaW8xIGFuZCBpbzIgc3RvcmFnZSByZXF1aXJlIHRoZSBJb3BzIHByb3BlcnR5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWlvcHMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIlN0b3JhZ2VUeXBlICVzIHJlcXVpcmVzIElvcHMgKFxcXFxcXFwiVGhlIHN0b3JhZ2UgdHlwZSAlcyByZXF1aXJlcyBpb3BzIHRvIGJlIHNwZWNpZmllZC5cXFxcXFxcIilcXFwiLCBbc3QsIHN0XSksXFxuXFx0XFxcIlNldCBJb3BzIGFsb25nc2lkZSB0aGUgcHJvdmlzaW9uZWQtSU9QUyBzdG9yYWdlIHR5cGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRzdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN0b3JhZ2VUeXBlXFxcIilcXG5cXHRzdCBpbiB7XFxcImlvMVxcXCIsIFxcXCJpbzJcXFwifVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJJb3BzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1wYXNzd29yZC12YWxpZFwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYXN0ZXJVc2VyUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgd2l0aG91dCAnLycsICdAJywgJ1xcXFxcXFwiJyBvciBzcGFjZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzcHdfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCJcXG5cXG5fcGZfcmRzcHdfdHlwZXMgOj0ge1xcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIsIFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIn1cXG5cXG5fcGZfcmRzcHdfZm9yYmlkZGVuIDo9IHtcXFwiL1xcXCIsIFxcXCJAXFxcIiwgXFxcIlxcXFxcXFwiXFxcIiwgXFxcIiBcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiLFxcblxcdFxcXCJNYXN0ZXJVc2VyUGFzc3dvcmQgaXMgc2hvcnRlciB0aGFuIDggY2hhcmFjdGVyczsgUkRTIHJlamVjdHMgaXQgYXQgY3JlYXRlIHRpbWVcXFwiLFxcblxcdFxcXCJVc2UgOCsgY2hhcmFjdGVycywgb3IgYSBTZWNyZXRzIE1hbmFnZXIgcmVmZXJlbmNlXFxcIixcXG5cXHRfcGZfcmRzcHdfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiBfcGZfcmRzcHdfdHlwZXNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0cHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiKVxcblxcdGlzX3N0cmluZyhwdylcXG5cXHRjb3VudChwdykgPCA4XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1hc3RlclVzZXJQYXNzd29yZCBjb250YWlucyAnJXMnOyBSRFMgZm9yYmlkcyAnLycsICdAJywgZG91YmxlIHF1b3RlcyBhbmQgc3BhY2VzXFxcIiwgW2NoXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgZm9yYmlkZGVuIGNoYXJhY3Rlciwgb3IgdXNlIGEgU2VjcmV0cyBNYW5hZ2VyIHJlZmVyZW5jZVxcXCIsXFxuXFx0X3BmX3Jkc3B3X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4gX3BmX3Jkc3B3X3R5cGVzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHB3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFzdGVyVXNlclBhc3N3b3JkXFxcIilcXG5cXHRpc19zdHJpbmcocHcpXFxuXFx0c29tZSBjaCBpbiBfcGZfcmRzcHdfZm9yYmlkZGVuXFxuXFx0Y29udGFpbnMocHcsIGNoKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1wb3J0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkYXRhYmFzZSBwb3J0IG11c3QgYmUgd2l0aGluIDExNTAtNjU1MzVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc3BvcnRfb3V0KG4pIGlmIG4gPCAxMTUwXFxuXFxuX3BmX3Jkc3BvcnRfb3V0KG4pIGlmIG4gPiA2NTUzNVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvcnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBvcnQgJXYgaXMgb3V0c2lkZSAxMTUwLTY1NTM1IChcXFxcXFxcIkludmFsaWQgZW5kcG9pbnQgcG9ydCAldi4gVmFsaWQgcmFuZ2UgaXM6IDExNTAtNjU1MzVcXFxcXFxcIilcXFwiLCBbbiwgbl0pLFxcblxcdFxcXCJQaWNrIGEgcG9ydCBiZXR3ZWVuIDExNTAgYW5kIDY1NTM1XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb3J0XFxcIikpXFxuXFx0X3BmX3Jkc3BvcnRfb3V0KG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2VydmVybGVzcyB2MiBNaW5DYXBhY2l0eSBtdXN0IG5vdCBleGNlZWQgTWF4Q2FwYWNpdHksIGFuZCBNYXhDYXBhY2l0eSBpcyBhdCBtb3N0IDI1NlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yZHNzdjJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvYXVyb3JhLXNlcnZlcmxlc3MtdjIuc2V0dGluZy1jYXBhY2l0eS5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1pbkNhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNaW5DYXBhY2l0eSAldiBleGNlZWRzIE1heENhcGFjaXR5ICV2IChcXFxcXFxcIm1pbmltdW0gY2FwYWNpdHkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4aW11bSBjYXBhY2l0eVxcXFxcXFwiKVxcXCIsIFttbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5DYXBhY2l0eSA8PSBNYXhDYXBhY2l0eVxcXCIsXFxuXFx0X3BmX3Jkc3N2Ml91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1pbkNhcGFjaXR5XFxcIikpXFxuXFx0bXggOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24uTWF4Q2FwYWNpdHlcXFwiKSlcXG5cXHRtbiA+IG14XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1heENhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNYXhDYXBhY2l0eSAldiBpcyBhYm92ZSAyNTYgQUNVcyAoXFxcXFxcXCJUaGUgdmFsaWQgc2NhbGluZyByYW5nZSBmb3IgdGhpcyBjbHVzdGVyIGlzIDAuMCB0byAyNTYuMC5cXFxcXFxcIilcXFwiLCBbbXhdKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMjU2IEFDVXNcXFwiLFxcblxcdF9wZl9yZHNzdjJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIilcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2ZXJsZXNzVjJTY2FsaW5nQ29uZmlndXJhdGlvbi5NYXhDYXBhY2l0eVxcXCIpKVxcblxcdG14ID4gMjU2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXN1Ym5ldC1ncm91cC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRCIHN1Ym5ldCBncm91cCBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIHNwYWNlcywgZG90LCB1bmRlcnNjb3JlIGFuZCBoeXBoZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtc3VibmV0LWdyb3VwLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEQlN1Ym5ldEdyb3VwTmFtZSAnJXMnIGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJJbnZhbGlkIHN1Ym5ldCBncm91cCBuYW1lXFxcXFxcXCI6IFJEUyBhY2NlcHRzIG9ubHkgbGV0dGVycywgbnVtYmVycywgc3BhY2VzLCBkb3QsIHVuZGVyc2NvcmUgYW5kIGh5cGhlblxcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgc3VibmV0IGdyb3VwIHVzaW5nIFthLXpBLVowLTkgLl8tXSBvbmx5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQlN1Ym5ldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJTdWJuZXRHcm91cFxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05IC5fLV17MSwyNTV9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXdpbmRvdy1vdmVybGFwXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBiYWNrdXAgd2luZG93IGFuZCB0aGUgbWFpbnRlbmFuY2Ugd2luZG93IG11c3Qgbm90IG92ZXJsYXBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBcXFwiSEg6TU1cXFwiIC0+IG1pbnV0ZXMgb2YgZGF5OyB1bmRlZmluZWQgZm9yIGFueXRoaW5nIGVsc2UuIERpZ2l0cyBnb1xcbiMgdGhyb3VnaCBhIGxvb2t1cCB0YWJsZSBiZWNhdXNlIHRvX251bWJlciByZWplY3RzIGxlYWRpbmcgemVyb3NcXG4jICh0b19udW1iZXIoXFxcIjAzXFxcIikgaXMgdW5kZWZpbmVkIGluIHRoZSBlbmdpbmUncyBSZWdvIGJ1aWxkKS5cXG5fcGZfcmRzd29fZGlnaXQgOj0ge1xcXCIwXFxcIjogMCwgXFxcIjFcXFwiOiAxLCBcXFwiMlxcXCI6IDIsIFxcXCIzXFxcIjogMywgXFxcIjRcXFwiOiA0LCBcXFwiNVxcXCI6IDUsIFxcXCI2XFxcIjogNiwgXFxcIjdcXFwiOiA3LCBcXFwiOFxcXCI6IDgsIFxcXCI5XFxcIjogOX1cXG5cXG5fcGZfcmRzd29fbWluKHQpIDo9IG0gaWYge1xcblxcdGlzX3N0cmluZyh0KVxcblxcdHJlZ2V4Lm1hdGNoKGBeKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0kYCwgdClcXG5cXHRoIDo9IChfcGZfcmRzd29fZGlnaXRbc3Vic3RyaW5nKHQsIDAsIDEpXSAqIDEwKSArIF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMSwgMSldXFxuXFx0bWkgOj0gKF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMywgMSldICogMTApICsgX3BmX3Jkc3dvX2RpZ2l0W3N1YnN0cmluZyh0LCA0LCAxKV1cXG5cXHRtIDo9IChoICogNjApICsgbWlcXG59XFxuXFxuIyBUaGUgYmFja3VwIHdpbmRvdyByZWN1cnMgZGFpbHksIHNvIGEgc2FtZS1kYXkgbWFpbnRlbmFuY2Ugd2luZG93XFxuIyBvdmVybGFwcyB3aGVuZXZlciB0aGUgdGltZS1vZi1kYXkgaW50ZXJ2YWxzIGludGVyc2VjdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy13aW5kb3ctb3ZlcmxhcFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYWNrdXAgd2luZG93ICVzIG92ZXJsYXBzIG1haW50ZW5hbmNlIHdpbmRvdyAlczsgUkRTIHJlamVjdHMgdGhlIHBhaXIgKFxcXFxcXFwiVGhlIGJhY2t1cCB3aW5kb3cgYW5kIG1haW50ZW5hbmNlIHdpbmRvdyBtdXN0IG5vdCBvdmVybGFwLlxcXFxcXFwiKVxcXCIsIFtidywgbXddKSxcXG5cXHRcXFwiU2VwYXJhdGUgdGhlIHR3byB3aW5kb3dzIGluIHRpbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRidyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKGJ3KVxcblxcdGJwIDo9IHNwbGl0KGJ3LCBcXFwiLVxcXCIpXFxuXFx0Y291bnQoYnApID09IDJcXG5cXHRicyA6PSBfcGZfcmRzd29fbWluKGJwWzBdKVxcblxcdGJlIDo9IF9wZl9yZHN3b19taW4oYnBbMV0pXFxuXFx0YnMgPCBiZVxcblxcdG13IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3dcXFwiKVxcblxcdGlzX3N0cmluZyhtdylcXG5cXHRtcCA6PSBzcGxpdChsb3dlcihtdyksIFxcXCItXFxcIilcXG5cXHRjb3VudChtcCkgPT0gMlxcblxcdG0xIDo9IHNwbGl0KG1wWzBdLCBcXFwiOlxcXCIpXFxuXFx0bTIgOj0gc3BsaXQobXBbMV0sIFxcXCI6XFxcIilcXG5cXHRjb3VudChtMSkgPT0gM1xcblxcdGNvdW50KG0yKSA9PSAzXFxuXFx0bTFbMF0gPT0gbTJbMF1cXG5cXHRtcyA6PSBfcGZfcmRzd29fbWluKHNwcmludGYoXFxcIiVzOiVzXFxcIiwgW20xWzFdLCBtMVsyXV0pKVxcblxcdG1lIDo9IF9wZl9yZHN3b19taW4oc3ByaW50ZihcXFwiJXM6JXNcXFwiLCBbbTJbMV0sIG0yWzJdXSkpXFxuXFx0bXMgPCBtZVxcblxcdGJzIDwgbWVcXG5cXHRtcyA8IGJlXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1hbGlhcy1jbG91ZGZyb250LXpvbmUtaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ2xvdWRGcm9udCBhbGlhcyB0YXJnZXQgbXVzdCB1c2UgaG9zdGVkIHpvbmUgWjJGRFROREFUQVFZVzJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFdmVyeSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBpcyBhbGlhc2VkIHRocm91Z2ggdGhlIHNpbmdsZSBnbG9iYWwgaG9zdGVkXFxuIyB6b25lIFoyRkRUTkRBVEFRWVcyLiBBbnkgb3RoZXIgQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkIChhbiBBTEIncyByZWdpb25hbFxcbiMgem9uZSBpZCBpcyB0aGUgY2xhc3NpYyBwYXN0ZSBlcnJvcikgZmFpbHMgYXQgZGVwbG95IHRpbWUgd2l0aCBcXFwidGhlIGFsaWFzXFxuIyB0YXJnZXQgbmFtZSBkb2VzIG5vdCBsaWUgd2l0aGluIHRoZSB0YXJnZXQgem9uZVxcXCIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWFsaWFzLWNsb3VkZnJvbnQtem9uZS1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgYWxpYXMgdGFyZ2V0cyBhIENsb3VkRnJvbnQgZG9tYWluLCBzbyBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgbXVzdCBiZSBaMkZEVE5EQVRBUVlXMiwgbm90ICclcydcXFwiLCBbemlkXSksXFxuXFx0XFxcIlNldCBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgdG8gWjJGRFROREFUQVFZVzIgKGluIHRoZSBDREssIHJvdXRlNTNfdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0IGRvZXMgdGhpcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvY2ZfcmVnaW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0ZG5zIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuRE5TTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGRucylcXG5cXHRlbmRzd2l0aCh0cmltX3N1ZmZpeChsb3dlcihkbnMpLCBcXFwiLlxcXCIpLCBcXFwiLmNsb3VkZnJvbnQubmV0XFxcIilcXG5cXHR6aWQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6aWQpXFxuXFx0emlkICE9IFxcXCJaMkZEVE5EQVRBUVlXMlxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWFwZXgtY25hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ05BTUUgcmVjb3JkIGlzIG5vdCBwZXJtaXR0ZWQgYXQgdGhlIHpvbmUgYXBleFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M19hcGV4X25vcm0obikgOj0gdHJpbV9zdWZmaXgobG93ZXIobiksIFxcXCIuXFxcIilcXG5cXG4jIFRoZSBlbmdpbmUncyBFMzAyMyBjYXRjaGVzIGFuIGFwZXggQ05BTUUgb25seSB3aGVuIHRoZSByZWNvcmQgY2FycmllcyBhXFxuIyBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lLiBDREsgTDIgYWx3YXlzIGxpbmtzIHJlY29yZHMgd2l0aFxcbiMgSG9zdGVkWm9uZUlkOiB7XFxcIlJlZlxcXCI6IDx6b25lPn0sIHdoaWNoIEUzMDIzIGRvZXMgbm90IHNlZSAobWVhc3VyZWQgMjAyNi0wOS0wMixcXG4jIGVuZ2luZSAxLjcuMC1iZXRhKS4gcmVzb2x2ZSgpIHR1cm5zIHN1Y2ggYSBSZWYgaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRCxcXG4jIHNvIHdoZW4gdGhhdCBJRCBuYW1lcyBhIEhvc3RlZFpvbmUgaW4gdGhlIHNhbWUgdGVtcGxhdGUgd2UgY2FuIHJlYWQgaXRzXFxuIyBsaXRlcmFsIE5hbWUgYW5kIGRvIHRoZSBhcGV4IGNvbXBhcmlzb24gb3Vyc2VsdmVzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1hcGV4LWNuYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBIENOQU1FIHJlY29yZCBpcyBub3QgcGVybWl0dGVkIGF0IHRoZSB6b25lIGFwZXggKCclcycpOyB0aGUgZGVwbG95bWVudCBmYWlscyB3aXRoIFxcXFxcXFwiUlJTZXQgb2YgdHlwZSBDTkFNRSAuLi4gaXMgbm90IHBlcm1pdHRlZCBhdCBhcGV4XFxcXFxcXCJcXFwiLCBbcmVjTmFtZV0pLFxcblxcdFxcXCJVc2UgYW4gYWxpYXMgQS9BQUFBIHJlY29yZCBmb3IgdGhlIGFwZXggKEFsaWFzVGFyZ2V0KSwgb3IgbW92ZSB0aGUgQ05BTUUgdG8gYSBzdWJkb21haW5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcmVzb3VyY2UtcmVjb3JkLXNldHMtY2hvb3NpbmctYWxpYXMtbm9uLWFsaWFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHpyZWYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6cmVmKVxcblxcdHpyZWYgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6SG9zdGVkWm9uZVxcXCIpXFxuXFx0em9uZU5hbWUgOj0gcmVzb2x2ZSh6cmVmLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoem9uZU5hbWUpXFxuXFx0cmVjTmFtZSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhyZWNOYW1lKVxcblxcdF9wZl9yNTNfYXBleF9ub3JtKHJlY05hbWUpID09IF9wZl9yNTNfYXBleF9ub3JtKHpvbmVOYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtZ2VvbG9jYXRpb24tZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgZXhwcmVzc2VzIHRoaXMgYXMgYSBvbmVPZiwgd2hpY2ggdGhlIHNlcnZlci1zaWRlXFxuIyBwcmUtZGVwbG95IHZhbGlkYXRpb24gZW5mb3JjZXMgKFxcXCIyIHN1YnNjaGVtYXMgbWF0Y2hlZCBpbnN0ZWFkIG9mIG9uZVxcXCIpIGJ1dFxcbiMgdGhlIGJ1bmRsZWQgZW5naW5lIGRvZXMgbm90IGV2YWx1YXRlIOKAlCBoZW5jZSB1cHN0cmVhbTogcGVuZGluZy1lbmdpbmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWdlb2xvY2F0aW9uLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR2VvTG9jYXRpb25cXFwiLFxcblxcdFxcXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlOyBDbG91ZEZvcm1hdGlvbiByZWplY3RzIHRoZSByZWNvcmQgc2V0IGJlZm9yZSBwcm92aXNpb25pbmdcXFwiLFxcblxcdFxcXCJLZWVwIGVpdGhlciB0aGUgQ29udGluZW50Q29kZSBvciB0aGUgQ291bnRyeUNvZGUgKGFkZCBTdWJkaXZpc2lvbkNvZGUgb25seSBuZXh0IHRvIENvdW50cnlDb2RlIFVTKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtcm91dGU1My1yZWNvcmRzZXQtZ2VvbG9jYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRnZW8gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5HZW9Mb2NhdGlvblxcXCIpXFxuXFx0aXNfb2JqZWN0KGdlbylcXG5cXHRpc19zdHJpbmcob2JqZWN0LmdldChnZW8sIFxcXCJDb250aW5lbnRDb2RlXFxcIiwgbnVsbCkpXFxuXFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoZ2VvLCBcXFwiQ291bnRyeUNvZGVcXFwiLCBudWxsKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggQWxpYXNUYXJnZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdFxcXCJNdWx0aVZhbHVlQW5zd2VyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIEFsaWFzVGFyZ2V0OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJNdWx0aXZhbHVlIGFuc3dlciBycnNldCBzaG91bGQgbm90IGJlIGFuIGFsaWFzIHJyc2V0XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgcGxhaW4gbXVsdGl2YWx1ZSByZWNvcmRzIHdpdGggUmVzb3VyY2VSZWNvcmRzLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXIgYW5kIGtlZXAgdGhlIGFsaWFzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOUyByZWNvcmRzIHRha2Ugbm8gcm91dGluZyBwb2xpY3k7IENOQU1FIGNhbm5vdCBiZSBtdWx0aXZhbHVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfdHlwb2xfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbl9wZl9yNTNfdHlwb2xfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3R5cG9sX3Byb3BzXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BdKSkgIT0gbnVsbFxcbn1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuIyBPbmx5IGNvbWJpbmF0aW9ucyB0aGF0IGZhaWxlZCBvbiBhIHJlYWwgZGVwbG95IGFyZSBmbGFnZ2VkLiBTT0EvRFMgd2l0aCBhXFxuIyByb3V0aW5nIHBvbGljeSBhcmUgYWxzbyBkb2N1bWVudGVkIGFzIHVuc3VwcG9ydGVkIGJ1dCB3ZXJlIG5vdCBtZWFzdXJlZCwgc29cXG4jIHRoZXkgYXJlIGRlbGliZXJhdGVseSBsZWZ0IG91dCAoc2VlIHRoZSBkaXNjb3ZlcnkgaXNzdWUpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkFuIE5TIHJlY29yZCBjYW5ub3QgdXNlIGEgcm91dGluZyBwb2xpY3k7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcInRoaXMgdHlwZSBvZiBSUlNldCBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgYSBzaW1wbGUgcmVjb3JkIHNldCBmb3IgTlMgcmVjb3JkcyAobm8gV2VpZ2h0L1JlZ2lvbi9GYWlsb3Zlci9HZW9Mb2NhdGlvbi9NdWx0aVZhbHVlQW5zd2VyL0NpZHJSb3V0aW5nQ29uZmlnKVxcXCIsXFxuXFx0X3BmX3I1M190eXBvbF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiTlNcXFwiXFxuXFx0X3BmX3I1M190eXBvbF9oYXNfcG9saWN5KG5hbWUpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkEgQ05BTUUgcmVjb3JkIGNhbm5vdCB1c2UgdGhlIG11bHRpdmFsdWUgYW5zd2VyIHJvdXRpbmcgcG9saWN5OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJ0aGlzIHR5cGUgb2YgUlJTZXQgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiUG9pbnQgdGhlIG11bHRpdmFsdWUgcmVjb3JkcyBhdCBBL0FBQUEgKG9yIGFub3RoZXIgc3VwcG9ydGVkIHR5cGUpLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdF9wZl9yNTNfdHlwb2xfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVjb3JkIHNldCBuZWVkcyBBbGlhc1RhcmdldCBvciB0aGUgZnVsbCBUVEwrUmVzb3VyY2VSZWNvcmRzIHBhaXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M192YWxzcmNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbiMgVGhlIHNlcnZpY2UgZXhwZWN0cyBcXFwiZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kXFxuIyBSZXNvdXJjZVJlY29yZHNdXVxcXCIgKFRyYWZmaWNQb2xpY3lJbnN0YW5jZUlkIGhhcyBubyBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSkuXFxuIyBUaGUgVFRMK0FsaWFzVGFyZ2V0IGNvbWJpbmF0aW9uIGlzIGFscmVhZHkgdGhlIGVuZ2luZSdzIEUzMDI5LCBzbyB0aGlzIHJ1bGVcXG4jIGNvdmVycyB0aGUgcmVtYWluaW5nIHNoYXBlczogYWxpYXMgcGx1cyByZWNvcmRzLCBhbmQgYW4gaW5jb21wbGV0ZSBub24tYWxpYXNcXG4jIGdyb3VwIChyZWNvcmRzIHdpdGhvdXQgVFRMLCBUVEwgd2l0aG91dCByZWNvcmRzLCBvciBuZWl0aGVyKS5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSkgaWYge1xcblxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIilcXG59XFxuXFxuX3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIpICE9IG51bGxcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRcXFwiQWxpYXNUYXJnZXQgYW5kIFJlc291cmNlUmVjb3JkcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlOyB0aGUgc2VydmljZSBleHBlY3RzIGV4YWN0bHkgb25lIG9mIEFsaWFzVGFyZ2V0IG9yIFRUTC1wbHVzLVJlc291cmNlUmVjb3Jkc1xcXCIsXFxuXFx0XFxcIktlZXAgdGhlIEFsaWFzVGFyZ2V0IGFuZCBkcm9wIFJlc291cmNlUmVjb3Jkcywgb3IgbWFrZSBpdCBhIHBsYWluIHJlY29yZCB3aXRoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRfcGZfcjUzX3ZhbHNyY191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSlcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRcXFwiQSBub24tYWxpYXMgcmVjb3JkIHNldCBuZWVkcyBib3RoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzOyB0aGUgc2VydmljZSByZWplY3RzIGFuIGluY29tcGxldGUgcGFpciB3aXRoIFxcXFxcXFwiRXhwZWN0ZWQgZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kIFJlc291cmNlUmVjb3Jkc11dIC4uLiBmb3VuZCBub25lXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTcGVjaWZ5IFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzIHRvZ2V0aGVyLCBvciB1c2UgQWxpYXNUYXJnZXQgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX3I1M192YWxzcmNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0bm90IF9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKVxcblxcdG5vdCBfcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKVxcbn1cXG5cXG5fcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKSBpZiB7XFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3JyKG5hbWUpXFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHJlY29yZCBzZXQgY2FuIHVzZSBvbmx5IG9uZSByb3V0aW5nIHBvbGljeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIGVuZm9yY2VzIFxcXCJFeHBlY3RlZCBleGFjdGx5IG9uZSBvZiBbV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLFxcbiMgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIEdlb1Byb3hpbWl0eUxvY2F0aW9uLCBvciBDaWRyUm91dGluZ0NvbmZpZ11cXFwiLlxcbiMgR2VvUHJveGltaXR5TG9jYXRpb24gaXMgbm90IGEgQ2xvdWRGb3JtYXRpb24gcHJvcGVydHksIHNvIGZpdmUgcmVtYWluIGhlcmUuXFxuIyBNdWx0aVZhbHVlQW5zd2VyOiBmYWxzZSBpcyB0cmVhdGVkIGFzIGFic2VudCDigJQgb25seSB0cnVlIHNlbGVjdHMgdGhlIHBvbGljeS5cXG5fcGZfcjUzX3BvbHhfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3BvbHhfcHJlc2VudChuYW1lLCBwcm9wKSBpZiB7XFxuXFx0cHJvcCAhPSBcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIFxcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIikgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuX3BmX3I1M19wb2x4X3BvbGljaWVzKG5hbWUpIDo9IHBzIGlmIHtcXG5cXHRwcyA6PSBbcCB8IHNvbWUgcCBpbiBhcnJheS5jb25jYXQoX3BmX3I1M19wb2x4X3Byb3BzLCBbXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiXSk7IF9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIHApXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQSByZWNvcmQgc2V0IGNhbiB1c2Ugb25seSBvbmUgcm91dGluZyBwb2xpY3ksIGJ1dCAldiBhcmUgYWxsIHNwZWNpZmllZFxcXCIsIFtwc10pLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIG9mIFdlaWdodCwgUmVnaW9uLCBGYWlsb3ZlciwgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIG9yIENpZHJSb3V0aW5nQ29uZmlnIGFuZCBzcGxpdCB0aGUgcmVzdCBpbnRvIHNlcGFyYXRlIHJlY29yZCBzZXRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRwcyA6PSBfcGZfcjUzX3BvbHhfcG9saWNpZXMobmFtZSlcXG5cXHRjb3VudChwcykgPiAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXRJZGVudGlmaWVyIGFuZCBhIHJvdXRpbmcgcG9saWN5IG11c3QgYXBwZWFyIHRvZ2V0aGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfc2lkcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuX3BmX3I1M19zaWRwX3Byb3BzIDo9IFtcXFwiV2VpZ2h0XFxcIiwgXFxcIlJlZ2lvblxcXCIsIFxcXCJGYWlsb3ZlclxcXCIsIFxcXCJHZW9Mb2NhdGlvblxcXCIsIFxcXCJDaWRyUm91dGluZ0NvbmZpZ1xcXCJdXFxuXFxuX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3NpZHBfcHJvcHNcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiQSByb3V0aW5nIHBvbGljeSBpcyBjb25maWd1cmVkIGJ1dCBTZXRJZGVudGlmaWVyIGlzIG1pc3Npbmc7IHRoZSBDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiTWlzc2luZyBmaWVsZCAnU2V0SWRlbnRpZmllcidcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIFNldElkZW50aWZpZXIgdGhhdCBpcyB1bmlxdWUgYW1vbmcgdGhlIHJlY29yZCBzZXRzIHNoYXJpbmcgdGhpcyBOYW1lIGFuZCBUeXBlXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0X3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSlcXG5cXHRub3QgaXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtc2V0LWlkZW50aWZpZXItcGFpcmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIsXFxuXFx0XFxcIlNldElkZW50aWZpZXIgaXMgc3BlY2lmaWVkIGJ1dCBubyByb3V0aW5nIHBvbGljeSBpczsgdGhlIHNlcnZpY2UgZXhwZWN0cyBleGFjdGx5IG9uZSBvZiBXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsIEdlb0xvY2F0aW9uLCBNdWx0aVZhbHVlQW5zd2VyLCBvciBDaWRyUm91dGluZ0NvbmZpZyBhbmQgZmluZHMgbm9uZVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBTZXRJZGVudGlmaWVyIGZyb20gdGhpcyBzaW1wbGUgcmVjb3JkIHNldCwgb3IgYWRkIHRoZSByb3V0aW5nIHBvbGljeSBpdCB3YXMgbWVhbnQgZm9yXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcblxcdG5vdCBfcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtdHRsLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUVEwgbXVzdCBmaXQgaW4gMzIgYml0cyAoMC4uMjE0NzQ4MzY0NyBzZWNvbmRzKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCBpcyBlbmZvcmNlZDogdGhlIHNlcnZpY2UgcmVqZWN0ZWQgOTk5OTk5OTk5OSB3aXRoXFxuIyBcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjE0NzQ4MzY0N1xcXCIuIE5lZ2F0aXZlIFRUTHMgYXJlXFxuIyB1bnRlc3RlZCwgc28gdGhleSBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBmbGFnZ2VkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My10dGwtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVFRMIG11c3QgYmUgYXQgbW9zdCAyMTQ3NDgzNjQ3IHNlY29uZHMsIGdvdCAldlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBUVEwgdG8gYSAzMi1iaXQgdmFsdWU7IGFueXRoaW5nIGFib3ZlIGEgZGF5IHJhcmVseSBoZWxwcyBjYWNoaW5nIGFueXdheVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NoYW5nZVJlc291cmNlUmVjb3JkU2V0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UVExcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHQpXFxuXFx0biA+IDIxNDc0ODM2NDdcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiV2VpZ2h0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgaXMgZW5mb3JjZWQ6IHRoZSBzZXJ2aWNlIHJlamVjdGVkIDMwMCB3aXRoIFxcXCJNZW1iZXJcXG4jIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjU1XFxcIi4gTmVnYXRpdmUgd2VpZ2h0cyBhcmUgdW50ZXN0ZWQsXFxuIyBzbyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbm90IGZsYWdnZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJXZWlnaHQgbXVzdCBiZSBhdCBtb3N0IDI1NSwgZ290ICV2XFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFdlaWdodCB0byBhIHZhbHVlIGluIFswLCAyNTVdOyB3ZWlnaHRzIGFyZSByZWxhdGl2ZSwgc28gc2NhbGUgdGhlIGdyb3VwIGRvd24gcHJvcG9ydGlvbmFsbHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIilcXG5cXHRuIDo9IHRvX251bWJlcih3KVxcblxcdG4gPiAyNTVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXpvbmVuYW1lLXRyYWlsaW5nLWRvdFwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSG9zdGVkWm9uZU5hbWUgbXVzdCBlbmQgd2l0aCBhIHRyYWlsaW5nIGRvdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENsb3VkRm9ybWF0aW9uIGxvb2tzIHRoZSB6b25lIHVwIGJ5IHRoZSBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lIGFuZCBkb2VzIG5vdFxcbiMgbm9ybWFsaXplIHRoZSB0cmFpbGluZyBkb3Q6IHRoZSBzYW1lIHN0YWNrIGRlcGxveWVkIGNsZWFuIHdpdGhcXG4jIFxcXCJ6b25lLmV4YW1wbGUuXFxcIiBhbmQgZmFpbGVkIHdpdGggTm90Rm91bmQgZm9yIFxcXCJ6b25lLmV4YW1wbGVcXFwiICgyMDI2LTA5LTAyKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtem9uZW5hbWUtdHJhaWxpbmctZG90XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSG9zdGVkWm9uZU5hbWUgJyVzJyBpcyBtaXNzaW5nIHRoZSB0cmFpbGluZyBkb3QsIHNvIENsb3VkRm9ybWF0aW9uIGZhaWxzIHRoZSBsb29rdXAgd2l0aCBcXFxcXFxcIk5vIGhvc3RlZCB6b25lIHdpdGggbmFtZSAuLi4gZm91bmRcXFxcXFxcIlxcXCIsIFt6bl0pLFxcblxcdHNwcmludGYoXFxcIlVzZSAnJXMuJyAod2l0aCB0aGUgdHJhaWxpbmcgZG90KVxcXCIsIFt6bl0pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHpuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSG9zdGVkWm9uZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh6bilcXG5cXHR6biAhPSBcXFwiXFxcIlxcblxcdG5vdCBlbmRzd2l0aCh6biwgXFxcIi5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWFjY2VsZXJhdGUtZG90dGVkLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUcmFuc2ZlciBBY2NlbGVyYXRpb24gcmVqZWN0cyBidWNrZXQgbmFtZXMgd2l0aCBwZXJpb2RzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBlbmRwb2ludHMgYXJlIEROUy1iYXNlZCwgc28gYnVja2V0IG5hbWVzIGNvbnRhaW5pbmdcXG4jIHBlcmlvZHMgYXJlIHJlamVjdGVkIGF0IGNyZWF0aW9uLiBPbmx5IGEgbGl0ZXJhbCBCdWNrZXROYW1lIGlzIGNoZWNrYWJsZTtcXG4jIENESy1nZW5lcmF0ZWQgbmFtZXMgbmV2ZXIgY29udGFpbiBwZXJpb2RzIGFueXdheS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWFjY2VsZXJhdGUtZG90dGVkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2VsZXJhdGVDb25maWd1cmF0aW9uLkFjY2VsZXJhdGlvblN0YXR1c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQnVja2V0IG5hbWUgJyVzJyBjb250YWlucyBwZXJpb2RzLCB3aGljaCBUcmFuc2ZlciBBY2NlbGVyYXRpb24gZG9lcyBub3Qgc3VwcG9ydDsgQ3JlYXRlQnVja2V0IGZhaWxzIHdpdGggXFxcXFxcXCJTMyBUcmFuc2ZlciBBY2NlbGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgYnVja2V0cyB3aXRoIHBlcmlvZHMgKC4pIGluIHRoZWlyIG5hbWVzXFxcXFxcXCJcXFwiLCBbYm5dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBidWNrZXQgd2l0aG91dCBwZXJpb2RzLCBvciBkcm9wIEFjY2VsZXJhdGVDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvdHJhbnNmZXItYWNjZWxlcmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb24uQWNjZWxlcmF0aW9uU3RhdHVzXFxcIikgPT0gXFxcIkVuYWJsZWRcXFwiXFxuXFx0Ym4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CdWNrZXROYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoYm4pXFxuXFx0Y29udGFpbnMoYm4sIFxcXCIuXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1idWNrZXQtcG9saWN5LWFjdGlvbi1yZXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdC1sZXZlbCBhY3Rpb25zIG5lZWQgYW4gb2JqZWN0LWxldmVsIFJlc291cmNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFuIG9iamVjdC1sZXZlbCBhY3Rpb24gd2hvc2Ugc3RhdGVtZW50IGxpc3RzIG9ubHkgYnVja2V0LWxldmVsIEFSTnMgYXBwbGllc1xcbiMgdG8gbm90aGluZywgYW5kIFMzIHJlamVjdHMgdGhlIHBvbGljeS4gQSBidWNrZXQtbGV2ZWwgQVJOIGlzIHByb3ZhYmxlIHR3b1xcbiMgd2F5czogYSBsaXRlcmFsIGFybjouLi46czM6OjpuYW1lIHdpdGggbm8gXFxcIi9cXFwiIGluIHRoZSBuYW1lIHBhcnQsIG9yIGEgdmFsdWVcXG4jIHRoYXQgcmVzb2x2ZSgpIHR1cm5zIGludG8gdGhlIGxvZ2ljYWwgSUQgb2YgYW4gaW4tdGVtcGxhdGUgYnVja2V0IChSZWYgYW5kXFxuIyBGbjo6R2V0QXR0IEFybiBib3RoIGRvIOKAlCB0aGUgR2V0QXR0IG9mIGEgYnVja2V0IGlzIGl0cyBidWNrZXQgQVJOKS4gRmlyZXNcXG4jIG9ubHkgd2hlbiBldmVyeSByZXNvdXJjZSBpbiB0aGUgc3RhdGVtZW50IGlzIHByb3ZhYmx5IGJ1Y2tldC1sZXZlbCwgc29cXG4jIHVucmVzb2x2YWJsZSBlbnRyaWVzIChlLmcuIEZuOjpTdWIgXFxcIiR7Qi5Bcm59LypcXFwiKSBtdXRlIHRoZSBzdGF0ZW1lbnQuXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIHN0YXJ0c3dpdGgobG93ZXIoYSksIFxcXCJzMzpnZXRvYmplY3RcXFwiKVxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBzdGFydHN3aXRoKGxvd2VyKGEpLCBcXFwiczM6cHV0b2JqZWN0XFxcIilcXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgc3RhcnRzd2l0aChsb3dlcihhKSwgXFxcInMzOmRlbGV0ZW9iamVjdFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIGxvd2VyKGEpIGluIHtcXFwiczM6YWJvcnRtdWx0aXBhcnR1cGxvYWRcXFwiLCBcXFwiczM6cmVzdG9yZW9iamVjdFxcXCIsIFxcXCJzMzpsaXN0bXVsdGlwYXJ0dXBsb2FkcGFydHNcXFwifVxcblxcbl9wZl9zM2JwYXJfYnVja2V0X2xldmVsKHIpIGlmIHIgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9idWNrZXRfbGV2ZWwocikgaWYge1xcblxcdHN0YXJ0c3dpdGgociwgXFxcImFybjpcXFwiKVxcblxcdGNvbnRhaW5zKHIsIFxcXCI6czM6OjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KHIsIFxcXCI6OjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA9PSAyXFxuXFx0bm90IGNvbnRhaW5zKHBhcnRzWzFdLCBcXFwiL1xcXCIpXFxufVxcblxcbl9wZl9zM2JwYXJfYWN0aW9ucyhuYW1lLCBpKSA6PSBbYV0gaWYge1xcblxcdGEgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbaV0pKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfczNicGFyX2FjdGlvbnMobmFtZSwgaSkgOj0gYWN0cyBpZiB7XFxuXFx0aXRlbXMgOj0gW2l0IHwgc29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuQWN0aW9uXFxcIiwgW2ldKSldXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGFjdHMgOj0gW3YgfCBzb21lIGl0IGluIGl0ZW1zOyB2IDo9IGl0LnZhbHVlOyBpc19zdHJpbmcodildXFxufVxcblxcbl9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIGkpIDo9IFtyXSBpZiB7XFxuXFx0ciA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSlcXG5cXHRpc19zdHJpbmcocilcXG59XFxuXFxuX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgaSkgOj0gcnMgaWYge1xcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSldXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdHJzIDo9IFt2IHwgc29tZSBpdCBpbiBpdGVtczsgdiA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlLiVkXFxcIiwgW2ksIGl0LmluZGV4XSkpOyBpc19zdHJpbmcodildXFxuXFx0Y291bnQocnMpID09IGNvdW50KGl0ZW1zKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWJ1Y2tldC1wb2xpY3ktYWN0aW9uLXJlc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZVxcXCIsIFtzdC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkFjdGlvbiAnJXMnIHRhcmdldHMgb2JqZWN0cyBidXQgdGhlIHN0YXRlbWVudCdzIHJlc291cmNlcyBhcmUgYWxsIGJ1Y2tldC1sZXZlbCBBUk5zOyBTMyByZWplY3RzIHRoZSBwb2xpY3kgd2l0aCBcXFxcXFxcIkFjdGlvbiBkb2VzIG5vdCBhcHBseSB0byBhbnkgcmVzb3VyY2UocykgaW4gc3RhdGVtZW50XFxcXFxcXCJcXFwiLCBbYV0pLFxcblxcdFxcXCJBZGQgdGhlIG9iamVjdCBmb3JtIG9mIHRoZSBBUk4gKGFwcGVuZCAvKiBvciBhIGtleSBwYXR0ZXJuKSB0byBSZXNvdXJjZSwgb3IgZHJvcCB0aGUgb2JqZWN0LWxldmVsIGFjdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2J1Y2tldC1wb2xpY2llcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XFxcIilcXG5cXHRzb21lIHN0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChzdC52YWx1ZSlcXG5cXHRzb21lIGEgaW4gX3BmX3MzYnBhcl9hY3Rpb25zKG5hbWUsIHN0LmluZGV4KVxcblxcdF9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKVxcblxcdHJzIDo9IF9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIHN0LmluZGV4KVxcblxcdGNvdW50KHJzKSA+IDBcXG5cXHRldmVyeSByIGluIHJzIHtcXG5cXHRcXHRfcGZfczNicGFyX2J1Y2tldF9sZXZlbChyKVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1idWNrZXQtcG9saWN5LXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkJ1Y2tldCBwb2xpY3kgc3RhdGVtZW50cyBuZWVkIGEgUHJpbmNpcGFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlc291cmNlLWJhc2VkIHBvbGljaWVzIHJlcXVpcmUgUHJpbmNpcGFsIChvciBOb3RQcmluY2lwYWwpIGluIGV2ZXJ5XFxuIyBzdGF0ZW1lbnQg4oCUIHVubGlrZSBpZGVudGl0eSBwb2xpY2llcywgd2hlcmUgY2ZuLWxpbnQtZ3JhZGUgY2hlY2tzIGFyZVxcbiMgdHVuZWQuIEFuIHVucmVzb2x2YWJsZSBQcmluY2lwYWwgdmFsdWUgc3RpbGwgY291bnRzIGFzIHByZXNlbnQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1idWNrZXQtcG9saWN5LXByaW5jaXBhbFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWRcXFwiLCBbc3QuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIHN0YXRlbWVudCBoYXMgbmVpdGhlciBQcmluY2lwYWwgbm9yIE5vdFByaW5jaXBhbDsgUzMgcmVqZWN0cyB0aGUgcG9saWN5IHdpdGggXFxcXFxcXCJNaXNzaW5nIHJlcXVpcmVkIGZpZWxkIFByaW5jaXBhbFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgUHJpbmNpcGFsIChvciBOb3RQcmluY2lwYWwpIHRvIHRoZSBzdGF0ZW1lbnQg4oCUIGJ1Y2tldCBwb2xpY2llcyBhbHdheXMgbmFtZSB3aG8gdGhleSBhcHBseSB0b1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2J1Y2tldC1wb2xpY2llcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XFxcIilcXG5cXHRzb21lIHN0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChzdC52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHN0LnZhbHVlLCBcXFwiUHJpbmNpcGFsXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQoc3QudmFsdWUsIFxcXCJOb3RQcmluY2lwYWxcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMaWZlY3ljbGUgYXJjaGl2ZSB0cmFuc2l0aW9ucyBtdXN0IGNvbWUgMzArIGRheXMgYWZ0ZXIgSUEsIGFuZCBleHBpcmF0aW9uIGFmdGVyIGV2ZXJ5IHRyYW5zaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zM29yZF9maXggOj0gXFxcIk9yZGVyIHRoZSBsaWZlY3ljbGUgZGF5cyBzbyBhcmNoaXZlIHRyYW5zaXRpb25zIGNvbWUgYXQgbGVhc3QgMzAgZGF5cyBhZnRlciBJQSB0cmFuc2l0aW9ucyBhbmQgZXhwaXJhdGlvbiBjb21lcyBhZnRlciBldmVyeSB0cmFuc2l0aW9uXFxcIlxcblxcbl9wZl9zM29yZF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2xpZmVjeWNsZS10cmFuc2l0aW9uLWdlbmVyYWwtY29uc2lkZXJhdGlvbnMuaHRtbFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1kYXlzLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuVHJhbnNpdGlvbnNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlRyYW5zaXRpb24gdG8gJXMgYXQgJXYgZGF5cyBpcyBsZXNzIHRoYW4gMzAgZGF5cyBhZnRlciB0aGUgJXMgdHJhbnNpdGlvbiBhdCAldiBkYXlzOyBTMyByZXF1aXJlcyBvYmplY3RzIHRvIHN0YXkgYXQgbGVhc3QgMzAgZGF5cyBpbiBJQSBzdG9yYWdlXFxcIiwgW3NjMiwgZDIsIHNjMSwgZDFdKSxcXG5cXHRfcGZfczNvcmRfZml4LCBfcGZfczNvcmRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0dHJhbnMgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiVHJhbnNpdGlvbnNcXFwiLCBbXSlcXG5cXHRpc19hcnJheSh0cmFucylcXG5cXHRzb21lIHQxIGluIHRyYW5zXFxuXFx0aXNfb2JqZWN0KHQxKVxcblxcdHNjMSA6PSBvYmplY3QuZ2V0KHQxLCBcXFwiU3RvcmFnZUNsYXNzXFxcIiwgXFxcIlxcXCIpXFxuXFx0c2MxIGluIHtcXFwiU1RBTkRBUkRfSUFcXFwiLCBcXFwiT05FWk9ORV9JQVxcXCJ9XFxuXFx0cmF3MSA6PSBvYmplY3QuZ2V0KHQxLCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3MSAhPSBudWxsICMgdG9fbnVtYmVyKG51bGwpIOOBryAwIOOBq+OBquOCi1xcblxcdGQxIDo9IHRvX251bWJlcihyYXcxKVxcblxcdHNvbWUgdDIgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodDIpXFxuXFx0c2MyIDo9IG9iamVjdC5nZXQodDIsIFxcXCJTdG9yYWdlQ2xhc3NcXFwiLCBcXFwiXFxcIilcXG5cXHRzYzIgaW4ge1xcXCJHTEFDSUVSXFxcIiwgXFxcIkRFRVBfQVJDSElWRVxcXCJ9XFxuXFx0cmF3MiA6PSBvYmplY3QuZ2V0KHQyLCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3MiAhPSBudWxsXFxuXFx0ZDIgOj0gdG9fbnVtYmVyKHJhdzIpXFxuXFx0ZDIgPCBkMSArIDMwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5FeHBpcmF0aW9uSW5EYXlzXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFeHBpcmF0aW9uSW5EYXlzICgldikgbXVzdCBiZSBncmVhdGVyIHRoYW4gVHJhbnNpdGlvbkluRGF5cyAoJXYpOyBTMyByZWplY3RzIGxpZmVjeWNsZSBydWxlcyB0aGF0IGV4cGlyZSBvYmplY3RzIGJlZm9yZSBvciB3aGVuIHRoZXkgdHJhbnNpdGlvblxcXCIsIFtlLCBkXSksXFxuXFx0X3BmX3Mzb3JkX2ZpeCwgX3BmX3Mzb3JkX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdHJhd2UgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ZSAhPSBudWxsICMgdG9fbnVtYmVyKG51bGwpIOOBryAwIOOBq+OBquOCi1xcblxcdGUgOj0gdG9fbnVtYmVyKHJhd2UpXFxuXFx0dHJhbnMgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiVHJhbnNpdGlvbnNcXFwiLCBbXSlcXG5cXHRpc19hcnJheSh0cmFucylcXG5cXHRzb21lIHQgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodClcXG5cXHRyYXdkIDo9IG9iamVjdC5nZXQodCwgXFxcIlRyYW5zaXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhd2QgIT0gbnVsbFxcblxcdGQgOj0gdG9fbnVtYmVyKHJhd2QpXFxuXFx0ZSA8PSBkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLWV4cGlyYXRpb24tcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFeHBpcmF0aW9uSW5EYXlzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIEV4cGlyYXRpb25JbkRheXMgYXMgYSBiYXJlIGludGVnZXIgd2l0aCBub1xcbiMgbWluaW11bSwgc28gMCBhbmQgbmVnYXRpdmVzIHJlYWNoIHRoZSBzZXJ2aWNlLiBPbmx5IHRoZSBFeHBpcmF0aW9uIGFjdGlvblxcbiMgd2FzIGJlbmNoLXZlcmlmaWVkOyBvdGhlciBkYXkgZmllbGRzIGFyZSBsZWZ0IGFsb25lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWV4cGlyYXRpb24tcG9zaXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5FeHBpcmF0aW9uSW5EYXlzXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFeHBpcmF0aW9uSW5EYXlzIGlzICV2OyBTMyByZWplY3RzIHRoZSBydWxlIHdpdGggXFxcXFxcXCInRGF5cycgZm9yIEV4cGlyYXRpb24gYWN0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXFxcXFxcXCJcXFwiLCBbZF0pLFxcblxcdFxcXCJVc2UgYW4gRXhwaXJhdGlvbkluRGF5cyBvZiAxIG9yIG1vcmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC1ydWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkV4cGlyYXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhdyAhPSBudWxsXFxuXFx0ZCA6PSB0b19udW1iZXIocmF3KVxcblxcdGQgPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWxpZmVjeWNsZS1ydWxlLW5vLWFjdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgbGlmZWN5Y2xlIHJ1bGUgbmVlZHMgYXQgbGVhc3Qgb25lIGFjdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgdGVuIGFjdGlvbiBmaWVsZHMsIHZlcmJhdGltIGZyb20gdGhlIHNlcnZpY2UgZXJyb3IuIEEgZmllbGQgd2hvc2UgdmFsdWVcXG4jIGlzIGFuIHVucmVzb2x2YWJsZSBpbnRyaW5zaWMgc3RpbGwgY291bnRzIGFzIHByZXNlbnQgKGZhaWwgY2xvc2VkKS5cXG5fcGZfczNsbmFfYWN0aW9ucyA6PSB7XFxuXFx0XFxcIkFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZFxcXCIsXFxuXFx0XFxcIkV4cGlyYXRpb25EYXRlXFxcIixcXG5cXHRcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsXFxuXFx0XFxcIkV4cGlyZWRPYmplY3REZWxldGVNYXJrZXJcXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25cXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25JbkRheXNcXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25cXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zXFxcIixcXG5cXHRcXFwiVHJhbnNpdGlvblxcXCIsXFxuXFx0XFxcIlRyYW5zaXRpb25zXFxcIixcXG59XFxuXFxuX3BmX3MzbG5hX2hhc19hY3Rpb24ocnVsZSkgaWYge1xcblxcdHNvbWUgayBpbiBfcGZfczNsbmFfYWN0aW9uc1xcblxcdG9iamVjdC5nZXQocnVsZSwgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1ydWxlLW5vLWFjdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIGxpZmVjeWNsZSBydWxlIHNwZWNpZmllcyBubyBhY3Rpb247IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkF0IGxlYXN0IG9uZSBvZiBbRXhwaXJhdGlvbkRhdGUsRXhwaXJhdGlvbkluRGF5cyxBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQsVHJhbnNpdGlvbiwuLi5dIG5lZWRzIHRvIGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGFuIGV4cGlyYXRpb24sIHRyYW5zaXRpb24sIG9yIGFib3J0LWluY29tcGxldGUtbXVsdGlwYXJ0LXVwbG9hZCBhY3Rpb24gdG8gdGhlIHJ1bGUsIG9yIHJlbW92ZSB0aGUgcnVsZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXJ1bGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRub3QgX3BmX3MzbG5hX2hhc19hY3Rpb24oci52YWx1ZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1ub3RpZmljYXRpb24tb3ZlcmxhcHBpbmctZmlsdGVyc1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vdGlmaWNhdGlvbiBlbnRyaWVzIG11c3Qgbm90IG92ZXJsYXAgZm9yIHRoZSBzYW1lIGV2ZW50IHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUzMga2VlcHMgb25lIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uIHBlciBidWNrZXQgYW5kIHJlamVjdHMgaXQgd2hlbiB0d29cXG4jIGVudHJpZXMgKGFjcm9zcyBxdWV1ZS90b3BpYy9sYW1iZGEgYWxpa2UpIGNvdWxkIG1hdGNoIHRoZSBzYW1lIG9iamVjdCBldmVudDpcXG4jIG92ZXJsYXBwaW5nIGV2ZW50IHR5cGVzIEFORCBvdmVybGFwcGluZyBwcmVmaXhlcyBBTkQgb3ZlcmxhcHBpbmcgc3VmZml4ZXMuXFxuIyBBIG1pc3NpbmcgZmlsdGVyIHNpZGUgbWVhbnMgXFxcIlxcXCIgYW5kIG92ZXJsYXBzIGV2ZXJ5dGhpbmcuIFBhaXJzIHdpdGggYW5cXG4jIHVucmVzb2x2YWJsZSBldmVudCBvciBmaWx0ZXIgdmFsdWUgYXJlIHNraXBwZWQg4oCUIG92ZXJsYXAgY2Fubm90IGJlIHByb3Zlbi5cXG5cXG5fcGZfczNub19jb25maWdzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChhcnJheS5jb25jYXQoXFxuXFx0W2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24uUXVldWVDb25maWd1cmF0aW9uc1xcXCIpXSxcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5Ub3BpY0NvbmZpZ3VyYXRpb25zXFxcIildKSxcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5MYW1iZGFDb25maWd1cmF0aW9uc1xcXCIpXSlcXG5cXG5fcGZfczNub19ydWxlcyhjKSA6PSBydWxlcyBpZiB7XFxuXFx0ZiA6PSBvYmplY3QuZ2V0KGMsIFxcXCJGaWx0ZXJcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChmKVxcblxcdGsgOj0gb2JqZWN0LmdldChmLCBcXFwiUzNLZXlcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChrKVxcblxcdHJ1bGVzIDo9IG9iamVjdC5nZXQoaywgXFxcIlJ1bGVzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkocnVsZXMpXFxufVxcblxcbl9wZl9zM25vX3J1bGVzKGMpIDo9IFtdIGlmIHtcXG5cXHRvYmplY3QuZ2V0KGMsIFxcXCJGaWx0ZXJcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM25vX2ZpbHRlcl92YWwoYywga2luZCkgOj0gdiBpZiB7XFxuXFx0dnMgOj0gW3ggfCBzb21lIHIgaW4gX3BmX3Mzbm9fcnVsZXMoYyk7IGlzX29iamVjdChyKTsgbG93ZXIob2JqZWN0LmdldChyLCBcXFwiTmFtZVxcXCIsIFxcXCJcXFwiKSkgPT0ga2luZDsgeCA6PSBvYmplY3QuZ2V0KHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpXVxcblxcdGNvdW50KHZzKSA+IDBcXG5cXHR2IDo9IHZzWzBdXFxufVxcblxcbl9wZl9zM25vX2ZpbHRlcl92YWwoYywga2luZCkgOj0gXFxcIlxcXCIgaWYge1xcblxcdHZzIDo9IFt4IHwgc29tZSByIGluIF9wZl9zM25vX3J1bGVzKGMpOyBpc19vYmplY3Qocik7IGxvd2VyKG9iamVjdC5nZXQociwgXFxcIk5hbWVcXFwiLCBcXFwiXFxcIikpID09IGtpbmQ7IHggOj0gb2JqZWN0LmdldChyLCBcXFwiVmFsdWVcXFwiLCBudWxsKV1cXG5cXHRjb3VudCh2cykgPT0gMFxcbn1cXG5cXG5fcGZfczNub19wcmVfb3ZlcmxhcChhLCBiKSBpZiBzdGFydHN3aXRoKGEsIGIpXFxuXFxuX3BmX3Mzbm9fcHJlX292ZXJsYXAoYSwgYikgaWYgc3RhcnRzd2l0aChiLCBhKVxcblxcbl9wZl9zM25vX3N1Zl9vdmVybGFwKGEsIGIpIGlmIGVuZHN3aXRoKGEsIGIpXFxuXFxuX3BmX3Mzbm9fc3VmX292ZXJsYXAoYSwgYikgaWYgZW5kc3dpdGgoYiwgYSlcXG5cXG4jIFxcXCJzMzpPYmplY3RDcmVhdGVkOipcXFwiIGNvdmVycyBcXFwiczM6T2JqZWN0Q3JlYXRlZDpQdXRcXFwiOyBkcm9wIHRoZSB0cmFpbGluZyBcXFwiKlxcXCJcXG4jIGFuZCBwcmVmaXgtbWF0Y2guXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIGUxID09IGUyXFxuXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIHtcXG5cXHRlbmRzd2l0aChlMSwgXFxcIjoqXFxcIilcXG5cXHRzdGFydHN3aXRoKGUyLCBzdWJzdHJpbmcoZTEsIDAsIGNvdW50KGUxKSAtIDEpKVxcbn1cXG5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYge1xcblxcdGVuZHN3aXRoKGUyLCBcXFwiOipcXFwiKVxcblxcdHN0YXJ0c3dpdGgoZTEsIHN1YnN0cmluZyhlMiwgMCwgY291bnQoZTIpIC0gMSkpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbm90aWZpY2F0aW9uLW92ZXJsYXBwaW5nLWZpbHRlcnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlR3byBub3RpZmljYXRpb24gZW50cmllcyBmb3Igb3ZlcmxhcHBpbmcgZXZlbnQgdHlwZXMgKCclcycgYW5kICclcycpIGhhdmUgb3ZlcmxhcHBpbmcgcHJlZml4L3N1ZmZpeCBmaWx0ZXJzOyBTMyByZWplY3RzIHRoZSBjb25maWd1cmF0aW9uIHdpdGggXFxcXFxcXCJDb25maWd1cmF0aW9uIGlzIGFtYmlndW91c2x5IGRlZmluZWQuIENhbm5vdCBoYXZlIG92ZXJsYXBwaW5nIHN1ZmZpeGVzIGluIHR3byBydWxlcyBpZiB0aGUgcHJlZml4ZXMgYXJlIG92ZXJsYXBwaW5nIGZvciB0aGUgc2FtZSBldmVudCB0eXBlLlxcXFxcXFwiXFxcIiwgW2UxLCBlMl0pLFxcblxcdFxcXCJNYWtlIHRoZSBwcmVmaXhlcyBvciBzdWZmaXhlcyBkaXNqb2ludCwgb3IgbWVyZ2UgdGhlIHR3byBlbnRyaWVzIGludG8gb25lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvbm90aWZpY2F0aW9uLWhvdy10by1maWx0ZXJpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0Y3MgOj0gX3BmX3Mzbm9fY29uZmlncyhuYW1lKVxcblxcdHNvbWUgaSwgYSBpbiBjc1xcblxcdHNvbWUgaiwgYiBpbiBjc1xcblxcdGkgPCBqXFxuXFx0ZTEgOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiRXZlbnRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhlMSlcXG5cXHRlMiA6PSBvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJFdmVudFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGUyKVxcblxcdF9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKVxcblxcdHAxIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYS52YWx1ZSwgXFxcInByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHAxKVxcblxcdHAyIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYi52YWx1ZSwgXFxcInByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHAyKVxcblxcdF9wZl9zM25vX3ByZV9vdmVybGFwKHAxLCBwMilcXG5cXHRzMSA6PSBfcGZfczNub19maWx0ZXJfdmFsKGEudmFsdWUsIFxcXCJzdWZmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhzMSlcXG5cXHRzMiA6PSBfcGZfczNub19maWx0ZXJfdmFsKGIudmFsdWUsIFxcXCJzdWZmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhzMilcXG5cXHRfcGZfczNub19zdWZfb3ZlcmxhcChzMSwgczIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtb2JqZWN0bG9jay1yZXF1aXJlcy12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gbmVlZHMgdmVyc2lvbmluZyBlbmFibGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9iamVjdExvY2tDb25maWd1cmF0aW9uIG9uIGl0cyBvd24gZG9lcyBOT1QgcmVxdWlyZSBPYmplY3RMb2NrRW5hYmxlZCDigJRcXG4jIFMzIGFjY2VwdHMgT2JqZWN0IExvY2sgb24gYW4gZXhpc3RpbmcgdmVyc2lvbmVkIGJ1Y2tldCAoYmVuY2ggczA1YiBkZXBsb3llZFxcbiMgY2xlYW4pLiBXaGF0IGl0IGRvZXMgcmVxdWlyZSBpcyB2ZXJzaW9uaW5nLiBXaGVuIE9iamVjdExvY2tFbmFibGVkIGlzIHRydWVcXG4jIHRoZSBidWNrZXQgaXMgY3JlYXRlZCBsb2NrLWVuYWJsZWQgYW5kIHZlcnNpb25pbmcgY29tZXMgd2l0aCBpdCwgc28gdGhlIHJ1bGVcXG4jIGZpcmVzIG9ubHkgd2hlbiBsb2NrLWVuYWJsZW1lbnQgaXMgcHJvdmFibHkgb2ZmIChrZXkgbGl0ZXJhbGx5IGFic2VudCBvclxcbiMgbGl0ZXJhbCBmYWxzZSkgYW5kIHZlcnNpb25pbmcgaXMgcHJvdmFibHkgbm90IGVuYWJsZWQuXFxuX3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJPYmplY3RMb2NrRW5hYmxlZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSkgaWYge1xcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0VuYWJsZWRcXFwiKSkgPT0gZmFsc2VcXG59XFxuXFxuX3BmX3Mzb2xydl9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtb2JqZWN0bG9jay1yZXF1aXJlcy12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIk9iamVjdExvY2tDb25maWd1cmF0aW9uIGlzIHNldCBvbiBhIGJ1Y2tldCB3aG9zZSB2ZXJzaW9uaW5nIGlzIG5vdCBlbmFibGVkOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJWZXJzaW9uaW5nIG11c3QgYmUgJ0VuYWJsZWQnIG9uIHRoZSBidWNrZXQgdG8gYXBwbHkgYSBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJywgb3Igc2V0IE9iamVjdExvY2tFbmFibGVkOiB0cnVlIHRvIGNyZWF0ZSB0aGUgYnVja2V0IGxvY2stZW5hYmxlZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1sb2NrLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tDb25maWd1cmF0aW9uXFxcIikpXFxuXFx0X3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSlcXG5cXHRfcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtb2JqZWN0bG9jay12ZXJzaW9uaW5nLXN1c3BlbmRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdCBMb2NrIGZvcmJpZHMgc3VzcGVuZGluZyB2ZXJzaW9uaW5nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9iamVjdCBMb2NrIGZvcmNlLWVuYWJsZXMgdmVyc2lvbmluZyBhdCBjcmVhdGlvbiwgc28gYSB0ZW1wbGF0ZSB0aGF0IGFsc29cXG4jIHN1c3BlbmRzIHZlcnNpb25pbmcgY29udHJhZGljdHMgaXRzZWxmIGFuZCB0aGUgaGFuZGxlcidzIFB1dEJ1Y2tldFZlcnNpb25pbmdcXG4jIGNhbGwgaXMgcmVqZWN0ZWQuIEZpcmVzIG9ubHkgb24gYSBsaXRlcmFsIFxcXCJTdXNwZW5kZWRcXFwiLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtb2JqZWN0bG9jay12ZXJzaW9uaW5nLXN1c3BlbmRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIixcXG5cXHRcXFwiT2JqZWN0TG9ja0VuYWJsZWQgaXMgdHJ1ZSBidXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24gc3VzcGVuZHMgdmVyc2lvbmluZzsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQW4gT2JqZWN0IExvY2sgY29uZmlndXJhdGlvbiBpcyBwcmVzZW50IG9uIHRoaXMgYnVja2V0LCBzbyB0aGUgdmVyc2lvbmluZyBzdGF0ZSBjYW5ub3QgYmUgY2hhbmdlZC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIChvciBkcm9wIGl0IOKAlCBPYmplY3QgTG9jayBlbmFibGVzIHZlcnNpb25pbmcgaXRzZWxmKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1sb2NrLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0VuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1yZXBsaWNhdGlvbi1kZXN0LXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgcmVwbGljYXRpb24gZGVzdGluYXRpb24gYnVja2V0IG5lZWRzIHZlcnNpb25pbmcgZW5hYmxlZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZGVzdGluYXRpb24gc2lkZSBvZiB3aGF0IHBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmcgY2hlY2tzIG9uXFxuIyB0aGUgc291cmNlLiBEZXN0aW5hdGlvbi5CdWNrZXQgaXMgbm9ybWFsbHkgRm46OkdldEF0dC9SZWYgdG8gYW4gaW4tdGVtcGxhdGVcXG4jIGJ1Y2tldDsgcmVzb2x2ZSgpIHR1cm5zIGJvdGggaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRCwgc28gdGhlXFxuIyBkZXN0aW5hdGlvbidzIG93biBwcm9wZXJ0aWVzIGFyZSByZWFkYWJsZS4gRXh0ZXJuYWwgZGVzdGluYXRpb24gQVJOcyByZXNvbHZlXFxuIyB0byBzdHJpbmdzIHRoYXQgYXJlIG5vdCBsb2dpY2FsIElEcyBhbmQgc2tpcC4gVmVyc2lvbmluZyBpcyBcXFwibm90IGVuYWJsZWRcXFwiXFxuIyB3aGVuIFZlcnNpb25pbmdDb25maWd1cmF0aW9uIGlzIGxpdGVyYWxseSBhYnNlbnQgKHByb3ZlbiB2aWFcXG4jIGlucHV0LnJlc291cmNlcywgc2VlIEFHRU5UUy5tZCkgb3IgU3RhdHVzIHJlc29sdmVzIHRvIFxcXCJTdXNwZW5kZWRcXFwiOyBhblxcbiMgdW5yZXNvbHZhYmxlIFN0YXR1cyBza2lwcy5cXG5fcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdCkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tkZXN0XS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3MzcmR2X2JhZF92ZXJzaW9uaW5nKGRlc3QpIGlmIHtcXG5cXHRyZXNvbHZlKGRlc3QsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtcmVwbGljYXRpb24tZGVzdC12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5EZXN0aW5hdGlvbi5CdWNrZXRcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlJlcGxpY2F0aW9uIGRlc3RpbmF0aW9uIGJ1Y2tldCAnJXMnIGRvZXMgbm90IGhhdmUgdmVyc2lvbmluZyBlbmFibGVkOyBTMyByZWplY3RzIHRoZSBjb25maWd1cmF0aW9uIHdpdGggXFxcXFxcXCJEZXN0aW5hdGlvbiBidWNrZXQgbXVzdCBoYXZlIHZlcnNpb25pbmcgZW5hYmxlZFxcXFxcXFwiXFxcIiwgW2Rlc3RdKSxcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgb24gdGhlIGRlc3RpbmF0aW9uIGJ1Y2tldFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3JlcGxpY2F0aW9uLXJlcXVpcmVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0ZGVzdCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzLiVkLkRlc3RpbmF0aW9uLkJ1Y2tldFxcXCIsIFtyLmluZGV4XSkpXFxuXFx0aXNfc3RyaW5nKGRlc3QpXFxuXFx0ZGVzdCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRfcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1yZXBsaWNhdGlvbi1yZXF1aXJlcy12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVwbGljYXRpb25Db25maWd1cmF0aW9uIHJlcXVpcmVzIHZlcnNpb25pbmcgdG8gYmUgZW5hYmxlZCBvbiB0aGUgc291cmNlIGJ1Y2tldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyDpgZXlj43jgavjgZnjgovjga7jga8gVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24g44GM5paH5a2X44Gp44GK44KK5LiN5Zyo77yIaW5wdXQucmVzb3VyY2VzIOOBp1xcbiMg6Ki85piO44CBQUdFTlRTLm1kIOWPgueFp++8ieOBi+OAgVN0YXR1cyDjgYzjg6rjg4bjg6njg6vjgacgXFxcIlN1c3BlbmRlZFxcXCIg44Gu44Go44GN44Gg44GR44CCXFxuIyDmnKrop6Pmsbrjg4jjg7zjgq/jg7Pjga8gT0sg5omx44GE77yIcmVzb2x2ZSgpIOOBr+OCreODvOS4jeWcqOOBqOacquino+axuuOBruS4oeaWueOBpyB1bmRlZmluZWQg44GrXFxuIyDjgarjgovjgZ/jgoHjgIFgbm90IHJlc29sdmUoLi4uKWAg44Gn44Gv5LiN5Zyo44KS6Ki85piO44Gn44GN44Gq44GEIOKAlCAyMDI2LTA5LTAyIOWun+a4rO+8ieOAglxcbl9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBpcyBzZXQgYnV0IGJ1Y2tldCB2ZXJzaW9uaW5nIGlzIG5vdCBlbmFibGVkOyBTMyByZWplY3RzIHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGF0IGRlcGxveSB0aW1lIChJbnZhbGlkUmVxdWVzdDogVmVyc2lvbmluZyBtdXN0IGJlICdFbmFibGVkJyBvbiB0aGUgYnVja2V0KVxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIG9uIHRoZSBzb3VyY2UgYnVja2V0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvcmVwbGljYXRpb24tcmVxdWlyZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIpKVxcblxcdF9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy13ZWJzaXRlLXJlZGlyZWN0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlZGlyZWN0QWxsUmVxdWVzdHNUbyBleGNsdWRlcyBldmVyeSBvdGhlciB3ZWJzaXRlIHNldHRpbmdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIHJlZGlyZWN0cyB0aGUgd2hvbGUgc2l0ZSwgc28gUzMgcmVqZWN0cyBhbnkgc2libGluZ1xcbiMgd2Vic2l0ZSBzZXR0aW5nIGFsb25nc2lkZSBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXdlYnNpdGUtcmVkaXJlY3QtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLldlYnNpdGVDb25maWd1cmF0aW9uLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJXZWJzaXRlQ29uZmlndXJhdGlvbiBjb21iaW5lcyBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gd2l0aCAlczsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiW0luZGV4RG9jdW1lbnQsIEVycm9yRG9jdW1lbnQsIFJvdXRpbmdSdWxlc10gc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgaWYgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIGlzIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2tdKSxcXG5cXHRcXFwiS2VlcCBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gYWxvbmUsIG9yIGRyb3AgaXQgYW5kIGNvbmZpZ3VyZSB0aGUgd2Vic2l0ZSB3aXRoIEluZGV4RG9jdW1lbnQvRXJyb3JEb2N1bWVudC9Sb3V0aW5nUnVsZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC13ZWJzaXRlY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHR3YyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLldlYnNpdGVDb25maWd1cmF0aW9uXFxcIilcXG5cXHRpc19vYmplY3Qod2MpXFxuXFx0b2JqZWN0LmdldCh3YywgXFxcIlJlZGlyZWN0QWxsUmVxdWVzdHNUb1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRzb21lIGsgaW4ge1xcXCJJbmRleERvY3VtZW50XFxcIiwgXFxcIkVycm9yRG9jdW1lbnRcXFwiLCBcXFwiUm91dGluZ1J1bGVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KHdjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2NoZWR1bGVyLWZsZXhpYmxlLXdpbmRvd1wiLFxuICAgIFwic2VydmljZVwiOiBcInNjaGVkdWxlclwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGTEVYSUJMRSBtb2RlIG5lZWRzIE1heGltdW1XaW5kb3dJbk1pbnV0ZXMsIE9GRiBmb3JiaWRzIGl0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2NoZndfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXNjaGVkdWxlci1zY2hlZHVsZS1mbGV4aWJsZXRpbWV3aW5kb3cuaHRtbFxcXCJcXG5cXG5fcGZfc2NoZndfZnR3KG5hbWUpIDo9IGZ0dyBpZiB7XFxuXFx0ZnR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmxleGlibGVUaW1lV2luZG93XFxcIilcXG5cXHRpc19vYmplY3QoZnR3KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNjaGVkdWxlci1mbGV4aWJsZS13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZsZXhpYmxlVGltZVdpbmRvdy5NYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIixcXG5cXHRcXFwiRmxleGlibGVUaW1lV2luZG93Lk1vZGUgaXMgRkxFWElCTEUgYnV0IE1heGltdW1XaW5kb3dJbk1pbnV0ZXMgaXMgbWlzc2luZzsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXMgbXVzdCBiZSBwcm92aWRlZCB3aGVuIEZsZXhpYmxlVGltZVdpbmRvd01vZGUgaXMgc2V0IHRvIEZMRVhJQkxFXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgTWF4aW11bVdpbmRvd0luTWludXRlcyAoMS0xNDQwKSwgb3Igc3dpdGNoIE1vZGUgdG8gT0ZGXFxcIixcXG5cXHRfcGZfc2NoZndfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGZ0dyA6PSBfcGZfc2NoZndfZnR3KG5hbWUpXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIkZMRVhJQkxFXFxcIlxcblxcdG9iamVjdC5nZXQoZnR3LCBcXFwiTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zY2hlZHVsZXItZmxleGlibGUtd2luZG93XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GbGV4aWJsZVRpbWVXaW5kb3cuTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsXFxuXFx0XFxcIkZsZXhpYmxlVGltZVdpbmRvdy5Nb2RlIGlzIE9GRiBidXQgTWF4aW11bVdpbmRvd0luTWludXRlcyBpcyBzZXQ7IENyZWF0ZVNjaGVkdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJNYXhpbXVtV2luZG93SW5NaW51dGVzIG11c3Qgbm90IGJlIHByb3ZpZGVkIHdoZW4gRmxleGlibGVUaW1lV2luZG93TW9kZSBpcyBzZXQgdG8gT0ZGXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIE1heGltdW1XaW5kb3dJbk1pbnV0ZXMsIG9yIHN3aXRjaCBNb2RlIHRvIEZMRVhJQkxFXFxcIixcXG5cXHRfcGZfc2NoZndfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGZ0dyA6PSBfcGZfc2NoZndfZnR3KG5hbWUpXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIk9GRlxcXCJcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2NoZWR1bGVyLXJhdGUtcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzY2hlZHVsZXJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBTY2hlZHVsZXIgcmF0ZSgpIHZhbHVlIG11c3QgYmUgcG9zaXRpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDI3IHZhbGlkYXRlcyByYXRlKCkgYm91bmRzIGZvciBBV1M6OkV2ZW50czo6UnVsZSBidXQgbm90XFxuIyBmb3IgQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlIOKAlCBzYW1lIGNvbnN0cmFpbnQgZmFtaWx5LCBkaWZmZXJlbnQgcmVzb3VyY2UuXFxuIyBPbmx5IHRoZSB2YWx1ZSBib3VuZCBpcyBjaGVja2VkIGhlcmU7IHVuaXQgc3BlbGxpbmdzIGRpZmZlciBiZXR3ZWVuIHRoZSB0d29cXG4jIHNlcnZpY2VzIGFuZCB3ZXJlIG5vdCBtZWFzdXJlZCBmb3IgU2NoZWR1bGVyLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2NoZWR1bGVyLXJhdGUtcG9zaXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNjaGVkdWxlRXhwcmVzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJhdGUgdmFsdWUgaW4gJyVzJyBpcyBub3QgcG9zaXRpdmU7IENyZWF0ZVNjaGVkdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIFNjaGVkdWxlIEV4cHJlc3Npb24gJXMuXFxcXFxcXCJcXFwiLCBbZXhwciwgZXhwcl0pLFxcblxcdFxcXCJVc2UgYSByYXRlIG9mIDEgb3IgbW9yZSAoZS5nLiByYXRlKDUgbWludXRlcykpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NjaGVkdWxlci9sYXRlc3QvVXNlckd1aWRlL3NjaGVkdWxlLXR5cGVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGV4cHIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlZHVsZUV4cHJlc3Npb25cXFwiKVxcblxcdGlzX3N0cmluZyhleHByKVxcblxcdHQgOj0gdHJpbV9zcGFjZShleHByKVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcInJhdGUoXFxcIilcXG5cXHRlbmRzd2l0aCh0LCBcXFwiKVxcXCIpXFxuXFx0aW5uZXIgOj0gdHJpbV9zcGFjZShzdWJzdHJpbmcodCwgNSwgY291bnQodCkgLSA2KSlcXG5cXHRwYXJ0cyA6PSBzcGxpdChpbm5lciwgXFxcIiBcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHBhcnRzWzBdKVxcblxcdG4gPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maWZvLXRvcGljLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRklGTyB0b3BpYyBuYW1lcyBtdXN0IGVuZCB3aXRoICcuZmlmbycgKGFuZCAnLmZpZm8nIG5hbWVzIHJlcXVpcmUgRmlmb1RvcGljKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2ZpZm9fZml4IDo9IFxcXCJHaXZlIEZJRk8gdG9waWNzIGEgVG9waWNOYW1lIGVuZGluZyBpbiAnLmZpZm8nIChvciBkcm9wIFRvcGljTmFtZSB0byBsZXQgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGUgb25lKSwgYW5kIHNldCBGaWZvVG9waWM6IHRydWUgd2hlbmV2ZXIgdGhlIG5hbWUgZW5kcyBpbiAnLmZpZm8nXFxcIlxcblxcbl9wZl9zbnNmaWZvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWNyZWF0ZS1maWZvLXRvcGljLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFxuIyBGaWZvVG9waWMg44GM5a2Y5Zyo44GX44CB44Oq44OG44Op44OrIGZhbHNlIOS7peWklu+8iHRydWUg44KE44OI44O844Kv44Oz77yJ44Gq44KJ44CMRklGTyDjgYvjgoLjgZfjgozjgarjgYTjgI3mibHjgYRcXG5fcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpIGlmIHtcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIilcXG5cXHRub3QgdiBpbiB7ZmFsc2UsIFxcXCJmYWxzZVxcXCJ9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGaWZvVG9waWMgaXMgdHJ1ZSBidXQgVG9waWNOYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5maWZvJzsgU05TIHJlamVjdHMgdGhlIHRvcGljIGF0IGRlcGxveSB0aW1lXFxcIiwgW3RuXSksXFxuXFx0X3BmX3Nuc2ZpZm9fZml4LCBfcGZfc25zZmlmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0X3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0bm90IGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLXRvcGljLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVG9waWNOYW1lICclcycgZW5kcyB3aXRoICcuZmlmbycgYnV0IEZpZm9Ub3BpYyBpcyBub3QgdHJ1ZTsgU05TIHJlamVjdHMgdGhlIHRvcGljIG5hbWUgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG5dKSxcXG5cXHRfcGZfc25zZmlmb19maXgsIF9wZl9zbnNmaWZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcblxcdG5vdCBfcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLXRvcGljLW5hbWUtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRvcGljIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChwbHVzIGEgLmZpZm8gc3VmZml4KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc25hbWVfb2sobikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU2fSRgLCBuKVxcblxcbl9wZl9zbnNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDI1MX1cXFxcLmZpZm8kYCwgbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1uYW1lLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUb3BpY05hbWUgJyVzJyBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljIE5hbWVcXFxcXFxcIjogU05TIGFjY2VwdHMgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUgKGEgRklGTyB0b3BpYyBhZGRzIHRoZSAuZmlmbyBzdWZmaXgpXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSB0b3BpYyB1c2luZyBbYS16QS1aMC05Xy1dIChhcHBlbmQgLmZpZm8gb25seSBmb3IgRklGTyB0b3BpY3MpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvYXBpL0FQSV9DcmVhdGVUb3BpYy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgX3BmX3Nuc25hbWVfb2sobilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcXVldWUtbmFtZS1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUXVldWUgbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUgKG1heCA4MCwgcGx1cyBhIC5maWZvIHN1ZmZpeClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDgwfSRgLCBuKVxcblxcbl9wZl9zcXNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDc1fVxcXFwuZmlmbyRgLCBuKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXF1ZXVlLW5hbWUtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5RdWV1ZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlF1ZXVlTmFtZSAnJXMnIGlzIHJlamVjdGVkOiBTUVMgYWNjZXB0cyAxLTgwIGNoYXJhY3RlcnMgb2YgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChhIEZJRk8gcXVldWUgYWRkcyB0aGUgLmZpZm8gc3VmZml4KVxcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgcXVldWUgdXNpbmcgW2EtekEtWjAtOV8tXSB3aXRoaW4gODAgY2hhcmFjdGVycyAoYXBwZW5kIC5maWZvIG9ubHkgZm9yIEZJRk8gcXVldWVzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlF1ZXVlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IF9wZl9zcXNuYW1lX29rKG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBU0wgTmV4dC9EZWZhdWx0L0Nob2ljZXMgbXVzdCByZWZlcmVuY2UgYSBkZWZpbmVkIHN0YXRlICh0b3AtbGV2ZWwgc3RhdGVzOyBhIGRhbmdsaW5nIFN0YXJ0QXQgaXMgY292ZXJlZCBieSBlbmdpbmUgcnVsZSBFMzYwMSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nmbl9maXggOj0gXFxcIlBvaW50IE5leHQvRGVmYXVsdC9DaG9pY2VzIGF0IGFuIGV4aXN0aW5nIHN0YXRlIG5hbWVcXFwiXFxuXFxuX3BmX3Nmbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1zdGF0ZXMuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuX2FzbChuYW1lKSA6PSBhc2wgaWYge1xcblxcdGRlZiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiKVxcblxcdGlzX3N0cmluZyhkZWYpXFxuXFx0YXNsIDo9IGpzb24udW5tYXJzaGFsKGRlZilcXG5cXHRpc19vYmplY3QoYXNsKVxcbn1cXG5cXG5fcGZfc2ZuX2RlZmluZWQoYXNsKSA6PSB7c24gfCBzb21lIHNuLCBfIGluIG9iamVjdC5nZXQoYXNsLCBcXFwiU3RhdGVzXFxcIiwge30pfVxcblxcbiMgTk9URTogYSBkYW5nbGluZyBTdGFydEF0IGlzIGRlbGliZXJhdGVseSBOT1QgY2hlY2tlZCBoZXJlIOKAlCB0aGUgZW5naW5lJ3NcXG4jIGJ1aWx0LWluIHJ1bGUgRTM2MDEgKEVSUk9SL0NGTl9MSU5UKSBhbHJlYWR5IGNvdmVycyBpdC4gVmVyaWZpZWQgYWdhaW5zdFxcbiMgQGF3cy9jbG91ZGZvcm1hdGlvbi12YWxpZGF0ZSAxLjcuMC1iZXRhIG9uIDIwMjYtMDktMDE6IEUzNjAxIGZpcmVzIGZvclxcbiMgU3RhcnRBdCBvbmx5IGFuZCBkb2VzIG5vdCBjaGVjayBOZXh0L0RlZmF1bHQvQ2hvaWNlcywgd2hpY2ggaXMgd2hhdCB0aGlzXFxuIyBydWxlIGFkZHMuXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgcmVmZXJlbmNlcyBzdGF0ZSAnJXMnIHZpYSAlcywgYnV0IG5vIHN0YXRlIHdpdGggdGhhdCBuYW1lIGlzIGRlZmluZWRcXFwiLCBbc25hbWUsIHRhcmdldCwga2V5XSksXFxuXFx0X3BmX3Nmbl9maXgsIF9wZl9zZm5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0YXNsIDo9IF9wZl9zZm5fYXNsKG5hbWUpXFxuXFx0c29tZSBzbmFtZSwgc3QgaW4gb2JqZWN0LmdldChhc2wsIFxcXCJTdGF0ZXNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc3QpXFxuXFx0c29tZSBrZXkgaW4ge1xcXCJOZXh0XFxcIiwgXFxcIkRlZmF1bHRcXFwifVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KHN0LCBrZXksIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhcmdldClcXG5cXHRub3QgdGFyZ2V0IGluIF9wZl9zZm5fZGVmaW5lZChhc2wpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIGhhcyBhIENob2ljZSBydWxlIHJlZmVyZW5jaW5nIHN0YXRlICclcycsIGJ1dCBubyBzdGF0ZSB3aXRoIHRoYXQgbmFtZSBpcyBkZWZpbmVkXFxcIiwgW3NuYW1lLCB0YXJnZXRdKSxcXG5cXHRfcGZfc2ZuX2ZpeCwgX3BmX3Nmbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRhc2wgOj0gX3BmX3Nmbl9hc2wobmFtZSlcXG5cXHRzb21lIHNuYW1lLCBzdCBpbiBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIHt9KVxcblxcdGlzX29iamVjdChzdClcXG5cXHRjaG9pY2VzIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJDaG9pY2VzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkoY2hvaWNlcylcXG5cXHRzb21lIGMgaW4gY2hvaWNlc1xcblxcdGlzX29iamVjdChjKVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KGMsIFxcXCJOZXh0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcblxcdG5vdCB0YXJnZXQgaW4gX3BmX3Nmbl9kZWZpbmVkKGFzbClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi10YWdzLWF3cy1wcmVmaXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJ0YWdzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhZyBrZXlzIG1heSBub3QgdXNlIHRoZSByZXNlcnZlZCBhd3M6IHByZWZpeFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiKlwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGFncyBzdXJ2aXZlIGludG8gdGhlIHRlbXBsYXRlIGZyb20gZXZlcnkgc2NvcGUgdGhhdCBjYWxsZWQgVGFncy5vZigpLCBhbmQgdGhlXFxuIyBtZXJnZSBoYXBwZW5zIGluIGNmblByb3BlcnRpZXMgYXQgcmVuZGVyIHRpbWUgLSBhZnRlciB2YWxpZGF0ZVRyZWUgLSBzbyBubyBMMVxcbiMgb3IgTDIgdmFsaWRhdGlvbiBjYW4gc2VlIHRoZSBmaW5hbCBrZXkgc2V0LiBBcHBsaWVzIHRvIGV2ZXJ5IHJlc291cmNlIHR5cGUuXFxuX3BmX3RhZ2F3c19iYWQgY29udGFpbnMgW25hbWUsIGlkeCwga2V5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIG9iamVjdC5rZXlzKGlucHV0LnJlc291cmNlcylcXG5cXHRzb21lIHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhZ3NcXFwiKVxcblxcdGlzX29iamVjdCh0LnZhbHVlKVxcblxcdGtleSA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJLZXlcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhrZXkpXFxuXFx0c3RhcnRzd2l0aChsb3dlcihrZXkpLCBcXFwiYXdzOlxcXCIpXFxuXFx0aWR4IDo9IHQuaW5kZXhcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi10YWdzLWF3cy1wcmVmaXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFncy4lZC5LZXlcXFwiLCBbaWR4XSksXFxuXFx0c3ByaW50ZihcXFwiVGFnIGtleSAnJXMnIHVzZXMgdGhlIHJlc2VydmVkIGF3czogcHJlZml4OyBBV1MgcmVqZWN0cyB0aGUgY3JlYXRlIGNhbGwgd2l0aCBcXFxcXFxcImF3czogcHJlZml4ZWQgdGFnIGtleSBuYW1lcyBhcmUgbm90IGFsbG93ZWQgZm9yIGV4dGVybmFsIHVzZS5cXFxcXFxcIlxcXCIsIFtrZXldKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSB0YWcga2V5IHNvIGl0IGRvZXMgbm90IHN0YXJ0IHdpdGggYXdzOlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS90YWctZWRpdG9yL2xhdGVzdC91c2VyZ3VpZGUvdGFnZ2luZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIGlkeCwga2V5XSBpbiBfcGZfdGFnYXdzX2JhZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXRhZ3MtY291bnQtbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwidGFnc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHJlc291cmNlIG1heSBjYXJyeSBhdCBtb3N0IDUwIHRhZ3NcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIipcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBBV1Mtd2lkZSBsaW1pdCBpcyA1MCB1c2VyIHRhZ3MgcGVyIHJlc291cmNlLiBDb3VudGVkIG9uIHRoZSByZW5kZXJlZFxcbiMgdGVtcGxhdGUsIHdoaWNoIGlzIHRoZSBvbmx5IHBsYWNlIHRoZSBtZXJnZWQgVGFncy5vZigpIHJlc3VsdCBleGlzdHMuXFxuX3BmX3RhZ2NvdW50X2JhZCBjb250YWlucyBbbmFtZSwgbl0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiBvYmplY3Qua2V5cyhpbnB1dC5yZXNvdXJjZXMpXFxuXFx0dGFncyA6PSBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFnc1xcXCIpXFxuXFx0biA6PSBjb3VudCh0YWdzKVxcblxcdG4gPiA1MFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXRhZ3MtY291bnQtbWF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYWdzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCB0YWdzIGFyZSBhdHRhY2hlZCB0byB0aGlzIHJlc291cmNlOyBBV1MgYWxsb3dzIGF0IG1vc3QgNTAgcGVyIHJlc291cmNlIGFuZCByZWplY3RzIHRoZSBjcmVhdGUgY2FsbCAoXFxcXFxcXCJNb3JlIHRoYW4gNTAgdGFncyBzcGVjaWZpZWQuXFxcXFxcXCIpXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVkdWNlIHRoZSB0YWcgc2V0IHRvIDUwIG9yIGZld2VyIC0gcmVtZW1iZXIgdGhhdCBUYWdzLm9mKCkgYWRkcyB0YWdzIGZyb20gZXZlcnkgZW5jbG9zaW5nIHNjb3BlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3RhZy1lZGl0b3IvbGF0ZXN0L3VzZXJndWlkZS90YWdnaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgbl0gaW4gX3BmX3RhZ2NvdW50X2JhZFxcbn1cXG5cIlxuICB9XG5dO1xuIl19
3067
+ /** Shared helper modules (rules/_lib). Always loaded before the rules. */
3068
+ exports.BUNDLED_LIBS = [
3069
+ {
3070
+ "name": "_lib/sfn",
3071
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# Shared helpers for the Step Functions rules (rules/stepfunctions/pf-sfn-*).\n# Loaded ahead of every rule (BUNDLED_LIBS); never emits diagnostics.\n#\n# A definition arrives either as DefinitionString (JSON text — Fn::Join /\n# Fn::Sub over pseudo parameters resolve() flattens; a reference to another\n# resource does not resolve and the ASL rules skip the machine) or as the raw\n# Definition object of an L1 resource (intrinsics inside are marker objects,\n# never strings, so is_string guards mute them).\n\n_pf_sfnlib_asl(name) := asl if {\n\tdef := resolve(name, \"Properties.DefinitionString\")\n\tis_string(def)\n\tasl := json.unmarshal(def)\n\tis_object(asl)\n}\n\n_pf_sfnlib_asl(name) := asl if {\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"DefinitionString\", \"__pf_absent\") == \"__pf_absent\"\n\tasl := object.get(props, \"Definition\", null)\n\tis_object(asl)\n}\n\n# Property path prefix for diagnostics.\n_pf_sfnlib_prop(name) := \"Properties.DefinitionString\" if {\n\tobject.get(input.resources[name].properties, \"DefinitionString\", \"__pf_absent\") != \"__pf_absent\"\n}\n\n_pf_sfnlib_prop(name) := \"Properties.Definition\" if {\n\tobject.get(input.resources[name].properties, \"DefinitionString\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n# Child workflows directly inside a States block: [path, states, startAt] for\n# every Parallel branch and Map ItemProcessor / Iterator.\n_pf_sfnlib_kids(path, states) := kids if {\n\tbranches := {[cp, cs, sa] |\n\t\tsome sname, st in states\n\t\tis_object(st)\n\t\tarr := object.get(st, \"Branches\", [])\n\t\tis_array(arr)\n\t\tsome i, b in arr\n\t\tis_object(b)\n\t\tcs := object.get(b, \"States\", null)\n\t\tis_object(cs)\n\t\tsa := object.get(b, \"StartAt\", null)\n\t\tcp := sprintf(\"%s.%s.Branches[%d].States\", [path, sname, i])\n\t}\n\tprocs := {[cp, cs, sa] |\n\t\tsome sname, st in states\n\t\tis_object(st)\n\t\tsome key in [\"ItemProcessor\", \"Iterator\"]\n\t\tproc := object.get(st, key, null)\n\t\tis_object(proc)\n\t\tcs := object.get(proc, \"States\", null)\n\t\tis_object(cs)\n\t\tsa := object.get(proc, \"StartAt\", null)\n\t\tcp := sprintf(\"%s.%s.%s.States\", [path, sname, key])\n\t}\n\tkids := branches | procs\n}\n\n# Every States block of every state machine: [name, path, states, startAt].\n_pf_sfnlib_scope0 contains [name, \"States\", s, sa] if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tasl := _pf_sfnlib_asl(name)\n\ts := object.get(asl, \"States\", null)\n\tis_object(s)\n\tsa := object.get(asl, \"StartAt\", null)\n}\n\n_pf_sfnlib_scope1 contains [name, cp, cs, sa] if {\n\tsome [name, p, s, _] in _pf_sfnlib_scope0\n\tsome [cp, cs, sa] in _pf_sfnlib_kids(p, s)\n}\n\n_pf_sfnlib_scope2 contains [name, cp, cs, sa] if {\n\tsome [name, p, s, _] in _pf_sfnlib_scope1\n\tsome [cp, cs, sa] in _pf_sfnlib_kids(p, s)\n}\n\n_pf_sfnlib_scope3 contains [name, cp, cs, sa] if {\n\tsome [name, p, s, _] in _pf_sfnlib_scope2\n\tsome [cp, cs, sa] in _pf_sfnlib_kids(p, s)\n}\n\n# ponytail: Rego cannot recurse and the engine has no walk(), so nesting is\n# expanded to depth 3 (Parallel/Map inside Parallel/Map inside Parallel/Map).\n# States nested deeper are simply not inspected; add a scope4 line to extend.\n_pf_sfnlib_scopes := ((_pf_sfnlib_scope0 | _pf_sfnlib_scope1) | _pf_sfnlib_scope2) | _pf_sfnlib_scope3\n\n# Every state: [name, scope path, scope states, state name, state object].\n_pf_sfnlib_states contains [name, p, s, sname, st] if {\n\tsome [name, p, s, _] in _pf_sfnlib_scopes\n\tsome sname, st in s\n\tis_object(st)\n}\n\n_pf_sfnlib_path(name, p, sname) := sprintf(\"%s.%s.%s\", [_pf_sfnlib_prop(name), p, sname])\n\n_pf_sfnlib_type(name) := t if {\n\tt := resolve(name, \"Properties.StateMachineType\")\n\tis_string(t)\n}\n\n_pf_sfnlib_type(name) := \"STANDARD\" if {\n\tnot resolve(name, \"Properties.StateMachineType\")\n}\n\n# Effective query language of a state: state-level, then top-level, then JSONPath.\n_pf_sfnlib_ql(name, st) := q if {\n\tq := object.get(st, \"QueryLanguage\", null)\n\tis_string(q)\n}\n\n_pf_sfnlib_ql(name, st) := q if {\n\tnot is_string(object.get(st, \"QueryLanguage\", null))\n\tq := object.get(_pf_sfnlib_asl(name), \"QueryLanguage\", null)\n\tis_string(q)\n}\n\n_pf_sfnlib_ql(name, st) := \"JSONPath\" if {\n\tnot is_string(object.get(st, \"QueryLanguage\", null))\n\tnot is_string(object.get(_pf_sfnlib_asl(name), \"QueryLanguage\", null))\n}\n\n# Presence test that treats intrinsic marker objects as present.\n_pf_sfnlib_has(obj, key) if {\n\tobject.get(obj, key, \"__pf_absent\") != \"__pf_absent\"\n}\n\n# Choice rules of a Choice state: [name, path, states, state name, index, rule].\n_pf_sfnlib_choice contains [name, p, s, sname, i, c] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Choice\"\n\tarr := object.get(st, \"Choices\", null)\n\tis_array(arr)\n\tsome i, c in arr\n\tis_object(c)\n}\n\n# Optimized / SDK integration Task states: [name, path, states, state name,\n# state, service, api] for Resource = arn:<partition>:states:::<service>:<api>.\n_pf_sfnlib_integration contains [name, p, s, sname, st, svc, api] if {\n\tsome [name, p, s, sname, st] in _pf_sfnlib_states\n\tobject.get(st, \"Type\", null) == \"Task\"\n\tres := object.get(st, \"Resource\", null)\n\tis_string(res)\n\tparts := split(res, \":\")\n\tcount(parts) >= 7\n\tparts[2] == \"states\"\n\tparts[3] == \"\"\n\tparts[4] == \"\"\n\tsvc := parts[5]\n\tapi := concat(\":\", array.slice(parts, 6, count(parts)))\n}\n"
3072
+ }
3073
+ ];
3074
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUsdUNBQXVDO1FBQzdDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxzREFBc0Q7UUFDL0QsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysd0JBQXdCO1NBQ3pCO1FBQ0QsTUFBTSxFQUFFLDQ0QkFBNDRCO0tBQ3I1QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxTQUFTLEVBQUUsWUFBWTtRQUN2QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsK0NBQStDO1FBQ3hELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLDZCQUE2QjtTQUM5QjtRQUNELE1BQU0sRUFBRSw4eUJBQTh5QjtLQUN2ekI7SUFDRDtRQUNFLElBQUksRUFBRSwyQ0FBMkM7UUFDakQsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGtEQUFrRDtRQUMzRCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiw2QkFBNkI7U0FDOUI7UUFDRCxNQUFNLEVBQUUsMmhDQUEyaEM7S0FDcGlDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0NBQWdDO1FBQ3RDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSx3REFBd0Q7UUFDakUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsNkJBQTZCO1NBQzlCO1FBQ0QsTUFBTSxFQUFFLDAzQ0FBMDNDO0tBQ240QztJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxTQUFTLEVBQUUs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RixDQUFDO0FBT0YsMEVBQTBFO0FBQzdELFFBQUEsWUFBWSxHQUFxQjtJQUM1QztRQUNFLE1BQU0sRUFBRSxVQUFVO1FBQ2xCLE1BQU0sRUFBRSwwK0tBQTArSztLQUNuL0s7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHNjcmlwdHMvYnVuZGxlLXJ1bGVzLnRzIGZyb20gcnVsZXMvKiouIERvIG5vdCBlZGl0IGJ5IGhhbmQuXG4vLyB+fiBSZWdlbmVyYXRlIHdpdGg6IG5weCBwcm9qZW4gYnVuZGxlLXJ1bGVzXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVkUnVsZURhdGEge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBzZXJ2aWNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNldmVyaXR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVwc3RyZWFtOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZWdvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBCVU5ETEVEX1JVTEVTOiBCdW5kbGVkUnVsZURhdGFbXSA9IFtcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1hY2Nlc3MtbG9nLWZvcm1hdC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBY2Nlc3MgbG9nIGZvcm1hdCBtdXN0IGluY2x1ZGUgYSByZXF1ZXN0IGlkIHZhcmlhYmxlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlN0YWdlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZm9ybWF0IHN0cmluZyBpcyBvcGFxdWUgdG8gZXZlcnkgc2NoZW1hIGxheWVyOyB0aGUgc2VydmljZSByZXF1aXJlcyBhXFxuIyByZXF1ZXN0IGlkIHZhcmlhYmxlIHNvbWV3aGVyZSBpbnNpZGUgaXQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1hY2Nlc3MtbG9nLWZvcm1hdC1yZXF1ZXN0LWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NMb2dTZXR0aW5nLkZvcm1hdFxcXCIsXFxuXFx0XFxcIkFjY2VzcyBsb2cgZm9ybWF0IGhhcyBubyByZXF1ZXN0IGlkIHZhcmlhYmxlOyB0aGUgc3RhZ2UgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgTG9nIGZvcm1hdCBtdXN0IGluY2x1ZGUgZWl0aGVyICRjb250ZXh0LnJlcXVlc3RJZCBvciAkY29udGV4dC5leHRlbmRlZFJlcXVlc3RJZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkICRjb250ZXh0LnJlcXVlc3RJZCAob3IgJGNvbnRleHQuZXh0ZW5kZWRSZXF1ZXN0SWQpIHRvIHRoZSBhY2Nlc3MgbG9nIGZvcm1hdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXQtdXAtbG9nZ2luZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVxcXCIpXFxuXFx0Zm10IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWNjZXNzTG9nU2V0dGluZy5Gb3JtYXRcXFwiKVxcblxcdGlzX3N0cmluZyhmbXQpXFxuXFx0bm90IGNvbnRhaW5zKGZtdCwgXFxcIiRjb250ZXh0LnJlcXVlc3RJZFxcXCIpXFxuXFx0bm90IGNvbnRhaW5zKGZtdCwgXFxcIiRjb250ZXh0LmV4dGVuZGVkUmVxdWVzdElkXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1hdXRob3JpemVyLXR0bC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXV0aG9yaXplclJlc3VsdFR0bEluU2Vjb25kcyB0b3BzIG91dCBhdCAzNjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgdHlwZXMgdGhlIFRUTCBhcyBhIGJhcmUgaW50ZWdlcjsgdGhlIDM2MDAgY2VpbGluZyBpc1xcbiMgb25seSBpbiB0aGUgc2VydmljZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LWF1dGhvcml6ZXItdHRsLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzICV2IGlzIG92ZXIgdGhlIGNhcDsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBdXRob3JpemVyIHJlc3VsdCBUVEwgb3V0c2lkZSBhbGxvd2FibGUgcmFuZ2UuIFRUTCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMCBzZWNvbmRzLlxcXFxcXFwiXFxcIiwgW3R0bF0pLFxcblxcdFxcXCJVc2UgYSBUVEwgYmV0d2VlbiAwIGFuZCAzNjAwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclxcXCIpXFxuXFx0dHRsIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJSZXN1bHRUdGxJblNlY29uZHNcXFwiKSlcXG5cXHR0dGwgPiAzNjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctY29nbml0by1hdXRob3JpemVyLXByb3ZpZGVyLWFybnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVycyBuZWVkIFByb3ZpZGVyQVJOc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIENvZ25pdG8gYXV0aG9yaXplciB2YWxpZGF0ZXMgdG9rZW5zIGFnYWluc3QgdGhlIHVzZXIgcG9vbHMgbGlzdGVkIGluXFxuIyBQcm92aWRlckFSTnM7IHRoZSBjcmVhdGUgY2FsbCByZWplY3RzIGl0cyBhYnNlbmNlLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnY3BhX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJQcm92aWRlckFSTnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctY29nbml0by1hdXRob3JpemVyLXByb3ZpZGVyLWFybnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3ZpZGVyQVJOc1xcXCIsXFxuXFx0XFxcIkNPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVyIGhhcyBubyBQcm92aWRlckFSTnM7IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvdmlkZXJBUk5zIGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFByb3ZpZGVyQVJOcyB0byB0aGUgQ29nbml0byB1c2VyIHBvb2wgQVJOKHMpIHRoaXMgYXV0aG9yaXplciBzaG91bGQgdXNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1hdXRob3JpemVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJDT0dOSVRPX1VTRVJfUE9PTFNcXFwiXFxuXFx0X3BmX2FwZ2NwYV9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctZGVwbG95bWVudC1uby1tZXRob2RzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIERlcGxveW1lbnQgbmVlZHMgYXQgbGVhc3Qgb25lIE1ldGhvZCBvbiBpdHMgUkVTVCBBUElcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRGVwbG95aW5nIGFuIEFQSSB3aXRoIHplcm8gbWV0aG9kcyBmYWlscy4gSnVkZ2VkIG9ubHkgd2hlbiB0aGUgd2hvbGVcXG4jIHBpY3R1cmUgaXMgaW4gdGhpcyB0ZW1wbGF0ZTogdGhlIGFwaSBpcyBhIHNpYmxpbmcgcmVzb3VyY2UgYW5kIGl0IGhhcyBub1xcbiMgT3BlbkFQSSBib2R5ICh3aGljaCB3b3VsZCBkZWZpbmUgbWV0aG9kcyBpbnZpc2libHkpLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnZG5tX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2FwZ2RubV9zZXJ2ZWQoYXBpKSBpZiB7XFxuXFx0c29tZSBtIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFxcXCIpXFxuXFx0cmVzb2x2ZShtLCBcXFwiUHJvcGVydGllcy5SZXN0QXBpSWRcXFwiKSA9PSBhcGlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1kZXBsb3ltZW50LW5vLW1ldGhvZHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlc3RBcGlJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUkVTVCBBUEkgJyVzJyBoYXMgbm8gQVdTOjpBcGlHYXRld2F5OjpNZXRob2QgaW4gdGhpcyB0ZW1wbGF0ZTsgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBSRVNUIEFQSSBkb2Vzbid0IGNvbnRhaW4gYW55IG1ldGhvZHNcXFxcXFxcIlxcXCIsIFthcGldKSxcXG5cXHRcXFwiQWRkIGF0IGxlYXN0IG9uZSBBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCB0byB0aGUgQVBJIGJlZm9yZSBkZXBsb3lpbmcgaXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWRlcGxveW1lbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFxcXCIpXFxuXFx0YXBpIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVzdEFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaVxcXCIpXFxuXFx0X3BmX2FwZ2RubV9hYnNlbnQoYXBpLCBcXFwiQm9keVxcXCIpXFxuXFx0X3BmX2FwZ2RubV9hYnNlbnQoYXBpLCBcXFwiQm9keVMzTG9jYXRpb25cXFwiKVxcblxcdG5vdCBfcGZfYXBnZG5tX3NlcnZlZChhcGkpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctaW50ZWdyYXRpb24taHR0cC1tZXRob2RcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vbi1NT0NLIGludGVncmF0aW9ucyBuZWVkIEludGVncmF0aW9uSHR0cE1ldGhvZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IGludGVncmF0aW9uIHR5cGUgZXhjZXB0IE1PQ0sgY2FsbHMgYSBiYWNrZW5kIGFuZCBuZWVkcyB0aGUgSFRUUFxcbiMgbWV0aG9kIHRvIGNhbGwgaXQgd2l0aC4gVmVyaWZpZWQgZm9yIGFsbCBmb3VyIG5vbi1NT0NLIHR5cGVzLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnaWhtX3R5cGVzIDo9IHtcXFwiQVdTXFxcIiwgXFxcIkFXU19QUk9YWVxcXCIsIFxcXCJIVFRQXFxcIiwgXFxcIkhUVFBfUFJPWFlcXFwifVxcblxcbl9wZl9hcGdpaG1fbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0aW50ZWcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkludGVncmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGludGVnKVxcblxcdG9iamVjdC5nZXQoaW50ZWcsIFxcXCJJbnRlZ3JhdGlvbkh0dHBNZXRob2RcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctaW50ZWdyYXRpb24taHR0cC1tZXRob2RcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkludGVncmF0aW9uLkludGVncmF0aW9uSHR0cE1ldGhvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW50ZWdyYXRpb24gdHlwZSAnJXMnIGhhcyBubyBJbnRlZ3JhdGlvbkh0dHBNZXRob2Q7IHRoZSBtZXRob2QgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJFbnVtZXJhdGlvbiB2YWx1ZSBmb3IgSHR0cE1ldGhvZCBtdXN0IGJlIG5vbi1lbXB0eVxcXFxcXFwiXFxcIiwgW3RdKSxcXG5cXHRcXFwiU2V0IEludGVncmF0aW9uLkludGVncmF0aW9uSHR0cE1ldGhvZCAoUE9TVCBmb3IgQVdTL0FXU19QUk9YWSBMYW1iZGEgYmFja2VuZHMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tZXRob2QuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXFxcIilcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb24uVHlwZVxcXCIpXFxuXFx0dCBpbiBfcGZfYXBnaWhtX3R5cGVzXFxuXFx0X3BmX2FwZ2lobV9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctbWV0aG9kLWF1dGhvcml6ZXItaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNVU1RPTSBhbmQgQ09HTklUT19VU0VSX1BPT0xTIGF1dGhvcml6YXRpb24gbmVlZCBBdXRob3JpemVySWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGF1dGhvcml6ZXItYmFja2VkIGF1dGhvcml6YXRpb24gdHlwZXMgcG9pbnQgYXQgYW4gQXV0aG9yaXplcjsgdGhlXFxuIyBtZXRob2QgY3JlYXRlIHJlamVjdHMgdGhlbSB3aXRob3V0IG9uZS4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FwZ21haWRfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkF1dGhvcml6ZXJJZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1tZXRob2QtYXV0aG9yaXplci1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplcklkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBdXRob3JpemF0aW9uVHlwZSAnJXMnIGlzIHNldCBidXQgQXV0aG9yaXplcklkIGlzIG5vdDsgdGhlIG1ldGhvZCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgYXV0aG9yaXplciBJRCBzcGVjaWZpZWQuIFNldHRpbmcgdGhlIGF1dGhvcml6YXRpb24gdHlwZSB0byBDVVNUT00gb3IgQ09HTklUT19VU0VSX1BPT0xTIHJlcXVpcmVzIGEgdmFsaWQgYXV0aG9yaXplci5cXFxcXFxcIlxcXCIsIFthdF0pLFxcblxcdFxcXCJTZXQgQXV0aG9yaXplcklkIHRvIHRoZSBhdXRob3JpemVyIHRoaXMgbWV0aG9kIHNob3VsZCB1c2UsIG9yIGNoYW5nZSBBdXRob3JpemF0aW9uVHlwZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktbWV0aG9kLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFxcXCIpXFxuXFx0YXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemF0aW9uVHlwZVxcXCIpXFxuXFx0YXQgaW4ge1xcXCJDVVNUT01cXFwiLCBcXFwiQ09HTklUT19VU0VSX1BPT0xTXFxcIn1cXG5cXHRfcGZfYXBnbWFpZF9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctbW9kZWwtc2NoZW1hLXR5cGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1vZGVsIHNjaGVtYSAndHlwZScgbXVzdCBiZSBhIEpTT04gU2NoZW1hIGRyYWZ0LTQgdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIFNjaGVtYSBib2R5IGlzIG9wYXF1ZSBKU09OIHRvIGV2ZXJ5IHNjaGVtYSBsYXllci4gRnVsbCBkcmFmdC00XFxuIyB2YWxpZGF0aW9uIGlzIG91dCBvZiBzY29wZTsgYSBsaXRlcmFsIHRvcC1sZXZlbCBcXFwidHlwZVxcXCIgb3V0c2lkZSB0aGVcXG4jIGRyYWZ0LTQgc2V0IChhIGNvbW1vbiB0eXBvIGxpa2UgXFxcIlN0cmluZ1xcXCIpIGlzIHByb3ZhYmx5IGZhdGFsLlxcbl9wZl9hcGdtc3RfdHlwZXMgOj0ge1xcXCJhcnJheVxcXCIsIFxcXCJib29sZWFuXFxcIiwgXFxcImludGVnZXJcXFwiLCBcXFwibnVsbFxcXCIsIFxcXCJudW1iZXJcXFwiLCBcXFwib2JqZWN0XFxcIiwgXFxcInN0cmluZ1xcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1tb2RlbC1zY2hlbWEtdHlwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2NoZW1hLnR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIk1vZGVsIHNjaGVtYSB0eXBlICclcycgaXMgbm90IGEgSlNPTiBTY2hlbWEgZHJhZnQtNCB0eXBlOyB0aGUgbW9kZWwgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIG1vZGVsIHNwZWNpZmllZDogVmFsaWRhdGlvbiBSZXN1bHQ6IHdhcm5pbmdzIDogW10sIGVycm9ycyA6IFtJbnZhbGlkIG1vZGVsIHNjaGVtYSBzcGVjaWZpZWRdXFxcXFxcXCJcXFwiLCBbdF0pLFxcblxcdFxcXCJVc2Ugb25lIG9mIGFycmF5LCBib29sZWFuLCBpbnRlZ2VyLCBudWxsLCBudW1iZXIsIG9iamVjdCwgc3RyaW5nIChsb3dlcmNhc2UpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tb2RlbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFxcXCIpXFxuXFx0c2NoIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2NoZW1hXFxcIilcXG5cXHRpc19vYmplY3Qoc2NoKVxcblxcdHQgOj0gb2JqZWN0LmdldChzY2gsIFxcXCJ0eXBlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHR0ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRpc19zdHJpbmcodClcXG5cXHRub3QgdCBpbiBfcGZfYXBnbXN0X3R5cGVzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctcmVzb3VyY2UtcGF0aC1wYXJ0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQYXRoUGFydCBhbGxvd3MgYS16QS1aMC05Ll8tOiBvciBvbmUgY3VybHktYnJhY2UgdmFyaWFibGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVzb3VyY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFZhbGlkIGZvcm1zIHBlciB0aGUgc2VydmljZSBlcnJvciBpdHNlbGY6IHBsYWluIFthLXpBLVowLTkuXzotXSssIG9yIGFcXG4jIHdob2xlLXBhcnQgdmFyaWFibGUge25hbWV9IC8gZ3JlZWR5IHtuYW1lK30uXFxuX3BmX2FwZ3JwcF9vayhwcCkgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Ll86LV0rJGAsIHBwKVxcblxcbl9wZl9hcGdycHBfb2socHApIGlmIHJlZ2V4Lm1hdGNoKGBeXFxcXHtbYS16QS1aMC05Ll8tXStcXFxcKz9cXFxcfSRgLCBwcClcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LXJlc291cmNlLXBhdGgtcGFydFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGF0aFBhcnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBhdGhQYXJ0ICclcycgaGFzIGNoYXJhY3RlcnMgdGhlIHNlcnZpY2UgcmVqZWN0czsgdGhlIHJlc291cmNlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUmVzb3VyY2UncyBwYXRoIHBhcnQgb25seSBhbGxvdyBhLXpBLVowLTkuXy06IG9yIGEgdmFsaWQgZ3JlZWR5IHBhdGggdmFyaWFibGUgYW5kIGN1cmx5IGJyYWNlcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kLlxcXFxcXFwiXFxcIiwgW3BwXSksXFxuXFx0XFxcIlVzZSBvbmx5IGEtekEtWjAtOS5fLTogaW4gdGhlIHBhdGggcGFydCwgb3IgYSBzaW5nbGUge3ZhcmlhYmxlfSAvIHtncmVlZHkrfSBmb3JtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1yZXNvdXJjZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVxcXCIpXFxuXFx0cHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QYXRoUGFydFxcXCIpXFxuXFx0aXNfc3RyaW5nKHBwKVxcblxcdG5vdCBfcGZfYXBncnBwX29rKHBwKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LXN0YWdlLXZhcmlhYmxlLXZhbHVlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGFnZSB2YXJpYWJsZSB2YWx1ZXMgaGF2ZSBhIHJlc3RyaWN0ZWQgY2hhcmFjdGVyIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQWxsb3dlZCBwZXIgdGhlIHNlcnZpY2UgZXJyb3IgaXRzZWxmOiBhbHBoYW51bWVyaWNzIHBsdXMgc3BhY2UgYW5kXFxuIyAtIC4gXyA6IC8gPyAmID0gLCAobm90ZTogc3BhY2UgSVMgbGVnYWwpLlxcbl9wZl9hcGdzdnZfb2sodikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05IC5fOi8/Jj0sLV0qJGAsIHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1zdGFnZS12YXJpYWJsZS12YWx1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5WYXJpYWJsZXMuJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIlN0YWdlIHZhcmlhYmxlICclcycgaGFzIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYWxsb3dlZCBzZXQ7IHRoZSBzdGFnZSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgc3RhZ2UgdmFyaWFibGUgdmFsdWUgb2Yga2V5ICVzLiAgUGxlYXNlIHVzZSB2YWx1ZXMgd2l0aCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdGhlIHN5bWJvbHMgJyAnLCAtJywgJy4nLCAnXycsICc6JywgJy8nLCAnPycsICcmJywgJz0nLCBhbmQgJywnLlxcXFxcXFwiXFxcIiwgW2ssIGtdKSxcXG5cXHRcXFwiUmVzdHJpY3QgdGhlIHZhbHVlIHRvIGFscGhhbnVtZXJpY3MgYW5kICcgJywgLSwgLiwgXywgOiwgLywgPywgJiwgPSwgLFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zdGFnZS12YXJpYWJsZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6U3RhZ2VcXFwiKVxcblxcdHZhcnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WYXJpYWJsZXNcXFwiKVxcblxcdGlzX29iamVjdCh2YXJzKVxcblxcdHNvbWUgaywgdiBpbiB2YXJzXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IF9wZl9hcGdzdnZfb2sodilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy10b2tlbi1hdXRob3JpemVyLWlkZW50aXR5LXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVE9LRU4gYXV0aG9yaXplcnMgbmVlZCBJZGVudGl0eVNvdXJjZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUT0tFTiBhdXRob3JpemVycyByZWFkIHRoZSB0b2tlbiBmcm9tIHRoZSBoZWFkZXIgbmFtZWQgYnkgSWRlbnRpdHlTb3VyY2UsXFxuIyBzbyB0aGUgY3JlYXRlIGNhbGwgcmVqZWN0cyBpdHMgYWJzZW5jZS4gUkVRVUVTVCBhdXRob3JpemVycyBhcmUgb3V0IG9mXFxuIyBzY29wZTogdGhleSBuZWVkIGl0IG9ubHkgd2l0aCBjYWNoaW5nIGVuYWJsZWQgKHVubWVhc3VyZWQpLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBndGlzX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJJZGVudGl0eVNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy10b2tlbi1hdXRob3JpemVyLWlkZW50aXR5LXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSWRlbnRpdHlTb3VyY2VcXFwiLFxcblxcdFxcXCJUT0tFTiBhdXRob3JpemVyIGhhcyBubyBJZGVudGl0eVNvdXJjZTsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJZGVudGl0eVNvdXJjZSBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBJZGVudGl0eVNvdXJjZSwgZS5nLiBtZXRob2QucmVxdWVzdC5oZWFkZXIuQXV0aG9yaXphdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiVE9LRU5cXFwiXFxuXFx0X3BmX2FwZ3Rpc19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1hcGktbmFtZS1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBBcGkgbmVlZHMgYSBOYW1lIHVubGVzcyBhbiBPcGVuQVBJIGJvZHkgcHJvdmlkZXMgb25lXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNaXJyb3JzIGNmbi1saW50IEUzNjYwIGZvciBSRVNUIEFQSXMsIHdoaWNoIGhhcyBubyBBcGlHYXRld2F5VjJcXG4jIGNvdW50ZXJwYXJ0OiB3aXRob3V0IGEgQm9keSB0byBjYXJyeSBpbmZvLnRpdGxlLCBOYW1lIGlzIG1hbmRhdG9yeS5cXG4jIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItYXBpLW5hbWUtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiLFxcblxcdFxcXCJBcGkgaGFzIG5vIE5hbWUgYW5kIG5vIE9wZW5BUEkgYm9keSB0byB0YWtlIG9uZSBmcm9tOyB0aGUgQVBJIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBBUEkgbmFtZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBOYW1lLCBvciBwcm92aWRlIHRoZSBkZWZpbml0aW9uIHZpYSBCb2R5IC8gQm9keVMzTG9jYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXBpLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRfcGZfYWd2MmFucl9hYnNlbnQobmFtZSwgXFxcIk5hbWVcXFwiKVxcblxcdF9wZl9hZ3YyYW5yX2Fic2VudChuYW1lLCBcXFwiQm9keVxcXCIpXFxuXFx0X3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIFxcXCJCb2R5UzNMb2NhdGlvblxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1hd3MtcHJveHktcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFXU19QUk9YWSBpbnRlZ3JhdGlvbnMgdGFrZSBQYXlsb2FkRm9ybWF0VmVyc2lvbiAxLjAgb3IgMi4wXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFNjb3BlZCB0byBpbnRlZ3JhdGlvbnMgd2hvc2UgQXBpIHNpYmxpbmcgaXMgcHJvdmFibHkgSFRUUCAodGhlIGJlbmNoZWRcXG4jIHNoYXBlKTsgV2ViU29ja2V0IGludGVncmF0aW9ucyBhcmUgb3V0IG9mIHNjb3BlLlxcbl9wZl9hZ3YyYXBwX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1hd3MtcHJveHktcGF5bG9hZC12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUGF5bG9hZEZvcm1hdFZlcnNpb24gJyVzJyBkb2VzIG5vdCBleGlzdDsgdGhlIGludGVncmF0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiVW5zdXBwb3J0ZWQgUGF5bG9hZEZvcm1hdFZlcnNpb246ICVzXFxcXFxcXCJcXFwiLCBbcHYsIHB2XSksXFxuXFx0XFxcIlVzZSAxLjAgb3IgMi4wXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb25UeXBlXFxcIikgPT0gXFxcIkFXU19QUk9YWVxcXCJcXG5cXHRfcGZfYWd2MmFwcF9odHRwX2FwaShuYW1lKVxcblxcdHB2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiKVxcblxcdGlzX3N0cmluZyhwdilcXG5cXHRub3QgcHYgaW4ge1xcXCIxLjBcXFwiLCBcXFwiMi4wXFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWNvcnMtY3JlZGVudGlhbHMtd2lsZGNhcmRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ09SUyBBbGxvd0NyZWRlbnRpYWxzIGNhbm5vdCBwYWlyIHdpdGggYSB3aWxkY2FyZCBvcmlnaW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBDT1JTIHNwZWMgZm9yYmlkcyBjcmVkZW50aWFsZWQgcmVxdWVzdHMgYWdhaW5zdCBhIHdpbGRjYXJkIG9yaWdpbixcXG4jIGFuZCB0aGUgQVBJIGNyZWF0ZSBlbmZvcmNlcyBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItY29ycy1jcmVkZW50aWFscy13aWxkY2FyZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd09yaWdpbnMuJWRcXFwiLCBbby5pbmRleF0pLFxcblxcdFxcXCJDb3JzQ29uZmlndXJhdGlvbiBzZXRzIEFsbG93Q3JlZGVudGlhbHMgd2l0aCBhICcqJyBvcmlnaW47IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJhbGxvdy1jcmVkZW50aWFscyBpcyBub3Qgc3VwcG9ydGVkIGlmICdhbGxvdy1vcmlnaW4nIGlzICpcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkxpc3QgZXhwbGljaXQgb3JpZ2lucywgb3IgZHJvcCBBbGxvd0NyZWRlbnRpYWxzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWNvcnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29yc0NvbmZpZ3VyYXRpb24uQWxsb3dDcmVkZW50aWFsc1xcXCIpKSA9PSB0cnVlXFxuXFx0c29tZSBvIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd09yaWdpbnNcXFwiKVxcblxcdG8udmFsdWUgPT0gXFxcIipcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1odHRwLXByb3h5LXBheWxvYWQtdmVyc2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIVFRQX1BST1hZIGludGVncmF0aW9ucyBvbmx5IHRha2UgUGF5bG9hZEZvcm1hdFZlcnNpb24gMS4wXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSAyLjAgZXZlbnQgZm9ybWF0IGlzIExhbWJkYS1vbmx5OyBIVFRQX1BST1hZIGJhY2tlbmRzIG11c3Qgc3RheSBvblxcbiMgMS4wLiBTY29wZWQgdG8gdGhlIGJlbmNoZWQgc2hhcGUgKEFwaSBzaWJsaW5nIHByb3ZhYmx5IEhUVFApLlxcbl9wZl9hZ3YyaHBwX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1odHRwLXByb3h5LXBheWxvYWQtdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiLFxcblxcdFxcXCJIVFRQX1BST1hZIGludGVncmF0aW9ucyBvbmx5IHN1cHBvcnQgUGF5bG9hZEZvcm1hdFZlcnNpb24gMS4wOyB0aGUgaW50ZWdyYXRpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJQYXlsb2FkRm9ybWF0VmVyc2lvbiAyLjAgaXMgbm90IHN1cHBvcnRlZCBmb3IgaW50ZWdyYXRpb24gb2YgdHlwZSBIVFRQX1BST1hZXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgUGF5bG9hZEZvcm1hdFZlcnNpb24gdG8gMS4wIChvciBvbWl0IGl0KSwgb3Igc3dpdGNoIHRvIGFuIEFXU19QUk9YWSBpbnRlZ3JhdGlvbiBmb3IgMi4wXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb25UeXBlXFxcIikgPT0gXFxcIkhUVFBfUFJPWFlcXFwiXFxuXFx0X3BmX2FndjJocHBfaHR0cF9hcGkobmFtZSlcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIikgPT0gXFxcIjIuMFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUta2V5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFAgQVBJIHJvdXRlIGtleXMgYXJlIFxcXCJNRVRIT0QgL3BhdGhcXFwiIG9yICRkZWZhdWx0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdlYlNvY2tldCByb3V0ZSBrZXlzIGFyZSBmcmVlLWZvcm0sIHNvIHRoaXMgb25seSBqdWRnZXMgcm91dGVzIHdob3NlIEFwaVxcbiMgc2libGluZyBpcyBwcm92YWJseSBIVFRQLiBUUkFDRSBpcyBkZXBsb3ktdmVyaWZpZWQgYXMgcmVqZWN0ZWQ7IHBhdGhzIHdpdGhcXG4jIHNwYWNlcyBhcmUgbGVmdCBhbG9uZSAodW5tZWFzdXJlZCkuXFxuX3BmX2FndjJya19tZXRob2RzIDo9IHtcXFwiR0VUXFxcIiwgXFxcIlBPU1RcXFwiLCBcXFwiUFVUXFxcIiwgXFxcIlBBVENIXFxcIiwgXFxcIkRFTEVURVxcXCIsIFxcXCJIRUFEXFxcIiwgXFxcIk9QVElPTlNcXFwiLCBcXFwiQU5ZXFxcIn1cXG5cXG5fcGZfYWd2MnJrX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbl9wZl9hZ3Yycmtfb2socmspIGlmIHJrID09IFxcXCIkZGVmYXVsdFxcXCJcXG5cXG5fcGZfYWd2MnJrX29rKHJrKSBpZiB7XFxuXFx0cGFydHMgOj0gc3BsaXQocmssIFxcXCIgXFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gMlxcblxcdHBhcnRzWzBdIGluIF9wZl9hZ3YycmtfbWV0aG9kc1xcblxcdHN0YXJ0c3dpdGgocGFydHNbMV0sIFxcXCIvXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUta2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZUtleVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUm91dGVLZXkgJyVzJyBpcyBtYWxmb3JtZWQgZm9yIGFuIEhUVFAgQVBJOyB0aGUgcm91dGUgY3JlYXRlIGZhaWxzIHdpdGggJ1RoZSBwcm92aWRlZCByb3V0ZSBrZXkgaXMgbm90IGZvcm1hdHRlZCBwcm9wZXJseSBmb3IgSFRUUCBwcm90b2NvbC4gRm9ybWF0IHNob3VsZCBiZSBcXFxcXFxcIltIVFRQIE1FVEhPRF0gL1tSRVNPVVJDRSBQQVRIXVxcXFxcXFwiIG9yIFxcXFxcXFwiJGRlZmF1bHRcXFxcXFxcIidcXFwiLCBbcmtdKSxcXG5cXHRcXFwiVXNlIFxcXFxcXFwiTUVUSE9EIC9wYXRoXFxcXFxcXCIgd2l0aCBNRVRIT0Qgb25lIG9mIEdFVCBQT1NUIFBVVCBQQVRDSCBERUxFVEUgSEVBRCBPUFRJT05TIEFOWSwgb3IgJGRlZmF1bHRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktZGV2ZWxvcC1yb3V0ZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVxcXCIpXFxuXFx0X3BmX2FndjJya19odHRwX2FwaShuYW1lKVxcblxcdHJrIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUm91dGVLZXlcXFwiKVxcblxcdGlzX3N0cmluZyhyaylcXG5cXHRub3QgX3BmX2FndjJya19vayhyaylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUtc2VsZWN0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFAgQVBJcyBhY2NlcHQgb25seSB0aGUgbWV0aG9kLXBhdGggcm91dGUgc2VsZWN0aW9uIGV4cHJlc3Npb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJvdGggc3BlbGxpbmdzIGRlcGxveS12ZXJpZmllZCBhcyBhY2NlcHRlZDogdGhlIGRvY3VtZW50ZWRcXG4jIFxcXCIkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aFxcXCIgYW5kIHRoZSBcXFwiJHtyZXF1ZXN0Lm1ldGhvZH0gJHtyZXF1ZXN0LnBhdGh9XFxcIlxcbiMgZm9ybSB0aGUgc2VydmljZSBlcnJvciBpdHNlbGYgcHJpbnRzIChiZW5jaCB2MDJiKS5cXG5fcGZfYWd2Mmhyc19hbGxvd2VkIDo9IHtcXFwiJHJlcXVlc3QubWV0aG9kICRyZXF1ZXN0LnBhdGhcXFwiLCBcXFwiJHtyZXF1ZXN0Lm1ldGhvZH0gJHtyZXF1ZXN0LnBhdGh9XFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItaHR0cC1yb3V0ZS1zZWxlY3Rpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSFRUUCBBUEkgUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uICclcycgaXMgbm90IHN1cHBvcnRlZDsgdGhlIEFQSSBjcmVhdGUgZmFpbHMgd2l0aCAnUm91dGUgc2VsZWN0aW9uIGV4cHJlc3Npb24gaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gXFxcXFxcXCIke3JlcXVlc3QubWV0aG9kfSAke3JlcXVlc3QucGF0aH1cXFxcXFxcIidcXFwiLCBbcnNlXSksXFxuXFx0XFxcIlVzZSAkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aCwgb3Igb21pdCB0aGUgcHJvcGVydHkgKEhUVFAgQVBJcyBkZWZhdWx0IHRvIGl0KVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxuXFx0cnNlIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXFxcIilcXG5cXHRpc19zdHJpbmcocnNlKVxcblxcdG5vdCByc2UgaW4gX3BmX2FndjJocnNfYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItand0LWF1dGhvcml6ZXItY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkpXVCBhdXRob3JpemVycyBuZWVkIEp3dENvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIEpXVCBhdXRob3JpemVyIGlzIG5vdGhpbmcgYnV0IGl0cyBpc3N1ZXIvYXVkaWVuY2UgY29uZmlnLCBzbyB0aGVcXG4jIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3YyamFjX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJKd3RDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItand0LWF1dGhvcml6ZXItY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Kd3RDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiSldUIGF1dGhvcml6ZXIgaGFzIG5vIEp3dENvbmZpZ3VyYXRpb247IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSnd0Q29uZmlndXJhdGlvbiBtdXN0IG5vdCBiZSBudWxsIGZvciBKV1QgQXV0aG9yaXplclxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IEp3dENvbmZpZ3VyYXRpb24gd2l0aCBJc3N1ZXIgYW5kIEF1ZGllbmNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJUeXBlXFxcIikgPT0gXFxcIkpXVFxcXCJcXG5cXHRfcGZfYWd2MmphY19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1yZXF1ZXN0LWF1dGhvcml6ZXItcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJFUVVFU1QgYXV0aG9yaXplcnMgb24gSFRUUCBBUElzIG5lZWQgQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVxdWlyZWQgb24gSFRUUCBBUElzIG9ubHkgLSBXZWJTb2NrZXQgUkVRVUVTVCBhdXRob3JpemVycyBtdXN0IE5PVCBzZXRcXG4jIGl0LCBzbyB0aGUgcnVsZSBmaXJlcyBzb2xlbHkgd2hlbiB0aGUgQXBpIHNpYmxpbmcgaXMgcHJvdmFibHkgSFRUUC5cXG4jIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJyYXBfaHR0cF9hcGkobmFtZSkgaWYge1xcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUoYXBpLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG59XFxuXFxuX3BmX2FndjJyYXBfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLXJlcXVlc3QtYXV0aG9yaXplci1wYXlsb2FkLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0XFxcIlJFUVVFU1QgYXV0aG9yaXplciBvbiBhbiBIVFRQIEFQSSBoYXMgbm8gQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uOyB0aGUgYXV0aG9yaXplciBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvbiBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgUkVRVUVTVCBhdXRob3JpemVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uIHRvIDEuMCBvciAyLjBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiUkVRVUVTVFxcXCJcXG5cXHRfcGZfYWd2MnJhcF9odHRwX2FwaShuYW1lKVxcblxcdF9wZl9hZ3YycmFwX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLXdlYnNvY2tldC1yb3V0ZS1zZWxlY3Rpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiV2ViU29ja2V0IEFQSXMgbmVlZCBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdlYlNvY2tldCBBUElzIHJvdXRlIGJ5IGV2YWx1YXRpbmcgdGhpcyBleHByZXNzaW9uIGFnYWluc3QgZWFjaCBtZXNzYWdlLFxcbiMgc28gdGhlIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3Yyd3JzX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi13ZWJzb2NrZXQtcm91dGUtc2VsZWN0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiLFxcblxcdFxcXCJXZWJTb2NrZXQgQVBJIGhhcyBubyBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb247IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvbiwgZS5nLiAkcmVxdWVzdC5ib2R5LmFjdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIldFQlNPQ0tFVFxcXCJcXG5cXHRfcGZfYWd2Mndyc19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLWNvb2xkb3duLW5vbi1uZWdhdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvb2xkb3duIGNhbm5vdCBiZSBuZWdhdGl2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ29vbGRvd24gaXMgYSBzdHJpbmcgaW4gdGhlIHNjaGVtYTsgb25seSB0aGUgc2VydmljZSBrbm93cyBpdCBpcyBhXFxuIyBub24tbmVnYXRpdmUgaW50ZWdlci5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy1jb29sZG93bi1ub24tbmVnYXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvb2xkb3duXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDb29sZG93biAldiBpcyBuZWdhdGl2ZTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMFxcXFxcXFwiXFxcIiwgW2NdKSxcXG5cXHRcXFwiVXNlIHplcm8gb3IgYSBwb3NpdGl2ZSBudW1iZXIgb2Ygc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29vbGRvd25cXFwiKSlcXG5cXHRjIDwgMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1kZXNpcmVkLWNhcGFjaXR5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGVzaXJlZENhcGFjaXR5IG11c3Qgc2l0IGJldHdlZW4gTWluU2l6ZSBhbmQgTWF4U2l6ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNpemVzIGFyZSBzdHJpbmctdHlwZWQgaW4gdGhlIHNjaGVtYTsgdGhlIGJldHdlZW4tcmVsYXRpb25zaGlwIGlzXFxuIyBhIHRocmVlLXdheSBjcm9zcy1wcm9wZXJ0eSBjaGVjay4gVGhlIG1pbj5tYXggcGFpciBpdHNlbGYgaXMgZW5naW5lXFxuIyB0ZXJyaXRvcnkgKEUzNzA2KSBhbmQgbm90IHJlcGVhdGVkIGhlcmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctZGVzaXJlZC1jYXBhY2l0eS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVzaXJlZENhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZXNpcmVkQ2FwYWNpdHkgJXYgaXMgb3V0c2lkZSBbJXYsICV2XTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiRGVzaXJlZCBjYXBhY2l0eToldiBtdXN0IGJlIGJldHdlZW4gdGhlIHNwZWNpZmllZCBtaW4gc2l6ZToldiBhbmQgbWF4IHNpemU6JXZcXFxcXFxcIlxcXCIsIFtkYywgbW4sIG14LCBkYywgbW4sIG14XSksXFxuXFx0XFxcIktlZXAgTWluU2l6ZSA8PSBEZXNpcmVkQ2FwYWNpdHkgPD0gTWF4U2l6ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGRjIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc2lyZWRDYXBhY2l0eVxcXCIpKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1pblNpemVcXFwiKSlcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXhTaXplXFxcIikpXFxuXFx0bW4gPD0gbXhcXG5cXHRfcGZfYXNnZGNyX291dChkYywgbW4sIG14KVxcbn1cXG5cXG5fcGZfYXNnZGNyX291dChkYywgbW4sIF8pIGlmIGRjIDwgbW5cXG5cXG5fcGZfYXNnZGNyX291dChkYywgXywgbXgpIGlmIGRjID4gbXhcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1oZWFsdGgtY2hlY2stZ3JhY2UtcGVyaW9kXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCBjYW5ub3QgYmUgbmVnYXRpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgdHlwZXMgaXQgYXMgYSBiYXJlIGludGVnZXIgd2l0aCBubyBmbG9vcjsgemVybyBpcyB0aGVcXG4jIHNlcnZpY2UgZGVmYXVsdCwgc28gb25seSBuZWdhdGl2ZXMgYXJlIGNsYWltZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctaGVhbHRoLWNoZWNrLWdyYWNlLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCAldiBpcyBuZWdhdGl2ZTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiR3JhY2UgcGVyaW9kIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLlxcXFxcXFwiXFxcIiwgW2ddKSxcXG5cXHRcXFwiVXNlIHplcm8gb3IgYSBwb3NpdGl2ZSBudW1iZXIgb2Ygc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGcgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFxcXCIpKVxcblxcdGcgPCAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLW9uZGVtYW5kLXBlcmNlbnRhZ2UtbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHkgdG9wcyBvdXQgYXQgMTAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIHBlcmNlbnRhZ2Ugc3BsaXQgY2Fubm90IGV4Y2VlZCAxMDA7IHRoZSBzY2hlbWEgaGFzIG5vIG1heGltdW0uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctb25kZW1hbmQtcGVyY2VudGFnZS1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1peGVkSW5zdGFuY2VzUG9saWN5Lkluc3RhbmNlc0Rpc3RyaWJ1dGlvbi5PbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHkgJXYgaXMgb3ZlciAxMDA7IHRoZSBncm91cCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiVXNlIGEgcGVyY2VudGFnZSBiZXR3ZWVuIDAgYW5kIDEwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC1pbnN0YW5jZXNkaXN0cmlidXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdHAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWl4ZWRJbnN0YW5jZXNQb2xpY3kuSW5zdGFuY2VzRGlzdHJpYnV0aW9uLk9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5XFxcIikpXFxuXFx0cCA+IDEwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy10YXJnZXQtdmFsdWUtcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXJnZXQgdHJhY2tpbmcgbmVlZHMgYSBwb3NpdGl2ZSBUYXJnZXRWYWx1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6U2NhbGluZ1BvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgZmxvb3IgaXMgZWZmZWN0aXZlbHkgXFxcInBvc2l0aXZlXFxcIiAoOC41ZS0xMik7IHplcm8gYW5kXFxuIyBuZWdhdGl2ZXMgYXJlIHJlamVjdGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXNnLXRhcmdldC12YWx1ZS1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFyZ2V0VHJhY2tpbmdDb25maWd1cmF0aW9uLlRhcmdldFZhbHVlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYXJnZXRWYWx1ZSAldiBpcyBub3QgcG9zaXRpdmU7IHRoZSBwb2xpY3kgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJUYXJnZXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDguNTE1OTJFLTEyIGFuZCAxLjE3NDI3MUUxN1xcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRcXFwiVXNlIGEgcG9zaXRpdmUgdGFyZ2V0IHZhbHVlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctc2NhbGluZ3BvbGljeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6U2NhbGluZ1BvbGljeVxcXCIpXFxuXFx0diA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRUcmFja2luZ0NvbmZpZ3VyYXRpb24uVGFyZ2V0VmFsdWVcXFwiKSlcXG5cXHR2IDw9IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctem9uZS1vci1zdWJuZXQtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGdyb3VwIG5lZWRzIEF2YWlsYWJpbGl0eVpvbmVzLCBBdmFpbGFiaWxpdHlab25lSWRzLCBvciBzdWJuZXRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBQbGFjZW1lbnQgbXVzdCBjb21lIGZyb20gc29tZXdoZXJlLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXNnenNyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctem9uZS1vci1zdWJuZXQtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlZQQ1pvbmVJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiTmVpdGhlciBBdmFpbGFiaWxpdHlab25lcywgQXZhaWxhYmlsaXR5Wm9uZUlkcywgbm9yIFZQQ1pvbmVJZGVudGlmaWVyIGlzIHNldDsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiWW91IG11c3Qgc3BlY2lmeSAxIG9mIGVpdGhlciBBdmFpbGFiaWxpdHlab25lcywgQXZhaWxhYmlsaXR5Wm9uZUlkcywgb3IgU3VibmV0c1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFZQQ1pvbmVJZGVudGlmaWVyIHdpdGggdGhlIHRhcmdldCBzdWJuZXRzIChvciBBdmFpbGFiaWxpdHlab25lcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXFxcIilcXG5cXHRfcGZfYXNnenNyX2Fic2VudChuYW1lLCBcXFwiQXZhaWxhYmlsaXR5Wm9uZXNcXFwiKVxcblxcdF9wZl9hc2d6c3JfYWJzZW50KG5hbWUsIFxcXCJBdmFpbGFiaWxpdHlab25lSWRzXFxcIilcXG5cXHRfcGZfYXNnenNyX2Fic2VudChuYW1lLCBcXFwiVlBDWm9uZUlkZW50aWZpZXJcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWNlLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb21wdXRlIGVudmlyb25tZW50IG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWNlLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVFbnZpcm9ubWVudE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkNvbXB1dGVFbnZpcm9ubWVudE5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDEyOCBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDEyOCBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZUVudmlyb25tZW50TmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDEyOH0kYCwgdilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1jZS12Y3B1cy1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1heHZDcHVzIG11c3QgYmUgYXQgbGVhc3QgTWludkNwdXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtY2UtdmNwdXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuTWF4dkNwdXNcXFwiLFxcblxcdHNwcmludGYoXFxcIk1heHZDcHVzICV2IGlzIGJlbG93IE1pbnZDcHVzICV2IChcXFxcXFxcIm1heHZDcHVzIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWludkNwdXMuXFxcXFxcXCIpXFxcIiwgW214LCBtbl0pLFxcblxcdFxcXCJLZWVwIE1pbnZDcHVzIDw9IE1heHZDcHVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRtbiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLk1pbnZDcHVzXFxcIikpXFxuXFx0bXggOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5NYXh2Q3B1c1xcXCIpKVxcblxcdG14IDwgbW5cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1mYXJnYXRlLWNlLWZpZWxkc1wiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZhcmdhdGUgY29tcHV0ZSBlbnZpcm9ubWVudHMgY2Fubm90IHRha2UgQWxsb2NhdGlvblN0cmF0ZWd5IG9yIEluc3RhbmNlVHlwZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaGZjZl9jcihuYW1lKSA6PSBjciBpZiB7XFxuXFx0Y3IgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLlR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhjcilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWNlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLiVzXFxcIiwgW2ZpZWxkXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgaXMgbm90IGFwcGxpY2FibGUgZm9yICVzIGNvbXB1dGUgZW52aXJvbm1lbnRzOyBCYXRjaCByZWplY3RzIHRoZSBjcmVhdGUgY2FsbFxcXCIsIFtmaWVsZCwgY3JdKSxcXG5cXHRcXFwiUmVtb3ZlIHRoZSBFQzItb25seSBmaWVsZCwgb3Igc3dpdGNoIENvbXB1dGVSZXNvdXJjZXMuVHlwZSB0byBFQzIvU1BPVFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDb21wdXRlRW52aXJvbm1lbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFxcXCIpXFxuXFx0Y3IgOj0gX3BmX2JhdGNoZmNmX2NyKG5hbWUpXFxuXFx0Y3IgaW4ge1xcXCJGQVJHQVRFXFxcIiwgXFxcIkZBUkdBVEVfU1BPVFxcXCJ9XFxuXFx0Y3JlcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzXFxuXFx0aXNfb2JqZWN0KGNyZXMpXFxuXFx0c29tZSBmaWVsZCBpbiB7XFxcIkFsbG9jYXRpb25TdHJhdGVneVxcXCIsIFxcXCJJbnN0YW5jZVR5cGVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KGNyZXMsIGZpZWxkLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtZmFyZ2F0ZS1jcHUtbWVtb3J5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSBqb2IgZGVmaW5pdGlvbnMgbXVzdCB1c2UgYSBzdXBwb3J0ZWQgdkNQVS9tZW1vcnkgY29tYmluYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfYmF0Y2hmY21fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L3VzZXJndWlkZS9mYXJnYXRlLmh0bWxcXFwiXFxuXFxuIyBNZW1vcnkgc3BlYyBwZXIgdkNQVSB0aWVyOiAwLjI1IGlzIGFuIGV4cGxpY2l0IHNldDsgdGhlIHJlc3QgYXJlXFxuIyBbbWluLCBtYXgsIHN0ZXBdIGFyaXRobWV0aWMgcmFuZ2VzLiBLZXlzIGFyZSBudW1iZXJzIHNvIFxcXCIxLjBcXFwiIGFuZFxcbiMgXFxcIjFcXFwiIGJvdGggbGFuZCBvbiB0aGUgc2FtZSB0aWVyIGFmdGVyIHRvX251bWJlci5cXG5fcGZfYmF0Y2hmY21fc2V0IDo9IHs1MTIsIDEwMjQsIDIwNDh9XFxuXFxuX3BmX2JhdGNoZmNtX3JhbmdlIDo9IHswLjU6IFsxMDI0LCA0MDk2LCAxMDI0XSwgMTogWzIwNDgsIDgxOTIsIDEwMjRdLCAyOiBbNDA5NiwgMTYzODQsIDEwMjRdLCA0OiBbODE5MiwgMzA3MjAsIDEwMjRdLCA4OiBbMTYzODQsIDYxNDQwLCA0MDk2XSwgMTY6IFszMjc2OCwgMTIyODgwLCA4MTkyXX1cXG5cXG5fcGZfYmF0Y2hmY21fZmFyZ2F0ZShuYW1lKSBpZiB7XFxuXFx0c29tZSBwYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUGxhdGZvcm1DYXBhYmlsaXRpZXNcXFwiKVxcblxcdHBjLnZhbHVlID09IFxcXCJGQVJHQVRFXFxcIlxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fcmVxKG5hbWUsIHJ0eXBlKSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXMuUmVzb3VyY2VSZXF1aXJlbWVudHNcXFwiKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0b2JqZWN0LmdldChlbnRyeSwgXFxcIlR5cGVcXFwiLCBcXFwiXFxcIikgPT0gcnR5cGVcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHYgOj0gdG9fbnVtYmVyKHJhdylcXG59XFxuXFxuX3BmX2JhdGNoZmNtX2JhZCh2LCBtKSBpZiB7XFxuXFx0diA9PSAwLjI1XFxuXFx0bm90IG0gaW4gX3BmX2JhdGNoZmNtX3NldFxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fYmFkKHYsIG0pIGlmIHtcXG5cXHRzcGVjIDo9IF9wZl9iYXRjaGZjbV9yYW5nZVt2XVxcblxcdG0gPCBzcGVjWzBdXFxufVxcblxcbl9wZl9iYXRjaGZjbV9iYWQodiwgbSkgaWYge1xcblxcdHNwZWMgOj0gX3BmX2JhdGNoZmNtX3JhbmdlW3ZdXFxuXFx0bSA+IHNwZWNbMV1cXG59XFxuXFxuX3BmX2JhdGNoZmNtX2JhZCh2LCBtKSBpZiB7XFxuXFx0c3BlYyA6PSBfcGZfYmF0Y2hmY21fcmFuZ2Vbdl1cXG5cXHQobSAtIHNwZWNbMF0pICUgc3BlY1syXSAhPSAwXFxufVxcblxcbl9wZl9iYXRjaGZjbV90aWVyKHYpIGlmIHYgPT0gMC4yNVxcblxcbl9wZl9iYXRjaGZjbV90aWVyKHYpIGlmIF9wZl9iYXRjaGZjbV9yYW5nZVt2XVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtZmFyZ2F0ZS1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJQcm9wZXJ0aWVzLlJlc291cmNlUmVxdWlyZW1lbnRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJWQ1BVICV2IGlzIG5vdCBhIEZhcmdhdGUgdGllciAoMC4yNSwgMC41LCAxLCAyLCA0LCA4LCAxNik7IEJhdGNoIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVzb3VyY2UgcmVxdWlyZW1lbnRzIC4uLiBub3QgdmFsaWQuXFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdFxcXCJVc2Ugb25lIG9mIHRoZSBGYXJnYXRlIHZDUFUgdGllcnNcXFwiLFxcblxcdF9wZl9iYXRjaGZjbV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdF9wZl9iYXRjaGZjbV9mYXJnYXRlKG5hbWUpXFxuXFx0diA6PSBfcGZfYmF0Y2hmY21fcmVxKG5hbWUsIFxcXCJWQ1BVXFxcIilcXG5cXHRub3QgX3BmX2JhdGNoZmNtX3RpZXIodilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWNwdS1tZW1vcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXMuUmVzb3VyY2VSZXF1aXJlbWVudHNcXFwiLFxcblxcdHNwcmludGYoXFxcIk1FTU9SWSAldiBNaUIgaXMgbm90IHZhbGlkIGZvciBWQ1BVICV2OyBCYXRjaCByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJGYXJnYXRlIHJlc291cmNlIHJlcXVpcmVtZW50cyAoJXYgdkNQVSwgJXYgTWlCKSBub3QgdmFsaWQuXFxcXFxcXCJcXFwiLCBbbSwgdiwgdiwgbV0pLFxcblxcdFxcXCJQaWNrIGEgbWVtb3J5IHZhbHVlIGZyb20gdGhlIHRpZXIncyBzdXBwb3J0ZWQgbGlzdFxcXCIsXFxuXFx0X3BmX2JhdGNoZmNtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2JhdGNoZmNtX2ZhcmdhdGUobmFtZSlcXG5cXHR2IDo9IF9wZl9iYXRjaGZjbV9yZXEobmFtZSwgXFxcIlZDUFVcXFwiKVxcblxcdG0gOj0gX3BmX2JhdGNoZmNtX3JlcShuYW1lLCBcXFwiTUVNT1JZXFxcIilcXG5cXHRfcGZfYmF0Y2hmY21fYmFkKHYsIG0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtZmFyZ2F0ZS1leGVjdXRpb24tcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZhcmdhdGUgam9iIGRlZmluaXRpb25zIHJlcXVpcmUgRXhlY3V0aW9uUm9sZUFyblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaGZlcl9mYXJnYXRlKG5hbWUpIGlmIHtcXG5cXHRzb21lIHBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5QbGF0Zm9ybUNhcGFiaWxpdGllc1xcXCIpXFxuXFx0cGMudmFsdWUgPT0gXFxcIkZBUkdBVEVcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtZmFyZ2F0ZS1leGVjdXRpb24tcm9sZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyUHJvcGVydGllcy5FeGVjdXRpb25Sb2xlQXJuXFxcIixcXG5cXHRcXFwiUGxhdGZvcm1DYXBhYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgRXhlY3V0aW9uUm9sZUFybiBpcyBtaXNzaW5nIChcXFxcXFxcImV4ZWN1dGlvblJvbGVBcm4gaXMgcmVxdWlyZWQgZm9yIEZhcmdhdGUgam9icy5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJTZXQgQ29udGFpbmVyUHJvcGVydGllcy5FeGVjdXRpb25Sb2xlQXJuXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1JlZ2lzdGVySm9iRGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2JhdGNoZmVyX2ZhcmdhdGUobmFtZSlcXG5cXHRjcCA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcy5Db250YWluZXJQcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KGNwKVxcblxcdG9iamVjdC5nZXQoY3AsIFxcXCJFeGVjdXRpb25Sb2xlQXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWZhcmdhdGUtbXVsdGlub2RlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTXVsdGktbm9kZSBwYXJhbGxlbCBqb2JzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEZhcmdhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWZhcmdhdGUtbXVsdGlub2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QbGF0Zm9ybUNhcGFiaWxpdGllc1xcXCIsXFxuXFx0XFxcIlR5cGUgbXVsdGlub2RlIGNhbm5vdCBydW4gb24gRmFyZ2F0ZSAoXFxcXFxcXCJGYXJnYXRlIGRvZXMgbm90IHN1cHBvcnQgTU5QIGpvYnNcXFxcXFxcIilcXFwiLFxcblxcdFxcXCJVc2UgRUMyIHBsYXRmb3JtIGNhcGFiaWxpdGllcyBmb3IgbXVsdGktbm9kZSBwYXJhbGxlbCBqb2JzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC91c2VyZ3VpZGUvbXVsdGktbm9kZS1wYXJhbGxlbC1qb2JzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwibXVsdGlub2RlXFxcIlxcblxcdHNvbWUgcGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBsYXRmb3JtQ2FwYWJpbGl0aWVzXFxcIilcXG5cXHRwYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1qZC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSm9iIGRlZmluaXRpb24gbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWpkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkpvYkRlZmluaXRpb25OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJKb2JEZWZpbml0aW9uTmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJKb2JEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSm9iRGVmaW5pdGlvbk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwxMjh9JGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtbWFuYWdlZC1jb21wdXRlLXJlc291cmNlc1wiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1BTkFHRUQgY29tcHV0ZSBlbnZpcm9ubWVudHMgcmVxdWlyZSBDb21wdXRlUmVzb3VyY2VzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLW1hbmFnZWQtY29tcHV0ZS1yZXNvdXJjZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXNcXFwiLFxcblxcdFxcXCJUeXBlIE1BTkFHRUQgcmVxdWlyZXMgQ29tcHV0ZVJlc291cmNlcyAoXFxcXFxcXCJjb21wdXRlUmVzb3VyY2VzIG11c3QgYmUgcHJvdmlkZWQgZm9yIGEgTUFOQUdFRCBjb21wdXRlIGVudmlyb25tZW50XFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiQWRkIGEgQ29tcHV0ZVJlc291cmNlcyBibG9jaywgb3IgdXNlIFR5cGUgVU5NQU5BR0VEXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiTUFOQUdFRFxcXCJcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29tcHV0ZVJlc291cmNlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1xdWV1ZS1vcmRlci1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIG1heSBub3QgYmUgZW1wdHlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2NoZW1hIGFjY2VwdHMgYW4gZW1wdHkgbGlzdDsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdC4gVHJ1ZVxcbiMgYWJzZW5jZSBpcyBzY2hlbWEgdGVycml0b3J5LCBzbyBvbmx5IHRoZSBwcmVzZW50LWFuZC1lbXB0eSBzaGFwZVxcbiMgaXMgY2xhaW1lZCAoaW5wdXQucmVzb3VyY2VzIHNlZXMgdGhlIHJhdyBsaXN0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLXF1ZXVlLW9yZGVyLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db21wdXRlRW52aXJvbm1lbnRPcmRlclxcXCIsXFxuXFx0XFxcIkNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIGlzIGVtcHR5IChcXFxcXFxcImNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIGlzIHJlcXVpcmVkLlxcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIkxpc3QgYXQgbGVhc3Qgb25lIGNvbXB1dGUgZW52aXJvbm1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlSm9iUXVldWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYlF1ZXVlXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvcmRlciA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29tcHV0ZUVudmlyb25tZW50T3JkZXJcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KG9yZGVyKVxcblxcdGNvdW50KG9yZGVyKSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtcmV0cnktYXR0ZW1wdHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZXRyeVN0cmF0ZWd5LkF0dGVtcHRzIG1heSBub3QgZXhjZWVkIDEwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1yZXRyeS1hdHRlbXB0c1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmV0cnlTdHJhdGVneS5BdHRlbXB0c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiUmV0cnlTdHJhdGVneS5BdHRlbXB0cyAldiBpcyBhYm92ZSB0aGUgbWF4aW11bSAoXFxcXFxcXCJSZXRyeUF0dGVtcHRzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMC5cXFxcXFxcIilcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCAxMCBhdHRlbXB0c1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZWdpc3RlckpvYkRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmV0cnlTdHJhdGVneS5BdHRlbXB0c1xcXCIpKVxcblxcdG4gPiAxMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLXRpbWVvdXQtbWluaW11bVwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kcyBtdXN0IGJlIGF0IGxlYXN0IDYwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC10aW1lb3V0LW1pbmltdW1cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGltZW91dCAldiBzZWNvbmRzIGlzIGJlbG93IHRoZSBtaW5pbXVtIChcXFxcXFxcIkF0dGVtcHREdXJhdGlvblNlY29uZHMgaW4gVGltZW91dCBtdXN0IGJlIGF0IGxlYXN0IDYwIHNlY29uZHMuXFxcXFxcXCIpXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGF0IGxlYXN0IDYwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJKb2JEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kc1xcXCIpKVxcblxcdG4gPCA2MFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLXVubWFuYWdlZC1mYXJnYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVU5NQU5BR0VEIGNvbXB1dGUgZW52aXJvbm1lbnRzIGNhbm5vdCBiZSBGYXJnYXRlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfYmF0Y2h1bWZfY3IobmFtZSkgOj0gY3IgaWYge1xcblxcdGNyIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5UeXBlXFxcIilcXG5cXHRpc19zdHJpbmcoY3IpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtdW5tYW5hZ2VkLWZhcmdhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuVHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVHlwZSBVTk1BTkFHRUQgY2Fubm90IHBhaXIgd2l0aCBDb21wdXRlUmVzb3VyY2VzLlR5cGUgJXMgKFxcXFxcXFwiQ2Fubm90IGNyZWF0ZSBhbiBVTk1BTkFHRUQgRmFyZ2F0ZSBDb21wdXRlIEVudmlyb25tZW50LlxcXFxcXFwiKVxcXCIsIFtjcl0pLFxcblxcdFxcXCJVc2UgTUFOQUdFRCBmb3IgRmFyZ2F0ZSwgb3IgRUMyIHJlc291cmNlcyBmb3IgVU5NQU5BR0VEXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiVU5NQU5BR0VEXFxcIlxcblxcdGNyIDo9IF9wZl9iYXRjaHVtZl9jcihuYW1lKVxcblxcdGNyIGluIHtcXFwiRkFSR0FURVxcXCIsIFxcXCJGQVJHQVRFX1NQT1RcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFnZW50Y29yZS1nYXRld2F5LWp3dC1hdXRob3JpemVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmVkcm9jay1hZ2VudGNvcmVcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2F0ZXdheXMgd2l0aCBBdXRob3JpemVyVHlwZSBDVVNUT01fSldUIHJlcXVpcmUgQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6R2F0ZXdheVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9nd2p3dF9oYXNfY29uZmlnKG5hbWUpIGlmIGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJDb25maWd1cmF0aW9uXFxcIikpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hZ2VudGNvcmUtZ2F0ZXdheS1qd3QtYXV0aG9yaXplclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBdXRob3JpemVyVHlwZSBpcyBDVVNUT01fSldUIGJ1dCBBdXRob3JpemVyQ29uZmlndXJhdGlvbiBpcyBtaXNzaW5nOyB0aGUgQ3JlYXRlR2F0ZXdheSBBUEkgcmVxdWlyZXMgaXQgYW5kIHRoZSBkZXBsb3ltZW50IGZhaWxzIHdpdGggYSBWYWxpZGF0aW9uRXhjZXB0aW9uXFxcIixcXG5cXHRcXFwiQWRkIEF1dGhvcml6ZXJDb25maWd1cmF0aW9uLkN1c3RvbUpXVEF1dGhvcml6ZXIgKGRpc2NvdmVyeVVybCBhbmQgYWxsb3dlZEF1ZGllbmNlL2FsbG93ZWRDbGllbnRzKSwgb3Igc3dpdGNoIEF1dGhvcml6ZXJUeXBlIHRvIEFXU19JQU1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVHYXRld2F5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkdhdGV3YXlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiQ1VTVE9NX0pXVFxcXCJcXG5cXHRub3QgX3BmX2d3and0X2hhc19jb25maWcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hZ2VudGNvcmUtcnVudGltZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmVkcm9jay1hZ2VudGNvcmVcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWdlbnRDb3JlIFJ1bnRpbWUgbmFtZXMgbXVzdCBtYXRjaCBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSAobm8gaHlwaGVucylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENsb3VkRm9ybWF0aW9uIOOCueOCreODvOODnuOBryBBZ2VudFJ1bnRpbWVOYW1lIOOBruODkeOCv+ODvOODs+OCkuaMgeOBn+OBquOBhO+8iOOCqOODs+OCuOODs+e0oOmAmuOCiuOAgVxcbiMgMjAyNi0wOS0wMSDjgasgMS43LjAtYmV0YSDjgafnorroqo3vvInjgYzjgIFDcmVhdGVBZ2VudFJ1bnRpbWUgQVBJIOOBr1xcbiMgW2EtekEtWl1bYS16QS1aMC05X117MCw0N30g44KS5by35Yi244GZ44KL44CC44OP44Kk44OV44Oz5YWl44KK44GuIENESyDpoqjlkb3lkI3jgYzlrprnlarjga7mrbvlm6DjgIJcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFnZW50Y29yZS1ydW50aW1lLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFnZW50UnVudGltZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkFnZW50UnVudGltZU5hbWUgJyVzJyBpcyBpbnZhbGlkOiBpdCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCB1bmRlcnNjb3JlcyAobWF4IDQ4IGNoYXJhY3RlcnMsIGh5cGhlbnMgYXJlIG5vdCBhbGxvd2VkKTsgQ3JlYXRlQWdlbnRSdW50aW1lIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGFuIHVuZGVyc2NvcmUtc2VwYXJhdGVkIG5hbWUgc3VjaCBhcyAnbXlfYWdlbnRfcnVudGltZSdcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVBZ2VudFJ1bnRpbWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFnZW50UnVudGltZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1hY20tY2VydC1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNsb3VkRnJvbnQgdmlld2VyIGNlcnRpZmljYXRlcyBtdXN0IGxpdmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1hY20tY2VydC1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZUFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCByZXF1aXJlcyB0aGUgQUNNIGNlcnRpZmljYXRlIHRvIGJlIGluIHVzLWVhc3QtMSwgYnV0IHRoZSBjZXJ0aWZpY2F0ZSBpcyBpbiAlc1xcXCIsIFtyZWdpb25dKSxcXG5cXHRcXFwiSXNzdWUgb3IgaW1wb3J0IHRoZSBjZXJ0aWZpY2F0ZSBpbiB1cy1lYXN0LTEgKGUuZy4gYSBkZWRpY2F0ZWQgdXMtZWFzdC0xIHN0YWNrKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NuYW1lcy1hbmQtaHR0cHMtcmVxdWlyZW1lbnRzLmh0bWwjaHR0cHMtcmVxdWlyZW1lbnRzLWNlcnRpZmljYXRlLWlzc3VlclxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQWNtQ2VydGlmaWNhdGVBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzJdID09IFxcXCJhY21cXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1hbGlhc2VzLXJlcXVpcmUtY3VzdG9tLWNlcnRpZmljYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGRpc3RyaWJ1dGlvbiB3aXRoIEFsaWFzZXMgY2Fubm90IHVzZSB0aGUgQ2xvdWRGcm9udCBkZWZhdWx0IGNlcnRpZmljYXRlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9hbGlhc2NlcnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLXZpZXdlcmNlcnRpZmljYXRlLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2FsaWFzY2VydF9maXggOj0gXFxcIkF0dGFjaCBhbiBBQ00gY2VydGlmaWNhdGUgKEFjbUNlcnRpZmljYXRlQXJuLCB1cy1lYXN0LTEpIG9yIGFuIElBTSBjZXJ0aWZpY2F0ZSwgdG9nZXRoZXIgd2l0aCBTc2xTdXBwb3J0TWV0aG9kIGFuZCBNaW5pbXVtUHJvdG9jb2xWZXJzaW9uXFxcIlxcblxcbl9wZl9jZl9hbGlhc2NlcnRfY291bnQobmFtZSkgOj0gY291bnQoWzEgfFxcblxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkFsaWFzZXNcXFwiKVxcbl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWFsaWFzZXMtcmVxdWlyZS1jdXN0b20tY2VydGlmaWNhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZVxcXCIsXFxuXFx0XFxcIkEgZGlzdHJpYnV0aW9uIHdpdGggQWxpYXNlcyBjYW5ub3QgdXNlIHRoZSBDbG91ZEZyb250IGRlZmF1bHQgY2VydGlmaWNhdGVcXFwiLFxcblxcdF9wZl9jZl9hbGlhc2NlcnRfZml4LCBfcGZfY2ZfYWxpYXNjZXJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdF9wZl9jZl9hbGlhc2NlcnRfY291bnQobmFtZSkgPiAwXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQ2xvdWRGcm9udERlZmF1bHRDZXJ0aWZpY2F0ZVxcXCIpID09IHRydWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWNhY2hlLXBvbGljeS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZSBwb2xpY3kgbmFtZXMgYWxsb3cgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkNhY2hlUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWNhY2hlLXBvbGljeS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DYWNoZVBvbGljeUNvbmZpZy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDYWNoZVBvbGljeUNvbmZpZy5OYW1lICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IGFscGhhbnVtZXJpY3MsIGRhc2ggYW5kIHVuZGVyc2NvcmVcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ2FjaGVQb2xpY3kuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6Q2FjaGVQb2xpY3lcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DYWNoZVBvbGljeUNvbmZpZy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dKyRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtY2FjaGVkLW1ldGhvZHMtc3Vic2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZWRNZXRob2RzIG11c3QgYmUgYSBzdWJzZXQgb2YgQWxsb3dlZE1ldGhvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX21ldGhvZHNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWNhY2hlYmVoYXZpb3IuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfbWV0aG9kc19iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKSwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbiMgQ2xvdWRGcm9udCBkZWZhdWx0cyBBbGxvd2VkTWV0aG9kcyB0byBHRVQvSEVBRCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBvbWl0dGVkLFxcbiMgc28gYW4gb21pdHRlZCBBbGxvd2VkTWV0aG9kcyBzdGlsbCBjb25zdHJhaW5zIHdoYXQgbWF5IGJlIGNhY2hlZC5cXG5fcGZfY2ZfbWV0aG9kc19hbGxvd2VkKGIpIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkFsbG93ZWRNZXRob2RzXFxcIiwgW1xcXCJHRVRcXFwiLCBcXFwiSEVBRFxcXCJdKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1jYWNoZWQtbWV0aG9kcy1zdWJzZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNhY2hlZE1ldGhvZHNcXFwiLCBbYi5wYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiQ2FjaGVkTWV0aG9kcyBjb250YWlucyAlcywgd2hpY2ggaXMgbm90IGluIEFsbG93ZWRNZXRob2RzICV2XFxcIiwgW21ldGhvZCwgYWxsb3dlZF0pLFxcblxcdFxcXCJFdmVyeSBtZXRob2QgaW4gQ2FjaGVkTWV0aG9kcyBtdXN0IGFsc28gYXBwZWFyIGluIEFsbG93ZWRNZXRob2RzXFxcIixcXG5cXHRfcGZfY2ZfbWV0aG9kc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX21ldGhvZHNfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0Y2FjaGVkIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkNhY2hlZE1ldGhvZHNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGNhY2hlZClcXG5cXHRhbGxvd2VkIDo9IF9wZl9jZl9tZXRob2RzX2FsbG93ZWQoYilcXG5cXHRpc19hcnJheShhbGxvd2VkKVxcblxcdHNvbWUgbWV0aG9kIGluIGNhY2hlZFxcblxcdG5vdCBtZXRob2QgaW4gYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgZGlzdHJpYnV0aW9uIG11c3QgYmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9lZGdlcmVnaW9uX2ZpeCA6PSBcXFwiQ3JlYXRlIHRoZSBMYW1iZGFARWRnZSBmdW5jdGlvbiBpbiB1cy1lYXN0LTEgKGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiBkb2VzIHRoaXMgZm9yIHlvdSkgYW5kIGFzc29jaWF0ZSB0aGF0IHZlcnNpb24ncyBBUk5cXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvbGFtYmRhLWF0LWVkZ2UtZnVuY3Rpb24tcmVzdHJpY3Rpb25zLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIn0gfFxcblxcdFxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucy4lZC5MYW1iZGFGdW5jdGlvbkFSTlxcXCIsIFtiLnBhdGgsIGEuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgbXVzdCBsaXZlIGluIHVzLWVhc3QtMSwgYnV0IHRoaXMgZnVuY3Rpb24gaXMgaW4gJXNcXFwiLCBbcmVnaW9uXSksXFxuXFx0X3BmX2NmX2VkZ2VyZWdpb25fZml4LCBfcGZfY2ZfZWRnZXJlZ2lvbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDdcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBhc3NvY2lhdGlvbnMgbXVzdCByZWZlcmVuY2UgYSB2ZXJzaW9uIEFSTiwgbm90IGFuIGFsaWFzIG9yICRMQVRFU1RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfZml4IDo9IFxcXCJBc3NvY2lhdGUgYSB2ZXJzaW9uIEFSTiAoaW4gdGhlIENESywgZm4uY3VycmVudFZlcnNpb24uZWRnZUFybikgaW5zdGVhZCBvZiB0aGUgdW5xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBhbiBhbGlhcywgb3IgJExBVEVTVFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXZlcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tbGFtYmRhZnVuY3Rpb25hc3NvY2lhdGlvbi5odG1sXFxcIlxcblxcbl9wZl9jZl9lZGdldmVyX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCJ9IHxcXG5cXHRcXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxuIyBMYW1iZGEgQVJOcyBzcGxpdCBpbnRvIDcgc2VnbWVudHMgd2hlbiB1bnF1YWxpZmllZFxcbiMgKGFybjpwYXJ0aXRpb246bGFtYmRhOnJlZ2lvbjphY2NvdW50OmZ1bmN0aW9uOm5hbWUpIGFuZCA4IHdoZW4gYSB2ZXJzaW9uIG9yXFxuIyBhbGlhcyBxdWFsaWZpZXIgaXMgYXBwZW5kZWQuIE9ubHkgYW4gYWxsLWRpZ2l0IHF1YWxpZmllciBpcyBhIHZlcnNpb24uXFxuX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKSA6PSBbe1xcXCJwYXRoXFxcIjogcGF0aCwgXFxcImFyblxcXCI6IGFybiwgXFxcInBhcnRzXFxcIjogcGFydHN9IHxcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2V2ZXJfYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHBhcnRzWzVdID09IFxcXCJmdW5jdGlvblxcXCJcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zLiVkLkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgW2IucGF0aCwgYS5pbmRleF0pXFxuXVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRcXFwiTGFtYmRhQEVkZ2UgcmVxdWlyZXMgYSB2ZXJzaW9uLXF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGJ1dCB0aGlzIEFSTiBoYXMgbm8gcXVhbGlmaWVyXFxcIixcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA3XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSByZXF1aXJlcyBhIHZlcnNpb24tcXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYnV0ICclcycgaXMgYW4gYWxpYXMgb3IgJExBVEVTVFxcXCIsIFtxdWFsaWZpZXJdKSxcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA4XFxuXFx0cXVhbGlmaWVyIDo9IGl0LnBhcnRzWzddXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOV0rJFxcXCIsIHF1YWxpZmllcilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LW9yaWdpbi1ncm91cC1tZW1iZXItb3JpZ2luXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPcmlnaW4gZ3JvdXAgbWVtYmVycyBtdXN0IHJlZmVyZW5jZSBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gdGhlIGRpc3RyaWJ1dGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2Zfb2dtZW1iZXJfaWRzKG5hbWUpIDo9IHtpZCB8XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbnNcXFwiKVxcblxcdGlkIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJJZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGlkKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtb3JpZ2luLWdyb3VwLW1lbWJlci1vcmlnaW5cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbkdyb3Vwcy5JdGVtcy4lZC5NZW1iZXJzXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJPcmlnaW4gZ3JvdXAgbWVtYmVyICclcycgZG9lcyBub3QgbWF0Y2ggYW55IG9yaWdpbiBJZCBpbiB0aGUgZGlzdHJpYnV0aW9uXFxcIiwgW29pZF0pLFxcblxcdFxcXCJQb2ludCBldmVyeSBvcmlnaW4gZ3JvdXAgbWVtYmVyIGF0IHRoZSBJZCBvZiBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gT3JpZ2luc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tb3JpZ2luZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5PcmlnaW5Hcm91cHMuSXRlbXNcXFwiKVxcblxcdG1lbWJlcnMgOj0gb2JqZWN0LmdldChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJNZW1iZXJzXFxcIiwge30pLCBcXFwiSXRlbXNcXFwiLCBbXSlcXG5cXHRzb21lIG0gaW4gbWVtYmVyc1xcblxcdG9pZCA6PSBvYmplY3QuZ2V0KG0sIFxcXCJPcmlnaW5JZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKG9pZClcXG5cXHRub3Qgb2lkIGluIF9wZl9jZl9vZ21lbWJlcl9pZHMobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2FjaGUgYmVoYXZpb3IgVFRMcyBtdXN0IHNhdGlzZnkgTWluVFRMIDw9IERlZmF1bHRUVEwgPD0gTWF4VFRMXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl90dGxfZml4IDo9IFxcXCJPcmRlciB0aGUgVFRMcyBhcyBNaW5UVEwgPD0gRGVmYXVsdFRUTCA8PSBNYXhUVExcXFwiXFxuXFxuX3BmX2NmX3R0bF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIsIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJNaW5UVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNYXhUVEwgKCV2KVxcXCIsIFttbiwgbXhdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRteCA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTWF4VFRMXFxcIiwgbnVsbCkpXFxuXFx0bW4gPiBteFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIk1pblRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIERlZmF1bHRUVEwgKCV2KVxcXCIsIFttbiwgZGZdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG1uID4gZGZcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJEZWZhdWx0VFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTWF4VFRMICgldilcXFwiLCBbZGYsIG14XSksXFxuXFx0X3BmX2NmX3R0bF9maXgsIF9wZl9jZl90dGxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBiIGluIF9wZl9jZl9iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG14IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNYXhUVExcXFwiLCBudWxsKSlcXG5cXHRkZiA+IG14XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgV0FGdjIgd2ViIEFDTCBhdHRhY2hlZCB0byBDbG91ZEZyb250IG11c3QgYmUgZ2xvYmFsbHkgc2NvcGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBXQUZ2MiBBUk4gY2FycmllcyBpdHMgc2NvcGUgaW4gdGhlIHJlc291cmNlIHNlZ21lbnQ6XFxuIyAgIGFybjphd3M6d2FmdjI6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpnbG9iYWwvd2ViYWNsL25hbWUvaWQgICAgKENMT1VERlJPTlQpXFxuIyAgIGFybjphd3M6d2FmdjI6YXAtbm9ydGhlYXN0LTE6MTIzNDU2Nzg5MDEyOnJlZ2lvbmFsL3dlYmFjbC8uLi4gKFJFR0lPTkFMKVxcbiMgQ2xvdWRGcm9udCBhY2NlcHRzIG9ubHkgdGhlIGdsb2JhbCBmb3JtLiBDaGVja2luZyB0aGUgcmVnaW9uIGFsb25lIHdvdWxkIG1pc3NcXG4jIGEgUkVHSU9OQUwgd2ViIEFDTCB0aGF0IGhhcHBlbnMgdG8gaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gdXMtZWFzdC0xLCB3aGljaCBpc1xcbiMgdGhlIGVhc3kgbWlzdGFrZSB0byBtYWtlLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5XZWJBQ0xJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCBvbmx5IGFjY2VwdHMgYSBnbG9iYWxseSBzY29wZWQgd2ViIEFDTCwgYnV0IHRoaXMgQVJOIGlzIHNjb3BlZCAnJXMnXFxcIiwgW3Njb3BlXSksXFxuXFx0XFxcIkNyZWF0ZSB0aGUgd2ViIEFDTCB3aXRoIHNjb3BlIENMT1VERlJPTlQgaW4gdXMtZWFzdC0xICh3YWZ2Mi5DZm5XZWJBQ0wgd2l0aCBzY29wZTogJ0NMT1VERlJPTlQnKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utd2FmdjItd2ViYWNsLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLldlYkFDTElkXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwid2FmdjJcXFwiXFxuXFx0c2VnbWVudHMgOj0gc3BsaXQocGFydHNbNV0sIFxcXCIvXFxcIilcXG5cXHRzY29wZSA6PSBzZWdtZW50c1swXVxcblxcdHNjb3BlICE9IFxcXCJnbG9iYWxcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1hbGFybS1wZXJpb2RcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBlcmlvZCBtdXN0IGJlIDEwLCAyMCwgMzAgb3IgYSBtdWx0aXBsZSBvZiA2MFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyBQZXJpb2QgYXMgYSBiYXJlIGludGVnZXI7IHRoZSB2YWxpZCB2YWx1ZXMgYXJlXFxuIyBvbmx5IGluIHRoZSBzZXJ2aWNlIChcXFwiUGVyaW9kIG11c3QgYmUgMTAsIDIwLCAzMCBvciBhIG11bHRpcGxlIG9mIDYwXFxcIikuXFxuIyBUaGUgc2FtZSBjb25zdHJhaW50IGFwcGxpZXMgaW5zaWRlIE1ldHJpY1N0YXQgKGJlbmNoIHcxMSwgMjAyNi0wOS0wMykuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGVyaW9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQZXJpb2QgJXYgaXMgaW52YWxpZDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlBlcmlvZCBtdXN0IGJlIDEwLCAyMCwgMzAgb3IgYSBtdWx0aXBsZSBvZiA2MFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiVXNlIDEwLCAyMCwgMzAsIG9yIGEgbXVsdGlwbGUgb2YgNjAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdHAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGVyaW9kXFxcIikpXFxuXFx0bm90IHAgaW4gezEwLCAyMCwgMzB9XFxuXFx0cCAlIDYwICE9IDBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNzIChNZXRyaWNTdGF0LlBlcmlvZCBvZiBxdWVyeSAlZClcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcIk1ldHJpY1N0YXQgUGVyaW9kICV2IGlzIGludmFsaWQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJQZXJpb2QgbXVzdCBiZSAxMCwgMjAsIDMwIG9yIGEgbXVsdGlwbGUgb2YgNjBcXFxcXFxcIlxcXCIsIFtwXSksXFxuXFx0XFxcIlVzZSAxMCwgMjAsIDMwLCBvciBhIG11bHRpcGxlIG9mIDYwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jbG91ZHdhdGNoLWFsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKVxcblxcdGkgOj0gaXRlbS5pbmRleFxcblxcdHEgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChxKVxcblxcdHAgOj0gb2JqZWN0LmdldChxLCBbXFxcIk1ldHJpY1N0YXRcXFwiLCBcXFwiUGVyaW9kXFxcIl0sIG51bGwpXFxuXFx0aXNfbnVtYmVyKHApXFxuXFx0bm90IHAgaW4gezEwLCAyMCwgMzB9XFxuXFx0cCAlIDYwICE9IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXRocmVzaG9sZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RhbmRhcmQgb3BlcmF0b3JzIG5lZWQgVGhyZXNob2xkLCByYW5nZSBvcGVyYXRvcnMgbmVlZCBUaHJlc2hvbGRNZXRyaWNJZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jd2F0aF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCJcXG5cXG4jIFRoZSB0d28gcmFuZ2Ugb3BlcmF0b3JzIGFuY2hvciB0byBhbiBhbm9tYWx5LWRldGVjdGlvbiBiYW5kIHZpYVxcbiMgVGhyZXNob2xkTWV0cmljSWQ7IGV2ZXJ5IG90aGVyIG9wZXJhdG9yIG5lZWRzIGEgc3RhdGljIFRocmVzaG9sZC4gQWJzZW5jZVxcbiMgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2N3YXRoX3JhbmdlX29wcyA6PSB7XFxcIkxlc3NUaGFuTG93ZXJPckdyZWF0ZXJUaGFuVXBwZXJUaHJlc2hvbGRcXFwiLCBcXFwiTGVzc1RoYW5Mb3dlclRocmVzaG9sZFxcXCIsIFxcXCJHcmVhdGVyVGhhblVwcGVyVGhyZXNob2xkXFxcIn1cXG5cXG5fcGZfY3dhdGhfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tdGhyZXNob2xkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UaHJlc2hvbGRcXFwiLFxcblxcdHNwcmludGYoXFxcIkNvbXBhcmlzb25PcGVyYXRvciAnJXMnIG5lZWRzIGEgc3RhdGljIFRocmVzaG9sZCBidXQgbm9uZSBpcyBzZXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJQdXRNZXRyaWNBbGFybSByZXF1ZXN0IHNob3VsZCBoYXZlIHZhbGlkIFRocmVzaG9sZCBwYXJhbWV0ZXJcXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJTZXQgVGhyZXNob2xkLCBvciBzd2l0Y2ggdG8gYW4gYW5vbWFseS1kZXRlY3Rpb24gb3BlcmF0b3Igd2l0aCBUaHJlc2hvbGRNZXRyaWNJZFxcXCIsXFxuXFx0X3BmX2N3YXRoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0b3AgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wYXJpc29uT3BlcmF0b3JcXFwiKVxcblxcdGlzX3N0cmluZyhvcClcXG5cXHRub3Qgb3AgaW4gX3BmX2N3YXRoX3JhbmdlX29wc1xcblxcdF9wZl9jd2F0aF9hYnNlbnQobmFtZSwgXFxcIlRocmVzaG9sZFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1hbGFybS10aHJlc2hvbGRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRocmVzaG9sZE1ldHJpY0lkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDb21wYXJpc29uT3BlcmF0b3IgJyVzJyBpcyBhIHJhbmdlIG9wZXJhdG9yIGJ1dCBUaHJlc2hvbGRNZXRyaWNJZCBpcyBub3Qgc2V0OyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiQ29tcGFyaXNvbk9wZXJhdG9ycyBmb3IgcmFuZ2VzIHJlcXVpcmUgVGhyZXNob2xkTWV0cmljSWQgdG8gYmUgc2V0XFxcXFxcXCJcXFwiLCBbb3BdKSxcXG5cXHRcXFwiUG9pbnQgVGhyZXNob2xkTWV0cmljSWQgYXQgdGhlIEFOT01BTFlfREVURUNUSU9OX0JBTkQgcXVlcnkgaWQsIG9yIHVzZSBhIHN0YXRpYy10aHJlc2hvbGQgb3BlcmF0b3JcXFwiLFxcblxcdF9wZl9jd2F0aF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdG9wIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcGFyaXNvbk9wZXJhdG9yXFxcIilcXG5cXHRvcCBpbiBfcGZfY3dhdGhfcmFuZ2Vfb3BzXFxuXFx0X3BmX2N3YXRoX2Fic2VudChuYW1lLCBcXFwiVGhyZXNob2xkTWV0cmljSWRcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtY29tcG9zaXRlLWFsYXJtLXJ1bGUtc3ludGF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBBbGFybVJ1bGUgbXVzdCBzdGFydCB3aXRoIGEgdmFsaWQgZXhwcmVzc2lvbiB0b2tlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpDb21wb3NpdGVBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgbmFtZXMgdGhlIG9ubHkgdG9rZW5zIGEgcnVsZSBleHByZXNzaW9uIG1heSBzdGFydCB3aXRoOyB0aGlzXFxuIyBjaGVja3MganVzdCB0aGF0IGZpcnN0IHRva2VuIOKAlCBhIGZ1bGwgZ3JhbW1hciBpcyBvdXQgb2Ygc2NvcGUuIEZ1bmN0aW9uXFxuIyB0b2tlbnMgdGFrZSBhbiBhcmd1bWVudCBsaXN0LCBrZXl3b3JkcyBzdGFuZCBhbG9uZS5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiKFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIk5PVCBcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJOT1QoXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiQVRfTEVBU1RcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiB0ID09IFxcXCJUUlVFXFxcIlxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiB0ID09IFxcXCJGQUxTRVxcXCJcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiQUxBUk0oXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiT0soXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiSU5TVUZGSUNJRU5UX0RBVEEoXFxcIilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtY29tcG9zaXRlLWFsYXJtLXJ1bGUtc3ludGF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGFybVJ1bGVcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsYXJtUnVsZSAnJXMnIGRvZXMgbm90IHN0YXJ0IHdpdGggYSB2YWxpZCB0b2tlbjsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiRXJyb3IgaW4gQWxhcm1SdWxlIFtVbnN1cHBvcnRlZCB0b2tlbiAuLi4gbXVzdCBiZTogJygnLCAnTk9UJywgQVRfTEVBU1QsIFRSVUUgb3IgRkFMU0UsIEFMQVJNLCBPSywgb3IgSU5TVUZGSUNJRU5UX0RBVEFdXFxcXFxcXCJcXFwiLCBbZXhwcl0pLFxcblxcdFxcXCJTdGFydCB0aGUgcnVsZSB3aXRoIEFMQVJNKC4uLiksIE9LKC4uLiksIElOU1VGRklDSUVOVF9EQVRBKC4uLiksIE5PVCwgQVRfTEVBU1QsIFRSVUUsIEZBTFNFLCBvciBhIHBhcmVudGhlc2l6ZWQgZ3JvdXBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9DcmVhdGVfQ29tcG9zaXRlX0FsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXFxcIilcXG5cXHRleHByIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxhcm1SdWxlXFxcIilcXG5cXHRpc19zdHJpbmcoZXhwcilcXG5cXHR0IDo9IHRyaW1fc3BhY2UoZXhwcilcXG5cXHR0ICE9IFxcXCJcXFwiXFxuXFx0bm90IF9wZl9jd2Nhc192YWxpZF9zdGFydCh0KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLWJvZHktanNvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGFzaGJvYXJkQm9keSBtdXN0IGJlIHZhbGlkIEpTT05cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC1ib2R5LWpzb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiLFxcblxcdFxcXCJEYXNoYm9hcmRCb2R5IGRvZXMgbm90IHBhcnNlIGFzIEpTT047IFB1dERhc2hib2FyZCBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGZpZWxkIERhc2hib2FyZEJvZHkgbXVzdCBiZSBhIHZhbGlkIEpTT04gb2JqZWN0XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJGaXggdGhlIEpTT04gc3ludGF4IG9mIHRoZSBkYXNoYm9hcmQgYm9keVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQ2xvdWRXYXRjaC1EYXNoYm9hcmQtQm9keS1TdHJ1Y3R1cmUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0bm90IGpzb24uaXNfdmFsaWQoYm9keSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmQgbmFtZXMgYWxsb3cgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXh0cmEgcGFpbmZ1bCBhdCBkZXBsb3kgdGltZTogdGhlIGludmFsaWQgbmFtZSBhbHNvIGJyZWFrcyB0aGUgcm9sbGJhY2tcXG4jIERFTEVURSwgbGVhdmluZyB0aGUgc3RhY2sgaW4gUk9MTEJBQ0tfRkFJTEVEIChiZW5jaGVkKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkRhc2hib2FyZE5hbWUgJyVzJyBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM7IFB1dERhc2hib2FyZCBhbGxvd3Mgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoICgtKSBhbmQgdW5kZXJzY29yZSAoXyksIGFuZCB0aGUgZmFpbGVkIHN0YWNrIGNhbm5vdCBldmVuIHJvbGwgYmFjayBjbGVhbmx5XFxcIiwgW2RuXSksXFxuXFx0XFxcIlVzZSBvbmx5IGxldHRlcnMsIGRpZ2l0cywgZGFzaCBhbmQgdW5kZXJzY29yZSBpbiB0aGUgZGFzaGJvYXJkIG5hbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdXREYXNoYm9hcmQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRkbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhkbilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05Xy1dKyRgLCBkbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC13aWRnZXQtZmllbGRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFdmVyeSBkYXNoYm9hcmQgd2lkZ2V0IHJlcXVpcmVzIHR5cGUgYW5kIHByb3BlcnRpZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IGtleSBwcmVzZW5jZSBpcyBjaGVja2VkOiB0aGUgc2VydmljZSBhY2NlcHRzIGFyYml0cmFyeSB0eXBlIHZhbHVlc1xcbiMgKGJlbmNoIGR3MDQsIHR5cGUgXFxcIm1ldHJpY2NcXFwiIGRlcGxveWVkIGNsZWFuKSwgc28gbm8gZW51bSB2YWxpZGF0aW9uLlxcbl9wZl9jd2R3Zl93aWRnZXRzKG5hbWUpIDo9IHdzIGlmIHtcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0anNvbi5pc192YWxpZChib2R5KVxcblxcdG9iaiA6PSBqc29uLnVubWFyc2hhbChib2R5KVxcblxcdHdzIDo9IG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHdzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1maWVsZHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keSAod2lkZ2V0c1slZF0pXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJEYXNoYm9hcmQgd2lkZ2V0ICVkIGlzIG1pc3NpbmcgJyVzJzsgUHV0RGFzaGJvYXJkIGZhaWxzIHdpdGggXFxcXFxcXCJTaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnJXMnXFxcXFxcXCJcXFwiLCBbaSwga2V5LCBrZXldKSxcXG5cXHRcXFwiR2l2ZSBldmVyeSB3aWRnZXQgYSB0eXBlIGFuZCBhIHByb3BlcnRpZXMgb2JqZWN0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9DbG91ZFdhdGNoLURhc2hib2FyZC1Cb2R5LVN0cnVjdHVyZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcXFwiKVxcblxcdHNvbWUgaSwgdyBpbiBfcGZfY3dkd2Zfd2lkZ2V0cyhuYW1lKVxcblxcdGlzX29iamVjdCh3KVxcblxcdHNvbWUga2V5IGluIHtcXFwidHlwZVxcXCIsIFxcXCJwcm9wZXJ0aWVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KHcsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1wb3NpdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGFzaGJvYXJkIHdpZGdldCB4IHRvcHMgb3V0IGF0IDIzIGFuZCB3aWR0aCBhdCAyNFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIHR3byBiZW5jaGVkIG1heGltYSBhcmUgY2xhaW1lZCAoeCA8PSAyMywgd2lkdGggPD0gMjQpLlxcbl9wZl9jd2R3cF93aWRnZXRzKG5hbWUpIDo9IHdzIGlmIHtcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0anNvbi5pc192YWxpZChib2R5KVxcblxcdG9iaiA6PSBqc29uLnVubWFyc2hhbChib2R5KVxcblxcdHdzIDo9IG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHdzKVxcbn1cXG5cXG5fcGZfY3dkd3BfbWF4IDo9IHtcXFwieFxcXCI6IDIzLCBcXFwid2lkdGhcXFwiOiAyNH1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1wb3NpdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5ICh3aWRnZXRzWyVkXS4lcylcXFwiLCBbaSwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwiRGFzaGJvYXJkIHdpZGdldCAlZCBoYXMgJXM9JXYsIGFib3ZlIHRoZSBtYXhpbXVtICV2OyBQdXREYXNoYm9hcmQgZmFpbHMgd2l0aCBcXFxcXFxcIlNob3VsZCBiZSA8PSAldlxcXFxcXFwiXFxcIiwgW2ksIGtleSwgdiwgbSwgbV0pLFxcblxcdFxcXCJLZWVwIHggd2l0aGluIDAtMjMgYW5kIHdpZHRoIHdpdGhpbiAxLTI0ICgyNC1jb2x1bW4gZ3JpZClcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0Nsb3VkV2F0Y2gtRGFzaGJvYXJkLUJvZHktU3RydWN0dXJlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFxcXCIpXFxuXFx0c29tZSBpLCB3IGluIF9wZl9jd2R3cF93aWRnZXRzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KHcpXFxuXFx0c29tZSBrZXksIG0gaW4gX3BmX2N3ZHdwX21heFxcblxcdHYgOj0gb2JqZWN0LmdldCh3LCBrZXksIDApXFxuXFx0aXNfbnVtYmVyKHYpXFxuXFx0diA+IG1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC13aWRnZXRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmRCb2R5IHJlcXVpcmVzIGEgd2lkZ2V0cyBhcnJheVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiLFxcblxcdFxcXCJEYXNoYm9hcmRCb2R5IGhhcyBubyAnd2lkZ2V0cycga2V5OyBQdXREYXNoYm9hcmQgZmFpbHMgd2l0aCBcXFxcXFxcIlNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICd3aWRnZXRzJ1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgd2lkZ2V0cyBhcnJheSB0byB0aGUgZGFzaGJvYXJkIGJvZHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0Nsb3VkV2F0Y2gtRGFzaGJvYXJkLUJvZHktU3RydWN0dXJlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFxcXCIpXFxuXFx0Ym9keSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiKVxcblxcdGlzX3N0cmluZyhib2R5KVxcblxcdGpzb24uaXNfdmFsaWQoYm9keSlcXG5cXHRvYmogOj0ganNvbi51bm1hcnNoYWwoYm9keSlcXG5cXHRpc19vYmplY3Qob2JqKVxcblxcdG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhdGFwb2ludHMtZXZhbHVhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGF0YXBvaW50c1RvQWxhcm0gbXVzdCBub3QgZXhjZWVkIEV2YWx1YXRpb25QZXJpb2RzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWRhdGFwb2ludHMtZXZhbHVhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGF0YXBvaW50c1RvQWxhcm1cXFwiLFxcblxcdHNwcmludGYoXFxcIkRhdGFwb2ludHNUb0FsYXJtICgldikgZXhjZWVkcyBFdmFsdWF0aW9uUGVyaW9kcyAoJXYpOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiRGF0YXBvaW50c1RvQWxhcm0gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRXZhbHVhdGlvblBlcmlvZHNcXFxcXFxcIlxcXCIsIFtkLCBldl0pLFxcblxcdFxcXCJMb3dlciBEYXRhcG9pbnRzVG9BbGFybSB0byBhdCBtb3N0IEV2YWx1YXRpb25QZXJpb2RzLCBvciByYWlzZSBFdmFsdWF0aW9uUGVyaW9kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdGQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGF0YXBvaW50c1RvQWxhcm1cXFwiKSlcXG5cXHRldiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmFsdWF0aW9uUGVyaW9kc1xcXCIpKVxcblxcdGQgPiBldlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZXh0ZW5kZWQtc3RhdGlzdGljXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHBlcmNlbnRpbGUgc3RhdGlzdGljIGNhbm5vdCBleGNlZWQgcDEwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGVyY2VudGlsZSBzdGF0aXN0aWNzIHJ1biBwMC4wIHRvIHAxMDAuIE9ubHkgdGhlIHBOIGZvcm0gaXMgY2hlY2tlZDsgb3RoZXJcXG4jIGV4dGVuZGVkIGZvcm1zICh0bSwgd20sIHRjLCB0cywgLi4uKSBoYXZlIHRoZWlyIG93biBncmFtbWFycyBhbmQgd2VyZSBub3RcXG4jIG1lYXN1cmVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1leHRlbmRlZC1zdGF0aXN0aWNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkU3RhdGlzdGljXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFeHRlbmRlZFN0YXRpc3RpYyAnJXMnIGlzIGJleW9uZCBwMTAwOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIHZhbHVlICVzIGZvciBwYXJhbWV0ZXIgRXh0ZW5kZWRTdGF0aXN0aWMgaXMgbm90IHN1cHBvcnRlZC5cXFxcXFxcIlxcXCIsIFtzLCBzXSksXFxuXFx0XFxcIlVzZSBhIHBlcmNlbnRpbGUgYmV0d2VlbiBwMC4wIGFuZCBwMTAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L21vbml0b3JpbmcvY2xvdWR3YXRjaF9jb25jZXB0cy5odG1sI1BlcmNlbnRpbGVzXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0cyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkU3RhdGlzdGljXFxcIilcXG5cXHRpc19zdHJpbmcocylcXG5cXHRzdGFydHN3aXRoKHMsIFxcXCJwXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihzdWJzdHJpbmcocywgMSwgY291bnQocykgLSAxKSlcXG5cXHRuID4gMTAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtbmFtZXNwYWNlLWFzY2lpXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZXRyaWMgbmFtZXNwYWNlcyBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1uYW1lc3BhY2UtYXNjaWlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVzcGFjZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmFtZXNwYWNlICclcycgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnM7IENsb3VkV2F0Y2ggcmVqZWN0cyB0aGUgYWxhcm0gd2l0aCBcXFxcXFxcIk5hbWVzcGFjZSBtdXN0IG5vdCBjb250YWluIE5vbi1BU0NJSSBjaGFyYWN0ZXJzLlxcXFxcXFwiXFxcIiwgW25zXSksXFxuXFx0XFxcIlVzZSBBU0NJSSBvbmx5IGluIHRoZSBtZXRyaWMgbmFtZXNwYWNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0TWV0cmljQWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdG5zIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZXNwYWNlXFxcIilcXG5cXHRpc19zdHJpbmcobnMpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW1xcXFx4MDAtXFxcXHg3Zl0qJGAsIG5zKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHBlciBxdWVyeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIHF1ZXJ5IGVudHJ5IGlzIGVpdGhlciBhIG1hdGggZXhwcmVzc2lvbiBvciBhIG1ldHJpYyBmZXRjaCwgbmV2ZXIgYm90aC5cXG4jIFRoZSBzcGVjaWZ5LW5laXRoZXIgc2hhcGUgZmFpbHMgdG9vLCBidXQgd2l0aCBhbiB1bnJlbGF0ZWQgZXJyb3IgKFxcXCJQZXJpb2RcXG4jIG11c3Qgbm90IGJlIG51bGxcXFwiLCBiZW5jaCB3MDNiKSDigJQgc28gb25seSB0aGUgYm90aC1zZXQgZGlyZWN0aW9uIGlzIGNsYWltZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1xdWVyeS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTWV0cmljcy4lZFxcXCIsIFtxLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTWV0cmljIHF1ZXJ5ICclcycgc2V0cyBib3RoIEV4cHJlc3Npb24gYW5kIE1ldHJpY1N0YXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgcGFyYW1ldGVycyBNZXRyaWNEYXRhUXVlcnkgRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGFuZCB5b3UgaGF2ZSBzcGVjaWZpZWQgYm90aC5cXFxcXFxcIlxcXCIsIFtxaWRdKSxcXG5cXHRcXFwiS2VlcCB0aGUgRXhwcmVzc2lvbiBhbmQgZHJvcCBNZXRyaWNTdGF0IChmZXRjaCB0aGUgaW5wdXRzIGluIHNlcGFyYXRlIHF1ZXJpZXMpLCBvciB2aWNlIHZlcnNhXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZHdhdGNoLWFsYXJtLW1ldHJpY2RhdGFxdWVyeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0c29tZSBxIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIilcXG5cXHRpc19vYmplY3QocS52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHEudmFsdWUsIFxcXCJFeHByZXNzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIk1ldHJpY1N0YXRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0cWlkIDo9IG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIklkXFxcIiwgXFxcIjxxdWVyeT5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LXJldHVybmRhdGFcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV4YWN0bHkgb25lIG1ldHJpYyBxdWVyeSBtdXN0IHJldHVybiBkYXRhXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBbiBhbGFybSBvbiBhIE1ldHJpY3MgYXJyYXkgbmVlZHMgZXhhY3RseSBvbmUgcXVlcnkgcmV0dXJuaW5nIGRhdGEuXFxuIyBSZXR1cm5EYXRhIGRlZmF1bHRzIHRvIHRydWUgd2hlbiBhYnNlbnQgKGJlbmNoIHcwNGIpLCBhbmQgZXhwbGljaXQgZmFsc2VcXG4jIGV2ZXJ5d2hlcmUgaXMgcmVqZWN0ZWQgdG9vICh3MDRjKS4gQSBxdWVyeSB3aG9zZSBSZXR1cm5EYXRhIGlzIGFuXFxuIyB1bnJlc29sdmFibGUgaW50cmluc2ljIG1ha2VzIHRoZSBjb3VudCB1bmtub3dhYmxlLCBzbyB0aGUgcnVsZSBza2lwcy5cXG5fcGZfY3dtcXJfY291bnRhYmxlKHEpIGlmIG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFxuX3BmX2N3bXFyX2NvdW50YWJsZShxKSBpZiBpc19ib29sZWFuKG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCBudWxsKSlcXG5cXG5fcGZfY3dtcXJfcmV0dXJucyhxKSBpZiBvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgdHJ1ZSkgPT0gdHJ1ZVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtcXVlcnktcmV0dXJuZGF0YVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWV0cmljc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgb2YgdGhlIG1ldHJpYyBxdWVyaWVzIHJldHVybiBkYXRhIChSZXR1cm5EYXRhIGRlZmF1bHRzIHRvIHRydWUpOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiRXhhY3RseSBvbmUgZWxlbWVudCBvZiB0aGUgbWV0cmljcyBsaXN0IHNob3VsZCByZXR1cm4gZGF0YS5cXFxcXFxcIlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBSZXR1cm5EYXRhOiBmYWxzZSBvbiBldmVyeSBxdWVyeSBleGNlcHQgdGhlIG9uZSB0aGUgYWxhcm0gc2hvdWxkIHdhdGNoXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZHdhdGNoLWFsYXJtLW1ldHJpY2RhdGFxdWVyeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0aXRlbXMgOj0gW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0ZXZlcnkgcSBpbiBpdGVtcyB7XFxuXFx0XFx0aXNfb2JqZWN0KHEudmFsdWUpXFxuXFx0XFx0X3BmX2N3bXFyX2NvdW50YWJsZShxLnZhbHVlKVxcblxcdH1cXG5cXHRuIDo9IGNvdW50KFtxIHwgc29tZSBxIGluIGl0ZW1zOyBfcGZfY3dtcXJfcmV0dXJucyhxLnZhbHVlKV0pXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC10aHJlc2hvbGQtbWV0cmljLWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaHJlc2hvbGRNZXRyaWNJZCBtdXN0IG1hdGNoIGEgbWV0cmljIHF1ZXJ5IHRoYXQgcmV0dXJucyBkYXRhXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNYXRjaGluZyBtZWFucyBJZCBlcXVhbGl0eSBBTkQgZWZmZWN0aXZlIFJldHVybkRhdGEgdHJ1ZSAoZGVmYXVsdCB0cnVlLFxcbiMgYmVuY2ggdzA0Yik7IHcxMiBwcm92ZWQgYW4gSWQgbWF0Y2ggd2l0aCBSZXR1cm5EYXRhIGZhbHNlIGRvZXMgbm90IGNvdW50LlxcbiMgT25seSBuID09IDAgZmlyZXMgLSB0aGUgZHVwbGljYXRlLW1hdGNoIHNpZGUgaXMgdW5iZW5jaGVkLiBRdWVyaWVzIHdpdGhcXG4jIHVucmVzb2x2YWJsZSBJZC9SZXR1cm5EYXRhIG1ha2UgdGhlIGNvdW50IHVua25vd2FibGUsIHNvIHRoZSBydWxlIHNraXBzLlxcbl9wZl9jd3RtaV9jb3VudGFibGUocSkgaWYgb2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXG5fcGZfY3d0bWlfY291bnRhYmxlKHEpIGlmIGlzX2Jvb2xlYW4ob2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIG51bGwpKVxcblxcbl9wZl9jd3RtaV9tYXRjaGVzKHEsIHRtaWQpIGlmIHtcXG5cXHRvYmplY3QuZ2V0KHEsIFxcXCJJZFxcXCIsIG51bGwpID09IHRtaWRcXG5cXHRvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgdHJ1ZSkgPT0gdHJ1ZVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtdGhyZXNob2xkLW1ldHJpYy1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGhyZXNob2xkTWV0cmljSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIk5vIG1ldHJpYyBxdWVyeSB3aXRoIElkICclcycgcmV0dXJucyBkYXRhOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiTWV0cmljcyBsaXN0IG11c3QgY29udGFpbiBleGFjdGx5IG9uZSBtZXRyaWMgbWF0Y2hpbmcgdGhlIFRocmVzaG9sZE1ldHJpY0lkIHBhcmFtZXRlclxcXFxcXFwiXFxcIiwgW3RtaWRdKSxcXG5cXHRcXFwiUG9pbnQgVGhyZXNob2xkTWV0cmljSWQgYXQgYSBxdWVyeSB3aG9zZSBSZXR1cm5EYXRhIGlzIHRydWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jbG91ZHdhdGNoLWFsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHR0bWlkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyZXNob2xkTWV0cmljSWRcXFwiKVxcblxcdGlzX3N0cmluZyh0bWlkKVxcblxcdGl0ZW1zIDo9IFtxIHwgc29tZSBxIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IHEgaW4gaXRlbXMge1xcblxcdFxcdGlzX29iamVjdChxLnZhbHVlKVxcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KHEudmFsdWUsIFxcXCJJZFxcXCIsIG51bGwpKVxcblxcdFxcdF9wZl9jd3RtaV9jb3VudGFibGUocS52YWx1ZSlcXG5cXHR9XFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gaXRlbXM7IF9wZl9jd3RtaV9tYXRjaGVzKHEudmFsdWUsIHRtaWQpXSkgPT0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tYWxpYXMtdXNlcm5hbWUtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbGlhc0F0dHJpYnV0ZXMgYW5kIFVzZXJuYW1lQXR0cmlidXRlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBLZXkgcHJlc2VuY2UgaXMgdGhlIHZpb2xhdGlvbiByZWdhcmRsZXNzIG9mIHZhbHVlcywgc28gdGhpcyBjaGVja3MgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgZGlyZWN0bHkgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9jb2dhdWVfc2V0KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tYWxpYXMtdXNlcm5hbWUtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Vc2VybmFtZUF0dHJpYnV0ZXNcXFwiLFxcblxcdFxcXCJCb3RoIEFsaWFzQXR0cmlidXRlcyBhbmQgVXNlcm5hbWVBdHRyaWJ1dGVzIGFyZSBzZXQ7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiT25seSBvbmUgb2YgdGhlIGFsaWFzQXR0cmlidXRlcyBvciB1c2VybmFtZUF0dHJpYnV0ZXMgY2FuIGJlIHNldCBpbiBhIFVzZXIgcG9vbC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIktlZXAgb25lOiBhbGlhc2VzIGZvciBzaWduLWluIGFsdGVybmF0aXZlcywgb3IgdXNlcm5hbWUgYXR0cmlidXRlcyB0byByZXBsYWNlIHVzZXJuYW1lc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2wuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdF9wZl9jb2dhdWVfc2V0KG5hbWUsIFxcXCJBbGlhc0F0dHJpYnV0ZXNcXFwiKVxcblxcdF9wZl9jb2dhdWVfc2V0KG5hbWUsIFxcXCJVc2VybmFtZUF0dHJpYnV0ZXNcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tY2xpZW50LWNyZWRlbnRpYWxzLWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiY2xpZW50X2NyZWRlbnRpYWxzIGNhbm5vdCBjb21iaW5lIHdpdGggY29kZSBvciBpbXBsaWNpdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTWFjaGluZS10by1tYWNoaW5lIGFuZCB1c2VyLWZhY2luZyBncmFudHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBvbiBvbmVcXG4jIGNsaWVudC5cXG5fcGZfY29nY2NlX2Zsb3dzKG5hbWUpIDo9IHtmLnZhbHVlIHwgc29tZSBmIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1xcXCIpfVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxsb3dlZE9BdXRoRmxvd3MgY29tYmluZXMgY2xpZW50X2NyZWRlbnRpYWxzIHdpdGggJyVzJzsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNsaWVudF9jcmVkZW50aWFscyBmbG93IGNhbiBub3QgYmUgc2VsZWN0ZWQgYWxvbmcgd2l0aCBjb2RlIGZsb3cgb3IgaW1wbGljaXQgZmxvdy5cXFxcXFxcIlxcXCIsIFtvdGhlcl0pLFxcblxcdFxcXCJTcGxpdCB0aGUgZmxvd3MgYWNyb3NzIHNlcGFyYXRlIHVzZXIgcG9vbCBjbGllbnRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Zmxvd3MgOj0gX3BmX2NvZ2NjZV9mbG93cyhuYW1lKVxcblxcdFxcXCJjbGllbnRfY3JlZGVudGlhbHNcXFwiIGluIGZsb3dzXFxuXFx0c29tZSBvdGhlciBpbiB7XFxcImNvZGVcXFwiLCBcXFwiaW1wbGljaXRcXFwifVxcblxcdG90aGVyIGluIGZsb3dzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtc2VjcmV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJjbGllbnRfY3JlZGVudGlhbHMgbmVlZHMgYSBjbGllbnQgc2VjcmV0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNYWNoaW5lLXRvLW1hY2hpbmUgYXV0aCBpcyBzZWNyZXQtYmFzZWQuIEdlbmVyYXRlU2VjcmV0IGRlZmF1bHRzIHRvXFxuIyBmYWxzZSwgc28gYm90aCB0aGUgbGl0ZXJhbCBmYWxzZSBhbmQgdGhlIGFic2VudCBrZXkgbGVhdmUgdGhlIGNsaWVudFxcbiMgc2VjcmV0bGVzcy4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWVcXG4jIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ2Njc19ub19zZWNyZXQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJHZW5lcmF0ZVNlY3JldFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2NvZ2Njc19ub19zZWNyZXQobmFtZSkgaWYgY29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5HZW5lcmF0ZVNlY3JldFxcXCIpKSA9PSBmYWxzZVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtc2VjcmV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5HZW5lcmF0ZVNlY3JldFxcXCIsXFxuXFx0XFxcImNsaWVudF9jcmVkZW50aWFscyBmbG93IG9uIGEgY2xpZW50IHdpdGhvdXQgYSBzZWNyZXQ7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJjbGllbnRfY3JlZGVudGlhbHMgZmxvdyBjYW4gbm90IGJlIHNlbGVjdGVkIGlmIGNsaWVudCBkb2VzIG5vdCBoYXZlIGEgY2xpZW50IHNlY3JldC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBHZW5lcmF0ZVNlY3JldDogdHJ1ZSBvbiB0aGlzIGNsaWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHNvbWUgZiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcblxcdGYudmFsdWUgPT0gXFxcImNsaWVudF9jcmVkZW50aWFsc1xcXCJcXG5cXHRfcGZfY29nY2NzX25vX3NlY3JldChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tY2xpZW50LW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlVzZXIgcG9vbCBjbGllbnQgbmFtZXMgYWxsb3cgb25seSB3b3JkIGNoYXJhY3RlcnMsIHNwYWNlcyBhbmQgKz0sLkAtXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWNsaWVudC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DbGllbnROYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbGllbnROYW1lICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IHdvcmQgY2hhcmFjdGVycywgc3BhY2VzIGFuZCArID0gLCAuIEAgLVxcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IHdvcmQgY2hhcmFjdGVycywgc3BhY2VzIGFuZCArID0gLCAuIEAgLVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvLXVzZXItaWRlbnRpdHktcG9vbHMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVXNlclBvb2xDbGllbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DbGllbnROYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05XyBcXFxcdCs9LC5ALV0rJGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1kb21haW4tcmVzZXJ2ZWQtd29yZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRG9tYWluIHByZWZpeGVzIGNhbm5vdCBjb250YWluIHJlc2VydmVkIHdvcmRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSByZWZ1c2VzIHByZWZpeGVzIHdpdGggYSByZXNlcnZlZCB3b3JkIGFzIGEgaHlwaGVuLWRlbGltaXRlZFxcbiMgdG9rZW4sIHdpdGggb25seSBhIGdlbmVyaWMgZXJyb3IuIFBpbm5lZCBieSBjb250cm9sbGVkIHBhaXJzOiAtYXdzLSAvXFxuIyAtYW1hem9uLSAvIC1jb2duaXRvLSBmYWlsIHdoaWxlIC1hd3NvbWUtIGRlcGxveXMgKGJlbmNoIGMwNy1jMDdlKSwgc29cXG4jIGEgdG9rZW4gbWVyZWx5IGNvbnRhaW5pbmcgYSB3b3JkIHN0YXlzIGxlZ2FsLlxcbl9wZl9jb2dkcndfd29yZHMgOj0ge1xcXCJhd3NcXFwiLCBcXFwiYW1hem9uXFxcIiwgXFxcImNvZ25pdG9cXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1kb21haW4tcmVzZXJ2ZWQtd29yZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRG9tYWluXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEb21haW4gcHJlZml4ICclcycgaGFzIHRoZSByZXNlcnZlZCB3b3JkICclcycgYXMgYSBzZWdtZW50OyB0aGUgZG9tYWluIGNyZWF0ZSBmYWlscyB3aXRoIHRoZSBnZW5lcmljIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXFxcXFxcXCJcXFwiLCBbZCwgd10pLFxcblxcdFxcXCJSZW5hbWUgb3IgbWVyZ2UgdGhhdCBzZWdtZW50IChlLmcuIG15YXBwLWF1dGgpOyB3b3JkcyBtZXJlbHkgaW5zaWRlIGEgbG9uZ2VyIHNlZ21lbnQgYXJlIGZpbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY29nbml0by11c2VyLXBvb2xzLWFzc2lnbi1kb21haW4tcHJlZml4Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXFxcIilcXG5cXHRkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRG9tYWluXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRzb21lIHcgaW4gX3BmX2NvZ2Ryd193b3Jkc1xcblxcdHcgaW4gc3BsaXQoZCwgXFxcIi1cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tbWZhLXNtcy1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1GQSB3aXRob3V0IGFueSBmYWN0b3IgY29uZmlndXJhdGlvbiBjYW5ub3QgZGVwbG95XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBXaXRoIE1GQSBvbiBhbmQgbm8gRW5hYmxlZE1mYXMsIENvZ25pdG8gZmFsbHMgYmFjayB0byBTTVMgTUZBLCB3aGljaFxcbiMgbmVlZHMgU21zQ29uZmlndXJhdGlvbi4gQSBwb29sIGRlY2xhcmluZyBFbmFibGVkTWZhcyAoZS5nLiBUT1RQIG9ubHksXFxuIyBiZW5jaCBjMDViKSBpcyB2YWxpZCB3aXRob3V0IFNNUywgc28gaXRzIHByZXNlbmNlIG11dGVzIHRoZSBydWxlLlxcbiMgQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nbXNjX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW1mYS1zbXMtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZmFDb25maWd1cmF0aW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNZmFDb25maWd1cmF0aW9uICclcycgd2l0aCBubyBTbXNDb25maWd1cmF0aW9uIGFuZCBubyBFbmFibGVkTWZhczsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJTTVMgY29uZmlndXJhdGlvbiBhbmQgQXV0byB2ZXJpZmljYXRpb24gZm9yIHBob25lX251bWJlciBhcmUgcmVxdWlyZWQgd2hlbiBNRkEgaXMgcmVxdWlyZWQvb3B0aW9uYWxcXFxcXFxcIlxcXCIsIFttZmFdKSxcXG5cXHRcXFwiQ29uZmlndXJlIFNtc0NvbmZpZ3VyYXRpb24gKFNNUyBNRkEpLCBvciBwaWNrIGZhY3RvcnMgdmlhIEVuYWJsZWRNZmFzIChlLmcuIFNPRlRXQVJFX1RPS0VOX01GQSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRtZmEgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NZmFDb25maWd1cmF0aW9uXFxcIilcXG5cXHRtZmEgaW4ge1xcXCJPTlxcXCIsIFxcXCJPUFRJT05BTFxcXCJ9XFxuXFx0X3BmX2NvZ21zY19hYnNlbnQobmFtZSwgXFxcIlNtc0NvbmZpZ3VyYXRpb25cXFwiKVxcblxcdF9wZl9jb2dtc2NfYWJzZW50KG5hbWUsIFxcXCJFbmFibGVkTWZhc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1vYXV0aC1jYWxsYmFjay1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiY29kZSBhbmQgaW1wbGljaXQgT0F1dGggZmxvd3MgbmVlZCBDYWxsYmFja1VSTHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlZGlyZWN0LWJhc2VkIGZsb3dzIG5lZWQgc29tZXdoZXJlIHRvIHJlZGlyZWN0IHRvLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nb2NyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW9hdXRoLWNhbGxiYWNrLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DYWxsYmFja1VSTHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzIGhhcyAnJXMnIGJ1dCBDYWxsYmFja1VSTHMgaXMgbm90IHNldDsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkNhbGxiYWNrVXJscyBjYW4gbm90IGJlIGVtcHR5IHdoZW4gY29kZSBmbG93IG9yIGltcGxpY2l0IGZsb3cgaXMgc2VsZWN0ZWRcXFxcXFxcIlxcXCIsIFtmLnZhbHVlXSksXFxuXFx0XFxcIkFkZCBhdCBsZWFzdCBvbmUgY2FsbGJhY2sgVVJMXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRzb21lIGYgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIilcXG5cXHRmLnZhbHVlIGluIHtcXFwiY29kZVxcXCIsIFxcXCJpbXBsaWNpdFxcXCJ9XFxuXFx0X3BmX2NvZ29jcl9hYnNlbnQobmFtZSwgXFxcIkNhbGxiYWNrVVJMc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsaW5nIE9BdXRoIHJlcXVpcmVzIGJvdGggQWxsb3dlZE9BdXRoRmxvd3MgYW5kIEFsbG93ZWRPQXV0aFNjb3Blc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQm90aCBkaXJlY3Rpb25zIGRlcGxveS12ZXJpZmllZC4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ29mc19hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2dvZnNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiXFxuXFxuX3BmX2NvZ29mc19tc2cgOj0gXFxcInRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBbGxvd2VkT0F1dGhGbG93cyBhbmQgQWxsb3dlZE9BdXRoU2NvcGVzIGFyZSByZXF1aXJlZCBpZiB1c2VyIHBvb2wgY2xpZW50IGlzIGFsbG93ZWQgdG8gdXNlIE9BdXRoIGZsb3dzLlxcXFxcXFwiXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50IGlzIHRydWUgYnV0IEFsbG93ZWRPQXV0aEZsb3dzIGlzIG5vdCBzZXQ7ICVzXFxcIiwgW19wZl9jb2dvZnNfbXNnXSksXFxuXFx0XFxcIlNldCBBbGxvd2VkT0F1dGhGbG93cywgb3IgZHJvcCBBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIixcXG5cXHRfcGZfY29nb2ZzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRfcGZfY29nb2ZzX2Fic2VudChuYW1lLCBcXFwiQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tb2F1dGgtZmxvd3Mtc2NvcGVzLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhTY29wZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnQgaXMgdHJ1ZSBidXQgQWxsb3dlZE9BdXRoU2NvcGVzIGlzIG5vdCBzZXQ7ICVzXFxcIiwgW19wZl9jb2dvZnNfbXNnXSksXFxuXFx0XFxcIlNldCBBbGxvd2VkT0F1dGhTY29wZXMsIG9yIGRyb3AgQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudFxcXCIsXFxuXFx0X3BmX2NvZ29mc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudFxcXCIpKSA9PSB0cnVlXFxuXFx0X3BmX2NvZ29mc19hYnNlbnQobmFtZSwgXFxcIkFsbG93ZWRPQXV0aFNjb3Blc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1wYXNzd29yZC1taW4tbGVuZ3RoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQYXNzd29yZFBvbGljeSBNaW5pbXVtTGVuZ3RoIHJ1bnMgNiB0byA5OVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyBNaW5pbXVtTGVuZ3RoIGFzIGEgYmFyZSBpbnRlZ2VyOyBib3RoIGJvdW5kc1xcbiMgYXJlIGRlcGxveS12ZXJpZmllZC5cXG5fcGZfY29ncG1sX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jb2duaXRvLXVzZXJwb29sLXBhc3N3b3JkcG9saWN5Lmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXBhc3N3b3JkLW1pbi1sZW5ndGhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLlBhc3N3b3JkUG9saWN5Lk1pbmltdW1MZW5ndGhcXFwiLFxcblxcdHNwcmludGYoXFxcIk1pbmltdW1MZW5ndGggJXYgaXMgdW5kZXIgdGhlIGZsb29yOyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDZcXFxcXFxcIlxcXCIsIFttbF0pLFxcblxcdFxcXCJVc2UgYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aCBiZXR3ZWVuIDYgYW5kIDk5XFxcIixcXG5cXHRfcGZfY29ncG1sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0bWwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIpKVxcblxcdG1sIDwgNlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tcGFzc3dvcmQtbWluLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWluaW11bUxlbmd0aCAldiBpcyBvdmVyIHRoZSBjYXA7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gOTlcXFxcXFxcIlxcXCIsIFttbF0pLFxcblxcdFxcXCJVc2UgYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aCBiZXR3ZWVuIDYgYW5kIDk5XFxcIixcXG5cXHRfcGZfY29ncG1sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0bWwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIpKVxcblxcdG1sID4gOTlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXJlY292ZXJ5LWR1cGxpY2F0ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVjb3ZlcnkgbWVjaGFuaXNtcyBjYW5ub3QgcmVwZWF0IHByaW9yaXRpZXMgb3IgbmFtZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhaXJ3aXNlIGR1cGxpY2F0ZSBjaGVjayBvbiB0aGUgbWVjaGFuaXNtIGxpc3Q7IHRoZSBzZXJ2aWNlIGVycm9yIG5hbWVzXFxuIyBib3RoIGR1cGxpY2F0ZSBwcmlvcml0aWVzIGFuZCBkdXBsaWNhdGUgbWVjaGFuaXNtIG5hbWVzLlxcbl9wZl9jb2dyZHBfZHVwKGEsIGIpIGlmIHtcXG5cXHRwYSA6PSB0b19udW1iZXIob2JqZWN0LmdldChhLCBcXFwiUHJpb3JpdHlcXFwiLCAtMSkpXFxuXFx0cGIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYiwgXFxcIlByaW9yaXR5XFxcIiwgLTIpKVxcblxcdHBhID09IHBiXFxufVxcblxcbl9wZl9jb2dyZHBfZHVwKGEsIGIpIGlmIHtcXG5cXHRuIDo9IG9iamVjdC5nZXQoYSwgXFxcIk5hbWVcXFwiLCBcXFwiX19wZl9hXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRuID09IG9iamVjdC5nZXQoYiwgXFxcIk5hbWVcXFwiLCBcXFwiX19wZl9iXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXJlY292ZXJ5LWR1cGxpY2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtcy4lZFxcXCIsIFtiLmluZGV4XSksXFxuXFx0XFxcIlJlY292ZXJ5IG1lY2hhbmlzbXMgcmVwZWF0IGEgcHJpb3JpdHkgb3IgbmFtZTsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2NvdW50IFJlY292ZXJ5IFNldHRpbmcgY2Fubm90IGhhdmUgZHVwbGljYXRlIHByaW9yaXRpZXMgb3IgcmVjb3ZlcnkgbWVjaGFuaXNtcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkdpdmUgZWFjaCByZWNvdmVyeSBtZWNoYW5pc20gYSBkaXN0aW5jdCBwcmlvcml0eSBhbmQgbmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY29nbml0by11c2VycG9vbC1yZWNvdmVyeW9wdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRpc19vYmplY3QoYS52YWx1ZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRfcGZfY29ncmRwX2R1cChhLnZhbHVlLCBiLnZhbHVlKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tc2NoZW1hLWF0dHItbGVuZ3RoLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTY2hlbWEgYXR0cmlidXRlIE1heExlbmd0aCBjYW5ub3QgdW5kZXJjdXQgTWluTGVuZ3RoXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgY29uc3RyYWludHMgYXJlIHR5cGVkIGFzIHN0cmluZ3MsIHNvIG5vIHNjaGVtYSBsYXllciBjYW4gY29tcGFyZVxcbiMgdGhlbSBudW1lcmljYWxseS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tc2NoZW1hLWF0dHItbGVuZ3RoLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlNjaGVtYS4lZC5TdHJpbmdBdHRyaWJ1dGVDb25zdHJhaW50c1xcXCIsIFthdHQuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBdHRyaWJ1dGUgJyVzJyBoYXMgTWluTGVuZ3RoICV2IG92ZXIgTWF4TGVuZ3RoICV2OyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNhbm5vdCBoYXZlIGEgbWF4IGxlbmd0aCBzaG9ydGVyIHRoYW4gaXQncyBtaW4gbGVuZ3RoXFxcXFxcXCJcXFwiLCBbb2JqZWN0LmdldChhdHQudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjxhdHRyPlxcXCIpLCBtbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5MZW5ndGggbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE1heExlbmd0aFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY29nbml0by11c2VycG9vbC1zY2hlbWFhdHRyaWJ1dGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdHNvbWUgYXR0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlbWFcXFwiKVxcblxcdGlzX29iamVjdChhdHQudmFsdWUpXFxuXFx0c2FjIDo9IG9iamVjdC5nZXQoYXR0LnZhbHVlLCBcXFwiU3RyaW5nQXR0cmlidXRlQ29uc3RyYWludHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc2FjKVxcblxcdG1uX3JhdyA6PSBvYmplY3QuZ2V0KHNhYywgXFxcIk1pbkxlbmd0aFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0bW5fcmF3ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRteF9yYXcgOj0gb2JqZWN0LmdldChzYWMsIFxcXCJNYXhMZW5ndGhcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdG14X3JhdyAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG1uX3JhdylcXG5cXHRteCA6PSB0b19udW1iZXIobXhfcmF3KVxcblxcdG1uID4gbXhcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjY2VzcyBhbmQgaWQgdG9rZW5zIGNhbm5vdCBvdXRsaXZlIHRoZSByZWZyZXNoIHRva2VuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDcm9zcy1wcm9wZXJ0eSBpbmVxdWFsaXR5IGJldHdlZW4gZGlmZmVyZW50bHktdW5pdGVkIGR1cmF0aW9ucyAtIG9ubHlcXG4jIGNvbXBhcmFibGUgYWZ0ZXIgbm9ybWFsaXppbmcgdG8gc2Vjb25kcy4gVW5pdCBkZWZhdWx0cyBhcmUgdGhlXFxuIyBkZXBsb3ktdmVyaWZpZWQgaG91cnMvaG91cnMvZGF5cy5cXG5fcGZfY29ndGVvX3VuaXRfc2VjcyA6PSB7XFxcInNlY29uZHNcXFwiOiAxLCBcXFwibWludXRlc1xcXCI6IDYwLCBcXFwiaG91cnNcXFwiOiAzNjAwLCBcXFwiZGF5c1xcXCI6IDg2NDAwfVxcblxcbl9wZl9jb2d0ZW9fdW5pdChuYW1lLCB1bml0S2V5LCBfKSA6PSB1IGlmIHtcXG5cXHR1IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Ub2tlblZhbGlkaXR5VW5pdHMuJXNcXFwiLCBbdW5pdEtleV0pKVxcblxcdGlzX3N0cmluZyh1KVxcbn1cXG5cXG5fcGZfY29ndGVvX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdCkgOj0gZGVmVW5pdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0dHZ1IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUb2tlblZhbGlkaXR5VW5pdHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QodHZ1KVxcblxcdG9iamVjdC5nZXQodHZ1LCB1bml0S2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2d0ZW9fc2VjcyhuYW1lLCB2YWxLZXksIHVuaXRLZXksIGRlZlVuaXQpIDo9IHMgaWYge1xcblxcdHYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFt2YWxLZXldKSkpXFxuXFx0dSA6PSBfcGZfY29ndGVvX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdClcXG5cXHRzIDo9IHYgKiBfcGZfY29ndGVvX3VuaXRfc2Vjc1t1XVxcbn1cXG5cXG5fcGZfY29ndGVvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by10b2tlbi1leHBpcmF0aW9uLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBY2Nlc3MgdG9rZW4gdmFsaWRpdHkgKCV2IHMpIGV4Y2VlZHMgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eSAoJXYgcyk7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgYW5kIElkIFRva2VuIGV4cGlyYXRpb24gdGltZXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmVmcmVzaCB0b2tlbiBleHBpcmF0aW9uIHRpbWVzLlxcXFxcXFwiXFxcIiwgW2EsIHJdKSxcXG5cXHRcXFwiU2hvcnRlbiB0aGUgYWNjZXNzIHRva2VuIHZhbGlkaXR5IG9yIGxlbmd0aGVuIHRoZSByZWZyZXNoIHRva2VuIHZhbGlkaXR5XFxcIixcXG5cXHRfcGZfY29ndGVvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0YSA6PSBfcGZfY29ndGVvX3NlY3MobmFtZSwgXFxcIkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLCBcXFwiQWNjZXNzVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdHIgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0YSA+IHJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklkVG9rZW5WYWxpZGl0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSWQgdG9rZW4gdmFsaWRpdHkgKCV2IHMpIGV4Y2VlZHMgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eSAoJXYgcyk7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgYW5kIElkIFRva2VuIGV4cGlyYXRpb24gdGltZXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmVmcmVzaCB0b2tlbiBleHBpcmF0aW9uIHRpbWVzLlxcXFxcXFwiXFxcIiwgW2ksIHJdKSxcXG5cXHRcXFwiU2hvcnRlbiB0aGUgaWQgdG9rZW4gdmFsaWRpdHkgb3IgbGVuZ3RoZW4gdGhlIHJlZnJlc2ggdG9rZW4gdmFsaWRpdHlcXFwiLFxcblxcdF9wZl9jb2d0ZW9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRpIDo9IF9wZl9jb2d0ZW9fc2VjcyhuYW1lLCBcXFwiSWRUb2tlblZhbGlkaXR5XFxcIiwgXFxcIklkVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdHIgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0aSA+IHJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXRva2VuLXZhbGlkaXR5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUb2tlbiB2YWxpZGl0eSByYW5nZXMgZGVwZW5kIG9uIHRva2VuIHR5cGUgYW5kIHVuaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgdHlwZXMgdGhlIHZhbGlkaXRpZXMgYXMgYmFyZSBpbnRlZ2VyczsgdGhlIHJlYWwgcmFuZ2VzIGFyZVxcbiMgcGVyIHRva2VuIHR5cGUgQU5EIHVuaXQgKGFjY2Vzcy9pZDogNSBtaW51dGVzLTEgZGF5LCByZWZyZXNoOiA2MFxcbiMgbWludXRlcy0xMCB5ZWFycykuIFVuaXQgZGVmYXVsdHMgKGhvdXJzL2hvdXJzL2RheXMpIGFyZSBkZXBsb3ktdmVyaWZpZWQuXFxuX3BmX2NvZ3R2cl91bml0X3NlY3MgOj0ge1xcXCJzZWNvbmRzXFxcIjogMSwgXFxcIm1pbnV0ZXNcXFwiOiA2MCwgXFxcImhvdXJzXFxcIjogMzYwMCwgXFxcImRheXNcXFwiOiA4NjQwMH1cXG5cXG5fcGZfY29ndHZyX3VuaXQobmFtZSwgdW5pdEtleSwgXykgOj0gdSBpZiB7XFxuXFx0dSA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuVG9rZW5WYWxpZGl0eVVuaXRzLiVzXFxcIiwgW3VuaXRLZXldKSlcXG5cXHRpc19zdHJpbmcodSlcXG59XFxuXFxuX3BmX2NvZ3R2cl91bml0KG5hbWUsIHVuaXRLZXksIGRlZlVuaXQpIDo9IGRlZlVuaXQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHR2dSA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiVG9rZW5WYWxpZGl0eVVuaXRzXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHR2dSlcXG5cXHRvYmplY3QuZ2V0KHR2dSwgdW5pdEtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfY29ndHZyX3NlY3MobmFtZSwgdmFsS2V5LCB1bml0S2V5LCBkZWZVbml0KSA6PSBzIGlmIHtcXG5cXHR2IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbdmFsS2V5XSkpKVxcblxcdHUgOj0gX3BmX2NvZ3R2cl91bml0KG5hbWUsIHVuaXRLZXksIGRlZlVuaXQpXFxuXFx0cyA6PSB2ICogX3BmX2NvZ3R2cl91bml0X3NlY3NbdV1cXG59XFxuXFxuX3BmX2NvZ3R2cl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCJcXG5cXG5fcGZfY29ndHZyX2FpX2JhZChzKSBpZiBzIDwgMzAwXFxuXFxuX3BmX2NvZ3R2cl9haV9iYWQocykgaWYgcyA+IDg2NDAwXFxuXFxuX3BmX2NvZ3R2cl9ydF9iYWQocykgaWYgcyA8IDM2MDBcXG5cXG5fcGZfY29ndHZyX3J0X2JhZChzKSBpZiBzID4gMzE1MzYwMDAwXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLXZhbGlkaXR5LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBY2Nlc3NUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDUgbWludXRlcy0xIGRheTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmFuZ2UgZm9yIHRva2VuIHZhbGlkaXR5LlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiS2VlcCB0aGUgYWNjZXNzIHRva2VuIHZhbGlkaXR5IGJldHdlZW4gNSBtaW51dGVzIGFuZCAxIGRheVxcXCIsXFxuXFx0X3BmX2NvZ3R2cl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHMgOj0gX3BmX2NvZ3R2cl9zZWNzKG5hbWUsIFxcXCJBY2Nlc3NUb2tlblZhbGlkaXR5XFxcIiwgXFxcIkFjY2Vzc1Rva2VuXFxcIiwgXFxcImhvdXJzXFxcIilcXG5cXHRfcGZfY29ndHZyX2FpX2JhZChzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklkVG9rZW5WYWxpZGl0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSWRUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDUgbWludXRlcy0xIGRheTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmFuZ2UgZm9yIHRva2VuIHZhbGlkaXR5LlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiS2VlcCB0aGUgaWQgdG9rZW4gdmFsaWRpdHkgYmV0d2VlbiA1IG1pbnV0ZXMgYW5kIDEgZGF5XFxcIixcXG5cXHRfcGZfY29ndHZyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0cyA6PSBfcGZfY29ndHZyX3NlY3MobmFtZSwgXFxcIklkVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJJZFRva2VuXFxcIiwgXFxcImhvdXJzXFxcIilcXG5cXHRfcGZfY29ndHZyX2FpX2JhZChzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZnJlc2hUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eSB3b3JrcyBvdXQgdG8gJXYgc2Vjb25kcywgb3V0c2lkZSA2MCBtaW51dGVzLTEwIHllYXJzOyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByYW5nZSBmb3IgdG9rZW4gdmFsaWRpdHkuXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJLZWVwIHRoZSByZWZyZXNoIHRva2VuIHZhbGlkaXR5IGJldHdlZW4gNjAgbWludXRlcyBhbmQgMTAgeWVhcnNcXFwiLFxcblxcdF9wZl9jb2d0dnJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRzIDo9IF9wZl9jb2d0dnJfc2VjcyhuYW1lLCBcXFwiUmVmcmVzaFRva2VuVmFsaWRpdHlcXFwiLCBcXFwiUmVmcmVzaFRva2VuXFxcIiwgXFxcImRheXNcXFwiKVxcblxcdF9wZl9jb2d0dnJfcnRfYmFkKHMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by11c2VyLXBvb2wtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVXNlciBwb29sIG5hbWVzIGFsbG93IG9ubHkgd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICs9LC5ALVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by11c2VyLXBvb2wtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVXNlclBvb2xOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJVc2VyUG9vbE5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8tdXNlci1pZGVudGl0eS1wb29scy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVVc2VyUG9vbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlVzZXJQb29sTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW0EtWmEtejAtOV8gXFxcXHQrPSwuQC1dKyRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWF0dHJpYnV0ZS1kZWZpbml0aW9ucy11c2FnZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV2ZXJ5IEF0dHJpYnV0ZURlZmluaXRpb25zIGVudHJ5IG11c3QgYmUgdXNlZCBieSBhIGtleSBzY2hlbWFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEeW5hbW9EQiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaDogZXZlcnkgQXR0cmlidXRlRGVmaW5pdGlvbnMgZW50cnkgbXVzdCBiZVxcbiMgdXNlZCBieSB0aGUgdGFibGUga2V5IHNjaGVtYSBvciBhbiBpbmRleCBrZXkgc2NoZW1hLiBUaGUgZW5naW5lJ3MgRTMwMzlcXG4jIGNoZWNrcyB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9ubHkgKGtleSBhdHRyaWJ1dGUgbm90IGRlZmluZWQpLCBzbyB0aGVcXG4jIGNsYXNzaWMgXFxcInJlbW92ZWQgYSBHU0ksIGxlZnQgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uXFxcIiBtaXN0YWtlIHNhaWxzIHRocm91Z2guXFxuXFxuX3BmX2RkYmFkdV90YWJsZV9rZXlzKG5hbWUpIDo9IHthIHxcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdGEgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfZGRiYWR1X2luZGV4X2tleXMobmFtZSwgcHJvcCkgOj0ge2EgfFxcblxcdHNvbWUgaXggaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGl4LnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuX3BmX2RkYmFkdV91c2VkKG5hbWUpIDo9ICgoX3BmX2RkYmFkdV90YWJsZV9rZXlzKG5hbWUpIHxcXG5cXHRfcGZfZGRiYWR1X2luZGV4X2tleXMobmFtZSwgXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKSkgfFxcblxcdF9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIikpXFxuXFxuIyBBbnkgdW5yZXNvbHZhYmxlIEF0dHJpYnV0ZU5hbWUgaW4gYSBrZXkgc2NoZW1hIG1lYW5zIHRoZSB1c2VkLXNldCBpc1xcbiMgaW5jb21wbGV0ZSwgc28gdGhlIHJ1bGUgbXVzdCBzdGF5IHNpbGVudCByYXRoZXIgdGhhbiBndWVzcy5cXG5fcGZfZGRiYWR1X3VucmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHRub3QgaXNfc3RyaW5nKG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxufVxcblxcbl9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRzb21lIHByb3AgaW4gW1xcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIiwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCJdXFxuXFx0c29tZSBpeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQoaXgudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRub3QgaXNfc3RyaW5nKG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1hdHRyaWJ1dGUtZGVmaW5pdGlvbnMtdXNhZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnMuJWRcXFwiLCBbZC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGlzIGRlZmluZWQgYnV0IHVzZWQgYnkgbm8ga2V5IHNjaGVtYTsgRHluYW1vREIgcmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2ggYW5kIGZhaWxzIHdpdGggXFxcXFxcXCJOdW1iZXIgb2YgYXR0cmlidXRlcyBpbiBLZXlTY2hlbWEgZG9lcyBub3QgZXhhY3RseSBtYXRjaCBudW1iZXIgb2YgYXR0cmlidXRlcyBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXFxcXFxcXCJcXFwiLCBbYXR0cl0pLFxcblxcdFxcXCJSZW1vdmUgdGhlIHVudXNlZCBkZWZpbml0aW9uIChub24ta2V5IGF0dHJpYnV0ZXMgc3VjaCBhcyBhIFRUTCBhdHRyaWJ1dGUgbXVzdCBOT1QgYmUgZGVjbGFyZWQpLCBvciBhZGQgdGhlIGluZGV4IHRoYXQgdXNlcyBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0bm90IF9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpXFxuXFx0c29tZSBkIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0YXR0ciA6PSBvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXR0cilcXG5cXHRub3QgYXR0ciBpbiBfcGZfZGRiYWR1X3VzZWQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQcm92aXNpb25lZFRocm91Z2hwdXQgbXVzdCBtYXRjaCBCaWxsaW5nTW9kZSAocmVxdWlyZWQgZm9yIFBST1ZJU0lPTkVELCBmb3JiaWRkZW4gZm9yIFBBWV9QRVJfUkVRVUVTVClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmJ0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLlJlYWRXcml0ZUNhcGFjaXR5TW9kZS5odG1sXFxcIlxcblxcbl9wZl9kZGJidF9oYXNfcHQobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIikpXFxuXFxuX3BmX2RkYmJ0X2JpbGxpbmdfcHJlc2VudChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIilcXG5cXG4jIEJpbGxpbmdNb2RlIOOBjOODquODhuODqeODqyBcXFwiUFJPVklTSU9ORURcXFwi44CB44G+44Gf44Gv5pyq5oyH5a6a77yI44OH44OV44Kp44Or44OIIFBST1ZJU0lPTkVE77yJ44CCXFxuIyDjg4jjg7zjgq/jg7PlgKTvvIhSZWYg562J77yJ44Gv5Yik5a6a44Gr5L2/44KP44Gq44GE77yI6Kqk5qSc55+l6Ziy5q2i77yJ44CCXFxuX3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUFJPVklTSU9ORURcXFwiXFxuXFxuX3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIG5vdCBfcGZfZGRiYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsXFxuXFx0XFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCBjYW5ub3QgYmUgc3BlY2lmaWVkIHdoZW4gQmlsbGluZ01vZGUgaXMgUEFZX1BFUl9SRVFVRVNUOyBDcmVhdGVUYWJsZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQcm92aXNpb25lZFRocm91Z2hwdXQsIG9yIHN3aXRjaCBCaWxsaW5nTW9kZSB0byBQUk9WSVNJT05FRFxcXCIsXFxuXFx0X3BmX2RkYmJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUEFZX1BFUl9SRVFVRVNUXFxcIlxcblxcdF9wZl9kZGJidF9oYXNfcHQobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsXFxuXFx0XFxcIkJpbGxpbmdNb2RlIGlzIFBST1ZJU0lPTkVEICh0aGUgZGVmYXVsdCkgYnV0IFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBpcyBtaXNzaW5nOyBDcmVhdGVUYWJsZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIkFkZCBQcm92aXNpb25lZFRocm91Z2hwdXQgKFJlYWRDYXBhY2l0eVVuaXRzIC8gV3JpdGVDYXBhY2l0eVVuaXRzKSwgb3Igc2V0IEJpbGxpbmdNb2RlIHRvIFBBWV9QRVJfUkVRVUVTVFxcXCIsXFxuXFx0X3BmX2RkYmJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdF9wZl9kZGJidF9wcm92aXNpb25lZChuYW1lKVxcblxcdG5vdCBfcGZfZGRiYnRfaGFzX3B0KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZHVwbGljYXRlLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1wiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkF0dHJpYnV0ZURlZmluaXRpb25zIG11c3Qgbm90IGRlZmluZSB0aGUgc2FtZSBhdHRyaWJ1dGUgdHdpY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtYXR0cmlidXRlLWRlZmluaXRpb25zXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zLiVkXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBdHRyaWJ1dGUgJyVzJyBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIEF0dHJpYnV0ZURlZmluaXRpb25zOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiQW4gYXR0cmlidXRlIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthbl0pLFxcblxcdFxcXCJLZWVwIGEgc2luZ2xlIGRlZmluaXRpb24gcGVyIGF0dHJpYnV0ZSBuYW1lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdGFuIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhbilcXG5cXHRvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkgPT0gYW5cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtaW5kZXgtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY29uZGFyeSBpbmRleCBuYW1lcyBtdXN0IGJlIHVuaXF1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZGluX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCJcXG5cXG4jIER1cGxpY2F0ZXMgd2l0aGluIHRoZSBzYW1lIGluZGV4IGxpc3Qgb25seTsgYSBHU0kvTFNJIGNyb3NzLWxpc3QgY2xhc2ggd2FzXFxuIyBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtaW5kZXgtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5JbmRleE5hbWVcXFwiLCBbcHJvcCwgYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkluZGV4IG5hbWUgJyVzJyBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiRHVwbGljYXRlIGluZGV4IG5hbWVcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IHNlY29uZGFyeSBpbmRleCBhIHVuaXF1ZSBJbmRleE5hbWVcXFwiLFxcblxcdF9wZl9kZGJkaW5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBwcm9wIGluIFtcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiXVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGluYW1lKVxcblxcdG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIG51bGwpID09IGluYW1lXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZ2xvYmFsLXRhYmxlLXJlcGxpY2EtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2xvYmFsVGFibGUgUmVwbGljYXMgbXVzdCBpbmNsdWRlIHRoZSBkZXBsb3ltZW50IHJlZ2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6R2xvYmFsVGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgb25seSB3aGVuIHRoZSBlbmZvcmNlIHBsdWdpblxcbiMga25vd3MgdGhlIGFwcCdzIGNvbmNyZXRlIHJlZ2lvbiAoc2VlIHNyYy9wcml2YXRlL2VuZm9yY2UudHMpOyB3aXRob3V0IGl0IHRoZVxcbiMgcmVmZXJlbmNlIGlzIHVuZGVmaW5lZCBhbmQgdGhpcyBydWxlIHNraXBzLiBSZXBsaWNhcyB3aXRoIHVucmVzb2x2YWJsZVxcbiMgUmVnaW9uIHZhbHVlcyBhbHNvIG1ha2UgdGhlIHJ1bGUgc2tpcCDigJQgYWJzZW5jZSBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nbG9iYWwtdGFibGUtcmVwbGljYS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2FzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgUmVwbGljYXMgbGlzdCAldiBkb2VzIG5vdCBpbmNsdWRlIHRoZSBkZXBsb3ltZW50IHJlZ2lvbiAnJXMnOyBDcmVhdGVHbG9iYWxUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIFJlcGxpY2FzIHNlY3Rpb24gbXVzdCBjb250YWluIGFuIGVudHJ5IGZvciB0aGUgY3VycmVudCByZWdpb25cXFxcXFxcIlxcXCIsIFtyZXBsaWNhcywgcmVnaW9uXSksXFxuXFx0XFxcIkFkZCBhIHJlcGxpY2EgZW50cnkgZm9yIHRoZSByZWdpb24gdGhlIHN0YWNrIGRlcGxveXMgdG8gKENESyBUYWJsZVYyIGRvZXMgdGhpcyBhdXRvbWF0aWNhbGx5KVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLWdsb2JhbHRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVxcXCIpXFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0aXNfc3RyaW5nKHJlZ2lvbilcXG5cXHRpdGVtcyA6PSBbaXQgfCBzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5SZXBsaWNhc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBpdCBpbiBpdGVtcyB7XFxuXFx0XFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJSZWdpb25cXFwiLCBudWxsKSlcXG5cXHR9XFxuXFx0cmVwbGljYXMgOj0gW3IgfCBzb21lIGl0IGluIGl0ZW1zOyByIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJSZWdpb25cXFwiLCBudWxsKV1cXG5cXHRub3QgcmVnaW9uIGluIHJlcGxpY2FzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZ3NpLWJpbGxpbmctdGhyb3VnaHB1dFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdTSSBQcm92aXNpb25lZFRocm91Z2hwdXQgbXVzdCBtYXRjaCB0aGUgdGFibGUgQmlsbGluZ01vZGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmdidF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvSG93SXRXb3Jrcy5SZWFkV3JpdGVDYXBhY2l0eU1vZGUuaHRtbFxcXCJcXG5cXG4jIEdTSS1sZXZlbCBjb3VudGVycGFydCBvZiBwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXQgKHdoaWNoIGNvdmVycyB0aGVcXG4jIHRhYmxlLWxldmVsIHBhaXIgb25seSkuIFNhbWUgdG9rZW4gc2FmZXR5OiBsaXRlcmFsIEJpbGxpbmdNb2RlIG9yIGFic2VudFxcbiMgKGRlZmF1bHQgUFJPVklTSU9ORUQpOyB0b2tlbiB2YWx1ZXMgbmV2ZXIganVkZ2VkLlxcbl9wZl9kZGJnYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKVxcblxcbl9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQUk9WSVNJT05FRFxcXCJcXG5cXG5fcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIG5vdCBfcGZfZGRiZ2J0X2JpbGxpbmdfcHJlc2VudChuYW1lKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgc3BlY2lmaWVzIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBidXQgQmlsbGluZ01vZGUgaXMgUEFZX1BFUl9SRVFVRVNUOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvcGVydHkgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbid0IGJlIHVzZWQgd2l0aCBQQVlfUEVSX1JFUVVFU1QgQmlsbGluZ01vZGVcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJSZW1vdmUgdGhlIEdTSSdzIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCwgb3Igc3dpdGNoIHRoZSB0YWJsZSB0byBQUk9WSVNJT05FRFxcXCIsXFxuXFx0X3BmX2RkYmdidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBBWV9QRVJfUkVRVUVTVFxcXCJcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdGlzX29iamVjdChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBudWxsKSlcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBpcyBtaXNzaW5nIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCB3aGlsZSB0aGUgdGFibGUgYmlsbHMgUFJPVklTSU9ORUQgKHRoZSBkZWZhdWx0KTsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb3BlcnR5IFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJBZGQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IHRvIHRoZSBHU0ksIG9yIHNldCBCaWxsaW5nTW9kZSB0byBQQVlfUEVSX1JFUVVFU1RcXFwiLFxcblxcdF9wZl9kZGJnYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0X3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0bm90IGlzX29iamVjdChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBudWxsKSlcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nc2ktcHJvamVjdGlvbi1ub25rZXlcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOb25LZXlBdHRyaWJ1dGVzIGdvZXMgd2l0aCBJTkNMVURFLCBhbmQgb25seSB3aXRoIElOQ0xVREVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmdwbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZHluYW1vZGItdGFibGUtcHJvamVjdGlvbi5odG1sXFxcIlxcblxcbiMgR1NJIHByb2plY3Rpb25zIG9ubHk6IHRoZSBMU0kgc2hhcGUgYW5kIHRoZSBLRVlTX09OTFkrTm9uS2V5QXR0cmlidXRlcyBjb21ib1xcbiMgd2VyZSBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktcHJvamVjdGlvbi1ub25rZXlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm9qZWN0aW9uXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyB1c2VzIFByb2plY3Rpb25UeXBlIElOQ0xVREUgd2l0aG91dCBOb25LZXlBdHRyaWJ1dGVzOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvamVjdGlvblR5cGUgaXMgSU5DTFVERSwgYnV0IE5vbktleUF0dHJpYnV0ZXMgaXMgbm90IHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkxpc3QgdGhlIHByb2plY3RlZCBhdHRyaWJ1dGVzIGluIE5vbktleUF0dHJpYnV0ZXMsIG9yIHN3aXRjaCBQcm9qZWN0aW9uVHlwZSB0byBBTEwgLyBLRVlTX09OTFlcXFwiLFxcblxcdF9wZl9kZGJncG5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRwcm9qIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb2plY3Rpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm9qKVxcblxcdG9iamVjdC5nZXQocHJvaiwgXFxcIlByb2plY3Rpb25UeXBlXFxcIiwgbnVsbCkgPT0gXFxcIklOQ0xVREVcXFwiXFxuXFx0Y291bnQob2JqZWN0LmdldChwcm9qLCBcXFwiTm9uS2V5QXR0cmlidXRlc1xcXCIsIFtdKSkgPT0gMFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb2plY3Rpb25cXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIGNvbWJpbmVzIFByb2plY3Rpb25UeXBlIEFMTCB3aXRoIE5vbktleUF0dHJpYnV0ZXM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9qZWN0aW9uVHlwZSBpcyBBTEwsIGJ1dCBOb25LZXlBdHRyaWJ1dGVzIGlzIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkRyb3AgTm9uS2V5QXR0cmlidXRlcyAoQUxMIGFscmVhZHkgcHJvamVjdHMgZXZlcnl0aGluZyksIG9yIHN3aXRjaCBQcm9qZWN0aW9uVHlwZSB0byBJTkNMVURFXFxcIixcXG5cXHRfcGZfZGRiZ3BuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0cHJvaiA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm9qZWN0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocHJvailcXG5cXHRvYmplY3QuZ2V0KHByb2osIFxcXCJQcm9qZWN0aW9uVHlwZVxcXCIsIG51bGwpID09IFxcXCJBTExcXFwiXFxuXFx0Y291bnQob2JqZWN0LmdldChwcm9qLCBcXFwiTm9uS2V5QXR0cmlidXRlc1xcXCIsIFtdKSkgPiAwXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIktleVNjaGVtYSBtdXN0IGJlIFtIQVNIXSBvciBbSEFTSCwgUkFOR0VdXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJrc2hfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIlxcblxcbiMgVGFibGUtbGV2ZWwga2V5IHNjaGVtYSBvbmx5OiBpbmRleCBrZXkgc2NoZW1hcyBwcm9kdWNlIGRpZmZlcmVudCBzZXJ2aWNlXFxuIyBlcnJvcnMgYW5kIHdlcmUgbm90IG1lYXN1cmVkIChpc3N1ZSAjMjEpLlxcbl9wZl9kZGJrc2hfdHlwZShuYW1lLCBpKSA6PSBrdCBpZiB7XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHRpdC5pbmRleCA9PSBpXFxuXFx0a3QgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIktleVR5cGVcXFwiLCBudWxsKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWtleS1zY2hlbWEtc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYS4wLktleVR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBmaXJzdCBLZXlTY2hlbWEgZWxlbWVudCBtdXN0IGJlIEhBU0gsIGdvdCAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBLZXlTY2hlbWE6IFRoZSBmaXJzdCBLZXlTY2hlbWFFbGVtZW50IGlzIG5vdCBhIEhBU0gga2V5IHR5cGVcXFxcXFxcIlxcXCIsIFtrdF0pLFxcblxcdFxcXCJQdXQgdGhlIHBhcnRpdGlvbiBrZXkgKEtleVR5cGUgSEFTSCkgZmlyc3QgYW5kIHRoZSBvcHRpb25hbCBzb3J0IGtleSAoUkFOR0UpIHNlY29uZFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRrdCA6PSBfcGZfZGRia3NoX3R5cGUobmFtZSwgMClcXG5cXHRpc19zdHJpbmcoa3QpXFxuXFx0a3QgIT0gXFxcIkhBU0hcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hLjEuS2V5VHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHNlY29uZCBLZXlTY2hlbWEgZWxlbWVudCBtdXN0IGJlIFJBTkdFLCBnb3QgJyVzJzsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgS2V5U2NoZW1hOiBUaGUgc2Vjb25kIEtleVNjaGVtYUVsZW1lbnQgaXMgbm90IGEgUkFOR0Uga2V5IHR5cGVcXFxcXFxcIlxcXCIsIFtrdF0pLFxcblxcdFxcXCJVc2UgZXhhY3RseSBvbmUgSEFTSCBlbGVtZW50LCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IG9uZSBSQU5HRSBlbGVtZW50XFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGt0IDo9IF9wZl9kZGJrc2hfdHlwZShuYW1lLCAxKVxcblxcdGlzX3N0cmluZyhrdClcXG5cXHRrdCAhPSBcXFwiUkFOR0VcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJLZXlTY2hlbWEgY2FuIGhvbGQgYXQgbW9zdCAyIGVsZW1lbnRzIChIQVNIICsgb3B0aW9uYWwgUkFOR0UpLCBnb3QgJWRcXFwiLCBbbl0pLFxcblxcdFxcXCJNb2RlbCBleHRyYSBhY2Nlc3MgcGF0dGVybnMgYXMgZ2xvYmFsIG9yIGxvY2FsIHNlY29uZGFyeSBpbmRleGVzIGluc3RlYWRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0biA6PSBjb3VudChbMSB8IHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIildKVxcblxcdG4gPiAyXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGIta2luZXNpcy1zdHJlYW0tcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBLaW5lc2lzIHN0cmVhbWluZyBkZXN0aW5hdGlvbiBtdXN0IGJlIGluIHRoZSB0YWJsZSdzIHJlZ2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgS2luZXNpcyBEYXRhIFN0cmVhbXMgZGVzdGluYXRpb24gbXVzdCBsaXZlIGluIHRoZSBzYW1lIHJlZ2lvbiBhcyB0aGVcXG4jIHRhYmxlLiBUaGUgZGVwbG95LXRpbWUgZmFpbHVyZSBtb2RlIGlzIHVnbHk6IHRoZSB0YWJsZSBpcyBjcmVhdGVkLCB0aGVcXG4jIHN0cmVhbWluZyBkZXN0aW5hdGlvbiBuZXZlciBzdGFiaWxpemVzLCBhbmQgQ2xvdWRGb3JtYXRpb24gcm9sbHMgYmFjayBvblxcbiMgTm90U3RhYmlsaXplZCBtaW51dGVzIGxhdGVyIOKAlCBub3RoaW5nIG5hbWVzIHRoZSByZWdpb24gbWlzbWF0Y2guXFxuIyBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvbiBpcyBkZWZpbmVkIG9ubHkgaW4gZW5mb3JjZSBtb2RlIHdpdGggYVxcbiMgY29uY3JldGUgcmVnaW9uOyBvdGhlcndpc2UgdGhpcyBydWxlIHNraXBzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2luZXNpcy1zdHJlYW0tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LaW5lc2lzU3RyZWFtU3BlY2lmaWNhdGlvbi5TdHJlYW1Bcm5cXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBLaW5lc2lzIHN0cmVhbSBsaXZlcyBpbiAnJXMnIGJ1dCB0aGUgdGFibGUgZGVwbG95cyB0byAnJXMnOyB0aGUgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG5ldmVyIHN0YWJpbGl6ZXMgYW5kIHRoZSBzdGFjayByb2xscyBiYWNrXFxcIiwgW3N0cmVhbVJlZ2lvbiwgcmVnaW9uXSksXFxuXFx0XFxcIlBvaW50IEtpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFybiBhdCBhIHN0cmVhbSBpbiB0aGUgdGFibGUncyBvd24gcmVnaW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9rZHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRpc19zdHJpbmcocmVnaW9uKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcImtpbmVzaXNcXFwiXFxuXFx0c3RyZWFtUmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0c3RyZWFtUmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0c3RyZWFtUmVnaW9uICE9IHJlZ2lvblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWxzaS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMU0kga2V5IGF0dHJpYnV0ZXMgbXVzdCBiZSBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDM5IGNoZWNrcyB0YWJsZSBhbmQgR1NJIGtleSBzY2hlbWFzIGFnYWluc3RcXG4jIEF0dHJpYnV0ZURlZmluaXRpb25zIGJ1dCBpcyBibGluZCB0byBMb2NhbFNlY29uZGFyeUluZGV4ZXMgKG1lYXN1cmVkXFxuIyAyMDI2LTA5LTAyLCAxLjcuMC1iZXRhKS4gVGhpcyBydWxlIGNvdmVycyBleGFjdGx5IHRoYXQgZ2FwLlxcblxcbl9wZl9kZGJsYWRfZGVmcyhuYW1lKSA6PSB7YSB8XFxuXFx0c29tZSBkIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuIyBJZiBhbnkgZGVmaW5pdGlvbidzIG5hbWUgaXMgdW5yZXNvbHZhYmxlIHRoZSBzZXQgaXMgaW5jb21wbGV0ZSDigJQgc3RheSBzaWxlbnQuXFxuX3BmX2RkYmxhZF9kZWZzX3Jlc29sdmFibGUobmFtZSkgaWYge1xcblxcdGV2ZXJ5IGQgaW4gW3ggfCBzb21lIHggaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIildIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChkLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktYXR0cmlidXRlLWRlZmluaXRpb25zXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlcy4lZC5LZXlTY2hlbWFcXFwiLCBbbC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxTSSBrZXkgYXR0cmlidXRlICclcycgaXMgbm90IGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJBbiBhdHRyaWJ1dGUgcmVmZXJlbmNlZCBpbiBhIEtleVNjaGVtYSBlbGVtZW50IGlzIG5vdCBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXFxcXFxcXCJcXFwiLCBbYXR0cl0pLFxcblxcdFxcXCJBZGQgdGhlIGF0dHJpYnV0ZSB0byBBdHRyaWJ1dGVEZWZpbml0aW9ucyAoYW5kIG5vd2hlcmUgZWxzZTogb25seSBrZXkgYXR0cmlidXRlcyBiZWxvbmcgdGhlcmUpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1sb2NhbHNlY29uZGFyeWluZGV4Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0Y291bnQoX3BmX2RkYmxhZF9kZWZzKG5hbWUpKSA+IDBcXG5cXHRfcGZfZGRibGFkX2RlZnNfcmVzb2x2YWJsZShuYW1lKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0YXR0ciA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXR0cilcXG5cXHRub3QgYXR0ciBpbiBfcGZfZGRibGFkX2RlZnMobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBMU0kgbmVlZHMgYSBSQU5HRSBrZXkgYW5kIHRoZSB0YWJsZSdzIGxlYWRpbmcgaGFzaCBrZXlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmxzaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZHluYW1vZGItdGFibGUtbG9jYWxzZWNvbmRhcnlpbmRleC5odG1sXFxcIlxcblxcbl9wZl9kZGJsc2hfa2V5dHlwZXMoa3MpIDo9IHtrdCB8XFxuXFx0c29tZSBrIGluIGtzXFxuXFx0a3QgOj0gb2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGt0KVxcbn1cXG5cXG4jIE9ubHkganVkZ2UgYSBrZXkgc2NoZW1hIHdob3NlIEtleVR5cGVzIGFyZSBhbGwgbGl0ZXJhbCBzdHJpbmdzLlxcbl9wZl9kZGJsc2hfcmVzb2x2YWJsZShrcykgaWYgY291bnQoX3BmX2RkYmxzaF9rZXl0eXBlcyhrcykpID4gMFxcblxcbl9wZl9kZGJsc2hfcmVzb2x2YWJsZV9hbGwoa3MpIGlmIHtcXG5cXHRldmVyeSBrIGluIGtzIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTG9jYWwgc2Vjb25kYXJ5IGluZGV4ICclcycgaGFzIG5vIFJBTkdFIGtleTsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkluZGV4IEtleVNjaGVtYSBkb2VzIG5vdCBoYXZlIGEgcmFuZ2Uga2V5IGZvciBpbmRleFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkdpdmUgdGhlIExTSSBhIHNvcnQga2V5OiBbdGFibGUgSEFTSCBrZXksIGl0cyBvd24gUkFOR0Uga2V5XVxcXCIsXFxuXFx0X3BmX2RkYmxzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGwgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0a3MgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0Y291bnQoa3MpID4gMFxcblxcdF9wZl9kZGJsc2hfcmVzb2x2YWJsZV9hbGwoa3MpXFxuXFx0bm90IFxcXCJSQU5HRVxcXCIgaW4gX3BmX2RkYmxzaF9rZXl0eXBlcyhrcylcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTG9jYWwgc2Vjb25kYXJ5IGluZGV4ICclcycgdXNlcyBoYXNoIGtleSAnJXMnIGJ1dCB0aGUgdGFibGUncyBoYXNoIGtleSBpcyAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW5kZXggS2V5U2NoZW1hIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgbGVhZGluZyBoYXNoIGtleSBhcyB0YWJsZSBLZXlTY2hlbWFcXFxcXFxcIlxcXCIsIFtpbmFtZSwgbHNpSGFzaCwgdGFibGVIYXNoXSksXFxuXFx0XFxcIkFuIExTSSBtdXN0IHJldXNlIHRoZSB0YWJsZSdzIHBhcnRpdGlvbiBrZXk7IHVzZSBhIGdsb2JhbCBzZWNvbmRhcnkgaW5kZXggZm9yIGEgZGlmZmVyZW50IGhhc2gga2V5XFxcIixcXG5cXHRfcGZfZGRibHNoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHR0LmluZGV4ID09IDBcXG5cXHR0YWJsZUhhc2ggOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhYmxlSGFzaClcXG5cXHRzb21lIGwgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0a3MgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0c29tZSBrIGluIGtzXFxuXFx0b2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpID09IFxcXCJIQVNIXFxcIlxcblxcdGxzaUhhc2ggOj0gb2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGxzaUhhc2gpXFxuXFx0bHNpSGFzaCAhPSB0YWJsZUhhc2hcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhYmxlIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZSwgZG90IGFuZCBoeXBoZW4gKG1heCAyNTUpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiLFxuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbl0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIiwgXFxcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy4tXXsxLDI1NX0kYCwgbilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYWJsZU5hbWUgJyVzJyBpcyByZWplY3RlZDogRHluYW1vREIgYWNjZXB0cyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmUsIGRvdCBhbmQgaHlwaGVuLCB1cCB0byAyNTUgY2hhcmFjdGVyc1xcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgdGFibGUgdXNpbmcgW2EtekEtWjAtOV8uLV0gd2l0aGluIDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgbl0gaW4gX3BmX2RkYm5hbWVfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItdGFibGUtbmFtZS1sZW5ndGhcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYWJsZU5hbWUgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgKG1pbmltdW0gMyBjaGFyYWN0ZXJzKSBpcyBlbmZvcmNlZC4gVGhlIDI1NS1jaGFyXFxuIyBtYXhpbXVtIGFuZCB0aGUgY2hhcmFjdGVyIHBhdHRlcm4gd2VyZSBub3QgbWVhc3VyZWQuIE5vdGUgcmVzb2x2ZSgpIHR1cm5zIGFcXG4jIFJlZi10by1yZXNvdXJjZSBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElEOyBhIGxvZ2ljYWwgSUQgc2hvcnQgZW5vdWdoIHRvXFxuIyB0cmlwIHRoaXMgcnVsZSB3aGlsZSBmZWVkaW5nIGEgVGFibGVOYW1lIGlzIHRyZWF0ZWQgYXMgdGhlIGJ1ZyBpdCBhbG1vc3RcXG4jIGNlcnRhaW5seSBpcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtbGVuZ3RoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRhYmxlTmFtZSAnJXMnIGlzIHNob3J0ZXIgdGhhbiAzIGNoYXJhY3RlcnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIGxlbmd0aCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gM1xcXFxcXFwiXFxcIiwgW3RuXSksXFxuXFx0XFxcIlVzZSBhIHRhYmxlIG5hbWUgb2YgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzLCBvciBvbWl0IFRhYmxlTmFtZSBhbmQgbGV0IENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlIG9uZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVUYWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0Y291bnQodG4pIDwgM1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1pbnN0YW5jZS1hbWktYXJjaFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbnN0YW5jZSB0eXBlIGFyY2hpdGVjdHVyZSBtdXN0IG1hdGNoIHRoZSBTU00gcHVibGljLXBhcmFtZXRlciBBTUkgYXJjaGl0ZWN0dXJlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6SW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMyaWFhX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlLXR5cGVzLmh0bWxcXFwiXFxuXFxuIyBHcmF2aXRvbiBuYW1pbmcgY29udmVudGlvbjogYSBcXFwiZ1xcXCIgYW1vbmcgdGhlIGxldHRlcnMgYWZ0ZXIgdGhlXFxuIyBnZW5lcmF0aW9uIGRpZ2l0ICh0NGcsIGM3Z24sIGltNGduLCBnNWcpLCBwbHVzIHRoZSBwcmUtY29udmVudGlvbiBhMS5cXG4jIG1hYyogZmFtaWxpZXMgYXJlIGV4Y2x1ZGVkIGZyb20ganVkZ21lbnQgZW50aXJlbHkuXFxuX3BmX2VjMmlhYV9hcm1fZmFtKGZhbSkgaWYgcmVnZXgubWF0Y2goYF5bYS16XStbMC05XStbYS16MC05XSpnW2EtejAtOV0qJGAsIGZhbSlcXG5cXG5fcGZfZWMyaWFhX2FybV9mYW0oZmFtKSBpZiBmYW0gPT0gXFxcImExXFxcIlxcblxcbl9wZl9lYzJpYWFfZmFtKG5hbWUpIDo9IGZhbSBpZiB7XFxuXFx0aXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhpdClcXG5cXHRmYW0gOj0gc3BsaXQoaXQsIFxcXCIuXFxcIilbMF1cXG5cXHRub3Qgc3RhcnRzd2l0aChmYW0sIFxcXCJtYWNcXFwiKVxcbn1cXG5cXG4jIHt7cmVzb2x2ZTpzc206Li4ufX0gc3RyaW5ncyBzdXJmYWNlIGFzIHtcXFwiX19keW5hbWljXFxcIjogXFxcImR5bmFtaWNcXG4jIHJlZmVyZW5jZToge3tyZXNvbHZlOnNzbTo8cGF0aD59fVxcXCJ9IG1hcmtlciBvYmplY3RzIChtZWFzdXJlZFxcbiMgMjAyNi0wOS0wMyk7IHRoZSByZWZlcmVuY2UgdGV4dCBpcyByZWFkIGZyb20gdGhlIG1hcmtlci5cXG5fcGZfZWMyaWFhX2ltZyhuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkltYWdlSWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChyYXcpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHJhdywgXFxcIl9fZHluYW1pY1xcXCIsIFxcXCJcXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdGNvbnRhaW5zKGQsIFxcXCJ7e3Jlc29sdmU6c3NtOlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbWFnZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnN0YW5jZSB0eXBlICclcycgaXMgeDg2XzY0IGJ1dCB0aGUgQU1JIHBhcmFtZXRlciBwYXRoIG5hbWVzIGFybTY0OyB0aGUgbGF1bmNoIGZhaWxzIHdpdGggYW4gYXJjaGl0ZWN0dXJlIG1pc21hdGNoXFxcIiwgW3Jlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIildKSxcXG5cXHRcXFwiVXNlIGFuIGFybTY0IChHcmF2aXRvbikgaW5zdGFuY2UgdHlwZSBvciB0aGUgeDg2XzY0IEFNSSBwYXRoXFxcIixcXG5cXHRfcGZfZWMyaWFhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRmYW0gOj0gX3BmX2VjMmlhYV9mYW0obmFtZSlcXG5cXHRub3QgX3BmX2VjMmlhYV9hcm1fZmFtKGZhbSlcXG5cXHRpbWcgOj0gX3BmX2VjMmlhYV9pbWcobmFtZSlcXG5cXHRjb250YWlucyhpbWcsIFxcXCJhcm02NFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbWFnZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnN0YW5jZSB0eXBlICclcycgaXMgYXJtNjQgKEdyYXZpdG9uKSBidXQgdGhlIEFNSSBwYXJhbWV0ZXIgcGF0aCBuYW1lcyB4ODZfNjQ7IHRoZSBsYXVuY2ggZmFpbHMgd2l0aCBhbiBhcmNoaXRlY3R1cmUgbWlzbWF0Y2hcXFwiLCBbcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKV0pLFxcblxcdFxcXCJVc2UgYW4geDg2XzY0IGluc3RhbmNlIHR5cGUgb3IgdGhlIGFybTY0IEFNSSBwYXRoXFxcIixcXG5cXHRfcGZfZWMyaWFhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRmYW0gOj0gX3BmX2VjMmlhYV9mYW0obmFtZSlcXG5cXHRfcGZfZWMyaWFhX2FybV9mYW0oZmFtKVxcblxcdGltZyA6PSBfcGZfZWMyaWFhX2ltZyhuYW1lKVxcblxcdGNvbnRhaW5zKGltZywgXFxcIng4Nl82NFxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLWxhdW5jaC10ZW1wbGF0ZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhdW5jaCB0ZW1wbGF0ZSBuYW1lcyBhcmUgMy0xMjggY2hhcnMgb2YgbGV0dGVycywgbnVtYmVycyBhbmQgLSgpLi9fXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1sYXVuY2gtdGVtcGxhdGUtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMYXVuY2hUZW1wbGF0ZU5hbWUgJyVzJyBpcyByZWplY3RlZDogRUMyIHJlcXVpcmVzIDMtMTI4IGNoYXJhY3RlcnMgb2YgbGV0dGVycywgbnVtYmVycyBhbmQgLSAoICkgLiAvIF9cXFwiLCBbbl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGxhdW5jaCB0ZW1wbGF0ZSB1c2luZyBvbmx5IGxldHRlcnMsIG51bWJlcnMgYW5kIC0gKCApIC4gLyBfICgzLTEyOCBjaGFyYWN0ZXJzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTGF1bmNoVGVtcGxhdGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFRlbXBsYXRlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOSgpLi9fLV17MywxMjh9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLW5hdGd3LWFsbG9jYXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTkFUIGdhdGV3YXkgQWxsb2NhdGlvbklkIGlzIHJlcXVpcmVkIGZvciBwdWJsaWMgY29ubmVjdGl2aXR5IGFuZCBmb3JiaWRkZW4gZm9yIHByaXZhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpOYXRHYXRld2F5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMm5nYV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjMi1uYXRnYXRld2F5Lmh0bWxcXFwiXFxuXFxuX3BmX2VjMm5nYV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbiMgQ29ubmVjdGl2aXR5VHlwZSBkZWZhdWx0cyB0byBwdWJsaWM7IGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBza2lwcyBib3RoIGRpcmVjdGlvbnMuXFxuX3BmX2VjMm5nYV9wdWJsaWMobmFtZSkgaWYgX3BmX2VjMm5nYV9hYnNlbnQobmFtZSwgXFxcIkNvbm5lY3Rpdml0eVR5cGVcXFwiKVxcblxcbl9wZl9lYzJuZ2FfcHVibGljKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29ubmVjdGl2aXR5VHlwZVxcXCIpID09IFxcXCJwdWJsaWNcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb2NhdGlvbklkXFxcIixcXG5cXHRcXFwiQSBwcml2YXRlIE5BVCBnYXRld2F5IGNhbm5vdCB0YWtlIEFsbG9jYXRpb25JZCAoXFxcXFxcXCJBbGxvY2F0aW9uSWQgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBOQVQgR2F0ZXdheSB3aXRoIENvbm5lY3Rpdml0eSBUeXBlIHByaXZhdGUuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIEFsbG9jYXRpb25JZCwgb3Igc3dpdGNoIENvbm5lY3Rpdml0eVR5cGUgdG8gcHVibGljXFxcIixcXG5cXHRfcGZfZWMybmdhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Ok5hdEdhdGV3YXlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29ubmVjdGl2aXR5VHlwZVxcXCIpID09IFxcXCJwcml2YXRlXFxcIlxcblxcdG5vdCBfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQWxsb2NhdGlvbklkXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb2NhdGlvbklkXFxcIixcXG5cXHRcXFwiQSBwdWJsaWMgTkFUIGdhdGV3YXkgcmVxdWlyZXMgQWxsb2NhdGlvbklkIChcXFxcXFxcIlRoZSByZXF1ZXN0IG11c3QgaW5jbHVkZSB0aGUgQWxsb2NhdGlvbklkIHBhcmFtZXRlci5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJBbGxvY2F0ZSBhbiBFSVAgYW5kIHBhc3MgaXRzIEFsbG9jYXRpb25JZCwgb3Igc2V0IENvbm5lY3Rpdml0eVR5cGU6IHByaXZhdGVcXFwiLFxcblxcdF9wZl9lYzJuZ2FfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6TmF0R2F0ZXdheVxcXCIpXFxuXFx0X3BmX2VjMm5nYV9wdWJsaWMobmFtZSlcXG5cXHRfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQWxsb2NhdGlvbklkXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItcGctY2x1c3Rlci1idXJzdGFibGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQnVyc3RhYmxlIGluc3RhbmNlIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGNsdXN0ZXIgcGxhY2VtZW50IGdyb3Vwc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ3Jvc3MtcmVzb3VyY2U6IG9ubHkgZmlyZXMgd2hlbiB0aGUgcmVmZXJlbmNlZCBwbGFjZW1lbnQgZ3JvdXAgaXMgaW5cXG4jIHRoZSB0ZW1wbGF0ZSB3aXRoIFN0cmF0ZWd5IGNsdXN0ZXIuIEEgbGl0ZXJhbCAocHJlLWV4aXN0aW5nKSBncm91cFxcbiMgbmFtZSBjYXJyaWVzIG5vIHN0cmF0ZWd5IGluZm9ybWF0aW9uIGFuZCBzdGF5cyBzaWxlbnQuXFxuX3BmX2VjMnBnYl9idXJzdGFibGUoZmFtKSBpZiBmYW0gaW4ge1xcXCJ0MlxcXCIsIFxcXCJ0M1xcXCIsIFxcXCJ0M2FcXFwiLCBcXFwidDRnXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1wZy1jbHVzdGVyLWJ1cnN0YWJsZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbHVzdGVyIHBsYWNlbWVudCBncm91cHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICclcycgaW5zdGFuY2UgdHlwZTsgdGhlIGxhdW5jaCBmYWlscyBhdCBkZXBsb3lcXFwiLCBbaXRdKSxcXG5cXHRcXFwiVXNlIGEgbm9uLWJ1cnN0YWJsZSB0eXBlLCBvciBhIHNwcmVhZC9wYXJ0aXRpb24gcGxhY2VtZW50IGdyb3VwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3BsYWNlbWVudC1ncm91cHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCIpXFxuXFx0aXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhpdClcXG5cXHRfcGZfZWMycGdiX2J1cnN0YWJsZShzcGxpdChpdCwgXFxcIi5cXFwiKVswXSlcXG5cXHRwZyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBsYWNlbWVudEdyb3VwTmFtZVxcXCIpXFxuXFx0cGcgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFxcXCIpXFxuXFx0cmVzb2x2ZShwZywgXFxcIlByb3BlcnRpZXMuU3RyYXRlZ3lcXFwiKSA9PSBcXFwiY2x1c3RlclxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItcm91dGUtdGFyZ2V0LWV4YWN0bHktb25lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcm91dGUgbXVzdCBuYW1lIGV4YWN0bHkgb25lIHRhcmdldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlJvdXRlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgMTEgdGFyZ2V0IHByb3BlcnRpZXMsIHN0cmFpZ2h0IGZyb20gdGhlIEVDMiBlcnJvciBtZXNzYWdlLlxcbl9wZl9lYzJydGVfdGFyZ2V0cyA6PSBbXFxcIkdhdGV3YXlJZFxcXCIsIFxcXCJMb2NhbEdhdGV3YXlJZFxcXCIsIFxcXCJDYXJyaWVyR2F0ZXdheUlkXFxcIiwgXFxcIk5hdEdhdGV3YXlJZFxcXCIsIFxcXCJOZXR3b3JrSW50ZXJmYWNlSWRcXFwiLCBcXFwiVnBjUGVlcmluZ0Nvbm5lY3Rpb25JZFxcXCIsIFxcXCJFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWRcXFwiLCBcXFwiVHJhbnNpdEdhdGV3YXlJZFxcXCIsIFxcXCJWcGNFbmRwb2ludElkXFxcIiwgXFxcIkNvcmVOZXR3b3JrQXJuXFxcIiwgXFxcIkluc3RhbmNlSWRcXFwiXVxcblxcbl9wZl9lYzJydGVfY291bnQobmFtZSkgOj0gbiBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZWMycnRlX3RhcmdldHM7IG9iamVjdC5nZXQocHJvcHMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJdKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1yb3V0ZS10YXJnZXQtZXhhY3RseS1vbmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcm91dGUgbmFtZXMgJXYgdGFyZ2V0czsgRUMyIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9mIEdhdGV3YXlJZCwgTG9jYWxHYXRld2F5SWQsIENhcnJpZXJHYXRld2F5SWQsIE5hdEdhdGV3YXlJZCwgTmV0d29ya0ludGVyZmFjZUlkLCBWcGNQZWVyaW5nQ29ubmVjdGlvbklkLCBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWQsIFRyYW5zaXRHYXRld2F5SWQsIFZwY0VuZHBvaW50SWQsIENvcmVOZXR3b3JrQXJuIG9yIEluc3RhbmNlSWRcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgdGFyZ2V0IHByb3BlcnR5IG9uIHRoZSByb3V0ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjMi1yb3V0ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlJvdXRlXFxcIilcXG5cXHRuIDo9IF9wZl9lYzJydGVfY291bnQobmFtZSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctY2lkci12YWxpZFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBydWxlIENpZHJJcCBtdXN0IGJlIGEgd2VsbC1mb3JtZWQgSVB2NCBDSURSXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMyc2N2X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcy5odG1sXFxcIlxcblxcbl9wZl9lYzJzY3ZfbWFsZm9ybWVkKGMpIGlmIHtcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHR0b19udW1iZXIoc3BsaXQoYywgXFxcIi9cXFwiKVsxXSkgPiAzMlxcbn1cXG5cXG5fcGZfZWMyc2N2X21hbGZvcm1lZChjKSBpZiB7XFxuXFx0cmVnZXgubWF0Y2goYF5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XSsvWzAtOV0rJGAsIGMpXFxuXFx0c29tZSBvIGluIHNwbGl0KHNwbGl0KGMsIFxcXCIvXFxcIilbMF0sIFxcXCIuXFxcIilcXG5cXHR0b19udW1iZXIobykgPiAyNTVcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctY2lkci12YWxpZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5DaWRySXBcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ2lkcklwICclcycgaXMgbWFsZm9ybWVkIChvY3RldHMgbXVzdCBiZSAwLTI1NSwgcHJlZml4IDAtMzIpOyBFQzIgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQ0lEUiBibG9jayAlcyBpcyBtYWxmb3JtZWRcXFxcXFxcIlxcXCIsIFtjLCBjXSksXFxuXFx0XFxcIkZpeCB0aGUgQ0lEUiBub3RhdGlvblxcXCIsXFxuXFx0X3BmX2VjMnNjdl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGRpciBpbiB7XFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtkaXJdKSlcXG5cXHRlbnRyeSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdGMgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIkNpZHJJcFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGMpXFxuXFx0X3BmX2VjMnNjdl9tYWxmb3JtZWQoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctY2lkci12YWxpZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2lkcklwXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDaWRySXAgJyVzJyBpcyBtYWxmb3JtZWQgKG9jdGV0cyBtdXN0IGJlIDAtMjU1LCBwcmVmaXggMC0zMik7IEVDMiByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJDSURSIGJsb2NrICVzIGlzIG1hbGZvcm1lZFxcXFxcXFwiXFxcIiwgW2MsIGNdKSxcXG5cXHRcXFwiRml4IHRoZSBDSURSIG5vdGF0aW9uXFxcIixcXG5cXHRfcGZfZWMyc2N2X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkcklwXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRfcGZfZWMyc2N2X21hbGZvcm1lZChjKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1ncm91cC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIG5hbWVzIG1heSBub3Qgc3RhcnQgd2l0aCBzZy1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctZ3JvdXAtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR3JvdXBOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJHcm91cE5hbWUgJyVzJyBzdGFydHMgd2l0aCB0aGUgcmVzZXJ2ZWQgcHJlZml4OyBFQzIgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiR3JvdXAgbmFtZXMgbWF5IG5vdCBiZSBpbiB0aGUgZm9ybWF0IHNnLSpcXFxcXFxcIlxcXCIsIFtnbl0pLFxcblxcdFxcXCJQaWNrIGEgbmFtZSB0aGF0IGRvZXMgbm90IHN0YXJ0IHdpdGggc2ctXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZWN1cml0eUdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0Z24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Hcm91cE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhnbilcXG5cXHRzdGFydHN3aXRoKGduLCBcXFwic2ctXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcG9ydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBUQ1AvVURQIHBvcnRzIG11c3QgYmUgd2l0aGluIDAtNjU1MzUgYW5kIEZyb21Qb3J0IDw9IFRvUG9ydFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnX2ZpeCA6PSBcXFwiVXNlIGEgcG9ydCBiZXR3ZWVuIDAgYW5kIDY1NTM1IHdpdGggRnJvbVBvcnQgPD0gVG9Qb3J0XFxcIlxcblxcbl9wZl9zZ191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA+IDY1NTM1XFxuXFxuX3BmX3RjcF91ZHAocCkgaWYgcCBpbiB7XFxcInRjcFxcXCIsIFxcXCJ1ZHBcXFwiLCBcXFwiNlxcXCIsIFxcXCIxN1xcXCIsIDYsIDE3fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuJXNcXFwiLCBbZGlyLCBpdGVtLmluZGV4LCBwbmFtZV0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIG91dHNpZGUgdGhlIHZhbGlkIFRDUC9VRFAgcG9ydCByYW5nZSAwLTY1NTM1XFxcIiwgW3BuYW1lLCBuXSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRzb21lIHBuYW1lIGluIHtcXFwiRnJvbVBvcnRcXFwiLCBcXFwiVG9Qb3J0XFxcIn1cXG5cXHRuIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBwbmFtZSwgbnVsbCkpXFxuXFx0X3BmX3BvcnRfb3V0KG4pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuRnJvbVBvcnRcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiRnJvbVBvcnRcXFwiLCBudWxsKSlcXG5cXHR0IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVG9Qb3J0XFxcIiwgbnVsbCkpXFxuXFx0ZiA+PSAwXFxuXFx0dCA8PSA2NTUzNVxcblxcdGYgPiB0XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcG5hbWVdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyAldiBpcyBvdXRzaWRlIHRoZSB2YWxpZCBUQ1AvVURQIHBvcnQgcmFuZ2UgMC02NTUzNVxcXCIsIFtwbmFtZSwgbl0pLFxcblxcdF9wZl9zZ19maXgsIF9wZl9zZ191cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0X3BmX3RjcF91ZHAocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JcFByb3RvY29sXFxcIikpXFxuXFx0c29tZSBwbmFtZSBpbiB7XFxcIkZyb21Qb3J0XFxcIiwgXFxcIlRvUG9ydFxcXCJ9XFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BuYW1lXSkpKVxcblxcdF9wZl9wb3J0X291dChuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1wb3J0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Gcm9tUG9ydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRfcGZfdGNwX3VkcChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklwUHJvdG9jb2xcXFwiKSlcXG5cXHRmIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZyb21Qb3J0XFxcIikpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub1BvcnRcXFwiKSlcXG5cXHRmID49IDBcXG5cXHR0IDw9IDY1NTM1XFxuXFx0ZiA+IHRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcnVsZS1kZXNjcmlwdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBydWxlIGRlc2NyaXB0aW9ucyBhcmUgbGltaXRlZCB0byAyNTUgY2hhcnMgb2YgYSByZXN0cmljdGVkIEFTQ0lJIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnZGVzY191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfc2dkZXNjX3BhdCA6PSBgXlthLXpBLVowLTkuXyA6LygpIyxAXFxcXFtcXFxcXSs9Jjt7fSEkKi1dezAsMjU1fSRgXFxuXFxuIyBpbmxpbmUgcnVsZSBsaXN0cyBvbiBhIHNlY3VyaXR5IGdyb3VwXFxuX3BmX3NnZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIGRlc2NdIGlmIHtcXG5cXHRzb21lIG4gaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGtleSBpbiBbXFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwiXVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3Qobiwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtrZXldKSlcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRkZXNjIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkRlc2NyaXB0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoZGVzYylcXG5cXHRub3QgcmVnZXgubWF0Y2goX3BmX3NnZGVzY19wYXQsIGRlc2MpXFxuXFx0bmFtZSA6PSBuXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkRlc2NyaXB0aW9uXFxcIiwgW2tleSwgci5pbmRleF0pXFxufVxcblxcbiMgc3RhbmRhbG9uZSBydWxlIHJlc291cmNlc1xcbl9wZl9zZ2Rlc2NfYmFkIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkZXNjXSBpZiB7XFxuXFx0c29tZSB0IGluIFtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIl1cXG5cXHRzb21lIG4gaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRkZXNjIDo9IHJlc29sdmUobiwgXFxcIlByb3BlcnRpZXMuRGVzY3JpcHRpb25cXFwiKVxcblxcdGlzX3N0cmluZyhkZXNjKVxcblxcdG5vdCByZWdleC5tYXRjaChfcGZfc2dkZXNjX3BhdCwgZGVzYylcXG5cXHRuYW1lIDo9IG5cXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1ydWxlLWRlc2NyaXB0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRwYXRoLFxcblxcdHNwcmludGYoXFxcIlNlY3VyaXR5IGdyb3VwIHJ1bGUgZGVzY3JpcHRpb24gJyVzJyBpcyByZWplY3RlZDogRUMyIGFsbG93cyBmZXdlciB0aGFuIDI1NiBjaGFyYWN0ZXJzIGZyb20gdGhlIHNldCBhLXpBLVowLTkuIF8tOi8oKSMsQFtdKz0mO3t9ISQqIChub24tQVNDSUkgdGV4dCBzdWNoIGFzIEphcGFuZXNlIGlzIHJlamVjdGVkKVxcXCIsIFtkZXNjXSksXFxuXFx0XFxcIldyaXRlIHRoZSBydWxlIGRlc2NyaXB0aW9uIGluIHRoZSBhbGxvd2VkIEFTQ0lJIHNldCBhbmQga2VlcCBpdCB1bmRlciAyNTYgY2hhcmFjdGVyc1xcXCIsXFxuXFx0X3BmX3NnZGVzY191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkZXNjXSBpbiBfcGZfc2dkZXNjX2JhZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgc2VjdXJpdHkgZ3JvdXAgcnVsZSB0YWtlcyBleGFjdGx5IG9uZSBzb3VyY2UvZGVzdGluYXRpb24gZmllbGRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJzc2VfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0F1dGhvcml6ZVNlY3VyaXR5R3JvdXBJbmdyZXNzLmh0bWxcXFwiXFxuXFxuIyBUaGUgbWVtYmVyIHNldHMgY29tZSB2ZXJiYXRpbSBmcm9tIHRoZSBFQzIgZXJyb3IgbWVzc2FnZXMuXFxuX3BmX2VjMnNzZV9zZXRzIDo9IHtcXFwiaW5cXFwiOiBbXFxcIkNpZHJJcFxcXCIsIFxcXCJDaWRySXB2NlxcXCIsIFxcXCJTb3VyY2VTZWN1cml0eUdyb3VwSWRcXFwiLCBcXFwiU291cmNlUHJlZml4TGlzdElkXFxcIl0sIFxcXCJvdXRcXFwiOiBbXFxcIkNpZHJJcFxcXCIsIFxcXCJDaWRySXB2NlxcXCIsIFxcXCJEZXN0aW5hdGlvblByZWZpeExpc3RJZFxcXCIsIFxcXCJEZXN0aW5hdGlvblNlY3VyaXR5R3JvdXBJZFxcXCJdfVxcblxcbl9wZl9lYzJzc2VfZGlya2V5IDo9IHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiOiBcXFwiaW5cXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCI6IFxcXCJvdXRcXFwifVxcblxcbl9wZl9lYzJzc2VfcmtleSA6PSB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCI6IFxcXCJpblxcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCI6IFxcXCJvdXRcXFwifVxcblxcbl9wZl9lYzJzc2VfY291bnQoZW50cnksIHNldGtleSkgOj0gbiBpZiB7XFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdG4gOj0gY291bnQoW2sgfCBzb21lIGsgaW4gX3BmX2VjMnNzZV9zZXRzW3NldGtleV07IG9iamVjdC5nZXQoZW50cnksIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJdKVxcbn1cXG5cXG4jIEVtYmVkZGVkIHJ1bGVzOiB0d28gb3IgbW9yZSBtZW1iZXJzIGlzIGFuIGVycm9yOyB6ZXJvIGlzIHRvbGVyYXRlZFxcbiMgKGEgc291cmNlLWxlc3MgZW1iZWRkZWQgaW5ncmVzcyBkZXBsb3llZCBjbGVhbiBvbiAyMDI2LTA5LTAzKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkXFxcIiwgW2RpciwgaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlRoZSBydWxlIHNldHMgJXYgb2YgJXY7IEVDMiBhbGxvd3Mgb25seSBvbmUgKFxcXFxcXFwiT25seSBvbmUgb2YgJXMgY2FuIGJlIHNwZWNpZmllZFxcXFxcXFwiKVxcXCIsIFtuLCBfcGZfZWMyc3NlX3NldHNba10sIGNvbmNhdChcXFwiLCBcXFwiLCBfcGZfZWMyc3NlX3NldHNba10pXSksXFxuXFx0XFxcIktlZXAgZXhhY3RseSBvbmUgc291cmNlL2Rlc3RpbmF0aW9uIGZpZWxkIG9uIHRoZSBydWxlXFxcIixcXG5cXHRfcGZfZWMyc3NlX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGsgOj0gX3BmX2VjMnNzZV9kaXJrZXlbZGlyXVxcblxcdG4gOj0gX3BmX2VjMnNzZV9jb3VudChpdGVtLnZhbHVlLCBrKVxcblxcdG4gPj0gMlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJ1bGUgc2V0cyAldiBvZiAldjsgRUMyIHJlcXVpcmVzIGV4YWN0bHkgb25lIChcXFxcXFxcIkV4YWN0bHkgb25lIG9mICVzIG11c3QgYmUgc3BlY2lmaWVkIGFuZCBub3QgZW1wdHlcXFxcXFxcIilcXFwiLCBbbiwgX3BmX2VjMnNzZV9zZXRzW2tdLCBjb25jYXQoXFxcIiwgXFxcIiwgX3BmX2VjMnNzZV9zZXRzW2tdKV0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgc291cmNlL2Rlc3RpbmF0aW9uIGZpZWxkIG9uIHRoZSBydWxlIHJlc291cmNlXFxcIixcXG5cXHRfcGZfZWMyc3NlX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRrIDo9IF9wZl9lYzJzc2VfcmtleVtydHlwZV1cXG5cXHRuIDo9IF9wZl9lYzJzc2VfY291bnQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIGspXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXN1Ym5ldC1jaWRyLXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3VibmV0IElQdjQgQ0lEUiBuZXRtYXNrIG11c3QgYmUgYmV0d2VlbiAvMTYgYW5kIC8yOFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlN1Ym5ldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zdWJuZXRjaWRyX2xlbihjKSA6PSB0b19udW1iZXIocGFydHNbMV0pIGlmIHtcXG5cXHRwYXJ0cyA6PSBzcGxpdChjLCBcXFwiL1xcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc3VibmV0LWNpZHItc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTdWJuZXQgQ0lEUiAnJXMnIGhhcyBhIC8lZCBuZXRtYXNrOyBFQzIgYWNjZXB0cyAvMTYgdGhyb3VnaCAvMjggYW5kIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsIG90aGVyd2lzZVxcXCIsIFtjLCBuXSksXFxuXFx0XFxcIlJlc2l6ZSB0aGUgc3VibmV0IENJRFIgdG8gYSBuZXRtYXNrIGJldHdlZW4gLzE2IGFuZCAvMjhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvc3VibmV0LXNpemluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlN1Ym5ldFxcXCIpXFxuXFx0YyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNpZHJCbG9ja1xcXCIpXFxuXFx0aXNfc3RyaW5nKGMpXFxuXFx0biA6PSBfcGZfc3VibmV0Y2lkcl9sZW4oYylcXG5cXHRfcGZfc3VibmV0Y2lkcl9vdXQobilcXG59XFxuXFxuX3BmX3N1Ym5ldGNpZHJfb3V0KG4pIGlmIG4gPCAxNlxcblxcbl9wZl9zdWJuZXRjaWRyX291dChuKSBpZiBuID4gMjhcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi11c2VyZGF0YS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVDMiB1c2VyIGRhdGEgaXMgbGltaXRlZCB0byAxNjM4NCBieXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl91ZHN6X2ZpeCA6PSBcXFwiS2VlcCB1c2VyIGRhdGEgdW5kZXIgMTYzODQgYnl0ZXM7IG1vdmUgbGFyZ2UgcGF5bG9hZHMgdG8gUzMgYW5kIGZldGNoIHRoZW0gZnJvbSBhIHNtYWxsIGJvb3RzdHJhcCBzY3JpcHRcXFwiXFxuXFxuX3BmX3Vkc3pfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvaW5zdGFuY2VkYXRhLWFkZC11c2VyLWRhdGEuaHRtbFxcXCJcXG5cXG5fcGZfdWRzel9saW1pdCA6PSAxNjM4NFxcblxcbiMgYmFzZTY0IOaWh+Wtl+WIl+OBruODh+OCs+ODvOODieW+jOODkOOCpOODiOaVsO+8iOODkeODh+OCo+ODs+OCsOiAg+aFru+8iVxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKChjb3VudChzKSAqIDMpIC8gNCkgLSAyIGlmIGVuZHN3aXRoKHMsIFxcXCI9PVxcXCIpXFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoKGNvdW50KHMpICogMykgLyA0KSAtIDEgaWYge1xcblxcdGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXHRub3QgZW5kc3dpdGgocywgXFxcIj09XFxcIilcXG59XFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoY291bnQocykgKiAzKSAvIDQgaWYgbm90IGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXG5fcGZfdWRzel9wYXRocyA6PSB7XFxuXFx0XFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCI6IFxcXCJQcm9wZXJ0aWVzLlVzZXJEYXRhXFxcIixcXG5cXHRcXFwiQVdTOjpFQzI6OkxhdW5jaFRlbXBsYXRlXFxcIjogXFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVEYXRhLlVzZXJEYXRhXFxcIixcXG59XFxuXFxuIyBVc2VyRGF0YSDjgYzjg6rjg4bjg6njg6sgYmFzZTY0IOaWh+Wtl+WIl+OBruOCseODvOOCuVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXVzZXJkYXRhLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBwLFxcblxcdHNwcmludGYoXFxcIlVzZXJEYXRhIGRlY29kZXMgdG8gYWJvdXQgJXYgYnl0ZXMsIGJ1dCBFQzIgbGltaXRzIHVzZXIgZGF0YSB0byAlZCBieXRlczsgUnVuSW5zdGFuY2VzIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW3NpemUsIF9wZl91ZHN6X2xpbWl0XSksXFxuXFx0X3BmX3Vkc3pfZml4LCBfcGZfdWRzel91cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBwIGluIF9wZl91ZHN6X3BhdGhzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHVkIDo9IHJlc29sdmUobmFtZSwgcClcXG5cXHRpc19zdHJpbmcodWQpXFxuXFx0c2l6ZSA6PSBfcGZfdWRzel9kZWNvZGVkKHVkKVxcblxcdHNpemUgPiBfcGZfdWRzel9saW1pdFxcbn1cXG5cXG4jIFVzZXJEYXRhIOOBjCB7XFxcIkZuOjpCYXNlNjRcXFwiOiBcXFwiPGxpdGVyYWw+XFxcIn0g44Gu44Kx44O844K577yI44Ko44Oz44Kz44O844OJ5YmN44Gu55Sf44OQ44Kk44OI5pWw44Gn5Yik5a6a77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIHAsXFxuXFx0c3ByaW50ZihcXFwiVXNlckRhdGEgaXMgJWQgYnl0ZXMgYmVmb3JlIGJhc2U2NCBlbmNvZGluZywgYnV0IEVDMiBsaW1pdHMgdXNlciBkYXRhIHRvICVkIGJ5dGVzOyBSdW5JbnN0YW5jZXMgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbY291bnQoaW5uZXIpLCBfcGZfdWRzel9saW1pdF0pLFxcblxcdF9wZl91ZHN6X2ZpeCwgX3BmX3Vkc3pfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgcCBpbiBfcGZfdWRzel9wYXRoc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHR1ZCA6PSByZXNvbHZlKG5hbWUsIHApXFxuXFx0aXNfb2JqZWN0KHVkKVxcblxcdGlubmVyIDo9IG9iamVjdC5nZXQodWQsIFxcXCJGbjo6QmFzZTY0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5uZXIpXFxuXFx0Y291bnQoaW5uZXIpID4gX3BmX3Vkc3pfbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLWlvcHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRUJTIElvcHMvVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgdHlwZSdzIHN1cHBvcnRlZCByYW5nZXMgYW5kIHJhdGlvc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl92b2xpb3BzX2ZpeCA6PSBcXFwiTWF0Y2ggSW9wcy9UaHJvdWdocHV0IHRvIHRoZSB2b2x1bWUgdHlwZTogZ3AzIDMwMDAtODAwMDAgSU9QUyAobWF4IDUwMC9HaUIsIHRocm91Z2hwdXQgMTI1LTIwMDAgTWlCL3MgYW5kIGF0IG1vc3QgSU9QUy80KSwgaW8xIDEwMC02NDAwMCAobWF4IDUwL0dpQiksIGlvMiAxMDAtMjU2MDAwIChtYXggMTAwMC9HaUIpOyBncDIvc3QxL3NjMS9zdGFuZGFyZCBhY2NlcHQgbmVpdGhlciBwcm9wZXJ0eVxcXCJcXG5cXG5fcGZfdm9saW9wc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWxcXFwiXFxuXFxuX3BmX3ZvbGlvcHNfcmFuZ2UgOj0ge1xcXCJncDNcXFwiOiBbMzAwMCwgODAwMDBdLCBcXFwiaW8xXFxcIjogWzEwMCwgNjQwMDBdLCBcXFwiaW8yXFxcIjogWzEwMCwgMjU2MDAwXX1cXG5cXG5fcGZfdm9saW9wc19wZXJfZ2liIDo9IHtcXFwiZ3AzXFxcIjogNTAwLCBcXFwiaW8xXFxcIjogNTAsIFxcXCJpbzJcXFwiOiAxMDAwfVxcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPCBsb1xcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPiBoaVxcblxcbl9wZl92b2xpb3BzX2hhc19pb3BzKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpXFxuXFxuIyBJT1BTIOOBjOWei+OBlOOBqOOBrue1tuWvvuODrOODs+OCuOWkllxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyAldiBpcyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgJWQtJWQgZm9yICVzIHZvbHVtZXNcXFwiLCBbbiwgclswXSwgclsxXSwgdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyIDo9IF9wZl92b2xpb3BzX3JhbmdlW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dChuLCByWzBdLCByWzFdKVxcbn1cXG5cXG4jIElPUFMgOiDjgrXjgqTjgrrmr5Tjga7otoXpgY5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgZXhjZWVkcyB0aGUgbWF4aW11bSByYXRpbyBvZiAlZCBJT1BTIHBlciBHaUIgZm9yICVzIChTaXplICV2IEdpQiBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbbiwgcmF0aW8sIHZ0LCBzLCBzICogcmF0aW9dKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyYXRpbyA6PSBfcGZfdm9saW9wc19wZXJfZ2liW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2l6ZVxcXCIpKVxcblxcdG4gPiBzICogcmF0aW9cXG59XFxuXFxuIyBJb3BzIOOCkuWPl+OBkeS7mOOBkeOBquOBhOWei+OBqyBJb3BzIOOCkuaMh+WumlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcyB2b2x1bWVzICh2YWxpZCBvbmx5IGZvciBncDMsIGlvMSwgaW8yKTsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsXFxcIiwgW3Z0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0dnQgaW4ge1xcXCJncDJcXFwiLCBcXFwic3QxXFxcIiwgXFxcInNjMVxcXCIsIFxcXCJzdGFuZGFyZFxcXCJ9XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIilcXG59XFxuXFxuIyBUaHJvdWdocHV0IOOBryBncDMg5bCC55SoXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzIHZvbHVtZXMgKHZhbGlkIG9ubHkgZm9yIGdwMyk7IEVDMiByZWplY3RzIHRoZSBDcmVhdGVWb2x1bWUgY2FsbFxcXCIsIFt2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyh2dClcXG5cXHR2dCAhPSBcXFwiZ3AzXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQg44Gu57W25a++44Os44Oz44K4XFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGlzIG91dHNpZGUgdGhlIHN1cHBvcnRlZCByYW5nZSAxMjUtMjAwMCBmb3IgZ3AzIHZvbHVtZXNcXFwiLCBbdF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKSA9PSBcXFwiZ3AzXFxcIlxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dCh0LCAxMjUsIDIwMDApXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQgOiBJT1BTIOavlO+8iOacgOWkpyAwLjI1IE1pQi9zIHBlciBJT1BT77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGV4Y2VlZHMgdGhlIG1heGltdW0gcmF0aW8gb2YgMC4yNSBNaUIvcyBwZXIgcHJvdmlzaW9uZWQgSU9QUyAoJXYgSU9QUyBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbdCwgbiwgbiAvIDRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHR0ICogNCA+IG5cXG59XFxuXFxuIyBncDMg44GnIElvcHMg5pyq5oyH5a6a77yI44OH44OV44Kp44Or44OIIDMwMDDvvInjga7jgajjgY3jga4gVGhyb3VnaHB1dCDmr5RcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgJXYgTWlCL3MgZXhjZWVkcyA3NTAsIHRoZSBtYXhpbXVtIGZvciB0aGUgZGVmYXVsdCAzMDAwIElPUFMgKDAuMjUgTWlCL3MgcGVyIElPUFMpOyBwcm92aXNpb24gSW9wcyBleHBsaWNpdGx5IG9yIGxvd2VyIHRoZSB0aHJvdWdocHV0XFxcIiwgW3RdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHRub3QgX3BmX3ZvbGlvcHNfaGFzX2lvcHMobmFtZSlcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHR0ID4gNzUwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1pb3BzLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImlvMSBhbmQgaW8yIHZvbHVtZXMgcmVxdWlyZSB0aGUgSW9wcyBwcm9wZXJ0eVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgcGYtZWMyLXZvbHVtZS1pb3BzIHZhbGlkYXRlcyBJb3BzIHZhbHVlczsgdGhpcyBydWxlIGNvdmVycyB0aGVcXG4jIGNvbmRpdGlvbmFsIHJlcXVpcmVtZW50IChhYnNlbmNlKSB0aGF0IHRoZSBzY2hlbWEgY2Fubm90IGV4cHJlc3MuXFxuX3BmX2VjMnZpcl9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlcyB2b2x1bWVzIHJlcXVpcmUgSW9wczsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsIHdpdGggXFxcXFxcXCJUaGUgcGFyYW1ldGVyIGlvcHMgbXVzdCBiZSBzcGVjaWZpZWQgZm9yICVzIHZvbHVtZXMuXFxcXFxcXCJcXFwiLCBbdnQsIHZ0XSksXFxuXFx0XFxcIlNldCBJb3BzIChpbzE6IDEwMC02NDAwMCwgaW8yOiAxMDAtMjU2MDAwKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHZ0IGluIHtcXFwiaW8xXFxcIiwgXFxcImlvMlxcXCJ9XFxuXFx0X3BmX2VjMnZpcl9hYnNlbnQobmFtZSwgXFxcIklvcHNcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12b2x1bWUta21zLWVuY3J5cHRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJLbXNLZXlJZCBvbiBhIHZvbHVtZSByZXF1aXJlcyBFbmNyeXB0ZWQgdG8gYmUgdHJ1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJ2a2VfYmFkKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRW5jcnlwdGVkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfZWMydmtlX2JhZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVuY3J5cHRlZFxcXCIpID09IGZhbHNlXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWttcy1lbmNyeXB0ZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkttc0tleUlkXFxcIixcXG5cXHRcXFwiS21zS2V5SWQgaXMgc2V0IGJ1dCBFbmNyeXB0ZWQgaXMgbm90IHRydWU7IEVDMiByZWplY3RzIHRoZSB2b2x1bWUgd2l0aCBcXFxcXFxcIlRoZSBwYXJhbWV0ZXIgW0ttc0tleUlkXSByZXF1aXJlcyB0aGUgcGFyYW1ldGVyIEVuY3J5cHRlZCB0byBiZSBzZXQuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgRW5jcnlwdGVkOiB0cnVlIGFsb25nc2lkZSBLbXNLZXlJZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiS21zS2V5SWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0X3BmX2VjMnZrZV9iYWQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLXNpemUtbWluaW11bVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQlMgdm9sdW1lIHNpemUgbXVzdCBtZWV0IHRoZSB2b2x1bWUgdHlwZSBtaW5pbXVtIChpbzEvaW8yIDQgR2lCLCBzdDEvc2MxIDEyNSBHaUIpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IG1pbmltdW1zOiB0aGUgaGlzdG9yaWNhbCAxNjM4NCBHaUIgbWF4aW11bSBubyBsb25nZXIgaG9sZHNcXG4jIChhIDE3MDAwIEdpQiBncDMgZGVwbG95ZWQgY2xlYW4gb24gMjAyNi0wOS0wMykuXFxuX3BmX2VjMnZzbV9taW4gOj0ge1xcXCJpbzFcXFwiOiA0LCBcXFwiaW8yXFxcIjogNCwgXFxcInN0MVxcXCI6IDEyNSwgXFxcInNjMVxcXCI6IDEyNX1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtc2l6ZS1taW5pbXVtXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TaXplXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTaXplICV2IEdpQiBpcyBiZWxvdyB0aGUgJXYgR2lCIG1pbmltdW0gZm9yICVzIHZvbHVtZXMgKFxcXFxcXFwiJXMgdm9sdW1lcyBtdXN0IGJlIGF0IGxlYXN0ICV2IEdpQiBpbiBzaXplLlxcXFxcXFwiKVxcXCIsIFtzLCBtbiwgdnQsIHZ0LCBtbl0pLFxcblxcdFxcXCJSYWlzZSBTaXplIHRvIHRoZSB2b2x1bWUgdHlwZSBtaW5pbXVtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0bW4gOj0gX3BmX2VjMnZzbV9taW5bdnRdXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TaXplXFxcIikpXFxuXFx0cyA8IG1uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwYy1jaWRyLWJsb2NrLXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVlBDIElQdjQgQ0lEUiBibG9jayBuZXRtYXNrIG11c3QgYmUgYmV0d2VlbiAvMTYgYW5kIC8yOFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSB2YWxpZGF0ZXMgc3VibmV0IGNvbnRhaW5tZW50IChFMzA1OSkgYW5kIG92ZXJsYXAgKEUzMDYwKVxcbiMgYnV0IGFjY2VwdHMgYW55IFZQQyBuZXRtYXNrOyBFQzIgcmVqZWN0cyBhbnl0aGluZyBvdXRzaWRlIC8xNi4uLzI4LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwYy1jaWRyLWJsb2NrLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNpZHJCbG9ja1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVlBDIENJRFIgYmxvY2sgJyVzJyBoYXMgbmV0bWFzayAvJXY7IEVDMiBvbmx5IGFjY2VwdHMgLzE2IHRocm91Z2ggLzI4IChcXFxcXFxcIlRoZSBDSURSICclcycgaXMgaW52YWxpZC5cXFxcXFxcIilcXFwiLCBbYywgcCwgY10pLFxcblxcdFxcXCJVc2UgYSBuZXRtYXNrIGJldHdlZW4gLzE2IGFuZCAvMjhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDXFxcIilcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHRwIDo9IHRvX251bWJlcihzcGxpdChjLCBcXFwiL1xcXCIpWzFdKVxcblxcdF9wZl9lYzJ2Y3Nfb3V0KHApXFxufVxcblxcbl9wZl9lYzJ2Y3Nfb3V0KHApIGlmIHAgPCAxNlxcblxcbl9wZl9lYzJ2Y3Nfb3V0KHApIGlmIHAgPiAyOFxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2UtZ2F0ZXdheS1zZXJ2aWNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdhdGV3YXkgVlBDIGVuZHBvaW50cyBvbmx5IGV4aXN0IGZvciBTMyBhbmQgRHluYW1vREJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVnBjRW5kcG9pbnRUeXBlIGRlZmF1bHRzIHRvIEdhdGV3YXkgKG1lYXN1cmVkOiBhIHR5cGUtbGVzcyBlbmRwb2ludFxcbiMgZmFpbHMgd2l0aCBcXFwiRW5kcG9pbnQgdHlwZSAoR2F0ZXdheSkgLi4uXFxcIiBtZXNzYWdlcykuXFxuX3BmX2VjMnZnc19nYXRld2F5KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVnBjRW5kcG9pbnRUeXBlXFxcIiwgXFxcIkdhdGV3YXlcXFwiKSA9PSBcXFwiR2F0ZXdheVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS1nYXRld2F5LXNlcnZpY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJPbmx5IFMzIGFuZCBEeW5hbW9EQiBvZmZlciBHYXRld2F5IGVuZHBvaW50czsgXFxcXFxcXCIlc1xcXFxcXFwiIGZhaWxzIHdpdGggXFxcXFxcXCJFbmRwb2ludCB0eXBlIChHYXRld2F5KSBkb2VzIG5vdCBtYXRjaCBhdmFpbGFibGUgc2VydmljZSB0eXBlc1xcXFxcXFwiXFxcIiwgW2NvbmNhdChcXFwiLlxcXCIsIHBhcnRzKV0pLFxcblxcdFxcXCJVc2UgY29tLmFtYXpvbmF3cy48cmVnaW9uPi5zMyBvciAuZHluYW1vZGIsIG9yIHN3aXRjaCBWcGNFbmRwb2ludFR5cGUgdG8gSW50ZXJmYWNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvcHJpdmF0ZWxpbmsvZ2F0ZXdheS1lbmRwb2ludHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENFbmRwb2ludFxcXCIpXFxuXFx0X3BmX2VjMnZnc19nYXRld2F5KG5hbWUpXFxuXFx0c24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHNuKVxcblxcdHBhcnRzIDo9IHNwbGl0KHNuLCBcXFwiLlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDRcXG5cXHRwYXJ0c1swXSA9PSBcXFwiY29tXFxcIlxcblxcdHBhcnRzWzFdID09IFxcXCJhbWF6b25hd3NcXFwiXFxuXFx0bm90IHBhcnRzWzNdIGluIHtcXFwiczNcXFwiLCBcXFwiZHluYW1vZGJcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12cGNlLXNlcnZpY2UtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlZQQyBlbmRwb2ludCBzZXJ2aWNlIG5hbWVzIG11c3QgdXNlIHRoZSBkZXBsb3kgcmVnaW9uIHVubGVzcyBTZXJ2aWNlUmVnaW9uIGlzIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnZzcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3ByaXZhdGVsaW5rL3ByaXZhdGVsaW5rLWFjY2Vzcy1hd3Mtc2VydmljZXMuaHRtbFxcXCJcXG5cXG4jIE9ubHkgY29tLmFtYXpvbmF3cy48cmVnaW9uPi48c2VydmljZT4gbmFtZXMgd2hlcmUgdGhlIHRoaXJkIHNlZ21lbnQgaXNcXG4jIHJlZ2lvbi1zaGFwZWQ7IG5hbWVzIGxpa2UgY29tLmFtYXpvbmF3cy5zMy1nbG9iYWwuYWNjZXNzcG9pbnQgc3RheSBvdXQuXFxuX3BmX2VjMnZzcl9wYXJ0cyhuYW1lKSA6PSBwYXJ0cyBpZiB7XFxuXFx0c24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHNuKVxcblxcdHBhcnRzIDo9IHNwbGl0KHNuLCBcXFwiLlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDRcXG5cXHRwYXJ0c1swXSA9PSBcXFwiY29tXFxcIlxcblxcdHBhcnRzWzFdID09IFxcXCJhbWF6b25hd3NcXFwiXFxuXFx0cmVnZXgubWF0Y2goYF5bYS16XXsyfSgtW2Etel0rKSstWzAtOV0rJGAsIHBhcnRzWzJdKVxcbn1cXG5cXG5fcGZfZWMydnNyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS1zZXJ2aWNlLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2VydmljZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkVuZHBvaW50IHNlcnZpY2UgJyVzJyBuYW1lcyByZWdpb24gJXMgYnV0IHRoaXMgc3RhY2sgZGVwbG95cyB0byAlczsgd2l0aG91dCBTZXJ2aWNlUmVnaW9uIHRoZSBsb29rdXAgaXMgcmVnaW9uYWwgYW5kIHRoZSBjcmVhdGUgZmFpbHNcXFwiLCBbY29uY2F0KFxcXCIuXFxcIiwgcGFydHMpLCBwYXJ0c1syXSwgcmVnaW9uXSksXFxuXFx0XFxcIlVzZSBjb20uYW1hem9uYXdzLjxkZXBsb3ktcmVnaW9uPi48c2VydmljZT4sIG9yIHNldCBTZXJ2aWNlUmVnaW9uIGZvciBjcm9zcy1yZWdpb24gUHJpdmF0ZUxpbmtcXFwiLFxcblxcdF9wZl9lYzJ2c3JfdXJsKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdHBhcnRzIDo9IF9wZl9lYzJ2c3JfcGFydHMobmFtZSlcXG5cXHRwYXJ0c1syXSAhPSByZWdpb25cXG5cXHRfcGZfZWMydnNyX2Fic2VudChuYW1lLCBcXFwiU2VydmljZVJlZ2lvblxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3VibmV0SWRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEdhdGV3YXkgZW5kcG9pbnRzIChhbmQgUm91dGVUYWJsZUlkcyBvbmx5IG9uIEdhdGV3YXkpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMydnRjX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWMyLXZwY2VuZHBvaW50Lmh0bWxcXFwiXFxuXFxuX3BmX2VjMnZ0Y190eXBlKG5hbWUpIDo9IHQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlZwY0VuZHBvaW50VHlwZVxcXCIsIFxcXCJHYXRld2F5XFxcIilcXG59XFxuXFxuX3BmX2VjMnZ0Y19oYXMobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN1Ym5ldElkc1xcXCIsXFxuXFx0XFxcIkEgR2F0ZXdheSBlbmRwb2ludCBjYW5ub3QgdGFrZSBTdWJuZXRJZHMgKFxcXFxcXFwiU3VibmV0IElEcyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIEludGVyZmFjZSBhbmQgR2F0ZXdheUxvYWRCYWxhbmNlciB0eXBlIFZQQyBFbmRwb2ludHMuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFN1Ym5ldElkcywgb3Igc2V0IFZwY0VuZHBvaW50VHlwZTogSW50ZXJmYWNlXFxcIixcXG5cXHRfcGZfZWMydnRjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XFxcIilcXG5cXHRfcGZfZWMydnRjX3R5cGUobmFtZSkgPT0gXFxcIkdhdGV3YXlcXFwiXFxuXFx0X3BmX2VjMnZ0Y19oYXMobmFtZSwgXFxcIlN1Ym5ldElkc1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlVGFibGVJZHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkEgJXMgZW5kcG9pbnQgY2Fubm90IHRha2UgUm91dGVUYWJsZUlkczsgb25seSBHYXRld2F5IGVuZHBvaW50cyBhdHRhY2ggdG8gcm91dGUgdGFibGVzXFxcIiwgW3RdKSxcXG5cXHRcXFwiUmVtb3ZlIFJvdXRlVGFibGVJZHMsIG9yIHNldCBWcGNFbmRwb2ludFR5cGU6IEdhdGV3YXlcXFwiLFxcblxcdF9wZl9lYzJ2dGNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdHQgOj0gX3BmX2VjMnZ0Y190eXBlKG5hbWUpXFxuXFx0dCAhPSBcXFwiR2F0ZXdheVxcXCJcXG5cXHRpc19zdHJpbmcodClcXG5cXHRfcGZfZWMydnRjX2hhcyhuYW1lLCBcXFwiUm91dGVUYWJsZUlkc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNsdXN0ZXItbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQ1MgY2x1c3RlciBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAobWF4IDI1NSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpDbHVzdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY2x1c3Rlci1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DbHVzdGVyTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2x1c3Rlck5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDbHVzdGVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6Q2x1c3RlclxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNsdXN0ZXJOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItZGVmaW5pdGlvbnMtZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyRGVmaW5pdGlvbnMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjb250YWluZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzY2RlX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2Vjc2NkZV9tc2cgOj0gXFxcIlJlZ2lzdGVyVGFza0RlZmluaXRpb24gbmVlZHMgYXQgbGVhc3Qgb25lIGNvbnRhaW5lcjsgdGhlIHNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBsaXN0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIlxcblxcbl9wZl9lY3NjZGVfZml4IDo9IFxcXCJBZGQgYXQgbGVhc3Qgb25lIGVudHJ5IHRvIENvbnRhaW5lckRlZmluaXRpb25zXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBtYXJrcyBubyBUYXNrRGVmaW5pdGlvbiBwcm9wZXJ0eSBhcyByZXF1aXJlZCwgc28gYW5cXG4jIGFic2VudCBvciBlbXB0eSBDb250YWluZXJEZWZpbml0aW9ucyBzYWlscyB0aHJvdWdoIHNjaGVtYSB2YWxpZGF0aW9uIGFuZFxcbiMgZGllcyBhdCByZWdpc3RyYXRpb24uIGZsYXR0ZW5fbGlzdCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIGFic2VudCBhbmRcXG4jIGVtcHR5IGFsaWtlLCBzbyBib3RoIGJsb2NrcyByZWFkIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcylcXG4jIHRvIHRlbGwgYSBsaXRlcmFsIGVtcHR5IGxpc3QgZnJvbSBhbiB1bnJlc29sdmFibGUgdmFsdWUgc3VjaCBhcyBGbjo6SWYuXFxuX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvbnRhaW5lckRlZmluaXRpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShyYXcpXFxuXFx0Y291bnQocmF3KSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIE1lbW9yeSBtdXN0IG5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgc2luZ2xlIGNvbnRhaW5lcidzIGhhcmQgTWVtb3J5IGxpbWl0IGNhbm5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LlxcbiMgVGFzayBNZW1vcnkgYXJyaXZlcyBhcyBhIHN0cmluZyAoXFxcIjUxMlxcXCIpOyB0b19udW1iZXIgY292ZXJzIGJvdGggc3BlbGxpbmdzIGFuZFxcbiMgbWFrZXMgdGhlIHJ1bGUgc2tpcCB3aGVuIGVpdGhlciBzaWRlIGlzIHVucmVzb2x2YWJsZSBvciBHQi1zdWZmaXhlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LW92ZXItdGFza1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlcXFwiLCBbYy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciAnJXMnIHNldHMgTWVtb3J5ICV2IGFib3ZlIHRoZSB0YXNrLWxldmVsIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiVGhlICdtZW1vcnknIHNldHRpbmcgZm9yIGNvbnRhaW5lciAnJXMnIGlzIGdyZWF0ZXIgdGhhbiBmb3IgdGhlIHRhc2tcXFxcXFxcIlxcXCIsIFtjbmFtZSwgY20sIHRtLCBjbmFtZV0pLFxcblxcdFxcXCJMb3dlciB0aGUgY29udGFpbmVyIE1lbW9yeSB0byBhdCBtb3N0IHRoZSB0YXNrLWxldmVsIE1lbW9yeSwgb3IgcmFpc2UgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHRtIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1lbW9yeVxcXCIpKVxcblxcdHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdChjLnZhbHVlKVxcblxcdGNtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRjbSA+IHRtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIG5lZWRzIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbiB3aGVuIHRoZSB0YXNrIHNldHMgbm8gTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzbWVtcmVxX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgV2hlbiB0aGUgdGFzayBkZWZpbml0aW9uIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeSwgZXZlcnkgY29udGFpbmVyIG11c3Qgc2V0XFxuIyBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb24uIFByb3ZpbmcgdHJ1ZSBhYnNlbmNlIG5lZWRzIHRoZSBwcmVwcm9jZXNzZWRcXG4jIGRvY3VtZW50IChpbnB1dC5yZXNvdXJjZXMpOiByZXNvbHZlKCkgaXMgdW5kZWZpbmVkIGZvciBhIG1pc3Npbmcga2V5IGFuZCBmb3JcXG4jIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBhbGlrZSwgc28gaXQgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwiUmVmIHRvIGFcXG4jIHBhcmFtZXRlclxcXCIuIFRoZSBpc19vYmplY3QgZ3VhcmQgZmFpbHMgY2xvc2VkIGlmIHRoYXQgaW50ZXJuYWwgc2hhcGUgY2hhbmdlcy5cXG5fcGZfZWNzbWVtcmVxX3Rhc2tfbWVtb3J5X2Fic2VudChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1lbW9yeVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZFxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBuZWl0aGVyIE1lbW9yeSBub3IgTWVtb3J5UmVzZXJ2YXRpb24gYW5kIHRoZSB0YXNrIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mICdtZW1vcnknIG9yICdtZW1vcnlSZXNlcnZhdGlvbicgbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtjbmFtZV0pLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnksIG9yIGdpdmUgdGhlIGNvbnRhaW5lciBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb25cXFwiLFxcblxcdF9wZl9lY3NtZW1yZXFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdGNuYW1lIDo9IG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZW1vcnlSZXNlcnZhdGlvbiBtdXN0IG5vdCBleGNlZWQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1lbW9yeVJlc2VydmF0aW9uIGlzIGEgc29mdCBmbG9vciBhbmQgTWVtb3J5IGEgaGFyZCBjZWlsaW5nOyB0aGUgc2VydmljZVxcbiMgcmVqZWN0cyBhIGZsb29yIGFib3ZlIHRoZSBjZWlsaW5nLiB0b19udW1iZXIgZmFpbHMgKGFuZCB0aGUgcnVsZSBza2lwcykgd2hlblxcbiMgZWl0aGVyIHZhbHVlIGlzIGFic2VudCBvciB1bnJlc29sdmFibGUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlSZXNlcnZhdGlvblxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnlSZXNlcnZhdGlvbiAldiBhYm92ZSBNZW1vcnkgJXY7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIidtZW1vcnknIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICdtZW1vcnlSZXNlcnZhdGlvbidcXFxcXFxcIlxcXCIsIFtjbmFtZSwgbXIsIG1dKSxcXG5cXHRcXFwiTG93ZXIgTWVtb3J5UmVzZXJ2YXRpb24gdG8gYXQgbW9zdCBNZW1vcnksIG9yIHJhaXNlIE1lbW9yeVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkpXFxuXFx0bXIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkpXFxuXFx0bXIgPiBtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIGRpYWdub3N0aWMgcGVyIGR1cGxpY2F0ZWQgbGF0ZXIgb2NjdXJyZW5jZTsgb25seSBsaXRlcmFsIHN0cmluZyBuYW1lc1xcbiMgY2FuIGJlIGNvbXBhcmVkLCBzbyBhIFJlZi12YWx1ZWQgTmFtZSBza2lwcyBpdHMgcGFpcnMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZHVwbGljYXRlLWNvbnRhaW5lci1uYW1lc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5OYW1lXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgbmFtZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cXFxcXFxcIlxcXCIsIFtuYV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IGNvbnRhaW5lciBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGEgZGlzdGluY3QgTmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRuYSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobmEpXFxuXFx0bmEgPT0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTmFtZVxcXCIsIG51bGwpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVwaGVtZXJhbFN0b3JhZ2UgU2l6ZUluR2lCIG11c3QgYmUgMjEtMjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2VwaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWVwaGVtZXJhbHN0b3JhZ2UuaHRtbFxcXCJcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgY2FycmllcyBubyBtaW5pbXVtL21heGltdW0gZm9yIFNpemVJbkdpQiwgc28gMjEtMjAwIGlzXFxuIyBlbmZvcmNlZCBvbmx5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYmVsb3cgMjE7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbGVhc3QgMjFcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQiwgb3IgZHJvcCBFcGhlbWVyYWxTdG9yYWdlIHRvIGtlZXAgdGhlIGRlZmF1bHQgMjAgR2lCXFxcIixcXG5cXHRfcGZfZWNzZXBoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIikpXFxuXFx0cyA8IDIxXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYWJvdmUgMjAwOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJFcGhlbWVyYWxTdG9yYWdlIHNpemUgc2hvdWxkIGJlIGF0IG1vc3QgMjAwXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJVc2UgYSBzaXplIGJldHdlZW4gMjEgYW5kIDIwMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzID4gMjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVzc2VudGlhbC1jb250YWluZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXQgbGVhc3Qgb25lIGNvbnRhaW5lciBtdXN0IGJlIGVzc2VudGlhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFc3NlbnRpYWwgZGVmYXVsdHMgdG8gdHJ1ZSwgc28gdGhlIHJ1bGUgZmlyZXMgb25seSB3aGVuIGV2ZXJ5IGNvbnRhaW5lciBzYXlzXFxuIyBFc3NlbnRpYWw6IGZhbHNlIGV4cGxpY2l0bHkuIEEgY29udGFpbmVyIHdob3NlIEVzc2VudGlhbCBpcyB1bnJlc29sdmFibGUgKG9yXFxuIyBhIG5vbi1ib29sZWFuKSBicmVha3MgdGhlIGBldmVyeWAsIGFuZCB0aGUgcnVsZSBza2lwcyDigJQgYWJzZW5jZSBvZiBhblxcbiMgZXNzZW50aWFsIGNvbnRhaW5lciBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdFxcXCJFdmVyeSBjb250YWluZXIgc2V0cyBFc3NlbnRpYWw6IGZhbHNlOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUYXNrIGRlZmluaXRpb24gZG9lc24ndCBoYXZlIGFueSBlc3NlbnRpYWwgY29udGFpbmVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJNYXJrIGF0IGxlYXN0IG9uZSBjb250YWluZXIgRXNzZW50aWFsOiB0cnVlLCBvciBvbWl0IEVzc2VudGlhbCAoaXQgZGVmYXVsdHMgdG8gdHJ1ZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdGl0ZW1zIDo9IFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBjIGluIGl0ZW1zIHtcXG5cXHRcXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJFc3NlbnRpYWxcXFwiLCBudWxsKSA9PSBmYWxzZVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmUgTmV0d29ya01vZGUgJ2F3c3ZwYydcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NubV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2tfZGVmaW5pdGlvbl9wYXJhbWV0ZXJzLmh0bWwjbmV0d29ya19tb2RlXFxcIlxcblxcbiMgcmVzb2x2ZSgpIGNhbm5vdCB0ZWxsIFxcXCJhYnNlbnRcXFwiIGZyb20gXFxcInVucmVzb2x2YWJsZVxcXCIgKGJvdGggdW5kZWZpbmVkKSwgc28gdHJ1ZVxcbiMgYWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50OyBhIFJlZi12YWx1ZWQgTmV0d29ya01vZGVcXG4jIG5vIGxvbmdlciB0cmlwcyB0aGUgbm90LXNldCBibG9jay5cXG5fcGZfZWNzbm1fYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya01vZGVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmV0d29ya01vZGUgaXMgJyVzJyBidXQgdGFzayBkZWZpbml0aW9ucyByZXF1aXJpbmcgRkFSR0FURSBjb21wYXRpYmlsaXR5IG11c3QgdXNlICdhd3N2cGMnOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25tXSksXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRubSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIilcXG5cXHRpc19zdHJpbmcobm0pXFxuXFx0bm0gIT0gXFxcImF3c3ZwY1xcXCJcXG59XFxuXFxuIyBOZXR3b3JrTW9kZSDmnKrmjIflrprjgafjgoIgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiDjga9cXG4jIFxcXCJGYXJnYXRlIG9ubHkgc3VwcG9ydHMgbmV0d29yayBtb2RlICdhd3N2cGMnLlxcXCIg44Gn5aSx5pWX44GZ44KL77yIMjAyNi0wOS0wMSDlrp8gQVBJIOeiuuiqje+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0XFxcIk5ldHdvcmtNb2RlIGlzIG5vdCBzZXQsIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCBzZXQgaXQgdG8gJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJTZXQgTmV0d29ya01vZGUgdG8gJ2F3c3ZwYydcXFwiLFxcblxcdF9wZl9lY3NubV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cmMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXF1aXJlc0NvbXBhdGliaWxpdGllc1xcXCIpXFxuXFx0aXNfYXJyYXkocmMpXFxuXFx0XFxcIkZBUkdBVEVcXFwiIGluIHJjXFxuXFx0X3BmX2Vjc25tX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGQVJHQVRFIGNvbXBhdGliaWxpdHkgcmVxdWlyZXMgdGFzay1sZXZlbCBDcHUgYW5kIE1lbW9yeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2ZhcmdjbV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjcy10YXNrZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDQ3IGNoZWNrcyB0aGUgQ3B1L01lbW9yeSBwYWlyaW5nIG9ubHkgd2hlbiBib3RoIGFyZSBwcmVzZW50O1xcbiMgbGVhdmluZyBvbmUgb3V0IGVudGlyZWx5IGlzIGNhdWdodCBieSBub3RoaW5nIGJlZm9yZSByZWdpc3RyYXRpb24uIFRydWVcXG4jIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIHBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxuIyBmb3IgdGhlIGlkaW9tKS5cXG5fcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSkgaWYge1xcblxcdHNvbWUgcmMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRyYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXFxuX3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DcHVcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBDcHUgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdjcHUnIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIENwdSAoYW5kIE1lbW9yeSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJDcHVcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIixcXG5cXHRcXFwiUmVxdWlyZXNDb21wYXRpYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5IGlzIG1pc3Npbmc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVxdWlyZXMgdGhhdCAnbWVtb3J5JyBiZSBkZWZpbmVkIGF0IHRoZSB0YXNrIGxldmVsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnkgKGFuZCBDcHUpIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEZhcmdhdGUgY29tYmluYXRpb25zXFxcIixcXG5cXHRfcGZfZWNzZmFyZ2NtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSlcXG5cXHRfcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBcXFwiTWVtb3J5XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1jb2RlZGVwbG95LWxiXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNPREVfREVQTE9ZIGRlcGxveW1lbnQgY29udHJvbGxlciByZXF1aXJlcyBhIGxvYWQgYmFsYW5jZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBGaXJlcyBvbiBhIG1pc3Npbmcga2V5IG9yIGEgcHJlc2VudC1idXQtZW1wdHkgbGlzdDsgYW4gdW5yZXNvbHZhYmxlXFxuIyBMb2FkQmFsYW5jZXJzIHZhbHVlIHN0YXlzIHNpbGVudCAobWFya2VyIG9iamVjdHMgYXJlIFxcXCJwcmVzZW50XFxcIikuXFxuX3BmX2Vjc2NkbGJfbm9uZShuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkxvYWRCYWxhbmNlcnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9lY3NjZGxiX25vbmUobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGxicyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiTG9hZEJhbGFuY2Vyc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkobGJzKVxcblxcdGNvdW50KGxicykgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWNvZGVkZXBsb3ktbGJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb250cm9sbGVyXFxcIixcXG5cXHRcXFwiRGVwbG95bWVudENvbnRyb2xsZXIgaXMgQ09ERV9ERVBMT1kgYnV0IG5vIExvYWRCYWxhbmNlcnMgYXJlIGNvbmZpZ3VyZWQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcInRoZSBzZXJ2aWNlIHJlcXVpcmVzIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBMb2FkQmFsYW5jZXJzIGVudHJ5IHdpdGggYSB0YXJnZXQgZ3JvdXAsIG9yIHVzZSB0aGUgRUNTIGNvbnRyb2xsZXJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb250cm9sbGVyLlR5cGVcXFwiKSA9PSBcXFwiQ09ERV9ERVBMT1lcXFwiXFxuXFx0X3BmX2Vjc2NkbGJfbm9uZShuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLWRhZW1vbi1kZXNpcmVkLWNvdW50XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRBRU1PTiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRvZXMgbm90IGFjY2VwdCBEZXNpcmVkQ291bnRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZXNpcmVkQ291bnQgMCBmYWlscyB0b28gKHN2MDNiKSAtIGFueSBwcmVzZW5jZSBvZiB0aGUga2V5IGlzIHRoZSB2aW9sYXRpb24uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1kYWVtb24tZGVzaXJlZC1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVzaXJlZENvdW50XFxcIixcXG5cXHRcXFwiU2NoZWR1bGluZ1N0cmF0ZWd5IGlzIERBRU1PTiBidXQgRGVzaXJlZENvdW50IGlzIHNldDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGRhZW1vbiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRvZXMgbm90IHN1cHBvcnQgYSBkZXNpcmVkIGNvdW50IGZvciBzZXJ2aWNlc1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiUmVtb3ZlIERlc2lyZWRDb3VudCBmcm9tIERBRU1PTiBzZXJ2aWNlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2NoZWR1bGluZ1N0cmF0ZWd5XFxcIikgPT0gXFxcIkRBRU1PTlxcXCJcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRub3Qgb2JqZWN0LmdldChwcm9wcywgXFxcIkRlc2lyZWRDb3VudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1kZXBsb3ltZW50LXBlcmNlbnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGVwbG95bWVudENvbmZpZ3VyYXRpb24gcGVyY2VudCBib3VuZHMgKG1pbiA8PSAxMDAsIG1heCA+PSAxMDApXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtZGVwbG95bWVudC1wZXJjZW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NaW5pbXVtSGVhbHRoeVBlcmNlbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1pbmltdW1IZWFsdGh5UGVyY2VudCAldiBleGNlZWRzIDEwMDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwibWluaW11bUhlYWx0aHlQZXJjZW50IG11c3QgYmUgYXQgbW9zdCAxMDBcXFxcXFxcIlxcXCIsIFttaW5wXSksXFxuXFx0XFxcIktlZXAgTWluaW11bUhlYWx0aHlQZXJjZW50IGF0IDEwMCBvciBiZWxvd1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdG1pbnAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbmZpZ3VyYXRpb24uTWluaW11bUhlYWx0aHlQZXJjZW50XFxcIikpXFxuXFx0bWlucCA+IDEwMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWRlcGxveW1lbnQtcGVyY2VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbmZpZ3VyYXRpb24uTWF4aW11bVBlcmNlbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1heGltdW1QZXJjZW50ICV2IGlzIGJlbG93IDEwMDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwibWF4aW11bVBlcmNlbnQgbXVzdCBiZSBhdCBsZWFzdCAxMDBcXFxcXFxcIlxcXCIsIFttYXhwXSksXFxuXFx0XFxcIktlZXAgTWF4aW11bVBlcmNlbnQgYXQgMTAwIG9yIGFib3ZlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0bWF4cCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NYXhpbXVtUGVyY2VudFxcXCIpKVxcblxcdG1heHAgPCAxMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1mYXJnYXRlLXBsYWNlbWVudFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQbGFjZW1lbnQgY29uc3RyYWludHMgYW5kIHN0cmF0ZWdpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gRkFSR0FURVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWZhcmdhdGUtcGxhY2VtZW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2tleV0pLFxcblxcdHNwcmludGYoXFxcIiVzIGlzIHNldCBidXQgdGhlIEZBUkdBVEUgbGF1bmNoIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCB0YXNrIHBsYWNlbWVudDsgQ3JlYXRlU2VydmljZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtrZXldKSxcXG5cXHRcXFwiUmVtb3ZlIHBsYWNlbWVudCBjb25zdHJhaW50cy9zdHJhdGVnaWVzIGZyb20gRmFyZ2F0ZSBzZXJ2aWNlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTGF1bmNoVHlwZVxcXCIpID09IFxcXCJGQVJHQVRFXFxcIlxcblxcdHNvbWUga2V5IGluIHtcXFwiUGxhY2VtZW50Q29uc3RyYWludHNcXFwiLCBcXFwiUGxhY2VtZW50U3RyYXRlZ2llc1xcXCJ9XFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBba2V5XSkpXSkgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbGF1bmNoLXR5cGUtY2FwYWNpdHktcHJvdmlkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGF1bmNoVHlwZSBhbmQgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5IGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1sYXVuY2gtdHlwZS1jYXBhY2l0eS1wcm92aWRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMYXVuY2hUeXBlICclcycgYW5kIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneSBjYW5ub3QgYm90aCBiZSBzZXQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIlNwZWNpZnlpbmcgYm90aCBhIGxhdW5jaCB0eXBlIGFuZCBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLCBbbHRdKSxcXG5cXHRcXFwiUmVtb3ZlIExhdW5jaFR5cGUgb3IgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0bHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5MYXVuY2hUeXBlXFxcIilcXG5cXHRpc19zdHJpbmcobHQpXFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneVxcXCIpXSkgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbGItdGFyZ2V0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGxvYWQgYmFsYW5jZXIgZW50cnkgdGFrZXMgZWl0aGVyIFRhcmdldEdyb3VwQXJuIG9yIExvYWRCYWxhbmNlck5hbWUsIG5vdCBib3RoXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtbGItdGFyZ2V0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2Vyc1xcXCIsXFxuXFx0XFxcIkEgTG9hZEJhbGFuY2VycyBlbnRyeSBzZXRzIGJvdGggVGFyZ2V0R3JvdXBBcm4gYW5kIExvYWRCYWxhbmNlck5hbWU7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcImxvYWRCYWxhbmNlck5hbWUgYW5kIHRhcmdldEdyb3VwQXJuIGNhbm5vdCBib3RoIGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSBvZiBUYXJnZXRHcm91cEFybiAoQUxCL05MQikgb3IgTG9hZEJhbGFuY2VyTmFtZSAoQ0xCKSBwZXIgZW50cnlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvYWRCYWxhbmNlcnNcXFwiKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0bm90IG9iamVjdC5nZXQoZW50cnksIFxcXCJUYXJnZXRHcm91cEFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRub3Qgb2JqZWN0LmdldChlbnRyeSwgXFxcIkxvYWRCYWxhbmNlck5hbWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQ1Mgc2VydmljZSBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAobWF4IDI1NSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiU2VydmljZU5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDbHVzdGVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLW5ldHdvcmstY29uZmlnLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTmV0d29ya0NvbmZpZ3VyYXRpb24gcmVxdWlyZXMgYW4gYXdzdnBjIHRhc2sgZGVmaW5pdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIixcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lIHNoaXBzIEUzMDUyIGZvciB0aGUgaW52ZXJzZSAoYXdzdnBjIHRhc2sgZGVmaW5pdGlvbiB3aXRob3V0XFxuIyBOZXR3b3JrQ29uZmlndXJhdGlvbik7IHRoaXMgZGlyZWN0aW9uIGlzIHVuZ3VhcmRlZC4gT25seSBhbiBleHBsaWNpdFxcbiMgbm9uLWF3c3ZwYyBOZXR3b3JrTW9kZSBmaXJlcyAtIHRoZSBhYnNlbnQtbW9kZSBkZWZhdWx0IGlzIHVuYmVuY2hlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLW5ldHdvcmstY29uZmlnLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtDb25maWd1cmF0aW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJOZXR3b3JrQ29uZmlndXJhdGlvbiBpcyBzZXQgYnV0IHRoZSByZWZlcmVuY2VkIHRhc2sgZGVmaW5pdGlvbiB1c2VzIE5ldHdvcmtNb2RlICclcyc7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIk5ldHdvcmsgQ29uZmlndXJhdGlvbiBpcyBub3QgdmFsaWQgZm9yIHRoZSBnaXZlbiBuZXR3b3JrTW9kZSBvZiB0aGlzIHRhc2sgZGVmaW5pdGlvbi5cXFxcXFxcIlxcXCIsIFtubV0pLFxcblxcdFxcXCJVc2UgYW4gYXdzdnBjIHRhc2sgZGVmaW5pdGlvbiwgb3IgZHJvcCBOZXR3b3JrQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG5vdCBvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0dGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0dGQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0bm0gOj0gcmVzb2x2ZSh0ZCwgXFxcIlByb3BlcnRpZXMuTmV0d29ya01vZGVcXFwiKVxcblxcdGlzX3N0cmluZyhubSlcXG5cXHRubSAhPSBcXFwiYXdzdnBjXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLXBsYXRmb3JtLXZlcnNpb24tZWMyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBsYXRmb3JtVmVyc2lvbiBpcyBub3QgYWxsb3dlZCB3aXRoIHRoZSBFQzIgbGF1bmNoIHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1wbGF0Zm9ybS12ZXJzaW9uLWVjMlxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGxhdGZvcm1WZXJzaW9uXFxcIixcXG5cXHRcXFwiTGF1bmNoVHlwZSBpcyBFQzIgYnV0IFBsYXRmb3JtVmVyc2lvbiBpcyBzZXQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG11c3QgYmUgbnVsbCB3aGVuIHNwZWNpZnlpbmcgYW4gRUMyIGxhdW5jaCB0eXBlXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgUGxhdGZvcm1WZXJzaW9uIChpdCBhcHBsaWVzIHRvIEZhcmdhdGUgb25seSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFR5cGVcXFwiKSA9PSBcXFwiRUMyXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG5vdCBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUGxhdGZvcm1WZXJzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy10YXNrZGVmLWZhbWlseVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXNrIGRlZmluaXRpb24gRmFtaWx5IGFsbG93cyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtdGFza2RlZi1mYW1pbHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZhbWlseVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRmFtaWx5ICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAyNTUgY2hhcmFjdGVyc1xcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAyNTUgY2hhcmFjdGVyc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmFtaWx5XFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLWFsYi1zdWJuZXQtY291bnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBcHBsaWNhdGlvbiBsb2FkIGJhbGFuY2VycyBuZWVkIGF0IGxlYXN0IHR3byBzdWJuZXRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lbGJzY19hbGIobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJUeXBlXFxcIiwgXFxcImFwcGxpY2F0aW9uXFxcIikgPT0gXFxcImFwcGxpY2F0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWFsYi1zdWJuZXQtY291bnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN1Ym5ldHNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBhcHBsaWNhdGlvbiBsb2FkIGJhbGFuY2VyIGxpc3RzICV2IHN1Ym5ldChzKTsgRUxCIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBpbiBkaWZmZXJlbnQgQVpzIChcXFxcXFxcIkF0IGxlYXN0IHR3byBzdWJuZXRzIGluIHR3byBkaWZmZXJlbnQgQXZhaWxhYmlsaXR5IFpvbmVzIG11c3QgYmUgc3BlY2lmaWVkXFxcXFxcXCIpXFxcIiwgW2NvdW50KHN1YnMpXSksXFxuXFx0XFxcIkxpc3QgdHdvIG9yIG1vcmUgc3VibmV0cyBmcm9tIGRpZmZlcmVudCBBdmFpbGFiaWxpdHkgWm9uZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTG9hZEJhbGFuY2VyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0X3BmX2VsYnNjX2FsYihuYW1lKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHN1YnMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlN1Ym5ldHNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KHN1YnMpXFxuXFx0Y291bnQoc3VicykgPCAyXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItYXBwLWNvb2tpZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiYXBwX2Nvb2tpZSBzdGlja2luZXNzIHJlcXVpcmVzIGEgY29va2llIG5hbWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxiYWNuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9zdGlja3ktc2Vzc2lvbnMuaHRtbFxcXCJcXG5cXG5fcGZfZWxiYWNuX2F0dHIobmFtZSwga2V5KSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRvYmplY3QuZ2V0KGVudHJ5LCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IGtleVxcblxcdHYgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG59XFxuXFxuX3BmX2VsYmFjbl9oYXMobmFtZSwga2V5KSBpZiBfcGZfZWxiYWNuX2F0dHIobmFtZSwga2V5KVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItYXBwLWNvb2tpZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiLFxcblxcdFxcXCJzdGlja2luZXNzLnR5cGUgYXBwX2Nvb2tpZSBoYXMgbm8gc3RpY2tpbmVzcy5hcHBfY29va2llLmNvb2tpZV9uYW1lIChcXFxcXFxcIllvdSBtdXN0IHNldCBhbiBhcHBsaWNhdGlvbiBjb29raWUgbmFtZSB0byBlbmFibGUgc3RpY2tpbmVzcyBvZiB0eXBlICdhcHBfY29va2llJ1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIkFkZCB0aGUgc3RpY2tpbmVzcy5hcHBfY29va2llLmNvb2tpZV9uYW1lIGF0dHJpYnV0ZVxcXCIsXFxuXFx0X3BmX2VsYmFjbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdF9wZl9lbGJhY25fYXR0cihuYW1lLCBcXFwic3RpY2tpbmVzcy5lbmFibGVkXFxcIikgPT0gXFxcInRydWVcXFwiXFxuXFx0X3BmX2VsYmFjbl9hdHRyKG5hbWUsIFxcXCJzdGlja2luZXNzLnR5cGVcXFwiKSA9PSBcXFwiYXBwX2Nvb2tpZVxcXCJcXG5cXHRub3QgX3BmX2VsYmFjbl9oYXMobmFtZSwgXFxcInN0aWNraW5lc3MuYXBwX2Nvb2tpZS5jb29raWVfbmFtZVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItaGMtdGltZW91dC1pbnRlcnZhbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhlYWx0aCBjaGVjayB0aW1lb3V0IG11c3QgYmUgc3RyaWN0bHkgc21hbGxlciB0aGFuIHRoZSBpbnRlcnZhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXF1YWxpdHkgaXMgcmVqZWN0ZWQgdG9vIChiZW5jaGVkKTogdGhlIHJlcXVpcmVtZW50IGlzIHN0cmljdGx5IGxlc3MuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1oYy10aW1lb3V0LWludGVydmFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5IZWFsdGhDaGVja1RpbWVvdXRTZWNvbmRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIZWFsdGhDaGVja1RpbWVvdXRTZWNvbmRzICV2IGlzIG5vdCBzbWFsbGVyIHRoYW4gSGVhbHRoQ2hlY2tJbnRlcnZhbFNlY29uZHMgJXYgKFxcXFxcXFwiSGVhbHRoIGNoZWNrIHRpbWVvdXQgJyV2JyBtdXN0IGJlIHNtYWxsZXIgdGhhbiB0aGUgaW50ZXJ2YWwgJyV2J1xcXFxcXFwiKVxcXCIsIFt0LCBpLCB0LCBpXSksXFxuXFx0XFxcIktlZXAgdGhlIHRpbWVvdXQgc3RyaWN0bHkgYmVsb3cgdGhlIGludGVydmFsXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrVGltZW91dFNlY29uZHNcXFwiKSlcXG5cXHRpIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrSW50ZXJ2YWxTZWNvbmRzXFxcIikpXFxuXFx0dCA+PSBpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItbGFtYmRhLXRhcmdldC1wcm90b2NvbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYSB0YXJnZXQgZ3JvdXBzIGNhbm5vdCBzcGVjaWZ5IFByb3RvY29sXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYW1iZGEtdGFyZ2V0LXByb3RvY29sXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIsXFxuXFx0XFxcIlRhcmdldFR5cGUgbGFtYmRhIGNhbm5vdCB0YWtlIFByb3RvY29sIChcXFxcXFxcIlByb3RvY29sIGNhbm5vdCBiZSBzcGVjaWZpZWQgZm9yIHRhcmdldCBncm91cHMgd2l0aCB0YXJnZXQgdHlwZSAnbGFtYmRhJ1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQcm90b2NvbCBmcm9tIHRoZSBsYW1iZGEgdGFyZ2V0IGdyb3VwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldFR5cGVcXFwiKSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJQcm90b2NvbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBTEIgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaWRsZV90aW1lb3V0X291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPiA0MDAwXFxuXFxuX3BmX25vbl9hbGIobmFtZSkgaWYge1xcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIilcXG5cXHR0ICE9IFxcXCJhcHBsaWNhdGlvblxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXR0cmlidXRlcy4lZC5WYWx1ZVxcXCIsIFtpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQwMDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDQwMDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2FwcGxpY2F0aW9uLWxvYWQtYmFsYW5jZXJzLmh0bWwjY29ubmVjdGlvbi1pZGxlLXRpbWVvdXRcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0bm90IF9wZl9ub25fYWxiKG5hbWUpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9pZGxlX3RpbWVvdXRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTG9hZCBiYWxhbmNlciBuYW1lcyBhcmUgYXQgbW9zdCAzMiBhbHBoYW51bWVyaWMvaHlwaGVuIGNoYXJzIGFuZCBjYW5ub3QgYmVnaW4gd2l0aCBpbnRlcm5hbC0gb3IgYSBoeXBoZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VsYm5hbWVfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTG9hZEJhbGFuY2VyLmh0bWxcXFwiXFxuXFxuX3BmX2VsYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuLCB3aHldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0c3RhcnRzd2l0aChuLCBcXFwiaW50ZXJuYWwtXFxcIilcXG5cXHR3aHkgOj0gXFxcImNhbm5vdCBiZWdpbiB3aXRoICdpbnRlcm5hbC0nXFxcIlxcbn1cXG5cXG5fcGZfZWxibmFtZV9iYWQgY29udGFpbnMgW25hbWUsIG4sIHdoeV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRlbmRzd2l0aChuLCBcXFwiLVxcXCIpXFxuXFx0d2h5IDo9IFxcXCJjYW5ub3QgZW5kIHdpdGggYSBoeXBoZW4oLSlcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdHN0YXJ0c3dpdGgobiwgXFxcIi1cXFwiKVxcblxcdHdoeSA6PSBcXFwiY2Fubm90IGJlZ2luIHdpdGggYSBoeXBoZW4oLSlcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdGNvdW50KG4pID4gMzJcXG5cXHR3aHkgOj0gXFxcImNhbm5vdCBiZSBsb25nZXIgdGhhbiAnMzInIGNoYXJhY3RlcnNcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXltBLVphLXowLTktXSokYCwgbilcXG5cXHR3aHkgOj0gXFxcImNhbiBvbmx5IGNvbnRhaW4gY2hhcmFjdGVycyB0aGF0IGFyZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgaHlwaGVucygtKVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgbG9hZCBiYWxhbmNlciBuYW1lICclcycgJXM7IEVMQiByZWplY3RzIHRoZSBjcmVhdGUgY2FsbFxcXCIsIFtuLCB3aHldKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBsb2FkIGJhbGFuY2VyIHRvIGF0IG1vc3QgMzIgYWxwaGFudW1lcmljIG9yIGh5cGhlbiBjaGFyYWN0ZXJzLCB3aXRob3V0IGEgbGVhZGluZy90cmFpbGluZyBoeXBoZW4gb3IgdGhlIHJlc2VydmVkIGludGVybmFsLSBwcmVmaXhcXFwiLFxcblxcdF9wZl9lbGJuYW1lX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIG4sIHdoeV0gaW4gX3BmX2VsYm5hbWVfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItbGlzdGVuZXItcHJvdG9jb2wtbGItdHlwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxpc3RlbmVyIHByb3RvY29scyBtdXN0IG1hdGNoIHRoZSBsb2FkIGJhbGFuY2VyIHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcIixcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFsbG93LXNldHMgdmVyYmF0aW0gZnJvbSB0aGUgdHdvIGJlbmNoZWQgc2VydmljZSBlcnJvcnMuXFxuX3BmX2VsYmxwdF9hbGxvdyA6PSB7XFxcImFwcGxpY2F0aW9uXFxcIjoge1xcXCJIVFRQXFxcIiwgXFxcIkhUVFBTXFxcIn0sIFxcXCJuZXR3b3JrXFxcIjoge1xcXCJUQ1BcXFwiLCBcXFwiUVVJQ1xcXCIsIFxcXCJUQ1BfUVVJQ1xcXCIsIFxcXCJVRFBcXFwiLCBcXFwiVENQX1VEUFxcXCIsIFxcXCJUTFNcXFwifX1cXG5cXG5fcGZfZWxibHB0X3R5cGUobGIpIDo9IHQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tsYl0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHR0IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUeXBlXFxcIiwgXFxcImFwcGxpY2F0aW9uXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1saXN0ZW5lci1wcm90b2NvbC1sYi10eXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTGlzdGVuZXIgcHJvdG9jb2wgJyVzJyBpcyBub3QgdmFsaWQgZm9yIGEgJXMgbG9hZCBiYWxhbmNlciAoYWxsb3dlZDogJXYpXFxcIiwgW3Byb3RvLCB0LCBhbGxvd10pLFxcblxcdFxcXCJVc2UgSFRUUC9IVFRQUyBvbiBhcHBsaWNhdGlvbiBMQnMgYW5kIFRDUC9VRFAvVExTL1FVSUMgdmFyaWFudHMgb24gbmV0d29yayBMQnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTGlzdGVuZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcXFwiKVxcblxcdGxiIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXJuXFxcIilcXG5cXHRsYiBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcXFwiKVxcblxcdHQgOj0gX3BmX2VsYmxwdF90eXBlKGxiKVxcblxcdGFsbG93IDo9IF9wZl9lbGJscHRfYWxsb3dbdF1cXG5cXHRwcm90byA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sXFxcIilcXG5cXHRpc19zdHJpbmcocHJvdG8pXFxuXFx0bm90IHByb3RvIGluIGFsbG93XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItcnVsZS1wcmlvcml0eS11bmlxdWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMaXN0ZW5lciBydWxlcyBvbiB0aGUgc2FtZSBsaXN0ZW5lciBtdXN0IGhhdmUgZGlzdGluY3QgcHJpb3JpdGllc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIHJlc29sdmUoKSB0dXJucyBhIFJlZi9HZXRBdHQgdG8gYSBzaWJsaW5nIGxpc3RlbmVyIGludG8gaXRzIGxvZ2ljYWxcXG4jIGlkLCBzbyBib3RoIFJlZi13aXJlZCBhbmQgaWRlbnRpY2FsLWxpdGVyYWwgTGlzdGVuZXJBcm5zIGNvbXBhcmUgZXF1YWwuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1ydWxlLXByaW9yaXR5LXVuaXF1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIHIyLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByaW9yaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmlvcml0eSAldiBpcyBhbHNvIHVzZWQgYnkgJyVzJyBvbiB0aGUgc2FtZSBsaXN0ZW5lciAoXFxcXFxcXCJQcmlvcml0eSAnJXYnIGlzIGN1cnJlbnRseSBpbiB1c2VcXFxcXFxcIilcXFwiLCBbcDEsIHIxLCBwMV0pLFxcblxcdFxcXCJHaXZlIGVhY2ggcnVsZSBvbiBhIGxpc3RlbmVyIGEgZGlzdGluY3QgcHJpb3JpdHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUnVsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgcjEgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlXFxcIilcXG5cXHRzb21lIHIyIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyUnVsZVxcXCIpXFxuXFx0cjEgPCByMlxcblxcdGwxIDo9IHJlc29sdmUocjEsIFxcXCJQcm9wZXJ0aWVzLkxpc3RlbmVyQXJuXFxcIilcXG5cXHRsMiA6PSByZXNvbHZlKHIyLCBcXFwiUHJvcGVydGllcy5MaXN0ZW5lckFyblxcXCIpXFxuXFx0bDEgPT0gbDJcXG5cXHRwMSA6PSB0b19udW1iZXIocmVzb2x2ZShyMSwgXFxcIlByb3BlcnRpZXMuUHJpb3JpdHlcXFwiKSlcXG5cXHRwMiA6PSB0b19udW1iZXIocmVzb2x2ZShyMiwgXFxcIlByb3BlcnRpZXMuUHJpb3JpdHlcXFwiKSlcXG5cXHRwMSA9PSBwMlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXN0aWNraW5lc3MtdHlwZS1wcm90b2NvbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN0aWNraW5lc3MgdHlwZSBsYl9jb29raWUgbmVlZHMgYW4gSFRUUC1wcm90b2NvbCB0YXJnZXQgZ3JvdXAsIHNvdXJjZV9pcCBhIFRDUCBvbmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxic3RwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9zdGlja3ktc2Vzc2lvbnMuaHRtbFxcXCJcXG5cXG5fcGZfZWxic3RwX2F0dHIobmFtZSwga2V5KSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRvYmplY3QuZ2V0KGVudHJ5LCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IGtleVxcblxcdHYgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG59XFxuXFxuIyBPbmx5IHRoZSB0d28gYmVuY2hlZCBwYWlycyBhcmUgY2xhaW1lZC5cXG5fcGZfZWxic3RwX2JhZChuYW1lKSA6PSBbXFxcImxiX2Nvb2tpZVxcXCIsIFxcXCJUQ1BcXFwiXSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIpID09IFxcXCJUQ1BcXFwiXFxuXFx0X3BmX2VsYnN0cF9hdHRyKG5hbWUsIFxcXCJzdGlja2luZXNzLnR5cGVcXFwiKSA9PSBcXFwibGJfY29va2llXFxcIlxcbn1cXG5cXG5fcGZfZWxic3RwX2JhZChuYW1lKSA6PSBbXFxcInNvdXJjZV9pcFxcXCIsIFxcXCJIVFRQXFxcIl0gaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG5cXHRfcGZfZWxic3RwX2F0dHIobmFtZSwgXFxcInN0aWNraW5lc3MudHlwZVxcXCIpID09IFxcXCJzb3VyY2VfaXBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItc3RpY2tpbmVzcy10eXBlLXByb3RvY29sXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlN0aWNraW5lc3MgdHlwZSAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRhcmdldCBncm91cHMgd2l0aCB0aGUgJXMgcHJvdG9jb2xcXFwiLCBbcGFpclswXSwgcGFpclsxXV0pLFxcblxcdFxcXCJVc2Ugc291cmNlX2lwIHN0aWNraW5lc3MgZm9yIFRDUCB0YXJnZXQgZ3JvdXBzIGFuZCBjb29raWUgc3RpY2tpbmVzcyBmb3IgSFRUUCBvbmVzXFxcIixcXG5cXHRfcGZfZWxic3RwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0cGFpciA6PSBfcGZfZWxic3RwX2JhZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRjcC1oZWFsdGgtY2hlY2stcGF0aFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRDUCBoZWFsdGggY2hlY2tzIGNhbm5vdCB0YWtlIGEgaGVhbHRoIGNoZWNrIHBhdGhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxidGNocF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVUYXJnZXRHcm91cC5odG1sXFxcIlxcblxcbl9wZl9lbGJ0Y2hwX3RjcF9oYyhuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrUHJvdG9jb2xcXFwiKSA9PSBcXFwiVENQXFxcIlxcblxcbiMgSGVhbHRoQ2hlY2tQcm90b2NvbCBkZWZhdWx0cyB0byB0aGUgdGFyZ2V0IGdyb3VwIHByb3RvY29sIChiZW5jaGVkIHZpYSBlMDRiKS5cXG5fcGZfZWxidGNocF90Y3BfaGMobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJIZWFsdGhDaGVja1Byb3RvY29sXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xcXFwiKSA9PSBcXFwiVENQXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRjcC1oZWFsdGgtY2hlY2stcGF0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tQYXRoXFxcIixcXG5cXHRcXFwiVGhlIGVmZmVjdGl2ZSBoZWFsdGggY2hlY2sgcHJvdG9jb2wgaXMgVENQLCB3aGljaCBjYW5ub3QgdGFrZSBIZWFsdGhDaGVja1BhdGggKFxcXFxcXFwiSGVhbHRoIGNoZWNrIHBhdGhzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBUQ1AgaGVhbHRoIGNoZWNrc1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBIZWFsdGhDaGVja1BhdGgsIG9yIHVzZSBhbiBIVFRQL0hUVFBTIGhlYWx0aCBjaGVjayBwcm90b2NvbFxcXCIsXFxuXFx0X3BmX2VsYnRjaHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRfcGZfZWxidGNocF90Y3BfaGMobmFtZSlcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiSGVhbHRoQ2hlY2tQYXRoXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRnLWRlcmVnaXN0cmF0aW9uLWRlbGF5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZXJlZ19kZWxheV9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfZGVyZWdfZGVsYXlfb3V0KG4pIGlmIG4gPiAzNjAwXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi10Zy1kZXJlZ2lzdHJhdGlvbi1kZWxheS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXMuJWQuVmFsdWVcXFwiLCBbaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcImRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM2MDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyB0byBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMzYwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vZWRpdC10YXJnZXQtZ3JvdXAtYXR0cmlidXRlcy5odG1sI2RlcmVnaXN0cmF0aW9uLWRlbGF5XFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiKVxcblxcdGF0dHIgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChhdHRyKVxcblxcdG9iamVjdC5nZXQoYXR0ciwgXFxcIktleVxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzXFxcIlxcblxcdG51bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChhdHRyLCBcXFwiVmFsdWVcXFwiLCBudWxsKSlcXG5cXHRfcGZfZGVyZWdfZGVsYXlfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIG5hbWVzIGFyZSBhdCBtb3N0IDMyIGFscGhhbnVtZXJpYy9oeXBoZW4gY2hhcnMgYW5kIGNhbm5vdCBzdGFydCBvciBlbmQgd2l0aCBhIGh5cGhlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl90Z25hbWVfYmFkKG4pIDo9IFxcXCJjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMzIgY2hhcmFjdGVyc1xcXCIgaWYgY291bnQobikgPiAzMlxcblxcbl9wZl90Z25hbWVfYmFkKG4pIDo9IFxcXCJtYXkgdXNlIG9ubHkgYWxwaGFudW1lcmljcyBhbmQgaHlwaGVucywgYW5kIGNhbm5vdCBzdGFydCBvciBlbmQgd2l0aCBhIGh5cGhlblxcXCIgaWYge1xcblxcdGNvdW50KG4pIDw9IDMyXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW0EtWmEtejAtOV0oW0EtWmEtejAtOS1dKltBLVphLXowLTldKT8kYCwgbilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi10Zy1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgdGFyZ2V0IGdyb3VwIG5hbWUgJyVzJyAlczsgRUxCIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsXFxcIiwgW24sIHdoeV0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIHRhcmdldCBncm91cCB0byBhdCBtb3N0IDMyIGFscGhhbnVtZXJpYyBvciBoeXBoZW4gY2hhcmFjdGVycywgbm90IHN0YXJ0aW5nIG9yIGVuZGluZyB3aXRoIGEgaHlwaGVuXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0d2h5IDo9IF9wZl90Z25hbWVfYmFkKG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgbXVzdCBiZSAwIG9yIGJldHdlZW4gMzAgYW5kIDkwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiB7XFxuXFx0biA+IDBcXG5cXHRuIDwgMzBcXG59XFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIG4gPiA5MDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRnLXNsb3ctc3RhcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgaXMgJXYgYnV0IG11c3QgYmUgMCAoZGlzYWJsZWQpIG9yIGJldHdlZW4gMzAgYW5kIDkwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgc2xvd19zdGFydC5kdXJhdGlvbl9zZWNvbmRzIHRvIDAgb3IgYSB2YWx1ZSBiZXR3ZWVuIDMwIGFuZCA5MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2VkaXQtdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXMuaHRtbCNzbG93LXN0YXJ0LW1vZGVcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0YXR0ciA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGF0dHIpXFxuXFx0b2JqZWN0LmdldChhdHRyLCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9zbG93X3N0YXJ0X291dChudW0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLWlucHV0LXRyYW5zZm9ybWVyLXBsYWNlaG9sZGVyc1wiLFxuICAgIFwic2VydmljZVwiOiBcImV2ZW50c1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbnB1dFRlbXBsYXRlIHBsYWNlaG9sZGVycyBtdXN0IGJlIGRlY2xhcmVkIGluIElucHV0UGF0aHNNYXBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFdmVyeSA8cGxhY2Vob2xkZXI+IGluIElucHV0VGVtcGxhdGUgbXVzdCBiZSBkZWNsYXJlZCBpbiBJbnB1dFBhdGhzTWFwLFxcbiMgZXhjZXB0IHRoZSBhd3MuZXZlbnRzLiogcHJlZGVmaW5lZCB2YXJpYWJsZXMuIEFuIElucHV0UGF0aHNNYXAgdGhhdCBpcyBhblxcbiMgdW5yZXNvbHZhYmxlIGludHJpbnNpYyAobm9ybWFsaXplZCB3aXRoIF9fLXByZWZpeGVkIG1hcmtlciBrZXlzKSBtYWtlcyB0aGVcXG4jIGRlY2xhcmVkIHNldCB1bmtub3dhYmxlLCBzbyB0aGUgcnVsZSBza2lwcy5cXG5fcGZfZXZpdHBfcGxhY2Vob2xkZXJzKHRtcGwpIDo9IHtzdWJzdHJpbmcoZiwgMSwgY291bnQoZikgLSAyKSB8IHNvbWUgZiBpbiByZWdleC5maW5kX24oYDwoW0EtWmEtejAtOV8uLV0rKT5gLCB0bXBsLCAtMSl9XFxuXFxuX3BmX2V2aXRwX3BsYWluX21hcChwbSkgaWYge1xcblxcdGlzX29iamVjdChwbSlcXG5cXHRldmVyeSBrLCBfIGluIHBtIHtcXG5cXHRcXHRub3Qgc3RhcnRzd2l0aChrLCBcXFwiX19cXFwiKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1ldmVudHMtaW5wdXQtdHJhbnNmb3JtZXItcGxhY2Vob2xkZXJzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRhcmdldHMuJWQuSW5wdXRUcmFuc2Zvcm1lci5JbnB1dFRlbXBsYXRlXFxcIiwgW3QuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJJbnB1dFRlbXBsYXRlIHVzZXMgPCVzPiBidXQgSW5wdXRQYXRoc01hcCBkb2VzIG5vdCBkZWNsYXJlIGl0OyBQdXRUYXJnZXRzIGZhaWxzIHdpdGggXFxcXFxcXCJJbnB1dFRlbXBsYXRlIGZvciB0YXJnZXQgJXMgY29udGFpbnMgaW52YWxpZCBwbGFjZWhvbGRlciAlc1xcXFxcXFwiXFxcIiwgW3AsIHRpZCwgcF0pLFxcblxcdHNwcmludGYoXFxcIkFkZCAnJXMnIHRvIElucHV0UGF0aHNNYXAsIG9yIHJlbW92ZSB0aGUgcGxhY2Vob2xkZXIgZnJvbSB0aGUgdGVtcGxhdGVcXFwiLCBbcF0pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L3VzZXJndWlkZS9lYi10cmFuc2Zvcm0tdGFyZ2V0LWlucHV0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkV2ZW50czo6UnVsZVxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRzXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRpdCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJJbnB1dFRyYW5zZm9ybWVyXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoaXQpXFxuXFx0dG1wbCA6PSBvYmplY3QuZ2V0KGl0LCBcXFwiSW5wdXRUZW1wbGF0ZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRtcGwpXFxuXFx0cG0gOj0gb2JqZWN0LmdldChpdCwgXFxcIklucHV0UGF0aHNNYXBcXFwiLCB7fSlcXG5cXHRfcGZfZXZpdHBfcGxhaW5fbWFwKHBtKVxcblxcdHNvbWUgcCBpbiBfcGZfZXZpdHBfcGxhY2Vob2xkZXJzKHRtcGwpXFxuXFx0bm90IHN0YXJ0c3dpdGgocCwgXFxcImF3cy5ldmVudHMuXFxcIilcXG5cXHRub3QgcG1bcF1cXG5cXHR0aWQgOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiSWRcXFwiLCBcXFwiPHRhcmdldD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWV2ZW50cy1wYXR0ZXJuLWVtcHR5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIGVtcHR5IEV2ZW50UGF0dGVybiBjb3VudHMgYXMgbm8gcGF0dGVybiBhdCBhbGxcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRjMwNTggZmlyZXMgd2hlbiB0aGUgRXZlbnRQYXR0ZXJuIEtFWSBpcyBhYnNlbnQsIGJ1dCBhbiBlbXB0eVxcbiMgb2JqZWN0IHBhc3NlcyB0aGUgc2NoZW1hIGFuZCB0aGUgaGFuZGxlciB0aGVuIHRyZWF0cyBpdCBhcyBubyBwYXR0ZXJuIGF0XFxuIyBhbGwuIEZpcmVzIG9ubHkgd2hlbiBTY2hlZHVsZUV4cHJlc3Npb24gaXMgYWxzbyBsaXRlcmFsbHkgYWJzZW50IOKAlCB0aGVcXG4jIGJlbmNoLXZlcmlmaWVkIHNoYXBlIChhYnNlbmNlIHByb3ZlbiB2aWEgaW5wdXQucmVzb3VyY2VzLCBzZWUgQUdFTlRTLm1kKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1wYXR0ZXJuLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm5cXFwiLFxcblxcdFxcXCJFdmVudFBhdHRlcm4gaXMgYW4gZW1wdHkgb2JqZWN0LCB3aGljaCB0aGUgaGFuZGxlciB0cmVhdHMgYXMgbm8gcGF0dGVybjsgUHV0UnVsZSBmYWlscyB3aXRoIFxcXFxcXFwiUGFyYW1ldGVyKHMpIEV2ZW50UGF0dGVybiBvciBTY2hlZHVsZUV4cHJlc3Npb24gbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkdpdmUgRXZlbnRQYXR0ZXJuIGF0IGxlYXN0IG9uZSBtYXRjaGVyIChlLmcuIHNvdXJjZSksIG9yIHVzZSBTY2hlZHVsZUV4cHJlc3Npb24gaW5zdGVhZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvdXNlcmd1aWRlL2ViLWV2ZW50LXBhdHRlcm5zLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkV2ZW50czo6UnVsZVxcXCIpXFxuXFx0ZXAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm5cXFwiKVxcblxcdGlzX29iamVjdChlcClcXG5cXHRjb3VudChlcCkgPT0gMFxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJTY2hlZHVsZUV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLXBhdHRlcm4tc2NhbGFyLXZhbHVlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV2ZW50IHBhdHRlcm4gdmFsdWVzIG11c3QgYmUgYXJyYXlzIG9yIG9iamVjdHMsIG5vdCBzY2FsYXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkV2ZW50czo6UnVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9ldnBzdl9zY2FsYXIodikgaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX2V2cHN2X3NjYWxhcih2KSBpZiBpc19udW1iZXIodilcXG5cXG5fcGZfZXZwc3Zfc2NhbGFyKHYpIGlmIGlzX2Jvb2xlYW4odilcXG5cXG4jIEV2ZXJ5IG1hdGNoZXIgaW4gYW4gZXZlbnQgcGF0dGVybiBtdXN0IGJlIGFuIGFycmF5IChvciBhbiBvYmplY3QgaG9sZGluZ1xcbiMgb3BlcmF0b3JzKTsgYSBiYXJlIHNjYWxhciBpcyByZWplY3RlZCBwZXIga2V5LiBPbmx5IHRoZSB0b3AgbGV2ZWwgaXNcXG4jIGNoZWNrZWQg4oCUIHRoYXQgaXMgdGhlIGJlbmNoLXZlcmlmaWVkIHNjb3BlLCBhbmQgaXQgZG9kZ2VzIG9wZXJhdG9yIG9iamVjdHNcXG4jIGxpa2Uge1xcXCJwcmVmaXhcXFwiOiBcXFwiLi4uXFxcIn0gdGhhdCBsZWdhbGx5IGNhcnJ5IHNjYWxhcnMgZGVlcGVyIGRvd24uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1ldmVudHMtcGF0dGVybi1zY2FsYXItdmFsdWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRXZlbnRQYXR0ZXJuLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJFdmVudFBhdHRlcm4ga2V5ICclcycgaG9sZHMgYSBiYXJlIHNjYWxhcjsgUHV0UnVsZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJFdmVudCBwYXR0ZXJuIGlzIG5vdCB2YWxpZC4gUmVhc29uOiBcXFxcXFxcXFxcXFxcXFwiJXNcXFxcXFxcXFxcXFxcXFwiIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5XFxcXFxcXCJcXFwiLCBbaywga10pLFxcblxcdHNwcmludGYoXFxcIldyYXAgdGhlIHZhbHVlIGluIGFuIGFycmF5OiBcXFxcXFxcIiVzXFxcXFxcXCI6IFsuLi5dXFxcIiwgW2tdKSxcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC91c2VyZ3VpZGUvZWItZXZlbnQtcGF0dGVybnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRlcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIpXFxuXFx0aXNfb2JqZWN0KGVwKVxcblxcdHNvbWUgaywgdiBpbiBlcFxcblxcdF9wZl9ldnBzdl9zY2FsYXIodilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1kZmNjLXJlcXVpcmVkLWNvbmZpZ3NcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFbmFibGVkIGZvcm1hdCBjb252ZXJzaW9uIG5lZWRzIGlucHV0LCBvdXRwdXQsIGFuZCBzY2hlbWEgY29uZmlnc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgdGhyZWUgc3ViLWNvbmZpZ3VyYXRpb25zIGFyZSB1bmNvbmRpdGlvbmFsbHkgcmVxdWlyZWQgb25jZSBFbmFibGVkXFxuIyBpcyB0cnVlOyB0aGUgc2VydmljZSByZWplY3RzIGVhY2ggYWJzZW5jZSBpbiB0dXJuLiBSZWFkIGZyb20gdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maGRmY2Nfb3V0ZXIobmFtZSkgOj0gYyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjKVxcbn1cXG5cXG5fcGZfZmhkZmNjX2NvbmYobmFtZSkgOj0gYyBpZiB7XFxuXFx0eCA6PSBfcGZfZmhkZmNjX291dGVyKG5hbWUpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHgsIFxcXCJEYXRhRm9ybWF0Q29udmVyc2lvbkNvbmZpZ3VyYXRpb25cXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1kZmNjLXJlcXVpcmVkLWNvbmZpZ3NcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5EYXRhRm9ybWF0Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIkRhdGEgZm9ybWF0IGNvbnZlcnNpb24gaXMgZW5hYmxlZCB3aXRob3V0ICVzOyB0aGUgc3RyZWFtIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiJXMgbXVzdCBub3QgYmUgbnVsbFxcXFxcXFwiXFxcIiwgW2ssIGtdKSxcXG5cXHRcXFwiU2V0IElucHV0Rm9ybWF0Q29uZmlndXJhdGlvbiwgT3V0cHV0Rm9ybWF0Q29uZmlndXJhdGlvbiwgYW5kIFNjaGVtYUNvbmZpZ3VyYXRpb24gdG9nZXRoZXJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS1kYXRhZm9ybWF0Y29udmVyc2lvbmNvbmZpZ3VyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0YyA6PSBfcGZfZmhkZmNjX2NvbmYobmFtZSlcXG5cXHRjb2VyY2VfdG9fYm9vbChvYmplY3QuZ2V0KGMsIFxcXCJFbmFibGVkXFxcIiwgZmFsc2UpKSA9PSB0cnVlXFxuXFx0c29tZSBrIGluIHtcXFwiSW5wdXRGb3JtYXRDb25maWd1cmF0aW9uXFxcIiwgXFxcIk91dHB1dEZvcm1hdENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiU2NoZW1hQ29uZmlndXJhdGlvblxcXCJ9XFxuXFx0b2JqZWN0LmdldChjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtZHluYW1pYy1wYXJ0aXRpb25pbmctYnVmZmVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRHluYW1pYyBwYXJ0aXRpb25pbmcgbmVlZHMgYSA2NCBNQiBidWZmZXIgZmxvb3JcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNjaGVtYSBmbG9vciBpcyAxOyB0aGUgNjQgZmxvb3Igb25seSBhcHBsaWVzIHdpdGggZHluYW1pY1xcbiMgcGFydGl0aW9uaW5nIG9uIC0gYSBjb25kaXRpb25hbCBib3VuZCBubyBzY2hlbWEgbGF5ZXIgY2FuIGV4cHJlc3MuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1idWZmZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uQnVmZmVyaW5nSGludHMuU2l6ZUluTUJzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTaXplSW5NQnMgJXYgd2l0aCBkeW5hbWljIHBhcnRpdGlvbmluZzsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkJ1ZmZlcmluZ0hpbnRzLlNpemVJbk1CcyBtdXN0IGJlIGF0IGxlYXN0IDY0IHdoZW4gRHluYW1pYyBQYXJ0aXRpb25pbmcgaXMgZW5hYmxlZC5cXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlJhaXNlIFNpemVJbk1CcyB0byBhdCBsZWFzdCA2NFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMta2luZXNpc2ZpcmVob3NlLWRlbGl2ZXJ5c3RyZWFtLWR5bmFtaWNwYXJ0aXRpb25pbmdjb25maWd1cmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5EeW5hbWljUGFydGl0aW9uaW5nQ29uZmlndXJhdGlvbi5FbmFibGVkXFxcIikpID09IHRydWVcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uQnVmZmVyaW5nSGludHMuU2l6ZUluTUJzXFxcIikpXFxuXFx0cyA8IDY0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtZHluYW1pYy1wYXJ0aXRpb25pbmctcHJlZml4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRHluYW1pYyBwYXJ0aXRpb25pbmcgbmVlZHMgcGFydGl0aW9uIG5hbWVzcGFjZXMgaW4gdGhlIHByZWZpeFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBQYXJ0aXRpb25lZCBkZWxpdmVyeSBoYXMgbm93aGVyZSB0byBwdXQgdGhlIGtleXMgdW5sZXNzIHRoZSBwcmVmaXhcXG4jIGludGVycG9sYXRlcyB0aGVtIHZpYSAhe3BhcnRpdGlvbktleUZyb20uLi59IG5hbWVzcGFjZXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1wcmVmaXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uUHJlZml4XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmVmaXggJyVzJyBoYXMgbm8gcGFydGl0aW9uIG5hbWVzcGFjZTsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIFByZWZpeCBzaG91bGQgY29udGFpbiBEeW5hbWljIFBhcnRpdGlvbmluZyBuYW1lc3BhY2VzIHdoZW4gRHluYW1pYyBQYXJ0aXRpb25pbmcgaXMgZW5hYmxlZFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiSW50ZXJwb2xhdGUgYXQgbGVhc3Qgb25lICF7cGFydGl0aW9uS2V5RnJvbVF1ZXJ5Oi4uLn0gb3IgIXtwYXJ0aXRpb25LZXlGcm9tTGFtYmRhOi4uLn0gaW50byB0aGUgcHJlZml4XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ZpcmVob3NlL2xhdGVzdC9kZXYvZHluYW1pYy1wYXJ0aXRpb25pbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLkR5bmFtaWNQYXJ0aXRpb25pbmdDb25maWd1cmF0aW9uLkVuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLlByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHApXFxuXFx0bm90IGNvbnRhaW5zKHAsIFxcXCIhe3BhcnRpdGlvbktleVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2Uta2luZXNpcy1zb3VyY2UtY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiS2luZXNpc1N0cmVhbUFzU291cmNlIHN0cmVhbXMgbmVlZCBLaW5lc2lzU3RyZWFtU291cmNlQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoaXMgZGlyZWN0aW9uIGlzIGEgZGVwbG95IGZhaWx1cmUgLSBEaXJlY3RQdXQgd2l0aCBhIChzaWxlbnRseVxcbiMgaWdub3JlZCkgc291cmNlIGNvbmZpZ3VyYXRpb24gZGVwbG95cyBmaW5lIChiZW5jaCBmMDYpLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfZmhrc2NfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIktpbmVzaXNTdHJlYW1Tb3VyY2VDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWtpbmVzaXMtc291cmNlLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNvdXJjZUNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJEZWxpdmVyeVN0cmVhbVR5cGUgaXMgS2luZXNpc1N0cmVhbUFzU291cmNlIGJ1dCBubyBzb3VyY2UgY29uZmlndXJhdGlvbiBpcyBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJLaW5lc2lzU291cmNlU3RyZWFtQ29uZmlnIGlzIG1hbmRhdG9yeSBmb3IgS2luZXNpc1N0cmVhbUFzU291cmNlIHN0cmVhbSB0eXBlLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIEtpbmVzaXNTdHJlYW1Tb3VyY2VDb25maWd1cmF0aW9uIHdpdGggdGhlIHN0cmVhbSBBUk4gYW5kIHJvbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWxpdmVyeVN0cmVhbVR5cGVcXFwiKSA9PSBcXFwiS2luZXNpc1N0cmVhbUFzU291cmNlXFxcIlxcblxcdF9wZl9maGtzY19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2Utb25lLWRlc3RpbmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBkZWxpdmVyeSBzdHJlYW0gdGFrZXMgZXhhY3RseSBvbmUgZGVzdGluYXRpb24gY29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGRpcmVjdGlvbnMgZGVwbG95LXZlcmlmaWVkOiBub25lIHNldCwgYW5kIHR3byBzZXQuIEtleSBwcmVzZW5jZSBpc1xcbiMgcmVhZCBmcm9tIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maG9kX2Rlc3RzIDo9IHtcXG5cXHRcXFwiUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJFeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiUmVkc2hpZnREZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJFbGFzdGljc2VhcmNoRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiQW1hem9ub3BlbnNlYXJjaHNlcnZpY2VEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBbWF6b25PcGVuU2VhcmNoU2VydmVybGVzc0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlNwbHVua0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkh0dHBFbmRwb2ludERlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlNub3dmbGFrZURlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkljZWJlcmdEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLW9uZS1kZXN0aW5hdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIGRlc3RpbmF0aW9uIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJFeGFjdGx5IG9uZSBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uIGlzIHN1cHBvcnRlZCBmb3IgYSBGaXJlaG9zZVxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IGV4YWN0bHkgb25lICpEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZmhvZF9kZXN0czsgb2JqZWN0LmdldChwcm9wcywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIl0pXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtczMtYmFja3VwLWNvbmZpZ1wiLFxuICAgIFwic2VydmljZVwiOiBcImZpcmVob3NlXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsaW5nIFMzIGJhY2t1cCBuZWVkcyBTM0JhY2t1cENvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQmFja3VwIG1vZGUgcG9pbnRzIGRlbGl2ZXJpZXMgYXQgYSBzZWNvbmQgYnVja2V0IHRoYXQgbXVzdCBiZVxcbiMgY29uZmlndXJlZC4gU2NvcGVkIHRvIHRoZSBiZW5jaGVkIEV4dGVuZGVkUzMgZGVzdGluYXRpb24uIEFic2VuY2UgaXNcXG4jIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maHNiY19vdXRlcihuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJFeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZmlyZWhvc2UtczMtYmFja3VwLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5TM0JhY2t1cENvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJTM0JhY2t1cE1vZGUgaXMgRW5hYmxlZCBidXQgUzNCYWNrdXBDb25maWd1cmF0aW9uIGlzIG5vdCBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJTMyBiYWNrdXAgZGVzdGluYXRpb24gY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCB3aGVuIGVuYWJsaW5nIFMzIGJhY2t1cC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBTM0JhY2t1cENvbmZpZ3VyYXRpb24gKGJ1Y2tldCBhbmQgcm9sZSksIG9yIGRyb3AgUzNCYWNrdXBNb2RlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0tZXh0ZW5kZWRzM2Rlc3RpbmF0aW9uY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uUzNCYWNrdXBNb2RlXFxcIikgPT0gXFxcIkVuYWJsZWRcXFwiXFxuXFx0eCA6PSBfcGZfZmhzYmNfb3V0ZXIobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHgsIFxcXCJTM0JhY2t1cENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLWlkZW50aXR5LXBvbGljeS1uby1wcmluY2lwYWxcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSWRlbnRpdHkgcG9saWNpZXMgY2Fubm90IGNhcnJ5IGEgUHJpbmNpcGFsIGZpZWxkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBJZGVudGl0eSBwb2xpY2llcyBhdHRhY2ggdG8gdGhlaXIgcHJpbmNpcGFsIGltcGxpY2l0bHk7IHRoZSBmaWVsZFxcbiMgYmVsb25ncyB0byByZXNvdXJjZS1iYXNlZCBwb2xpY2llcy5cXG5fcGZfaWlucF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lpbnBfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2lpbnBfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lpbnBfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1pZGVudGl0eS1wb2xpY3ktbm8tcHJpbmNpcGFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuUHJpbmNpcGFsXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRcXFwiSWRlbnRpdHkgcG9saWN5IHN0YXRlbWVudCBoYXMgYSBQcmluY2lwYWwgZmllbGQ7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlBvbGljeSBkb2N1bWVudCBzaG91bGQgbm90IHNwZWNpZnkgYSBwcmluY2lwYWwuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgUHJpbmNpcGFsIChpZGVudGl0eSBwb2xpY2llcyBhcHBseSB0byB0aGUgaWRlbnRpdHkgdGhleSBhdHRhY2ggdG8pXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9paW5wX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWlucF9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdG9iamVjdC5nZXQocywgXFxcIlByaW5jaXBhbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0taW5saW5lLXBvbGljeS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklubGluZSBwb2xpY3kgZG9jdW1lbnRzIGFyZSBsaW1pdGVkIHBlciBpZGVudGl0eSAocm9sZSAxMDI0MCAvIGdyb3VwIDUxMjAgLyB1c2VyIDIwNDggY2hhcmFjdGVycylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06OlVzZXJQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2lubGluZV9wb2xpY3lfbGltaXRzIDo9IHtcXG5cXHRcXFwiQVdTOjpJQU06OlBvbGljeVxcXCI6IDEwMjQwLFxcblxcdFxcXCJBV1M6OklBTTo6Um9sZVBvbGljeVxcXCI6IDEwMjQwLFxcblxcdFxcXCJBV1M6OklBTTo6VXNlclBvbGljeVxcXCI6IDIwNDgsXFxuXFx0XFxcIkFXUzo6SUFNOjpHcm91cFBvbGljeVxcXCI6IDUxMjAsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLWlubGluZS1wb2xpY3ktc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBvbGljeURvY3VtZW50IGlzICVkIGNoYXJhY3RlcnMgKEpTT04gd2l0aG91dCB3aGl0ZXNwYWNlKSBidXQgdGhlIGlubGluZSBwb2xpY3kgbGltaXQgZm9yICVzIGlzICVkIChyb2xlOiAxMDI0MCwgZ3JvdXA6IDUxMjAsIHVzZXI6IDIwNDgpXFxcIiwgW3NpemUsIHJ0eXBlLCBsaW1pdF0pLFxcblxcdFxcXCJNb3ZlIHN0YXRlbWVudHMgaW50byBtYW5hZ2VkIHBvbGljaWVzIG9yIHNob3J0ZW4gdGhlIGRvY3VtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgbGltaXQgaW4gX3BmX2lubGluZV9wb2xpY3lfbGltaXRzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdGRvYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIilcXG5cXHRpc19vYmplY3QoZG9jKVxcblxcdHNpemUgOj0gY291bnQoanNvbi5tYXJzaGFsKGRvYykpXFxuXFx0c2l6ZSA+IGxpbWl0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLWluc3RhbmNlLXByb2ZpbGUtc2luZ2xlLXJvbGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gaW5zdGFuY2UgcHJvZmlsZSBob2xkcyBleGFjdGx5IG9uZSByb2xlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6SW5zdGFuY2VQcm9maWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgXFxcInF1b3RhXFxcIiBpcyBhIGhhcmQgbGltaXQgb2Ygb25lIHJvbGU7IHRoZSBzY2hlbWEgaGFzIG5vIG1heEl0ZW1zLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLWluc3RhbmNlLXByb2ZpbGUtc2luZ2xlLXJvbGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvbGVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCByb2xlcyBvbiBvbmUgaW5zdGFuY2UgcHJvZmlsZTsgdGhlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQ2Fubm90IGV4Y2VlZCBxdW90YSBmb3IgSW5zdGFuY2VTZXNzaW9uc1Blckluc3RhbmNlUHJvZmlsZTogMVxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSByb2xlIHBlciBpbnN0YW5jZSBwcm9maWxlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtaWFtLWluc3RhbmNlcHJvZmlsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06Okluc3RhbmNlUHJvZmlsZVxcXCIpXFxuXFx0biA6PSBjb3VudChmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUm9sZXNcXFwiKSlcXG5cXHRuID4gMVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljaWVzIHBlciBpZGVudGl0eSBhcmUgY2FwcGVkIChoYXJkIG1heGltdW1zIHJvbGUgMjUgLyB1c2VyIDIwIC8gZ3JvdXAgMTApXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODj+ODvOODieS4iumZkO+8iFNlcnZpY2UgUXVvdGFzIOOBruOAjE1heGltdW0gcXVvdGHjgI09IOOBneOCjOS7peS4iuW8leOBjeS4iuOBkuS4jeWPr+iDveOBquWApO+8iTpcXG4jICAgcm9sZSAyNSAvIHVzZXIgMjAgLyBncm91cCAxMO+8iGdyb3VwIOOBryBhZGp1c3RhYmxlOiBmYWxzZeOAgeWun+a4rOOBp+OCgueiuuiqje+8ieOAglxcbiMg44OH44OV44Kp44Or44OI77yIcm9sZSAyMCAvIHVzZXIgMTAgLyBncm91cCAxMO+8iei2heOBr+OCouOCq+OCpuODs+ODiOOBruOCr+OCqeODvOOCv+W8leOBjeS4iuOBkuasoeesrOOBp1xcbiMg5oiQ5Yqf44GX5b6X44KL44Gf44KBIEVSUk9SIOOBq+OBl+OBquOBhO+8iGJlbmNoIOOCouOCq+OCpuODs+ODiOOBriByb2xlPTIwIOOBpyAxMSDlgIvmiJDlip/jgpLlrp/muKzmuIjjgb/vvInjgIJcXG5fcGZfaWFtcG9sX2xpbWl0cyA6PSB7XFxuXFx0XFxcIkFXUzo6SUFNOjpSb2xlXFxcIjogMjUsXFxuXFx0XFxcIkFXUzo6SUFNOjpVc2VyXFxcIjogMjAsXFxuXFx0XFxcIkFXUzo6SUFNOjpHcm91cFxcXCI6IDEwLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIG1hbmFnZWQgcG9saWNpZXMgYXJlIGF0dGFjaGVkLCBidXQgdGhlIGhhcmQgbWF4aW11bSBmb3IgJXMgaXMgJWQgKHF1b3RhIGRlZmF1bHRzOiByb2xlIDIwLCB1c2VyIDEwLCBncm91cCAxMDsgcmFpc2FibGUgb25seSB1cCB0byB0aGUgaGFyZCBtYXhpbXVtKTsgZGVwbG95bWVudCBmYWlscyB3aXRoIExpbWl0RXhjZWVkZWRcXFwiLCBbbiwgcnR5cGUsIGxpbWl0XSksXFxuXFx0XFxcIkNvbnNvbGlkYXRlIHN0YXRlbWVudHMgaW50byBmZXdlciBtYW5hZ2VkIHBvbGljaWVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgbGltaXQgaW4gX3BmX2lhbXBvbF9saW1pdHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0YXJyIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRuIDo9IGNvdW50KGFycilcXG5cXHRuID4gbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbWFuYWdlZC1wb2xpY3ktc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljeSBkb2N1bWVudHMgYXJlIGxpbWl0ZWQgdG8gNjE0NCBjaGFyYWN0ZXJzICh3aGl0ZXNwYWNlIGV4Y2x1ZGVkKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5RG9jdW1lbnQgaXMgJWQgY2hhcmFjdGVycyAoSlNPTiB3aXRob3V0IHdoaXRlc3BhY2UpIGJ1dCB0aGUgbWFuYWdlZCBwb2xpY3kgbGltaXQgaXMgNjE0NFxcXCIsIFtzaXplXSksXFxuXFx0XFxcIlNwbGl0IHRoZSBkb2N1bWVudCBpbnRvIG11bHRpcGxlIG1hbmFnZWQgcG9saWNpZXMgb3Igc2hvcnRlbiBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWFtLXF1b3Rhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwiKVxcblxcdGRvYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIilcXG5cXHRpc19vYmplY3QoZG9jKVxcblxcdHNpemUgOj0gY291bnQoanNvbi5tYXJzaGFsKGRvYykpXFxuXFx0c2l6ZSA+IDYxNDRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbmFtZS1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSUFNIGVudGl0eSBuYW1lcyBhbGxvdyBvbmx5IGFscGhhbnVtZXJpY3MgYW5kICs9LC5ALV9cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9pYW1uYW1lX3BhdCA6PSBgXltBLVphLXowLTkrPSwuQF8tXSskYFxcblxcbl9wZl9pYW1uYW1lX3Byb3AodCwgcHJvcCkgOj0gW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKF9wZl9pYW1uYW1lX3BhdCwgdilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pXFxufVxcblxcbl9wZl9pYW1uYW1lX2JhZCBjb250YWlucyBfcGZfaWFtbmFtZV9wcm9wKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIsIFxcXCJSb2xlTmFtZVxcXCIpXFxuXFxuX3BmX2lhbW5hbWVfYmFkIGNvbnRhaW5zIF9wZl9pYW1uYW1lX3Byb3AoXFxcIkFXUzo6SUFNOjpVc2VyXFxcIiwgXFxcIlVzZXJOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgX3BmX2lhbW5hbWVfcHJvcChcXFwiQVdTOjpJQU06Okdyb3VwXFxcIiwgXFxcIkdyb3VwTmFtZVxcXCIpXFxuXFxuX3BmX2lhbW5hbWVfYmFkIGNvbnRhaW5zIF9wZl9pYW1uYW1lX3Byb3AoXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIiwgXFxcIk1hbmFnZWRQb2xpY3lOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6Um9sZVxcXCIsIFxcXCJBV1M6OklBTTo6VXNlclxcXCIsIFxcXCJBV1M6OklBTTo6R3JvdXBcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdHYgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5TmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKF9wZl9pYW1uYW1lX3BhdCwgdilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5TmFtZVxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tbmFtZS1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiSUFNIG5hbWUgJyVzJyBpcyByZWplY3RlZDogb25seSBhbHBoYW51bWVyaWNzIGFuZCArID0gLCAuIEAgXyAtIGFyZSBhY2NlcHRlZCAobm9uLUFTQ0lJIHRleHQgc3VjaCBhcyBKYXBhbmVzZSBpcyByZWplY3RlZClcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGVudGl0eSB1c2luZyBhbHBoYW51bWVyaWNzIGFuZCArID0gLCAuIEAgXyAtIG9ubHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVJvbGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCB2XSBpbiBfcGZfaWFtbmFtZV9iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWFjdGlvbi1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWN0aW9ucyBtdXN0IGNhcnJ5IGEgc2VydmljZSBwcmVmaXhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgYmFyZSBhY3Rpb24gbmFtZSBoYXMgbm8gc2VydmljZSB0byBhdHRhY2ggdG8uIEludHJpbnNpY3MgaW5zaWRlIHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IGFyZSBtYXJrZXIgb2JqZWN0cywgc28gaXNfc3RyaW5nIG11dGVzIHRoZW0uXFxuX3BmX2lhZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lhZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWFmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pYWZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaWFmX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pYWZfdmFscyh2KSA6PSB2IGlmIGlzX2FycmF5KHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWFjdGlvbi1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkFjdGlvbiAnJXMnIGhhcyBubyBzZXJ2aWNlIHByZWZpeDsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiQWN0aW9ucy9Db25kaXRpb25zIG11c3QgYmUgcHJlZmFjZWQgYnkgYSB2ZW5kb3IsIGUuZy4sIGlhbSwgc2RiLCBlYzIsIGV0Yy5cXFxcXFxcIlxcXCIsIFthXSksXFxuXFx0XFxcIldyaXRlIGFjdGlvbnMgYXMgc2VydmljZTpBY3Rpb24gKGUuZy4gczM6R2V0T2JqZWN0KSwgb3IgKlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWFmX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWFmX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c29tZSBhIGluIF9wZl9pYWZfdmFscyhvYmplY3QuZ2V0KHMsIFxcXCJBY3Rpb25cXFwiLCBbXSkpXFxuXFx0aXNfc3RyaW5nKGEpXFxuXFx0YSAhPSBcXFwiKlxcXCJcXG5cXHRub3QgY29udGFpbnMoYSwgXFxcIjpcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktY29uZGl0aW9uLW9wZXJhdG9yXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbmRpdGlvbiBvcGVyYXRvcnMgY29tZSBmcm9tIGEgY2xvc2VkIGdyYW1tYXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJhc2Ugb3BlcmF0b3JzIHBsdXMgdGhlIElmRXhpc3RzIHN1ZmZpeCBhbmQgc2V0LW9wZXJhdG9yIHByZWZpeGVzLlxcbiMgQSB0eXBvIGxpa2UgU3RyaW5nRXF1YWwvU3RyaW5nRXF1YWx6IGlzIHVucmVhY2hhYmxlIGZvciBldmVyeSBvdGhlclxcbiMgbGF5ZXIgYmVjYXVzZSB0aGUgZG9jdW1lbnQgaXMgb3BhcXVlIGpzb24uXFxuX3BmX2ljb19iYXNlIDo9IHtcXG5cXHRcXFwiU3RyaW5nRXF1YWxzXFxcIiwgXFxcIlN0cmluZ05vdEVxdWFsc1xcXCIsIFxcXCJTdHJpbmdFcXVhbHNJZ25vcmVDYXNlXFxcIiwgXFxcIlN0cmluZ05vdEVxdWFsc0lnbm9yZUNhc2VcXFwiLFxcblxcdFxcXCJTdHJpbmdMaWtlXFxcIiwgXFxcIlN0cmluZ05vdExpa2VcXFwiLFxcblxcdFxcXCJOdW1lcmljRXF1YWxzXFxcIiwgXFxcIk51bWVyaWNOb3RFcXVhbHNcXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuXFxcIiwgXFxcIk51bWVyaWNMZXNzVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIk51bWVyaWNHcmVhdGVyVGhhblxcXCIsIFxcXCJOdW1lcmljR3JlYXRlclRoYW5FcXVhbHNcXFwiLFxcblxcdFxcXCJEYXRlRXF1YWxzXFxcIiwgXFxcIkRhdGVOb3RFcXVhbHNcXFwiLCBcXFwiRGF0ZUxlc3NUaGFuXFxcIiwgXFxcIkRhdGVMZXNzVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIkRhdGVHcmVhdGVyVGhhblxcXCIsIFxcXCJEYXRlR3JlYXRlclRoYW5FcXVhbHNcXFwiLFxcblxcdFxcXCJCb29sXFxcIiwgXFxcIkJpbmFyeUVxdWFsc1xcXCIsIFxcXCJJcEFkZHJlc3NcXFwiLCBcXFwiTm90SXBBZGRyZXNzXFxcIixcXG5cXHRcXFwiQXJuRXF1YWxzXFxcIiwgXFxcIkFybkxpa2VcXFwiLCBcXFwiQXJuTm90RXF1YWxzXFxcIiwgXFxcIkFybk5vdExpa2VcXFwiLCBcXFwiTnVsbFxcXCIsXFxufVxcblxcbl9wZl9pY29fZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pY29fZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2ljb19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWNvX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxuIyBTdHJpcCBhbiBvcHRpb25hbCBGb3JBbGxWYWx1ZXM6L0ZvckFueVZhbHVlOiBwcmVmaXgsIHRoZW4gSWZFeGlzdHMuXFxuX3BmX2ljb191bnByZWZpeGVkKG9wKSA6PSBwYXJ0c1tjb3VudChwYXJ0cykgLSAxXSBpZiBwYXJ0cyA6PSBzcGxpdChvcCwgXFxcIjpcXFwiKVxcblxcbl9wZl9pY29fcm9vdChvcCkgOj0gc3Vic3RyaW5nKGIsIDAsIGNvdW50KGIpIC0gOCkgaWYge1xcblxcdGIgOj0gX3BmX2ljb191bnByZWZpeGVkKG9wKVxcblxcdGVuZHN3aXRoKGIsIFxcXCJJZkV4aXN0c1xcXCIpXFxufVxcblxcbl9wZl9pY29fcm9vdChvcCkgOj0gYiBpZiB7XFxuXFx0YiA6PSBfcGZfaWNvX3VucHJlZml4ZWQob3ApXFxuXFx0bm90IGVuZHN3aXRoKGIsIFxcXCJJZkV4aXN0c1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1jb25kaXRpb24tb3BlcmF0b3JcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5Db25kaXRpb25cXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkNvbmRpdGlvbiBvcGVyYXRvciAnJXMnIGRvZXMgbm90IGV4aXN0OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTeW50YXggZXJyb3JzIGluIHBvbGljeS5cXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJVc2UgYSBkb2N1bWVudGVkIG9wZXJhdG9yIChTdHJpbmdFcXVhbHMsIEFybkxpa2UsIC4uLiksIG9wdGlvbmFsbHkgd2l0aCBJZkV4aXN0cyBvciBhIEZvckFsbFZhbHVlczovRm9yQW55VmFsdWU6IHByZWZpeFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pY29fZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pY29fc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRjb25kIDo9IG9iamVjdC5nZXQocywgXFxcIkNvbmRpdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjb25kKVxcblxcdHNvbWUgb3AsIF8gaW4gY29uZFxcblxcdGlzX3N0cmluZyhvcClcXG5cXHRub3QgX3BmX2ljb19yb290KG9wKSBpbiBfcGZfaWNvX2Jhc2VcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWR1cGxpY2F0ZS1zaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RhdGVtZW50IElEcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBwb2xpY3lcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhaXJ3aXNlIHVuaXF1ZW5lc3Mgd2l0aGluIG9uZSBkb2N1bWVudDsgc2VwYXJhdGUgZG9jdW1lbnRzIG1heSByZXVzZVxcbiMgaWRzIGZyZWVseS5cXG5fcGZfaWRzX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaWRzX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pZHNfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lkc19zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1kdXBsaWNhdGUtc2lkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuU2lkXFxcIiwgW3BhdGgsIGpdKSxcXG5cXHRzcHJpbnRmKFxcXCJTaWQgJyVzJyByZXBlYXRzIHdpdGhpbiBvbmUgcG9saWN5OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTdGF0ZW1lbnQgSURzIChTSUQpIGluIGEgc2luZ2xlIHBvbGljeSBtdXN0IGJlIHVuaXF1ZS5cXFxcXFxcIlxcXCIsIFtzaWRdKSxcXG5cXHRcXFwiR2l2ZSBldmVyeSBzdGF0ZW1lbnQgaW4gdGhlIGRvY3VtZW50IGEgZGlzdGluY3QgU2lkIChvciBkcm9wIHRoZSBkdXBsaWNhdGVzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWRzX2RvY3NcXG5cXHRzdG10cyA6PSBfcGZfaWRzX3N0bXRzKGQpXFxuXFx0c29tZSBbaSwgYV0gaW4gc3RtdHNcXG5cXHRzb21lIFtqLCBiXSBpbiBzdG10c1xcblxcdGkgPCBqXFxuXFx0aXNfb2JqZWN0KGEpXFxuXFx0aXNfb2JqZWN0KGIpXFxuXFx0c2lkIDo9IG9iamVjdC5nZXQoYSwgXFxcIlNpZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfc3RyaW5nKHNpZClcXG5cXHRzaWQgPT0gb2JqZWN0LmdldChiLCBcXFwiU2lkXFxcIiwgXFxcIl9fcGZfb3RoZXJcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktZWZmZWN0LWNhc2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRWZmZWN0IGlzIGNhc2Utc2Vuc2l0aXZlIEFsbG93IG9yIERlbnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIExvd2VyY2FzZSBlZmZlY3RzIGFyZSBhIGNsYXNzaWMgaGFuZC13cml0dGVuLUpTT04gdHlwbyB0aGUgc2NoZW1hXFxuIyBjYW5ub3Qgc2VlICh0aGUgZG9jdW1lbnQgaXMgb3BhcXVlIGpzb24pLlxcbl9wZl9pZWNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZWNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2llY19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWVjX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWVmZmVjdC1jYXNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuRWZmZWN0XFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJFZmZlY3QgJyVzJyBpcyBub3QgQWxsb3cgb3IgRGVueSAoY2FzZS1zZW5zaXRpdmUpOyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJUaGUgcG9saWN5IGZhaWxlZCBsZWdhY3kgcGFyc2luZ1xcXFxcXFwiXFxcIiwgW2VmXSksXFxuXFx0XFxcIlVzZSBFZmZlY3Q6IEFsbG93IG9yIEVmZmVjdDogRGVueVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWVjX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWVjX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0ZWYgOj0gb2JqZWN0LmdldChzLCBcXFwiRWZmZWN0XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19zdHJpbmcoZWYpXFxuXFx0bm90IGVmIGluIHtcXFwiQWxsb3dcXFwiLCBcXFwiRGVueVxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1leGNsdXNpdmUtZmllbGRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjdGlvbi9Ob3RBY3Rpb24gYW5kIFJlc291cmNlL05vdFJlc291cmNlIGFyZSBleGNsdXNpdmUgcGFpcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEVhY2ggcGFpciBpcyBlaXRoZXItb3IgcGVyIHN0YXRlbWVudDsgYm90aCBhdCBvbmNlIGlzIGEgc3ludGF4IGVycm9yLlxcbl9wZl9pZWZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZWZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2llZl9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWVmX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxuX3BmX2llZl9wYWlycyA6PSB7W1xcXCJBY3Rpb25cXFwiLCBcXFwiTm90QWN0aW9uXFxcIl0sIFtcXFwiUmVzb3VyY2VcXFwiLCBcXFwiTm90UmVzb3VyY2VcXFwiXX1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktZXhjbHVzaXZlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLiVzXFxcIiwgW3BhdGgsIGksIHBhaXJbMV1dKSxcXG5cXHRzcHJpbnRmKFxcXCJTdGF0ZW1lbnQgc2V0cyBib3RoICVzIGFuZCAlczsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiU3ludGF4IGVycm9ycyBpbiBwb2xpY3kuXFxcXFxcXCJcXFwiLCBbcGFpclswXSwgcGFpclsxXV0pLFxcblxcdFxcXCJLZWVwIG9uZSBvZiB0aGUgcGFpciBwZXIgc3RhdGVtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pZWZfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pZWZfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzb21lIHBhaXIgaW4gX3BmX2llZl9wYWlyc1xcblxcdG9iamVjdC5nZXQocywgcGFpclswXSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocywgcGFpclsxXSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktcmVzb3VyY2UtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlc291cmNlcyBtdXN0IGJlIEFSTnMgb3IgKlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSBsaXRlcmFsIHN0cmluZ3MgYXJlIGp1ZGdlZCAtIEZuOjpHZXRBdHQgLyBGbjo6U3ViIHZhbHVlcyBzdXJmYWNlXFxuIyBhcyBtYXJrZXIgb2JqZWN0cyBpbiB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChtZWFzdXJlZCksIHNvIHRoZVxcbiMgaXNfc3RyaW5nIGd1YXJkIG11dGVzIHRoZW0uXFxuX3BmX2lyZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lyZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaXJmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pcmZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaXJmX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pcmZfdmFscyh2KSA6PSB2IGlmIGlzX2FycmF5KHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXJlc291cmNlLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJSZXNvdXJjZSAnJXMnIGlzIG5vdCBhbiBBUk47IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlJlc291cmNlICVzIG11c3QgYmUgaW4gQVJOIGZvcm1hdCBvciAnKicuXFxcXFxcXCJcXFwiLCBbciwgcl0pLFxcblxcdFxcXCJVc2UgYSBmdWxsIEFSTiAoYXJuOi4uLikgb3IgKlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXJmX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXJmX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c29tZSByIGluIF9wZl9pcmZfdmFscyhvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFtdKSlcXG5cXHRpc19zdHJpbmcocilcXG5cXHRyICE9IFxcXCIqXFxcIlxcblxcdG5vdCBzdGFydHN3aXRoKHIsIFxcXCJhcm46XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LXNpZC1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUG9saWN5IHN0YXRlbWVudCBTaWQgbXVzdCBiZSBhbHBoYW51bWVyaWNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NpZGZtdF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlJvbGVcXFwiLCBcXFwiQVdTOjpJQU06OlVzZXJcXFwiLCBcXFwiQVdTOjpJQU06Okdyb3VwXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc2lkZm10X2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX3NpZGZtdF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfc2lkZm10X3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9zaWRmbXRfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktc2lkLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLlNpZFxcXCIsIFtwYXRoLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiU2lkICclcycgaXMgbm90IGFscGhhbnVtZXJpYzsgSUFNIHJlamVjdHMgdGhlIHBvbGljeSB3aXRoIFxcXFxcXFwiU3RhdGVtZW50IElEcyAoU0lEKSBtdXN0IGJlIGFscGhhLW51bWVyaWNcXFxcXFxcIlxcXCIsIFtzaWRdKSxcXG5cXHRcXFwiVXNlIG9ubHkgbGV0dGVycyBhbmQgZGlnaXRzIGluIHRoZSBTaWQgKGRyb3AgaHlwaGVucywgdW5kZXJzY29yZXMgYW5kIHNwYWNlcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9zaWRmbXRfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9zaWRmbXRfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzaWQgOj0gb2JqZWN0LmdldChzLCBcXFwiU2lkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoc2lkKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlswLTlBLVphLXpdKiRgLCBzaWQpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1zdGF0ZW1lbnQtcmVzb3VyY2UtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSWRlbnRpdHkgcG9saWN5IHN0YXRlbWVudHMgbmVlZCBSZXNvdXJjZSBvciBOb3RSZXNvdXJjZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBzdGF0ZW1lbnQgc2NvcGVkIHRvIG5vdGhpbmcgaXMgcmVqZWN0ZWQuXFxuX3BmX2lzcnJfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pc3JyX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pc3JyX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pc3JyX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXN0YXRlbWVudC1yZXNvdXJjZS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRcXFwiU3RhdGVtZW50IGhhcyBuZWl0aGVyIFJlc291cmNlIG5vciBOb3RSZXNvdXJjZTsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiUG9saWN5IHN0YXRlbWVudCBtdXN0IGNvbnRhaW4gcmVzb3VyY2VzLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIFJlc291cmNlIChhbiBBUk4gb3IgKikgdG8gdGhlIHN0YXRlbWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXNycl9kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2lzcnJfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRvYmplY3QuZ2V0KHMsIFxcXCJOb3RSZXNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUG9saWN5IFZlcnNpb24gbXVzdCBiZSAyMDEyLTEwLTE3IG9yIDIwMDgtMTAtMTdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSB2ZXJzaW9uIHN0cmluZyBpcyBhbiBlbnVtIG9mIHR3byBkYXRlczsgYW55dGhpbmcgZWxzZSBpcyBhIHN5bnRheFxcbiMgZXJyb3IgYXQgY3JlYXRlLlxcbl9wZl9pcHZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pcHZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlZlcnNpb25cXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcIlBvbGljeSBWZXJzaW9uICclcycgZG9lcyBub3QgZXhpc3Q7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlN5bnRheCBlcnJvcnMgaW4gcG9saWN5LlxcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRcXFwiVXNlIFZlcnNpb246IDIwMTItMTAtMTdcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3ZlcnNpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXB2X2RvY3NcXG5cXHR2IDo9IG9iamVjdC5nZXQoZCwgXFxcIlZlcnNpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCB2IGluIHtcXFwiMjAxMi0xMC0xN1xcXCIsIFxcXCIyMDA4LTEwLTE3XFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tdHJ1c3QtcG9saWN5LW5vLXJlc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRydXN0IHBvbGljaWVzIGNhbm5vdCBjYXJyeSBhIFJlc291cmNlIGZpZWxkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJvbGUgaXRzZWxmIGlzIHRoZSByZXNvdXJjZSBvZiBpdHMgdHJ1c3QgcG9saWN5OyBhbiBleHBsaWNpdFxcbiMgUmVzb3VyY2UgZmllbGQgaXMgcHJvaGliaXRlZC5cXG5fcGZfaXRucl90cnVzdChuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChkKVxcbn1cXG5cXG5fcGZfaXRucl9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaXRucl9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXRydXN0LXBvbGljeS1uby1yZXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Bc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSxcXG5cXHRcXFwiVHJ1c3QgcG9saWN5IHN0YXRlbWVudCBoYXMgYSBSZXNvdXJjZSBmaWVsZDsgdGhlIHJvbGUgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJIYXMgcHJvaGliaXRlZCBmaWVsZCBSZXNvdXJjZVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFJlc291cmNlIGZyb20gdGhlIHRydXN0IHBvbGljeSBzdGF0ZW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0ZCA6PSBfcGZfaXRucl90cnVzdChuYW1lKVxcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pdG5yX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0b2JqZWN0LmdldChzLCBcXFwiUmVzb3VyY2VcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXRydXN0LXBvbGljeS1zZXJ2aWNlLXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXJ2aWNlIHByaW5jaXBhbHMgbGl2ZSB1bmRlciBhbWF6b25hd3MuY29tXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgU2hhcGUgY2hlY2sgb25seTogZXZlcnkgc2VydmljZSBwcmluY2lwYWwgZW5kcyBpbiAuYW1hem9uYXdzLmNvbSAob3JcXG4jIC5hbWF6b25hd3MuY29tLmNuIGluIHRoZSBDaGluYSBwYXJ0aXRpb24pLiBXaGV0aGVyIGEgd2VsbC1zaGFwZWQgbmFtZVxcbiMgZXhpc3RzIGlzIGxlZnQgdG8gdGhlIHNlcnZpY2UuXFxuX3BmX2l0c3BfdHJ1c3QobmFtZSkgOj0gZCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQXNzdW1lUm9sZVBvbGljeURvY3VtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QoZClcXG59XFxuXFxuX3BmX2l0c3Bfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2l0c3Bfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaXRzcF92YWxzKHYpIDo9IFt2XSBpZiBpc19zdHJpbmcodilcXG5cXG5fcGZfaXRzcF92YWxzKHYpIDo9IHYgaWYgaXNfYXJyYXkodilcXG5cXG5fcGZfaXRzcF9vayhzcCkgaWYgZW5kc3dpdGgoc3AsIFxcXCIuYW1hem9uYXdzLmNvbVxcXCIpXFxuXFxuX3BmX2l0c3Bfb2soc3ApIGlmIGVuZHN3aXRoKHNwLCBcXFwiLmFtYXpvbmF3cy5jb20uY25cXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXRydXN0LXBvbGljeS1zZXJ2aWNlLXByaW5jaXBhbFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Bc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlByaW5jaXBhbC5TZXJ2aWNlXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJTZXJ2aWNlIHByaW5jaXBhbCAnJXMnIGlzIG5vdCBhbiBhbWF6b25hd3MuY29tIGRvbWFpbjsgdGhlIHJvbGUgY3JlYXRlIGZhaWxzIHdpdGggJ0ludmFsaWQgcHJpbmNpcGFsIGluIHBvbGljeTogXFxcXFxcXCJTRVJWSUNFXFxcXFxcXCI6XFxcXFxcXCIlc1xcXFxcXFwiJ1xcXCIsIFtzcCwgc3BdKSxcXG5cXHRcXFwiVXNlIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBuYW1lLCBlLmcuIGxhbWJkYS5hbWF6b25hd3MuY29tXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19wcmluY2lwYWwuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRkIDo9IF9wZl9pdHNwX3RydXN0KG5hbWUpXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2l0c3Bfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRwIDo9IG9iamVjdC5nZXQocywgXFxcIlByaW5jaXBhbFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChwKVxcblxcdHNvbWUgc3AgaW4gX3BmX2l0c3BfdmFscyhvYmplY3QuZ2V0KHAsIFxcXCJTZXJ2aWNlXFxcIiwgW10pKVxcblxcdGlzX3N0cmluZyhzcClcXG5cXHRub3QgX3BmX2l0c3Bfb2soc3ApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWNvZGUtczMtcGFpclwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTMy1iYXNlZCBDb2RlIG5lZWRzIGJvdGggUzNCdWNrZXQgYW5kIFMzS2V5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEhhbGYgYW4gUzMgcmVmZXJlbmNlIGNhbm5vdCBiZSBmZXRjaGVkLiBPbmx5IGp1ZGdlZCB3aGVuIG5laXRoZXIgWmlwRmlsZVxcbiMgbm9yIEltYWdlVXJpIGlzIHByZXNlbnQgKHRob3NlIHNoYXBlcyBiZWxvbmcgdG8gdGhlIGV4Y2x1c2l2ZSBydWxlKS5cXG5fcGZfbGNzcF9jb2RlKG5hbWUpIDo9IGMgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvZGVcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxuX3BmX2xjc3BfaGFzKGMsIGspIGlmIG9iamVjdC5nZXQoYywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcbl9wZl9sY3NwX2hhbGYoYykgOj0gW1xcXCJTM0tleVxcXCIsIFxcXCJTM0J1Y2tldFxcXCJdIGlmIHtcXG5cXHRfcGZfbGNzcF9oYXMoYywgXFxcIlMzQnVja2V0XFxcIilcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJTM0tleVxcXCIpXFxufVxcblxcbl9wZl9sY3NwX2hhbGYoYykgOj0gW1xcXCJTM0J1Y2tldFxcXCIsIFxcXCJTM0tleVxcXCJdIGlmIHtcXG5cXHRfcGZfbGNzcF9oYXMoYywgXFxcIlMzS2V5XFxcIilcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJTM0J1Y2tldFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWNvZGUtczMtcGFpclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db2RlLiVzXFxcIiwgW21pc3NpbmdbMF1dKSxcXG5cXHRzcHJpbnRmKFxcXCJDb2RlIGhhcyAlcyBidXQgbm8gJXM7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIEJ1Y2tldCBhbmQgS2V5IGFyZSByZXF1aXJlZCBmb3IgdXBsb2FkaW5nIHdpdGggUzMgcGFyYW1ldGVycy5cXFxcXFxcIlxcXCIsIFttaXNzaW5nWzFdLCBtaXNzaW5nWzBdXSksXFxuXFx0XFxcIlNldCBib3RoIFMzQnVja2V0IGFuZCBTM0tleVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWNvZGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0YyA6PSBfcGZfbGNzcF9jb2RlKG5hbWUpXFxuXFx0bm90IF9wZl9sY3NwX2hhcyhjLCBcXFwiWmlwRmlsZVxcXCIpXFxuXFx0bm90IF9wZl9sY3NwX2hhcyhjLCBcXFwiSW1hZ2VVcmlcXFwiKVxcblxcdG1pc3NpbmcgOj0gX3BmX2xjc3BfaGFsZihjKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1jb2RlLXppcGZpbGUtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklubGluZSBaaXBGaWxlIGV4Y2x1ZGVzIGV2ZXJ5IG90aGVyIENvZGUgcGFyYW1ldGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEtleSBwcmVzZW5jZSBpbiB0aGUgQ29kZSBvYmplY3QgaXMgdGhlIHZpb2xhdGlvbjsgY2hlY2tlZCBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfbGN6eF9vdGhlciA6PSB7XFxcIlMzQnVja2V0XFxcIiwgXFxcIlMzS2V5XFxcIiwgXFxcIlMzT2JqZWN0VmVyc2lvblxcXCIsIFxcXCJJbWFnZVVyaVxcXCJ9XFxuXFxuX3BmX2xjenhfY29kZShuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb2RlXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWNvZGUtemlwZmlsZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQ29kZS4lc1xcXCIsIFtrXSksXFxuXFx0c3ByaW50ZihcXFwiQ29kZSBzZXRzIFppcEZpbGUgdG9nZXRoZXIgd2l0aCAlczsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUGxlYXNlIGRvIG5vdCBwcm92aWRlIG90aGVyIEZ1bmN0aW9uQ29kZSBwYXJhbWV0ZXJzIHdoZW4gcHJvdmlkaW5nIGEgWmlwRmlsZS5cXFxcXFxcIlxcXCIsIFtrXSksXFxuXFx0XFxcIktlZXAgdGhlIGlubGluZSBaaXBGaWxlIGFsb25lLCBvciBzd2l0Y2ggZW50aXJlbHkgdG8gdGhlIFMzL2ltYWdlIHJlZmVyZW5jZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWNvZGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0YyA6PSBfcGZfbGN6eF9jb2RlKG5hbWUpXFxuXFx0b2JqZWN0LmdldChjLCBcXFwiWmlwRmlsZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRzb21lIGsgaW4gX3BmX2xjenhfb3RoZXJcXG5cXHRvYmplY3QuZ2V0KGMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZGxxLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgZGVhZCBsZXR0ZXIgdGFyZ2V0IG11c3Qgc2l0IGluIHRoZSBkZXBsb3kgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlZ2lvbiBjb21wYXJpc29uIG5lZWRzIHRoZSBkZXBsb3kgcmVnaW9uLCB3aGljaCBvbmx5IHRoaXMgcGFjayBzZWVzXFxuIyAoZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBpbiBlbmZvcmNlIG1vZGU7IHRoZSBydWxlXFxuIyBza2lwcyB3aXRob3V0IGl0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1kbHEtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGVhZCBsZXR0ZXIgdGFyZ2V0IHJlZ2lvbiAnJXMnIGlzIG5vdCB0aGUgZGVwbG95IHJlZ2lvbiAnJXMnOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIGRlYWQgbGV0dGVyIHF1ZXVlIEFSTjogVGhlIHJlc291cmNlIHNwZWNpZmllZCBieSB0aGUgVGFyZ2V0QXJuIG11c3QgYmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSBMYW1iZGEgZnVuY3Rpb24gaXQncyBhc3NvY2lhdGVkIHdpdGguXFxcXFxcXCJcXFwiLCBbcGFydHNbM10sIHJlZ2lvbl0pLFxcblxcdFxcXCJQb2ludCBEZWFkTGV0dGVyQ29uZmlnIGF0IGEgcXVldWUgb3IgdG9waWMgaW4gdGhlIHNhbWUgcmVnaW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tZGVhZGxldHRlcmNvbmZpZy5odG1sXFxcIikgaWYge1xcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbM10gIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWRscS1zZXJ2aWNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkZWFkIGxldHRlciB0YXJnZXQgbXVzdCBiZSBhbiBTUVMgcXVldWUgb3IgU05TIHRvcGljXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIHNlZ21lbnQgbGl2ZXMgaW5zaWRlIHRoZSBBUk4gc3RyaW5nLCBpbnZpc2libGUgdG8gYW55XFxuIyBzY2hlbWEgbGF5ZXIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZGxxLXNlcnZpY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZWFkIGxldHRlciB0YXJnZXQgc2VydmljZSAnJXMnIGlzIG5vdCBzcXMgb3Igc25zOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIGRlYWQgbGV0dGVyIHF1ZXVlIEFSTjogVGhlIHNlcnZpY2Ugc3BlY2lmaWVkIGJ5IHRoZSBUYXJnZXRBcm4gaXMgbm90IHN1cHBvcnRlZCBmb3IgZGVhZCBsZXR0ZXIgY29uZmlndXJhdGlvbi5cXFxcXFxcIlxcXCIsIFtwYXJ0c1syXV0pLFxcblxcdFxcXCJQb2ludCBEZWFkTGV0dGVyQ29uZmlnIGF0IGFuIFNRUyBxdWV1ZSBvciBTTlMgdG9waWMgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tZGVhZGxldHRlcmNvbmZpZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0bm90IHBhcnRzWzJdIGluIHtcXFwic3FzXFxcIiwgXFxcInNuc1xcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVmcy1yZXF1aXJlcy12cGNcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTW91bnRpbmcgRUZTIHJlcXVpcmVzIFZwY0NvbmZpZ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNb3VudGluZyBFRlMgcmVxdWlyZXMgdGhlIGZ1bmN0aW9uIHRvIHJ1biBpbnNpZGUgYSBWUEMuIEtleSBwcmVzZW5jZSBpc1xcbiMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9sZWZzdl9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVmcy1yZXF1aXJlcy12cGNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlZwY0NvbmZpZ1xcXCIsXFxuXFx0XFxcIkZpbGVTeXN0ZW1Db25maWdzIHdpdGhvdXQgVnBjQ29uZmlnOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJGdW5jdGlvbiBtdXN0IGJlIGNvbmZpZ3VyZWQgdG8gZXhlY3V0ZSBpbiBhIFZQQyB0byByZWZlcmVuY2UgYWNjZXNzIHBvaW50IC4uLiBQbGVhc2UgdXBkYXRlIHRoZSBmdW5jdGlvbiBjb25maWd1cmF0aW9uIHRvIGluY2x1ZGUgVlBDIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3Vwcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBWcGNDb25maWcgd2l0aCBzdWJuZXRzIHRoYXQgaGF2ZSBFRlMgbW91bnQgdGFyZ2V0cyBpbiB0aGVpciBBWnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZnVuY3Rpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2xlZnN2X3Byb3BzKG5hbWUpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpbGVTeXN0ZW1Db25maWdzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWcGNDb25maWdcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVudi1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGxpbWl0ZWQgdG8gNDA5NiBieXRlcyBpbiB0b3RhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyDjg6rjg4bjg6njg6vmloflrZfliJfjga7jgq3jg7wv5YCk44Gg44GR44KS5pWw44GI44KL77yI44OI44O844Kv44Oz44Gv44K544Kt44OD44OX77yJ44CC5ZCI6KiI44GM5pei44GrIDQwOTYg44KS6LaF44GI44GmXFxuIyDjgYTjgozjgbDjgIHlrp/pmpvjga7jg4fjg5fjg63jgqTjgafjgoLlv4XjgZrlpLHmlZfjgZnjgovvvIjlrp/jgrXjgqTjgrrjga/mjqjlrprku6XkuIrjgavjgZfjgYvjgarjgonjgarjgYTvvInjgIJcXG4jIE5PVEU6IOOBk+OBruOCqOODs+OCuOODs+OBriBSZWdvIOODkeODvOOCteOBr+WGheWMheihqOiomOWGheOBriAyIOWkieaVsCBzb21l77yIc29tZSBrLCB2IGluIHZhcnPvvInjgpJcXG4jIOWPl+OBkeS7mOOBkeOBquOBhOOBn+OCgeOAgW9iamVjdC5rZXlzIOe1jOeUseOBp+abuOOBj+OAglxcbl9wZl9sZW52X3NpemUodmFycykgOj0gc3VtKFtzIHxcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmtleXModmFycylcXG5cXHRpc19zdHJpbmcodmFyc1trXSlcXG5cXHRzIDo9IGNvdW50KGspICsgY291bnQodmFyc1trXSlcXG5dKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVudi1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FbnZpcm9ubWVudC5WYXJpYWJsZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkVudmlyb25tZW50IHZhcmlhYmxlcyB0b3RhbCBhdCBsZWFzdCAlZCBieXRlcyAobGl0ZXJhbCBrZXlzIGFuZCB2YWx1ZXMpLCBidXQgTGFtYmRhIGxpbWl0cyB0aGUgZW52aXJvbm1lbnQgdG8gNDA5NiBieXRlczsgQ3JlYXRlRnVuY3Rpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG90YWxdKSxcXG5cXHRcXFwiTW92ZSBsYXJnZSB2YWx1ZXMgdG8gU1NNIFBhcmFtZXRlciBTdG9yZSwgU2VjcmV0cyBNYW5hZ2VyLCBvciBhIGJ1bmRsZWQgY29uZmlnIGZpbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9nZXR0aW5nc3RhcnRlZC1saW1pdHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0dmFycyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHZhcnMpXFxuXFx0dG90YWwgOj0gX3BmX2xlbnZfc2l6ZSh2YXJzKVxcblxcdHRvdGFsID4gNDA5Nlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tYmF0Y2hzaXplLXdpbmRvd1wiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTUVMgYmF0Y2ggc2l6ZXMgb3ZlciAxMCBuZWVkIGEgYmF0Y2hpbmcgd2luZG93XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTUVMtb25seSBjb3VwbGluZzogYmlnIGJhdGNoZXMgbXVzdCB3YWl0IGZvciBhIHdpbmRvdy4gS2luZXNpcyBhbmRcXG4jIER5bmFtb0RCIHNvdXJjZXMgdGFrZSBsYXJnZSBiYXRjaGVzIHdpdGhvdXQgb25lLCBoZW5jZSB0aGUgU1FTIGd1YXJkLlxcbl9wZl9sYnN3X2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcbn1cXG5cXG5fcGZfbGJzd19pc19zcXMobmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0c3BsaXQoYXJuLCBcXFwiOlxcXCIpWzJdID09IFxcXCJzcXNcXFwiXFxufVxcblxcbl9wZl9sYnN3X25vX3dpbmRvdyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2xic3dfbm9fd2luZG93KG5hbWUpIGlmIHtcXG5cXHR0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXhpbXVtQmF0Y2hpbmdXaW5kb3dJblNlY29uZHNcXFwiKSkgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1lc20tYmF0Y2hzaXplLXdpbmRvd1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQmF0Y2hTaXplXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYXRjaFNpemUgJXYgd2l0aG91dCBhIGJhdGNoaW5nIHdpbmRvdzsgdGhlIG1hcHBpbmcgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJlcXVlc3QgcHJvdmlkZWQ6IE1heGltdW0gYmF0Y2ggd2luZG93IGluIHNlY29uZHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBpZiBtYXhpbXVtIGJhdGNoIHNpemUgaXMgZ3JlYXRlciB0aGFuIDEwXFxcXFxcXCJcXFwiLCBbYl0pLFxcblxcdFxcXCJTZXQgTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzICgxLTMwMCksIG9yIGtlZXAgQmF0Y2hTaXplIGF0IDEwIG9yIGxlc3NcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZXZlbnRzb3VyY2VtYXBwaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXFxcIilcXG5cXHRfcGZfbGJzd19pc19zcXMobmFtZSlcXG5cXHRiIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhdGNoU2l6ZVxcXCIpKVxcblxcdGIgPiAxMFxcblxcdF9wZl9sYnN3X25vX3dpbmRvdyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tZmlmby1iYXRjaGluZy13aW5kb3dcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRklGTyBxdWV1ZXMgcmVqZWN0IGEgYmF0Y2hpbmcgd2luZG93XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBGSUZPIG9yZGVyaW5nIGZvcmJpZHMgaG9sZGluZyBhIGJhdGNoIG9wZW4uIEZJRk8tbmVzcyBjb21lcyBmcm9tIHRoZVxcbiMgcXVldWUgc2libGluZydzIEZpZm9RdWV1ZSBmbGFnIG9yIHRoZSAuZmlmbyBhcm4gc3VmZml4Llxcbl9wZl9sZmJ3X2lzX2ZpZm8obmFtZSkgaWYge1xcblxcdHEgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpXFxuXFx0cSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpKSA9PSB0cnVlXFxufVxcblxcbl9wZl9sZmJ3X2lzX2ZpZm8obmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0ZW5kc3dpdGgoYXJuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1lc20tZmlmby1iYXRjaGluZy13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kc1xcXCIsXFxuXFx0XFxcIkJhdGNoaW5nIHdpbmRvdyBvbiBhIEZJRk8gcXVldWUgc291cmNlOyB0aGUgbWFwcGluZyBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogQmF0Y2hpbmcgd2luZG93IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEZJRk8gcXVldWVzXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIE1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kcywgb3IgdXNlIGEgc3RhbmRhcmQgcXVldWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZXZlbnRzb3VyY2VtYXBwaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXFxcIilcXG5cXHRfcGZfbGZid19pc19maWZvKG5hbWUpXFxuXFx0dG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzXFxcIikpID4gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tc3FzLXN0YXJ0aW5nLXBvc2l0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNRUyBldmVudCBzb3VyY2VzIHJlamVjdCBTdGFydGluZ1Bvc2l0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTdGFydGluZ1Bvc2l0aW9uIGJlbG9uZ3MgdG8gc3RyZWFtIHNvdXJjZXM7IHF1ZXVlcyBoYXZlIG5vIG9mZnNldHMuXFxuIyBEZXRlY3RlZCB2aWEgYW4gaW4tdGVtcGxhdGUgcXVldWUgc2libGluZyBvciB0aGUgc3FzIGFybiBzZWdtZW50Llxcbl9wZl9sZXNwX2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcbn1cXG5cXG5fcGZfbGVzcF9pc19zcXMobmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0c3BsaXQoYXJuLCBcXFwiOlxcXCIpWzJdID09IFxcXCJzcXNcXFwiXFxufVxcblxcbl9wZl9sZXNwX3NldChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlN0YXJ0aW5nUG9zaXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVzbS1zcXMtc3RhcnRpbmctcG9zaXRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN0YXJ0aW5nUG9zaXRpb25cXFwiLFxcblxcdFxcXCJTdGFydGluZ1Bvc2l0aW9uIG9uIGFuIFNRUyBldmVudCBzb3VyY2U7IHRoZSBtYXBwaW5nIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBTdGFydGluZ1Bvc2l0aW9uIGlzIG5vdCB2YWxpZCBmb3IgU1FTIGV2ZW50IHNvdXJjZXMuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIFN0YXJ0aW5nUG9zaXRpb24gKGl0IG9ubHkgYXBwbGllcyB0byBLaW5lc2lzL0R5bmFtb0RCL0thZmthIHNvdXJjZXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWV2ZW50c291cmNlbWFwcGluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1xcXCIpXFxuXFx0X3BmX2xlc3BfaXNfc3FzKG5hbWUpXFxuXFx0X3BmX2xlc3Bfc2V0KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLW1lbW9yeS1tYXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTWVtb3J5U2l6ZSB0b3BzIG91dCBhdCAxMDI0MFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBoYXMgdGhlIDEyOCBmbG9vciBidXQgaXMgbWlzc2luZyB0aGUgMTAyNDAgY2FwXFxuIyAoZW5naW5lIGNsZWFuIG9uIDIwMDAwLCBGMzAzNCBvbiA2NCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtbWVtb3J5LW1heFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5U2l6ZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWVtb3J5U2l6ZSAldiBpcyBvdmVyIHRoZSBjYXA7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIidNZW1vcnlTaXplJyB2YWx1ZSBmYWlsZWQgdG8gc2F0aXNmeSBjb25zdHJhaW50OiBNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDI0MFxcXFxcXFwiXFxcIiwgW21dKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMTAyNDAgTUJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZnVuY3Rpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0bSA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NZW1vcnlTaXplXFxcIikpXFxuXFx0bSA+IDEwMjQwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLXRpbWVvdXQtbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRpbWVvdXQgdG9wcyBvdXQgYXQgOTAwIHNlY29uZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgaGFzIHRoZSAxIGZsb29yIGJ1dCBpcyBtaXNzaW5nIHRoZSA5MDAgY2FwIChlbmdpbmVcXG4jIGNsZWFuIG9uIDkwMSwgRjMwMzQgb24gMCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtdGltZW91dC1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRpbWVvdXQgJXYgaXMgb3ZlciB0aGUgMTUtbWludXRlIGNhcDsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiVmFsdWUgJyV2JyBhdCAndGltZW91dCcgZmFpbGVkIHRvIHNhdGlzZnkgY29uc3RyYWludDogTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gOTAwXFxcXFxcXCJcXFwiLCBbdCwgdF0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCA5MDAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1mdW5jdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXRcXFwiKSlcXG5cXHR0ID4gOTAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibG9nc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGZpbHRlciBwYXR0ZXJuIHN0YXJ0aW5nIHdpdGggJ1snIG11c3QgZW5kIHdpdGggJ10nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9sZ2ZwYl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9sb2dzL0ZpbHRlckFuZFBhdHRlcm5TeW50YXguaHRtbFxcXCJcXG5cXG5fcGZfbGdmcGJfbXNnKGtpbmQpIDo9IHNwcmludGYoXFxcIlRoZSAlcyBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgYnV0IGRvZXMgbm90IGVuZCB3aXRoICddJzsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiSWYgYSBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgaXQgbXVzdCBlbmQgd2l0aCAnXSdcXFxcXFxcIlxcXCIsIFtraW5kXSlcXG5cXG5fcGZfbGdmcGJfZml4IDo9IFxcXCJDbG9zZSB0aGUgYnJhY2tldCDigJQgYSBzcGFjZS1kZWxpbWl0ZWQgcGF0dGVybiBpcyBbZmllbGQxLCBmaWVsZDIsIC4uLl1cXFwiXFxuXFxuIyBUaGUgc2FtZSBwYXJzZXIgcnVucyBmb3IgbWV0cmljIGZpbHRlcnMgYW5kIHN1YnNjcmlwdGlvbiBmaWx0ZXJzLCBhbmQgaXRcXG4jIHJ1bnMgYmVmb3JlIGFueSBkZXN0aW5hdGlvbiB2YWxpZGF0aW9uIChiZW5jaCBjMDEvYzA2KS4gT25seSB0aGlzXFxuIyBzdGFydC9lbmQgcGFpcmluZyBpcyBjaGVja2VkIGhlcmU7IGEgZnVsbCBwYXR0ZXJuIHBhcnNlciBpcyBvdXQgb2Ygc2NvcGUuXFxuX3BmX2xnZnBiX3VuYmFsYW5jZWQocCkgaWYge1xcblxcdHQgOj0gdHJpbV9zcGFjZShwKVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcIltcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh0LCBcXFwiXVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJtZXRyaWNcXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJzdWJzY3JpcHRpb25cXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZWZhdWx0VmFsdWUgaXMgZW1pdHRlZCB3aGVuIGEgbG9nIGxpbmUgZG9lcyBub3QgbWF0Y2gsIGJ1dCBhIGRpbWVuc2lvblxcbiMgdmFsdWUgY2FuIG9ubHkgY29tZSBmcm9tIGEgbWF0Y2gg4oCUIHRoZSBzZXJ2aWNlIHJlamVjdHMgdGhlIGNvbWJpbmF0aW9uLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNUcmFuc2Zvcm1hdGlvbnMuJWQuRGVmYXVsdFZhbHVlXFxcIiwgW3QuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbiBzZXRzIGJvdGggRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJJbnZhbGlkIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbjogZGltZW5zaW9ucyBhbmQgZGVmYXVsdCB2YWx1ZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHByb3BlcnRpZXNcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgRGVmYXVsdFZhbHVlIHdoZW4gdGhlIHRyYW5zZm9ybWF0aW9uIGhhcyBEaW1lbnNpb25zLCBvciBkcm9wIHRoZSBEaW1lbnNpb25zXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sb2dzLW1ldHJpY2ZpbHRlci1tZXRyaWN0cmFuc2Zvcm1hdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcXFwiKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTWV0cmljVHJhbnNmb3JtYXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEZWZhdWx0VmFsdWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0ZGltcyA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEaW1lbnNpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShkaW1zKVxcblxcdGNvdW50KGRpbXMpID4gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxvZ3Mtc3Vic2NyaXB0aW9uLWtpbmVzaXMtcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBLaW5lc2lzIGRlc3RpbmF0aW9uIG5lZWRzIFJvbGVBcm5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2xnc2tyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2xvZ3MvU3Vic2NyaXB0aW9uRmlsdGVycy5odG1sXFxcIlxcblxcbiMgVGhlIGRlc3RpbmF0aW9uIGlzIHByb3ZhYmx5IEtpbmVzaXMgdHdvIHdheXM6IGEgbGl0ZXJhbFxcbiMgYXJuOjxwYXJ0aXRpb24+OmtpbmVzaXM6IHN0cmluZywgb3IgYSBSZWYvR2V0QXR0IHRoYXQgcmVzb2x2ZSgpIHR1cm5zIGludG9cXG4jIHRoZSBsb2dpY2FsIElEIG9mIGFuIGluLXRlbXBsYXRlIEFXUzo6S2luZXNpczo6U3RyZWFtLiBTY29wZWQgdG8gS2luZXNpcyDigJRcXG4jIHRoZSBiZW5jaCBlcnJvciBuYW1lcyBcXFwidmVuZG9yIGtpbmVzaXNcXFwiOyBvdGhlciB2ZW5kb3JzIHdlcmUgbm90IG1lYXN1cmVkLlxcbl9wZl9sZ3Nrcl9raW5lc2lzX2Rlc3QobmFtZSkgaWYge1xcblxcdGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXN0aW5hdGlvbkFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGQpXFxuXFx0cGFydHMgOj0gc3BsaXQoZCwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSAzXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG59XFxuXFxuX3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKSBpZiB7XFxuXFx0ZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc3RpbmF0aW9uQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRkIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXM6OlN0cmVhbVxcXCIpXFxufVxcblxcbiMgVHJ1ZSBhYnNlbmNlIG9mIFJvbGVBcm4gbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2xnc2tyX3JvbGVfYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiUm9sZUFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLXN1YnNjcmlwdGlvbi1raW5lc2lzLXJvbGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvbGVBcm5cXFwiLFxcblxcdFxcXCJUaGUgc3Vic2NyaXB0aW9uIGZpbHRlciB0YXJnZXRzIGEgS2luZXNpcyBzdHJlYW0gYnV0IHNldHMgbm8gUm9sZUFybjsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiZGVzdGluYXRpb25Bcm4gZm9yIHZlbmRvciBraW5lc2lzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgcm9sZUFyblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgUm9sZUFybiBmb3IgYSByb2xlIHRoYXQgbG9ncy5hbWF6b25hd3MuY29tIGNhbiBhc3N1bWUgd2l0aCBraW5lc2lzOlB1dFJlY29yZCBvbiB0aGUgc3RyZWFtXFxcIixcXG5cXHRfcGZfbGdza3JfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0X3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKVxcblxcdF9wZl9sZ3Nrcl9yb2xlX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1iYWNrdHJhY2tcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQmFja3RyYWNrIG9ubHkgd29ya3Mgb24gYXVyb3JhLW15c3FsLCB3aXRoIGEgd2luZG93IG9mIGF0IG1vc3QgMjU5MjAwIHNlY29uZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQXVyb3JhTXlTUUwuTWFuYWdpbmcuQmFja3RyYWNrLmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtYmFja3RyYWNrXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5CYWNrdHJhY2tXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIkJhY2t0cmFjayBpcyBvbmx5IGF2YWlsYWJsZSBvbiBhdXJvcmEtbXlzcWwgKFxcXFxcXFwiQmFja3RyYWNrIGlzIG5vdCBlbmFibGVkIGZvciB0aGUgJXMgZW5naW5lLlxcXFxcXFwiKVxcXCIsIFtlbmddKSxcXG5cXHRcXFwiUmVtb3ZlIEJhY2t0cmFja1dpbmRvdywgb3IgdXNlIHRoZSBhdXJvcmEtbXlzcWwgZW5naW5lXFxcIixcXG5cXHRfcGZfcmRzYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIpKVxcblxcdG4gPiAwXFxuXFx0ZW5nIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIilcXG5cXHRpc19zdHJpbmcoZW5nKVxcblxcdGVuZyAhPSBcXFwiYXVyb3JhLW15c3FsXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdHJhY2tcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQmFja3RyYWNrV2luZG93ICV2IGlzIG91dHNpZGUgMC0yNTkyMDAgc2Vjb25kcyAoNzIgaG91cnMpXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMjU5MjAwIHNlY29uZHNcXFwiLFxcblxcdF9wZl9yZHNidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIikgPT0gXFxcImF1cm9yYS1teXNxbFxcXCJcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIpKVxcblxcdG4gPiAyNTkyMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtYmFja3VwLXJldGVudGlvbi1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJCYWNrdXBSZXRlbnRpb25QZXJpb2QgbXVzdCBiZSBhdCBtb3N0IDM1IGRheXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtYmFja3VwLXJldGVudGlvbi1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQmFja3VwUmV0ZW50aW9uUGVyaW9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYWNrdXBSZXRlbnRpb25QZXJpb2QgJXYgZXhjZWVkcyB0aGUgbWF4aW11bTsgUkRTIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIlJldGVudGlvbiBwZXJpb2QgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM1LlxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGEgcmV0ZW50aW9uIHBlcmlvZCBvZiAzNSBkYXlzIG9yIGxlc3NcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t1cFJldGVudGlvblBlcmlvZFxcXCIpKVxcblxcdG4gPiAzNVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1iYWNrdXAtd2luZG93LWR1cmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBiYWNrdXAgd2luZG93IG11c3QgYmUgYXQgbGVhc3QgMzAgbWludXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFxcXCJISDpNTVxcXCIgLT4gbWludXRlcyBvZiBkYXk7IHVuZGVmaW5lZCBmb3IgYW55dGhpbmcgZWxzZS4gRGlnaXRzIGdvXFxuIyB0aHJvdWdoIGEgbG9va3VwIHRhYmxlIGJlY2F1c2UgdG9fbnVtYmVyIHJlamVjdHMgbGVhZGluZyB6ZXJvc1xcbiMgKHRvX251bWJlcihcXFwiMDNcXFwiKSBpcyB1bmRlZmluZWQgaW4gdGhlIGVuZ2luZSdzIFJlZ28gYnVpbGQpLlxcbl9wZl9yZHN3ZF9kaWdpdCA6PSB7XFxcIjBcXFwiOiAwLCBcXFwiMVxcXCI6IDEsIFxcXCIyXFxcIjogMiwgXFxcIjNcXFwiOiAzLCBcXFwiNFxcXCI6IDQsIFxcXCI1XFxcIjogNSwgXFxcIjZcXFwiOiA2LCBcXFwiN1xcXCI6IDcsIFxcXCI4XFxcIjogOCwgXFxcIjlcXFwiOiA5fVxcblxcbl9wZl9yZHN3ZF9taW4odCkgOj0gbSBpZiB7XFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0cmVnZXgubWF0Y2goYF4oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRgLCB0KVxcblxcdGggOj0gKF9wZl9yZHN3ZF9kaWdpdFtzdWJzdHJpbmcodCwgMCwgMSldICogMTApICsgX3BmX3Jkc3dkX2RpZ2l0W3N1YnN0cmluZyh0LCAxLCAxKV1cXG5cXHRtaSA6PSAoX3BmX3Jkc3dkX2RpZ2l0W3N1YnN0cmluZyh0LCAzLCAxKV0gKiAxMCkgKyBfcGZfcmRzd2RfZGlnaXRbc3Vic3RyaW5nKHQsIDQsIDEpXVxcblxcdG0gOj0gKGggKiA2MCkgKyBtaVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdXAtd2luZG93LWR1cmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QcmVmZXJyZWRCYWNrdXBXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIlByZWZlcnJlZEJhY2t1cFdpbmRvdyAnJXMnIGlzIG9ubHkgJXYgbWludXRlczsgUkRTIHJlcXVpcmVzIGF0IGxlYXN0IDMwIChcXFxcXFxcIkJhY2t1cCB3aW5kb3cgbXVzdCBiZSBhdCBsZWFzdCAzMCBtaW51dGVzLlxcXFxcXFwiKVxcXCIsIFt3LCBkXSksXFxuXFx0XFxcIldpZGVuIHRoZSB3aW5kb3cgdG8gMzAgbWludXRlcyBvciBtb3JlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0dyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKHcpXFxuXFx0cGFydHMgOj0gc3BsaXQodywgXFxcIi1cXFwiKVxcblxcdGNvdW50KHBhcnRzKSA9PSAyXFxuXFx0cyA6PSBfcGZfcmRzd2RfbWluKHBhcnRzWzBdKVxcblxcdGUgOj0gX3BmX3Jkc3dkX21pbihwYXJ0c1sxXSlcXG5cXHRkIDo9ICgoZSAtIHMpICsgMTQ0MCkgJSAxNDQwXFxuXFx0ZCA8IDMwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlByZWZlcnJlZEJhY2t1cFdpbmRvdyBtdXN0IGJlIGhoMjQ6bWktaGgyNDptaVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdXAtd2luZG93LWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmVmZXJyZWRCYWNrdXBXaW5kb3cgJyVzJyBpcyBub3QgaGgyNDptaS1oaDI0Om1pICgyNEggY2xvY2sgVVRDKTsgUkRTIHJlamVjdHMgaXQgYXQgY3JlYXRlIHRpbWVcXFwiLCBbd10pLFxcblxcdFxcXCJVc2UgdGhlIGhoMjQ6bWktaGgyNDptaSBmb3JtLCBlLmcuIDAzOjAwLTA0OjAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0dyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKHcpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0tKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0kYCwgdylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtZGJuYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJwb3N0Z3JlcyBEQk5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbGV0dGVyLXN0YXJ0IGhhbGYgb2YgdGhlIHNlcnZpY2UgbWVzc2FnZSBpcyBjbGFpbWVkOiB0aGVcXG4jIFxcXCJvbmx5IGFscGhhbnVtZXJpY1xcXCIgaGFsZiBpcyBtZWFzdXJhYmx5IHdyb25nIChiZW5jaF9kYiBkZXBsb3lzKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1kYm5hbWUtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EQk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkRCTmFtZSAnJXMnIGRvZXMgbm90IGJlZ2luIHdpdGggYSBsZXR0ZXIgKFxcXFxcXFwiREJOYW1lIG11c3QgYmVnaW4gd2l0aCBhIGxldHRlclxcXFxcXFwiKTsgdGhlIENyZWF0ZURCSW5zdGFuY2UgY2FsbCBmYWlsc1xcXCIsIFtkbl0pLFxcblxcdFxcXCJTdGFydCB0aGUgZGF0YWJhc2UgbmFtZSB3aXRoIGEgbGV0dGVyXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKSA9PSBcXFwicG9zdGdyZXNcXFwiXFxuXFx0ZG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EQk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhkbilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aXWAsIGRuKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1kZXNjcmlwdGlvbi1wcmludGFibGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUkRTIGdyb3VwIGRlc2NyaXB0aW9ucyBtdXN0IGJlIHByaW50YWJsZSBBU0NJSVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCU3VibmV0R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCUGFyYW1ldGVyR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuREJTdWJuZXRHcm91cERlc2NyaXB0aW9uXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bXFxcXHgyMC1cXFxceDdlXSokYCwgdilcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBEZXNjcmlwdGlvblxcXCJcXG59XFxuXFxuX3BmX3Jkc2Rlc2NfYmFkIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCB2XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJQYXJhbWV0ZXJHcm91cFxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bXFxcXHgyMC1cXFxceDdlXSokYCwgdilcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1kZXNjcmlwdGlvbi1wcmludGFibGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiRGVzY3JpcHRpb24gJyVzJyBpcyByZWplY3RlZDogUkRTIHRyZWF0cyBhbnkgbm9uLUFTQ0lJIGNoYXJhY3RlciBhcyBhIG5vbi1wcmludGFibGUgY29udHJvbCBjaGFyYWN0ZXJcXFwiLCBbdl0pLFxcblxcdFxcXCJXcml0ZSB0aGUgZGVzY3JpcHRpb24gaW4gcHJpbnRhYmxlIEFTQ0lJXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQlN1Ym5ldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgdl0gaW4gX3BmX3Jkc2Rlc2NfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWdwMy1pb3BzLXN0b3JhZ2UtdGhyZXNob2xkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImdwMyBiZWxvdyA0MDAgR2lCIGNhbm5vdCB0YWtlIGN1c3RvbSBJb3BzIG9yIFN0b3JhZ2VUaHJvdWdocHV0IChwb3N0Z3Jlcy9teXNxbClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc2dwM19oYXMobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9yZHNncDNfY3VzdG9tKG5hbWUpIGlmIF9wZl9yZHNncDNfaGFzKG5hbWUsIFxcXCJJb3BzXFxcIilcXG5cXG5fcGZfcmRzZ3AzX2N1c3RvbShuYW1lKSBpZiBfcGZfcmRzZ3AzX2hhcyhuYW1lLCBcXFwiU3RvcmFnZVRocm91Z2hwdXRcXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWdwMy1pb3BzLXN0b3JhZ2UtdGhyZXNob2xkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJncDMgd2l0aCAldiBHaUIgY2Fubm90IHRha2UgY3VzdG9tIElvcHMvU3RvcmFnZVRocm91Z2hwdXQgYmVsb3cgNDAwIEdpQiBmb3IgZW5naW5lICVzIChcXFxcXFxcIllvdSBjYW4ndCBzcGVjaWZ5IElPUFMgb3Igc3RvcmFnZSB0aHJvdWdocHV0IC4uLiBsZXNzIHRoYW4gNDAwLlxcXFxcXFwiKVxcXCIsIFtzLCBlbmddKSxcXG5cXHRcXFwiRHJvcCB0aGUgY3VzdG9tIElvcHMvU3RvcmFnZVRocm91Z2hwdXQsIG9yIGFsbG9jYXRlIGF0IGxlYXN0IDQwMCBHaUJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0ZW5nIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIilcXG5cXHRlbmcgaW4ge1xcXCJwb3N0Z3Jlc1xcXCIsIFxcXCJteXNxbFxcXCJ9XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TdG9yYWdlVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvY2F0ZWRTdG9yYWdlXFxcIikpXFxuXFx0cyA8IDQwMFxcblxcdF9wZl9yZHNncDNfY3VzdG9tKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWlvMS1pb3BzLXJhdGlvXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcInBvc3RncmVzIGlvMSBJb3BzIG1heSBub3QgZXhjZWVkIDUwIHBlciBHaUIgb2Ygc3RvcmFnZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIGJlbmNoZWQgZW5naW5lL3R5cGUgcGFpcjsgdGhlIGhpc3RvcmljYWwgNjQwMDAgSU9QUyBjYXAgaXNcXG4jIGdvbmUgKDgwMDAwIGRlcGxveWVkIGNsZWFuIGF0IHJhdGlvIDQwIG9uIDIwMjYtMDktMDMpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWlvMS1pb3BzLXJhdGlvXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzICV2IGlzICV2IHBlciBHaUIgZm9yICV2IEdpQjsgcG9zdGdyZXMgaW8xIGFsbG93cyBhdCBtb3N0IDUwIChcXFxcXFxcIkludmFsaWQgaW9wcyB0byBzdG9yYWdlIChHaUIpIHJhdGlvXFxcXFxcXCIpXFxcIiwgW24sIG4gLyBzLCBzXSksXFxuXFx0XFxcIktlZXAgSW9wcyBhdCBvciBiZWxvdyA1MCB4IEFsbG9jYXRlZFN0b3JhZ2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKSA9PSBcXFwicG9zdGdyZXNcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TdG9yYWdlVHlwZVxcXCIpID09IFxcXCJpbzFcXFwiXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvY2F0ZWRTdG9yYWdlXFxcIikpXFxuXFx0cyA+IDBcXG5cXHRuID4gcyAqIDUwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWlvcHMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiaW8xIGFuZCBpbzIgc3RvcmFnZSByZXF1aXJlIHRoZSBJb3BzIHByb3BlcnR5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWlvcHMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIlN0b3JhZ2VUeXBlICVzIHJlcXVpcmVzIElvcHMgKFxcXFxcXFwiVGhlIHN0b3JhZ2UgdHlwZSAlcyByZXF1aXJlcyBpb3BzIHRvIGJlIHNwZWNpZmllZC5cXFxcXFxcIilcXFwiLCBbc3QsIHN0XSksXFxuXFx0XFxcIlNldCBJb3BzIGFsb25nc2lkZSB0aGUgcHJvdmlzaW9uZWQtSU9QUyBzdG9yYWdlIHR5cGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRzdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN0b3JhZ2VUeXBlXFxcIilcXG5cXHRzdCBpbiB7XFxcImlvMVxcXCIsIFxcXCJpbzJcXFwifVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJJb3BzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1wYXNzd29yZC12YWxpZFwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYXN0ZXJVc2VyUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgd2l0aG91dCAnLycsICdAJywgJ1xcXFxcXFwiJyBvciBzcGFjZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzcHdfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCJcXG5cXG5fcGZfcmRzcHdfdHlwZXMgOj0ge1xcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIsIFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIn1cXG5cXG5fcGZfcmRzcHdfZm9yYmlkZGVuIDo9IHtcXFwiL1xcXCIsIFxcXCJAXFxcIiwgXFxcIlxcXFxcXFwiXFxcIiwgXFxcIiBcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiLFxcblxcdFxcXCJNYXN0ZXJVc2VyUGFzc3dvcmQgaXMgc2hvcnRlciB0aGFuIDggY2hhcmFjdGVyczsgUkRTIHJlamVjdHMgaXQgYXQgY3JlYXRlIHRpbWVcXFwiLFxcblxcdFxcXCJVc2UgOCsgY2hhcmFjdGVycywgb3IgYSBTZWNyZXRzIE1hbmFnZXIgcmVmZXJlbmNlXFxcIixcXG5cXHRfcGZfcmRzcHdfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiBfcGZfcmRzcHdfdHlwZXNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0cHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiKVxcblxcdGlzX3N0cmluZyhwdylcXG5cXHRjb3VudChwdykgPCA4XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1hc3RlclVzZXJQYXNzd29yZCBjb250YWlucyAnJXMnOyBSRFMgZm9yYmlkcyAnLycsICdAJywgZG91YmxlIHF1b3RlcyBhbmQgc3BhY2VzXFxcIiwgW2NoXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgZm9yYmlkZGVuIGNoYXJhY3Rlciwgb3IgdXNlIGEgU2VjcmV0cyBNYW5hZ2VyIHJlZmVyZW5jZVxcXCIsXFxuXFx0X3BmX3Jkc3B3X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4gX3BmX3Jkc3B3X3R5cGVzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHB3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFzdGVyVXNlclBhc3N3b3JkXFxcIilcXG5cXHRpc19zdHJpbmcocHcpXFxuXFx0c29tZSBjaCBpbiBfcGZfcmRzcHdfZm9yYmlkZGVuXFxuXFx0Y29udGFpbnMocHcsIGNoKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1wb3J0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkYXRhYmFzZSBwb3J0IG11c3QgYmUgd2l0aGluIDExNTAtNjU1MzVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc3BvcnRfb3V0KG4pIGlmIG4gPCAxMTUwXFxuXFxuX3BmX3Jkc3BvcnRfb3V0KG4pIGlmIG4gPiA2NTUzNVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvcnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBvcnQgJXYgaXMgb3V0c2lkZSAxMTUwLTY1NTM1IChcXFxcXFxcIkludmFsaWQgZW5kcG9pbnQgcG9ydCAldi4gVmFsaWQgcmFuZ2UgaXM6IDExNTAtNjU1MzVcXFxcXFxcIilcXFwiLCBbbiwgbl0pLFxcblxcdFxcXCJQaWNrIGEgcG9ydCBiZXR3ZWVuIDExNTAgYW5kIDY1NTM1XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb3J0XFxcIikpXFxuXFx0X3BmX3Jkc3BvcnRfb3V0KG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2VydmVybGVzcyB2MiBNaW5DYXBhY2l0eSBtdXN0IG5vdCBleGNlZWQgTWF4Q2FwYWNpdHksIGFuZCBNYXhDYXBhY2l0eSBpcyBhdCBtb3N0IDI1NlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yZHNzdjJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvYXVyb3JhLXNlcnZlcmxlc3MtdjIuc2V0dGluZy1jYXBhY2l0eS5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1pbkNhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNaW5DYXBhY2l0eSAldiBleGNlZWRzIE1heENhcGFjaXR5ICV2IChcXFxcXFxcIm1pbmltdW0gY2FwYWNpdHkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4aW11bSBjYXBhY2l0eVxcXFxcXFwiKVxcXCIsIFttbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5DYXBhY2l0eSA8PSBNYXhDYXBhY2l0eVxcXCIsXFxuXFx0X3BmX3Jkc3N2Ml91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1pbkNhcGFjaXR5XFxcIikpXFxuXFx0bXggOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24uTWF4Q2FwYWNpdHlcXFwiKSlcXG5cXHRtbiA+IG14XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1heENhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNYXhDYXBhY2l0eSAldiBpcyBhYm92ZSAyNTYgQUNVcyAoXFxcXFxcXCJUaGUgdmFsaWQgc2NhbGluZyByYW5nZSBmb3IgdGhpcyBjbHVzdGVyIGlzIDAuMCB0byAyNTYuMC5cXFxcXFxcIilcXFwiLCBbbXhdKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMjU2IEFDVXNcXFwiLFxcblxcdF9wZl9yZHNzdjJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIilcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2ZXJsZXNzVjJTY2FsaW5nQ29uZmlndXJhdGlvbi5NYXhDYXBhY2l0eVxcXCIpKVxcblxcdG14ID4gMjU2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXN1Ym5ldC1ncm91cC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRCIHN1Ym5ldCBncm91cCBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIHNwYWNlcywgZG90LCB1bmRlcnNjb3JlIGFuZCBoeXBoZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtc3VibmV0LWdyb3VwLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEQlN1Ym5ldEdyb3VwTmFtZSAnJXMnIGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJJbnZhbGlkIHN1Ym5ldCBncm91cCBuYW1lXFxcXFxcXCI6IFJEUyBhY2NlcHRzIG9ubHkgbGV0dGVycywgbnVtYmVycywgc3BhY2VzLCBkb3QsIHVuZGVyc2NvcmUgYW5kIGh5cGhlblxcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgc3VibmV0IGdyb3VwIHVzaW5nIFthLXpBLVowLTkgLl8tXSBvbmx5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQlN1Ym5ldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJTdWJuZXRHcm91cFxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05IC5fLV17MSwyNTV9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXdpbmRvdy1vdmVybGFwXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBiYWNrdXAgd2luZG93IGFuZCB0aGUgbWFpbnRlbmFuY2Ugd2luZG93IG11c3Qgbm90IG92ZXJsYXBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBcXFwiSEg6TU1cXFwiIC0+IG1pbnV0ZXMgb2YgZGF5OyB1bmRlZmluZWQgZm9yIGFueXRoaW5nIGVsc2UuIERpZ2l0cyBnb1xcbiMgdGhyb3VnaCBhIGxvb2t1cCB0YWJsZSBiZWNhdXNlIHRvX251bWJlciByZWplY3RzIGxlYWRpbmcgemVyb3NcXG4jICh0b19udW1iZXIoXFxcIjAzXFxcIikgaXMgdW5kZWZpbmVkIGluIHRoZSBlbmdpbmUncyBSZWdvIGJ1aWxkKS5cXG5fcGZfcmRzd29fZGlnaXQgOj0ge1xcXCIwXFxcIjogMCwgXFxcIjFcXFwiOiAxLCBcXFwiMlxcXCI6IDIsIFxcXCIzXFxcIjogMywgXFxcIjRcXFwiOiA0LCBcXFwiNVxcXCI6IDUsIFxcXCI2XFxcIjogNiwgXFxcIjdcXFwiOiA3LCBcXFwiOFxcXCI6IDgsIFxcXCI5XFxcIjogOX1cXG5cXG5fcGZfcmRzd29fbWluKHQpIDo9IG0gaWYge1xcblxcdGlzX3N0cmluZyh0KVxcblxcdHJlZ2V4Lm1hdGNoKGBeKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0kYCwgdClcXG5cXHRoIDo9IChfcGZfcmRzd29fZGlnaXRbc3Vic3RyaW5nKHQsIDAsIDEpXSAqIDEwKSArIF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMSwgMSldXFxuXFx0bWkgOj0gKF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMywgMSldICogMTApICsgX3BmX3Jkc3dvX2RpZ2l0W3N1YnN0cmluZyh0LCA0LCAxKV1cXG5cXHRtIDo9IChoICogNjApICsgbWlcXG59XFxuXFxuIyBUaGUgYmFja3VwIHdpbmRvdyByZWN1cnMgZGFpbHksIHNvIGEgc2FtZS1kYXkgbWFpbnRlbmFuY2Ugd2luZG93XFxuIyBvdmVybGFwcyB3aGVuZXZlciB0aGUgdGltZS1vZi1kYXkgaW50ZXJ2YWxzIGludGVyc2VjdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy13aW5kb3ctb3ZlcmxhcFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYWNrdXAgd2luZG93ICVzIG92ZXJsYXBzIG1haW50ZW5hbmNlIHdpbmRvdyAlczsgUkRTIHJlamVjdHMgdGhlIHBhaXIgKFxcXFxcXFwiVGhlIGJhY2t1cCB3aW5kb3cgYW5kIG1haW50ZW5hbmNlIHdpbmRvdyBtdXN0IG5vdCBvdmVybGFwLlxcXFxcXFwiKVxcXCIsIFtidywgbXddKSxcXG5cXHRcXFwiU2VwYXJhdGUgdGhlIHR3byB3aW5kb3dzIGluIHRpbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRidyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKGJ3KVxcblxcdGJwIDo9IHNwbGl0KGJ3LCBcXFwiLVxcXCIpXFxuXFx0Y291bnQoYnApID09IDJcXG5cXHRicyA6PSBfcGZfcmRzd29fbWluKGJwWzBdKVxcblxcdGJlIDo9IF9wZl9yZHN3b19taW4oYnBbMV0pXFxuXFx0YnMgPCBiZVxcblxcdG13IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3dcXFwiKVxcblxcdGlzX3N0cmluZyhtdylcXG5cXHRtcCA6PSBzcGxpdChsb3dlcihtdyksIFxcXCItXFxcIilcXG5cXHRjb3VudChtcCkgPT0gMlxcblxcdG0xIDo9IHNwbGl0KG1wWzBdLCBcXFwiOlxcXCIpXFxuXFx0bTIgOj0gc3BsaXQobXBbMV0sIFxcXCI6XFxcIilcXG5cXHRjb3VudChtMSkgPT0gM1xcblxcdGNvdW50KG0yKSA9PSAzXFxuXFx0bTFbMF0gPT0gbTJbMF1cXG5cXHRtcyA6PSBfcGZfcmRzd29fbWluKHNwcmludGYoXFxcIiVzOiVzXFxcIiwgW20xWzFdLCBtMVsyXV0pKVxcblxcdG1lIDo9IF9wZl9yZHN3b19taW4oc3ByaW50ZihcXFwiJXM6JXNcXFwiLCBbbTJbMV0sIG0yWzJdXSkpXFxuXFx0bXMgPCBtZVxcblxcdGJzIDwgbWVcXG5cXHRtcyA8IGJlXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1hbGlhcy1jbG91ZGZyb250LXpvbmUtaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ2xvdWRGcm9udCBhbGlhcyB0YXJnZXQgbXVzdCB1c2UgaG9zdGVkIHpvbmUgWjJGRFROREFUQVFZVzJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFdmVyeSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBpcyBhbGlhc2VkIHRocm91Z2ggdGhlIHNpbmdsZSBnbG9iYWwgaG9zdGVkXFxuIyB6b25lIFoyRkRUTkRBVEFRWVcyLiBBbnkgb3RoZXIgQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkIChhbiBBTEIncyByZWdpb25hbFxcbiMgem9uZSBpZCBpcyB0aGUgY2xhc3NpYyBwYXN0ZSBlcnJvcikgZmFpbHMgYXQgZGVwbG95IHRpbWUgd2l0aCBcXFwidGhlIGFsaWFzXFxuIyB0YXJnZXQgbmFtZSBkb2VzIG5vdCBsaWUgd2l0aGluIHRoZSB0YXJnZXQgem9uZVxcXCIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWFsaWFzLWNsb3VkZnJvbnQtem9uZS1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgYWxpYXMgdGFyZ2V0cyBhIENsb3VkRnJvbnQgZG9tYWluLCBzbyBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgbXVzdCBiZSBaMkZEVE5EQVRBUVlXMiwgbm90ICclcydcXFwiLCBbemlkXSksXFxuXFx0XFxcIlNldCBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgdG8gWjJGRFROREFUQVFZVzIgKGluIHRoZSBDREssIHJvdXRlNTNfdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0IGRvZXMgdGhpcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvY2ZfcmVnaW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0ZG5zIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuRE5TTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGRucylcXG5cXHRlbmRzd2l0aCh0cmltX3N1ZmZpeChsb3dlcihkbnMpLCBcXFwiLlxcXCIpLCBcXFwiLmNsb3VkZnJvbnQubmV0XFxcIilcXG5cXHR6aWQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6aWQpXFxuXFx0emlkICE9IFxcXCJaMkZEVE5EQVRBUVlXMlxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWFwZXgtY25hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ05BTUUgcmVjb3JkIGlzIG5vdCBwZXJtaXR0ZWQgYXQgdGhlIHpvbmUgYXBleFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M19hcGV4X25vcm0obikgOj0gdHJpbV9zdWZmaXgobG93ZXIobiksIFxcXCIuXFxcIilcXG5cXG4jIFRoZSBlbmdpbmUncyBFMzAyMyBjYXRjaGVzIGFuIGFwZXggQ05BTUUgb25seSB3aGVuIHRoZSByZWNvcmQgY2FycmllcyBhXFxuIyBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lLiBDREsgTDIgYWx3YXlzIGxpbmtzIHJlY29yZHMgd2l0aFxcbiMgSG9zdGVkWm9uZUlkOiB7XFxcIlJlZlxcXCI6IDx6b25lPn0sIHdoaWNoIEUzMDIzIGRvZXMgbm90IHNlZSAobWVhc3VyZWQgMjAyNi0wOS0wMixcXG4jIGVuZ2luZSAxLjcuMC1iZXRhKS4gcmVzb2x2ZSgpIHR1cm5zIHN1Y2ggYSBSZWYgaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRCxcXG4jIHNvIHdoZW4gdGhhdCBJRCBuYW1lcyBhIEhvc3RlZFpvbmUgaW4gdGhlIHNhbWUgdGVtcGxhdGUgd2UgY2FuIHJlYWQgaXRzXFxuIyBsaXRlcmFsIE5hbWUgYW5kIGRvIHRoZSBhcGV4IGNvbXBhcmlzb24gb3Vyc2VsdmVzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1hcGV4LWNuYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBIENOQU1FIHJlY29yZCBpcyBub3QgcGVybWl0dGVkIGF0IHRoZSB6b25lIGFwZXggKCclcycpOyB0aGUgZGVwbG95bWVudCBmYWlscyB3aXRoIFxcXFxcXFwiUlJTZXQgb2YgdHlwZSBDTkFNRSAuLi4gaXMgbm90IHBlcm1pdHRlZCBhdCBhcGV4XFxcXFxcXCJcXFwiLCBbcmVjTmFtZV0pLFxcblxcdFxcXCJVc2UgYW4gYWxpYXMgQS9BQUFBIHJlY29yZCBmb3IgdGhlIGFwZXggKEFsaWFzVGFyZ2V0KSwgb3IgbW92ZSB0aGUgQ05BTUUgdG8gYSBzdWJkb21haW5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcmVzb3VyY2UtcmVjb3JkLXNldHMtY2hvb3NpbmctYWxpYXMtbm9uLWFsaWFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHpyZWYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6cmVmKVxcblxcdHpyZWYgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6SG9zdGVkWm9uZVxcXCIpXFxuXFx0em9uZU5hbWUgOj0gcmVzb2x2ZSh6cmVmLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoem9uZU5hbWUpXFxuXFx0cmVjTmFtZSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhyZWNOYW1lKVxcblxcdF9wZl9yNTNfYXBleF9ub3JtKHJlY05hbWUpID09IF9wZl9yNTNfYXBleF9ub3JtKHpvbmVOYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtZ2VvbG9jYXRpb24tZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgZXhwcmVzc2VzIHRoaXMgYXMgYSBvbmVPZiwgd2hpY2ggdGhlIHNlcnZlci1zaWRlXFxuIyBwcmUtZGVwbG95IHZhbGlkYXRpb24gZW5mb3JjZXMgKFxcXCIyIHN1YnNjaGVtYXMgbWF0Y2hlZCBpbnN0ZWFkIG9mIG9uZVxcXCIpIGJ1dFxcbiMgdGhlIGJ1bmRsZWQgZW5naW5lIGRvZXMgbm90IGV2YWx1YXRlIOKAlCBoZW5jZSB1cHN0cmVhbTogcGVuZGluZy1lbmdpbmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWdlb2xvY2F0aW9uLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR2VvTG9jYXRpb25cXFwiLFxcblxcdFxcXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlOyBDbG91ZEZvcm1hdGlvbiByZWplY3RzIHRoZSByZWNvcmQgc2V0IGJlZm9yZSBwcm92aXNpb25pbmdcXFwiLFxcblxcdFxcXCJLZWVwIGVpdGhlciB0aGUgQ29udGluZW50Q29kZSBvciB0aGUgQ291bnRyeUNvZGUgKGFkZCBTdWJkaXZpc2lvbkNvZGUgb25seSBuZXh0IHRvIENvdW50cnlDb2RlIFVTKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtcm91dGU1My1yZWNvcmRzZXQtZ2VvbG9jYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRnZW8gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5HZW9Mb2NhdGlvblxcXCIpXFxuXFx0aXNfb2JqZWN0KGdlbylcXG5cXHRpc19zdHJpbmcob2JqZWN0LmdldChnZW8sIFxcXCJDb250aW5lbnRDb2RlXFxcIiwgbnVsbCkpXFxuXFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoZ2VvLCBcXFwiQ291bnRyeUNvZGVcXFwiLCBudWxsKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggQWxpYXNUYXJnZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdFxcXCJNdWx0aVZhbHVlQW5zd2VyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIEFsaWFzVGFyZ2V0OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJNdWx0aXZhbHVlIGFuc3dlciBycnNldCBzaG91bGQgbm90IGJlIGFuIGFsaWFzIHJyc2V0XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgcGxhaW4gbXVsdGl2YWx1ZSByZWNvcmRzIHdpdGggUmVzb3VyY2VSZWNvcmRzLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXIgYW5kIGtlZXAgdGhlIGFsaWFzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOUyByZWNvcmRzIHRha2Ugbm8gcm91dGluZyBwb2xpY3k7IENOQU1FIGNhbm5vdCBiZSBtdWx0aXZhbHVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfdHlwb2xfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbl9wZl9yNTNfdHlwb2xfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3R5cG9sX3Byb3BzXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BdKSkgIT0gbnVsbFxcbn1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuIyBPbmx5IGNvbWJpbmF0aW9ucyB0aGF0IGZhaWxlZCBvbiBhIHJlYWwgZGVwbG95IGFyZSBmbGFnZ2VkLiBTT0EvRFMgd2l0aCBhXFxuIyByb3V0aW5nIHBvbGljeSBhcmUgYWxzbyBkb2N1bWVudGVkIGFzIHVuc3VwcG9ydGVkIGJ1dCB3ZXJlIG5vdCBtZWFzdXJlZCwgc29cXG4jIHRoZXkgYXJlIGRlbGliZXJhdGVseSBsZWZ0IG91dCAoc2VlIHRoZSBkaXNjb3ZlcnkgaXNzdWUpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkFuIE5TIHJlY29yZCBjYW5ub3QgdXNlIGEgcm91dGluZyBwb2xpY3k7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcInRoaXMgdHlwZSBvZiBSUlNldCBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgYSBzaW1wbGUgcmVjb3JkIHNldCBmb3IgTlMgcmVjb3JkcyAobm8gV2VpZ2h0L1JlZ2lvbi9GYWlsb3Zlci9HZW9Mb2NhdGlvbi9NdWx0aVZhbHVlQW5zd2VyL0NpZHJSb3V0aW5nQ29uZmlnKVxcXCIsXFxuXFx0X3BmX3I1M190eXBvbF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiTlNcXFwiXFxuXFx0X3BmX3I1M190eXBvbF9oYXNfcG9saWN5KG5hbWUpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkEgQ05BTUUgcmVjb3JkIGNhbm5vdCB1c2UgdGhlIG11bHRpdmFsdWUgYW5zd2VyIHJvdXRpbmcgcG9saWN5OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJ0aGlzIHR5cGUgb2YgUlJTZXQgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiUG9pbnQgdGhlIG11bHRpdmFsdWUgcmVjb3JkcyBhdCBBL0FBQUEgKG9yIGFub3RoZXIgc3VwcG9ydGVkIHR5cGUpLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdF9wZl9yNTNfdHlwb2xfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVjb3JkIHNldCBuZWVkcyBBbGlhc1RhcmdldCBvciB0aGUgZnVsbCBUVEwrUmVzb3VyY2VSZWNvcmRzIHBhaXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M192YWxzcmNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbiMgVGhlIHNlcnZpY2UgZXhwZWN0cyBcXFwiZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kXFxuIyBSZXNvdXJjZVJlY29yZHNdXVxcXCIgKFRyYWZmaWNQb2xpY3lJbnN0YW5jZUlkIGhhcyBubyBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSkuXFxuIyBUaGUgVFRMK0FsaWFzVGFyZ2V0IGNvbWJpbmF0aW9uIGlzIGFscmVhZHkgdGhlIGVuZ2luZSdzIEUzMDI5LCBzbyB0aGlzIHJ1bGVcXG4jIGNvdmVycyB0aGUgcmVtYWluaW5nIHNoYXBlczogYWxpYXMgcGx1cyByZWNvcmRzLCBhbmQgYW4gaW5jb21wbGV0ZSBub24tYWxpYXNcXG4jIGdyb3VwIChyZWNvcmRzIHdpdGhvdXQgVFRMLCBUVEwgd2l0aG91dCByZWNvcmRzLCBvciBuZWl0aGVyKS5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSkgaWYge1xcblxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIilcXG59XFxuXFxuX3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIpICE9IG51bGxcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRcXFwiQWxpYXNUYXJnZXQgYW5kIFJlc291cmNlUmVjb3JkcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlOyB0aGUgc2VydmljZSBleHBlY3RzIGV4YWN0bHkgb25lIG9mIEFsaWFzVGFyZ2V0IG9yIFRUTC1wbHVzLVJlc291cmNlUmVjb3Jkc1xcXCIsXFxuXFx0XFxcIktlZXAgdGhlIEFsaWFzVGFyZ2V0IGFuZCBkcm9wIFJlc291cmNlUmVjb3Jkcywgb3IgbWFrZSBpdCBhIHBsYWluIHJlY29yZCB3aXRoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRfcGZfcjUzX3ZhbHNyY191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSlcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRcXFwiQSBub24tYWxpYXMgcmVjb3JkIHNldCBuZWVkcyBib3RoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzOyB0aGUgc2VydmljZSByZWplY3RzIGFuIGluY29tcGxldGUgcGFpciB3aXRoIFxcXFxcXFwiRXhwZWN0ZWQgZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kIFJlc291cmNlUmVjb3Jkc11dIC4uLiBmb3VuZCBub25lXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTcGVjaWZ5IFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzIHRvZ2V0aGVyLCBvciB1c2UgQWxpYXNUYXJnZXQgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX3I1M192YWxzcmNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0bm90IF9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKVxcblxcdG5vdCBfcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKVxcbn1cXG5cXG5fcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKSBpZiB7XFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3JyKG5hbWUpXFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHJlY29yZCBzZXQgY2FuIHVzZSBvbmx5IG9uZSByb3V0aW5nIHBvbGljeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIGVuZm9yY2VzIFxcXCJFeHBlY3RlZCBleGFjdGx5IG9uZSBvZiBbV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLFxcbiMgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIEdlb1Byb3hpbWl0eUxvY2F0aW9uLCBvciBDaWRyUm91dGluZ0NvbmZpZ11cXFwiLlxcbiMgR2VvUHJveGltaXR5TG9jYXRpb24gaXMgbm90IGEgQ2xvdWRGb3JtYXRpb24gcHJvcGVydHksIHNvIGZpdmUgcmVtYWluIGhlcmUuXFxuIyBNdWx0aVZhbHVlQW5zd2VyOiBmYWxzZSBpcyB0cmVhdGVkIGFzIGFic2VudCDigJQgb25seSB0cnVlIHNlbGVjdHMgdGhlIHBvbGljeS5cXG5fcGZfcjUzX3BvbHhfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3BvbHhfcHJlc2VudChuYW1lLCBwcm9wKSBpZiB7XFxuXFx0cHJvcCAhPSBcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIFxcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIikgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuX3BmX3I1M19wb2x4X3BvbGljaWVzKG5hbWUpIDo9IHBzIGlmIHtcXG5cXHRwcyA6PSBbcCB8IHNvbWUgcCBpbiBhcnJheS5jb25jYXQoX3BmX3I1M19wb2x4X3Byb3BzLCBbXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiXSk7IF9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIHApXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQSByZWNvcmQgc2V0IGNhbiB1c2Ugb25seSBvbmUgcm91dGluZyBwb2xpY3ksIGJ1dCAldiBhcmUgYWxsIHNwZWNpZmllZFxcXCIsIFtwc10pLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIG9mIFdlaWdodCwgUmVnaW9uLCBGYWlsb3ZlciwgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIG9yIENpZHJSb3V0aW5nQ29uZmlnIGFuZCBzcGxpdCB0aGUgcmVzdCBpbnRvIHNlcGFyYXRlIHJlY29yZCBzZXRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRwcyA6PSBfcGZfcjUzX3BvbHhfcG9saWNpZXMobmFtZSlcXG5cXHRjb3VudChwcykgPiAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXRJZGVudGlmaWVyIGFuZCBhIHJvdXRpbmcgcG9saWN5IG11c3QgYXBwZWFyIHRvZ2V0aGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfc2lkcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuX3BmX3I1M19zaWRwX3Byb3BzIDo9IFtcXFwiV2VpZ2h0XFxcIiwgXFxcIlJlZ2lvblxcXCIsIFxcXCJGYWlsb3ZlclxcXCIsIFxcXCJHZW9Mb2NhdGlvblxcXCIsIFxcXCJDaWRyUm91dGluZ0NvbmZpZ1xcXCJdXFxuXFxuX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3NpZHBfcHJvcHNcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiQSByb3V0aW5nIHBvbGljeSBpcyBjb25maWd1cmVkIGJ1dCBTZXRJZGVudGlmaWVyIGlzIG1pc3Npbmc7IHRoZSBDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiTWlzc2luZyBmaWVsZCAnU2V0SWRlbnRpZmllcidcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIFNldElkZW50aWZpZXIgdGhhdCBpcyB1bmlxdWUgYW1vbmcgdGhlIHJlY29yZCBzZXRzIHNoYXJpbmcgdGhpcyBOYW1lIGFuZCBUeXBlXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0X3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSlcXG5cXHRub3QgaXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtc2V0LWlkZW50aWZpZXItcGFpcmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIsXFxuXFx0XFxcIlNldElkZW50aWZpZXIgaXMgc3BlY2lmaWVkIGJ1dCBubyByb3V0aW5nIHBvbGljeSBpczsgdGhlIHNlcnZpY2UgZXhwZWN0cyBleGFjdGx5IG9uZSBvZiBXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsIEdlb0xvY2F0aW9uLCBNdWx0aVZhbHVlQW5zd2VyLCBvciBDaWRyUm91dGluZ0NvbmZpZyBhbmQgZmluZHMgbm9uZVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBTZXRJZGVudGlmaWVyIGZyb20gdGhpcyBzaW1wbGUgcmVjb3JkIHNldCwgb3IgYWRkIHRoZSByb3V0aW5nIHBvbGljeSBpdCB3YXMgbWVhbnQgZm9yXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcblxcdG5vdCBfcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtdHRsLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUVEwgbXVzdCBmaXQgaW4gMzIgYml0cyAoMC4uMjE0NzQ4MzY0NyBzZWNvbmRzKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCBpcyBlbmZvcmNlZDogdGhlIHNlcnZpY2UgcmVqZWN0ZWQgOTk5OTk5OTk5OSB3aXRoXFxuIyBcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjE0NzQ4MzY0N1xcXCIuIE5lZ2F0aXZlIFRUTHMgYXJlXFxuIyB1bnRlc3RlZCwgc28gdGhleSBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBmbGFnZ2VkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My10dGwtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVFRMIG11c3QgYmUgYXQgbW9zdCAyMTQ3NDgzNjQ3IHNlY29uZHMsIGdvdCAldlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBUVEwgdG8gYSAzMi1iaXQgdmFsdWU7IGFueXRoaW5nIGFib3ZlIGEgZGF5IHJhcmVseSBoZWxwcyBjYWNoaW5nIGFueXdheVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NoYW5nZVJlc291cmNlUmVjb3JkU2V0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UVExcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHQpXFxuXFx0biA+IDIxNDc0ODM2NDdcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiV2VpZ2h0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgaXMgZW5mb3JjZWQ6IHRoZSBzZXJ2aWNlIHJlamVjdGVkIDMwMCB3aXRoIFxcXCJNZW1iZXJcXG4jIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjU1XFxcIi4gTmVnYXRpdmUgd2VpZ2h0cyBhcmUgdW50ZXN0ZWQsXFxuIyBzbyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbm90IGZsYWdnZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJXZWlnaHQgbXVzdCBiZSBhdCBtb3N0IDI1NSwgZ290ICV2XFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFdlaWdodCB0byBhIHZhbHVlIGluIFswLCAyNTVdOyB3ZWlnaHRzIGFyZSByZWxhdGl2ZSwgc28gc2NhbGUgdGhlIGdyb3VwIGRvd24gcHJvcG9ydGlvbmFsbHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIilcXG5cXHRuIDo9IHRvX251bWJlcih3KVxcblxcdG4gPiAyNTVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXpvbmVuYW1lLXRyYWlsaW5nLWRvdFwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSG9zdGVkWm9uZU5hbWUgbXVzdCBlbmQgd2l0aCBhIHRyYWlsaW5nIGRvdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENsb3VkRm9ybWF0aW9uIGxvb2tzIHRoZSB6b25lIHVwIGJ5IHRoZSBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lIGFuZCBkb2VzIG5vdFxcbiMgbm9ybWFsaXplIHRoZSB0cmFpbGluZyBkb3Q6IHRoZSBzYW1lIHN0YWNrIGRlcGxveWVkIGNsZWFuIHdpdGhcXG4jIFxcXCJ6b25lLmV4YW1wbGUuXFxcIiBhbmQgZmFpbGVkIHdpdGggTm90Rm91bmQgZm9yIFxcXCJ6b25lLmV4YW1wbGVcXFwiICgyMDI2LTA5LTAyKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtem9uZW5hbWUtdHJhaWxpbmctZG90XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSG9zdGVkWm9uZU5hbWUgJyVzJyBpcyBtaXNzaW5nIHRoZSB0cmFpbGluZyBkb3QsIHNvIENsb3VkRm9ybWF0aW9uIGZhaWxzIHRoZSBsb29rdXAgd2l0aCBcXFxcXFxcIk5vIGhvc3RlZCB6b25lIHdpdGggbmFtZSAuLi4gZm91bmRcXFxcXFxcIlxcXCIsIFt6bl0pLFxcblxcdHNwcmludGYoXFxcIlVzZSAnJXMuJyAod2l0aCB0aGUgdHJhaWxpbmcgZG90KVxcXCIsIFt6bl0pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHpuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSG9zdGVkWm9uZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh6bilcXG5cXHR6biAhPSBcXFwiXFxcIlxcblxcdG5vdCBlbmRzd2l0aCh6biwgXFxcIi5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWFjY2VsZXJhdGUtZG90dGVkLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUcmFuc2ZlciBBY2NlbGVyYXRpb24gcmVqZWN0cyBidWNrZXQgbmFtZXMgd2l0aCBwZXJpb2RzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBlbmRwb2ludHMgYXJlIEROUy1iYXNlZCwgc28gYnVja2V0IG5hbWVzIGNvbnRhaW5pbmdcXG4jIHBlcmlvZHMgYXJlIHJlamVjdGVkIGF0IGNyZWF0aW9uLiBPbmx5IGEgbGl0ZXJhbCBCdWNrZXROYW1lIGlzIGNoZWNrYWJsZTtcXG4jIENESy1nZW5lcmF0ZWQgbmFtZXMgbmV2ZXIgY29udGFpbiBwZXJpb2RzIGFueXdheS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWFjY2VsZXJhdGUtZG90dGVkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2VsZXJhdGVDb25maWd1cmF0aW9uLkFjY2VsZXJhdGlvblN0YXR1c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQnVja2V0IG5hbWUgJyVzJyBjb250YWlucyBwZXJpb2RzLCB3aGljaCBUcmFuc2ZlciBBY2NlbGVyYXRpb24gZG9lcyBub3Qgc3VwcG9ydDsgQ3JlYXRlQnVja2V0IGZhaWxzIHdpdGggXFxcXFxcXCJTMyBUcmFuc2ZlciBBY2NlbGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgYnVja2V0cyB3aXRoIHBlcmlvZHMgKC4pIGluIHRoZWlyIG5hbWVzXFxcXFxcXCJcXFwiLCBbYm5dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBidWNrZXQgd2l0aG91dCBwZXJpb2RzLCBvciBkcm9wIEFjY2VsZXJhdGVDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvdHJhbnNmZXItYWNjZWxlcmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb24uQWNjZWxlcmF0aW9uU3RhdHVzXFxcIikgPT0gXFxcIkVuYWJsZWRcXFwiXFxuXFx0Ym4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CdWNrZXROYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoYm4pXFxuXFx0Y29udGFpbnMoYm4sIFxcXCIuXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1idWNrZXQtcG9saWN5LWFjdGlvbi1yZXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdC1sZXZlbCBhY3Rpb25zIG5lZWQgYW4gb2JqZWN0LWxldmVsIFJlc291cmNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFuIG9iamVjdC1sZXZlbCBhY3Rpb24gd2hvc2Ugc3RhdGVtZW50IGxpc3RzIG9ubHkgYnVja2V0LWxldmVsIEFSTnMgYXBwbGllc1xcbiMgdG8gbm90aGluZywgYW5kIFMzIHJlamVjdHMgdGhlIHBvbGljeS4gQSBidWNrZXQtbGV2ZWwgQVJOIGlzIHByb3ZhYmxlIHR3b1xcbiMgd2F5czogYSBsaXRlcmFsIGFybjouLi46czM6OjpuYW1lIHdpdGggbm8gXFxcIi9cXFwiIGluIHRoZSBuYW1lIHBhcnQsIG9yIGEgdmFsdWVcXG4jIHRoYXQgcmVzb2x2ZSgpIHR1cm5zIGludG8gdGhlIGxvZ2ljYWwgSUQgb2YgYW4gaW4tdGVtcGxhdGUgYnVja2V0IChSZWYgYW5kXFxuIyBGbjo6R2V0QXR0IEFybiBib3RoIGRvIOKAlCB0aGUgR2V0QXR0IG9mIGEgYnVja2V0IGlzIGl0cyBidWNrZXQgQVJOKS4gRmlyZXNcXG4jIG9ubHkgd2hlbiBldmVyeSByZXNvdXJjZSBpbiB0aGUgc3RhdGVtZW50IGlzIHByb3ZhYmx5IGJ1Y2tldC1sZXZlbCwgc29cXG4jIHVucmVzb2x2YWJsZSBlbnRyaWVzIChlLmcuIEZuOjpTdWIgXFxcIiR7Qi5Bcm59LypcXFwiKSBtdXRlIHRoZSBzdGF0ZW1lbnQuXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIHN0YXJ0c3dpdGgobG93ZXIoYSksIFxcXCJzMzpnZXRvYmplY3RcXFwiKVxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBzdGFydHN3aXRoKGxvd2VyKGEpLCBcXFwiczM6cHV0b2JqZWN0XFxcIilcXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgc3RhcnRzd2l0aChsb3dlcihhKSwgXFxcInMzOmRlbGV0ZW9iamVjdFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIGxvd2VyKGEpIGluIHtcXFwiczM6YWJvcnRtdWx0aXBhcnR1cGxvYWRcXFwiLCBcXFwiczM6cmVzdG9yZW9iamVjdFxcXCIsIFxcXCJzMzpsaXN0bXVsdGlwYXJ0dXBsb2FkcGFydHNcXFwifVxcblxcbl9wZl9zM2JwYXJfYnVja2V0X2xldmVsKHIpIGlmIHIgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9idWNrZXRfbGV2ZWwocikgaWYge1xcblxcdHN0YXJ0c3dpdGgociwgXFxcImFybjpcXFwiKVxcblxcdGNvbnRhaW5zKHIsIFxcXCI6czM6OjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KHIsIFxcXCI6OjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA9PSAyXFxuXFx0bm90IGNvbnRhaW5zKHBhcnRzWzFdLCBcXFwiL1xcXCIpXFxufVxcblxcbl9wZl9zM2JwYXJfYWN0aW9ucyhuYW1lLCBpKSA6PSBbYV0gaWYge1xcblxcdGEgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbaV0pKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfczNicGFyX2FjdGlvbnMobmFtZSwgaSkgOj0gYWN0cyBpZiB7XFxuXFx0aXRlbXMgOj0gW2l0IHwgc29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuQWN0aW9uXFxcIiwgW2ldKSldXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGFjdHMgOj0gW3YgfCBzb21lIGl0IGluIGl0ZW1zOyB2IDo9IGl0LnZhbHVlOyBpc19zdHJpbmcodildXFxufVxcblxcbl9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIGkpIDo9IFtyXSBpZiB7XFxuXFx0ciA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSlcXG5cXHRpc19zdHJpbmcocilcXG59XFxuXFxuX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgaSkgOj0gcnMgaWYge1xcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSldXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdHJzIDo9IFt2IHwgc29tZSBpdCBpbiBpdGVtczsgdiA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlLiVkXFxcIiwgW2ksIGl0LmluZGV4XSkpOyBpc19zdHJpbmcodildXFxuXFx0Y291bnQocnMpID09IGNvdW50KGl0ZW1zKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWJ1Y2tldC1wb2xpY3ktYWN0aW9uLXJlc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZVxcXCIsIFtzdC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkFjdGlvbiAnJXMnIHRhcmdldHMgb2JqZWN0cyBidXQgdGhlIHN0YXRlbWVudCdzIHJlc291cmNlcyBhcmUgYWxsIGJ1Y2tldC1sZXZlbCBBUk5zOyBTMyByZWplY3RzIHRoZSBwb2xpY3kgd2l0aCBcXFxcXFxcIkFjdGlvbiBkb2VzIG5vdCBhcHBseSB0byBhbnkgcmVzb3VyY2UocykgaW4gc3RhdGVtZW50XFxcXFxcXCJcXFwiLCBbYV0pLFxcblxcdFxcXCJBZGQgdGhlIG9iamVjdCBmb3JtIG9mIHRoZSBBUk4gKGFwcGVuZCAvKiBvciBhIGtleSBwYXR0ZXJuKSB0byBSZXNvdXJjZSwgb3IgZHJvcCB0aGUgb2JqZWN0LWxldmVsIGFjdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2J1Y2tldC1wb2xpY2llcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XFxcIilcXG5cXHRzb21lIHN0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChzdC52YWx1ZSlcXG5cXHRzb21lIGEgaW4gX3BmX3MzYnBhcl9hY3Rpb25zKG5hbWUsIHN0LmluZGV4KVxcblxcdF9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKVxcblxcdHJzIDo9IF9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIHN0LmluZGV4KVxcblxcdGNvdW50KHJzKSA+IDBcXG5cXHRldmVyeSByIGluIHJzIHtcXG5cXHRcXHRfcGZfczNicGFyX2J1Y2tldF9sZXZlbChyKVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1idWNrZXQtcG9saWN5LXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkJ1Y2tldCBwb2xpY3kgc3RhdGVtZW50cyBuZWVkIGEgUHJpbmNpcGFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlc291cmNlLWJhc2VkIHBvbGljaWVzIHJlcXVpcmUgUHJpbmNpcGFsIChvciBOb3RQcmluY2lwYWwpIGluIGV2ZXJ5XFxuIyBzdGF0ZW1lbnQg4oCUIHVubGlrZSBpZGVudGl0eSBwb2xpY2llcywgd2hlcmUgY2ZuLWxpbnQtZ3JhZGUgY2hlY2tzIGFyZVxcbiMgdHVuZWQuIEFuIHVucmVzb2x2YWJsZSBQcmluY2lwYWwgdmFsdWUgc3RpbGwgY291bnRzIGFzIHByZXNlbnQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1idWNrZXQtcG9saWN5LXByaW5jaXBhbFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWRcXFwiLCBbc3QuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIHN0YXRlbWVudCBoYXMgbmVpdGhlciBQcmluY2lwYWwgbm9yIE5vdFByaW5jaXBhbDsgUzMgcmVqZWN0cyB0aGUgcG9saWN5IHdpdGggXFxcXFxcXCJNaXNzaW5nIHJlcXVpcmVkIGZpZWxkIFByaW5jaXBhbFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgUHJpbmNpcGFsIChvciBOb3RQcmluY2lwYWwpIHRvIHRoZSBzdGF0ZW1lbnQg4oCUIGJ1Y2tldCBwb2xpY2llcyBhbHdheXMgbmFtZSB3aG8gdGhleSBhcHBseSB0b1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2J1Y2tldC1wb2xpY2llcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XFxcIilcXG5cXHRzb21lIHN0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChzdC52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHN0LnZhbHVlLCBcXFwiUHJpbmNpcGFsXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQoc3QudmFsdWUsIFxcXCJOb3RQcmluY2lwYWxcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMaWZlY3ljbGUgYXJjaGl2ZSB0cmFuc2l0aW9ucyBtdXN0IGNvbWUgMzArIGRheXMgYWZ0ZXIgSUEsIGFuZCBleHBpcmF0aW9uIGFmdGVyIGV2ZXJ5IHRyYW5zaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zM29yZF9maXggOj0gXFxcIk9yZGVyIHRoZSBsaWZlY3ljbGUgZGF5cyBzbyBhcmNoaXZlIHRyYW5zaXRpb25zIGNvbWUgYXQgbGVhc3QgMzAgZGF5cyBhZnRlciBJQSB0cmFuc2l0aW9ucyBhbmQgZXhwaXJhdGlvbiBjb21lcyBhZnRlciBldmVyeSB0cmFuc2l0aW9uXFxcIlxcblxcbl9wZl9zM29yZF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2xpZmVjeWNsZS10cmFuc2l0aW9uLWdlbmVyYWwtY29uc2lkZXJhdGlvbnMuaHRtbFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1kYXlzLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuVHJhbnNpdGlvbnNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlRyYW5zaXRpb24gdG8gJXMgYXQgJXYgZGF5cyBpcyBsZXNzIHRoYW4gMzAgZGF5cyBhZnRlciB0aGUgJXMgdHJhbnNpdGlvbiBhdCAldiBkYXlzOyBTMyByZXF1aXJlcyBvYmplY3RzIHRvIHN0YXkgYXQgbGVhc3QgMzAgZGF5cyBpbiBJQSBzdG9yYWdlXFxcIiwgW3NjMiwgZDIsIHNjMSwgZDFdKSxcXG5cXHRfcGZfczNvcmRfZml4LCBfcGZfczNvcmRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0dHJhbnMgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiVHJhbnNpdGlvbnNcXFwiLCBbXSlcXG5cXHRpc19hcnJheSh0cmFucylcXG5cXHRzb21lIHQxIGluIHRyYW5zXFxuXFx0aXNfb2JqZWN0KHQxKVxcblxcdHNjMSA6PSBvYmplY3QuZ2V0KHQxLCBcXFwiU3RvcmFnZUNsYXNzXFxcIiwgXFxcIlxcXCIpXFxuXFx0c2MxIGluIHtcXFwiU1RBTkRBUkRfSUFcXFwiLCBcXFwiT05FWk9ORV9JQVxcXCJ9XFxuXFx0cmF3MSA6PSBvYmplY3QuZ2V0KHQxLCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3MSAhPSBudWxsICMgdG9fbnVtYmVyKG51bGwpIOOBryAwIOOBq+OBquOCi1xcblxcdGQxIDo9IHRvX251bWJlcihyYXcxKVxcblxcdHNvbWUgdDIgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodDIpXFxuXFx0c2MyIDo9IG9iamVjdC5nZXQodDIsIFxcXCJTdG9yYWdlQ2xhc3NcXFwiLCBcXFwiXFxcIilcXG5cXHRzYzIgaW4ge1xcXCJHTEFDSUVSXFxcIiwgXFxcIkRFRVBfQVJDSElWRVxcXCJ9XFxuXFx0cmF3MiA6PSBvYmplY3QuZ2V0KHQyLCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3MiAhPSBudWxsXFxuXFx0ZDIgOj0gdG9fbnVtYmVyKHJhdzIpXFxuXFx0ZDIgPCBkMSArIDMwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5FeHBpcmF0aW9uSW5EYXlzXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFeHBpcmF0aW9uSW5EYXlzICgldikgbXVzdCBiZSBncmVhdGVyIHRoYW4gVHJhbnNpdGlvbkluRGF5cyAoJXYpOyBTMyByZWplY3RzIGxpZmVjeWNsZSBydWxlcyB0aGF0IGV4cGlyZSBvYmplY3RzIGJlZm9yZSBvciB3aGVuIHRoZXkgdHJhbnNpdGlvblxcXCIsIFtlLCBkXSksXFxuXFx0X3BmX3Mzb3JkX2ZpeCwgX3BmX3Mzb3JkX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdHJhd2UgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ZSAhPSBudWxsICMgdG9fbnVtYmVyKG51bGwpIOOBryAwIOOBq+OBquOCi1xcblxcdGUgOj0gdG9fbnVtYmVyKHJhd2UpXFxuXFx0dHJhbnMgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiVHJhbnNpdGlvbnNcXFwiLCBbXSlcXG5cXHRpc19hcnJheSh0cmFucylcXG5cXHRzb21lIHQgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodClcXG5cXHRyYXdkIDo9IG9iamVjdC5nZXQodCwgXFxcIlRyYW5zaXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhd2QgIT0gbnVsbFxcblxcdGQgOj0gdG9fbnVtYmVyKHJhd2QpXFxuXFx0ZSA8PSBkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLWV4cGlyYXRpb24tcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFeHBpcmF0aW9uSW5EYXlzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIEV4cGlyYXRpb25JbkRheXMgYXMgYSBiYXJlIGludGVnZXIgd2l0aCBub1xcbiMgbWluaW11bSwgc28gMCBhbmQgbmVnYXRpdmVzIHJlYWNoIHRoZSBzZXJ2aWNlLiBPbmx5IHRoZSBFeHBpcmF0aW9uIGFjdGlvblxcbiMgd2FzIGJlbmNoLXZlcmlmaWVkOyBvdGhlciBkYXkgZmllbGRzIGFyZSBsZWZ0IGFsb25lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWV4cGlyYXRpb24tcG9zaXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5FeHBpcmF0aW9uSW5EYXlzXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFeHBpcmF0aW9uSW5EYXlzIGlzICV2OyBTMyByZWplY3RzIHRoZSBydWxlIHdpdGggXFxcXFxcXCInRGF5cycgZm9yIEV4cGlyYXRpb24gYWN0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXFxcXFxcXCJcXFwiLCBbZF0pLFxcblxcdFxcXCJVc2UgYW4gRXhwaXJhdGlvbkluRGF5cyBvZiAxIG9yIG1vcmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC1ydWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkV4cGlyYXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhdyAhPSBudWxsXFxuXFx0ZCA6PSB0b19udW1iZXIocmF3KVxcblxcdGQgPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWxpZmVjeWNsZS1ydWxlLW5vLWFjdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgbGlmZWN5Y2xlIHJ1bGUgbmVlZHMgYXQgbGVhc3Qgb25lIGFjdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgdGVuIGFjdGlvbiBmaWVsZHMsIHZlcmJhdGltIGZyb20gdGhlIHNlcnZpY2UgZXJyb3IuIEEgZmllbGQgd2hvc2UgdmFsdWVcXG4jIGlzIGFuIHVucmVzb2x2YWJsZSBpbnRyaW5zaWMgc3RpbGwgY291bnRzIGFzIHByZXNlbnQgKGZhaWwgY2xvc2VkKS5cXG5fcGZfczNsbmFfYWN0aW9ucyA6PSB7XFxuXFx0XFxcIkFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZFxcXCIsXFxuXFx0XFxcIkV4cGlyYXRpb25EYXRlXFxcIixcXG5cXHRcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsXFxuXFx0XFxcIkV4cGlyZWRPYmplY3REZWxldGVNYXJrZXJcXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25cXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25JbkRheXNcXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25cXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zXFxcIixcXG5cXHRcXFwiVHJhbnNpdGlvblxcXCIsXFxuXFx0XFxcIlRyYW5zaXRpb25zXFxcIixcXG59XFxuXFxuX3BmX3MzbG5hX2hhc19hY3Rpb24ocnVsZSkgaWYge1xcblxcdHNvbWUgayBpbiBfcGZfczNsbmFfYWN0aW9uc1xcblxcdG9iamVjdC5nZXQocnVsZSwgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1ydWxlLW5vLWFjdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIGxpZmVjeWNsZSBydWxlIHNwZWNpZmllcyBubyBhY3Rpb247IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkF0IGxlYXN0IG9uZSBvZiBbRXhwaXJhdGlvbkRhdGUsRXhwaXJhdGlvbkluRGF5cyxBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQsVHJhbnNpdGlvbiwuLi5dIG5lZWRzIHRvIGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGFuIGV4cGlyYXRpb24sIHRyYW5zaXRpb24sIG9yIGFib3J0LWluY29tcGxldGUtbXVsdGlwYXJ0LXVwbG9hZCBhY3Rpb24gdG8gdGhlIHJ1bGUsIG9yIHJlbW92ZSB0aGUgcnVsZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXJ1bGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRub3QgX3BmX3MzbG5hX2hhc19hY3Rpb24oci52YWx1ZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1ub3RpZmljYXRpb24tb3ZlcmxhcHBpbmctZmlsdGVyc1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vdGlmaWNhdGlvbiBlbnRyaWVzIG11c3Qgbm90IG92ZXJsYXAgZm9yIHRoZSBzYW1lIGV2ZW50IHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUzMga2VlcHMgb25lIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uIHBlciBidWNrZXQgYW5kIHJlamVjdHMgaXQgd2hlbiB0d29cXG4jIGVudHJpZXMgKGFjcm9zcyBxdWV1ZS90b3BpYy9sYW1iZGEgYWxpa2UpIGNvdWxkIG1hdGNoIHRoZSBzYW1lIG9iamVjdCBldmVudDpcXG4jIG92ZXJsYXBwaW5nIGV2ZW50IHR5cGVzIEFORCBvdmVybGFwcGluZyBwcmVmaXhlcyBBTkQgb3ZlcmxhcHBpbmcgc3VmZml4ZXMuXFxuIyBBIG1pc3NpbmcgZmlsdGVyIHNpZGUgbWVhbnMgXFxcIlxcXCIgYW5kIG92ZXJsYXBzIGV2ZXJ5dGhpbmcuIFBhaXJzIHdpdGggYW5cXG4jIHVucmVzb2x2YWJsZSBldmVudCBvciBmaWx0ZXIgdmFsdWUgYXJlIHNraXBwZWQg4oCUIG92ZXJsYXAgY2Fubm90IGJlIHByb3Zlbi5cXG5cXG5fcGZfczNub19jb25maWdzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChhcnJheS5jb25jYXQoXFxuXFx0W2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24uUXVldWVDb25maWd1cmF0aW9uc1xcXCIpXSxcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5Ub3BpY0NvbmZpZ3VyYXRpb25zXFxcIildKSxcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5MYW1iZGFDb25maWd1cmF0aW9uc1xcXCIpXSlcXG5cXG5fcGZfczNub19ydWxlcyhjKSA6PSBydWxlcyBpZiB7XFxuXFx0ZiA6PSBvYmplY3QuZ2V0KGMsIFxcXCJGaWx0ZXJcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChmKVxcblxcdGsgOj0gb2JqZWN0LmdldChmLCBcXFwiUzNLZXlcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChrKVxcblxcdHJ1bGVzIDo9IG9iamVjdC5nZXQoaywgXFxcIlJ1bGVzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkocnVsZXMpXFxufVxcblxcbl9wZl9zM25vX3J1bGVzKGMpIDo9IFtdIGlmIHtcXG5cXHRvYmplY3QuZ2V0KGMsIFxcXCJGaWx0ZXJcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM25vX2ZpbHRlcl92YWwoYywga2luZCkgOj0gdiBpZiB7XFxuXFx0dnMgOj0gW3ggfCBzb21lIHIgaW4gX3BmX3Mzbm9fcnVsZXMoYyk7IGlzX29iamVjdChyKTsgbG93ZXIob2JqZWN0LmdldChyLCBcXFwiTmFtZVxcXCIsIFxcXCJcXFwiKSkgPT0ga2luZDsgeCA6PSBvYmplY3QuZ2V0KHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpXVxcblxcdGNvdW50KHZzKSA+IDBcXG5cXHR2IDo9IHZzWzBdXFxufVxcblxcbl9wZl9zM25vX2ZpbHRlcl92YWwoYywga2luZCkgOj0gXFxcIlxcXCIgaWYge1xcblxcdHZzIDo9IFt4IHwgc29tZSByIGluIF9wZl9zM25vX3J1bGVzKGMpOyBpc19vYmplY3Qocik7IGxvd2VyKG9iamVjdC5nZXQociwgXFxcIk5hbWVcXFwiLCBcXFwiXFxcIikpID09IGtpbmQ7IHggOj0gb2JqZWN0LmdldChyLCBcXFwiVmFsdWVcXFwiLCBudWxsKV1cXG5cXHRjb3VudCh2cykgPT0gMFxcbn1cXG5cXG5fcGZfczNub19wcmVfb3ZlcmxhcChhLCBiKSBpZiBzdGFydHN3aXRoKGEsIGIpXFxuXFxuX3BmX3Mzbm9fcHJlX292ZXJsYXAoYSwgYikgaWYgc3RhcnRzd2l0aChiLCBhKVxcblxcbl9wZl9zM25vX3N1Zl9vdmVybGFwKGEsIGIpIGlmIGVuZHN3aXRoKGEsIGIpXFxuXFxuX3BmX3Mzbm9fc3VmX292ZXJsYXAoYSwgYikgaWYgZW5kc3dpdGgoYiwgYSlcXG5cXG4jIFxcXCJzMzpPYmplY3RDcmVhdGVkOipcXFwiIGNvdmVycyBcXFwiczM6T2JqZWN0Q3JlYXRlZDpQdXRcXFwiOyBkcm9wIHRoZSB0cmFpbGluZyBcXFwiKlxcXCJcXG4jIGFuZCBwcmVmaXgtbWF0Y2guXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIGUxID09IGUyXFxuXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIHtcXG5cXHRlbmRzd2l0aChlMSwgXFxcIjoqXFxcIilcXG5cXHRzdGFydHN3aXRoKGUyLCBzdWJzdHJpbmcoZTEsIDAsIGNvdW50KGUxKSAtIDEpKVxcbn1cXG5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYge1xcblxcdGVuZHN3aXRoKGUyLCBcXFwiOipcXFwiKVxcblxcdHN0YXJ0c3dpdGgoZTEsIHN1YnN0cmluZyhlMiwgMCwgY291bnQoZTIpIC0gMSkpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbm90aWZpY2F0aW9uLW92ZXJsYXBwaW5nLWZpbHRlcnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlR3byBub3RpZmljYXRpb24gZW50cmllcyBmb3Igb3ZlcmxhcHBpbmcgZXZlbnQgdHlwZXMgKCclcycgYW5kICclcycpIGhhdmUgb3ZlcmxhcHBpbmcgcHJlZml4L3N1ZmZpeCBmaWx0ZXJzOyBTMyByZWplY3RzIHRoZSBjb25maWd1cmF0aW9uIHdpdGggXFxcXFxcXCJDb25maWd1cmF0aW9uIGlzIGFtYmlndW91c2x5IGRlZmluZWQuIENhbm5vdCBoYXZlIG92ZXJsYXBwaW5nIHN1ZmZpeGVzIGluIHR3byBydWxlcyBpZiB0aGUgcHJlZml4ZXMgYXJlIG92ZXJsYXBwaW5nIGZvciB0aGUgc2FtZSBldmVudCB0eXBlLlxcXFxcXFwiXFxcIiwgW2UxLCBlMl0pLFxcblxcdFxcXCJNYWtlIHRoZSBwcmVmaXhlcyBvciBzdWZmaXhlcyBkaXNqb2ludCwgb3IgbWVyZ2UgdGhlIHR3byBlbnRyaWVzIGludG8gb25lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvbm90aWZpY2F0aW9uLWhvdy10by1maWx0ZXJpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0Y3MgOj0gX3BmX3Mzbm9fY29uZmlncyhuYW1lKVxcblxcdHNvbWUgaSwgYSBpbiBjc1xcblxcdHNvbWUgaiwgYiBpbiBjc1xcblxcdGkgPCBqXFxuXFx0ZTEgOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiRXZlbnRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhlMSlcXG5cXHRlMiA6PSBvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJFdmVudFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGUyKVxcblxcdF9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKVxcblxcdHAxIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYS52YWx1ZSwgXFxcInByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHAxKVxcblxcdHAyIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYi52YWx1ZSwgXFxcInByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHAyKVxcblxcdF9wZl9zM25vX3ByZV9vdmVybGFwKHAxLCBwMilcXG5cXHRzMSA6PSBfcGZfczNub19maWx0ZXJfdmFsKGEudmFsdWUsIFxcXCJzdWZmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhzMSlcXG5cXHRzMiA6PSBfcGZfczNub19maWx0ZXJfdmFsKGIudmFsdWUsIFxcXCJzdWZmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhzMilcXG5cXHRfcGZfczNub19zdWZfb3ZlcmxhcChzMSwgczIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtb2JqZWN0bG9jay1yZXF1aXJlcy12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gbmVlZHMgdmVyc2lvbmluZyBlbmFibGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9iamVjdExvY2tDb25maWd1cmF0aW9uIG9uIGl0cyBvd24gZG9lcyBOT1QgcmVxdWlyZSBPYmplY3RMb2NrRW5hYmxlZCDigJRcXG4jIFMzIGFjY2VwdHMgT2JqZWN0IExvY2sgb24gYW4gZXhpc3RpbmcgdmVyc2lvbmVkIGJ1Y2tldCAoYmVuY2ggczA1YiBkZXBsb3llZFxcbiMgY2xlYW4pLiBXaGF0IGl0IGRvZXMgcmVxdWlyZSBpcyB2ZXJzaW9uaW5nLiBXaGVuIE9iamVjdExvY2tFbmFibGVkIGlzIHRydWVcXG4jIHRoZSBidWNrZXQgaXMgY3JlYXRlZCBsb2NrLWVuYWJsZWQgYW5kIHZlcnNpb25pbmcgY29tZXMgd2l0aCBpdCwgc28gdGhlIHJ1bGVcXG4jIGZpcmVzIG9ubHkgd2hlbiBsb2NrLWVuYWJsZW1lbnQgaXMgcHJvdmFibHkgb2ZmIChrZXkgbGl0ZXJhbGx5IGFic2VudCBvclxcbiMgbGl0ZXJhbCBmYWxzZSkgYW5kIHZlcnNpb25pbmcgaXMgcHJvdmFibHkgbm90IGVuYWJsZWQuXFxuX3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJPYmplY3RMb2NrRW5hYmxlZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSkgaWYge1xcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0VuYWJsZWRcXFwiKSkgPT0gZmFsc2VcXG59XFxuXFxuX3BmX3Mzb2xydl9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtb2JqZWN0bG9jay1yZXF1aXJlcy12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIk9iamVjdExvY2tDb25maWd1cmF0aW9uIGlzIHNldCBvbiBhIGJ1Y2tldCB3aG9zZSB2ZXJzaW9uaW5nIGlzIG5vdCBlbmFibGVkOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJWZXJzaW9uaW5nIG11c3QgYmUgJ0VuYWJsZWQnIG9uIHRoZSBidWNrZXQgdG8gYXBwbHkgYSBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJywgb3Igc2V0IE9iamVjdExvY2tFbmFibGVkOiB0cnVlIHRvIGNyZWF0ZSB0aGUgYnVja2V0IGxvY2stZW5hYmxlZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1sb2NrLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tDb25maWd1cmF0aW9uXFxcIikpXFxuXFx0X3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSlcXG5cXHRfcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtb2JqZWN0bG9jay12ZXJzaW9uaW5nLXN1c3BlbmRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdCBMb2NrIGZvcmJpZHMgc3VzcGVuZGluZyB2ZXJzaW9uaW5nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9iamVjdCBMb2NrIGZvcmNlLWVuYWJsZXMgdmVyc2lvbmluZyBhdCBjcmVhdGlvbiwgc28gYSB0ZW1wbGF0ZSB0aGF0IGFsc29cXG4jIHN1c3BlbmRzIHZlcnNpb25pbmcgY29udHJhZGljdHMgaXRzZWxmIGFuZCB0aGUgaGFuZGxlcidzIFB1dEJ1Y2tldFZlcnNpb25pbmdcXG4jIGNhbGwgaXMgcmVqZWN0ZWQuIEZpcmVzIG9ubHkgb24gYSBsaXRlcmFsIFxcXCJTdXNwZW5kZWRcXFwiLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtb2JqZWN0bG9jay12ZXJzaW9uaW5nLXN1c3BlbmRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIixcXG5cXHRcXFwiT2JqZWN0TG9ja0VuYWJsZWQgaXMgdHJ1ZSBidXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24gc3VzcGVuZHMgdmVyc2lvbmluZzsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQW4gT2JqZWN0IExvY2sgY29uZmlndXJhdGlvbiBpcyBwcmVzZW50IG9uIHRoaXMgYnVja2V0LCBzbyB0aGUgdmVyc2lvbmluZyBzdGF0ZSBjYW5ub3QgYmUgY2hhbmdlZC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIChvciBkcm9wIGl0IOKAlCBPYmplY3QgTG9jayBlbmFibGVzIHZlcnNpb25pbmcgaXRzZWxmKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1sb2NrLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0VuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1yZXBsaWNhdGlvbi1kZXN0LXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgcmVwbGljYXRpb24gZGVzdGluYXRpb24gYnVja2V0IG5lZWRzIHZlcnNpb25pbmcgZW5hYmxlZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZGVzdGluYXRpb24gc2lkZSBvZiB3aGF0IHBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmcgY2hlY2tzIG9uXFxuIyB0aGUgc291cmNlLiBEZXN0aW5hdGlvbi5CdWNrZXQgaXMgbm9ybWFsbHkgRm46OkdldEF0dC9SZWYgdG8gYW4gaW4tdGVtcGxhdGVcXG4jIGJ1Y2tldDsgcmVzb2x2ZSgpIHR1cm5zIGJvdGggaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRCwgc28gdGhlXFxuIyBkZXN0aW5hdGlvbidzIG93biBwcm9wZXJ0aWVzIGFyZSByZWFkYWJsZS4gRXh0ZXJuYWwgZGVzdGluYXRpb24gQVJOcyByZXNvbHZlXFxuIyB0byBzdHJpbmdzIHRoYXQgYXJlIG5vdCBsb2dpY2FsIElEcyBhbmQgc2tpcC4gVmVyc2lvbmluZyBpcyBcXFwibm90IGVuYWJsZWRcXFwiXFxuIyB3aGVuIFZlcnNpb25pbmdDb25maWd1cmF0aW9uIGlzIGxpdGVyYWxseSBhYnNlbnQgKHByb3ZlbiB2aWFcXG4jIGlucHV0LnJlc291cmNlcywgc2VlIEFHRU5UUy5tZCkgb3IgU3RhdHVzIHJlc29sdmVzIHRvIFxcXCJTdXNwZW5kZWRcXFwiOyBhblxcbiMgdW5yZXNvbHZhYmxlIFN0YXR1cyBza2lwcy5cXG5fcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdCkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tkZXN0XS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3MzcmR2X2JhZF92ZXJzaW9uaW5nKGRlc3QpIGlmIHtcXG5cXHRyZXNvbHZlKGRlc3QsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtcmVwbGljYXRpb24tZGVzdC12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5EZXN0aW5hdGlvbi5CdWNrZXRcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlJlcGxpY2F0aW9uIGRlc3RpbmF0aW9uIGJ1Y2tldCAnJXMnIGRvZXMgbm90IGhhdmUgdmVyc2lvbmluZyBlbmFibGVkOyBTMyByZWplY3RzIHRoZSBjb25maWd1cmF0aW9uIHdpdGggXFxcXFxcXCJEZXN0aW5hdGlvbiBidWNrZXQgbXVzdCBoYXZlIHZlcnNpb25pbmcgZW5hYmxlZFxcXFxcXFwiXFxcIiwgW2Rlc3RdKSxcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgb24gdGhlIGRlc3RpbmF0aW9uIGJ1Y2tldFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3JlcGxpY2F0aW9uLXJlcXVpcmVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0ZGVzdCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzLiVkLkRlc3RpbmF0aW9uLkJ1Y2tldFxcXCIsIFtyLmluZGV4XSkpXFxuXFx0aXNfc3RyaW5nKGRlc3QpXFxuXFx0ZGVzdCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRfcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1yZXBsaWNhdGlvbi1yZXF1aXJlcy12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVwbGljYXRpb25Db25maWd1cmF0aW9uIHJlcXVpcmVzIHZlcnNpb25pbmcgdG8gYmUgZW5hYmxlZCBvbiB0aGUgc291cmNlIGJ1Y2tldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyDpgZXlj43jgavjgZnjgovjga7jga8gVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24g44GM5paH5a2X44Gp44GK44KK5LiN5Zyo77yIaW5wdXQucmVzb3VyY2VzIOOBp1xcbiMg6Ki85piO44CBQUdFTlRTLm1kIOWPgueFp++8ieOBi+OAgVN0YXR1cyDjgYzjg6rjg4bjg6njg6vjgacgXFxcIlN1c3BlbmRlZFxcXCIg44Gu44Go44GN44Gg44GR44CCXFxuIyDmnKrop6Pmsbrjg4jjg7zjgq/jg7Pjga8gT0sg5omx44GE77yIcmVzb2x2ZSgpIOOBr+OCreODvOS4jeWcqOOBqOacquino+axuuOBruS4oeaWueOBpyB1bmRlZmluZWQg44GrXFxuIyDjgarjgovjgZ/jgoHjgIFgbm90IHJlc29sdmUoLi4uKWAg44Gn44Gv5LiN5Zyo44KS6Ki85piO44Gn44GN44Gq44GEIOKAlCAyMDI2LTA5LTAyIOWun+a4rO+8ieOAglxcbl9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBpcyBzZXQgYnV0IGJ1Y2tldCB2ZXJzaW9uaW5nIGlzIG5vdCBlbmFibGVkOyBTMyByZWplY3RzIHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGF0IGRlcGxveSB0aW1lIChJbnZhbGlkUmVxdWVzdDogVmVyc2lvbmluZyBtdXN0IGJlICdFbmFibGVkJyBvbiB0aGUgYnVja2V0KVxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIG9uIHRoZSBzb3VyY2UgYnVja2V0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvcmVwbGljYXRpb24tcmVxdWlyZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIpKVxcblxcdF9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy13ZWJzaXRlLXJlZGlyZWN0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlZGlyZWN0QWxsUmVxdWVzdHNUbyBleGNsdWRlcyBldmVyeSBvdGhlciB3ZWJzaXRlIHNldHRpbmdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIHJlZGlyZWN0cyB0aGUgd2hvbGUgc2l0ZSwgc28gUzMgcmVqZWN0cyBhbnkgc2libGluZ1xcbiMgd2Vic2l0ZSBzZXR0aW5nIGFsb25nc2lkZSBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXdlYnNpdGUtcmVkaXJlY3QtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLldlYnNpdGVDb25maWd1cmF0aW9uLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJXZWJzaXRlQ29uZmlndXJhdGlvbiBjb21iaW5lcyBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gd2l0aCAlczsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiW0luZGV4RG9jdW1lbnQsIEVycm9yRG9jdW1lbnQsIFJvdXRpbmdSdWxlc10gc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgaWYgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIGlzIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2tdKSxcXG5cXHRcXFwiS2VlcCBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gYWxvbmUsIG9yIGRyb3AgaXQgYW5kIGNvbmZpZ3VyZSB0aGUgd2Vic2l0ZSB3aXRoIEluZGV4RG9jdW1lbnQvRXJyb3JEb2N1bWVudC9Sb3V0aW5nUnVsZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC13ZWJzaXRlY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHR3YyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLldlYnNpdGVDb25maWd1cmF0aW9uXFxcIilcXG5cXHRpc19vYmplY3Qod2MpXFxuXFx0b2JqZWN0LmdldCh3YywgXFxcIlJlZGlyZWN0QWxsUmVxdWVzdHNUb1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRzb21lIGsgaW4ge1xcXCJJbmRleERvY3VtZW50XFxcIiwgXFxcIkVycm9yRG9jdW1lbnRcXFwiLCBcXFwiUm91dGluZ1J1bGVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KHdjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2NoZWR1bGVyLWZsZXhpYmxlLXdpbmRvd1wiLFxuICAgIFwic2VydmljZVwiOiBcInNjaGVkdWxlclwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGTEVYSUJMRSBtb2RlIG5lZWRzIE1heGltdW1XaW5kb3dJbk1pbnV0ZXMsIE9GRiBmb3JiaWRzIGl0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2NoZndfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXNjaGVkdWxlci1zY2hlZHVsZS1mbGV4aWJsZXRpbWV3aW5kb3cuaHRtbFxcXCJcXG5cXG5fcGZfc2NoZndfZnR3KG5hbWUpIDo9IGZ0dyBpZiB7XFxuXFx0ZnR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmxleGlibGVUaW1lV2luZG93XFxcIilcXG5cXHRpc19vYmplY3QoZnR3KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNjaGVkdWxlci1mbGV4aWJsZS13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZsZXhpYmxlVGltZVdpbmRvdy5NYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIixcXG5cXHRcXFwiRmxleGlibGVUaW1lV2luZG93Lk1vZGUgaXMgRkxFWElCTEUgYnV0IE1heGltdW1XaW5kb3dJbk1pbnV0ZXMgaXMgbWlzc2luZzsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXMgbXVzdCBiZSBwcm92aWRlZCB3aGVuIEZsZXhpYmxlVGltZVdpbmRvd01vZGUgaXMgc2V0IHRvIEZMRVhJQkxFXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgTWF4aW11bVdpbmRvd0luTWludXRlcyAoMS0xNDQwKSwgb3Igc3dpdGNoIE1vZGUgdG8gT0ZGXFxcIixcXG5cXHRfcGZfc2NoZndfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGZ0dyA6PSBfcGZfc2NoZndfZnR3KG5hbWUpXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIkZMRVhJQkxFXFxcIlxcblxcdG9iamVjdC5nZXQoZnR3LCBcXFwiTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zY2hlZHVsZXItZmxleGlibGUtd2luZG93XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GbGV4aWJsZVRpbWVXaW5kb3cuTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsXFxuXFx0XFxcIkZsZXhpYmxlVGltZVdpbmRvdy5Nb2RlIGlzIE9GRiBidXQgTWF4aW11bVdpbmRvd0luTWludXRlcyBpcyBzZXQ7IENyZWF0ZVNjaGVkdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJNYXhpbXVtV2luZG93SW5NaW51dGVzIG11c3Qgbm90IGJlIHByb3ZpZGVkIHdoZW4gRmxleGlibGVUaW1lV2luZG93TW9kZSBpcyBzZXQgdG8gT0ZGXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIE1heGltdW1XaW5kb3dJbk1pbnV0ZXMsIG9yIHN3aXRjaCBNb2RlIHRvIEZMRVhJQkxFXFxcIixcXG5cXHRfcGZfc2NoZndfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGZ0dyA6PSBfcGZfc2NoZndfZnR3KG5hbWUpXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIk9GRlxcXCJcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2NoZWR1bGVyLXJhdGUtcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzY2hlZHVsZXJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBTY2hlZHVsZXIgcmF0ZSgpIHZhbHVlIG11c3QgYmUgcG9zaXRpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDI3IHZhbGlkYXRlcyByYXRlKCkgYm91bmRzIGZvciBBV1M6OkV2ZW50czo6UnVsZSBidXQgbm90XFxuIyBmb3IgQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlIOKAlCBzYW1lIGNvbnN0cmFpbnQgZmFtaWx5LCBkaWZmZXJlbnQgcmVzb3VyY2UuXFxuIyBPbmx5IHRoZSB2YWx1ZSBib3VuZCBpcyBjaGVja2VkIGhlcmU7IHVuaXQgc3BlbGxpbmdzIGRpZmZlciBiZXR3ZWVuIHRoZSB0d29cXG4jIHNlcnZpY2VzIGFuZCB3ZXJlIG5vdCBtZWFzdXJlZCBmb3IgU2NoZWR1bGVyLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2NoZWR1bGVyLXJhdGUtcG9zaXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNjaGVkdWxlRXhwcmVzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJhdGUgdmFsdWUgaW4gJyVzJyBpcyBub3QgcG9zaXRpdmU7IENyZWF0ZVNjaGVkdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIFNjaGVkdWxlIEV4cHJlc3Npb24gJXMuXFxcXFxcXCJcXFwiLCBbZXhwciwgZXhwcl0pLFxcblxcdFxcXCJVc2UgYSByYXRlIG9mIDEgb3IgbW9yZSAoZS5nLiByYXRlKDUgbWludXRlcykpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NjaGVkdWxlci9sYXRlc3QvVXNlckd1aWRlL3NjaGVkdWxlLXR5cGVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGV4cHIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlZHVsZUV4cHJlc3Npb25cXFwiKVxcblxcdGlzX3N0cmluZyhleHByKVxcblxcdHQgOj0gdHJpbV9zcGFjZShleHByKVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcInJhdGUoXFxcIilcXG5cXHRlbmRzd2l0aCh0LCBcXFwiKVxcXCIpXFxuXFx0aW5uZXIgOj0gdHJpbV9zcGFjZShzdWJzdHJpbmcodCwgNSwgY291bnQodCkgLSA2KSlcXG5cXHRwYXJ0cyA6PSBzcGxpdChpbm5lciwgXFxcIiBcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHBhcnRzWzBdKVxcblxcdG4gPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1kZWxpdmVyeS1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSFRUUC9TIERlbGl2ZXJ5UG9saWN5IHJldHJ5IHZhbHVlczogbWluRGVsYXlUYXJnZXQgPj0gMSwgbWF4RGVsYXlUYXJnZXQgPD0gMzYwMCBhbmQgPj0gbWluRGVsYXlUYXJnZXQsIG51bVJldHJpZXMgMC4uMTAwIGFuZCBhdCBsZWFzdCB0aGUgc3VtIG9mIHRoZSBwaGFzZSByZXRyaWVzLCBwaGFzZSBjb3VudHMgPj0gMCwgYmFja29mZkZ1bmN0aW9uIG9uZSBvZiBhcml0aG1ldGljfGV4cG9uZW50aWFsfGdlb21ldHJpY3xsaW5lYXIsIG1heFJlY2VpdmVzUGVyU2Vjb25kID49IDEgKHN1YnNjcmlwdGlvbiBEZWxpdmVyeVBvbGljeSBhbmQgdG9waWMgRGVsaXZlcnlQb2xpY3kuaHR0cClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2RwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLW1lc3NhZ2UtZGVsaXZlcnktcmV0cmllcy5odG1sXFxcIlxcblxcbl9wZl9zbnNkcF9maXggOj0gXFxcIktlZXAgdGhlIHJldHJ5IHBvbGljeSBpbnNpZGUgdGhlIGRvY3VtZW50ZWQgcmFuZ2VzIChzZWUgdGhlIGRlbGl2ZXJ5IHBvbGljeSB0YWJsZSlcXFwiXFxuXFxuIyBbbmFtZSwgcGF0aCBwcmVmaXgsIGhlYWx0aHlSZXRyeVBvbGljeSBvYmplY3QsIHRocm90dGxlUG9saWN5IG9iamVjdCBvciBudWxsXVxcbl9wZl9zbnNkcF9vYmoodikgOj0gdiBpZiBpc19vYmplY3QodilcXG5cXG5fcGZfc25zZHBfb2JqKHYpIDo9IG8gaWYge1xcblxcdGlzX3N0cmluZyh2KVxcblxcdG8gOj0ganNvbi51bm1hcnNoYWwodilcXG5cXHRpc19vYmplY3QobylcXG59XFxuXFxuX3BmX3Nuc2RwX3BvbCBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXMuRGVsaXZlcnlQb2xpY3lcXFwiLCBkcF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0ZHAgOj0gX3BmX3Nuc2RwX29iaihvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiRGVsaXZlcnlQb2xpY3lcXFwiLCBudWxsKSlcXG59XFxuXFxuX3BmX3Nuc2RwX3BvbCBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXMuRGVsaXZlcnlQb2xpY3kuaHR0cFxcXCIsIGRwXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHRvcCA6PSBfcGZfc25zZHBfb2JqKG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJEZWxpdmVyeVBvbGljeVxcXCIsIG51bGwpKVxcblxcdGRwIDo9IG9iamVjdC5nZXQodG9wLCBcXFwiaHR0cFxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGRwKVxcbn1cXG5cXG5fcGZfc25zZHBfcmV0cnkgY29udGFpbnMgW25hbWUsIHBhdGgsIGhyXSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgZHBdIGluIF9wZl9zbnNkcF9wb2xcXG5cXHRzb21lIGtleSBpbiBbXFxcImhlYWx0aHlSZXRyeVBvbGljeVxcXCIsIFxcXCJkZWZhdWx0SGVhbHRoeVJldHJ5UG9saWN5XFxcIl1cXG5cXHRociA6PSBvYmplY3QuZ2V0KGRwLCBrZXksIG51bGwpXFxuXFx0aXNfb2JqZWN0KGhyKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiJXMuJXNcXFwiLCBbcCwga2V5XSlcXG59XFxuXFxuX3BmX3Nuc2RwX21pbiBjb250YWlucyBbXFxcIm1pbkRlbGF5VGFyZ2V0XFxcIiwgMV1cXG5cXG5fcGZfc25zZHBfbWluIGNvbnRhaW5zIFtcXFwibnVtUmV0cmllc1xcXCIsIDBdXFxuXFxuX3BmX3Nuc2RwX21pbiBjb250YWlucyBbXFxcIm51bU5vRGVsYXlSZXRyaWVzXFxcIiwgMF1cXG5cXG5fcGZfc25zZHBfbWluIGNvbnRhaW5zIFtcXFwibnVtTWluRGVsYXlSZXRyaWVzXFxcIiwgMF1cXG5cXG5fcGZfc25zZHBfbWluIGNvbnRhaW5zIFtcXFwibnVtTWF4RGVsYXlSZXRyaWVzXFxcIiwgMF1cXG5cXG5fcGZfc25zZHBfbWF4IGNvbnRhaW5zIFtcXFwibWF4RGVsYXlUYXJnZXRcXFwiLCAzNjAwXVxcblxcbl9wZl9zbnNkcF9tYXggY29udGFpbnMgW1xcXCJudW1SZXRyaWVzXFxcIiwgMTAwXVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNcXFwiLCBbcGF0aCwgZl0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIGJlbG93ICV2OyB0aGUgY3JlYXRlIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIkRlbGl2ZXJ5UG9saWN5OiAuLi4lcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAldlxcXFxcXFwiXFxcIiwgW2YsIHYsIG0sIGYsIG1dKSxcXG5cXHRfcGZfc25zZHBfZml4LCBfcGZfc25zZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgaHJdIGluIF9wZl9zbnNkcF9yZXRyeVxcblxcdHNvbWUgW2YsIG1dIGluIF9wZl9zbnNkcF9taW5cXG5cXHR2IDo9IG9iamVjdC5nZXQoaHIsIGYsIG51bGwpXFxuXFx0aXNfbnVtYmVyKHYpXFxuXFx0diA8IG1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZGVsaXZlcnktcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtwYXRoLCBmXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgJXYgaXMgYWJvdmUgJXY7IHRoZSBjcmVhdGUgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiRGVsaXZlcnlQb2xpY3k6IC4uLiVzIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICV2XFxcXFxcXCJcXFwiLCBbZiwgdiwgbSwgZiwgbV0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBocl0gaW4gX3BmX3Nuc2RwX3JldHJ5XFxuXFx0c29tZSBbZiwgbV0gaW4gX3BmX3Nuc2RwX21heFxcblxcdHYgOj0gb2JqZWN0LmdldChociwgZiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2ID4gbVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1kZWxpdmVyeS1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLm1heERlbGF5VGFyZ2V0XFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJtYXhEZWxheVRhcmdldCAldiBpcyBiZWxvdyBtaW5EZWxheVRhcmdldCAldjsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJEZWxpdmVyeVBvbGljeTogLi4ubWF4RGVsYXlUYXJnZXQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWluRGVsYXlUYXJnZXRcXFxcXFxcIlxcXCIsIFtteCwgbW5dKSxcXG5cXHRfcGZfc25zZHBfZml4LCBfcGZfc25zZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgaHJdIGluIF9wZl9zbnNkcF9yZXRyeVxcblxcdG1uIDo9IG9iamVjdC5nZXQoaHIsIFxcXCJtaW5EZWxheVRhcmdldFxcXCIsIG51bGwpXFxuXFx0bXggOj0gb2JqZWN0LmdldChociwgXFxcIm1heERlbGF5VGFyZ2V0XFxcIiwgbnVsbClcXG5cXHRpc19udW1iZXIobW4pXFxuXFx0aXNfbnVtYmVyKG14KVxcblxcdG14IDwgbW5cXG59XFxuXFxuX3BmX3Nuc2RwX3BoYXNlKGhyLCBmKSA6PSB2IGlmIHtcXG5cXHR2IDo9IG9iamVjdC5nZXQoaHIsIGYsIG51bGwpXFxuXFx0aXNfbnVtYmVyKHYpXFxufVxcblxcbl9wZl9zbnNkcF9waGFzZShociwgZikgOj0gMCBpZiBub3QgaXNfbnVtYmVyKG9iamVjdC5nZXQoaHIsIGYsIG51bGwpKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMubnVtUmV0cmllc1xcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwibnVtUmV0cmllcyAldiBpcyBiZWxvdyB0aGUgcGhhc2UgdG90YWwgJXYgKG51bU5vRGVsYXlSZXRyaWVzICsgbnVtTWluRGVsYXlSZXRyaWVzICsgbnVtTWF4RGVsYXlSZXRyaWVzKTsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJEZWxpdmVyeVBvbGljeTogLi4ubnVtUmV0cmllcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0b3RhbCBvZiBudW1NaW5EZWxheVJldHJpZXMsIG51bU5vRGVsYXlSZXRyaWVzIGFuZCBudW1NYXhEZWxheVJldHJpZXNcXFxcXFxcIlxcXCIsIFtuLCB0b3RhbF0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBocl0gaW4gX3BmX3Nuc2RwX3JldHJ5XFxuXFx0biA6PSBvYmplY3QuZ2V0KGhyLCBcXFwibnVtUmV0cmllc1xcXCIsIG51bGwpXFxuXFx0aXNfbnVtYmVyKG4pXFxuXFx0dG90YWwgOj0gKF9wZl9zbnNkcF9waGFzZShociwgXFxcIm51bU5vRGVsYXlSZXRyaWVzXFxcIikgKyBfcGZfc25zZHBfcGhhc2UoaHIsIFxcXCJudW1NaW5EZWxheVJldHJpZXNcXFwiKSkgKyBfcGZfc25zZHBfcGhhc2UoaHIsIFxcXCJudW1NYXhEZWxheVJldHJpZXNcXFwiKVxcblxcdG4gPCB0b3RhbFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1kZWxpdmVyeS1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLmJhY2tvZmZGdW5jdGlvblxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiYmFja29mZkZ1bmN0aW9uICclcycgaXMgbm90IGFyaXRobWV0aWMsIGV4cG9uZW50aWFsLCBnZW9tZXRyaWMgb3IgbGluZWFyOyB0aGUgY3JlYXRlIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIkRlbGl2ZXJ5UG9saWN5OiAuLi4gdGhlIHZhbHVlIFslc10gaXMgbm90IGEgdmFsaWQgYmFja29mZiBmdW5jdGlvblxcXFxcXFwiXFxcIiwgW2IsIGJdKSxcXG5cXHRfcGZfc25zZHBfZml4LCBfcGZfc25zZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgaHJdIGluIF9wZl9zbnNkcF9yZXRyeVxcblxcdGIgOj0gb2JqZWN0LmdldChociwgXFxcImJhY2tvZmZGdW5jdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGIpXFxuXFx0bm90IGIgaW4ge1xcXCJhcml0aG1ldGljXFxcIiwgXFxcImV4cG9uZW50aWFsXFxcIiwgXFxcImdlb21ldHJpY1xcXCIsIFxcXCJsaW5lYXJcXFwifVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1kZWxpdmVyeS1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzLm1heFJlY2VpdmVzUGVyU2Vjb25kXFxcIiwgW3AsIGtleV0pLFxcblxcdHNwcmludGYoXFxcIm1heFJlY2VpdmVzUGVyU2Vjb25kICV2IGlzIGJlbG93IDE7IHRoZSBjcmVhdGUgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiRGVsaXZlcnlQb2xpY3k6IHRocm90dGxlUG9saWN5Lm1heFJlY2VpdmVzUGVyU2Vjb25kIG11c3QgYmUgPj0gMVxcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRfcGZfc25zZHBfZml4LCBfcGZfc25zZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgZHBdIGluIF9wZl9zbnNkcF9wb2xcXG5cXHRzb21lIGtleSBpbiBbXFxcInRocm90dGxlUG9saWN5XFxcIiwgXFxcImRlZmF1bHRUaHJvdHRsZVBvbGljeVxcXCJdXFxuXFx0dHAgOj0gb2JqZWN0LmdldChkcCwga2V5LCBudWxsKVxcblxcdGlzX29iamVjdCh0cClcXG5cXHR2IDo9IG9iamVjdC5nZXQodHAsIFxcXCJtYXhSZWNlaXZlc1BlclNlY29uZFxcXCIsIG51bGwpXFxuXFx0aXNfbnVtYmVyKHYpXFxuXFx0diA8IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGVudEJhc2VkRGVkdXBsaWNhdGlvbiwgQXJjaGl2ZVBvbGljeSBhbmQgRmlmb1Rocm91Z2hwdXRTY29wZSBhcmUgRklGTy1vbmx5IHRvcGljIGF0dHJpYnV0ZXMsIGFuZCBBcmNoaXZlUG9saWN5Lk1lc3NhZ2VSZXRlbnRpb25QZXJpb2QgaXMgMS4uMzY1IGRheXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNmb191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlVG9waWMuaHRtbFxcXCJcXG5cXG5fcGZfc25zZm9fZml4IDo9IFxcXCJTZXQgRmlmb1RvcGljOiB0cnVlICh3aXRoIGEgKi5maWZvIFRvcGljTmFtZSkgb3IgZHJvcCB0aGUgRklGTy1vbmx5IGF0dHJpYnV0ZXM7IGtlZXAgdGhlIGFyY2hpdmUgcmV0ZW50aW9uIHdpdGhpbiAxLTM2NSBkYXlzXFxcIlxcblxcbl9wZl9zbnNmb19zdGQodCkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1t0XS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJGaWZvVG9waWNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zbnNmb19zdGQodCkgaWYgcmVzb2x2ZSh0LCBcXFwiUHJvcGVydGllcy5GaWZvVG9waWNcXFwiKSBpbiB7ZmFsc2UsIFxcXCJmYWxzZVxcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbYXR0cl0pLFxcblxcdHNwcmludGYoXFxcIiVzIGlzIHNldCBvbiBhIHN0YW5kYXJkIHRvcGljIChGaWZvVG9waWMgaXMgbm90IHRydWUpOyBDcmVhdGVUb3BpYyBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBVbmtub3duIGF0dHJpYnV0ZSAlc1xcXFxcXFwiXFxcIiwgW2F0dHIsIGF0dHJdKSxcXG5cXHRfcGZfc25zZm9fZml4LCBfcGZfc25zZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdF9wZl9zbnNmb19zdGQobmFtZSlcXG5cXHRzb21lIGF0dHIgaW4gW1xcXCJDb250ZW50QmFzZWREZWR1cGxpY2F0aW9uXFxcIiwgXFxcIkFyY2hpdmVQb2xpY3lcXFwiLCBcXFwiRmlmb1Rocm91Z2hwdXRTY29wZVxcXCJdXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgYXR0ciwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfc25zZm9fYXJjaGl2ZShuYW1lKSA6PSBwb2wgaWYge1xcblxcdHBvbCA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiQXJjaGl2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nuc2ZvX2FyY2hpdmUobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIkFyY2hpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc25zZm9fbnVtKHYpIDo9IHYgaWYgaXNfbnVtYmVyKHYpXFxuXFxuX3BmX3Nuc2ZvX251bSh2KSA6PSB0b19udW1iZXIodikgaWYge1xcblxcdGlzX3N0cmluZyh2KVxcblxcdHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOV0rJFxcXCIsIHYpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tb25seS1hdHRyaWJ1dGVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BcmNoaXZlUG9saWN5Lk1lc3NhZ2VSZXRlbnRpb25QZXJpb2RcXFwiLFxcblxcdHNwcmludGYoXFxcIkFyY2hpdmVQb2xpY3kuTWVzc2FnZVJldGVudGlvblBlcmlvZCAldiBpcyBvdXRzaWRlIDEuLjM2NSBkYXlzOyBDcmVhdGVUb3BpYyBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBBcmNoaXZlUG9saWN5OiBNZXNzYWdlUmV0ZW50aW9uUGVyaW9kIHZhbHVlIGlzIGludmFsaWRcXFxcXFxcIlxcXCIsIFtuXSksXFxuXFx0X3BmX3Nuc2ZvX2ZpeCwgX3BmX3Nuc2ZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRuIDo9IF9wZl9zbnNmb19udW0ob2JqZWN0LmdldChfcGZfc25zZm9fYXJjaGl2ZShuYW1lKSwgXFxcIk1lc3NhZ2VSZXRlbnRpb25QZXJpb2RcXFwiLCBudWxsKSlcXG5cXHRfcGZfc25zZm9fb3V0KG4pXFxufVxcblxcbl9wZl9zbnNmb19vdXQobikgaWYgbiA8IDFcXG5cXG5fcGZfc25zZm9fb3V0KG4pIGlmIG4gPiAzNjVcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maWZvLXF1ZXVlLW9uLXN0YW5kYXJkLXRvcGljXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgRklGTyBTUVMgcXVldWUgY2Fubm90IHN1YnNjcmliZSB0byBhIHN0YW5kYXJkIHRvcGljIChhIEZJRk8gdG9waWMgbWF5IGZhbiBvdXQgdG8gc3RhbmRhcmQgcXVldWVzLCBub3QgdGhlIHJldmVyc2UpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNmcXNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtZmlmby10b3BpY3MuaHRtbFxcXCJcXG5cXG5fcGZfc25zZnFzX2ZpeCA6PSBcXFwiU3Vic2NyaWJlIHRoZSBGSUZPIHF1ZXVlIHRvIGEgRklGTyB0b3BpYywgb3IgdXNlIGEgc3RhbmRhcmQgcXVldWVcXFwiXFxuXFxuX3BmX3Nuc2Zxc19zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNmcXNfc3ViIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBzdWIsIG5hbWVdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0c29tZSBzIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBzLnZhbHVlXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uLiVkXFxcIiwgW3MuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc25zZnFzX3Byb3RvKG5hbWUsIHBhdGgpIDo9IHAgaWYge1xcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKHApXFxufVxcblxcbiMgdG9waWMgaXMgRklGTzogYW4gaW4tdGVtcGxhdGUgdG9waWMgd2l0aCBGaWZvVG9waWMgdHJ1ZSwgb3IgYSBsaXRlcmFsIEFSTiBlbmRpbmcgaW4gLmZpZm9cXG5fcGZfc25zZnFzX3RmaWZvKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHJlc29sdmUodCwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG59XFxuXFxuX3BmX3Nuc2Zxc190Zmlmbyh0KSBpZiB7XFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwiYXJuOlxcXCIpXFxuXFx0ZW5kc3dpdGgodCwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxuX3BmX3Nuc2Zxc190c3RkKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1t0XS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJGaWZvVG9waWNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zbnNmcXNfdHN0ZCh0KSBpZiB7XFxuXFx0dCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRyZXNvbHZlKHQsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG59XFxuXFxuX3BmX3Nuc2Zxc190c3RkKHQpIGlmIHtcXG5cXHRzdGFydHN3aXRoKHQsIFxcXCJhcm46XFxcIilcXG5cXHRub3QgZW5kc3dpdGgodCwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxuX3BmX3Nuc2Zxc19xZmlmbyhlcCkgaWYge1xcblxcdGVwIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdHJlc29sdmUoZXAsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxufVxcblxcbl9wZl9zbnNmcXNfcWZpZm8oZXApIGlmIHtcXG5cXHRzdGFydHN3aXRoKGVwLCBcXFwiYXJuOlxcXCIpXFxuXFx0ZW5kc3dpdGgoZXAsIFxcXCIuZmlmb1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tcXVldWUtb24tc3RhbmRhcmQtdG9waWNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkVuZHBvaW50XFxcIiwgW3BhdGhdKSxcXG5cXHRcXFwiYSBGSUZPIHF1ZXVlIGlzIHN1YnNjcmliZWQgdG8gYSBzdGFuZGFyZCB0b3BpYzsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogRW5kcG9pbnQgUmVhc29uOiBGSUZPIFNRUyBRdWV1ZXMgY2FuIG5vdCBiZSBzdWJzY3JpYmVkIHRvIHN0YW5kYXJkIFNOUyB0b3BpY3NcXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3Nuc2Zxc19maXgsIF9wZl9zbnNmcXNfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCB0b3BpY10gaW4gX3BmX3Nuc2Zxc19zdWJcXG5cXHRfcGZfc25zZnFzX3RzdGQodG9waWMpXFxuXFx0X3BmX3Nuc2Zxc19wcm90byhuYW1lLCBwYXRoKSA9PSBcXFwic3FzXFxcIlxcblxcdGVwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuRW5kcG9pbnRcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhlcClcXG5cXHRfcGZfc25zZnFzX3FmaWZvKGVwKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maWZvLXRvcGljLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRklGTyB0b3BpYyBuYW1lcyBtdXN0IGVuZCB3aXRoICcuZmlmbycgKGFuZCAnLmZpZm8nIG5hbWVzIHJlcXVpcmUgRmlmb1RvcGljKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2ZpZm9fZml4IDo9IFxcXCJHaXZlIEZJRk8gdG9waWNzIGEgVG9waWNOYW1lIGVuZGluZyBpbiAnLmZpZm8nIChvciBkcm9wIFRvcGljTmFtZSB0byBsZXQgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGUgb25lKSwgYW5kIHNldCBGaWZvVG9waWM6IHRydWUgd2hlbmV2ZXIgdGhlIG5hbWUgZW5kcyBpbiAnLmZpZm8nXFxcIlxcblxcbl9wZl9zbnNmaWZvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWNyZWF0ZS1maWZvLXRvcGljLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFxuIyBGaWZvVG9waWMg44GM5a2Y5Zyo44GX44CB44Oq44OG44Op44OrIGZhbHNlIOS7peWklu+8iHRydWUg44KE44OI44O844Kv44Oz77yJ44Gq44KJ44CMRklGTyDjgYvjgoLjgZfjgozjgarjgYTjgI3mibHjgYRcXG5fcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpIGlmIHtcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIilcXG5cXHRub3QgdiBpbiB7ZmFsc2UsIFxcXCJmYWxzZVxcXCJ9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGaWZvVG9waWMgaXMgdHJ1ZSBidXQgVG9waWNOYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5maWZvJzsgU05TIHJlamVjdHMgdGhlIHRvcGljIGF0IGRlcGxveSB0aW1lXFxcIiwgW3RuXSksXFxuXFx0X3BmX3Nuc2ZpZm9fZml4LCBfcGZfc25zZmlmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0X3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0bm90IGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLXRvcGljLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVG9waWNOYW1lICclcycgZW5kcyB3aXRoICcuZmlmbycgYnV0IEZpZm9Ub3BpYyBpcyBub3QgdHJ1ZTsgU05TIHJlamVjdHMgdGhlIHRvcGljIG5hbWUgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG5dKSxcXG5cXHRfcGZfc25zZmlmb19maXgsIF9wZl9zbnNmaWZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcblxcdG5vdCBfcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWZpZm8tdG9waWMtcHJvdG9jb2xcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBGSUZPIHRvcGljIG9ubHkgYWNjZXB0cyBzcXMgc3Vic2NyaXB0aW9ucyAobGFtYmRhLCBodHRwL2h0dHBzLCBlbWFpbCwgZW1haWwtanNvbiwgc21zLCBmaXJlaG9zZSBhcmUgcmVqZWN0ZWQpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNmdHBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtZmlmby10b3BpY3MuaHRtbFxcXCJcXG5cXG5fcGZfc25zZnRwX2ZpeCA6PSBcXFwiU3Vic2NyaWJlIGFuIFNRUyBxdWV1ZSAoRklGTyBvciBzdGFuZGFyZCkgdG8gdGhlIEZJRk8gdG9waWMsIG9yIHVzZSBhIHN0YW5kYXJkIHRvcGljIGZvciBvdGhlciBwcm90b2NvbHNcXFwiXFxuXFxuX3BmX3Nuc2Z0cF9zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNmdHBfc3ViIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBzdWIsIG5hbWVdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0c29tZSBzIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBzLnZhbHVlXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uLiVkXFxcIiwgW3MuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc25zZnRwX3Byb3RvKG5hbWUsIHBhdGgpIDo9IHAgaWYge1xcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKHApXFxufVxcblxcbiMgdG9waWMgaXMgRklGTzogYW4gaW4tdGVtcGxhdGUgdG9waWMgd2l0aCBGaWZvVG9waWMgdHJ1ZSwgb3IgYSBsaXRlcmFsIEFSTiBlbmRpbmcgaW4gLmZpZm9cXG5fcGZfc25zZnRwX3RmaWZvKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHJlc29sdmUodCwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG59XFxuXFxuX3BmX3Nuc2Z0cF90Zmlmbyh0KSBpZiB7XFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwiYXJuOlxcXCIpXFxuXFx0ZW5kc3dpdGgodCwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxuX3BmX3Nuc2Z0cF90c3RkKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1t0XS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJGaWZvVG9waWNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zbnNmdHBfdHN0ZCh0KSBpZiB7XFxuXFx0dCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRyZXNvbHZlKHQsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG59XFxuXFxuX3BmX3Nuc2Z0cF90c3RkKHQpIGlmIHtcXG5cXHRzdGFydHN3aXRoKHQsIFxcXCJhcm46XFxcIilcXG5cXHRub3QgZW5kc3dpdGgodCwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby10b3BpYy1wcm90b2NvbFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUHJvdG9jb2xcXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcImEgRklGTyB0b3BpYyBpcyBzdWJzY3JpYmVkIHdpdGggcHJvdG9jb2wgJXM7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEludmFsaWQgcHJvdG9jb2wgdHlwZTogJXNcXFxcXFxcIlxcXCIsIFtwcm90bywgcHJvdG9dKSxcXG5cXHRfcGZfc25zZnRwX2ZpeCwgX3BmX3Nuc2Z0cF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIHRvcGljXSBpbiBfcGZfc25zZnRwX3N1YlxcblxcdF9wZl9zbnNmdHBfdGZpZm8odG9waWMpXFxuXFx0cHJvdG8gOj0gX3BmX3Nuc2Z0cF9wcm90byhuYW1lLCBwYXRoKVxcblxcdHByb3RvICE9IFxcXCJzcXNcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWZpbHRlci1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmlsdGVyUG9saWN5IHNoYXBlOiBhdCBtb3N0IDUga2V5cywgZXZlcnkgdmFsdWUgYW4gYXJyYXkgb3Igb2JqZWN0LCBubyBlbXB0eSBhcnJheXMsIG5vIGFycmF5cyBpbnNpZGUgYXJyYXlzLCBuZXN0aW5nIG9ubHkgd2l0aCBGaWx0ZXJQb2xpY3lTY29wZSBNZXNzYWdlQm9keSwgYW5kIEZpbHRlclBvbGljeVNjb3BlIGlzIE1lc3NhZ2VBdHRyaWJ1dGVzIG9yIE1lc3NhZ2VCb2R5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNmcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2RnL3Nucy1zdWJzY3JpcHRpb24tZmlsdGVyLXBvbGljaWVzLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2ZwX2ZpeCA6PSBcXFwiS2VlcCB0aGUgZmlsdGVyIHBvbGljeSB0byA1IGtleXMgb2Ygbm9uLWVtcHR5IGFycmF5cyAob3IgbmVzdGVkIG9iamVjdHMgd2l0aCBGaWx0ZXJQb2xpY3lTY29wZTogTWVzc2FnZUJvZHkpXFxcIlxcblxcbl9wZl9zbnNmcF9zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNmcF9zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNmcF9wcm90byhuYW1lLCBwYXRoKSA6PSBwIGlmIHtcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuUHJvdG9jb2xcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhwKVxcbn1cXG5cXG5fcGZfc25zZnBfcG9sKHN1YikgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChzdWIsIFxcXCJGaWx0ZXJQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zbnNmcF9wb2woc3ViKSA6PSBwb2wgaWYge1xcblxcdHJhdyA6PSBvYmplY3QuZ2V0KHN1YiwgXFxcIkZpbHRlclBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zbnNmcF9lcnIgOj0gXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogRmlsdGVyUG9saWN5OiBcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlsdGVyLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRmlsdGVyUG9saWN5XFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJGaWx0ZXJQb2xpY3kgaGFzICVkIGtleXMgKG1heGltdW0gNSk7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiJXNGaWx0ZXIgcG9saWN5IGNhbiBub3QgaGF2ZSBtb3JlIHRoYW4gNSBrZXlzXFxcXFxcXCJcXFwiLCBbbiwgX3BmX3Nuc2ZwX2Vycl0pLFxcblxcdF9wZl9zbnNmcF9maXgsIF9wZl9zbnNmcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmcF9zdWJcXG5cXHRuIDo9IGNvdW50KG9iamVjdC5rZXlzKF9wZl9zbnNmcF9wb2woc3ViKSkpXFxuXFx0biA+IDVcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlsdGVyLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRmlsdGVyUG9saWN5LiVzXFxcIiwgW3BhdGgsIGtdKSxcXG5cXHRzcHJpbnRmKFxcXCJGaWx0ZXJQb2xpY3kga2V5ICclcycgaGFzIGEgc2NhbGFyIHZhbHVlOyBlYWNoIGtleSB0YWtlcyBhbiBhcnJheSBvZiBtYXRjaCB2YWx1ZXMgKG9yIGFuIG9iamVjdCB3aXRoIEZpbHRlclBvbGljeVNjb3BlIE1lc3NhZ2VCb2R5KSwgYW5kIFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiJXNcXFxcXFxcXFxcXFxcXFwiJXNcXFxcXFxcXFxcXFxcXFwiIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5XFxcXFxcXCJcXFwiLCBbaywgX3BmX3Nuc2ZwX2Vyciwga10pLFxcblxcdF9wZl9zbnNmcF9maXgsIF9wZl9zbnNmcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmcF9zdWJcXG5cXHRzb21lIGssIHYgaW4gX3BmX3Nuc2ZwX3BvbChzdWIpXFxuXFx0bm90IGlzX2FycmF5KHYpXFxuXFx0bm90IGlzX29iamVjdCh2KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3kuJXNcXFwiLCBbcGF0aCwga10pLFxcblxcdHNwcmludGYoXFxcIkZpbHRlclBvbGljeSBrZXkgJyVzJyBpcyBhbiBlbXB0eSBhcnJheTsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCIlc0VtcHR5IGFycmF5cyBhcmUgbm90IGFsbG93ZWRcXFxcXFxcIlxcXCIsIFtrLCBfcGZfc25zZnBfZXJyXSksXFxuXFx0X3BmX3Nuc2ZwX2ZpeCwgX3BmX3Nuc2ZwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2ZwX3N1YlxcblxcdHNvbWUgaywgdiBpbiBfcGZfc25zZnBfcG9sKHN1YilcXG5cXHRpc19hcnJheSh2KVxcblxcdGNvdW50KHYpID09IDBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlsdGVyLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRmlsdGVyUG9saWN5LiVzXFxcIiwgW3BhdGgsIGtdKSxcXG5cXHRzcHJpbnRmKFxcXCJGaWx0ZXJQb2xpY3kga2V5ICclcycgaGFzIGFuIGFycmF5IGluc2lkZSBpdHMgYXJyYXk7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiJXNNYXRjaCB2YWx1ZSBtdXN0IGJlIFN0cmluZywgbnVtYmVyLCB0cnVlLCBmYWxzZSwgb3IgbnVsbFxcXFxcXFwiXFxcIiwgW2ssIF9wZl9zbnNmcF9lcnJdKSxcXG5cXHRfcGZfc25zZnBfZml4LCBfcGZfc25zZnBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zZnBfc3ViXFxuXFx0c29tZSBrLCB2IGluIF9wZl9zbnNmcF9wb2woc3ViKVxcblxcdGlzX2FycmF5KHYpXFxuXFx0c29tZSBlIGluIHZcXG5cXHRpc19hcnJheShlKVxcbn1cXG5cXG5fcGZfc25zZnBfYXR0cl9zY29wZShzdWIpIGlmIG9iamVjdC5nZXQoc3ViLCBcXFwiRmlsdGVyUG9saWN5U2NvcGVcXFwiLCBcXFwiTWVzc2FnZUF0dHJpYnV0ZXNcXFwiKSA9PSBcXFwiTWVzc2FnZUF0dHJpYnV0ZXNcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlsdGVyLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRmlsdGVyUG9saWN5LiVzXFxcIiwgW3BhdGgsIGtdKSxcXG5cXHRzcHJpbnRmKFxcXCJGaWx0ZXJQb2xpY3kga2V5ICclcycgbmVzdHMgYW4gb2JqZWN0IHdoaWxlIEZpbHRlclBvbGljeVNjb3BlIGlzIE1lc3NhZ2VBdHRyaWJ1dGVzOyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogRmlsdGVyIHBvbGljeSBzY29wZSBNZXNzYWdlQXR0cmlidXRlcyBkb2VzIG5vdCBzdXBwb3J0IG5lc3RlZCBmaWx0ZXIgcG9saWN5XFxcXFxcXCJcXFwiLCBba10pLFxcblxcdF9wZl9zbnNmcF9maXgsIF9wZl9zbnNmcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmcF9zdWJcXG5cXHRfcGZfc25zZnBfYXR0cl9zY29wZShzdWIpXFxuXFx0c29tZSBrLCB2IGluIF9wZl9zbnNmcF9wb2woc3ViKVxcblxcdGlzX29iamVjdCh2KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3lTY29wZVxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiRmlsdGVyUG9saWN5U2NvcGUgJyVzJyBpcyBub3QgTWVzc2FnZUF0dHJpYnV0ZXMgb3IgTWVzc2FnZUJvZHk7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBGaWx0ZXJQb2xpY3lTY29wZTogSW52YWxpZCB2YWx1ZSBbJXNdLiBQbGVhc2UgdXNlIGVpdGhlciBNZXNzYWdlQm9keSBvciBNZXNzYWdlQXR0cmlidXRlc1xcXFxcXFwiXFxcIiwgW3MsIHNdKSxcXG5cXHRfcGZfc25zZnBfZml4LCBfcGZfc25zZnBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zZnBfc3ViXFxuXFx0cyA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLkZpbHRlclBvbGljeVNjb3BlXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocylcXG5cXHRub3QgcyBpbiB7XFxcIk1lc3NhZ2VBdHRyaWJ1dGVzXFxcIiwgXFxcIk1lc3NhZ2VCb2R5XFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtZmlyZWhvc2Utc3Vic2NyaXB0aW9uLXJvbGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBmaXJlaG9zZSBzdWJzY3JpcHRpb24gcmVxdWlyZXMgU3Vic2NyaXB0aW9uUm9sZUFyblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zZmhfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9hcGkvQVBJX1N1YnNjcmliZS5odG1sXFxcIlxcblxcbl9wZl9zbnNmaF9maXggOj0gXFxcIlNldCBTdWJzY3JpcHRpb25Sb2xlQXJuIHRvIGEgcm9sZSBTTlMgY2FuIGFzc3VtZSB0aGF0IG1heSB3cml0ZSB0byB0aGUgZGVsaXZlcnkgc3RyZWFtXFxcIlxcblxcbl9wZl9zbnNmaF9zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNmaF9zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNmaF9wcm90byhuYW1lLCBwYXRoKSA6PSBwIGlmIHtcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuUHJvdG9jb2xcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhwKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maXJlaG9zZS1zdWJzY3JpcHRpb24tcm9sZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3Vic2NyaXB0aW9uUm9sZUFyblxcXCIsIFtwYXRoXSksXFxuXFx0XFxcIlByb3RvY29sIGZpcmVob3NlIGhhcyBubyBTdWJzY3JpcHRpb25Sb2xlQXJuOyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBEZWxpdmVyeSBwcm90b2NvbCBmaXJlaG9zZSBjYW4gb25seSBiZSBzdWJzY3JpYmVkIHdpdGggc3Vic2NyaXB0aW9uIHJvbGUgYXJuXFxcXFxcXCJcXFwiLFxcblxcdF9wZl9zbnNmaF9maXgsIF9wZl9zbnNmaF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmaF9zdWJcXG5cXHRfcGZfc25zZmhfcHJvdG8obmFtZSwgcGF0aCkgPT0gXFxcImZpcmVob3NlXFxcIlxcblxcdG9iamVjdC5nZXQoc3ViLCBcXFwiU3Vic2NyaXB0aW9uUm9sZUFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtcmF3LW1lc3NhZ2UtZGVsaXZlcnlcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmF3TWVzc2FnZURlbGl2ZXJ5IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBzcXMsIGh0dHAsIGh0dHBzIGFuZCBmaXJlaG9zZSBzdWJzY3JpcHRpb25zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNyYXdfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9hcGkvQVBJX1N1YnNjcmliZS5odG1sXFxcIlxcblxcbl9wZl9zbnNyYXdfZml4IDo9IFxcXCJEcm9wIFJhd01lc3NhZ2VEZWxpdmVyeSBmb3IgZW1haWwgLyBlbWFpbC1qc29uIC8gc21zIC8gbGFtYmRhIC8gYXBwbGljYXRpb24gc3Vic2NyaXB0aW9uc1xcXCJcXG5cXG5fcGZfc25zcmF3X3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc3Jhd19zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNyYXdfcHJvdG8obmFtZSwgcGF0aCkgOj0gcCBpZiB7XFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocClcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtcmF3LW1lc3NhZ2UtZGVsaXZlcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJhd01lc3NhZ2VEZWxpdmVyeVxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiUmF3TWVzc2FnZURlbGl2ZXJ5IGlzIHRydWUgb24gYSAlcyBzdWJzY3JpcHRpb247IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBEZWxpdmVyeSBwcm90b2NvbCBbJXNdIGRvZXMgbm90IHN1cHBvcnQgcmF3IG1lc3NhZ2UgZGVsaXZlcnkuXFxcXFxcXCJcXFwiLCBbcHJvdG8sIHByb3RvXSksXFxuXFx0X3BmX3Nuc3Jhd19maXgsIF9wZl9zbnNyYXdfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zcmF3X3N1YlxcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuUmF3TWVzc2FnZURlbGl2ZXJ5XFxcIiwgW3BhdGhdKSkgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG5cXHRwcm90byA6PSBfcGZfc25zcmF3X3Byb3RvKG5hbWUsIHBhdGgpXFxuXFx0bm90IHByb3RvIGluIHtcXFwic3FzXFxcIiwgXFxcImh0dHBcXFwiLCBcXFwiaHR0cHNcXFwiLCBcXFwiZmlyZWhvc2VcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1zdWJzY3JpcHRpb24tZW5kcG9pbnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3Vic2NyaXB0aW9uIFByb3RvY29sIGlzIG9uZSBvZiB0aGUgbmluZSBTTlMgcHJvdG9jb2xzIGFuZCB0aGUgRW5kcG9pbnQgbWF0Y2hlcyBpdDogYW4gQVJOIG9mIHRoZSByaWdodCBzZXJ2aWNlIGZvciBzcXMvbGFtYmRhL2ZpcmVob3NlL2FwcGxpY2F0aW9uLCBhbiBlbWFpbCBhZGRyZXNzLCBhIFVSTCB3aXRoIHRoZSBzYW1lIHNjaGVtZSBmb3IgaHR0cC9odHRwcywgYSBwaG9uZSBudW1iZXIgZm9yIHNtc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zZXBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9hcGkvQVBJX1N1YnNjcmliZS5odG1sXFxcIlxcblxcbl9wZl9zbnNlcF9maXggOj0gXFxcIkdpdmUgdGhlIHN1YnNjcmlwdGlvbiB0aGUgZW5kcG9pbnQgZm9ybSBpdHMgcHJvdG9jb2wgZXhwZWN0cyAoRm46OkdldEF0dCBRdWV1ZS5Bcm4gZm9yIHNxcywgaHR0cHM6Ly8gVVJMIGZvciBodHRwcywgLi4uKVxcXCJcXG5cXG5fcGZfc25zZXBfc3ViIGNvbnRhaW5zIFtuYW1lLCBcXFwiUHJvcGVydGllc1xcXCIsIHN1YiwgdG9waWNdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChzdWIpXFxuXFx0dG9waWMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub3BpY0FyblxcXCIpXFxuXFx0aXNfc3RyaW5nKHRvcGljKVxcbn1cXG5cXG5fcGZfc25zZXBfc3ViIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBzdWIsIG5hbWVdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0c29tZSBzIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBzLnZhbHVlXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uLiVkXFxcIiwgW3MuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc25zZXBfcHJvdG8obmFtZSwgcGF0aCkgOj0gcCBpZiB7XFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocClcXG59XFxuXFxuX3BmX3Nuc2VwX3Byb3RvY29scyA6PSB7XFxcImh0dHBcXFwiLCBcXFwiaHR0cHNcXFwiLCBcXFwiZW1haWxcXFwiLCBcXFwiZW1haWwtanNvblxcXCIsIFxcXCJzbXNcXFwiLCBcXFwic3FzXFxcIiwgXFxcImFwcGxpY2F0aW9uXFxcIiwgXFxcImxhbWJkYVxcXCIsIFxcXCJmaXJlaG9zZVxcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtc3Vic2NyaXB0aW9uLWVuZHBvaW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiUHJvdG9jb2wgJyVzJyBpcyBub3QgYW4gU05TIHByb3RvY29sOyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBbWF6b24gU05TIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBwcm90b2NvbCBzdHJpbmc6ICVzXFxcXFxcXCJcXFwiLCBbcHJvdG8sIHByb3RvXSksXFxuXFx0X3BmX3Nuc2VwX2ZpeCwgX3BmX3Nuc2VwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2VwX3N1YlxcblxcdHByb3RvIDo9IF9wZl9zbnNlcF9wcm90byhuYW1lLCBwYXRoKVxcblxcdG5vdCBwcm90byBpbiBfcGZfc25zZXBfcHJvdG9jb2xzXFxufVxcblxcbiMgW3Byb3RvY29sLCBlbmRwb2ludCBwYXR0ZXJuLCBzZXJ2aWNlIGVycm9yXVxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcInNxc1xcXCIsIFxcXCJeYXJuOlteOl0rOnNxczpcXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFNRUyBlbmRwb2ludCBBUk5cXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcImxhbWJkYVxcXCIsIFxcXCJeYXJuOlteOl0rOmxhbWJkYTpcXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IExhbWJkYSBlbmRwb2ludCBBUk5cXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcImZpcmVob3NlXFxcIiwgXFxcIl5hcm46W146XSs6ZmlyZWhvc2U6XFxcIiwgXFxcIkludmFsaWQgcGFyYW1ldGVyOiBGaXJlaG9zZSBlbmRwb2ludCBBUk5cXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcImFwcGxpY2F0aW9uXFxcIiwgXFxcIl5hcm46W146XSs6c25zOlteOl0qOlteOl0qOmVuZHBvaW50L1xcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXBwbGljYXRpb24gZW5kcG9pbnQgYXJuIGludmFsaWRcXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcImVtYWlsXFxcIiwgXFxcIl5bXkAgXStAW15AIF0rJFxcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogRW1haWwgYWRkcmVzc1xcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiZW1haWwtanNvblxcXCIsIFxcXCJeW15AIF0rQFteQCBdKyRcXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEVtYWlsIGFkZHJlc3NcXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcImh0dHBcXFwiLCBcXFwiXmh0dHA6Ly9cXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEVuZHBvaW50IG11c3QgbWF0Y2ggdGhlIHNwZWNpZmllZCBwcm90b2NvbFxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiaHR0cHNcXFwiLCBcXFwiXmh0dHBzOi8vXFxcIiwgXFxcIkludmFsaWQgcGFyYW1ldGVyOiBFbmRwb2ludCBtdXN0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcHJvdG9jb2xcXFwiXVxcblxcbl9wZl9zbnNlcF9zaGFwZSBjb250YWlucyBbXFxcInNtc1xcXCIsIFxcXCJeWytdP1swLTldWzAtOSAtXSokXFxcIiwgXFxcIkludmFsaWQgU01TIGVuZHBvaW50XFxcIl1cXG5cXG4jIE9ubHkgbGl0ZXJhbCBlbmRwb2ludHMgYXJlIGp1ZGdlZDogYSBSZWYgLyBGbjo6R2V0QXR0IHRvIGEgcmVzb3VyY2UgaW4gdGhlXFxuIyB0ZW1wbGF0ZSByZXNvbHZlcyB0byB0aGF0IHJlc291cmNlJ3MgbG9naWNhbCBJRCBhbmQgaXMgc2tpcHBlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1zdWJzY3JpcHRpb24tZW5kcG9pbnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkVuZHBvaW50XFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFbmRwb2ludCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlIGZvcm0gdGhlICVzIHByb3RvY29sIGV4cGVjdHM7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiJXNcXFxcXFxcIlxcXCIsIFtlcCwgcHJvdG8sIGVycl0pLFxcblxcdF9wZl9zbnNlcF9maXgsIF9wZl9zbnNlcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNlcF9zdWJcXG5cXHRwcm90byA6PSBfcGZfc25zZXBfcHJvdG8obmFtZSwgcGF0aClcXG5cXHRzb21lIFtwMiwgcGF0dGVybiwgZXJyXSBpbiBfcGZfc25zZXBfc2hhcGVcXG5cXHRwMiA9PSBwcm90b1xcblxcdGVwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuRW5kcG9pbnRcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhlcClcXG5cXHRub3QgZXAgaW4gb2JqZWN0LmtleXMoaW5wdXQucmVzb3VyY2VzKVxcblxcdG5vdCBjb250YWlucyhlcCwgXFxcIiR7XFxcIilcXG5cXHRub3QgcmVnZXgubWF0Y2gocGF0dGVybiwgZXApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLXN1YnNjcmlwdGlvbi1yZWRyaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN1YnNjcmlwdGlvbiBSZWRyaXZlUG9saWN5IG5lZWRzIGRlYWRMZXR0ZXJUYXJnZXRBcm4sIHdoaWNoIG11c3QgYmUgYW4gU1FTIHF1ZXVlIEFSTiBpbiB0aGUgZGVwbG95IHJlZ2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zc3JkX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWRlYWQtbGV0dGVyLXF1ZXVlcy5odG1sXFxcIlxcblxcbl9wZl9zbnNzcmRfZml4IDo9IFxcXCJTZXQgZGVhZExldHRlclRhcmdldEFybiB0byBGbjo6R2V0QXR0IFF1ZXVlLkFybiBvZiBhIHF1ZXVlIGluIHRoaXMgc3RhY2tcXFwiXFxuXFxuX3BmX3Nuc3NyZF9zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNzcmRfc3ViIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBzdWIsIG5hbWVdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0c29tZSBzIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBzLnZhbHVlXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uLiVkXFxcIiwgW3MuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc25zc3JkX3Byb3RvKG5hbWUsIHBhdGgpIDo9IHAgaWYge1xcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKHApXFxufVxcblxcbl9wZl9zbnNzcmRfcG9sKHN1YikgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChzdWIsIFxcXCJSZWRyaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc25zc3JkX3BvbChzdWIpIDo9IHBvbCBpZiB7XFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoc3ViLCBcXFwiUmVkcml2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXN1YnNjcmlwdGlvbi1yZWRyaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZWRyaXZlUG9saWN5XFxcIiwgW3BhdGhdKSxcXG5cXHRcXFwiUmVkcml2ZVBvbGljeSBoYXMgbm8gZGVhZExldHRlclRhcmdldEFybjsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IFJlZHJpdmVQb2xpY3k6IE1pc3NpbmcgZGVhZExldHRlclRhcmdldEFybiBhdHRyaWJ1dGVcXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3Nuc3NyZF9maXgsIF9wZl9zbnNzcmRfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zc3JkX3N1YlxcblxcdHBvbCA6PSBfcGZfc25zc3JkX3BvbChzdWIpXFxuXFx0b2JqZWN0LmdldChwb2wsIFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1zdWJzY3JpcHRpb24tcmVkcml2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUmVkcml2ZVBvbGljeS5kZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuICclcycgaXMgbm90IGFuIFNRUyBxdWV1ZSBBUk47IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBSZWRyaXZlUG9saWN5OiBkZWFkTGV0dGVyVGFyZ2V0QXJuIG11c3QgYmUgYSBTUVMgcXVldWVcXFxcXFxcIlxcXCIsIFthcm5dKSxcXG5cXHRfcGZfc25zc3JkX2ZpeCwgX3BmX3Nuc3NyZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNzcmRfc3ViXFxuXFx0YXJuIDo9IG9iamVjdC5nZXQoX3BmX3Nuc3NyZF9wb2woc3ViKSwgXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0bm90IGNvbnRhaW5zKGFybiwgXFxcIiR7XFxcIilcXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5hcm46W146XSs6c3FzOlxcXCIsIGFybilcXG59XFxuXFxuIyBSZWdpb24gY29tcGFyaXNvbiBuZWVkcyB0aGUgZGVwbG95IHJlZ2lvbiAoZW5mb3JjZSBtb2RlIG9ubHk7IHNlZSBBR0VOVFMubWQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXN1YnNjcmlwdGlvbi1yZWRyaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZWRyaXZlUG9saWN5LmRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm4gaXMgaW4gJyVzJyBidXQgdGhlIHN1YnNjcmlwdGlvbiBkZXBsb3lzIHRvICclcyc7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBSZWRyaXZlUG9saWN5OiBkZWFkTGV0dGVyVGFyZ2V0QXJuIG11c3QgYmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSBzdWJzY3JpcHRpb25cXFxcXFxcIlxcXCIsIFtwYXJ0c1szXSwgcmVnaW9uXSksXFxuXFx0X3BmX3Nuc3NyZF9maXgsIF9wZl9zbnNzcmRfdXJsKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zc3JkX3N1YlxcblxcdGFybiA6PSBvYmplY3QuZ2V0KF9wZl9zbnNzcmRfcG9sKHN1YiksIFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMl0gPT0gXFxcInNxc1xcXCJcXG5cXHRwYXJ0c1szXSAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtc3Vic2NyaXB0aW9uLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdWJzY3JpcHRpb24uUmVnaW9uIG11c3QgYmUgdGhlIHRvcGljJ3MgcmVnaW9uICh0aGUgcmVnaW9uIGluIGEgbGl0ZXJhbCBUb3BpY0Fybiwgb3IgdGhlIGRlcGxveSByZWdpb24gZm9yIGEgdG9waWMgaW4gdGhpcyB0ZW1wbGF0ZSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zc3JnX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utc25zLXN1YnNjcmlwdGlvbi5odG1sXFxcIlxcblxcbl9wZl9zbnNzcmdfZml4IDo9IFxcXCJTZXQgUmVnaW9uIHRvIHRoZSB0b3BpYydzIG93biByZWdpb24sIG9yIGRyb3AgaXQgZm9yIGEgdG9waWMgaW4gdGhpcyBzdGFja1xcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1zdWJzY3JpcHRpb24tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWdpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlJlZ2lvbiAnJXMnIGRpZmZlcnMgZnJvbSB0aGUgdG9waWMncyByZWdpb24gJyVzJyBpbiBUb3BpY0FybjsgdGhlIHJlc291cmNlIGhhbmRsZXIgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBUb3BpY0FyblxcXFxcXFwiXFxcIiwgW3JlZywgcGFydHNbM11dKSxcXG5cXHRfcGZfc25zc3JnX2ZpeCwgX3BmX3Nuc3NyZ191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cXFwiKVxcblxcdHJlZyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlZ2lvblxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlZylcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0KVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KHQsIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzNdICE9IHJlZ1xcbn1cXG5cXG4jIEEgdG9waWMgY3JlYXRlZCBpbiB0aGlzIHRlbXBsYXRlIGxpdmVzIGluIHRoZSBkZXBsb3kgcmVnaW9uIChlbmZvcmNlIG1vZGUgb25seTsgc2VlIEFHRU5UUy5tZCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtc3Vic2NyaXB0aW9uLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVnaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSZWdpb24gJyVzJyBkaWZmZXJzIGZyb20gdGhlIGRlcGxveSByZWdpb24gJyVzJyBvZiB0aGUgdG9waWMgaW4gdGhpcyB0ZW1wbGF0ZTsgdGhlIHJlc291cmNlIGhhbmRsZXIgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBUb3BpY0FyblxcXFxcXFwiXFxcIiwgW3JlZywgcmVnaW9uXSksXFxuXFx0X3BmX3Nuc3NyZ19maXgsIF9wZl9zbnNzcmdfdXJsKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRyZWcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZWdpb25cXFwiKVxcblxcdGlzX3N0cmluZyhyZWcpXFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHJlZyAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtdG9waWMtYXR0cmlidXRlLXZhbHVlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUb3BpYyBEaXNwbGF5TmFtZSBpcyBhdCBtb3N0IDEwMCBjaGFyYWN0ZXJzLCBTaWduYXR1cmVWZXJzaW9uIGlzIDEgb3IgMiwgYW5kIFRyYWNpbmdDb25maWcgaXMgUGFzc1Rocm91Z2ggb3IgQWN0aXZlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zdGF2X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utc25zLXRvcGljLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc3Rhdl9maXggOj0gXFxcIlNob3J0ZW4gRGlzcGxheU5hbWUgdG8gMTAwIGNoYXJhY3RlcnM7IHVzZSBTaWduYXR1cmVWZXJzaW9uIFxcXFxcXFwiMVxcXFxcXFwiL1xcXFxcXFwiMlxcXFxcXFwiIGFuZCBUcmFjaW5nQ29uZmlnIFBhc3NUaHJvdWdoL0FjdGl2ZVxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1hdHRyaWJ1dGUtdmFsdWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EaXNwbGF5TmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGlzcGxheU5hbWUgaXMgJWQgY2hhcmFjdGVycyBsb25nIChtYXhpbXVtIDEwMCk7IENyZWF0ZVRvcGljIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IERpc3BsYXlOYW1lXFxcXFxcXCJcXFwiLCBbY291bnQodildKSxcXG5cXHRfcGZfc25zdGF2X2ZpeCwgX3BmX3Nuc3Rhdl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3BsYXlOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRjb3VudCh2KSA+IDEwMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1hdHRyaWJ1dGUtdmFsdWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TaWduYXR1cmVWZXJzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTaWduYXR1cmVWZXJzaW9uICcldicgaXMgbm90IDEgb3IgMjsgQ3JlYXRlVG9waWMgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogU2lnbmF0dXJlVmVyc2lvbjogSW52YWxpZCB2YWx1ZS4gTXVzdCBiZSAxIG9yIDIuXFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdF9wZl9zbnN0YXZfZml4LCBfcGZfc25zdGF2X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2lnbmF0dXJlVmVyc2lvblxcXCIpXFxuXFx0X3BmX3Nuc3Rhdl9zY2FsYXIodilcXG5cXHRub3Qgc3ByaW50ZihcXFwiJXZcXFwiLCBbdl0pIGluIHtcXFwiMVxcXCIsIFxcXCIyXFxcIn1cXG59XFxuXFxuX3BmX3Nuc3Rhdl9zY2FsYXIodikgaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX3Nuc3Rhdl9zY2FsYXIodikgaWYgaXNfbnVtYmVyKHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtdG9waWMtYXR0cmlidXRlLXZhbHVlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHJhY2luZ0NvbmZpZ1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVHJhY2luZ0NvbmZpZyAnJXMnIGlzIG5vdCBQYXNzVGhyb3VnaCBvciBBY3RpdmU7IENyZWF0ZVRvcGljIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IEludmFsaWQgdHJhY2luZyBjb25maWcgdmFsdWU6ICVzXFxcXFxcXCJcXFwiLCBbdiwgdl0pLFxcblxcdF9wZl9zbnN0YXZfZml4LCBfcGZfc25zdGF2X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHJhY2luZ0NvbmZpZ1xcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHYgaW4ge1xcXCJQYXNzVGhyb3VnaFxcXCIsIFxcXCJBY3RpdmVcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy10b3BpYy1uYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUb3BpYyBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAocGx1cyBhIC5maWZvIHN1ZmZpeClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDI1Nn0kYCwgbilcXG5cXG5fcGZfc25zbmFtZV9vayhuKSBpZiByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwyNTF9XFxcXC5maWZvJGAsIG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtdG9waWMtbmFtZS1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVG9waWNOYW1lICclcycgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBUb3BpYyBOYW1lXFxcXFxcXCI6IFNOUyBhY2NlcHRzIG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChhIEZJRk8gdG9waWMgYWRkcyB0aGUgLmZpZm8gc3VmZml4KVxcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgdG9waWMgdXNpbmcgW2EtekEtWjAtOV8tXSAoYXBwZW5kIC5maWZvIG9ubHkgZm9yIEZJRk8gdG9waWNzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlVG9waWMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IF9wZl9zbnNuYW1lX29rKG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLXRvcGljLXBvbGljeS10b3BpY3NcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVG9waWNQb2xpY3kuVG9waWNzIHRha2VzIHRvcGljIEFSTnMgKFJlZiBUb3BpYyksIG5vdCB0b3BpYyBuYW1lc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc3RwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utc25zLXRvcGljcG9saWN5Lmh0bWxcXFwiXFxuXFxuX3BmX3Nuc3RwX2ZpeCA6PSBcXFwiTGlzdCB0b3BpY3Mgd2l0aCBSZWYgKHRoZSBBUk4pLCBub3QgRm46OkdldEF0dCBUb3BpYy5Ub3BpY05hbWUgb3IgYSBiYXJlIG5hbWVcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtdG9waWMtcG9saWN5LXRvcGljc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Ub3BpY3MuJWRcXFwiLCBbaV0pLFxcblxcdFxcXCJUb3BpY3MgZW50cnkgaXMgdGhlIHRvcGljIG5hbWUgKEZuOjpHZXRBdHQgVG9waWMuVG9waWNOYW1lKSBidXQgVG9waWNQb2xpY3kgZXhwZWN0cyB0aGUgdG9waWMgQVJOOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljQXJuIFJlYXNvbjogQW4gQVJOIG11c3QgaGF2ZSBhdCBsZWFzdCA2IGVsZW1lbnRzLCBub3QgMVxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc25zdHBfZml4LCBfcGZfc25zdHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNQb2xpY3lcXFwiKVxcblxcdHRzIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJUb3BpY3NcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHRzKVxcblxcdHNvbWUgaSwgdCBpbiB0c1xcblxcdGlzX29iamVjdCh0KVxcblxcdG9iamVjdC5nZXQodCwgXFxcIl9fa2luZFxcXCIsIG51bGwpID09IFxcXCJnZXRhdHQ6VG9waWNOYW1lXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1wb2xpY3ktdG9waWNzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRvcGljcy4lZFxcXCIsIFtpXSksXFxuXFx0c3ByaW50ZihcXFwiVG9waWNzIGVudHJ5ICclcycgaXMgbm90IGFuIEFSTjsgdGhlIHJlc291cmNlIGhhbmRsZXIgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBUb3BpY0FybiBSZWFzb246IEFuIEFSTiBtdXN0IGhhdmUgYXQgbGVhc3QgNiBlbGVtZW50c1xcXFxcXFwiXFxcIiwgW3RdKSxcXG5cXHRfcGZfc25zdHBfZml4LCBfcGZfc25zdHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNQb2xpY3lcXFwiKVxcblxcdHRzIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJUb3BpY3NcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHRzKVxcblxcdHNvbWUgaSwgdCBpbiB0c1xcblxcdGlzX3N0cmluZyh0KVxcblxcdG5vdCBzdGFydHN3aXRoKHQsIFxcXCJhcm46XFxcIilcXG5cXHRub3QgY29udGFpbnModCwgXFxcIiR7XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtZGxxLXNhbWUtdHlwZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGRlYWQtbGV0dGVyIHF1ZXVlIG5hbWVkIGJ5IGEgbGl0ZXJhbCBBUk4gbXVzdCBiZSB0aGUgc2FtZSB0eXBlIGFzIGl0cyBzb3VyY2UgKEZJRk8gZm9yIEZJRk8sIHN0YW5kYXJkIGZvciBzdGFuZGFyZCk7IEZuOjpHZXRBdHQgd2lyaW5nIGlzIGNvdmVyZWQgYnkgZW5naW5lIHJ1bGUgRTM1MDJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNkbHFfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc2RscV9maXggOj0gXFxcIlBvaW50IGEgRklGTyBxdWV1ZSBhdCBhIEZJRk8gZGVhZC1sZXR0ZXIgcXVldWUgKCouZmlmbykgYW5kIGEgc3RhbmRhcmQgcXVldWUgYXQgYSBzdGFuZGFyZCBvbmVcXFwiXFxuXFxuX3BmX3Nxc2RscV9maWZvKHEpIGlmIHJlc29sdmUocSwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG5cXG4jIFN0YW5kYXJkIHF1ZXVlOiBGaWZvUXVldWUgYWJzZW50IG9yIGxpdGVyYWxseSBmYWxzZSAoYW4gdW5yZXNvbHZhYmxlIHZhbHVlIGlzIG5laXRoZXIpLlxcbl9wZl9zcXNkbHFfc3RkKHEpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbcV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRmlmb1F1ZXVlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfc3FzZGxxX3N0ZChxKSBpZiByZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG5cXG4jIFJlZHJpdmVQb2xpY3kgYXJyaXZlcyBhcyBhIEpTT04gb2JqZWN0IG9yIGFzIGEgSlNPTiBzdHJpbmcgKGJvdGggYXJlIHZhbGlkIENsb3VkRm9ybWF0aW9uKS5cXG5fcGZfc3FzZGxxX3BvbChuYW1lKSA6PSBwb2wgaWYge1xcblxcdHBvbCA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUmVkcml2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc2RscV9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG4jIFRoZSBlbmdpbmUncyBFMzUwMiAoQ0ZOX0xJTlQpIGFscmVhZHkgY29tcGFyZXMgdGhlIHR5cGVzIHdoZW5cXG4jIGRlYWRMZXR0ZXJUYXJnZXRBcm4gaXMgRm46OkdldEF0dCBvZiBhIHF1ZXVlIGluIHRoZSB0ZW1wbGF0ZSAodmVyaWZpZWRcXG4jIGFnYWluc3QgMS43LjAtYmV0YSBvbiAyMDI2LTA5LTA1KS4gT25seSBhIGxpdGVyYWwgQVJOIOKAlCBhbiBpbXBvcnRlZCBxdWV1ZSDigJRcXG4jIGVzY2FwZXMgaXQsIGFuZCB0aGUgLmZpZm8gc3VmZml4IHRlbGxzIHRoZSB0eXBlLlxcbl9wZl9zcXNkbHFfbGl0ZXJhbChuYW1lKSA6PSBhcm4gaWYge1xcblxcdGFybiA6PSBvYmplY3QuZ2V0KF9wZl9zcXNkbHFfcG9sKG5hbWUpLCBcXFwiZGVhZExldHRlclRhcmdldEFyblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRyZWdleC5tYXRjaChcXFwiXmFybjpbXjpdKzpzcXM6XFxcIiwgYXJuKVxcblxcdG5vdCBjb250YWlucyhhcm4sIFxcXCIke1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLWRscS1zYW1lLXR5cGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVQb2xpY3kuZGVhZExldHRlclRhcmdldEFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiYSBGSUZPIHF1ZXVlIHBvaW50cyBhdCB0aGUgc3RhbmRhcmQgZGVhZC1sZXR0ZXIgcXVldWUgJyVzJzsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkRlYWQtbGV0dGVyIHF1ZXVlIG11c3QgYmUgc2FtZSB0eXBlIG9mIHF1ZXVlIGFzIHRoZSBzb3VyY2UuXFxcXFxcXCJcXFwiLCBbYXJuXSksXFxuXFx0X3BmX3Nxc2RscV9maXgsIF9wZl9zcXNkbHFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdF9wZl9zcXNkbHFfZmlmbyhuYW1lKVxcblxcdGFybiA6PSBfcGZfc3FzZGxxX2xpdGVyYWwobmFtZSlcXG5cXHRub3QgZW5kc3dpdGgoYXJuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1kbHEtc2FtZS10eXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlUG9saWN5LmRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcImEgc3RhbmRhcmQgcXVldWUgcG9pbnRzIGF0IHRoZSBGSUZPIGRlYWQtbGV0dGVyIHF1ZXVlICclcyc7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJEZWFkLWxldHRlciBxdWV1ZSBtdXN0IGJlIHNhbWUgdHlwZSBvZiBxdWV1ZSBhcyB0aGUgc291cmNlLlxcXFxcXFwiXFxcIiwgW2Fybl0pLFxcblxcdF9wZl9zcXNkbHFfZml4LCBfcGZfc3FzZGxxX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRfcGZfc3FzZGxxX3N0ZChuYW1lKVxcblxcdGFybiA6PSBfcGZfc3FzZGxxX2xpdGVyYWwobmFtZSlcXG5cXHRlbmRzd2l0aChhcm4sIFxcXCIuZmlmb1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc3FzLWZpZm8tbmFtZS1zdWZmaXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBRdWV1ZU5hbWUgZW5kaW5nIGluIC5maWZvIHJlcXVpcmVzIEZpZm9RdWV1ZTogdHJ1ZSAoYSBGSUZPIHF1ZXVlIHdpdGhvdXQgdGhlIHN1ZmZpeCBpcyBlbmdpbmUgcnVsZSBFMjUwNClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNzZnhfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc3NmeF9maXggOj0gXFxcIlNldCBGaWZvUXVldWU6IHRydWUgb3IgZHJvcCB0aGUgLmZpZm8gc3VmZml4XFxcIlxcblxcbl9wZl9zcXNzZnhfZmlmbyhxKSBpZiByZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFxuIyBTdGFuZGFyZCBxdWV1ZTogRmlmb1F1ZXVlIGFic2VudCBvciBsaXRlcmFsbHkgZmFsc2UgKGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBpcyBuZWl0aGVyKS5cXG5fcGZfc3Fzc2Z4X3N0ZChxKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW3FdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpZm9RdWV1ZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nxc3NmeF9zdGQocSkgaWYgcmVzb2x2ZShxLCBcXFwiUHJvcGVydGllcy5GaWZvUXVldWVcXFwiKSBpbiB7ZmFsc2UsIFxcXCJmYWxzZVxcXCJ9XFxuXFxuIyBUaGUgb3Bwb3NpdGUgZGlyZWN0aW9uIChGaWZvUXVldWUgdHJ1ZSwgbmFtZSB3aXRob3V0IC5maWZvKSBpcyB0aGUgZW5naW5lJ3NcXG4jIEUyNTA0IC8gRTM1MDE7IHZlcmlmaWVkIGFnYWluc3QgMS43LjAtYmV0YSBvbiAyMDI2LTA5LTA1LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLWZpZm8tbmFtZS1zdWZmaXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlF1ZXVlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUXVldWVOYW1lICclcycgZW5kcyB3aXRoIC5maWZvIGJ1dCB0aGUgcXVldWUgaXMgc3RhbmRhcmQgKEZpZm9RdWV1ZSBpcyBub3QgdHJ1ZSk7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJDYW4gb25seSBpbmNsdWRlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBvciB1bmRlcnNjb3Jlcy4gMSB0byA4MCBpbiBsZW5ndGhcXFxcXFxcIlxcXCIsIFtuXSksXFxuXFx0X3BmX3Nxc3NmeF9maXgsIF9wZl9zcXNzZnhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5RdWV1ZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdGVuZHN3aXRoKG4sIFxcXCIuZmlmb1xcXCIpXFxuXFx0X3BmX3Nxc3NmeF9zdGQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGVudEJhc2VkRGVkdXBsaWNhdGlvbiwgRGVkdXBsaWNhdGlvblNjb3BlIGFuZCBGaWZvVGhyb3VnaHB1dExpbWl0IGFyZSBGSUZPLW9ubHkgcXVldWUgYXR0cmlidXRlcyAoYW5kIHRoZSB0d28gZW51bXMgYXJlIG1lc3NhZ2VHcm91cHxxdWV1ZSBhbmQgcGVyUXVldWV8cGVyTWVzc2FnZUdyb3VwSWQpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3FzZm9fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc2ZvX2ZpeCA6PSBcXFwiU2V0IEZpZm9RdWV1ZTogdHJ1ZSAoYW5kIG5hbWUgdGhlIHF1ZXVlICouZmlmbykgb3IgZHJvcCB0aGUgRklGTy1vbmx5IGF0dHJpYnV0ZXNcXFwiXFxuXFxuX3BmX3Nxc2ZvX2ZpZm8ocSkgaWYgcmVzb2x2ZShxLCBcXFwiUHJvcGVydGllcy5GaWZvUXVldWVcXFwiKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcblxcbiMgU3RhbmRhcmQgcXVldWU6IEZpZm9RdWV1ZSBhYnNlbnQgb3IgbGl0ZXJhbGx5IGZhbHNlIChhbiB1bnJlc29sdmFibGUgdmFsdWUgaXMgbmVpdGhlcikuXFxuX3BmX3Nxc2ZvX3N0ZChxKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW3FdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpZm9RdWV1ZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nxc2ZvX3N0ZChxKSBpZiByZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG5cXG5fcGZfc3FzZm9fbXNnIDo9IHtcXG5cXHRcXFwiQ29udGVudEJhc2VkRGVkdXBsaWNhdGlvblxcXCI6IFxcXCJVbmtub3duIEF0dHJpYnV0ZSBDb250ZW50QmFzZWREZWR1cGxpY2F0aW9uLlxcXCIsXFxuXFx0XFxcIkRlZHVwbGljYXRpb25TY29wZVxcXCI6IFxcXCJZb3UgY2FuIHNwZWNpZnkgdGhlIERlZHVwbGljYXRpb25TY29wZSBvbmx5IHdoZW4gRmlmb1F1ZXVlIGlzIHNldCB0byB0cnVlLlxcXCIsXFxuXFx0XFxcIkZpZm9UaHJvdWdocHV0TGltaXRcXFwiOiBcXFwiWW91IGNhbiBzcGVjaWZ5IHRoZSBGaWZvVGhyb3VnaHB1dExpbWl0IG9ubHkgd2hlbiBGaWZvUXVldWUgaXMgc2V0IHRvIHRydWUuXFxcIixcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbYXR0cl0pLFxcblxcdHNwcmludGYoXFxcIiVzIGlzIHNldCBvbiBhIHN0YW5kYXJkIHF1ZXVlIChGaWZvUXVldWUgaXMgbm90IHRydWUpOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiJXNcXFxcXFxcIlxcXCIsIFthdHRyLCBfcGZfc3FzZm9fbXNnW2F0dHJdXSksXFxuXFx0X3BmX3Nxc2ZvX2ZpeCwgX3BmX3Nxc2ZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRfcGZfc3FzZm9fc3RkKG5hbWUpXFxuXFx0c29tZSBhdHRyLCBfIGluIF9wZl9zcXNmb19tc2dcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBhdHRyLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zcXNmb19lbnVtIGNvbnRhaW5zIFtcXFwiRGVkdXBsaWNhdGlvblNjb3BlXFxcIiwge1xcXCJtZXNzYWdlR3JvdXBcXFwiLCBcXFwicXVldWVcXFwifV1cXG5cXG5fcGZfc3FzZm9fZW51bSBjb250YWlucyBbXFxcIkZpZm9UaHJvdWdocHV0TGltaXRcXFwiLCB7XFxcInBlclF1ZXVlXFxcIiwgXFxcInBlck1lc3NhZ2VHcm91cElkXFxcIn1dXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbYXR0cl0pLFxcblxcdHNwcmludGYoXFxcIiVzICclcycgaXMgbm90IG9uZSBvZiAldjsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgJXMuIFJlYXNvbjogbm90IGEgc3VwcG9ydGVkIHZhbHVlLlxcXFxcXFwiXFxcIiwgW2F0dHIsIHYsIGFsbG93ZWQsIGF0dHJdKSxcXG5cXHRfcGZfc3FzZm9fZml4LCBfcGZfc3FzZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdHNvbWUgW2F0dHIsIGFsbG93ZWRdIGluIF9wZl9zcXNmb19lbnVtXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbYXR0cl0pKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCB2IGluIGFsbG93ZWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtaGlnaC10aHJvdWdocHV0LXBhaXJpbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmlmb1Rocm91Z2hwdXRMaW1pdCBwZXJNZXNzYWdlR3JvdXBJZCByZXF1aXJlcyBEZWR1cGxpY2F0aW9uU2NvcGUgbWVzc2FnZUdyb3VwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3FzaHRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9TUVNEZXZlbG9wZXJHdWlkZS9oaWdoLXRocm91Z2hwdXQtZmlmby5odG1sXFxcIlxcblxcbl9wZl9zcXNodF9maXggOj0gXFxcIlNldCBEZWR1cGxpY2F0aW9uU2NvcGU6IG1lc3NhZ2VHcm91cCB0b2dldGhlciB3aXRoIEZpZm9UaHJvdWdocHV0TGltaXQ6IHBlck1lc3NhZ2VHcm91cElkIChib3RoIGFyZSBuZWVkZWQgZm9yIGhpZ2ggdGhyb3VnaHB1dClcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtaGlnaC10aHJvdWdocHV0LXBhaXJpbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZpZm9UaHJvdWdocHV0TGltaXRcXFwiLFxcblxcdHNwcmludGYoXFxcIkZpZm9UaHJvdWdocHV0TGltaXQgaXMgcGVyTWVzc2FnZUdyb3VwSWQgYnV0IERlZHVwbGljYXRpb25TY29wZSBpcyAlczsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgRmlmb1Rocm91Z2hwdXRMaW1pdC4gUmVhc29uOiBUbyBzZXQgRmlmb1Rocm91Z2hwdXRMaW1pdCB0byBwZXJNZXNzYWdlR3JvdXBJZCwgdGhlIERlZHVwbGljYXRpb25TY29wZSBtdXN0IGJlIG1lc3NhZ2VHcm91cC5cXFxcXFxcIlxcXCIsIFtzaG93bl0pLFxcblxcdF9wZl9zcXNodF9maXgsIF9wZl9zcXNodF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GaWZvVGhyb3VnaHB1dExpbWl0XFxcIikgPT0gXFxcInBlck1lc3NhZ2VHcm91cElkXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHNjb3BlIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJEZWR1cGxpY2F0aW9uU2NvcGVcXFwiLCBudWxsKVxcblxcdF9wZl9zcXNodF9iYWQoc2NvcGUpXFxuXFx0c2hvd24gOj0gX3BmX3Nxc2h0X3Nob3coc2NvcGUpXFxufVxcblxcbl9wZl9zcXNodF9iYWQoc2NvcGUpIGlmIHNjb3BlID09IG51bGxcXG5cXG5fcGZfc3FzaHRfYmFkKHNjb3BlKSBpZiB7XFxuXFx0aXNfc3RyaW5nKHNjb3BlKVxcblxcdHNjb3BlICE9IFxcXCJtZXNzYWdlR3JvdXBcXFwiXFxufVxcblxcbl9wZl9zcXNodF9zaG93KHNjb3BlKSA6PSBcXFwiYWJzZW50XFxcIiBpZiBzY29wZSA9PSBudWxsXFxuXFxuX3BmX3Nxc2h0X3Nob3coc2NvcGUpIDo9IHNwcmludGYoXFxcIiclcydcXFwiLCBbc2NvcGVdKSBpZiBpc19zdHJpbmcoc2NvcGUpXFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcXVldWUtbmFtZS1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUXVldWUgbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUgKG1heCA4MCwgcGx1cyBhIC5maWZvIHN1ZmZpeClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDgwfSRgLCBuKVxcblxcbl9wZl9zcXNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDc1fVxcXFwuZmlmbyRgLCBuKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXF1ZXVlLW5hbWUtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5RdWV1ZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlF1ZXVlTmFtZSAnJXMnIGlzIHJlamVjdGVkOiBTUVMgYWNjZXB0cyAxLTgwIGNoYXJhY3RlcnMgb2YgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChhIEZJRk8gcXVldWUgYWRkcyB0aGUgLmZpZm8gc3VmZml4KVxcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgcXVldWUgdXNpbmcgW2EtekEtWjAtOV8tXSB3aXRoaW4gODAgY2hhcmFjdGVycyAoYXBwZW5kIC5maWZvIG9ubHkgZm9yIEZJRk8gcXVldWVzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlF1ZXVlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IF9wZl9zcXNuYW1lX29rKG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc3FzLXF1ZXVlLXBvbGljeS1xdWV1ZXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUXVldWVQb2xpY3kuUXVldWVzIHRha2VzIHF1ZXVlIFVSTHMgKFJlZiBRdWV1ZSksIG5ldmVyIEFSTnMgKEZuOjpHZXRBdHQgUXVldWUuQXJuKSwgYW5kIG11c3Qgbm90IGJlIGVtcHR5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3FzcXBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1zcXMtcXVldWVwb2xpY3kuaHRtbFxcXCJcXG5cXG5fcGZfc3FzcXBfZml4IDo9IFxcXCJMaXN0IHRoZSBxdWV1ZXMgd2l0aCBSZWYgKHRoZSBxdWV1ZSBVUkwpLCBub3QgRm46OkdldEF0dCBRdWV1ZS5Bcm5cXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcXVldWUtcG9saWN5LXF1ZXVlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUXVldWVzXFxcIixcXG5cXHRcXFwiUXVldWVzIGlzIGVtcHR5OyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiUXVldWVzIGFyZSByZXF1aXJlZFxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc3FzcXBfZml4LCBfcGZfc3FzcXBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVQb2xpY3lcXFwiKVxcblxcdHFzIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJRdWV1ZXNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHFzKVxcblxcdGNvdW50KHFzKSA9PSAwXFxufVxcblxcbiMgRm46OkdldEF0dCBhcHBlYXJzIGluIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgYXMgYSBtYXJrZXIgb2JqZWN0IHdob3NlXFxuIyBfX2tpbmQgbmFtZXMgdGhlIGF0dHJpYnV0ZTsgUmVmICh0aGUgVVJMKSBpcyBcXFwicmVzb3VyY2VcXFwiLiBMaXRlcmFsIEFSTnMgYXJlXFxuIyBzdHJpbmdzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXF1ZXVlLXBvbGljeS1xdWV1ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUXVldWVzLiVkXFxcIiwgW2ldKSxcXG5cXHRcXFwiUXVldWVzIGVudHJ5IGlzIHRoZSBxdWV1ZSBBUk4gKEZuOjpHZXRBdHQgUXVldWUuQXJuKSBidXQgUXVldWVQb2xpY3kgZXhwZWN0cyB0aGUgcXVldWUgVVJMOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGFkZHJlc3MgYXJuOmF3czpzcXM6Li4uIGlzIG5vdCB2YWxpZCBmb3IgdGhpcyBlbmRwb2ludC5cXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3Nxc3FwX2ZpeCwgX3BmX3Nxc3FwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlUG9saWN5XFxcIilcXG5cXHRxcyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUXVldWVzXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShxcylcXG5cXHRzb21lIGksIHEgaW4gcXNcXG5cXHRpc19vYmplY3QocSlcXG5cXHRvYmplY3QuZ2V0KHEsIFxcXCJfX2tpbmRcXFwiLCBudWxsKSA9PSBcXFwiZ2V0YXR0OkFyblxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcXVldWUtcG9saWN5LXF1ZXVlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5RdWV1ZXMuJWRcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcIlF1ZXVlcyBlbnRyeSAnJXMnIGlzIGFuIEFSTiBidXQgUXVldWVQb2xpY3kgZXhwZWN0cyB0aGUgcXVldWUgVVJMIChodHRwczovL3Nxcy48cmVnaW9uPi5hbWF6b25hd3MuY29tLzxhY2NvdW50Pi88bmFtZT4pOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGFkZHJlc3MgLi4uIGlzIG5vdCB2YWxpZCBmb3IgdGhpcyBlbmRwb2ludC5cXFxcXFxcIlxcXCIsIFtxXSksXFxuXFx0X3BmX3Nxc3FwX2ZpeCwgX3BmX3Nxc3FwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlUG9saWN5XFxcIilcXG5cXHRxcyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUXVldWVzXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShxcylcXG5cXHRzb21lIGksIHEgaW4gcXNcXG5cXHRpc19zdHJpbmcocSlcXG5cXHRzdGFydHN3aXRoKHEsIFxcXCJhcm46XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcmVkcml2ZS1hbGxvdy1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVkcml2ZUFsbG93UG9saWN5OiByZWRyaXZlUGVybWlzc2lvbiBpcyByZXF1aXJlZCAoYWxsb3dBbGx8ZGVueUFsbHxieVF1ZXVlKTsgYnlRdWV1ZSBuZWVkcyAxLi4xMCBzb3VyY2VRdWV1ZUFybnMgYW5kIHRoZSBvdGhlciB0d28gZm9yYmlkIHRoZW1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNyYXBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc3JhcF9maXggOj0gXFxcIlVzZSBieVF1ZXVlIHdpdGggMS0xMCBzb3VyY2VRdWV1ZUFybnMsIG9yIGFsbG93QWxsIC8gZGVueUFsbCB3aXRob3V0IHNvdXJjZVF1ZXVlQXJuc1xcXCJcXG5cXG4jIFJlZHJpdmVBbGxvd1BvbGljeSBhcnJpdmVzIGFzIGEgSlNPTiBvYmplY3Qgb3IgYXMgYSBKU09OIHN0cmluZyAoYm90aCBhcmUgdmFsaWQgQ2xvdWRGb3JtYXRpb24pLlxcbl9wZl9zcXNyYXBfcG9sKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cG9sIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlQWxsb3dQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zcXNyYXBfcG9sKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlQWxsb3dQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc3FzcmFwX21zZyA6PSBcXFwiQW1hem9uIFNRUyBjYW4ndCBjcmVhdGUgdGhlIHJlZHJpdmUgYWxsb3cgcG9saWN5XFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtYWxsb3ctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlQWxsb3dQb2xpY3kucmVkcml2ZVBlcm1pc3Npb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlJlZHJpdmVBbGxvd1BvbGljeSBoYXMgbm8gcmVkcml2ZVBlcm1pc3Npb247IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCIlcywgYXMgaXQncyBpbiBhbiB1bnN1cHBvcnRlZCBmb3JtYXQuXFxcXFxcXCJcXFwiLCBbX3BmX3Nxc3JhcF9tc2ddKSxcXG5cXHRfcGZfc3FzcmFwX2ZpeCwgX3BmX3Nxc3JhcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cG9sIDo9IF9wZl9zcXNyYXBfcG9sKG5hbWUpXFxuXFx0b2JqZWN0LmdldChwb2wsIFxcXCJyZWRyaXZlUGVybWlzc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcmVkcml2ZS1hbGxvdy1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVBbGxvd1BvbGljeS5yZWRyaXZlUGVybWlzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwicmVkcml2ZVBlcm1pc3Npb24gJyVzJyBpcyBub3QgYWxsb3dBbGwsIGRlbnlBbGwgb3IgYnlRdWV1ZTsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIiVzLCBhcyBpdCdzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdC5cXFxcXFxcIlxcXCIsIFtwZXJtLCBfcGZfc3FzcmFwX21zZ10pLFxcblxcdF9wZl9zcXNyYXBfZml4LCBfcGZfc3FzcmFwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwZXJtIDo9IG9iamVjdC5nZXQoX3BmX3Nxc3JhcF9wb2wobmFtZSksIFxcXCJyZWRyaXZlUGVybWlzc2lvblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHBlcm0pXFxuXFx0bm90IHBlcm0gaW4ge1xcXCJhbGxvd0FsbFxcXCIsIFxcXCJkZW55QWxsXFxcIiwgXFxcImJ5UXVldWVcXFwifVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLWFsbG93LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZUFsbG93UG9saWN5LnNvdXJjZVF1ZXVlQXJuc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwicmVkcml2ZVBlcm1pc3Npb24gYnlRdWV1ZSBoYXMgJWQgc291cmNlUXVldWVBcm5zICgxIHRvIDEwIHJlcXVpcmVkKTsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIiVzLiBXaGVuIHlvdSBzcGVjaWZ5IHRoZSBieVF1ZXVlIHBlcm1pc3Npb24gdHlwZSwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGJldHdlZW4gMSBhbmQgMTAgc291cmNlIHF1ZXVlIEFSTnMuXFxcXFxcXCJcXFwiLCBbbiwgX3BmX3Nxc3JhcF9tc2ddKSxcXG5cXHRfcGZfc3FzcmFwX2ZpeCwgX3BmX3Nxc3JhcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cG9sIDo9IF9wZl9zcXNyYXBfcG9sKG5hbWUpXFxuXFx0b2JqZWN0LmdldChwb2wsIFxcXCJyZWRyaXZlUGVybWlzc2lvblxcXCIsIG51bGwpID09IFxcXCJieVF1ZXVlXFxcIlxcblxcdG4gOj0gX3BmX3Nxc3JhcF9jb3VudChvYmplY3QuZ2V0KHBvbCwgXFxcInNvdXJjZVF1ZXVlQXJuc1xcXCIsIG51bGwpKVxcblxcdF9wZl9zcXNyYXBfb3V0KG4pXFxufVxcblxcbl9wZl9zcXNyYXBfY291bnQodikgOj0gMCBpZiB2ID09IG51bGxcXG5cXG5fcGZfc3FzcmFwX2NvdW50KHYpIDo9IGNvdW50KHYpIGlmIGlzX2FycmF5KHYpXFxuXFxuX3BmX3Nxc3JhcF9vdXQobikgaWYgbiA8IDFcXG5cXG5fcGZfc3FzcmFwX291dChuKSBpZiBuID4gMTBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLWFsbG93LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZUFsbG93UG9saWN5LnNvdXJjZVF1ZXVlQXJuc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwicmVkcml2ZVBlcm1pc3Npb24gJXMgZG9lcyBub3QgdGFrZSBzb3VyY2VRdWV1ZUFybnM7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCIlcy4gWW91IGNhbiBzcGVjaWZ5IHNvdXJjZSBxdWV1ZSBBUk5zIG9ubHkgd2hlbiB0aGUgcGVybWlzc2lvbiB0eXBlIGlzIGJ5UXVldWUuXFxcXFxcXCJcXFwiLCBbcGVybSwgX3BmX3Nxc3JhcF9tc2ddKSxcXG5cXHRfcGZfc3FzcmFwX2ZpeCwgX3BmX3Nxc3JhcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cG9sIDo9IF9wZl9zcXNyYXBfcG9sKG5hbWUpXFxuXFx0cGVybSA6PSBvYmplY3QuZ2V0KHBvbCwgXFxcInJlZHJpdmVQZXJtaXNzaW9uXFxcIiwgbnVsbClcXG5cXHRwZXJtIGluIHtcXFwiYWxsb3dBbGxcXFwiLCBcXFwiZGVueUFsbFxcXCJ9XFxuXFx0b2JqZWN0LmdldChwb2wsIFxcXCJzb3VyY2VRdWV1ZUFybnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc3FzLXJlZHJpdmUtYXJuLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgZGVhZC1sZXR0ZXIgdGFyZ2V0IGFuZCBldmVyeSBSZWRyaXZlQWxsb3dQb2xpY3kgc291cmNlIHF1ZXVlIG11c3Qgc2l0IGluIHRoZSBkZXBsb3kgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3FzcnJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9TUVNEZXZlbG9wZXJHdWlkZS9zcXMtZGVhZC1sZXR0ZXItcXVldWVzLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc3JyX2ZpeCA6PSBcXFwiUmVmZXJlbmNlIHF1ZXVlcyBpbiB0aGUgc2FtZSByZWdpb24gKEZuOjpHZXRBdHQgUXVldWUuQXJuIG9mIHF1ZXVlcyBpbiB0aGlzIHN0YWNrKVxcXCJcXG5cXG4jIFJlZHJpdmVQb2xpY3kgYXJyaXZlcyBhcyBhIEpTT04gb2JqZWN0IG9yIGFzIGEgSlNPTiBzdHJpbmcgKGJvdGggYXJlIHZhbGlkIENsb3VkRm9ybWF0aW9uKS5cXG5fcGZfc3FzcnJfcG9sKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cG9sIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc3FzcnJfcG9sKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHBvbCA6PSBqc29uLnVubWFyc2hhbChyYXcpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc3JyX2FsbG93KG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cG9sIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlQWxsb3dQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zcXNycl9hbGxvdyhuYW1lKSA6PSBwb2wgaWYge1xcblxcdHJhdyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUmVkcml2ZUFsbG93UG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHBvbCA6PSBqc29uLnVubWFyc2hhbChyYXcpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc3JyX3JlZ2lvbihhcm4pIDo9IHBhcnRzWzNdIGlmIHtcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMl0gPT0gXFxcInNxc1xcXCJcXG59XFxuXFxuIyBSZWdpb24gY29tcGFyaXNvbiBuZWVkcyB0aGUgZGVwbG95IHJlZ2lvbiwgd2hpY2ggb25seSB0aGlzIHBhY2sgc2Vlc1xcbiMgKGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgaW4gZW5mb3JjZSBtb2RlOyB0aGUgcnVsZVxcbiMgc2tpcHMgd2l0aG91dCBpdCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcmVkcml2ZS1hcm4tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlUG9saWN5LmRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm4gaXMgaW4gJyVzJyBidXQgdGhlIHF1ZXVlIGRlcGxveXMgdG8gJyVzJzsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkRlYWQtbGV0dGVyIHRhcmdldCBtdXN0IGJlIGluIHNhbWUgcmVnaW9uIGFzIHRoZSBzb3VyY2UuXFxcXFxcXCJcXFwiLCBbciwgcmVnaW9uXSksXFxuXFx0X3BmX3Nxc3JyX2ZpeCwgX3BmX3Nxc3JyX3VybCkgaWYge1xcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChfcGZfc3FzcnJfcG9sKG5hbWUpLCBcXFwiZGVhZExldHRlclRhcmdldEFyblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRyIDo9IF9wZl9zcXNycl9yZWdpb24oYXJuKVxcblxcdHIgIT0gcmVnaW9uXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtYXJuLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5SZWRyaXZlQWxsb3dQb2xpY3kuc291cmNlUXVldWVBcm5zLiVkXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJzb3VyY2UgcXVldWUgJyVzJyBpcyBpbiAnJXMnIGJ1dCB0aGUgcXVldWUgZGVwbG95cyB0byAnJXMnOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiQWxsIHNvdXJjZSBxdWV1ZSBBUk5zIG11c3QgYmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSBjdXJyZW50IFNRUyBxdWV1ZS5cXFxcXFxcIlxcXCIsIFthcm4sIHIsIHJlZ2lvbl0pLFxcblxcdF9wZl9zcXNycl9maXgsIF9wZl9zcXNycl91cmwpIGlmIHtcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0YXJucyA6PSBvYmplY3QuZ2V0KF9wZl9zcXNycl9hbGxvdyhuYW1lKSwgXFxcInNvdXJjZVF1ZXVlQXJuc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoYXJucylcXG5cXHRzb21lIGksIGFybiBpbiBhcm5zXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRyIDo9IF9wZl9zcXNycl9yZWdpb24oYXJuKVxcblxcdHIgIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc3FzLXJlZHJpdmUtcG9saWN5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3FzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlZHJpdmVQb2xpY3kgbmVlZHMgZGVhZExldHRlclRhcmdldEFybiAoYW4gU1FTIHF1ZXVlIEFSTikgYW5kIG1heFJlY2VpdmVDb3VudCBpbiAxLi4xMDAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3FzcnBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc3JwX2ZpeCA6PSBcXFwiU2V0IGJvdGggZGVhZExldHRlclRhcmdldEFybiAoRm46OkdldEF0dCBRdWV1ZS5Bcm4pIGFuZCBtYXhSZWNlaXZlQ291bnQgYmV0d2VlbiAxIGFuZCAxMDAwXFxcIlxcblxcbiMgUmVkcml2ZVBvbGljeSBhcnJpdmVzIGFzIGEgSlNPTiBvYmplY3Qgb3IgYXMgYSBKU09OIHN0cmluZyAoYm90aCBhcmUgdmFsaWQgQ2xvdWRGb3JtYXRpb24pLlxcbl9wZl9zcXNycF9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zcXNycF9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5SZWRyaXZlUG9saWN5LiVzXFxcIiwgW2tleV0pLFxcblxcdHNwcmludGYoXFxcIlJlZHJpdmVQb2xpY3kgaGFzIG5vICVzOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiUmVkcml2ZSBwb2xpY3kgZG9lcyBub3QgY29udGFpbiBtYW5kYXRvcnkgYXR0cmlidXRlOiAlcy5cXFxcXFxcIlxcXCIsIFtrZXksIGtleV0pLFxcblxcdF9wZl9zcXNycF9maXgsIF9wZl9zcXNycF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cG9sIDo9IF9wZl9zcXNycF9wb2wobmFtZSlcXG5cXHRzb21lIGtleSBpbiBbXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBcXFwibWF4UmVjZWl2ZUNvdW50XFxcIl1cXG5cXHRvYmplY3QuZ2V0KHBvbCwga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zcXNycF9udW0odikgOj0gdiBpZiBpc19udW1iZXIodilcXG5cXG5fcGZfc3FzcnBfbnVtKHYpIDo9IHRvX251bWJlcih2KSBpZiB7XFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0cmVnZXgubWF0Y2goXFxcIl5bMC05XSskXFxcIiwgdilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcmVkcml2ZS1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVQb2xpY3kubWF4UmVjZWl2ZUNvdW50XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJtYXhSZWNlaXZlQ291bnQgJXYgaXMgb3V0c2lkZSAxLi4xMDAwOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCB2YWx1ZSBmb3IgbWF4UmVjZWl2ZUNvdW50OiAldiwgdmFsaWQgdmFsdWVzIGFyZSBmcm9tIDEgdG8gMTAwMCBib3RoIGluY2x1c2l2ZS5cXFxcXFxcIlxcXCIsIFtuLCBuXSksXFxuXFx0X3BmX3Nxc3JwX2ZpeCwgX3BmX3Nxc3JwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JwX3BvbChuYW1lKVxcblxcdG4gOj0gX3BmX3Nxc3JwX251bShvYmplY3QuZ2V0KHBvbCwgXFxcIm1heFJlY2VpdmVDb3VudFxcXCIsIG51bGwpKVxcblxcdF9wZl9zcXNycF9vdXQobilcXG59XFxuXFxuX3BmX3Nxc3JwX291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9zcXNycF9vdXQobikgaWYgbiA+IDEwMDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZVBvbGljeS5kZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuICclcycgaXMgbm90IGFuIFNRUyBxdWV1ZSBBUk47IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJPbmx5IFNRUyBxdWV1ZXMgYXJlIHZhbGlkIHJlc291cmNlcyBmb3IgZGVhZExldHRlclRhcmdldEFyblxcXFxcXFwiXFxcIiwgW2Fybl0pLFxcblxcdF9wZl9zcXNycF9maXgsIF9wZl9zcXNycF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cG9sIDo9IF9wZl9zcXNycF9wb2wobmFtZSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChwb2wsIFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdG5vdCBjb250YWlucyhhcm4sIFxcXCIke1xcXCIpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeYXJuOlteOl0rOnNxczpcXFwiLCBhcm4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc3FzLXNzZS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3FzTWFuYWdlZFNzZUVuYWJsZWQ6IHRydWUgYW5kIEttc01hc3RlcktleUlkIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKG9uZSBTU0UgdHlwZSBwZXIgcXVldWUpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNRUzo6UXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc3Fzc3NlX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU1NpbXBsZVF1ZXVlU2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVRdWV1ZS5odG1sXFxcIlxcblxcbl9wZl9zcXNzc2VfZml4IDo9IFxcXCJLZWVwIGVpdGhlciBTcXNNYW5hZ2VkU3NlRW5hYmxlZDogdHJ1ZSAoU1NFLVNRUykgb3IgS21zTWFzdGVyS2V5SWQgKFNTRS1LTVMpOyBTcXNNYW5hZ2VkU3NlRW5hYmxlZDogZmFsc2Ugd2l0aCBhIGtleSBpcyBmaW5lXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXNzZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkttc01hc3RlcktleUlkXFxcIixcXG5cXHRcXFwiU3FzTWFuYWdlZFNzZUVuYWJsZWQgaXMgdHJ1ZSBhbmQgS21zTWFzdGVyS2V5SWQgaXMgc2V0OyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiWW91IGNhbiB1c2Ugb25lIHR5cGUgb2Ygc2VydmVyLXNpZGUgZW5jcnlwdGlvbiAoU1NFKSBhdCBvbmUgdGltZS4gWW91IGNhbiBlaXRoZXIgZW5hYmxlIEtNUyBTU0Ugb3IgU1FTIFNTRS5cXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3Nxc3NzZV9maXgsIF9wZl9zcXNzc2VfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU3FzTWFuYWdlZFNzZUVuYWJsZWRcXFwiKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJLbXNNYXN0ZXJLZXlJZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLWJyYW5jaC1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUGFyYWxsZWwgQnJhbmNoZXMgaXMgYSBub24tZW1wdHkgYXJyYXkgYW5kIGV2ZXJ5IGJyYW5jaCAvIE1hcCBJdGVtUHJvY2Vzc29yIC8gSXRlcmF0b3IgY2FycmllcyBib3RoIFN0YXJ0QXQgYW5kIFN0YXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuYnJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL3N0YXRlLXBhcmFsbGVsLmh0bWxcXFwiXFxuXFxuX3BmX3NmbmJyX2ZpeCA6PSBcXFwiR2l2ZSBldmVyeSBicmFuY2ggYW5kIGl0ZW0gcHJvY2Vzc29yIGEgU3RhcnRBdCBhbmQgYSBTdGF0ZXMgb2JqZWN0OyBhIFBhcmFsbGVsIG5lZWRzIGF0IGxlYXN0IG9uZSBicmFuY2hcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWJyYW5jaC1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQnJhbmNoZXNcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIlBhcmFsbGVsIHN0YXRlICclcycgaGFzIGFuIGVtcHR5IEJyYW5jaGVzIGFycmF5OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiLCBbc25hbWVdKSxcXG5cXHRfcGZfc2ZuYnJfZml4LCBfcGZfc2ZuYnJfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdG9iamVjdC5nZXQoc3QsIFxcXCJUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIlBhcmFsbGVsXFxcIlxcblxcdGFyciA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQnJhbmNoZXNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRjb3VudChhcnIpID09IDBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWJyYW5jaC1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQnJhbmNoZXNbJWRdXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJQYXJhbGxlbCBzdGF0ZSAnJXMnIGJyYW5jaCAlZCBoYXMgbm8gJXM7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVzZSBmaWVsZHMgYXJlIHJlcXVpcmVkOiBbJXNdXFxcXFxcXCJcXFwiLCBbc25hbWUsIGksIHJlcSwgcmVxXSksXFxuXFx0X3BmX3NmbmJyX2ZpeCwgX3BmX3NmbmJyX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChzdCwgXFxcIkJyYW5jaGVzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdHNvbWUgaSwgYiBpbiBhcnJcXG5cXHRpc19vYmplY3QoYilcXG5cXHRzb21lIHJlcSBpbiBbXFxcIlN0YXJ0QXRcXFwiLCBcXFwiU3RhdGVzXFxcIl1cXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMoYiwgcmVxKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtYnJhbmNoLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBrZXldKSxcXG5cXHRzcHJpbnRmKFxcXCJNYXAgc3RhdGUgJyVzJyAlcyBoYXMgbm8gJXM7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVzZSBmaWVsZHMgYXJlIHJlcXVpcmVkOiBbJXNdXFxcXFxcXCJcXFwiLCBbc25hbWUsIGtleSwgcmVxLCByZXFdKSxcXG5cXHRfcGZfc2ZuYnJfZml4LCBfcGZfc2ZuYnJfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHNvbWUga2V5IGluIFtcXFwiSXRlbVByb2Nlc3NvclxcXCIsIFxcXCJJdGVyYXRvclxcXCJdXFxuXFx0cHJvYyA6PSBvYmplY3QuZ2V0KHN0LCBrZXksIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2MpXFxuXFx0c29tZSByZXEgaW4gW1xcXCJTdGFydEF0XFxcIiwgXFxcIlN0YXRlc1xcXCJdXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKHByb2MsIHJlcSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLWNob2ljZS1ydWxlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2hvaWNlIHJ1bGVzOiBDaG9pY2VzIGlzIG5vbi1lbXB0eSwgZWFjaCB0b3AtbGV2ZWwgcnVsZSBoYXMgTmV4dCBhbmQgZXhhY3RseSBvbmUgc2VsZWN0b3IgKFZhcmlhYmxlIC8gQW5kIC8gT3IgLyBOb3QgLyBDb25kaXRpb24pLCBhIFZhcmlhYmxlIHJ1bGUgaGFzIGV4YWN0bHkgb25lIGNvbXBhcmF0b3IsIGFuZCBOZXh0IG5ldmVyIHNpdHMgaW5zaWRlIEFuZC9Pci9Ob3RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbmNoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zdGF0ZS1jaG9pY2UuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuY2hfZml4IDo9IFxcXCJHaXZlIGV2ZXJ5IHRvcC1sZXZlbCBDaG9pY2UgcnVsZSBvbmUgY29tcGFyaXNvbiAob3Igb25lIEFuZC9Pci9Ob3QvQ29uZGl0aW9uKSBhbmQgYSBOZXh0OyBuZXN0ZWQgcnVsZXMgY2Fycnkgbm8gTmV4dFxcXCJcXG5cXG5fcGZfc2ZuY2hfY21wIDo9IHtcXFwiU3RyaW5nRXF1YWxzXFxcIiwgXFxcIlN0cmluZ0VxdWFsc1BhdGhcXFwiLCBcXFwiU3RyaW5nTGVzc1RoYW5cXFwiLCBcXFwiU3RyaW5nTGVzc1RoYW5QYXRoXFxcIiwgXFxcIlN0cmluZ0dyZWF0ZXJUaGFuXFxcIiwgXFxcIlN0cmluZ0dyZWF0ZXJUaGFuUGF0aFxcXCIsIFxcXCJTdHJpbmdMZXNzVGhhbkVxdWFsc1xcXCIsIFxcXCJTdHJpbmdMZXNzVGhhbkVxdWFsc1BhdGhcXFwiLCBcXFwiU3RyaW5nR3JlYXRlclRoYW5FcXVhbHNcXFwiLCBcXFwiU3RyaW5nR3JlYXRlclRoYW5FcXVhbHNQYXRoXFxcIiwgXFxcIlN0cmluZ01hdGNoZXNcXFwiLCBcXFwiTnVtZXJpY0VxdWFsc1xcXCIsIFxcXCJOdW1lcmljRXF1YWxzUGF0aFxcXCIsIFxcXCJOdW1lcmljTGVzc1RoYW5cXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuUGF0aFxcXCIsIFxcXCJOdW1lcmljR3JlYXRlclRoYW5cXFwiLCBcXFwiTnVtZXJpY0dyZWF0ZXJUaGFuUGF0aFxcXCIsIFxcXCJOdW1lcmljTGVzc1RoYW5FcXVhbHNcXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuRXF1YWxzUGF0aFxcXCIsIFxcXCJOdW1lcmljR3JlYXRlclRoYW5FcXVhbHNcXFwiLCBcXFwiTnVtZXJpY0dyZWF0ZXJUaGFuRXF1YWxzUGF0aFxcXCIsIFxcXCJCb29sZWFuRXF1YWxzXFxcIiwgXFxcIkJvb2xlYW5FcXVhbHNQYXRoXFxcIiwgXFxcIlRpbWVzdGFtcEVxdWFsc1xcXCIsIFxcXCJUaW1lc3RhbXBFcXVhbHNQYXRoXFxcIiwgXFxcIlRpbWVzdGFtcExlc3NUaGFuXFxcIiwgXFxcIlRpbWVzdGFtcExlc3NUaGFuUGF0aFxcXCIsIFxcXCJUaW1lc3RhbXBHcmVhdGVyVGhhblxcXCIsIFxcXCJUaW1lc3RhbXBHcmVhdGVyVGhhblBhdGhcXFwiLCBcXFwiVGltZXN0YW1wTGVzc1RoYW5FcXVhbHNcXFwiLCBcXFwiVGltZXN0YW1wTGVzc1RoYW5FcXVhbHNQYXRoXFxcIiwgXFxcIlRpbWVzdGFtcEdyZWF0ZXJUaGFuRXF1YWxzXFxcIiwgXFxcIlRpbWVzdGFtcEdyZWF0ZXJUaGFuRXF1YWxzUGF0aFxcXCIsIFxcXCJJc051bGxcXFwiLCBcXFwiSXNQcmVzZW50XFxcIiwgXFxcIklzTnVtZXJpY1xcXCIsIFxcXCJJc1N0cmluZ1xcXCIsIFxcXCJJc0Jvb2xlYW5cXFwiLCBcXFwiSXNUaW1lc3RhbXBcXFwifVxcblxcbl9wZl9zZm5jaF9zZWwgOj0ge1xcXCJBbmRcXFwiLCBcXFwiT3JcXFwiLCBcXFwiTm90XFxcIiwgXFxcIlZhcmlhYmxlXFxcIiwgXFxcIkNvbmRpdGlvblxcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWNob2ljZS1ydWxlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQ2hvaWNlc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgaGFzIGFuIGVtcHR5IENob2ljZXMgYXJyYXk7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBWYWx1ZSBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5jaF9maXgsIF9wZl9zZm5jaF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSA9PSBcXFwiQ2hvaWNlXFxcIlxcblxcdGFyciA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQ2hvaWNlc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdGNvdW50KGFycikgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtY2hvaWNlLXJ1bGVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5DaG9pY2VzWyVkXVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCBoYXMgbm8gTmV4dDsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZXNlIGZpZWxkcyBhcmUgcmVxdWlyZWQ6IFtOZXh0XVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBpXSksXFxuXFx0X3BmX3NmbmNoX2ZpeCwgX3BmX3NmbmNoX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBpLCBjXSBpbiBfcGZfc2ZubGliX2Nob2ljZVxcblxcdG5vdCBfcGZfc2ZubGliX2hhcyhjLCBcXFwiTmV4dFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1jaG9pY2UtcnVsZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNob2ljZXNbJWRdLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGksIG9wXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCBuZXN0cyBhIE5leHQgaW5zaWRlICVzOyBvbmx5IHRoZSB0b3AtbGV2ZWwgcnVsZSBtYXkgY2FycnkgTmV4dCwgYW5kIENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBGaWVsZCAnTmV4dCcgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIiwgW3NuYW1lLCBpLCBvcF0pLFxcblxcdF9wZl9zZm5jaF9maXgsIF9wZl9zZm5jaF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgaSwgY10gaW4gX3BmX3NmbmxpYl9jaG9pY2VcXG5cXHRzb21lIG9wIGluIFtcXFwiQW5kXFxcIiwgXFxcIk9yXFxcIl1cXG5cXHRhcnIgOj0gb2JqZWN0LmdldChjLCBvcCwgW10pXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdHNvbWUgc3ViIGluIGFyclxcblxcdGlzX29iamVjdChzdWIpXFxuXFx0X3BmX3NmbmxpYl9oYXMoc3ViLCBcXFwiTmV4dFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1jaG9pY2UtcnVsZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNob2ljZXNbJWRdLk5vdFxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCBuZXN0cyBhIE5leHQgaW5zaWRlIE5vdDsgb25seSB0aGUgdG9wLWxldmVsIHJ1bGUgbWF5IGNhcnJ5IE5leHQsIGFuZCBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogRmllbGQgJ05leHQnIGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsIFtzbmFtZSwgaV0pLFxcblxcdF9wZl9zZm5jaF9maXgsIF9wZl9zZm5jaF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgaSwgY10gaW4gX3BmX3NmbmxpYl9jaG9pY2VcXG5cXHRzdWIgOj0gb2JqZWN0LmdldChjLCBcXFwiTm90XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdF9wZl9zZm5saWJfaGFzKHN1YiwgXFxcIk5leHRcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtY2hvaWNlLXJ1bGVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5DaG9pY2VzWyVkXVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCBoYXMgJWQgY29tcGFyaXNvbiBvcGVyYXRvcnM7IGEgVmFyaWFibGUgcnVsZSB0YWtlcyBleGFjdGx5IG9uZSwgYW5kIENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6IFtTdHJpbmdFcXVhbHMsIC4uLl1cXFxcXFxcIlxcXCIsIFtzbmFtZSwgaSwgbl0pLFxcblxcdF9wZl9zZm5jaF9maXgsIF9wZl9zZm5jaF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgaSwgY10gaW4gX3BmX3NmbmxpYl9jaG9pY2VcXG5cXHRfcGZfc2ZubGliX2hhcyhjLCBcXFwiVmFyaWFibGVcXFwiKVxcblxcdG4gOj0gY291bnQoe2sgfCBzb21lIGssIF8gaW4gYzsgayBpbiBfcGZfc2ZuY2hfY21wfSlcXG5cXHRuICE9IDFcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWNob2ljZS1ydWxlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQ2hvaWNlc1slZF1cXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgaV0pLFxcblxcdHNwcmludGYoXFxcIkNob2ljZSBzdGF0ZSAnJXMnIHJ1bGUgJWQgbXVzdCBoYXZlIGV4YWN0bHkgb25lIG9mIEFuZCAvIE9yIC8gTm90IC8gVmFyaWFibGUgLyBDb25kaXRpb24gKGZvdW5kICVkKTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZSBvYmplY3QgbXVzdCBoYXZlIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzLCBbQW5kLCBPciwgTm90LCBWYXJpYWJsZSwgQ29uZGl0aW9uXVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBpLCBuXSksXFxuXFx0X3BmX3NmbmNoX2ZpeCwgX3BmX3NmbmNoX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBpLCBjXSBpbiBfcGZfc2ZubGliX2Nob2ljZVxcblxcdG4gOj0gY291bnQoe2sgfCBzb21lIGssIF8gaW4gYzsgayBpbiBfcGZfc2ZuY2hfc2VsfSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLWNyZWRlbnRpYWxzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFRhc2sgQ3JlZGVudGlhbHMgb2JqZWN0IG5lZWRzIFJvbGVBcm4sIGFuZCBDcmVkZW50aWFscyBpcyBub3QgYWNjZXB0ZWQgb24gYW4gQWN0aXZpdHkgcmVzb3VyY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbmNyZWRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL3N0YXRlLXRhc2suaHRtbFxcXCJcXG5cXG5fcGZfc2ZuY3JlZF9maXggOj0gXFxcIlNldCBDcmVkZW50aWFscy5Sb2xlQXJuIChvciBSb2xlQXJuLiQpOyBkcm9wIENyZWRlbnRpYWxzIGZyb20gYWN0aXZpdHkgdGFza3NcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWNyZWRlbnRpYWxzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5DcmVkZW50aWFsc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiVGFzayBzdGF0ZSAnJXMnIGhhcyBDcmVkZW50aWFscyB3aXRob3V0IFJvbGVBcm47IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgZmllbGQgJ1JvbGVBcm4nIGlzIHJlcXVpcmVkIGJ1dCB3YXMgbWlzc2luZ1xcXFxcXFwiXFxcIiwgW3NuYW1lXSksXFxuXFx0X3BmX3NmbmNyZWRfZml4LCBfcGZfc2ZuY3JlZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0Y3JlZCA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQ3JlZGVudGlhbHNcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChjcmVkKVxcblxcdG5vdCBfcGZfc2ZubGliX2hhcyhjcmVkLCBcXFwiUm9sZUFyblxcXCIpXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKGNyZWQsIFxcXCJSb2xlQXJuLiRcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtY3JlZGVudGlhbHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNyZWRlbnRpYWxzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSldKSxcXG5cXHRzcHJpbnRmKFxcXCJUYXNrIHN0YXRlICclcycgc2V0cyBDcmVkZW50aWFscyBvbiBhbiBBY3Rpdml0eSByZXNvdXJjZTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZSBmaWVsZCAnQ3JlZGVudGlhbHMnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGFjdGl2aXRpZXNcXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5jcmVkX2ZpeCwgX3BmX3NmbmNyZWRfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdF9wZl9zZm5saWJfaGFzKHN0LCBcXFwiQ3JlZGVudGlhbHNcXFwiKVxcblxcdHJlcyA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiUmVzb3VyY2VcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyZXMpXFxuXFx0cmVnZXgubWF0Y2goXFxcIl5hcm46W146XSs6c3RhdGVzOlteOl0rOlteOl0rOmFjdGl2aXR5OlxcXCIsIHJlcylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLWR1cGxpY2F0ZS1zdGF0ZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBU0wgc3RhdGUgbmFtZXMgbXVzdCBiZSB1bmlxdWUgYWNyb3NzIHRoZSB3aG9sZSBzdGF0ZSBtYWNoaW5lLCBpbmNsdWRpbmcgUGFyYWxsZWwgYnJhbmNoZXMgYW5kIE1hcCBpdGVtIHByb2Nlc3NvcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbmR1cF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvc3RhdGUtcGFyYWxsZWwuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuZHVwX2ZpeCA6PSBcXFwiUmVuYW1lIG9uZSBvZiB0aGUgc3RhdGVzOyBuYW1lcyBhcmUgZ2xvYmFsIHRvIHRoZSBzdGF0ZSBtYWNoaW5lLCBub3QgdG8gdGhlIGJyYW5jaFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtZHVwbGljYXRlLXN0YXRlLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdF9wZl9zZm5saWJfcGF0aChuYW1lLCBwMiwgc25hbWUpLFxcblxcdHNwcmludGYoXFxcInN0YXRlIG5hbWUgJyVzJyBpcyBkZWZpbmVkIGluIGJvdGggJXMgYW5kICVzOyBuYW1lcyBtdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgdGhlIHdob2xlIHN0YXRlIG1hY2hpbmUsIGFuZCBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIkRVUExJQ0FURV9TVEFURV9OQU1FOiBEdXBsaWNhdGUgU3RhdGUgbmFtZTogJXNcXFxcXFxcIlxcXCIsIFtzbmFtZSwgcDEsIHAyLCBzbmFtZV0pLFxcblxcdF9wZl9zZm5kdXBfZml4LCBfcGZfc2ZuZHVwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAxLCBfLCBzbmFtZSwgX10gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIFtuMiwgcDIsIF8sIHNuMiwgX10gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRuMiA9PSBuYW1lXFxuXFx0c24yID09IHNuYW1lXFxuXFx0cDEgPCBwMlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtaW50ZWdyYXRpb24tcGFyYW1ldGVyc1wiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gYXJuOjxwYXJ0aXRpb24+OnN0YXRlczo6OiBpbnRlZ3JhdGlvbiBUYXNrIG5lZWRzIFBhcmFtZXRlcnMgKEpTT05QYXRoKSBvciBBcmd1bWVudHMgKEpTT05hdGEpLCBhbmQgdGhlIGNvbW1vbiBpbnRlZ3JhdGlvbnMgbmVlZCB0aGVpciByZXF1aXJlZCBmaWVsZHMgKGxhbWJkYTppbnZva2UgRnVuY3Rpb25OYW1lLCBzcXM6c2VuZE1lc3NhZ2UgUXVldWVVcmwrTWVzc2FnZUJvZHksIHNuczpwdWJsaXNoIE1lc3NhZ2UsIGR5bmFtb2RiOnB1dEl0ZW0gVGFibGVOYW1lK0l0ZW0sIGR5bmFtb2RiOmdldEl0ZW0gVGFibGVOYW1lK0tleSwgc3RhdGVzOnN0YXJ0RXhlY3V0aW9uIFN0YXRlTWFjaGluZUFybiwgZXZlbnRzOnB1dEV2ZW50cyBFbnRyaWVzLCBlY3M6cnVuVGFzayBUYXNrRGVmaW5pdGlvbiwgZ2x1ZTpzdGFydEpvYlJ1biBKb2JOYW1lKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuaXBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2Nvbm5lY3QtdG8tcmVzb3VyY2UuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuaXBfZml4IDo9IFxcXCJBZGQgYSBQYXJhbWV0ZXJzIChvciBBcmd1bWVudHMpIG9iamVjdCB3aXRoIHRoZSBmaWVsZHMgdGhlIGludGVncmF0aW9uIHJlcXVpcmVzXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1pbnRlZ3JhdGlvbi1wYXJhbWV0ZXJzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLFxcblxcdHNwcmludGYoXFxcIlRhc2sgc3RhdGUgJyVzJyBjYWxscyB0aGUgJXM6JXMgaW50ZWdyYXRpb24gd2l0aG91dCBhIFBhcmFtZXRlcnMgb2JqZWN0OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogUGFyYW1ldGVycyBmaWVsZCBpcyByZXF1aXJlZCBmb3IgcmVzb3VyY2UgQVJOOiBhcm46YXdzOnN0YXRlczo6OiVzOiVzXFxcXFxcXCJcXFwiLCBbc25hbWUsIHN2YywgYXBpLCBzdmMsIGFwaV0pLFxcblxcdF9wZl9zZm5pcF9maXgsIF9wZl9zZm5pcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3QsIHN2YywgYXBpXSBpbiBfcGZfc2ZubGliX2ludGVncmF0aW9uXFxuXFx0X3BmX3NmbmxpYl9xbChuYW1lLCBzdCkgPT0gXFxcIkpTT05QYXRoXFxcIlxcblxcdG5vdCBfcGZfc2ZubGliX2hhcyhzdCwgXFxcIlBhcmFtZXRlcnNcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtaW50ZWdyYXRpb24tcGFyYW1ldGVyc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0X3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSxcXG5cXHRzcHJpbnRmKFxcXCJKU09OYXRhIFRhc2sgc3RhdGUgJyVzJyBjYWxscyB0aGUgJXM6JXMgaW50ZWdyYXRpb24gd2l0aG91dCBhbiBBcmd1bWVudHMgb2JqZWN0OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogQXJndW1lbnRzIGZpZWxkIGlzIHJlcXVpcmVkIGZvciByZXNvdXJjZSBBUk46IGFybjphd3M6c3RhdGVzOjo6JXM6JXNcXFxcXFxcIlxcXCIsIFtzbmFtZSwgc3ZjLCBhcGksIHN2YywgYXBpXSksXFxuXFx0X3BmX3NmbmlwX2ZpeCwgX3BmX3NmbmlwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdCwgc3ZjLCBhcGldIGluIF9wZl9zZm5saWJfaW50ZWdyYXRpb25cXG5cXHRfcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA9PSBcXFwiSlNPTmF0YVxcXCJcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMoc3QsIFxcXCJBcmd1bWVudHNcXFwiKVxcbn1cXG5cXG4jIFJlcXVpcmVkIHJlcXVlc3QgZmllbGRzLCBtZWFzdXJlZCB3aXRoIFZhbGlkYXRlU3RhdGVNYWNoaW5lRGVmaW5pdGlvbiBvblxcbiMgMjAyNi0wOS0wNSAoYSBcXFwiLiRcXFwiIHN1ZmZpeGVkIGtleSBjb3VudHMgYXMgcHJlc2VudCkuXFxuX3BmX3NmbmlwX3JlcSBjb250YWlucyBbXFxcImxhbWJkYVxcXCIsIFxcXCJpbnZva2VcXFwiLCBcXFwiRnVuY3Rpb25OYW1lXFxcIl1cXG5cXG5fcGZfc2ZuaXBfcmVxIGNvbnRhaW5zIFtcXFwic3FzXFxcIiwgXFxcInNlbmRNZXNzYWdlXFxcIiwgXFxcIlF1ZXVlVXJsXFxcIl1cXG5cXG5fcGZfc2ZuaXBfcmVxIGNvbnRhaW5zIFtcXFwic3FzXFxcIiwgXFxcInNlbmRNZXNzYWdlXFxcIiwgXFxcIk1lc3NhZ2VCb2R5XFxcIl1cXG5cXG5fcGZfc2ZuaXBfcmVxIGNvbnRhaW5zIFtcXFwic25zXFxcIiwgXFxcInB1Ymxpc2hcXFwiLCBcXFwiTWVzc2FnZVxcXCJdXFxuXFxuX3BmX3NmbmlwX3JlcSBjb250YWlucyBbXFxcImR5bmFtb2RiXFxcIiwgXFxcInB1dEl0ZW1cXFwiLCBcXFwiVGFibGVOYW1lXFxcIl1cXG5cXG5fcGZfc2ZuaXBfcmVxIGNvbnRhaW5zIFtcXFwiZHluYW1vZGJcXFwiLCBcXFwicHV0SXRlbVxcXCIsIFxcXCJJdGVtXFxcIl1cXG5cXG5fcGZfc2ZuaXBfcmVxIGNvbnRhaW5zIFtcXFwiZHluYW1vZGJcXFwiLCBcXFwiZ2V0SXRlbVxcXCIsIFxcXCJUYWJsZU5hbWVcXFwiXVxcblxcbl9wZl9zZm5pcF9yZXEgY29udGFpbnMgW1xcXCJkeW5hbW9kYlxcXCIsIFxcXCJnZXRJdGVtXFxcIiwgXFxcIktleVxcXCJdXFxuXFxuX3BmX3NmbmlwX3JlcSBjb250YWlucyBbXFxcInN0YXRlc1xcXCIsIFxcXCJzdGFydEV4ZWN1dGlvblxcXCIsIFxcXCJTdGF0ZU1hY2hpbmVBcm5cXFwiXVxcblxcbl9wZl9zZm5pcF9yZXEgY29udGFpbnMgW1xcXCJldmVudHNcXFwiLCBcXFwicHV0RXZlbnRzXFxcIiwgXFxcIkVudHJpZXNcXFwiXVxcblxcbl9wZl9zZm5pcF9yZXEgY29udGFpbnMgW1xcXCJlY3NcXFwiLCBcXFwicnVuVGFza1xcXCIsIFxcXCJUYXNrRGVmaW5pdGlvblxcXCJdXFxuXFxuX3BmX3NmbmlwX3JlcSBjb250YWlucyBbXFxcImdsdWVcXFwiLCBcXFwic3RhcnRKb2JSdW5cXFwiLCBcXFwiSm9iTmFtZVxcXCJdXFxuXFxuX3BmX3NmbmlwX3BhcmFtcyhzdCkgOj0gcHJtIGlmIHtcXG5cXHRwcm0gOj0gb2JqZWN0LmdldChzdCwgXFxcIlBhcmFtZXRlcnNcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm0pXFxufVxcblxcbl9wZl9zZm5pcF9wYXJhbXMoc3QpIDo9IHBybSBpZiB7XFxuXFx0bm90IGlzX29iamVjdChvYmplY3QuZ2V0KHN0LCBcXFwiUGFyYW1ldGVyc1xcXCIsIG51bGwpKVxcblxcdHBybSA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQXJndW1lbnRzXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocHJtKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtaW50ZWdyYXRpb24tcGFyYW1ldGVyc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0X3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSxcXG5cXHRzcHJpbnRmKFxcXCJUYXNrIHN0YXRlICclcycgY2FsbHMgJXM6JXMgd2l0aG91dCB0aGUgcmVxdWlyZWQgZmllbGQgJyVzJzsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZSBmaWVsZCAnJXMnIGlzIHJlcXVpcmVkIGJ1dCB3YXMgbWlzc2luZ1xcXFxcXFwiXFxcIiwgW3NuYW1lLCBzdmMsIGJhc2UsIGZpZWxkLCBmaWVsZF0pLFxcblxcdF9wZl9zZm5pcF9maXgsIF9wZl9zZm5pcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3QsIHN2YywgYXBpXSBpbiBfcGZfc2ZubGliX2ludGVncmF0aW9uXFxuXFx0YmFzZSA6PSByZWdleC5yZXBsYWNlKGFwaSwgXFxcIlsuXShzeW5jfHdhaXRGb3JUYXNrVG9rZW4pKDoyKT8kXFxcIiwgXFxcIlxcXCIpXFxuXFx0c29tZSBbczIsIGIyLCBmaWVsZF0gaW4gX3BmX3NmbmlwX3JlcVxcblxcdHMyID09IHN2Y1xcblxcdGIyID09IGJhc2VcXG5cXHRwcm0gOj0gX3BmX3NmbmlwX3BhcmFtcyhzdClcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMocHJtLCBmaWVsZClcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMocHJtLCBzcHJpbnRmKFxcXCIlcy4kXFxcIiwgW2ZpZWxkXSkpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1qc29ucGF0aC1zeW50YXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkpTT05QYXRoIGZpZWxkcyBzdGFydCB3aXRoICQgKElucHV0UGF0aCwgT3V0cHV0UGF0aCwgKlBhdGgsIENob2ljZSBWYXJpYWJsZSksIFJlc3VsdFBhdGgvSXRlbXNQYXRoIGFyZSBSZWZlcmVuY2UgUGF0aHMgKG5vICosIC4uLCA/LCBAKSwgdmFsdWVzIG9mIFxcXCIuJFxcXCIga2V5cyBhcmUgYSBwYXRoIG9yIGEgU3RhdGVzLiogaW50cmluc2ljLCBhbmQgQXNzaWduIHZhcmlhYmxlIG5hbWVzIGFyZSBhbHBoYW51bWVyaWMgYW5kIG5vdCB0aGUgcmVzZXJ2ZWQgXFxcInN0YXRlc1xcXCJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbmpwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9pbnB1dC1vdXRwdXQtcGF0aHMuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuanBfZml4IDo9IFxcXCJXcml0ZSBwYXRocyBhcyAkLmZpZWxkIChSZWZlcmVuY2UgUGF0aHMgZm9yIFJlc3VsdFBhdGgvSXRlbXNQYXRoKSwgXFxcXFxcXCIuJFxcXFxcXFwiIHZhbHVlcyBhcyAkLnBhdGggb3IgU3RhdGVzLkZ1bmMoLi4uKSwgYW5kIHZhcmlhYmxlIG5hbWVzIGFzIGxldHRlcnMvZGlnaXRzXFxcIlxcblxcbl9wZl9zZm5qcF9wYXRoZmllbGRzIDo9IHtcXFwiSW5wdXRQYXRoXFxcIiwgXFxcIk91dHB1dFBhdGhcXFwiLCBcXFwiUmVzdWx0UGF0aFxcXCIsIFxcXCJJdGVtc1BhdGhcXFwiLCBcXFwiVGltZW91dFNlY29uZHNQYXRoXFxcIiwgXFxcIkhlYXJ0YmVhdFNlY29uZHNQYXRoXFxcIiwgXFxcIlNlY29uZHNQYXRoXFxcIiwgXFxcIlRpbWVzdGFtcFBhdGhcXFwiLCBcXFwiTWF4Q29uY3VycmVuY3lQYXRoXFxcIiwgXFxcIlRvbGVyYXRlZEZhaWx1cmVQZXJjZW50YWdlUGF0aFxcXCIsIFxcXCJUb2xlcmF0ZWRGYWlsdXJlQ291bnRQYXRoXFxcIiwgXFxcIkVycm9yUGF0aFxcXCIsIFxcXCJDYXVzZVBhdGhcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1qc29ucGF0aC1zeW50YXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnICVzICclcycgaXMgbm90IGEgSlNPTlBhdGggKG11c3Qgc3RhcnQgd2l0aCAkKTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFZhbHVlIG11c3QgYmUgYSB2YWxpZCBKU09OUGF0aC5cXFxcXFxcIlxcXCIsIFtzbmFtZSwgZiwgdl0pLFxcblxcdF9wZl9zZm5qcF9maXgsIF9wZl9zZm5qcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0c29tZSBmIGluIF9wZl9zZm5qcF9wYXRoZmllbGRzXFxuXFx0diA6PSBvYmplY3QuZ2V0KHN0LCBmLCBudWxsKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCBzdGFydHN3aXRoKHYsIFxcXCIkXFxcIilcXG5cXHRub3QgY29udGFpbnModiwgXFxcIiR7XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWpzb25wYXRoLXN5bnRheFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQ2hvaWNlc1slZF0uJXNcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgaSwga10pLFxcblxcdHNwcmludGYoXFxcIkNob2ljZSBzdGF0ZSAnJXMnIHJ1bGUgJWQgJXMgJyVzJyBpcyBub3QgYSBSZWZlcmVuY2UgUGF0aCAobXVzdCBzdGFydCB3aXRoICQpOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgaXMgbm90IGEgUmVmZXJlbmNlIFBhdGg6IFJlZmVyZW5jZSBwYXRoIGRpZG4ndCBzdGFydCB3aXRoICckJ1xcXFxcXFwiXFxcIiwgW3NuYW1lLCBpLCBrLCB2XSksXFxuXFx0X3BmX3NmbmpwX2ZpeCwgX3BmX3NmbmpwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBpLCBjXSBpbiBfcGZfc2ZubGliX2Nob2ljZVxcblxcdHNvbWUgaywgdiBpbiBjXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0ayBpbiB7XFxcIlZhcmlhYmxlXFxcIiwgXFxcIlN0cmluZ0VxdWFsc1BhdGhcXFwiLCBcXFwiU3RyaW5nTGVzc1RoYW5QYXRoXFxcIiwgXFxcIlN0cmluZ0dyZWF0ZXJUaGFuUGF0aFxcXCIsIFxcXCJTdHJpbmdMZXNzVGhhbkVxdWFsc1BhdGhcXFwiLCBcXFwiU3RyaW5nR3JlYXRlclRoYW5FcXVhbHNQYXRoXFxcIiwgXFxcIk51bWVyaWNFcXVhbHNQYXRoXFxcIiwgXFxcIk51bWVyaWNMZXNzVGhhblBhdGhcXFwiLCBcXFwiTnVtZXJpY0dyZWF0ZXJUaGFuUGF0aFxcXCIsIFxcXCJOdW1lcmljTGVzc1RoYW5FcXVhbHNQYXRoXFxcIiwgXFxcIk51bWVyaWNHcmVhdGVyVGhhbkVxdWFsc1BhdGhcXFwiLCBcXFwiQm9vbGVhbkVxdWFsc1BhdGhcXFwiLCBcXFwiVGltZXN0YW1wRXF1YWxzUGF0aFxcXCIsIFxcXCJUaW1lc3RhbXBMZXNzVGhhblBhdGhcXFwiLCBcXFwiVGltZXN0YW1wR3JlYXRlclRoYW5QYXRoXFxcIiwgXFxcIlRpbWVzdGFtcExlc3NUaGFuRXF1YWxzUGF0aFxcXCIsIFxcXCJUaW1lc3RhbXBHcmVhdGVyVGhhbkVxdWFsc1BhdGhcXFwifVxcblxcdG5vdCBzdGFydHN3aXRoKHYsIFxcXCIkXFxcIilcXG59XFxuXFxuX3BmX3NmbmpwX3JlZnBhdGggY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0c29tZSBmIGluIFtcXFwiUmVzdWx0UGF0aFxcXCIsIFxcXCJJdGVtc1BhdGhcXFwiXVxcblxcdHYgOj0gb2JqZWN0LmdldChzdCwgZiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKVxcbn1cXG5cXG5fcGZfc2ZuanBfcmVmcGF0aCBjb250YWlucyBbbmFtZSwgcGF0aCwgdl0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChzdCwgXFxcIkNhdGNoXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdHNvbWUgaSwgYyBpbiBhcnJcXG5cXHRpc19vYmplY3QoYylcXG5cXHR2IDo9IG9iamVjdC5nZXQoYywgXFxcIlJlc3VsdFBhdGhcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiJXMuQ2F0Y2hbJWRdLlJlc3VsdFBhdGhcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgaV0pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1qc29ucGF0aC1zeW50YXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiJyVzJyBpcyBub3QgYSBSZWZlcmVuY2UgUGF0aDogd2lsZGNhcmRzLCBmaWx0ZXJzIGFuZCBkZWVwIHNjYW5zICgqIC4uID8gQCkgYXJlIG5vdCBhbGxvd2VkIHdoZXJlIGEgc2luZ2xlIEpTT04gbm9kZSBpcyBhZGRyZXNzZWQ7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBWYWx1ZSBpcyBub3QgYSBSZWZlcmVuY2UgUGF0aFxcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRfcGZfc2ZuanBfZml4LCBfcGZfc2ZuanBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgdl0gaW4gX3BmX3NmbmpwX3JlZnBhdGhcXG5cXHRyZWdleC5tYXRjaChcXFwiWyo/QF18Wy5dWy5dXFxcIiwgdilcXG59XFxuXFxuIyBcXFwiLiRcXFwiIGtleXMgb2YgcGF5bG9hZCB0ZW1wbGF0ZXMgKFBhcmFtZXRlcnMgLyBSZXN1bHRTZWxlY3RvciAvIEl0ZW1TZWxlY3RvciksXFxuIyB0d28gbGV2ZWxzIGRlZXAuXFxuX3BmX3NmbmpwX2RvbGxhciBjb250YWlucyBbbmFtZSwgcGF0aCwgdl0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIGYgaW4gW1xcXCJQYXJhbWV0ZXJzXFxcIiwgXFxcIlJlc3VsdFNlbGVjdG9yXFxcIiwgXFxcIkl0ZW1TZWxlY3RvclxcXCJdXFxuXFx0byA6PSBvYmplY3QuZ2V0KHN0LCBmLCBudWxsKVxcblxcdGlzX29iamVjdChvKVxcblxcdHNvbWUgaywgdiBpbiBvXFxuXFx0ZW5kc3dpdGgoaywgXFxcIi4kXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGYsIGtdKVxcbn1cXG5cXG5fcGZfc2ZuanBfZG9sbGFyIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCB2XSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHNvbWUgZiBpbiBbXFxcIlBhcmFtZXRlcnNcXFwiLCBcXFwiUmVzdWx0U2VsZWN0b3JcXFwiLCBcXFwiSXRlbVNlbGVjdG9yXFxcIl1cXG5cXHRvIDo9IG9iamVjdC5nZXQoc3QsIGYsIG51bGwpXFxuXFx0aXNfb2JqZWN0KG8pXFxuXFx0c29tZSBrLCBvMiBpbiBvXFxuXFx0aXNfb2JqZWN0KG8yKVxcblxcdHNvbWUgazIsIHYgaW4gbzJcXG5cXHRlbmRzd2l0aChrMiwgXFxcIi4kXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLiVzLiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGYsIGssIGsyXSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWpzb25wYXRoLXN5bnRheFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0cGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJ2YWx1ZSAnJXMnIG9mIGEgXFxcXFxcXCIuJFxcXFxcXFwiIGtleSBtdXN0IGJlIGEgSlNPTlBhdGggKCQuLi4pIG9yIGFuIGludHJpbnNpYyBmdW5jdGlvbiAoU3RhdGVzLi4uLik7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgdmFsdWUgZm9yIHRoZSBmaWVsZCAnLi4uJCcgbXVzdCBiZSBhIHZhbGlkIEpTT05QYXRoIG9yIGEgdmFsaWQgaW50cmluc2ljIGZ1bmN0aW9uIGNhbGxcXFxcXFxcIlxcXCIsIFt2XSksXFxuXFx0X3BmX3NmbmpwX2ZpeCwgX3BmX3NmbmpwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHZdIGluIF9wZl9zZm5qcF9kb2xsYXJcXG5cXHRub3Qgc3RhcnRzd2l0aCh2LCBcXFwiJFxcXCIpXFxuXFx0bm90IHN0YXJ0c3dpdGgodiwgXFxcIlN0YXRlcy5cXFwiKVxcblxcdG5vdCBjb250YWlucyh2LCBcXFwiJHtcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtanNvbnBhdGgtc3ludGF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5Bc3NpZ24uJXNcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwga10pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgYXNzaWducyB0aGUgcmVzZXJ2ZWQgdmFyaWFibGUgbmFtZSAnc3RhdGVzJzsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJSRVNFUlZFRF9WQVJJQUJMRV9OQU1FOiBDYW5ub3QgYXNzaWduIHRvIHJlc2VydmVkIHZhcmlhYmxlICckc3RhdGVzJy5cXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5qcF9maXgsIF9wZl9zZm5qcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0YSA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQXNzaWduXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoYSlcXG5cXHRzb21lIGssIF8gaW4gYVxcblxcdGsgPT0gXFxcInN0YXRlc1xcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLWpzb25wYXRoLXN5bnRheFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQXNzaWduLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGtdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIGFzc2lnbnMgdmFyaWFibGUgJyVzJzsgdmFyaWFibGUgbmFtZXMgYXJlIGxldHRlcnMgYW5kIGRpZ2l0cyBzdGFydGluZyB3aXRoIGEgbGV0dGVyLCBhbmQgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJJTlZBTElEX1ZBUklBQkxFX05BTUU6IEludmFsaWQgdmFyaWFibGUgbmFtZSAnJXMnOiB0aGUgdmFyaWFibGUgbmFtZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuXFxcXFxcXCJcXFwiLCBbc25hbWUsIGssIGtdKSxcXG5cXHRfcGZfc2ZuanBfZml4LCBfcGZfc2ZuanBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdGEgOj0gb2JqZWN0LmdldChzdCwgXFxcIkFzc2lnblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGEpXFxuXFx0c29tZSBrLCBfIGluIGFcXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5bQS1aYS16XVtBLVphLXowLTlfXSokXFxcIiwgaylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLW1hcC1kaXN0cmlidXRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTWFwIFByb2Nlc3NvckNvbmZpZyBhbmQgSXRlbVJlYWRlciBzaGFwZTogRElTVFJJQlVURUQgcmVxdWlyZXMgRXhlY3V0aW9uVHlwZSAoU1RBTkRBUkR8RVhQUkVTUykgYW5kIElOTElORSBmb3JiaWRzIGl0OyBJdGVtUmVhZGVyLlJlc291cmNlIGlzIHMzOmdldE9iamVjdCBvciBzMzpsaXN0T2JqZWN0c1YyOyBDU1YgaW5wdXQgbmVlZHMgQ1NWSGVhZGVyTG9jYXRpb24gKEdJVkVOIG5lZWRzIENTVkhlYWRlcnMpIGFuZCBKU09OIGlucHV0IGZvcmJpZHMgaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nmbm1kX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zdGF0ZS1tYXAtZGlzdHJpYnV0ZWQuaHRtbFxcXCJcXG5cXG5fcGZfc2ZubWRfZml4IDo9IFxcXCJTZXQgUHJvY2Vzc29yQ29uZmlnLkV4ZWN1dGlvblR5cGUgZm9yIERJU1RSSUJVVEVEIG1vZGUgb25seSwgYW5kIHNoYXBlIEl0ZW1SZWFkZXIgcGVyIHRoZSBEaXN0cmlidXRlZCBNYXAgZG9jdW1lbnRhdGlvblxcXCJcXG5cXG5fcGZfc2ZubWRfY2ZnIGNvbnRhaW5zIFtuYW1lLCBwLCBzbmFtZSwga2V5LCBjZmddIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0c29tZSBrZXkgaW4gW1xcXCJJdGVtUHJvY2Vzc29yXFxcIiwgXFxcIkl0ZXJhdG9yXFxcIl1cXG5cXHRwcm9jIDo9IG9iamVjdC5nZXQoc3QsIGtleSwgbnVsbClcXG5cXHRpc19vYmplY3QocHJvYylcXG5cXHRjZmcgOj0gb2JqZWN0LmdldChwcm9jLCBcXFwiUHJvY2Vzc29yQ29uZmlnXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoY2ZnKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbWFwLWRpc3RyaWJ1dGVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lcy5Qcm9jZXNzb3JDb25maWdcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwiTWFwIHN0YXRlICclcycgcnVucyBpbiBESVNUUklCVVRFRCBtb2RlIHdpdGhvdXQgRXhlY3V0aW9uVHlwZTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZXNlIGZpZWxkcyBhcmUgcmVxdWlyZWQ6IFtFeGVjdXRpb25UeXBlXVxcXFxcXFwiXFxcIiwgW3NuYW1lXSksXFxuXFx0X3BmX3Nmbm1kX2ZpeCwgX3BmX3Nmbm1kX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHNuYW1lLCBrZXksIGNmZ10gaW4gX3BmX3Nmbm1kX2NmZ1xcblxcdG9iamVjdC5nZXQoY2ZnLCBcXFwiTW9kZVxcXCIsIG51bGwpID09IFxcXCJESVNUUklCVVRFRFxcXCJcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMoY2ZnLCBcXFwiRXhlY3V0aW9uVHlwZVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1tYXAtZGlzdHJpYnV0ZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzLlByb2Nlc3NvckNvbmZpZy5FeGVjdXRpb25UeXBlXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGtleV0pLFxcblxcdHNwcmludGYoXFxcIk1hcCBzdGF0ZSAnJXMnIEV4ZWN1dGlvblR5cGUgJyVzJyBpcyBub3QgU1RBTkRBUkQgb3IgRVhQUkVTUzsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFZhbHVlIHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogW1NUQU5EQVJELCBFWFBSRVNTXVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBldF0pLFxcblxcdF9wZl9zZm5tZF9maXgsIF9wZl9zZm5tZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzbmFtZSwga2V5LCBjZmddIGluIF9wZl9zZm5tZF9jZmdcXG5cXHRldCA6PSBvYmplY3QuZ2V0KGNmZywgXFxcIkV4ZWN1dGlvblR5cGVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhldClcXG5cXHRub3QgZXQgaW4ge1xcXCJTVEFOREFSRFxcXCIsIFxcXCJFWFBSRVNTXFxcIn1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1hcC1kaXN0cmlidXRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXMuUHJvY2Vzc29yQ29uZmlnLkV4ZWN1dGlvblR5cGVcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwiTWFwIHN0YXRlICclcycgc2V0cyBFeGVjdXRpb25UeXBlIGluIElOTElORSBtb2RlOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogRmllbGQgJ0V4ZWN1dGlvblR5cGUnIGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5tZF9maXgsIF9wZl9zZm5tZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzbmFtZSwga2V5LCBjZmddIGluIF9wZl9zZm5tZF9jZmdcXG5cXHRvYmplY3QuZ2V0KGNmZywgXFxcIk1vZGVcXFwiLCBudWxsKSA9PSBcXFwiSU5MSU5FXFxcIlxcblxcdF9wZl9zZm5saWJfaGFzKGNmZywgXFxcIkV4ZWN1dGlvblR5cGVcXFwiKVxcbn1cXG5cXG5fcGZfc2ZubWRfcmVhZGVyIGNvbnRhaW5zIFtuYW1lLCBwLCBzbmFtZSwgaXJdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSA9PSBcXFwiTWFwXFxcIlxcblxcdGlyIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJJdGVtUmVhZGVyXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoaXIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1tYXAtZGlzdHJpYnV0ZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkl0ZW1SZWFkZXIuUmVzb3VyY2VcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIk1hcCBzdGF0ZSAnJXMnIEl0ZW1SZWFkZXIuUmVzb3VyY2UgJyVzJyBpcyBub3QgczM6Z2V0T2JqZWN0IG9yIHMzOmxpc3RPYmplY3RzVjI7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgZmllbGQgJ1Jlc291cmNlJyBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGFsbG93ZWQgdmFsdWVzXFxcXFxcXCJcXFwiLCBbc25hbWUsIHJlc10pLFxcblxcdF9wZl9zZm5tZF9maXgsIF9wZl9zZm5tZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzbmFtZSwgaXJdIGluIF9wZl9zZm5tZF9yZWFkZXJcXG5cXHRyZXMgOj0gb2JqZWN0LmdldChpciwgXFxcIlJlc291cmNlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmVzKVxcblxcdG5vdCBjb250YWlucyhyZXMsIFxcXCIke1xcXCIpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeYXJuOlteOl0rOnN0YXRlczo6OnMzOihnZXRPYmplY3R8bGlzdE9iamVjdHNWMikkXFxcIiwgcmVzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbWFwLWRpc3RyaWJ1dGVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5JdGVtUmVhZGVyLlJlYWRlckNvbmZpZ1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiTWFwIHN0YXRlICclcycgcmVhZHMgQ1NWIHdpdGhvdXQgQ1NWSGVhZGVyTG9jYXRpb247IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgZmllbGQgJ0NTVkhlYWRlckxvY2F0aW9uJyBpcyByZXF1aXJlZFxcXFxcXFwiXFxcIiwgW3NuYW1lXSksXFxuXFx0X3BmX3Nmbm1kX2ZpeCwgX3BmX3Nmbm1kX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHNuYW1lLCBpcl0gaW4gX3BmX3Nmbm1kX3JlYWRlclxcblxcdHJjIDo9IG9iamVjdC5nZXQoaXIsIFxcXCJSZWFkZXJDb25maWdcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChyYylcXG5cXHRvYmplY3QuZ2V0KHJjLCBcXFwiSW5wdXRUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkNTVlxcXCJcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMocmMsIFxcXCJDU1ZIZWFkZXJMb2NhdGlvblxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1tYXAtZGlzdHJpYnV0ZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkl0ZW1SZWFkZXIuUmVhZGVyQ29uZmlnLkNTVkhlYWRlckxvY2F0aW9uXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSldKSxcXG5cXHRzcHJpbnRmKFxcXCJNYXAgc3RhdGUgJyVzJyByZWFkcyBKU09OIGJ1dCBzZXRzIENTVkhlYWRlckxvY2F0aW9uOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogRmllbGQgJ0NTVkhlYWRlckxvY2F0aW9uJyBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLCBbc25hbWVdKSxcXG5cXHRfcGZfc2ZubWRfZml4LCBfcGZfc2ZubWRfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgc25hbWUsIGlyXSBpbiBfcGZfc2ZubWRfcmVhZGVyXFxuXFx0cmMgOj0gb2JqZWN0LmdldChpciwgXFxcIlJlYWRlckNvbmZpZ1xcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHJjKVxcblxcdG9iamVjdC5nZXQocmMsIFxcXCJJbnB1dFR5cGVcXFwiLCBudWxsKSA9PSBcXFwiSlNPTlxcXCJcXG5cXHRfcGZfc2ZubGliX2hhcyhyYywgXFxcIkNTVkhlYWRlckxvY2F0aW9uXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1hcC1kaXN0cmlidXRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuSXRlbVJlYWRlci5SZWFkZXJDb25maWdcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIk1hcCBzdGF0ZSAnJXMnIHNldHMgQ1NWSGVhZGVyTG9jYXRpb24gR0lWRU4gd2l0aG91dCBDU1ZIZWFkZXJzOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVGhlc2UgZmllbGRzIGFyZSByZXF1aXJlZDogW0NTVkhlYWRlcnNdXFxcXFxcXCJcXFwiLCBbc25hbWVdKSxcXG5cXHRfcGZfc2ZubWRfZml4LCBfcGZfc2ZubWRfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgc25hbWUsIGlyXSBpbiBfcGZfc2ZubWRfcmVhZGVyXFxuXFx0cmMgOj0gb2JqZWN0LmdldChpciwgXFxcIlJlYWRlckNvbmZpZ1xcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHJjKVxcblxcdG9iamVjdC5nZXQocmMsIFxcXCJDU1ZIZWFkZXJMb2NhdGlvblxcXCIsIG51bGwpID09IFxcXCJHSVZFTlxcXCJcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMocmMsIFxcXCJDU1ZIZWFkZXJzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFTTCBOZXh0L0RlZmF1bHQvQ2hvaWNlc1tdLk5leHQvQ2F0Y2hbXS5OZXh0IG11c3QgcmVmZXJlbmNlIGEgc3RhdGUgZGVmaW5lZCBpbiB0aGUgc2FtZSBTdGF0ZXMgYmxvY2ssIGF0IGV2ZXJ5IG5lc3RpbmcgbGV2ZWwgKGEgZGFuZ2xpbmcgU3RhcnRBdCBpcyBjb3ZlcmVkIGJ5IGVuZ2luZSBydWxlIEUzNjAxKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZubWlzc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvc3RhdGVtYWNoaW5lLXN0cnVjdHVyZS5odG1sXFxcIlxcblxcbl9wZl9zZm5taXNzX2ZpeCA6PSBcXFwiUG9pbnQgTmV4dC9EZWZhdWx0L0Nob2ljZXNbXS5OZXh0L0NhdGNoW10uTmV4dCBhdCBhIHN0YXRlIGRlZmluZWQgaW4gdGhlIHNhbWUgU3RhdGVzIGJsb2NrXFxcIlxcblxcbiMgW25hbWUsIHNjb3BlIHBhdGgsIHNjb3BlIHN0YXRlcywgc3RhdGUgbmFtZSwgZmllbGQgbGFiZWwsIHRhcmdldF1cXG5fcGZfc2ZubWlzc19yZWYgY29udGFpbnMgW25hbWUsIHAsIHMsIHNuYW1lLCBrZXksIHRhcmdldF0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIGtleSBpbiBbXFxcIk5leHRcXFwiLCBcXFwiRGVmYXVsdFxcXCJdXFxuXFx0dGFyZ2V0IDo9IG9iamVjdC5nZXQoc3QsIGtleSwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcbn1cXG5cXG5fcGZfc2ZubWlzc19yZWYgY29udGFpbnMgW25hbWUsIHAsIHMsIHNuYW1lLCBrZXksIHRhcmdldF0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIGZpZWxkIGluIFtcXFwiQ2hvaWNlc1xcXCIsIFxcXCJDYXRjaFxcXCJdXFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoc3QsIGZpZWxkLCBbXSlcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0c29tZSBpLCBjIGluIGFyclxcblxcdGlzX29iamVjdChjKVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KGMsIFxcXCJOZXh0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcblxcdGtleSA6PSBzcHJpbnRmKFxcXCIlc1slZF0uTmV4dFxcXCIsIFtmaWVsZCwgaV0pXFxufVxcblxcbiMgTk9URTogYSBkYW5nbGluZyBTdGFydEF0ICh0b3AgbGV2ZWwgYW5kIFBhcmFsbGVsIGJyYW5jaGVzKSBpcyBkZWxpYmVyYXRlbHlcXG4jIE5PVCBjaGVja2VkIGhlcmUg4oCUIHRoZSBlbmdpbmUncyBidWlsdC1pbiBFMzYwMSAoRVJST1IvQ0ZOX0xJTlQpIGNvdmVycyBpdFxcbiMgKHZlcmlmaWVkIGFnYWluc3QgMS43LjAtYmV0YSBvbiAyMDI2LTA5LTA1KS4gQSBCcmFuY2ggbWF5IG5vdCB0cmFuc2l0aW9uIHRvXFxuIyBhIHN0YXRlIG91dHNpZGUgaXRzIG93biBTdGF0ZXMgYmxvY2sgZWl0aGVyOiB0aGUgc2VydmljZSBzY29wZXMgbmFtZXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGtleV0pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgcmVmZXJlbmNlcyBzdGF0ZSAnJXMnIHZpYSAlcywgYnV0IG5vIHN0YXRlIHdpdGggdGhhdCBuYW1lIGlzIGRlZmluZWQgaW4gdGhlIHNhbWUgU3RhdGVzIGJsb2NrOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIk1JU1NJTkdfVFJBTlNJVElPTl9UQVJHRVQ6IE1pc3NpbmcgJ05leHQnIHRhcmdldDogJXNcXFxcXFxcIlxcXCIsIFtzbmFtZSwgdGFyZ2V0LCBrZXksIHRhcmdldF0pLFxcblxcdF9wZl9zZm5taXNzX2ZpeCwgX3BmX3Nmbm1pc3NfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIGtleSwgdGFyZ2V0XSBpbiBfcGZfc2ZubWlzc19yZWZcXG5cXHRub3QgdGFyZ2V0IGluIG9iamVjdC5rZXlzKHMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1uYW1lLWxpbWl0c1wiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQVNMIHN0YXRlIG5hbWVzIGFyZSBhdCBtb3N0IDgwIGNoYXJhY3RlcnM7IGEgRGlzdHJpYnV0ZWQgTWFwIExhYmVsIGlzIGF0IG1vc3QgNDAgY2hhcmFjdGVycyBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgc3RhdGUgbWFjaGluZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2Zubm1fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL3NlcnZpY2UtcXVvdGFzLmh0bWxcXFwiXFxuXFxuX3BmX3Nmbm5tX2ZpeCA6PSBcXFwiU2hvcnRlbiB0aGUgc3RhdGUgbmFtZSAvIExhYmVsOyBnaXZlIGVhY2ggRGlzdHJpYnV0ZWQgTWFwIGEgZGlzdGluY3QgTGFiZWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW5hbWUtbGltaXRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLFxcblxcdHNwcmludGYoXFxcInN0YXRlIG5hbWUgJyVzJyBpcyAlZCBjaGFyYWN0ZXJzIGxvbmcgKG1heGltdW0gODApOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIklOVkFMSURfU1RBVEVfTkFNRTogLi4uIGV4Y2VlZHMgdGhlIDgwLWNoYXJhY3RlciBsaW1pdCBhbGxvd2VkIGJ5IHRoZSBzZXJ2aWNlXFxcXFxcXCJcXFwiLCBbc25hbWUsIGNvdW50KHNuYW1lKV0pLFxcblxcdF9wZl9zZm5ubV9maXgsIF9wZl9zZm5ubV91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0Y291bnQoc25hbWUpID4gODBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW5hbWUtbGltaXRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5MYWJlbFxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBMYWJlbCBpcyAlZCBjaGFyYWN0ZXJzIGxvbmcgKG1heGltdW0gNDApOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIklOVkFMSURfTEFCRUxfTkFNRTogLi4uIGV4Y2VlZHMgdGhlIDQwLWNoYXJhY3RlciBsaW1pdCBhbGxvd2VkIGJ5IHRoZSBzZXJ2aWNlXFxcXFxcXCJcXFwiLCBbc25hbWUsIGNvdW50KGwpXSksXFxuXFx0X3BmX3Nmbm5tX2ZpeCwgX3BmX3Nmbm5tX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRsIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJMYWJlbFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGwpXFxuXFx0Y291bnQobCkgPiA0MFxcbn1cXG5cXG5fcGZfc2Zubm1fbGFiZWwgY29udGFpbnMgW25hbWUsIHBhdGgsIGxdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0bCA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiTGFiZWxcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhsKVxcblxcdHBhdGggOj0gX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbmFtZS1saW1pdHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkxhYmVsXFxcIiwgW3BhdGgyXSksXFxuXFx0c3ByaW50ZihcXFwiTGFiZWwgJyVzJyBpcyB1c2VkIGJ5IGJvdGggJXMgYW5kICVzOyBNYXAgbGFiZWxzIG11c3QgYmUgdW5pcXVlLCBhbmQgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJEVVBMSUNBVEVfTEFCRUxfTkFNRTogRHVwbGljYXRlIExhYmVsIG5hbWU6ICVzXFxcXFxcXCJcXFwiLCBbbCwgcGF0aDEsIHBhdGgyLCBsXSksXFxuXFx0X3BmX3Nmbm5tX2ZpeCwgX3BmX3Nmbm5tX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgxLCBsXSBpbiBfcGZfc2Zubm1fbGFiZWxcXG5cXHRzb21lIFtuMiwgcGF0aDIsIGwyXSBpbiBfcGZfc2Zubm1fbGFiZWxcXG5cXHRuMiA9PSBuYW1lXFxuXFx0bDIgPT0gbFxcblxcdHBhdGgxIDwgcGF0aDJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLW5leHQtZW5kXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFRhc2svUGFzcy9XYWl0L1BhcmFsbGVsL01hcCBzdGF0ZSBjYXJyaWVzIGV4YWN0bHkgb25lIG9mIE5leHQgb3IgRW5kOiB0cnVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5uZV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvc3RhdGVtYWNoaW5lLXN0cnVjdHVyZS5odG1sXFxcIlxcblxcbl9wZl9zZm5uZV9maXggOj0gXFxcIktlZXAgZWl0aGVyIE5leHQgKHRyYW5zaXRpb24pIG9yIEVuZDogdHJ1ZSAodGVybWluYWwpIG9uIHRoZSBzdGF0ZSwgbmV2ZXIgYm90aCBhbmQgbmV2ZXIgbmVpdGhlclxcXCJcXG5cXG5fcGZfc2ZubmVfdHlwZXMgOj0ge1xcXCJUYXNrXFxcIiwgXFxcIlBhc3NcXFwiLCBcXFwiV2FpdFxcXCIsIFxcXCJQYXJhbGxlbFxcXCIsIFxcXCJNYXBcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1uZXh0LWVuZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0X3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIGhhcyBib3RoIE5leHQgYW5kIEVuZDogdHJ1ZTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZpZWxkczogW05leHQsIEVuZF1cXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5uZV9maXgsIF9wZl9zZm5uZV91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSBpbiBfcGZfc2ZubmVfdHlwZXNcXG5cXHRfcGZfc2ZubGliX2hhcyhzdCwgXFxcIk5leHRcXFwiKVxcblxcdG9iamVjdC5nZXQoc3QsIFxcXCJFbmRcXFwiLCBmYWxzZSkgPT0gdHJ1ZVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbmV4dC1lbmRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdF9wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBoYXMgbmVpdGhlciBOZXh0IG5vciBFbmQ6IHRydWUsIHNvIHRoZSBleGVjdXRpb24gY2Fubm90IGxlYXZlIGl0OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVGhpcyBvYmplY3Qgc2hvdWxkIGhhdmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6IFtOZXh0LCBFbmRdXFxcXFxcXCJcXFwiLCBbc25hbWVdKSxcXG5cXHRfcGZfc2ZubmVfZml4LCBfcGZfc2ZubmVfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdG9iamVjdC5nZXQoc3QsIFxcXCJUeXBlXFxcIiwgbnVsbCkgaW4gX3BmX3Nmbm5lX3R5cGVzXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKHN0LCBcXFwiTmV4dFxcXCIpXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIkVuZFxcXCIsIGZhbHNlKSAhPSB0cnVlXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1udW1lcmljLXJhbmdlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQVNMIG51bWVyaWMgZmllbGRzIGhhdmUgc2VydmljZS1zaWRlIHJhbmdlcyB0aGUgc2NoZW1hIGRvZXMgbm90IGNhcnJ5OiBUaW1lb3V0U2Vjb25kcy9IZWFydGJlYXRTZWNvbmRzIDEuLjk5OTk5OTk5LCBXYWl0IFNlY29uZHMgMC4uOTk5OTk5OTksIE1heENvbmN1cnJlbmN5ID49IDAsIFRvbGVyYXRlZEZhaWx1cmVQZXJjZW50YWdlIDw9IDEwMCwgUmV0cnkgTWF4QXR0ZW1wdHMgMC4uOTk5OTk5OTksIEJhY2tvZmZSYXRlID49IDEuMCwgTWF4RGVsYXlTZWNvbmRzIDEuLjMxNjIyNDAwLCBhbmQgaW50ZWdlcnMgbXVzdCBiZSBudW1iZXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5udW1fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL3N0YXRlLXRhc2suaHRtbFxcXCJcXG5cXG5fcGZfc2ZubnVtX2ZpeCA6PSBcXFwiVXNlIGEgdmFsdWUgaW5zaWRlIHRoZSBkb2N1bWVudGVkIHJhbmdlIChKU09OYXRhIHN0YXRlcyBtYXkgdXNlIGEgeyUgJX0gZXhwcmVzc2lvbiBpbnN0ZWFkKVxcXCJcXG5cXG4jIE1lYXN1cmVkIHdpdGggVmFsaWRhdGVTdGF0ZU1hY2hpbmVEZWZpbml0aW9uIG9uIDIwMjYtMDktMDUuIFJldHJ5XFxuIyBJbnRlcnZhbFNlY29uZHMgMCBhbmQgdGhlIHRvcC1sZXZlbCBUaW1lb3V0U2Vjb25kcyAwIGFyZSBhY2NlcHRlZCwgc28gdGhleVxcbiMgYXJlIGRlbGliZXJhdGVseSBhYnNlbnQgaGVyZS5cXG5fcGZfc2ZubnVtX21pbiBjb250YWlucyBbXFxcIlRpbWVvdXRTZWNvbmRzXFxcIiwgMV1cXG5cXG5fcGZfc2ZubnVtX21pbiBjb250YWlucyBbXFxcIkhlYXJ0YmVhdFNlY29uZHNcXFwiLCAxXVxcblxcbl9wZl9zZm5udW1fbWluIGNvbnRhaW5zIFtcXFwiU2Vjb25kc1xcXCIsIDBdXFxuXFxuX3BmX3Nmbm51bV9taW4gY29udGFpbnMgW1xcXCJNYXhDb25jdXJyZW5jeVxcXCIsIDBdXFxuXFxuX3BmX3Nmbm51bV9tYXggY29udGFpbnMgW1xcXCJUaW1lb3V0U2Vjb25kc1xcXCIsIDk5OTk5OTk5XVxcblxcbl9wZl9zZm5udW1fbWF4IGNvbnRhaW5zIFtcXFwiSGVhcnRiZWF0U2Vjb25kc1xcXCIsIDk5OTk5OTk5XVxcblxcbl9wZl9zZm5udW1fbWF4IGNvbnRhaW5zIFtcXFwiU2Vjb25kc1xcXCIsIDk5OTk5OTk5XVxcblxcbl9wZl9zZm5udW1fbWF4IGNvbnRhaW5zIFtcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VcXFwiLCAxMDBdXFxuXFxuX3BmX3Nmbm51bV9ybWluIGNvbnRhaW5zIFtcXFwiTWF4QXR0ZW1wdHNcXFwiLCAwXVxcblxcbl9wZl9zZm5udW1fcm1pbiBjb250YWlucyBbXFxcIkJhY2tvZmZSYXRlXFxcIiwgMV1cXG5cXG5fcGZfc2ZubnVtX3JtaW4gY29udGFpbnMgW1xcXCJNYXhEZWxheVNlY29uZHNcXFwiLCAxXVxcblxcbl9wZl9zZm5udW1fcm1heCBjb250YWlucyBbXFxcIk1heEF0dGVtcHRzXFxcIiwgOTk5OTk5OTldXFxuXFxuX3BmX3Nmbm51bV9ybWF4IGNvbnRhaW5zIFtcXFwiTWF4RGVsYXlTZWNvbmRzXFxcIiwgMzE2MjI0MDBdXFxuXFxuX3BmX3Nmbm51bV9pbnQgOj0ge1xcXCJUaW1lb3V0U2Vjb25kc1xcXCIsIFxcXCJIZWFydGJlYXRTZWNvbmRzXFxcIiwgXFxcIlNlY29uZHNcXFwiLCBcXFwiTWF4Q29uY3VycmVuY3lcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZUNvdW50XFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbnVtZXJpYy1yYW5nZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnICVzIGlzICV2LCBiZWxvdyB0aGUgbWluaW11bSAldjsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IE1pbmltdW0gdmFsdWUgaXMgJXZcXFxcXFxcIlxcXCIsIFtzbmFtZSwgZiwgdiwgbSwgbV0pLFxcblxcdF9wZl9zZm5udW1fZml4LCBfcGZfc2ZubnVtX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIFtmLCBtXSBpbiBfcGZfc2ZubnVtX21pblxcblxcdHYgOj0gb2JqZWN0LmdldChzdCwgZiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2IDwgbVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbnVtZXJpYy1yYW5nZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnICVzIGlzICV2LCBhYm92ZSB0aGUgbWF4aW11bSAldjsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IE1heGltdW0gdmFsdWUgaXMgJXZcXFxcXFxcIlxcXCIsIFtzbmFtZSwgZiwgdiwgbSwgbV0pLFxcblxcdF9wZl9zZm5udW1fZml4LCBfcGZfc2ZubnVtX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIFtmLCBtXSBpbiBfcGZfc2ZubnVtX21heFxcblxcdHYgOj0gb2JqZWN0LmdldChzdCwgZiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2ID4gbVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbnVtZXJpYy1yYW5nZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnICVzIGlzIHRoZSBzdHJpbmcgJyVzJzsgdGhlIGZpZWxkIHRha2VzIGFuIGludGVnZXIgKG9yIGEgeyUlICUlfSBKU09OYXRhIGV4cHJlc3Npb24pLCBhbmQgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IEV4cGVjdGVkIHZhbHVlIG9mIHR5cGUgSW50ZWdlclxcXFxcXFwiXFxcIiwgW3NuYW1lLCBmLCB2XSksXFxuXFx0X3BmX3Nmbm51bV9maXgsIF9wZl9zZm5udW1fdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHNvbWUgZiBpbiBfcGZfc2ZubnVtX2ludFxcblxcdHYgOj0gb2JqZWN0LmdldChzdCwgZiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3Qgc3RhcnRzd2l0aCh2LCBcXFwieyVcXFwiKVxcblxcdG5vdCBjb250YWlucyh2LCBcXFwiJHtcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbnVtZXJpYy1yYW5nZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJldHJ5WyVkXS4lc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpLCBmXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBSZXRyeVslZF0gJXMgaXMgJXYsIGJlbG93IHRoZSBtaW5pbXVtICV2OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogTWluaW11bSB2YWx1ZSBpcyAldlxcXFxcXFwiXFxcIiwgW3NuYW1lLCBpLCBmLCB2LCBtLCBtXSksXFxuXFx0X3BmX3Nmbm51bV9maXgsIF9wZl9zZm5udW1fdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiUmV0cnlcXFwiLCBbXSlcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0c29tZSBpLCByIGluIGFyclxcblxcdGlzX29iamVjdChyKVxcblxcdHNvbWUgW2YsIG1dIGluIF9wZl9zZm5udW1fcm1pblxcblxcdHYgOj0gb2JqZWN0LmdldChyLCBmLCBudWxsKVxcblxcdGlzX251bWJlcih2KVxcblxcdHYgPCBtXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1udW1lcmljLXJhbmdlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUmV0cnlbJWRdLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIFJldHJ5WyVkXSAlcyBpcyAldiwgYWJvdmUgdGhlIG1heGltdW0gJXY7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBNYXhpbXVtIHZhbHVlIGlzICV2XFxcXFxcXCJcXFwiLCBbc25hbWUsIGksIGYsIHYsIG0sIG1dKSxcXG5cXHRfcGZfc2ZubnVtX2ZpeCwgX3BmX3Nmbm51bV91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJSZXRyeVxcXCIsIFtdKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRzb21lIGksIHIgaW4gYXJyXFxuXFx0aXNfb2JqZWN0KHIpXFxuXFx0c29tZSBbZiwgbV0gaW4gX3BmX3Nmbm51bV9ybWF4XFxuXFx0diA6PSBvYmplY3QuZ2V0KHIsIGYsIG51bGwpXFxuXFx0aXNfbnVtYmVyKHYpXFxuXFx0diA+IG1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLXBhdGgtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHN0YXRpYyBBU0wgZmllbGQgYW5kIGl0cyBQYXRoIHZhcmlhbnQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAoVGltZW91dFNlY29uZHMvVGltZW91dFNlY29uZHNQYXRoLCBIZWFydGJlYXRTZWNvbmRzL0hlYXJ0YmVhdFNlY29uZHNQYXRoLCBNYXhDb25jdXJyZW5jeS9NYXhDb25jdXJyZW5jeVBhdGgsIFRvbGVyYXRlZEZhaWx1cmVQZXJjZW50YWdlLy1QYXRoLCBFcnJvci9FcnJvclBhdGgsIENhdXNlL0NhdXNlUGF0aCksIGFuZCBhIE1hcCBzdGF0ZSBoYXMgZXhhY3RseSBvbmUgb2YgSXRlbVByb2Nlc3NvciAvIEl0ZXJhdG9yXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5weF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvc3RhdGUtdGFzay5odG1sXFxcIlxcblxcbl9wZl9zZm5weF9maXggOj0gXFxcIktlZXAgZWl0aGVyIHRoZSBzdGF0aWMgZmllbGQgb3IgaXRzIFBhdGggdmFyaWFudDsgZ2l2ZSBhIE1hcCBzdGF0ZSBvbmUgSXRlbVByb2Nlc3NvciAoSXRlcmF0b3IgaXMgdGhlIGxlZ2FjeSBzcGVsbGluZylcXFwiXFxuXFxuX3BmX3NmbnB4X3BhaXIgY29udGFpbnMgW1xcXCJUaW1lb3V0U2Vjb25kc1xcXCIsIFxcXCJUaW1lb3V0U2Vjb25kc1BhdGhcXFwiXVxcblxcbl9wZl9zZm5weF9wYWlyIGNvbnRhaW5zIFtcXFwiSGVhcnRiZWF0U2Vjb25kc1xcXCIsIFxcXCJIZWFydGJlYXRTZWNvbmRzUGF0aFxcXCJdXFxuXFxuX3BmX3NmbnB4X3BhaXIgY29udGFpbnMgW1xcXCJNYXhDb25jdXJyZW5jeVxcXCIsIFxcXCJNYXhDb25jdXJyZW5jeVBhdGhcXFwiXVxcblxcbl9wZl9zZm5weF9wYWlyIGNvbnRhaW5zIFtcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VQYXRoXFxcIl1cXG5cXG5fcGZfc2ZucHhfcGFpciBjb250YWlucyBbXFxcIkVycm9yXFxcIiwgXFxcIkVycm9yUGF0aFxcXCJdXFxuXFxuX3BmX3NmbnB4X3BhaXIgY29udGFpbnMgW1xcXCJDYXVzZVxcXCIsIFxcXCJDYXVzZVBhdGhcXFwiXVxcblxcbl9wZl9zZm5weF9wYWlyIGNvbnRhaW5zIFtcXFwiSXRlbVByb2Nlc3NvclxcXCIsIFxcXCJJdGVyYXRvclxcXCJdXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXBhdGgtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBiXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBzZXRzIGJvdGggJXMgYW5kICVzOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzOiBbJXMsICVzXVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBhLCBiLCBhLCBiXSksXFxuXFx0X3BmX3NmbnB4X2ZpeCwgX3BmX3NmbnB4X3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIFthLCBiXSBpbiBfcGZfc2ZucHhfcGFpclxcblxcdF9wZl9zZm5saWJfaGFzKHN0LCBhKVxcblxcdF9wZl9zZm5saWJfaGFzKHN0LCBiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcGF0aC1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdF9wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksXFxuXFx0c3ByaW50ZihcXFwiTWFwIHN0YXRlICclcycgaGFzIG5laXRoZXIgSXRlbVByb2Nlc3NvciBub3IgSXRlcmF0b3I7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGlzIG9iamVjdCBzaG91bGQgaGF2ZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGZpZWxkczogW0l0ZW1Qcm9jZXNzb3IsIEl0ZXJhdG9yXVxcXFxcXFwiXFxcIiwgW3NuYW1lXSksXFxuXFx0X3BmX3NmbnB4X2ZpeCwgX3BmX3NmbnB4X3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRvYmplY3QuZ2V0KHN0LCBcXFwiVHlwZVxcXCIsIG51bGwpID09IFxcXCJNYXBcXFwiXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKHN0LCBcXFwiSXRlbVByb2Nlc3NvclxcXCIpXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKHN0LCBcXFwiSXRlcmF0b3JcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtcXVlcnktbGFuZ3VhZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkpTT05QYXRoLW9ubHkgZmllbGRzIChJbnB1dFBhdGgsIE91dHB1dFBhdGgsIFJlc3VsdFBhdGgsIFBhcmFtZXRlcnMsIFJlc3VsdFNlbGVjdG9yLCBSZXN1bHQsICpQYXRoLCBWYXJpYWJsZSBydWxlcykgYW5kIEpTT05hdGEtb25seSBmaWVsZHMgKEFyZ3VtZW50cywgT3V0cHV0LCBJdGVtcywgQ29uZGl0aW9uKSBtdXN0IG1hdGNoIHRoZSBlZmZlY3RpdmUgUXVlcnlMYW5ndWFnZTsgYSBKU09OYXRhIHN0YXRlIG1hY2hpbmUgY2Fubm90IGNvbnRhaW4gSlNPTlBhdGggc3RhdGVzOyB7JSBtdXN0IGNsb3NlIHdpdGggJX1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbnFsX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy90cmFuc2Zvcm1pbmctZGF0YS5odG1sXFxcIlxcblxcbl9wZl9zZm5xbF9maXggOj0gXFxcIlVzZSBBcmd1bWVudHMvT3V0cHV0L0l0ZW1zL0NvbmRpdGlvbiBpbiBKU09OYXRhIHN0YXRlcyBhbmQgdGhlIFBhdGgtc3R5bGUgZmllbGRzIGluIEpTT05QYXRoIHN0YXRlczsgc2V0IFF1ZXJ5TGFuZ3VhZ2UgY29uc2lzdGVudGx5XFxcIlxcblxcbl9wZl9zZm5xbF9wYXRob25seSA6PSB7XFxcIklucHV0UGF0aFxcXCIsIFxcXCJPdXRwdXRQYXRoXFxcIiwgXFxcIlJlc3VsdFBhdGhcXFwiLCBcXFwiUGFyYW1ldGVyc1xcXCIsIFxcXCJSZXN1bHRTZWxlY3RvclxcXCIsIFxcXCJSZXN1bHRcXFwiLCBcXFwiSXRlbXNQYXRoXFxcIiwgXFxcIlRpbWVvdXRTZWNvbmRzUGF0aFxcXCIsIFxcXCJIZWFydGJlYXRTZWNvbmRzUGF0aFxcXCIsIFxcXCJTZWNvbmRzUGF0aFxcXCIsIFxcXCJUaW1lc3RhbXBQYXRoXFxcIiwgXFxcIk1heENvbmN1cnJlbmN5UGF0aFxcXCIsIFxcXCJUb2xlcmF0ZWRGYWlsdXJlUGVyY2VudGFnZVBhdGhcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZUNvdW50UGF0aFxcXCIsIFxcXCJFcnJvclBhdGhcXFwiLCBcXFwiQ2F1c2VQYXRoXFxcIn1cXG5cXG5fcGZfc2ZucWxfanNvbmF0YW9ubHkgOj0ge1xcXCJBcmd1bWVudHNcXFwiLCBcXFwiT3V0cHV0XFxcIiwgXFxcIkl0ZW1zXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcXVlcnktbGFuZ3VhZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIHVzZXMgSlNPTmF0YSBidXQgaGFzIHRoZSBKU09OUGF0aC1vbmx5IGZpZWxkICclcyc7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgUXVlcnlMYW5ndWFnZSBpcyBzZXQgdG8gJ0pTT05hdGEnLCBidXQgZmllbGQgJyVzJyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlICdKU09OUGF0aCcgUXVlcnlMYW5ndWFnZVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBmLCBmXSksXFxuXFx0X3BmX3NmbnFsX2ZpeCwgX3BmX3NmbnFsX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRfcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA9PSBcXFwiSlNPTmF0YVxcXCJcXG5cXHRzb21lIGYsIF8gaW4gc3RcXG5cXHRmIGluIF9wZl9zZm5xbF9wYXRob25seVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcXVlcnktbGFuZ3VhZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIHVzZXMgSlNPTlBhdGggYnV0IGhhcyB0aGUgSlNPTmF0YS1vbmx5IGZpZWxkICclcyc7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgUXVlcnlMYW5ndWFnZSBpcyBzZXQgdG8gJ0pTT05QYXRoJywgYnV0IGZpZWxkICclcycgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRoZSAnSlNPTmF0YScgUXVlcnlMYW5ndWFnZVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBmLCBmXSksXFxuXFx0X3BmX3NmbnFsX2ZpeCwgX3BmX3NmbnFsX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRfcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA9PSBcXFwiSlNPTlBhdGhcXFwiXFxuXFx0c29tZSBmLCBfIGluIHN0XFxuXFx0ZiBpbiBfcGZfc2ZucWxfanNvbmF0YW9ubHlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXF1ZXJ5LWxhbmd1YWdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5DaG9pY2VzWyVkXVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCB1c2VzIFZhcmlhYmxlL2NvbXBhcmlzb24gZmllbGRzIGluIGEgSlNPTmF0YSBzdGF0ZTsgSlNPTmF0YSBydWxlcyB0YWtlIENvbmRpdGlvbiwgYW5kIENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiAuLi4gZmllbGQgJ1ZhcmlhYmxlJyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlICdKU09OUGF0aCcgUXVlcnlMYW5ndWFnZVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBpXSksXFxuXFx0X3BmX3NmbnFsX2ZpeCwgX3BmX3NmbnFsX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBpLCBjXSBpbiBfcGZfc2ZubGliX2Nob2ljZVxcblxcdHN0IDo9IHNbc25hbWVdXFxuXFx0X3BmX3NmbmxpYl9xbChuYW1lLCBzdCkgPT0gXFxcIkpTT05hdGFcXFwiXFxuXFx0X3BmX3NmbmxpYl9oYXMoYywgXFxcIlZhcmlhYmxlXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXF1ZXJ5LWxhbmd1YWdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5DaG9pY2VzWyVkXVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ2hvaWNlIHN0YXRlICclcycgcnVsZSAlZCB1c2VzIENvbmRpdGlvbiBpbiBhIEpTT05QYXRoIHN0YXRlOyBKU09OUGF0aCBydWxlcyB0YWtlIFZhcmlhYmxlIHBsdXMgYSBjb21wYXJpc29uLCBhbmQgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IC4uLiBmaWVsZCAnQ29uZGl0aW9uJyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlICdKU09OYXRhJyBRdWVyeUxhbmd1YWdlXFxcXFxcXCJcXFwiLCBbc25hbWUsIGldKSxcXG5cXHRfcGZfc2ZucWxfZml4LCBfcGZfc2ZucWxfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIGksIGNdIGluIF9wZl9zZm5saWJfY2hvaWNlXFxuXFx0c3QgOj0gc1tzbmFtZV1cXG5cXHRfcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA9PSBcXFwiSlNPTlBhdGhcXFwiXFxuXFx0X3BmX3NmbmxpYl9oYXMoYywgXFxcIkNvbmRpdGlvblxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1xdWVyeS1sYW5ndWFnZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUXVlcnlMYW5ndWFnZVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBzZXRzIFF1ZXJ5TGFuZ3VhZ2UgSlNPTlBhdGggaW5zaWRlIGEgc3RhdGUgbWFjaGluZSB3aG9zZSB0b3AtbGV2ZWwgUXVlcnlMYW5ndWFnZSBpcyBKU09OYXRhOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogJ1F1ZXJ5TGFuZ3VhZ2UnIGNhbiBub3QgYmUgJ0pTT05QYXRoJyBpZiBzZXQgdG8gJ0pTT05hdGEnIGZvciB3aG9sZSBzdGF0ZSBtYWNoaW5lXFxcXFxcXCJcXFwiLCBbc25hbWVdKSxcXG5cXHRfcGZfc2ZucWxfZml4LCBfcGZfc2ZucWxfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdG9iamVjdC5nZXQoX3BmX3NmbmxpYl9hc2wobmFtZSksIFxcXCJRdWVyeUxhbmd1YWdlXFxcIiwgbnVsbCkgPT0gXFxcIkpTT05hdGFcXFwiXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlF1ZXJ5TGFuZ3VhZ2VcXFwiLCBudWxsKSA9PSBcXFwiSlNPTlBhdGhcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1xdWVyeS1sYW5ndWFnZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUXVlcnlMYW5ndWFnZVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBRdWVyeUxhbmd1YWdlICclcycgaXMgbm90IEpTT05QYXRoIG9yIEpTT05hdGE7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBWYWx1ZSBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IFtKU09OUGF0aCwgSlNPTmF0YV1cXFxcXFxcIlxcXCIsIFtzbmFtZSwgcV0pLFxcblxcdF9wZl9zZm5xbF9maXgsIF9wZl9zZm5xbF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0cSA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiUXVlcnlMYW5ndWFnZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHEpXFxuXFx0bm90IHEgaW4ge1xcXCJKU09OUGF0aFxcXCIsIFxcXCJKU09OYXRhXFxcIn1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXF1ZXJ5LWxhbmd1YWdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5RdWVyeUxhbmd1YWdlXFxcIiwgW19wZl9zZm5saWJfcHJvcChuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcInRvcC1sZXZlbCBRdWVyeUxhbmd1YWdlICclcycgaXMgbm90IEpTT05QYXRoIG9yIEpTT05hdGE7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBWYWx1ZSBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IFtKU09OUGF0aCwgSlNPTmF0YV1cXFxcXFxcIlxcXCIsIFtxXSksXFxuXFx0X3BmX3NmbnFsX2ZpeCwgX3BmX3NmbnFsX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcXFwiKVxcblxcdHEgOj0gb2JqZWN0LmdldChfcGZfc2ZubGliX2FzbChuYW1lKSwgXFxcIlF1ZXJ5TGFuZ3VhZ2VcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhxKVxcblxcdG5vdCBxIGluIHtcXFwiSlNPTlBhdGhcXFwiLCBcXFwiSlNPTmF0YVxcXCJ9XFxufVxcblxcbiMgU3RyaW5nIHZhbHVlcyBvZiBhIEpTT05hdGEgc3RhdGUsIHVwIHRvIHR3byBsZXZlbHMgaW5zaWRlIG9iamVjdC9hcnJheVxcbiMgZmllbGRzIChBcmd1bWVudHMsIE91dHB1dCwgQXNzaWduLCBJdGVtU2VsZWN0b3IsIENob2ljZXNbXS5Db25kaXRpb24gLi4uKS5cXG5fcGZfc2ZucWxfc3RyIGNvbnRhaW5zIFtuYW1lLCBwLCBzbmFtZSwgd2hlcmUsIHZdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0X3BmX3NmbmxpYl9xbChuYW1lLCBzdCkgPT0gXFxcIkpTT05hdGFcXFwiXFxuXFx0c29tZSBmLCB2IGluIHN0XFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0d2hlcmUgOj0gZlxcbn1cXG5cXG4jIEl0ZXJhdGluZyBhIHNjYWxhciB3aXRoIGBzb21lIC4uIGluYCBpcyBhIGhhcmQgZXZhbHVhdGlvbiBlcnJvciBpbiB0aGlzXFxuIyBlbmdpbmUgKG5vdCB1bmRlZmluZWQpLCBzbyBldmVyeSBuZXN0ZWQgdmFsdWUgaXMgdHlwZS1ndWFyZGVkIGZpcnN0Llxcbl9wZl9zZm5xbF9jb2xsKHgpIGlmIGlzX29iamVjdCh4KVxcblxcbl9wZl9zZm5xbF9jb2xsKHgpIGlmIGlzX2FycmF5KHgpXFxuXFxuX3BmX3NmbnFsX3N0ciBjb250YWlucyBbbmFtZSwgcCwgc25hbWUsIHdoZXJlLCB2XSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdF9wZl9zZm5saWJfcWwobmFtZSwgc3QpID09IFxcXCJKU09OYXRhXFxcIlxcblxcdHNvbWUgZiwgbyBpbiBzdFxcblxcdF9wZl9zZm5xbF9jb2xsKG8pXFxuXFx0c29tZSBrLCB2IGluIG9cXG5cXHRpc19zdHJpbmcodilcXG5cXHR3aGVyZSA6PSBzcHJpbnRmKFxcXCIlcy4ldlxcXCIsIFtmLCBrXSlcXG59XFxuXFxuX3BmX3NmbnFsX3N0ciBjb250YWlucyBbbmFtZSwgcCwgc25hbWUsIHdoZXJlLCB2XSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdF9wZl9zZm5saWJfcWwobmFtZSwgc3QpID09IFxcXCJKU09OYXRhXFxcIlxcblxcdHNvbWUgZiwgbyBpbiBzdFxcblxcdF9wZl9zZm5xbF9jb2xsKG8pXFxuXFx0c29tZSBrLCBvMiBpbiBvXFxuXFx0X3BmX3NmbnFsX2NvbGwobzIpXFxuXFx0c29tZSBrMiwgdiBpbiBvMlxcblxcdGlzX3N0cmluZyh2KVxcblxcdHdoZXJlIDo9IHNwcmludGYoXFxcIiVzLiV2LiV2XFxcIiwgW2YsIGssIGsyXSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXF1ZXJ5LWxhbmd1YWdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCB3aGVyZV0pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgJXMgdmFsdWUgJyVzJyBvcGVucyBhIEpTT05hdGEgZXhwcmVzc2lvbiB3aXRoIHslJSBidXQgZG9lcyBub3QgY2xvc2UgaXQgd2l0aCAlJX07IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBKU09OYXRhIHN0cmluZyBtdXN0IHN0YXJ0IHdpdGggeyUlIGFuZCBlbmQgd2l0aCAlJX1cXFxcXFxcIlxcXCIsIFtzbmFtZSwgd2hlcmUsIHZdKSxcXG5cXHRfcGZfc2ZucWxfZml4LCBfcGZfc2ZucWxfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgc25hbWUsIHdoZXJlLCB2XSBpbiBfcGZfc2ZucWxfc3RyXFxuXFx0c3RhcnRzd2l0aCh2LCBcXFwieyVcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh2LCBcXFwiJX1cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtcmVzb3VyY2UtYXJuXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXNrIFJlc291cmNlIGlzIGFuIEFSTiwgYW5kIGFuIGludGVncmF0aW9uIHBhdHRlcm4gdGhlIHNlcnZpY2UgZG9lcyBub3Qgb2ZmZXIgZmFpbHMgY3JlYXRpb246IC5zeW5jIG9uIExhbWJkYS9TTlMvU1FTL0R5bmFtb0RCL0V2ZW50QnJpZGdlL0FQSSBHYXRld2F5L2F3cy1zZGssIC53YWl0Rm9yVGFza1Rva2VuIG9uIEF0aGVuYS9CYXRjaC9Db2RlQnVpbGQvRU1SL0dsdWUvRGF0YUJyZXcvTWVkaWFDb252ZXJ0L1NhZ2VNYWtlci9EeW5hbW9EQiwgYW5kIC5zeW5jOjIgYW55d2hlcmUgYnV0IHN0YXRlczpzdGFydEV4ZWN1dGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZucmVzX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9pbnRlZ3JhdGUtb3B0aW1pemVkLmh0bWxcXFwiXFxuXFxuX3BmX3NmbnJlc19maXggOj0gXFxcIlVzZSB0aGUgaW50ZWdyYXRpb24gcGF0dGVybiB0aGUgc2VydmljZSBzdXBwb3J0cyAoc2VlIHRoZSBvcHRpbWl6ZWQgaW50ZWdyYXRpb25zIHRhYmxlKTsgYSBMYW1iZGEgY2FsbCB3YWl0cyBmb3IgdGhlIGZ1bmN0aW9uIGFueXdheSAobm8gLnN5bmMpXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1yZXNvdXJjZS1hcm5cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJlc291cmNlXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSldKSxcXG5cXHRzcHJpbnRmKFxcXCJUYXNrIHN0YXRlICclcycgUmVzb3VyY2UgJyVzJyBpcyBub3QgYW4gQVJOOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgaXMgbm90IGEgdmFsaWQgcmVzb3VyY2UgQVJOXFxcXFxcXCJcXFwiLCBbc25hbWUsIHJlc10pLFxcblxcdF9wZl9zZm5yZXNfZml4LCBfcGZfc2ZucmVzX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRvYmplY3QuZ2V0KHN0LCBcXFwiVHlwZVxcXCIsIG51bGwpID09IFxcXCJUYXNrXFxcIlxcblxcdHJlcyA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiUmVzb3VyY2VcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyZXMpXFxuXFx0bm90IGNvbnRhaW5zKHJlcywgXFxcIiR7XFxcIilcXG5cXHRub3Qgc3RhcnRzd2l0aChyZXMsIFxcXCJhcm46XFxcIilcXG59XFxuXFxuIyBTZXJ2aWNlcyB3aG9zZSBvcHRpbWl6ZWQgaW50ZWdyYXRpb24gbmV2ZXIgb2ZmZXJzIHRoZSBwYXR0ZXJuIChkb2MgdGFibGUsXFxuIyBjb25maXJtZWQgd2l0aCBWYWxpZGF0ZVN0YXRlTWFjaGluZURlZmluaXRpb24gb24gMjAyNi0wOS0wNSkuIFN1cHBvcnQgb24gdGhlXFxuIyBwb3NpdGl2ZSBzaWRlIGlzIHBlciBBUEksIHNvIG9ubHkgdGhlIGltcG9zc2libGUgY29tYmluYXRpb25zIGFyZSBqdWRnZWQuXFxuX3BmX3NmbnJlc19ub3N5bmMgOj0ge1xcXCJsYW1iZGFcXFwiLCBcXFwic25zXFxcIiwgXFxcInNxc1xcXCIsIFxcXCJkeW5hbW9kYlxcXCIsIFxcXCJldmVudHNcXFwiLCBcXFwiYXBpZ2F0ZXdheVxcXCIsIFxcXCJhd3Mtc2RrXFxcIiwgXFxcImJlZHJvY2stYWdlbnRjb3JlXFxcIn1cXG5cXG5fcGZfc2ZucmVzX25vdG9rZW4gOj0ge1xcXCJhdGhlbmFcXFwiLCBcXFwiYmF0Y2hcXFwiLCBcXFwiY29kZWJ1aWxkXFxcIiwgXFxcImVsYXN0aWNtYXByZWR1Y2VcXFwiLCBcXFwiZW1yLWNvbnRhaW5lcnNcXFwiLCBcXFwiZW1yLXNlcnZlcmxlc3NcXFwiLCBcXFwiZ2x1ZVxcXCIsIFxcXCJkYXRhYnJld1xcXCIsIFxcXCJtZWRpYWNvbnZlcnRcXFwiLCBcXFwic2FnZW1ha2VyXFxcIiwgXFxcImR5bmFtb2RiXFxcIiwgXFxcImJlZHJvY2stYWdlbnRjb3JlXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcmVzb3VyY2UtYXJuXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZXNvdXJjZVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiVGFzayBzdGF0ZSAnJXMnIHVzZXMgdGhlIC5zeW5jIChSdW4gYSBKb2IpIHBhdHRlcm4gb24gdGhlICVzIGludGVncmF0aW9uLCB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGl0OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVGhlIHJlc291cmNlIHByb3ZpZGVkIGFybjphd3M6c3RhdGVzOjo6JXM6JXMgaXMgbm90IHJlY29nbml6ZWRcXFxcXFxcIlxcXCIsIFtzbmFtZSwgc3ZjLCBzdmMsIGFwaV0pLFxcblxcdF9wZl9zZm5yZXNfZml4LCBfcGZfc2ZucmVzX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdCwgc3ZjLCBhcGldIGluIF9wZl9zZm5saWJfaW50ZWdyYXRpb25cXG5cXHRzdmMgaW4gX3BmX3NmbnJlc19ub3N5bmNcXG5cXHRyZWdleC5tYXRjaChcXFwiWy5dc3luYyg6Mik/JFxcXCIsIGFwaSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXJlc291cmNlLWFyblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUmVzb3VyY2VcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIlRhc2sgc3RhdGUgJyVzJyB1c2VzIHRoZSAud2FpdEZvclRhc2tUb2tlbiAoY2FsbGJhY2spIHBhdHRlcm4gb24gdGhlICVzIGludGVncmF0aW9uLCB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGl0OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVGhlIHJlc291cmNlIHByb3ZpZGVkIGFybjphd3M6c3RhdGVzOjo6JXM6JXMgaXMgbm90IHJlY29nbml6ZWRcXFxcXFxcIlxcXCIsIFtzbmFtZSwgc3ZjLCBzdmMsIGFwaV0pLFxcblxcdF9wZl9zZm5yZXNfZml4LCBfcGZfc2ZucmVzX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdCwgc3ZjLCBhcGldIGluIF9wZl9zZm5saWJfaW50ZWdyYXRpb25cXG5cXHRzdmMgaW4gX3BmX3NmbnJlc19ub3Rva2VuXFxuXFx0ZW5kc3dpdGgoYXBpLCBcXFwiLndhaXRGb3JUYXNrVG9rZW5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcmVzb3VyY2UtYXJuXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZXNvdXJjZVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiVGFzayBzdGF0ZSAnJXMnIHVzZXMgLnN5bmM6MiBvbiAlczolczsgb25seSBzdGF0ZXM6c3RhcnRFeGVjdXRpb24uc3luYzoyIGV4aXN0cywgYW5kIENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgcmVzb3VyY2UgcHJvdmlkZWQgLi4uIGlzIG5vdCByZWNvZ25pemVkXFxcXFxcXCJcXFwiLCBbc25hbWUsIHN2YywgYXBpXSksXFxuXFx0X3BmX3NmbnJlc19maXgsIF9wZl9zZm5yZXNfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0LCBzdmMsIGFwaV0gaW4gX3BmX3NmbmxpYl9pbnRlZ3JhdGlvblxcblxcdGVuZHN3aXRoKGFwaSwgXFxcIi5zeW5jOjJcXFwiKVxcblxcdHN2YyAhPSBcXFwic3RhdGVzXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtcmV0cnktY2F0Y2hcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJldHJ5L0NhdGNoIGVudHJpZXM6IEVycm9yRXF1YWxzIGlzIHByZXNlbnQgYW5kIG5vbi1lbXB0eSwgU3RhdGVzLkFMTCBhcHBlYXJzIGFsb25lIGFuZCBvbmx5IGluIHRoZSBsYXN0IGVudHJ5LCBldmVyeSBDYXRjaCBoYXMgTmV4dCwgYW5kIEppdHRlclN0cmF0ZWd5IGlzIE5PTkUgb3IgRlVMTFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZucmNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2NvbmNlcHRzLWVycm9yLWhhbmRsaW5nLmh0bWxcXFwiXFxuXFxuX3BmX3NmbnJjX2ZpeCA6PSBcXFwiTW92ZSB0aGUgU3RhdGVzLkFMTCBjYXRjaC1hbGwgdG8gdGhlIGxhc3QgZW50cnkgYnkgaXRzZWxmOyBnaXZlIGV2ZXJ5IGNhdGNoZXIgYSBOZXh0XFxcIlxcblxcbiMgW25hbWUsIHBhdGgsIHN0YXRlIG5hbWUsIGZpZWxkLCBpbmRleCwgZW50cnksIGVudHJpZXMgY291bnRdXFxuX3BmX3NmbnJjX2VudHJ5IGNvbnRhaW5zIFtuYW1lLCBwLCBzbmFtZSwgZmllbGQsIGksIGUsIG5dIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0c29tZSBmaWVsZCBpbiBbXFxcIlJldHJ5XFxcIiwgXFxcIkNhdGNoXFxcIl1cXG5cXHRhcnIgOj0gb2JqZWN0LmdldChzdCwgZmllbGQsIG51bGwpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG4gOj0gY291bnQoYXJyKVxcblxcdHNvbWUgaSwgZSBpbiBhcnJcXG5cXHRpc19vYmplY3QoZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXJldHJ5LWNhdGNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1slZF1cXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgZmllbGQsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnICVzWyVkXSBoYXMgbm8gRXJyb3JFcXVhbHM7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVzZSBmaWVsZHMgYXJlIHJlcXVpcmVkOiBbRXJyb3JFcXVhbHNdXFxcXFxcXCJcXFwiLCBbc25hbWUsIGZpZWxkLCBpXSksXFxuXFx0X3BmX3NmbnJjX2ZpeCwgX3BmX3NmbnJjX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHNuYW1lLCBmaWVsZCwgaSwgZSwgX10gaW4gX3BmX3NmbnJjX2VudHJ5XFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKGUsIFxcXCJFcnJvckVxdWFsc1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1yZXRyeS1jYXRjaFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNbJWRdLkVycm9yRXF1YWxzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZpZWxkLCBpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyAlc1slZF0gaGFzIGFuIGVtcHR5IEVycm9yRXF1YWxzOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiLCBbc25hbWUsIGZpZWxkLCBpXSksXFxuXFx0X3BmX3NmbnJjX2ZpeCwgX3BmX3NmbnJjX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHNuYW1lLCBmaWVsZCwgaSwgZSwgX10gaW4gX3BmX3NmbnJjX2VudHJ5XFxuXFx0ZWUgOj0gb2JqZWN0LmdldChlLCBcXFwiRXJyb3JFcXVhbHNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGVlKVxcblxcdGNvdW50KGVlKSA9PSAwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1yZXRyeS1jYXRjaFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNbJWRdLkVycm9yRXF1YWxzXFxcIiwgW19wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksIGZpZWxkLCBpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyAlc1slZF0gbGlzdHMgU3RhdGVzLkFMTCB0b2dldGhlciB3aXRoIG90aGVyIGVycm9yIG5hbWVzOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogU3RhdGVzLkFMTCBtdXN0IGFwcGVhciBhbG9uZSBhbmQgYXQgZW5kIG9mIGxpc3RcXFxcXFxcIlxcXCIsIFtzbmFtZSwgZmllbGQsIGldKSxcXG5cXHRfcGZfc2ZucmNfZml4LCBfcGZfc2ZucmNfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgc25hbWUsIGZpZWxkLCBpLCBlLCBfXSBpbiBfcGZfc2ZucmNfZW50cnlcXG5cXHRlZSA6PSBvYmplY3QuZ2V0KGUsIFxcXCJFcnJvckVxdWFsc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoZWUpXFxuXFx0XFxcIlN0YXRlcy5BTExcXFwiIGluIGVlXFxuXFx0Y291bnQoZWUpID4gMVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcmV0cnktY2F0Y2hcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzWyVkXS5FcnJvckVxdWFsc1xcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBmaWVsZCwgaV0pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgJXNbJWRdIGNhdGNoZXMgU3RhdGVzLkFMTCBidXQgaXMgbm90IHRoZSBsYXN0IGVudHJ5ICglZCBlbnRyaWVzKTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IFN0YXRlcy5BTEwgbXVzdCBhcHBlYXIgYWxvbmUgYW5kIGF0IGVuZCBvZiBsaXN0XFxcXFxcXCJcXFwiLCBbc25hbWUsIGZpZWxkLCBpLCBuXSksXFxuXFx0X3BmX3NmbnJjX2ZpeCwgX3BmX3NmbnJjX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHNuYW1lLCBmaWVsZCwgaSwgZSwgbl0gaW4gX3BmX3NmbnJjX2VudHJ5XFxuXFx0ZWUgOj0gb2JqZWN0LmdldChlLCBcXFwiRXJyb3JFcXVhbHNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGVlKVxcblxcdFxcXCJTdGF0ZXMuQUxMXFxcIiBpbiBlZVxcblxcdGkgPCBuIC0gMVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcmV0cnktY2F0Y2hcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNhdGNoWyVkXVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBDYXRjaFslZF0gaGFzIG5vIE5leHQ7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVzZSBmaWVsZHMgYXJlIHJlcXVpcmVkOiBbTmV4dF1cXFxcXFxcIlxcXCIsIFtzbmFtZSwgaV0pLFxcblxcdF9wZl9zZm5yY19maXgsIF9wZl9zZm5yY191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzbmFtZSwgZmllbGQsIGksIGUsIF9dIGluIF9wZl9zZm5yY19lbnRyeVxcblxcdGZpZWxkID09IFxcXCJDYXRjaFxcXCJcXG5cXHRub3QgX3BmX3NmbmxpYl9oYXMoZSwgXFxcIk5leHRcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtcmV0cnktY2F0Y2hcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJldHJ5WyVkXS5KaXR0ZXJTdHJhdGVneVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLCBpXSksXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBSZXRyeVslZF0gSml0dGVyU3RyYXRlZ3kgJyVzJyBpcyBub3QgTk9ORSBvciBGVUxMOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBbTk9ORSwgRlVMTF1cXFxcXFxcIlxcXCIsIFtzbmFtZSwgaSwgal0pLFxcblxcdF9wZl9zZm5yY19maXgsIF9wZl9zZm5yY191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzbmFtZSwgZmllbGQsIGksIGUsIF9dIGluIF9wZl9zZm5yY19lbnRyeVxcblxcdGZpZWxkID09IFxcXCJSZXRyeVxcXCJcXG5cXHRqIDo9IG9iamVjdC5nZXQoZSwgXFxcIkppdHRlclN0cmF0ZWd5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoailcXG5cXHRub3QgaiBpbiB7XFxcIk5PTkVcXFwiLCBcXFwiRlVMTFxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1zdGF0ZS1maWVsZHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFTTCBmaWVsZHMgYXJlIHBlciBzdGF0ZSB0eXBlOiBhIGtub3duIGZpZWxkIHBsYWNlZCBvbiBhIHR5cGUgdGhhdCBkb2VzIG5vdCBhY2NlcHQgaXQgKFJldHJ5IG9uIFBhc3MsIEVuZCBvbiBDaG9pY2UsIE5leHQgb24gRmFpbCwgLi4uKSBmYWlscyBjcmVhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuZmxkX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zdGF0ZW1hY2hpbmUtc3RydWN0dXJlLmh0bWxcXFwiXFxuXFxuX3BmX3NmbmZsZF9maXggOj0gXFxcIlJlbW92ZSB0aGUgZmllbGQgb3IgbW92ZSB0aGUgbG9naWMgdG8gYSBzdGF0ZSB0eXBlIHRoYXQgc3VwcG9ydHMgaXQgKHNlZSB0aGUgQVNMIHN0YXRlIHBhZ2VzKVxcXCJcXG5cXG4jIE1lYXN1cmVkIHdpdGggVmFsaWRhdGVTdGF0ZU1hY2hpbmVEZWZpbml0aW9uIG9uIDIwMjYtMDktMDUgKDggdHlwZXMgeCA1MFxcbiMgZmllbGRzKS4gVHlwZS9Db21tZW50L1F1ZXJ5TGFuZ3VhZ2UgYXJlIGFjY2VwdGVkIGV2ZXJ5d2hlcmUuXFxuX3BmX3NmbmZsZF9jb21tb24gOj0ge1xcXCJUeXBlXFxcIiwgXFxcIkNvbW1lbnRcXFwiLCBcXFwiUXVlcnlMYW5ndWFnZVxcXCJ9XFxuXFxuX3BmX3NmbmZsZF9hbGxvd2VkIDo9IHtcXG5cXHRcXFwiUGFzc1xcXCI6IHtcXFwiSW5wdXRQYXRoXFxcIiwgXFxcIk91dHB1dFBhdGhcXFwiLCBcXFwiUmVzdWx0XFxcIiwgXFxcIlJlc3VsdFBhdGhcXFwiLCBcXFwiUGFyYW1ldGVyc1xcXCIsIFxcXCJPdXRwdXRcXFwiLCBcXFwiQXNzaWduXFxcIiwgXFxcIk5leHRcXFwiLCBcXFwiRW5kXFxcIn0sXFxuXFx0XFxcIlRhc2tcXFwiOiB7XFxcIklucHV0UGF0aFxcXCIsIFxcXCJPdXRwdXRQYXRoXFxcIiwgXFxcIlJlc3VsdFBhdGhcXFwiLCBcXFwiUGFyYW1ldGVyc1xcXCIsIFxcXCJBcmd1bWVudHNcXFwiLCBcXFwiT3V0cHV0XFxcIiwgXFxcIkFzc2lnblxcXCIsIFxcXCJSZXNvdXJjZVxcXCIsIFxcXCJDcmVkZW50aWFsc1xcXCIsIFxcXCJSZXN1bHRTZWxlY3RvclxcXCIsIFxcXCJSZXRyeVxcXCIsIFxcXCJDYXRjaFxcXCIsIFxcXCJUaW1lb3V0U2Vjb25kc1xcXCIsIFxcXCJUaW1lb3V0U2Vjb25kc1BhdGhcXFwiLCBcXFwiSGVhcnRiZWF0U2Vjb25kc1xcXCIsIFxcXCJIZWFydGJlYXRTZWNvbmRzUGF0aFxcXCIsIFxcXCJOZXh0XFxcIiwgXFxcIkVuZFxcXCJ9LFxcblxcdFxcXCJXYWl0XFxcIjoge1xcXCJJbnB1dFBhdGhcXFwiLCBcXFwiT3V0cHV0UGF0aFxcXCIsIFxcXCJPdXRwdXRcXFwiLCBcXFwiQXNzaWduXFxcIiwgXFxcIlNlY29uZHNcXFwiLCBcXFwiVGltZXN0YW1wXFxcIiwgXFxcIlNlY29uZHNQYXRoXFxcIiwgXFxcIlRpbWVzdGFtcFBhdGhcXFwiLCBcXFwiTmV4dFxcXCIsIFxcXCJFbmRcXFwifSxcXG5cXHRcXFwiUGFyYWxsZWxcXFwiOiB7XFxcIklucHV0UGF0aFxcXCIsIFxcXCJPdXRwdXRQYXRoXFxcIiwgXFxcIlJlc3VsdFBhdGhcXFwiLCBcXFwiUGFyYW1ldGVyc1xcXCIsIFxcXCJBcmd1bWVudHNcXFwiLCBcXFwiT3V0cHV0XFxcIiwgXFxcIkFzc2lnblxcXCIsIFxcXCJSZXN1bHRTZWxlY3RvclxcXCIsIFxcXCJSZXRyeVxcXCIsIFxcXCJDYXRjaFxcXCIsIFxcXCJCcmFuY2hlc1xcXCIsIFxcXCJOZXh0XFxcIiwgXFxcIkVuZFxcXCJ9LFxcblxcdFxcXCJNYXBcXFwiOiB7XFxcIklucHV0UGF0aFxcXCIsIFxcXCJPdXRwdXRQYXRoXFxcIiwgXFxcIlJlc3VsdFBhdGhcXFwiLCBcXFwiUGFyYW1ldGVyc1xcXCIsIFxcXCJPdXRwdXRcXFwiLCBcXFwiQXNzaWduXFxcIiwgXFxcIlJlc3VsdFNlbGVjdG9yXFxcIiwgXFxcIlJldHJ5XFxcIiwgXFxcIkNhdGNoXFxcIiwgXFxcIkl0ZW1Qcm9jZXNzb3JcXFwiLCBcXFwiSXRlcmF0b3JcXFwiLCBcXFwiSXRlbXNQYXRoXFxcIiwgXFxcIkl0ZW1zXFxcIiwgXFxcIkl0ZW1TZWxlY3RvclxcXCIsIFxcXCJJdGVtUmVhZGVyXFxcIiwgXFxcIkl0ZW1CYXRjaGVyXFxcIiwgXFxcIlJlc3VsdFdyaXRlclxcXCIsIFxcXCJNYXhDb25jdXJyZW5jeVxcXCIsIFxcXCJNYXhDb25jdXJyZW5jeVBhdGhcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VcXFwiLCBcXFwiVG9sZXJhdGVkRmFpbHVyZVBlcmNlbnRhZ2VQYXRoXFxcIiwgXFxcIlRvbGVyYXRlZEZhaWx1cmVDb3VudFxcXCIsIFxcXCJUb2xlcmF0ZWRGYWlsdXJlQ291bnRQYXRoXFxcIiwgXFxcIkxhYmVsXFxcIiwgXFxcIk5leHRcXFwiLCBcXFwiRW5kXFxcIn0sXFxuXFx0XFxcIkNob2ljZVxcXCI6IHtcXFwiSW5wdXRQYXRoXFxcIiwgXFxcIk91dHB1dFBhdGhcXFwiLCBcXFwiT3V0cHV0XFxcIiwgXFxcIkFzc2lnblxcXCIsIFxcXCJDaG9pY2VzXFxcIiwgXFxcIkRlZmF1bHRcXFwifSxcXG5cXHRcXFwiU3VjY2VlZFxcXCI6IHtcXFwiSW5wdXRQYXRoXFxcIiwgXFxcIk91dHB1dFBhdGhcXFwiLCBcXFwiT3V0cHV0XFxcIn0sXFxuXFx0XFxcIkZhaWxcXFwiOiB7XFxcIkVycm9yXFxcIiwgXFxcIkNhdXNlXFxcIiwgXFxcIkVycm9yUGF0aFxcXCIsIFxcXCJDYXVzZVBhdGhcXFwifSxcXG59XFxuXFxuX3BmX3NmbmZsZF9rbm93biA6PSB7ZiB8IHNvbWUgXywgZnMgaW4gX3BmX3NmbmZsZF9hbGxvd2VkOyBzb21lIGYgaW4gZnN9IHwgX3BmX3NmbmZsZF9jb21tb25cXG5cXG4jIHBvbnl0YWlsOiBvbmx5IGZpZWxkcyB0aGUgc2VydmljZSBhbHJlYWR5IGtub3dzIGFyZSBqdWRnZWQ7IGEgZmllbGQgdGhhdCBub1xcbiMgdHlwZSBhY2NlcHRzIGlzIGxlZnQgYWxvbmUgYmVjYXVzZSBpdCBtYXkgYmUgYSBuZXdlciBBU0wgZmVhdHVyZSByYXRoZXIgdGhhblxcbiMgYSB0eXBvIChhIGZhbHNlIHBvc2l0aXZlIGhlcmUgd291bGQgYmxvY2sgdmFsaWQgZGVwbG95cykuIENhc2UgdmFyaWFudHMgb2YgYVxcbiMga25vd24gZmllbGQgKEFTTCBpcyBjYXNlLXNlbnNpdGl2ZSkgYXJlIGp1ZGdlZCB0b28uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXN0YXRlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgZl0pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgKFR5cGUgJXMpIGhhcyBmaWVsZCAnJXMnLCB3aGljaCBTdGVwIEZ1bmN0aW9ucyBkb2VzIG5vdCBhY2NlcHQgb24gdGhhdCBzdGF0ZSB0eXBlOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogRmllbGQgJyVzJyBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLCBbc25hbWUsIHQsIGYsIGZdKSxcXG5cXHRfcGZfc2ZuZmxkX2ZpeCwgX3BmX3NmbmZsZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0dCA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiVHlwZVxcXCIsIG51bGwpXFxuXFx0YWxsb3dlZCA6PSBfcGZfc2ZuZmxkX2FsbG93ZWRbdF1cXG5cXHRzb21lIGYsIF8gaW4gc3RcXG5cXHRub3QgZiBpbiBfcGZfc2ZuZmxkX2NvbW1vblxcblxcdG5vdCBmIGluIGFsbG93ZWRcXG5cXHRmIGluIF9wZl9zZm5mbGRfa25vd25cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXN0YXRlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwgZl0pLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgaGFzIGZpZWxkICclcyc7IEFTTCBmaWVsZCBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUgKGRpZCB5b3UgbWVhbiAnJXMnPyksIGFuZCBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogRmllbGQgJyVzJyBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLCBbc25hbWUsIGYsIGssIGZdKSxcXG5cXHRfcGZfc2ZuZmxkX2ZpeCwgX3BmX3NmbmZsZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0c29tZSBmLCBfIGluIHN0XFxuXFx0bm90IGYgaW4gX3BmX3NmbmZsZF9rbm93blxcblxcdHNvbWUgayBpbiBfcGZfc2ZuZmxkX2tub3duXFxuXFx0bG93ZXIoaykgPT0gbG93ZXIoZilcXG59XFxuXFxuX3BmX3NmbmZsZF90b3AgOj0ge1xcXCJDb21tZW50XFxcIiwgXFxcIlF1ZXJ5TGFuZ3VhZ2VcXFwiLCBcXFwiU3RhcnRBdFxcXCIsIFxcXCJUaW1lb3V0U2Vjb25kc1xcXCIsIFxcXCJWZXJzaW9uXFxcIiwgXFxcIlN0YXRlc1xcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXN0YXRlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXNcXFwiLCBbX3BmX3NmbmxpYl9wcm9wKG5hbWUpLCBmXSksXFxuXFx0c3ByaW50ZihcXFwidG9wLWxldmVsIGZpZWxkICclcycgaXMgbm90IGFuIEFTTCBmaWVsZCAoZGlkIHlvdSBtZWFuICclcyc/KTsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IEZpZWxkICclcycgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIiwgW2YsIGssIGZdKSxcXG5cXHRfcGZfc2ZuZmxkX2ZpeCwgX3BmX3NmbmZsZF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRhc2wgOj0gX3BmX3NmbmxpYl9hc2wobmFtZSlcXG5cXHRzb21lIGYsIF8gaW4gYXNsXFxuXFx0bm90IGYgaW4gX3BmX3NmbmZsZF90b3BcXG5cXHRzb21lIGsgaW4gX3BmX3NmbmZsZF90b3BcXG5cXHRsb3dlcihrKSA9PSBsb3dlcihmKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtc3RhdGUtZmllbGRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5WZXJzaW9uXFxcIiwgW19wZl9zZm5saWJfcHJvcChuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIkFTTCBWZXJzaW9uICclcycgaXMgbm90IHN1cHBvcnRlZDsgdGhlIG9ubHkgYWNjZXB0ZWQgdmFsdWUgaXMgXFxcXFxcXCIxLjBcXFxcXFxcIiAoQ3JlYXRlU3RhdGVNYWNoaW5lOiBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogVmFsdWUgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBbMS4wXVxcXFxcXFwiKVxcXCIsIFt2XSksXFxuXFx0X3BmX3NmbmZsZF9maXgsIF9wZl9zZm5mbGRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0diA6PSBvYmplY3QuZ2V0KF9wZl9zZm5saWJfYXNsKG5hbWUpLCBcXFwiVmVyc2lvblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0diAhPSBcXFwiMS4wXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtdGVybWluYWwtc3RhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIEFTTCBzdGF0ZSBtYWNoaW5lIG5lZWRzIGF0IGxlYXN0IG9uZSB0ZXJtaW5hbCBzdGF0ZSAoRW5kOiB0cnVlLCBTdWNjZWVkIG9yIEZhaWwpIGF0IHRoZSB0b3AgbGV2ZWxcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbnRlcm1fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL3N0YXRlbWFjaGluZS1zdHJ1Y3R1cmUuaHRtbFxcXCJcXG5cXG5fcGZfc2ZudGVybV9maXggOj0gXFxcIk1hcmsgdGhlIGxhc3Qgc3RhdGUgd2l0aCBFbmQ6IHRydWUgb3IgZW5kIHdpdGggYSBTdWNjZWVkL0ZhaWwgc3RhdGVcXFwiXFxuXFxuX3BmX3NmbnRlcm1fb2sobmFtZSkgaWYge1xcblxcdHNvbWUgW24sIHAsIHMsIF9dIGluIF9wZl9zZm5saWJfc2NvcGVzXFxuXFx0biA9PSBuYW1lXFxuXFx0cCA9PSBcXFwiU3RhdGVzXFxcIlxcblxcdHNvbWUgXywgc3QgaW4gc1xcblxcdGlzX29iamVjdChzdClcXG5cXHRvYmplY3QuZ2V0KHN0LCBcXFwiRW5kXFxcIiwgZmFsc2UpID09IHRydWVcXG59XFxuXFxuX3BmX3NmbnRlcm1fb2sobmFtZSkgaWYge1xcblxcdHNvbWUgW24sIHAsIHMsIF9dIGluIF9wZl9zZm5saWJfc2NvcGVzXFxuXFx0biA9PSBuYW1lXFxuXFx0cCA9PSBcXFwiU3RhdGVzXFxcIlxcblxcdHNvbWUgXywgc3QgaW4gc1xcblxcdGlzX29iamVjdChzdClcXG5cXHRvYmplY3QuZ2V0KHN0LCBcXFwiVHlwZVxcXCIsIG51bGwpIGluIHtcXFwiU3VjY2VlZFxcXCIsIFxcXCJGYWlsXFxcIn1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXRlcm1pbmFsLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZXNcXFwiLCBbX3BmX3NmbmxpYl9wcm9wKG5hbWUpXSksXFxuXFx0XFxcIm5vIHRvcC1sZXZlbCBzdGF0ZSBpcyB0ZXJtaW5hbCAoRW5kOiB0cnVlLCBTdWNjZWVkIG9yIEZhaWwpOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIk1JU1NJTkdfRU5EX1NUQVRFOiBXb3JrZmxvdyBoYXMgbm8gdGVybWluYWwgc3RhdGVcXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3NmbnRlcm1fZml4LCBfcGZfc2ZudGVybV91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBfXSBpbiBfcGZfc2ZubGliX3Njb3Blc1xcblxcdHAgPT0gXFxcIlN0YXRlc1xcXCJcXG5cXHRub3QgX3BmX3NmbnRlcm1fb2sobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLXVucmVhY2hhYmxlLXN0YXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFdmVyeSBBU0wgc3RhdGUgbXVzdCBiZSByZWFjaGFibGU6IGEgc3RhdGUgdGhhdCBpcyBub3QgU3RhcnRBdCBhbmQgdGhhdCBubyBvdGhlciBzdGF0ZSB0cmFuc2l0aW9ucyB0byBmYWlscyBjcmVhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZudW5yX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zdGF0ZW1hY2hpbmUtc3RydWN0dXJlLmh0bWxcXFwiXFxuXFxuX3BmX3NmbnVucl9maXggOj0gXFxcIlRyYW5zaXRpb24gdG8gdGhlIHN0YXRlIGZyb20gYW5vdGhlciBzdGF0ZSAoTmV4dC9EZWZhdWx0L0Nob2ljZXMvQ2F0Y2gpIG9yIHJlbW92ZSBpdFxcXCJcXG5cXG4jIFtuYW1lLCBzY29wZSBwYXRoLCBmcm9tIHN0YXRlLCB0YXJnZXQgc3RhdGVdXFxuX3BmX3NmbnVucl9lZGdlIGNvbnRhaW5zIFtuYW1lLCBwLCBzbmFtZSwgdGFyZ2V0XSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHNvbWUga2V5IGluIFtcXFwiTmV4dFxcXCIsIFxcXCJEZWZhdWx0XFxcIl1cXG5cXHR0YXJnZXQgOj0gb2JqZWN0LmdldChzdCwga2V5LCBudWxsKVxcblxcdGlzX3N0cmluZyh0YXJnZXQpXFxufVxcblxcbl9wZl9zZm51bnJfZWRnZSBjb250YWlucyBbbmFtZSwgcCwgc25hbWUsIHRhcmdldF0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaW4gX3BmX3NmbmxpYl9zdGF0ZXNcXG5cXHRzb21lIGZpZWxkIGluIFtcXFwiQ2hvaWNlc1xcXCIsIFxcXCJDYXRjaFxcXCJdXFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoc3QsIGZpZWxkLCBbXSlcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0c29tZSBjIGluIGFyclxcblxcdGlzX29iamVjdChjKVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KGMsIFxcXCJOZXh0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcbn1cXG5cXG5fcGZfc2ZudW5yX2luKG5hbWUsIHAsIHQpIGlmIHtcXG5cXHRzb21lIFtuMiwgcDIsIGZyb20sIHQyXSBpbiBfcGZfc2ZudW5yX2VkZ2VcXG5cXHRuMiA9PSBuYW1lXFxuXFx0cDIgPT0gcFxcblxcdHQyID09IHRcXG5cXHRmcm9tICE9IHRcXG59XFxuXFxuIyBwb255dGFpbDogc291bmQgc3Vic2V0IG9mIHRoZSBzZXJ2aWNlJ3MgcmVhY2hhYmlsaXR5IGNoZWNrIOKAlCBhIHN0YXRlIHdpdGggbm9cXG4jIGluY29taW5nIGVkZ2UgZnJvbSBhbm90aGVyIHN0YXRlIGlzIGNlcnRhaW5seSB1bnJlYWNoYWJsZSwgYnV0IGEgY3ljbGUgb2ZcXG4jIG9ycGhhbnMgcGFzc2VzIChuZWVkcyBncmFwaC5yZWFjaGFibGUsIHdoaWNoIHRoZSBlbmdpbmUgbGFja3MpLiBBIGRhbmdsaW5nXFxuIyBTdGFydEF0IGlzIGxlZnQgdG8gZW5naW5lIHJ1bGUgRTM2MDEuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXVucmVhY2hhYmxlLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgaXMgbm90IHJlYWNoYWJsZTogaXQgaXMgbm90IHRoZSBTdGFydEF0ICgnJXMnKSBhbmQgbm8gb3RoZXIgc3RhdGUgaW4gaXRzIFN0YXRlcyBibG9jayB0cmFuc2l0aW9ucyB0byBpdDsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJNSVNTSU5HX1RSQU5TSVRJT05fVEFSR0VUOiBTdGF0ZSBcXFxcXFxcXFxcXFxcXFwiJXNcXFxcXFxcXFxcXFxcXFwiIGlzIG5vdCByZWFjaGFibGUuXFxcXFxcXCJcXFwiLCBbc25hbWUsIHNhLCBzbmFtZV0pLFxcblxcdF9wZl9zZm51bnJfZml4LCBfcGZfc2ZudW5yX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIHNhXSBpbiBfcGZfc2ZubGliX3Njb3Blc1xcblxcdGlzX3N0cmluZyhzYSlcXG5cXHRzYSBpbiBvYmplY3Qua2V5cyhzKVxcblxcdHNvbWUgc25hbWUsIHN0IGluIHNcXG5cXHRpc19vYmplY3Qoc3QpXFxuXFx0c25hbWUgIT0gc2FcXG5cXHRub3QgX3BmX3NmbnVucl9pbihuYW1lLCBwLCBzbmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLXdhaXQtdGltaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFdhaXQgc3RhdGUgY2FycmllcyBleGFjdGx5IG9uZSBvZiBTZWNvbmRzIC8gVGltZXN0YW1wIC8gU2Vjb25kc1BhdGggLyBUaW1lc3RhbXBQYXRoLCBhbmQgYSBsaXRlcmFsIFRpbWVzdGFtcCBpcyBSRkMzMzM5IHdpdGggVCBhbmQgWiAoYWxsIGZvdXIgYWJzZW50IGlzIGNvdmVyZWQgYnkgZW5naW5lIHJ1bGUgRTM2MDEpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm53YWl0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zdGF0ZS13YWl0Lmh0bWxcXFwiXFxuXFxuX3BmX3NmbndhaXRfZml4IDo9IFxcXCJLZWVwIG9uZSB0aW1pbmcgZmllbGQ7IHdyaXRlIFRpbWVzdGFtcCBhcyAyMDMwLTAxLTAxVDAwOjAwOjAwWlxcXCJcXG5cXG5fcGZfc2Zud2FpdF9maWVsZHMgOj0ge1xcXCJTZWNvbmRzXFxcIiwgXFxcIlRpbWVzdGFtcFxcXCIsIFxcXCJTZWNvbmRzUGF0aFxcXCIsIFxcXCJUaW1lc3RhbXBQYXRoXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtd2FpdC10aW1pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdF9wZl9zZm5saWJfcGF0aChuYW1lLCBwLCBzbmFtZSksXFxuXFx0c3ByaW50ZihcXFwiV2FpdCBzdGF0ZSAnJXMnIHNldHMgJWQgb2YgU2Vjb25kcy9UaW1lc3RhbXAvU2Vjb25kc1BhdGgvVGltZXN0YW1wUGF0aDsgZXhhY3RseSBvbmUgaXMgYWxsb3dlZCwgYW5kIENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6IFtTZWNvbmRzUGF0aCwgU2Vjb25kcywgVGltZXN0YW1wUGF0aCwgVGltZXN0YW1wXVxcXFxcXFwiXFxcIiwgW3NuYW1lLCBuXSksXFxuXFx0X3BmX3NmbndhaXRfZml4LCBfcGZfc2Zud2FpdF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSA9PSBcXFwiV2FpdFxcXCJcXG5cXHRuIDo9IGNvdW50KHtrIHwgc29tZSBrLCBfIGluIHN0OyBrIGluIF9wZl9zZm53YWl0X2ZpZWxkc30pXFxuXFx0biA+IDFcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLXdhaXQtdGltaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5UaW1lc3RhbXBcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIldhaXQgc3RhdGUgJyVzJyBUaW1lc3RhbXAgJyVzJyBpcyBub3QgYW4gUkZDMzMzOSB0aW1lc3RhbXAgd2l0aCBhbiB1cHBlcmNhc2UgVCBzZXBhcmF0b3IgYW5kIFogc3VmZml4OyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIlNDSEVNQV9WQUxJREFUSU9OX0ZBSUxFRDogU3RyaW5nIGRvZXMgbm90IG1hdGNoIFJGQzMzMzkgdGltZXN0YW1wXFxcXFxcXCJcXFwiLCBbc25hbWUsIHRzXSksXFxuXFx0X3BmX3NmbndhaXRfZml4LCBfcGZfc2Zud2FpdF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSA9PSBcXFwiV2FpdFxcXCJcXG5cXHR0cyA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiVGltZXN0YW1wXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodHMpXFxuXFx0bm90IHN0YXJ0c3dpdGgodHMsIFxcXCJ7JVxcXCIpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOV17NH0tWzAtOV17Mn0tWzAtOV17Mn1UWzAtOV17Mn06WzAtOV17Mn06WzAtOV17Mn0oWy5dWzAtOV0rKT9aJFxcXCIsIHRzKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1kZWZpbml0aW9uLWV4YWN0bHktb25lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHN0YXRlIG1hY2hpbmUgY2FycmllcyBleGFjdGx5IG9uZSBvZiBEZWZpbml0aW9uLCBEZWZpbml0aW9uU3RyaW5nIG9yIERlZmluaXRpb25TM0xvY2F0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5kZWZfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1zdGVwZnVuY3Rpb25zLXN0YXRlbWFjaGluZS5odG1sXFxcIlxcblxcbl9wZl9zZm5kZWZfZml4IDo9IFxcXCJLZWVwIG9uZSBvZiBEZWZpbml0aW9uIC8gRGVmaW5pdGlvblN0cmluZyAvIERlZmluaXRpb25TM0xvY2F0aW9uXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWRlZmluaXRpb24tZXhhY3RseS1vbmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCBvZiBEZWZpbml0aW9uIC8gRGVmaW5pdGlvblN0cmluZyAvIERlZmluaXRpb25TM0xvY2F0aW9uIGFyZSBzZXQ7IGV4YWN0bHkgb25lIGlzIHJlcXVpcmVkLCBhbmQgdGhlIHJlc291cmNlIGhhbmRsZXIgZmFpbHMgd2l0aCBcXFxcXFxcIlByb3BlcnR5IHZhbGlkYXRpb24gZmFpbGVkLiBQbGVhc2UgdXNlIG9uZSBvZiBbRGVmaW5pdGlvblMzTG9jYXRpb25dLCBbRGVmaW5pdGlvblN0cmluZ10gb3IgW0RlZmluaXRpb25dLlxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRfcGZfc2ZuZGVmX2ZpeCwgX3BmX3NmbmRlZl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRuIDo9IGNvdW50KHtrIHwgc29tZSBrIGluIFtcXFwiRGVmaW5pdGlvblxcXCIsIFxcXCJEZWZpbml0aW9uU3RyaW5nXFxcIiwgXFxcIkRlZmluaXRpb25TM0xvY2F0aW9uXFxcIl07IF9wZl9zZm5saWJfaGFzKHByb3BzLCBrKX0pXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWVuY3J5cHRpb24tY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogQ1VTVE9NRVJfTUFOQUdFRF9LTVNfS0VZIHJlcXVpcmVzIEttc0tleUlkLCBhbmQgQVdTX09XTkVEX0tFWSByZWplY3RzIEttc0tleUlkIGFuZCBLbXNEYXRhS2V5UmV1c2VQZXJpb2RTZWNvbmRzIChzdGF0ZSBtYWNoaW5lcyBhbmQgYWN0aXZpdGllcylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCIsXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6QWN0aXZpdHlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuZW5jX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0VuY3J5cHRpb25Db25maWd1cmF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX3NmbmVuY19maXggOj0gXFxcIlBhaXIgQ1VTVE9NRVJfTUFOQUdFRF9LTVNfS0VZIHdpdGggYSBLbXNLZXlJZDsgbGVhdmUgS21zS2V5SWQvS21zRGF0YUtleVJldXNlUGVyaW9kU2Vjb25kcyBvdXQgZm9yIEFXU19PV05FRF9LRVlcXFwiXFxuXFxuX3BmX3NmbmVuY19yZXMgY29udGFpbnMgW25hbWUsIGVuYywgdF0gaWYge1xcblxcdHNvbWUgcnQgaW4gW1xcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIsIFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5XFxcIl1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZW5jIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJFbmNyeXB0aW9uQ29uZmlndXJhdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGVuYylcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24uVHlwZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHQpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWVuY3J5cHRpb24tY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FbmNyeXB0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkVuY3J5cHRpb25Db25maWd1cmF0aW9uLlR5cGUgaXMgQ1VTVE9NRVJfTUFOQUdFRF9LTVNfS0VZIHdpdGhvdXQgYSBLbXNLZXlJZDsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IE11c3Qgc2V0IGEgdmFsaWQga21zS2V5SWQuXFxcXFxcXCJcXFwiLFxcblxcdF9wZl9zZm5lbmNfZml4LCBfcGZfc2ZuZW5jX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIGVuYywgdF0gaW4gX3BmX3NmbmVuY19yZXNcXG5cXHR0ID09IFxcXCJDVVNUT01FUl9NQU5BR0VEX0tNU19LRVlcXFwiXFxuXFx0bm90IF9wZl9zZm5saWJfaGFzKGVuYywgXFxcIkttc0tleUlkXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tZW5jcnlwdGlvbi1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24uJXNcXFwiLCBbZl0pLFxcblxcdHNwcmludGYoXFxcIkVuY3J5cHRpb25Db25maWd1cmF0aW9uLlR5cGUgaXMgQVdTX09XTkVEX0tFWSBidXQgJXMgaXMgc2V0OyB0aGUgY3JlYXRlIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogQ3VzdG9tICVzIGlzIG5vdCBhbGxvd2VkIHdoZW4gc2VsZWN0aW5nIEFXU19PV05FRF9LRVkuXFxcXFxcXCJcXFwiLCBbZiwgbGNdKSxcXG5cXHRfcGZfc2ZuZW5jX2ZpeCwgX3BmX3NmbmVuY191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBlbmMsIHRdIGluIF9wZl9zZm5lbmNfcmVzXFxuXFx0dCA9PSBcXFwiQVdTX09XTkVEX0tFWVxcXCJcXG5cXHRzb21lIFtmLCBsY10gaW4gX3BmX3NmbmVuY19vd25lZFxcblxcdF9wZl9zZm5saWJfaGFzKGVuYywgZilcXG59XFxuXFxuX3BmX3NmbmVuY19vd25lZCBjb250YWlucyBbXFxcIkttc0tleUlkXFxcIiwgXFxcImttc0tleUlkXFxcIl1cXG5cXG5fcGZfc2ZuZW5jX293bmVkIGNvbnRhaW5zIFtcXFwiS21zRGF0YUtleVJldXNlUGVyaW9kU2Vjb25kc1xcXCIsIFxcXCJrbXNEYXRhS2V5UmV1c2VQZXJpb2RTZWNvbmRzXFxcIl1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1leHByZXNzLXVuc3VwcG9ydGVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBFWFBSRVNTIHN0YXRlIG1hY2hpbmUgY2Fubm90IHVzZSAuc3luYyAvIC53YWl0Rm9yVGFza1Rva2VuIGludGVncmF0aW9ucywgQWN0aXZpdHkgcmVzb3VyY2VzLCBvciBEaXN0cmlidXRlZCBNYXAgKGF0IGFueSBuZXN0aW5nIGxldmVsKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuZXhfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2Nob29zaW5nLXdvcmtmbG93LXR5cGUuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuZXhfZml4IDo9IFxcXCJTd2l0Y2ggdGhlIHN0YXRlIG1hY2hpbmUgdG8gU1RBTkRBUkQsIG9yIHVzZSBSZXF1ZXN0LVJlc3BvbnNlIGludGVncmF0aW9ucyBhbmQgSW5saW5lIE1hcCBpbiB0aGUgRXhwcmVzcyB3b3JrZmxvd1xcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1leHByZXNzLXVuc3VwcG9ydGVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZXNvdXJjZVxcXCIsIFtfcGZfc2ZubGliX3BhdGgobmFtZSwgcCwgc25hbWUpXSksXFxuXFx0c3ByaW50ZihcXFwiRVhQUkVTUyBzdGF0ZSBtYWNoaW5lOiBUYXNrIHN0YXRlICclcycgUmVzb3VyY2UgJyVzJyB1c2VzIGEgJXMgaW50ZWdyYXRpb24gcGF0dGVybjsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJTQ0hFTUFfVkFMSURBVElPTl9GQUlMRUQ6IEV4cHJlc3Mgc3RhdGUgbWFjaGluZSBkb2VzIG5vdCBzdXBwb3J0ICclcycgc2VydmljZSBpbnRlZ3JhdGlvblxcXFxcXFwiXFxcIiwgW3NuYW1lLCByZXMsIHBhdCwgcGF0XSksXFxuXFx0X3BmX3NmbmV4X2ZpeCwgX3BmX3NmbmV4X3VybCkgaWYge1xcblxcdF9wZl9zZm5saWJfdHlwZShuYW1lKSA9PSBcXFwiRVhQUkVTU1xcXCJcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3RdIGluIF9wZl9zZm5saWJfc3RhdGVzXFxuXFx0b2JqZWN0LmdldChzdCwgXFxcIlR5cGVcXFwiLCBudWxsKSA9PSBcXFwiVGFza1xcXCJcXG5cXHRyZXMgOj0gb2JqZWN0LmdldChzdCwgXFxcIlJlc291cmNlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmVzKVxcblxcdHNvbWUgcGF0IGluIFtcXFwiLnN5bmNcXFwiLCBcXFwiLndhaXRGb3JUYXNrVG9rZW5cXFwiXVxcblxcdHJlZ2V4Lm1hdGNoKHNwcmludGYoXFxcIlslc10oOjIpPyRcXFwiLCBbcGF0XSksIHJlcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tZXhwcmVzcy11bnN1cHBvcnRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUmVzb3VyY2VcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKV0pLFxcblxcdHNwcmludGYoXFxcIkVYUFJFU1Mgc3RhdGUgbWFjaGluZTogVGFzayBzdGF0ZSAnJXMnIHRhcmdldHMgYW4gQWN0aXZpdHk7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBFeHByZXNzIHN0YXRlIG1hY2hpbmUgZG9lcyBub3Qgc3VwcG9ydCBBY3Rpdml0eSBBUk5cXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5leF9maXgsIF9wZl9zZm5leF91cmwpIGlmIHtcXG5cXHRfcGZfc2ZubGliX3R5cGUobmFtZSkgPT0gXFxcIkVYUFJFU1NcXFwiXFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHJlcyA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiUmVzb3VyY2VcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyZXMpXFxuXFx0cmVnZXgubWF0Y2goXFxcIl5hcm46W146XSs6c3RhdGVzOlteOl0rOlteOl0rOmFjdGl2aXR5OlxcXCIsIHJlcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tZXhwcmVzcy11bnN1cHBvcnRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXMuUHJvY2Vzc29yQ29uZmlnLk1vZGVcXFwiLCBbX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwiRVhQUkVTUyBzdGF0ZSBtYWNoaW5lOiBNYXAgc3RhdGUgJyVzJyBydW5zIGluIERJU1RSSUJVVEVEIG1vZGU7IENyZWF0ZVN0YXRlTWFjaGluZSBmYWlscyB3aXRoIFxcXFxcXFwiU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEOiBUaGUgZmllbGQgJ01vZGUnIHdpdGggdmFsdWUgJ0RJU1RSSUJVVEVEJyBpcyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnRVhQUkVTUycgc3RhdGUgbWFjaGluZXNcXFxcXFxcIlxcXCIsIFtzbmFtZV0pLFxcblxcdF9wZl9zZm5leF9maXgsIF9wZl9zZm5leF91cmwpIGlmIHtcXG5cXHRfcGZfc2ZubGliX3R5cGUobmFtZSkgPT0gXFxcIkVYUFJFU1NcXFwiXFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdHNvbWUga2V5IGluIFtcXFwiSXRlbVByb2Nlc3NvclxcXCIsIFxcXCJJdGVyYXRvclxcXCJdXFxuXFx0cHJvYyA6PSBvYmplY3QuZ2V0KHN0LCBrZXksIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2MpXFxuXFx0b2JqZWN0LmdldChvYmplY3QuZ2V0KHByb2MsIFxcXCJQcm9jZXNzb3JDb25maWdcXFwiLCB7fSksIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIkRJU1RSSUJVVEVEXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1rbXMta2V5LXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24uS21zS2V5SWQgbXVzdCBiZSBhIGtleSBpbiB0aGUgZGVwbG95IHJlZ2lvbiAoc3RhdGUgbWFjaGluZXMgYW5kIGFjdGl2aXRpZXMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiLFxuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nmbmttc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvZW5jcnlwdGlvbi1hdC1yZXN0Lmh0bWxcXFwiXFxuXFxuX3BmX3Nmbmttc19maXggOj0gXFxcIlVzZSBhIEtNUyBrZXkgY3JlYXRlZCBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIHN0YXRlIG1hY2hpbmUgKEZuOjpHZXRBdHQgS2V5LkFybiBvZiBhIGtleSBpbiB0aGlzIHN0YWNrKVxcXCJcXG5cXG4jIFJlZ2lvbiBjb21wYXJpc29uIG5lZWRzIHRoZSBkZXBsb3kgcmVnaW9uLCB3aGljaCBvbmx5IHRoaXMgcGFjayBzZWVzXFxuIyAoZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBpbiBlbmZvcmNlIG1vZGU7IHRoZSBydWxlXFxuIyBza2lwcyB3aXRob3V0IGl0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1rbXMta2V5LXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24uS21zS2V5SWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkttc0tleUlkIGlzIGEga2V5IGluICclcycgYnV0IHRoZSBkZXBsb3kgcmVnaW9uIGlzICclcyc7IEtNUyByZWplY3RzIHRoZSBrZXkgYXQgY3JlYXRlIHRpbWUgd2l0aCBcXFxcXFxcIkludmFsaWRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogSW52YWxpZCBhcm4gJXNcXFxcXFxcIlxcXCIsIFtwYXJ0c1szXSwgcmVnaW9uLCBwYXJ0c1szXV0pLFxcblxcdF9wZl9zZm5rbXNfZml4LCBfcGZfc2Zua21zX3VybCkgaWYge1xcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdHNvbWUgcnQgaW4gW1xcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIsIFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5XFxcIl1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnQpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24uS21zS2V5SWRcXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzJdID09IFxcXCJrbXNcXFwiXFxuXFx0cGFydHNbM10gIT0gXFxcIlxcXCJcXG5cXHRwYXJ0c1szXSAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tbG9nZ2luZy1kZXN0aW5hdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTG9nZ2luZ0NvbmZpZ3VyYXRpb24gd2l0aCBMZXZlbCBvdGhlciB0aGFuIE9GRiBuZWVkcyBleGFjdGx5IG9uZSBEZXN0aW5hdGlvbnMgZW50cnkgY2FycnlpbmcgQ2xvdWRXYXRjaExvZ3NMb2dHcm91cC5Mb2dHcm91cEFybiwgYW5kIGEgbGl0ZXJhbCBBUk4gbXVzdCBiZSBhIENsb3VkV2F0Y2ggTG9ncyBsb2ctZ3JvdXAgQVJOIGVuZGluZyBpbiA6KlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZubG9nX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1zdGVwZnVuY3Rpb25zLXN0YXRlbWFjaGluZS1sb2dnaW5nY29uZmlndXJhdGlvbi5odG1sXFxcIlxcblxcbl9wZl9zZm5sb2dfZml4IDo9IFxcXCJSZWZlcmVuY2UgdGhlIGxvZyBncm91cCB3aXRoIEZuOjpHZXRBdHQgTG9nR3JvdXAuQXJuIChpdCBhbHJlYWR5IGVuZHMgaW4gOiopIGluIGEgc2luZ2xlIERlc3RpbmF0aW9ucyBlbnRyeVxcXCJcXG5cXG4jIEFuIGVtcHR5IERlc3RpbmF0aW9ucyBhcnJheSBpcyBzdG9wcGVkIGJ5IHRoZSBzY2hlbWEgKEYzMDMyIG1pbkl0ZW1zKTtcXG4jIHRoZSBhYnNlbnQtd2hpbGUtZW5hYmxlZCBhbmQgdHdvLWVudHJpZXMgY2FzZXMgYXJlIG5vdC5cXG5fcGZfc2ZubG9nX29uKG5hbWUpIGlmIHtcXG5cXHRsdmwgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2dnaW5nQ29uZmlndXJhdGlvbi5MZXZlbFxcXCIpXFxuXFx0aXNfc3RyaW5nKGx2bClcXG5cXHRsdmwgIT0gXFxcIk9GRlxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tbG9nZ2luZy1kZXN0aW5hdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTG9nZ2luZ0NvbmZpZ3VyYXRpb24uRGVzdGluYXRpb25zXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMb2dnaW5nQ29uZmlndXJhdGlvbiBoYXMgJWQgRGVzdGluYXRpb25zIGVudHJpZXMgd2hpbGUgTGV2ZWwgaXMgbm90IE9GRjsgZXhhY3RseSBvbmUgaXMgcmVxdWlyZWQsIGFuZCBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWRMb2dnaW5nQ29uZmlndXJhdGlvbjogTXVzdCBzcGVjaWZ5IGV4YWN0bHkgb25lIExvZyBEZXN0aW5hdGlvbi5cXFxcXFxcIlxcXCIsIFtuXSksXFxuXFx0X3BmX3NmbmxvZ19maXgsIF9wZl9zZm5sb2dfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0X3BmX3NmbmxvZ19vbihuYW1lKVxcblxcdG4gOj0gY291bnQoZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvZ2dpbmdDb25maWd1cmF0aW9uLkRlc3RpbmF0aW9uc1xcXCIpKVxcblxcdG4gIT0gMVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1sb2dnaW5nLWRlc3RpbmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvZ2dpbmdDb25maWd1cmF0aW9uLkRlc3RpbmF0aW9ucy4lZFxcXCIsIFtkLmluZGV4XSksXFxuXFx0XFxcImEgRGVzdGluYXRpb25zIGVudHJ5IGhhcyBubyBDbG91ZFdhdGNoTG9nc0xvZ0dyb3VwOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWRMb2dnaW5nQ29uZmlndXJhdGlvbjogTXVzdCBzZXQgdmFsaWQgQ2xvdWRXYXRjaCBMb2cgR3JvdXAgQVJOLlxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc2ZubG9nX2ZpeCwgX3BmX3NmbmxvZ191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRfcGZfc2ZubG9nX29uKG5hbWUpXFxuXFx0c29tZSBkIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2dnaW5nQ29uZmlndXJhdGlvbi5EZXN0aW5hdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdChkLnZhbHVlKVxcblxcdG5vdCBfcGZfc2ZubGliX2hhcyhkLnZhbHVlLCBcXFwiQ2xvdWRXYXRjaExvZ3NMb2dHcm91cFxcXCIpXFxufVxcblxcbl9wZl9zZm5sb2dfYXJuIGNvbnRhaW5zIFtuYW1lLCBpZHgsIGFybl0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcXFwiKVxcblxcdF9wZl9zZm5sb2dfb24obmFtZSlcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvZ2dpbmdDb25maWd1cmF0aW9uLkRlc3RpbmF0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGQudmFsdWUpXFxuXFx0YXJuIDo9IG9iamVjdC5nZXQob2JqZWN0LmdldChkLnZhbHVlLCBcXFwiQ2xvdWRXYXRjaExvZ3NMb2dHcm91cFxcXCIsIHt9KSwgXFxcIkxvZ0dyb3VwQXJuXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0aWR4IDo9IGQuaW5kZXhcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tbG9nZ2luZy1kZXN0aW5hdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2dnaW5nQ29uZmlndXJhdGlvbi5EZXN0aW5hdGlvbnMuJWQuQ2xvdWRXYXRjaExvZ3NMb2dHcm91cC5Mb2dHcm91cEFyblxcXCIsIFtpZHhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2dHcm91cEFybiAnJXMnIGlzIG5vdCBhIENsb3VkV2F0Y2ggTG9ncyBsb2ctZ3JvdXAgQVJOOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWRMb2dnaW5nQ29uZmlndXJhdGlvbjogUHJvdmlkZWQgQVJOIGlzIG5vdCBDbG91ZFdhdGNoIExvZ3MgTG9nIEdyb3VwIEFSTi5cXFxcXFxcIlxcXCIsIFthcm5dKSxcXG5cXHRfcGZfc2ZubG9nX2ZpeCwgX3BmX3NmbmxvZ191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBpZHgsIGFybl0gaW4gX3BmX3NmbmxvZ19hcm5cXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5hcm46W146XSs6bG9nczpbXjpdKjpbXjpdKjpsb2ctZ3JvdXA6XFxcIiwgYXJuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1sb2dnaW5nLWRlc3RpbmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvZ2dpbmdDb25maWd1cmF0aW9uLkRlc3RpbmF0aW9ucy4lZC5DbG91ZFdhdGNoTG9nc0xvZ0dyb3VwLkxvZ0dyb3VwQXJuXFxcIiwgW2lkeF0pLFxcblxcdHNwcmludGYoXFxcIkxvZ0dyb3VwQXJuICclcycgbGFja3MgdGhlIDoqIHF1YWxpZmllciAoRm46OkdldEF0dCBMb2dHcm91cC5Bcm4gaW5jbHVkZXMgaXQpOyBDcmVhdGVTdGF0ZU1hY2hpbmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWRMb2dnaW5nQ29uZmlndXJhdGlvbjogTG9nIEdyb3VwIEFSTiBtdXN0IGJlIHByb3ZpZGVkIHdpdGggJyonIHF1YWxpZmllci5cXFxcXFxcIlxcXCIsIFthcm5dKSxcXG5cXHRfcGZfc2ZubG9nX2ZpeCwgX3BmX3NmbmxvZ191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBpZHgsIGFybl0gaW4gX3BmX3NmbmxvZ19hcm5cXG5cXHRyZWdleC5tYXRjaChcXFwiXmFybjpbXjpdKzpsb2dzOlteOl0qOlteOl0qOmxvZy1ncm91cDpcXFwiLCBhcm4pXFxuXFx0bm90IGVuZHN3aXRoKGFybiwgXFxcIjoqXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tbG9nZ2luZy1uYW1lLWFzY2lpXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJXaXRoIENsb3VkV2F0Y2ggTG9ncyBsb2dnaW5nIGVuYWJsZWQgKExldmVsIG90aGVyIHRoYW4gT0ZGKSB0aGUgU3RhdGVNYWNoaW5lTmFtZSBtYXkgb25seSBjb250YWluIDAtOSwgQS1aLCBhLXosIC4gLSBhbmQgXyAobm9uLUFTQ0lJIG5hbWVzIGFyZSBhY2NlcHRlZCBvbmx5IHdpdGhvdXQgbG9nZ2luZylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NmbmxvZ25hbWVfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfQ3JlYXRlU3RhdGVNYWNoaW5lLmh0bWxcXFwiXFxuXFxuX3BmX3NmbmxvZ25hbWVfZml4IDo9IFxcXCJSZW5hbWUgdGhlIHN0YXRlIG1hY2hpbmUgdG8gWzAtOUEtWmEtei5fLV0rIG9yIHR1cm4gbG9nZ2luZyBvZmZcXFwiXFxuXFxuIyBUaGUgbmFtZSBpdHNlbGYgYWNjZXB0cyBub24tQVNDSUkgY2hhcmFjdGVycyAobWVhc3VyZWQ6ICfjg4bjgrnjg4gnIGNyZWF0ZXNcXG4jIGZpbmUpOyBpdCBpcyB0aGUgbG9nIGRlbGl2ZXJ5IHJlc291cmNlSWQgcGF0dGVybiBeWzAtOUEtWmEtei5cXFxcL1xcXFwtXzpdKyRcXG4jIChxdW90ZWQgdmVyYmF0aW0gZnJvbSB0aGUgc2VydmljZSBlcnJvcikgdGhhdCByZWplY3RzIGl0IG9uY2VcXG4jIExvZ2dpbmdDb25maWd1cmF0aW9uLkxldmVsIGlzIG5vdCBPRkYuIFRoZSBjbGFzcyBtaXJyb3JzIHRoYXQgcGF0dGVybjsgdGhlXFxuIyAvIGFuZCA6IGl0IGFkbWl0cyBhcmUgYWxyZWFkeSByZWplY3RlZCBieSB0aGUgbmFtZSBpdHNlbGYgKHBmLXNmbi1uYW1lLWNoYXJzZXQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWxvZ2dpbmctbmFtZS1hc2NpaVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU3RhdGVNYWNoaW5lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiU3RhdGVNYWNoaW5lTmFtZSAnJXMnIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSBbMC05QS1aYS16Ll8tXSB3aGlsZSBMb2dnaW5nQ29uZmlndXJhdGlvbi5MZXZlbCBpcyAlczsgQ3JlYXRlU3RhdGVNYWNoaW5lIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkTG9nZ2luZ0NvbmZpZ3VyYXRpb246IC4uLiBWYWx1ZSAnYXJuOi4uLjpzdGF0ZU1hY2hpbmU6JXMnIGF0ICdyZXNvdXJjZUlkJyBmYWlsZWQgdG8gc2F0aXNmeSBjb25zdHJhaW50OiBNZW1iZXIgbXVzdCBzYXRpc2Z5IHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuXFxcXFxcXCJcXFwiLCBbbiwgbHZsLCBuXSksXFxuXFx0X3BmX3NmbmxvZ25hbWVfZml4LCBfcGZfc2ZubG9nbmFtZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRsdmwgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2dnaW5nQ29uZmlndXJhdGlvbi5MZXZlbFxcXCIpXFxuXFx0aXNfc3RyaW5nKGx2bClcXG5cXHRsdmwgIT0gXFxcIk9GRlxcXCJcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU3RhdGVNYWNoaW5lTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOUEtWmEtei5fOi8tXSskXFxcIiwgbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tbmFtZS1jaGFyc2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGF0ZU1hY2hpbmVOYW1lIGFuZCBBY3Rpdml0eSBOYW1lIG1heSBub3QgY29udGFpbiB3aGl0ZXNwYWNlLCBicmFja2V0cyAoPCA+IHsgfSBbIF0pLCB3aWxkY2FyZHMgKD8gKiksIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgXFxcIiAjICUgXFxcXCBeIHwgfiBgICQgJiAsIDsgOiAvIG9yIGNvbnRyb2wgY2hhcmFjdGVycyAobm9uLUFTQ0lJIGxldHRlcnMgYXJlIGFjY2VwdGVkKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIixcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpBY3Rpdml0eVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5uYW1lX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9zZXJ2aWNlLXF1b3Rhcy5odG1sXFxcIlxcblxcbl9wZl9zZm5uYW1lX2ZpeCA6PSBcXFwiVXNlIGxldHRlcnMsIGRpZ2l0cywgLSBhbmQgXyBpbiB0aGUgbmFtZVxcXCJcXG5cXG4jIE1lYXN1cmVkIDIwMjYtMDktMDU6ICdteSBtYWNoaW5lJywgJ2EvYicgYW5kICdhPGI+JyBhcmUgcmVqZWN0ZWQgd2l0aFxcbiMgSW52YWxpZE5hbWU7ICfjg4bjgrnjg4gnIGlzIGFjY2VwdGVkIChzbyBubyBBU0NJSS1vbmx5IGNoZWNrIGhlcmUg4oCUIHNlZVxcbiMgcGYtc2ZuLWxvZ2dpbmctbmFtZS1hc2NpaSBmb3IgdGhlIGxvZ2dpbmcgY2FzZSkuIFRoZSBzY2hlbWEgY2FycmllcyBvbmx5XFxuIyB0aGUgODAtY2hhcmFjdGVyIG1heGltdW0gKEYzMDMzKS5cXG5fcGZfc2ZubmFtZV9iYWQgOj0gXFxcIltcXFxcXFxcXHM8Pnt9XFxcXFxcXFxbXFxcXFxcXFxdPypcXFxcXFxcIiMlXFxcXFxcXFxcXFxcXFxcXF58fmAkJiw7Oi9cXFxcXFxcXHgwMC1cXFxcXFxcXHgxZlxcXFxcXFxceDdmLVxcXFxcXFxceDlmXVxcXCJcXG5cXG5fcGZfc2ZubmFtZV9wcm9wIGNvbnRhaW5zIFtcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcXFwiLCBcXFwiUHJvcGVydGllcy5TdGF0ZU1hY2hpbmVOYW1lXFxcIl1cXG5cXG5fcGZfc2ZubmFtZV9wcm9wIGNvbnRhaW5zIFtcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpBY3Rpdml0eVxcXCIsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiXVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLW5hbWUtY2hhcnNldFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0cHJvcCxcXG5cXHRzcHJpbnRmKFxcXCJuYW1lICclcycgY29udGFpbnMgYSBjaGFyYWN0ZXIgU3RlcCBGdW5jdGlvbnMgcmVqZWN0cyAod2hpdGVzcGFjZSwgPCA+IHsgfSBbIF0gPyAqIFxcXFxcXFwiICMgJSUgXFxcXFxcXFwgXiB8IH4gYCAkICYgLCA7IDogLyBvciBhIGNvbnRyb2wgY2hhcmFjdGVyKTsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkTmFtZTogSW52YWxpZCBOYW1lOiAnJXMnXFxcXFxcXCJcXFwiLCBbbiwgbl0pLFxcblxcdF9wZl9zZm5uYW1lX2ZpeCwgX3BmX3Nmbm5hbWVfdXJsKSBpZiB7XFxuXFx0c29tZSBbcnQsIHByb3BdIGluIF9wZl9zZm5uYW1lX3Byb3BcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnQpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIHByb3ApXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0cmVnZXgubWF0Y2goX3BmX3Nmbm5hbWVfYmFkLCBuKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXRhZ3MtYXdzLXByZWZpeFwiLFxuICAgIFwic2VydmljZVwiOiBcInRhZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFnIGtleXMgbWF5IG5vdCB1c2UgdGhlIHJlc2VydmVkIGF3czogcHJlZml4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCIqXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUYWdzIHN1cnZpdmUgaW50byB0aGUgdGVtcGxhdGUgZnJvbSBldmVyeSBzY29wZSB0aGF0IGNhbGxlZCBUYWdzLm9mKCksIGFuZCB0aGVcXG4jIG1lcmdlIGhhcHBlbnMgaW4gY2ZuUHJvcGVydGllcyBhdCByZW5kZXIgdGltZSAtIGFmdGVyIHZhbGlkYXRlVHJlZSAtIHNvIG5vIEwxXFxuIyBvciBMMiB2YWxpZGF0aW9uIGNhbiBzZWUgdGhlIGZpbmFsIGtleSBzZXQuIEFwcGxpZXMgdG8gZXZlcnkgcmVzb3VyY2UgdHlwZS5cXG5fcGZfdGFnYXdzX2JhZCBjb250YWlucyBbbmFtZSwgaWR4LCBrZXldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gb2JqZWN0LmtleXMoaW5wdXQucmVzb3VyY2VzKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFnc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHQudmFsdWUpXFxuXFx0a2V5IDo9IG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIktleVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGtleSlcXG5cXHRzdGFydHN3aXRoKGxvd2VyKGtleSksIFxcXCJhd3M6XFxcIilcXG5cXHRpZHggOj0gdC5pbmRleFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXRhZ3MtYXdzLXByZWZpeFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYWdzLiVkLktleVxcXCIsIFtpZHhdKSxcXG5cXHRzcHJpbnRmKFxcXCJUYWcga2V5ICclcycgdXNlcyB0aGUgcmVzZXJ2ZWQgYXdzOiBwcmVmaXg7IEFXUyByZWplY3RzIHRoZSBjcmVhdGUgY2FsbCB3aXRoIFxcXFxcXFwiYXdzOiBwcmVmaXhlZCB0YWcga2V5IG5hbWVzIGFyZSBub3QgYWxsb3dlZCBmb3IgZXh0ZXJuYWwgdXNlLlxcXFxcXFwiXFxcIiwgW2tleV0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIHRhZyBrZXkgc28gaXQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhd3M6XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3RhZy1lZGl0b3IvbGF0ZXN0L3VzZXJndWlkZS90YWdnaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgaWR4LCBrZXldIGluIF9wZl90YWdhd3NfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtdGFncy1jb3VudC1tYXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJ0YWdzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVzb3VyY2UgbWF5IGNhcnJ5IGF0IG1vc3QgNTAgdGFnc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiKlwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIEFXUy13aWRlIGxpbWl0IGlzIDUwIHVzZXIgdGFncyBwZXIgcmVzb3VyY2UuIENvdW50ZWQgb24gdGhlIHJlbmRlcmVkXFxuIyB0ZW1wbGF0ZSwgd2hpY2ggaXMgdGhlIG9ubHkgcGxhY2UgdGhlIG1lcmdlZCBUYWdzLm9mKCkgcmVzdWx0IGV4aXN0cy5cXG5fcGZfdGFnY291bnRfYmFkIGNvbnRhaW5zIFtuYW1lLCBuXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIG9iamVjdC5rZXlzKGlucHV0LnJlc291cmNlcylcXG5cXHR0YWdzIDo9IGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYWdzXFxcIilcXG5cXHRuIDo9IGNvdW50KHRhZ3MpXFxuXFx0biA+IDUwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtdGFncy1jb3VudC1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRhZ3NcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIHRhZ3MgYXJlIGF0dGFjaGVkIHRvIHRoaXMgcmVzb3VyY2U7IEFXUyBhbGxvd3MgYXQgbW9zdCA1MCBwZXIgcmVzb3VyY2UgYW5kIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsIChcXFxcXFxcIk1vcmUgdGhhbiA1MCB0YWdzIHNwZWNpZmllZC5cXFxcXFxcIilcXFwiLCBbbl0pLFxcblxcdFxcXCJSZWR1Y2UgdGhlIHRhZyBzZXQgdG8gNTAgb3IgZmV3ZXIgLSByZW1lbWJlciB0aGF0IFRhZ3Mub2YoKSBhZGRzIHRhZ3MgZnJvbSBldmVyeSBlbmNsb3Npbmcgc2NvcGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdGFnLWVkaXRvci9sYXRlc3QvdXNlcmd1aWRlL3RhZ2dpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBuXSBpbiBfcGZfdGFnY291bnRfYmFkXFxufVxcblwiXG4gIH1cbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlZExpYkRhdGEge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ286IHN0cmluZztcbn1cblxuLyoqIFNoYXJlZCBoZWxwZXIgbW9kdWxlcyAocnVsZXMvX2xpYikuIEFsd2F5cyBsb2FkZWQgYmVmb3JlIHRoZSBydWxlcy4gKi9cbmV4cG9ydCBjb25zdCBCVU5ETEVEX0xJQlM6IEJ1bmRsZWRMaWJEYXRhW10gPSBbXG4gIHtcbiAgICBcIm5hbWVcIjogXCJfbGliL3NmblwiLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTaGFyZWQgaGVscGVycyBmb3IgdGhlIFN0ZXAgRnVuY3Rpb25zIHJ1bGVzIChydWxlcy9zdGVwZnVuY3Rpb25zL3BmLXNmbi0qKS5cXG4jIExvYWRlZCBhaGVhZCBvZiBldmVyeSBydWxlIChCVU5ETEVEX0xJQlMpOyBuZXZlciBlbWl0cyBkaWFnbm9zdGljcy5cXG4jXFxuIyBBIGRlZmluaXRpb24gYXJyaXZlcyBlaXRoZXIgYXMgRGVmaW5pdGlvblN0cmluZyAoSlNPTiB0ZXh0IOKAlCBGbjo6Sm9pbiAvXFxuIyBGbjo6U3ViIG92ZXIgcHNldWRvIHBhcmFtZXRlcnMgcmVzb2x2ZSgpIGZsYXR0ZW5zOyBhIHJlZmVyZW5jZSB0byBhbm90aGVyXFxuIyByZXNvdXJjZSBkb2VzIG5vdCByZXNvbHZlIGFuZCB0aGUgQVNMIHJ1bGVzIHNraXAgdGhlIG1hY2hpbmUpIG9yIGFzIHRoZSByYXdcXG4jIERlZmluaXRpb24gb2JqZWN0IG9mIGFuIEwxIHJlc291cmNlIChpbnRyaW5zaWNzIGluc2lkZSBhcmUgbWFya2VyIG9iamVjdHMsXFxuIyBuZXZlciBzdHJpbmdzLCBzbyBpc19zdHJpbmcgZ3VhcmRzIG11dGUgdGhlbSkuXFxuXFxuX3BmX3NmbmxpYl9hc2wobmFtZSkgOj0gYXNsIGlmIHtcXG5cXHRkZWYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIilcXG5cXHRpc19zdHJpbmcoZGVmKVxcblxcdGFzbCA6PSBqc29uLnVubWFyc2hhbChkZWYpXFxuXFx0aXNfb2JqZWN0KGFzbClcXG59XFxuXFxuX3BmX3NmbmxpYl9hc2wobmFtZSkgOj0gYXNsIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRGVmaW5pdGlvblN0cmluZ1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRhc2wgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkRlZmluaXRpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChhc2wpXFxufVxcblxcbiMgUHJvcGVydHkgcGF0aCBwcmVmaXggZm9yIGRpYWdub3N0aWNzLlxcbl9wZl9zZm5saWJfcHJvcChuYW1lKSA6PSBcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIiBpZiB7XFxuXFx0b2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIkRlZmluaXRpb25TdHJpbmdcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zZm5saWJfcHJvcChuYW1lKSA6PSBcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uXFxcIiBpZiB7XFxuXFx0b2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIkRlZmluaXRpb25TdHJpbmdcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbiMgQ2hpbGQgd29ya2Zsb3dzIGRpcmVjdGx5IGluc2lkZSBhIFN0YXRlcyBibG9jazogW3BhdGgsIHN0YXRlcywgc3RhcnRBdF0gZm9yXFxuIyBldmVyeSBQYXJhbGxlbCBicmFuY2ggYW5kIE1hcCBJdGVtUHJvY2Vzc29yIC8gSXRlcmF0b3IuXFxuX3BmX3NmbmxpYl9raWRzKHBhdGgsIHN0YXRlcykgOj0ga2lkcyBpZiB7XFxuXFx0YnJhbmNoZXMgOj0ge1tjcCwgY3MsIHNhXSB8XFxuXFx0XFx0c29tZSBzbmFtZSwgc3QgaW4gc3RhdGVzXFxuXFx0XFx0aXNfb2JqZWN0KHN0KVxcblxcdFxcdGFyciA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQnJhbmNoZXNcXFwiLCBbXSlcXG5cXHRcXHRpc19hcnJheShhcnIpXFxuXFx0XFx0c29tZSBpLCBiIGluIGFyclxcblxcdFxcdGlzX29iamVjdChiKVxcblxcdFxcdGNzIDo9IG9iamVjdC5nZXQoYiwgXFxcIlN0YXRlc1xcXCIsIG51bGwpXFxuXFx0XFx0aXNfb2JqZWN0KGNzKVxcblxcdFxcdHNhIDo9IG9iamVjdC5nZXQoYiwgXFxcIlN0YXJ0QXRcXFwiLCBudWxsKVxcblxcdFxcdGNwIDo9IHNwcmludGYoXFxcIiVzLiVzLkJyYW5jaGVzWyVkXS5TdGF0ZXNcXFwiLCBbcGF0aCwgc25hbWUsIGldKVxcblxcdH1cXG5cXHRwcm9jcyA6PSB7W2NwLCBjcywgc2FdIHxcXG5cXHRcXHRzb21lIHNuYW1lLCBzdCBpbiBzdGF0ZXNcXG5cXHRcXHRpc19vYmplY3Qoc3QpXFxuXFx0XFx0c29tZSBrZXkgaW4gW1xcXCJJdGVtUHJvY2Vzc29yXFxcIiwgXFxcIkl0ZXJhdG9yXFxcIl1cXG5cXHRcXHRwcm9jIDo9IG9iamVjdC5nZXQoc3QsIGtleSwgbnVsbClcXG5cXHRcXHRpc19vYmplY3QocHJvYylcXG5cXHRcXHRjcyA6PSBvYmplY3QuZ2V0KHByb2MsIFxcXCJTdGF0ZXNcXFwiLCBudWxsKVxcblxcdFxcdGlzX29iamVjdChjcylcXG5cXHRcXHRzYSA6PSBvYmplY3QuZ2V0KHByb2MsIFxcXCJTdGFydEF0XFxcIiwgbnVsbClcXG5cXHRcXHRjcCA6PSBzcHJpbnRmKFxcXCIlcy4lcy4lcy5TdGF0ZXNcXFwiLCBbcGF0aCwgc25hbWUsIGtleV0pXFxuXFx0fVxcblxcdGtpZHMgOj0gYnJhbmNoZXMgfCBwcm9jc1xcbn1cXG5cXG4jIEV2ZXJ5IFN0YXRlcyBibG9jayBvZiBldmVyeSBzdGF0ZSBtYWNoaW5lOiBbbmFtZSwgcGF0aCwgc3RhdGVzLCBzdGFydEF0XS5cXG5fcGZfc2ZubGliX3Njb3BlMCBjb250YWlucyBbbmFtZSwgXFxcIlN0YXRlc1xcXCIsIHMsIHNhXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0YXNsIDo9IF9wZl9zZm5saWJfYXNsKG5hbWUpXFxuXFx0cyA6PSBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c2EgOj0gb2JqZWN0LmdldChhc2wsIFxcXCJTdGFydEF0XFxcIiwgbnVsbClcXG59XFxuXFxuX3BmX3NmbmxpYl9zY29wZTEgY29udGFpbnMgW25hbWUsIGNwLCBjcywgc2FdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBzLCBfXSBpbiBfcGZfc2ZubGliX3Njb3BlMFxcblxcdHNvbWUgW2NwLCBjcywgc2FdIGluIF9wZl9zZm5saWJfa2lkcyhwLCBzKVxcbn1cXG5cXG5fcGZfc2ZubGliX3Njb3BlMiBjb250YWlucyBbbmFtZSwgY3AsIGNzLCBzYV0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIF9dIGluIF9wZl9zZm5saWJfc2NvcGUxXFxuXFx0c29tZSBbY3AsIGNzLCBzYV0gaW4gX3BmX3NmbmxpYl9raWRzKHAsIHMpXFxufVxcblxcbl9wZl9zZm5saWJfc2NvcGUzIGNvbnRhaW5zIFtuYW1lLCBjcCwgY3MsIHNhXSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgX10gaW4gX3BmX3NmbmxpYl9zY29wZTJcXG5cXHRzb21lIFtjcCwgY3MsIHNhXSBpbiBfcGZfc2ZubGliX2tpZHMocCwgcylcXG59XFxuXFxuIyBwb255dGFpbDogUmVnbyBjYW5ub3QgcmVjdXJzZSBhbmQgdGhlIGVuZ2luZSBoYXMgbm8gd2FsaygpLCBzbyBuZXN0aW5nIGlzXFxuIyBleHBhbmRlZCB0byBkZXB0aCAzIChQYXJhbGxlbC9NYXAgaW5zaWRlIFBhcmFsbGVsL01hcCBpbnNpZGUgUGFyYWxsZWwvTWFwKS5cXG4jIFN0YXRlcyBuZXN0ZWQgZGVlcGVyIGFyZSBzaW1wbHkgbm90IGluc3BlY3RlZDsgYWRkIGEgc2NvcGU0IGxpbmUgdG8gZXh0ZW5kLlxcbl9wZl9zZm5saWJfc2NvcGVzIDo9ICgoX3BmX3NmbmxpYl9zY29wZTAgfCBfcGZfc2ZubGliX3Njb3BlMSkgfCBfcGZfc2ZubGliX3Njb3BlMikgfCBfcGZfc2ZubGliX3Njb3BlM1xcblxcbiMgRXZlcnkgc3RhdGU6IFtuYW1lLCBzY29wZSBwYXRoLCBzY29wZSBzdGF0ZXMsIHN0YXRlIG5hbWUsIHN0YXRlIG9iamVjdF0uXFxuX3BmX3NmbmxpYl9zdGF0ZXMgY29udGFpbnMgW25hbWUsIHAsIHMsIHNuYW1lLCBzdF0gaWYge1xcblxcdHNvbWUgW25hbWUsIHAsIHMsIF9dIGluIF9wZl9zZm5saWJfc2NvcGVzXFxuXFx0c29tZSBzbmFtZSwgc3QgaW4gc1xcblxcdGlzX29iamVjdChzdClcXG59XFxuXFxuX3BmX3NmbmxpYl9wYXRoKG5hbWUsIHAsIHNuYW1lKSA6PSBzcHJpbnRmKFxcXCIlcy4lcy4lc1xcXCIsIFtfcGZfc2ZubGliX3Byb3AobmFtZSksIHAsIHNuYW1lXSlcXG5cXG5fcGZfc2ZubGliX3R5cGUobmFtZSkgOj0gdCBpZiB7XFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN0YXRlTWFjaGluZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyh0KVxcbn1cXG5cXG5fcGZfc2ZubGliX3R5cGUobmFtZSkgOj0gXFxcIlNUQU5EQVJEXFxcIiBpZiB7XFxuXFx0bm90IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU3RhdGVNYWNoaW5lVHlwZVxcXCIpXFxufVxcblxcbiMgRWZmZWN0aXZlIHF1ZXJ5IGxhbmd1YWdlIG9mIGEgc3RhdGU6IHN0YXRlLWxldmVsLCB0aGVuIHRvcC1sZXZlbCwgdGhlbiBKU09OUGF0aC5cXG5fcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA6PSBxIGlmIHtcXG5cXHRxIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJRdWVyeUxhbmd1YWdlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocSlcXG59XFxuXFxuX3BmX3NmbmxpYl9xbChuYW1lLCBzdCkgOj0gcSBpZiB7XFxuXFx0bm90IGlzX3N0cmluZyhvYmplY3QuZ2V0KHN0LCBcXFwiUXVlcnlMYW5ndWFnZVxcXCIsIG51bGwpKVxcblxcdHEgOj0gb2JqZWN0LmdldChfcGZfc2ZubGliX2FzbChuYW1lKSwgXFxcIlF1ZXJ5TGFuZ3VhZ2VcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhxKVxcbn1cXG5cXG5fcGZfc2ZubGliX3FsKG5hbWUsIHN0KSA6PSBcXFwiSlNPTlBhdGhcXFwiIGlmIHtcXG5cXHRub3QgaXNfc3RyaW5nKG9iamVjdC5nZXQoc3QsIFxcXCJRdWVyeUxhbmd1YWdlXFxcIiwgbnVsbCkpXFxuXFx0bm90IGlzX3N0cmluZyhvYmplY3QuZ2V0KF9wZl9zZm5saWJfYXNsKG5hbWUpLCBcXFwiUXVlcnlMYW5ndWFnZVxcXCIsIG51bGwpKVxcbn1cXG5cXG4jIFByZXNlbmNlIHRlc3QgdGhhdCB0cmVhdHMgaW50cmluc2ljIG1hcmtlciBvYmplY3RzIGFzIHByZXNlbnQuXFxuX3BmX3NmbmxpYl9oYXMob2JqLCBrZXkpIGlmIHtcXG5cXHRvYmplY3QuZ2V0KG9iaiwga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbiMgQ2hvaWNlIHJ1bGVzIG9mIGEgQ2hvaWNlIHN0YXRlOiBbbmFtZSwgcGF0aCwgc3RhdGVzLCBzdGF0ZSBuYW1lLCBpbmRleCwgcnVsZV0uXFxuX3BmX3NmbmxpYl9jaG9pY2UgY29udGFpbnMgW25hbWUsIHAsIHMsIHNuYW1lLCBpLCBjXSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdG9iamVjdC5nZXQoc3QsIFxcXCJUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkNob2ljZVxcXCJcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChzdCwgXFxcIkNob2ljZXNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRzb21lIGksIGMgaW4gYXJyXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbiMgT3B0aW1pemVkIC8gU0RLIGludGVncmF0aW9uIFRhc2sgc3RhdGVzOiBbbmFtZSwgcGF0aCwgc3RhdGVzLCBzdGF0ZSBuYW1lLFxcbiMgc3RhdGUsIHNlcnZpY2UsIGFwaV0gZm9yIFJlc291cmNlID0gYXJuOjxwYXJ0aXRpb24+OnN0YXRlczo6OjxzZXJ2aWNlPjo8YXBpPi5cXG5fcGZfc2ZubGliX2ludGVncmF0aW9uIGNvbnRhaW5zIFtuYW1lLCBwLCBzLCBzbmFtZSwgc3QsIHN2YywgYXBpXSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcCwgcywgc25hbWUsIHN0XSBpbiBfcGZfc2ZubGliX3N0YXRlc1xcblxcdG9iamVjdC5nZXQoc3QsIFxcXCJUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIlRhc2tcXFwiXFxuXFx0cmVzIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJSZXNvdXJjZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJlcylcXG5cXHRwYXJ0cyA6PSBzcGxpdChyZXMsIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gN1xcblxcdHBhcnRzWzJdID09IFxcXCJzdGF0ZXNcXFwiXFxuXFx0cGFydHNbM10gPT0gXFxcIlxcXCJcXG5cXHRwYXJ0c1s0XSA9PSBcXFwiXFxcIlxcblxcdHN2YyA6PSBwYXJ0c1s1XVxcblxcdGFwaSA6PSBjb25jYXQoXFxcIjpcXFwiLCBhcnJheS5zbGljZShwYXJ0cywgNiwgY291bnQocGFydHMpKSlcXG59XFxuXCJcbiAgfVxuXTtcbiJdfQ==