cdk-preflight 0.0.9 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -9598,6 +9598,6 @@
9598
9598
  "symbolId": "src/index:PreflightOptions"
9599
9599
  }
9600
9600
  },
9601
- "version": "0.0.9",
9602
- "fingerprint": "B9YnzdKkKUVpO/XiBh/7KG4xyOwqHbCNgGi7Ild4szc="
9601
+ "version": "0.0.11",
9602
+ "fingerprint": "xy13VWrZZL7Y5e/fB9Pde3RmIs2GWukBgSfg7IJdd98="
9603
9603
  }
package/docs/rules.md CHANGED
@@ -45,6 +45,9 @@
45
45
  | `pf-iam-managed-policy-count` | AWS::IAM::Role<br>AWS::IAM::User<br>AWS::IAM::Group | Managed policies per identity are capped (hard maximums role 25 / user 20 / group 10) | none |
46
46
  | `pf-iam-managed-policy-size` | AWS::IAM::ManagedPolicy | Managed policy documents are limited to 6144 characters (whitespace excluded) | none |
47
47
  | `pf-lambda-env-size` | AWS::Lambda::Function | Lambda environment variables are limited to 4096 bytes in total | none |
48
+ | `pf-logs-filter-pattern-bracket` | AWS::Logs::MetricFilter<br>AWS::Logs::SubscriptionFilter | A filter pattern starting with '[' must end with ']' | none |
49
+ | `pf-logs-metric-dimensions-default-exclusive` | AWS::Logs::MetricFilter | Dimensions and DefaultValue are mutually exclusive | none |
50
+ | `pf-logs-subscription-kinesis-role` | AWS::Logs::SubscriptionFilter | A Kinesis destination needs RoleArn | none |
48
51
  | `pf-route53-alias-cloudfront-zone-id` | AWS::Route53::RecordSet | A CloudFront alias target must use hosted zone Z2FDTNDATAQYW2 | none |
49
52
  | `pf-route53-apex-cname` | AWS::Route53::RecordSet<br>AWS::Route53::HostedZone | A CNAME record is not permitted at the zone apex | none |
50
53
  | `pf-route53-geolocation-exclusive` | AWS::Route53::RecordSet | GeoLocation cannot specify both ContinentCode and CountryCode | pending-engine |
@@ -56,7 +59,17 @@
56
59
  | `pf-route53-ttl-range` | AWS::Route53::RecordSet | TTL must fit in 32 bits (0..2147483647 seconds) | pending-engine |
57
60
  | `pf-route53-weight-range` | AWS::Route53::RecordSet | Weight must be between 0 and 255 | pending-engine |
58
61
  | `pf-route53-zonename-trailing-dot` | AWS::Route53::RecordSet | HostedZoneName must end with a trailing dot | none |
62
+ | `pf-s3-accelerate-dotted-name` | AWS::S3::Bucket | Transfer Acceleration rejects bucket names with periods | none |
63
+ | `pf-s3-bucket-policy-action-resource` | AWS::S3::BucketPolicy | Object-level actions need an object-level Resource | none |
64
+ | `pf-s3-bucket-policy-principal` | AWS::S3::BucketPolicy | Bucket policy statements need a Principal | none |
59
65
  | `pf-s3-lifecycle-days-order` | AWS::S3::Bucket | Lifecycle archive transitions must come 30+ days after IA, and expiration after every transition | none |
66
+ | `pf-s3-lifecycle-expiration-positive` | AWS::S3::Bucket | ExpirationInDays must be a positive integer | pending-engine |
67
+ | `pf-s3-lifecycle-rule-no-action` | AWS::S3::Bucket | A lifecycle rule needs at least one action | none |
68
+ | `pf-s3-notification-overlapping-filters` | AWS::S3::Bucket | Notification entries must not overlap for the same event type | none |
69
+ | `pf-s3-objectlock-requires-versioning` | AWS::S3::Bucket | ObjectLockConfiguration needs versioning enabled | none |
70
+ | `pf-s3-objectlock-versioning-suspended` | AWS::S3::Bucket | Object Lock forbids suspending versioning | none |
71
+ | `pf-s3-replication-dest-versioning` | AWS::S3::Bucket | The replication destination bucket needs versioning enabled | none |
60
72
  | `pf-s3-replication-requires-versioning` | AWS::S3::Bucket | ReplicationConfiguration requires versioning to be enabled on the source bucket | none |
73
+ | `pf-s3-website-redirect-exclusive` | AWS::S3::Bucket | RedirectAllRequestsTo excludes every other website setting | none |
61
74
  | `pf-sns-fifo-topic-name` | AWS::SNS::Topic | FIFO topic names must end with '.fifo' (and '.fifo' names require FifoTopic) | none |
62
75
  | `pf-sfn-asl-missing-state` | AWS::StepFunctions::StateMachine | ASL Next/Default/Choices must reference a defined state (top-level states; a dangling StartAt is covered by engine rule E3601) | none |
package/lib/index.js CHANGED
@@ -17,7 +17,7 @@ const rules_generated_1 = require("./rules.generated");
17
17
  * Preflight.apply(app);
18
18
  */
19
19
  class Preflight {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-preflight.Preflight", version: "0.0.9" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-preflight.Preflight", version: "0.0.11" };
21
21
  /**
22
22
  * Register the cdk-preflight rules on an App or Stage.
23
23
  */
@@ -461,6 +461,40 @@ exports.BUNDLED_RULES = [
461
461
  ],
462
462
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n# リテラル文字列のキー/値だけを数える(トークンはスキップ)。合計が既に 4096 を超えて\n# いれば、実際のデプロイでも必ず失敗する(実サイズは推定以上にしかならない)。\n# NOTE: このエンジンの Rego パーサは内包表記内の 2 変数 some(some k, v in vars)を\n# 受け付けないため、object.keys 経由で書く。\n_pf_lenv_size(vars) := sum([s |\n\tsome k in object.keys(vars)\n\tis_string(vars[k])\n\ts := count(k) + count(vars[k])\n])\n\nviolation contains make_diag_full(\"pf-lambda-env-size\", \"ERROR\", name,\n\t\"Properties.Environment.Variables\",\n\tsprintf(\"Environment variables total at least %d bytes (literal keys and values), but Lambda limits the environment to 4096 bytes; CreateFunction fails at deploy time\", [total]),\n\t\"Move large values to SSM Parameter Store, Secrets Manager, or a bundled config file\",\n\t\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html\") if {\n\tsome name in resources_of_type(\"AWS::Lambda::Function\")\n\tvars := resolve(name, \"Properties.Environment.Variables\")\n\tis_object(vars)\n\ttotal := _pf_lenv_size(vars)\n\ttotal > 4096\n}\n"
463
463
  },
464
+ {
465
+ "id": "pf-logs-filter-pattern-bracket",
466
+ "service": "logs",
467
+ "severity": "ERROR",
468
+ "title": "A filter pattern starting with '[' must end with ']'",
469
+ "upstream": "none",
470
+ "resourceTypes": [
471
+ "AWS::Logs::MetricFilter",
472
+ "AWS::Logs::SubscriptionFilter"
473
+ ],
474
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_lgfpb_url := \"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html\"\n\n_pf_lgfpb_msg(kind) := sprintf(\"The %s filter pattern starts with '[' but does not end with ']'; the service rejects it with \\\"If a filter pattern starts with '[' it must end with ']'\\\"\", [kind])\n\n_pf_lgfpb_fix := \"Close the bracket — a space-delimited pattern is [field1, field2, ...]\"\n\n# The same parser runs for metric filters and subscription filters, and it\n# runs before any destination validation (bench c01/c06). Only this\n# start/end pairing is checked here; a full pattern parser is out of scope.\n_pf_lgfpb_unbalanced(p) if {\n\tt := trim_space(p)\n\tstartswith(t, \"[\")\n\tnot endswith(t, \"]\")\n}\n\nviolation contains make_diag_full(\"pf-logs-filter-pattern-bracket\", \"ERROR\", name,\n\t\"Properties.FilterPattern\",\n\t_pf_lgfpb_msg(\"metric\"),\n\t_pf_lgfpb_fix, _pf_lgfpb_url) if {\n\tsome name in resources_of_type(\"AWS::Logs::MetricFilter\")\n\tp := resolve(name, \"Properties.FilterPattern\")\n\tis_string(p)\n\t_pf_lgfpb_unbalanced(p)\n}\n\nviolation contains make_diag_full(\"pf-logs-filter-pattern-bracket\", \"ERROR\", name,\n\t\"Properties.FilterPattern\",\n\t_pf_lgfpb_msg(\"subscription\"),\n\t_pf_lgfpb_fix, _pf_lgfpb_url) if {\n\tsome name in resources_of_type(\"AWS::Logs::SubscriptionFilter\")\n\tp := resolve(name, \"Properties.FilterPattern\")\n\tis_string(p)\n\t_pf_lgfpb_unbalanced(p)\n}\n"
475
+ },
476
+ {
477
+ "id": "pf-logs-metric-dimensions-default-exclusive",
478
+ "service": "logs",
479
+ "severity": "ERROR",
480
+ "title": "Dimensions and DefaultValue are mutually exclusive",
481
+ "upstream": "none",
482
+ "resourceTypes": [
483
+ "AWS::Logs::MetricFilter"
484
+ ],
485
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# DefaultValue is emitted when a log line does not match, but a dimension\n# value can only come from a match — the service rejects the combination.\nviolation contains make_diag_full(\"pf-logs-metric-dimensions-default-exclusive\", \"ERROR\", name,\n\tsprintf(\"Properties.MetricTransformations.%d.DefaultValue\", [t.index]),\n\t\"The metric transformation sets both Dimensions and DefaultValue; the service rejects it with \\\"Invalid metric transformation: dimensions and default value are mutually exclusive properties\\\"\",\n\t\"Drop DefaultValue when the transformation has Dimensions, or drop the Dimensions\",\n\t\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-logs-metricfilter-metrictransformation.html\") if {\n\tsome name in resources_of_type(\"AWS::Logs::MetricFilter\")\n\tsome t in flatten_list(name, \"Properties.MetricTransformations\")\n\tis_object(t.value)\n\tobject.get(t.value, \"DefaultValue\", \"__pf_absent\") != \"__pf_absent\"\n\tdims := object.get(t.value, \"Dimensions\", null)\n\tis_array(dims)\n\tcount(dims) > 0\n}\n"
486
+ },
487
+ {
488
+ "id": "pf-logs-subscription-kinesis-role",
489
+ "service": "logs",
490
+ "severity": "ERROR",
491
+ "title": "A Kinesis destination needs RoleArn",
492
+ "upstream": "none",
493
+ "resourceTypes": [
494
+ "AWS::Logs::SubscriptionFilter"
495
+ ],
496
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_lgskr_url := \"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html\"\n\n# The destination is provably Kinesis two ways: a literal\n# arn:<partition>:kinesis: string, or a Ref/GetAtt that resolve() turns into\n# the logical ID of an in-template AWS::Kinesis::Stream. Scoped to Kinesis —\n# the bench error names \"vendor kinesis\"; other vendors were not measured.\n_pf_lgskr_kinesis_dest(name) if {\n\td := resolve(name, \"Properties.DestinationArn\")\n\tis_string(d)\n\tparts := split(d, \":\")\n\tcount(parts) >= 3\n\tparts[0] == \"arn\"\n\tparts[2] == \"kinesis\"\n}\n\n_pf_lgskr_kinesis_dest(name) if {\n\td := resolve(name, \"Properties.DestinationArn\")\n\tis_string(d)\n\td in resources_of_type(\"AWS::Kinesis::Stream\")\n}\n\n# True absence of RoleArn needs the preprocessed document (see AGENTS.md).\n_pf_lgskr_role_absent(name) if {\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"RoleArn\", \"__pf_absent\") == \"__pf_absent\"\n}\n\nviolation contains make_diag_full(\"pf-logs-subscription-kinesis-role\", \"ERROR\", name,\n\t\"Properties.RoleArn\",\n\t\"The subscription filter targets a Kinesis stream but sets no RoleArn; the service rejects it with \\\"destinationArn for vendor kinesis cannot be used without roleArn\\\"\",\n\t\"Add a RoleArn for a role that logs.amazonaws.com can assume with kinesis:PutRecord on the stream\",\n\t_pf_lgskr_url) if {\n\tsome name in resources_of_type(\"AWS::Logs::SubscriptionFilter\")\n\t_pf_lgskr_kinesis_dest(name)\n\t_pf_lgskr_role_absent(name)\n}\n"
497
+ },
464
498
  {
465
499
  "id": "pf-route53-alias-cloudfront-zone-id",
466
500
  "service": "route53",
@@ -583,6 +617,39 @@ exports.BUNDLED_RULES = [
583
617
  ],
584
618
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n# CloudFormation looks the zone up by the literal HostedZoneName and does not\n# normalize the trailing dot: the same stack deployed clean with\n# \"zone.example.\" and failed with NotFound for \"zone.example\" (2026-09-02).\nviolation contains make_diag_full(\"pf-route53-zonename-trailing-dot\", \"ERROR\", name,\n\t\"Properties.HostedZoneName\",\n\tsprintf(\"HostedZoneName '%s' is missing the trailing dot, so CloudFormation fails the lookup with \\\"No hosted zone with name ... found\\\"\", [zn]),\n\tsprintf(\"Use '%s.' (with the trailing dot)\", [zn]),\n\t\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-route53-recordset.html\") if {\n\tsome name in resources_of_type(\"AWS::Route53::RecordSet\")\n\tzn := resolve(name, \"Properties.HostedZoneName\")\n\tis_string(zn)\n\tzn != \"\"\n\tnot endswith(zn, \".\")\n}\n"
585
619
  },
620
+ {
621
+ "id": "pf-s3-accelerate-dotted-name",
622
+ "service": "s3",
623
+ "severity": "ERROR",
624
+ "title": "Transfer Acceleration rejects bucket names with periods",
625
+ "upstream": "none",
626
+ "resourceTypes": [
627
+ "AWS::S3::Bucket"
628
+ ],
629
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# Transfer Acceleration endpoints are DNS-based, so bucket names containing\n# periods are rejected at creation. Only a literal BucketName is checkable;\n# CDK-generated names never contain periods anyway.\nviolation contains make_diag_full(\"pf-s3-accelerate-dotted-name\", \"ERROR\", name,\n\t\"Properties.AccelerateConfiguration.AccelerationStatus\",\n\tsprintf(\"Bucket name '%s' contains periods, which Transfer Acceleration does not support; CreateBucket fails with \\\"S3 Transfer Acceleration is not supported for buckets with periods (.) in their names\\\"\", [bn]),\n\t\"Rename the bucket without periods, or drop AccelerateConfiguration\",\n\t\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\tresolve(name, \"Properties.AccelerateConfiguration.AccelerationStatus\") == \"Enabled\"\n\tbn := resolve(name, \"Properties.BucketName\")\n\tis_string(bn)\n\tcontains(bn, \".\")\n}\n"
630
+ },
631
+ {
632
+ "id": "pf-s3-bucket-policy-action-resource",
633
+ "service": "s3",
634
+ "severity": "ERROR",
635
+ "title": "Object-level actions need an object-level Resource",
636
+ "upstream": "none",
637
+ "resourceTypes": [
638
+ "AWS::S3::BucketPolicy"
639
+ ],
640
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# An object-level action whose statement lists only bucket-level ARNs applies\n# to nothing, and S3 rejects the policy. A bucket-level ARN is provable two\n# ways: a literal arn:...:s3:::name with no \"/\" in the name part, or a value\n# that resolve() turns into the logical ID of an in-template bucket (Ref and\n# Fn::GetAtt Arn both do — the GetAtt of a bucket is its bucket ARN). Fires\n# only when every resource in the statement is provably bucket-level, so\n# unresolvable entries (e.g. Fn::Sub \"${B.Arn}/*\") mute the statement.\n\n_pf_s3bpar_object_action(a) if startswith(lower(a), \"s3:getobject\")\n\n_pf_s3bpar_object_action(a) if startswith(lower(a), \"s3:putobject\")\n\n_pf_s3bpar_object_action(a) if startswith(lower(a), \"s3:deleteobject\")\n\n_pf_s3bpar_object_action(a) if lower(a) in {\"s3:abortmultipartupload\", \"s3:restoreobject\", \"s3:listmultipartuploadparts\"}\n\n_pf_s3bpar_bucket_level(r) if r in resources_of_type(\"AWS::S3::Bucket\")\n\n_pf_s3bpar_bucket_level(r) if {\n\tstartswith(r, \"arn:\")\n\tcontains(r, \":s3:::\")\n\tparts := split(r, \":::\")\n\tcount(parts) == 2\n\tnot contains(parts[1], \"/\")\n}\n\n_pf_s3bpar_actions(name, i) := [a] if {\n\ta := resolve(name, sprintf(\"Properties.PolicyDocument.Statement.%d.Action\", [i]))\n\tis_string(a)\n}\n\n_pf_s3bpar_actions(name, i) := acts if {\n\titems := [it | some it in flatten_list(name, sprintf(\"Properties.PolicyDocument.Statement.%d.Action\", [i]))]\n\tcount(items) > 0\n\tacts := [v | some it in items; v := it.value; is_string(v)]\n}\n\n_pf_s3bpar_resources(name, i) := [r] if {\n\tr := resolve(name, sprintf(\"Properties.PolicyDocument.Statement.%d.Resource\", [i]))\n\tis_string(r)\n}\n\n_pf_s3bpar_resources(name, i) := rs if {\n\titems := [it | some it in flatten_list(name, sprintf(\"Properties.PolicyDocument.Statement.%d.Resource\", [i]))]\n\tcount(items) > 0\n\trs := [v | some it in items; v := resolve(name, sprintf(\"Properties.PolicyDocument.Statement.%d.Resource.%d\", [i, it.index])); is_string(v)]\n\tcount(rs) == count(items)\n}\n\nviolation contains make_diag_full(\"pf-s3-bucket-policy-action-resource\", \"ERROR\", name,\n\tsprintf(\"Properties.PolicyDocument.Statement.%d.Resource\", [st.index]),\n\tsprintf(\"Action '%s' targets objects but the statement's resources are all bucket-level ARNs; S3 rejects the policy with \\\"Action does not apply to any resource(s) in statement\\\"\", [a]),\n\t\"Add the object form of the ARN (append /* or a key pattern) to Resource, or drop the object-level action\",\n\t\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::BucketPolicy\")\n\tsome st in flatten_list(name, \"Properties.PolicyDocument.Statement\")\n\tis_object(st.value)\n\tsome a in _pf_s3bpar_actions(name, st.index)\n\t_pf_s3bpar_object_action(a)\n\trs := _pf_s3bpar_resources(name, st.index)\n\tcount(rs) > 0\n\tevery r in rs {\n\t\t_pf_s3bpar_bucket_level(r)\n\t}\n}\n"
641
+ },
642
+ {
643
+ "id": "pf-s3-bucket-policy-principal",
644
+ "service": "s3",
645
+ "severity": "ERROR",
646
+ "title": "Bucket policy statements need a Principal",
647
+ "upstream": "none",
648
+ "resourceTypes": [
649
+ "AWS::S3::BucketPolicy"
650
+ ],
651
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# Resource-based policies require Principal (or NotPrincipal) in every\n# statement — unlike identity policies, where cfn-lint-grade checks are\n# tuned. An unresolvable Principal value still counts as present.\nviolation contains make_diag_full(\"pf-s3-bucket-policy-principal\", \"ERROR\", name,\n\tsprintf(\"Properties.PolicyDocument.Statement.%d\", [st.index]),\n\t\"The statement has neither Principal nor NotPrincipal; S3 rejects the policy with \\\"Missing required field Principal\\\"\",\n\t\"Add a Principal (or NotPrincipal) to the statement — bucket policies always name who they apply to\",\n\t\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::BucketPolicy\")\n\tsome st in flatten_list(name, \"Properties.PolicyDocument.Statement\")\n\tis_object(st.value)\n\tobject.get(st.value, \"Principal\", \"__pf_absent\") == \"__pf_absent\"\n\tobject.get(st.value, \"NotPrincipal\", \"__pf_absent\") == \"__pf_absent\"\n}\n"
652
+ },
586
653
  {
587
654
  "id": "pf-s3-lifecycle-days-order",
588
655
  "service": "s3",
@@ -594,6 +661,72 @@ exports.BUNDLED_RULES = [
594
661
  ],
595
662
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_s3ord_fix := \"Order the lifecycle days so archive transitions come at least 30 days after IA transitions and expiration comes after every transition\"\n\n_pf_s3ord_url := \"https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html\"\n\nviolation contains make_diag_full(\"pf-s3-lifecycle-days-order\", \"ERROR\", name,\n\tsprintf(\"Properties.LifecycleConfiguration.Rules.%d.Transitions\", [r.index]),\n\tsprintf(\"Transition to %s at %v days is less than 30 days after the %s transition at %v days; S3 requires objects to stay at least 30 days in IA storage\", [sc2, d2, sc1, d1]),\n\t_pf_s3ord_fix, _pf_s3ord_url) if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\tsome r in flatten_list(name, \"Properties.LifecycleConfiguration.Rules\")\n\tis_object(r.value)\n\ttrans := object.get(r.value, \"Transitions\", [])\n\tis_array(trans)\n\tsome t1 in trans\n\tis_object(t1)\n\tsc1 := object.get(t1, \"StorageClass\", \"\")\n\tsc1 in {\"STANDARD_IA\", \"ONEZONE_IA\"}\n\traw1 := object.get(t1, \"TransitionInDays\", null)\n\traw1 != null # to_number(null) は 0 になる\n\td1 := to_number(raw1)\n\tsome t2 in trans\n\tis_object(t2)\n\tsc2 := object.get(t2, \"StorageClass\", \"\")\n\tsc2 in {\"GLACIER\", \"DEEP_ARCHIVE\"}\n\traw2 := object.get(t2, \"TransitionInDays\", null)\n\traw2 != null\n\td2 := to_number(raw2)\n\td2 < d1 + 30\n}\n\nviolation contains make_diag_full(\"pf-s3-lifecycle-days-order\", \"ERROR\", name,\n\tsprintf(\"Properties.LifecycleConfiguration.Rules.%d.ExpirationInDays\", [r.index]),\n\tsprintf(\"ExpirationInDays (%v) must be greater than TransitionInDays (%v); S3 rejects lifecycle rules that expire objects before or when they transition\", [e, d]),\n\t_pf_s3ord_fix, _pf_s3ord_url) if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\tsome r in flatten_list(name, \"Properties.LifecycleConfiguration.Rules\")\n\tis_object(r.value)\n\trawe := object.get(r.value, \"ExpirationInDays\", null)\n\trawe != null # to_number(null) は 0 になる\n\te := to_number(rawe)\n\ttrans := object.get(r.value, \"Transitions\", [])\n\tis_array(trans)\n\tsome t in trans\n\tis_object(t)\n\trawd := object.get(t, \"TransitionInDays\", null)\n\trawd != null\n\td := to_number(rawd)\n\te <= d\n}\n"
596
663
  },
664
+ {
665
+ "id": "pf-s3-lifecycle-expiration-positive",
666
+ "service": "s3",
667
+ "severity": "ERROR",
668
+ "title": "ExpirationInDays must be a positive integer",
669
+ "upstream": "pending-engine",
670
+ "resourceTypes": [
671
+ "AWS::S3::Bucket"
672
+ ],
673
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# The registry schema types ExpirationInDays as a bare integer with no\n# minimum, so 0 and negatives reach the service. Only the Expiration action\n# was bench-verified; other day fields are left alone.\nviolation contains make_diag_full(\"pf-s3-lifecycle-expiration-positive\", \"ERROR\", name,\n\tsprintf(\"Properties.LifecycleConfiguration.Rules.%d.ExpirationInDays\", [r.index]),\n\tsprintf(\"ExpirationInDays is %v; S3 rejects the rule with \\\"'Days' for Expiration action must be a positive integer\\\"\", [d]),\n\t\"Use an ExpirationInDays of 1 or more\",\n\t\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-s3-bucket-rule.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\tsome r in flatten_list(name, \"Properties.LifecycleConfiguration.Rules\")\n\tis_object(r.value)\n\traw := object.get(r.value, \"ExpirationInDays\", null)\n\traw != null\n\td := to_number(raw)\n\td <= 0\n}\n"
674
+ },
675
+ {
676
+ "id": "pf-s3-lifecycle-rule-no-action",
677
+ "service": "s3",
678
+ "severity": "ERROR",
679
+ "title": "A lifecycle rule needs at least one action",
680
+ "upstream": "none",
681
+ "resourceTypes": [
682
+ "AWS::S3::Bucket"
683
+ ],
684
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# The ten action fields, verbatim from the service error. A field whose value\n# is an unresolvable intrinsic still counts as present (fail closed).\n_pf_s3lna_actions := {\n\t\"AbortIncompleteMultipartUpload\",\n\t\"ExpirationDate\",\n\t\"ExpirationInDays\",\n\t\"ExpiredObjectDeleteMarker\",\n\t\"NoncurrentVersionExpiration\",\n\t\"NoncurrentVersionExpirationInDays\",\n\t\"NoncurrentVersionTransition\",\n\t\"NoncurrentVersionTransitions\",\n\t\"Transition\",\n\t\"Transitions\",\n}\n\n_pf_s3lna_has_action(rule) if {\n\tsome k in _pf_s3lna_actions\n\tobject.get(rule, k, \"__pf_absent\") != \"__pf_absent\"\n}\n\nviolation contains make_diag_full(\"pf-s3-lifecycle-rule-no-action\", \"ERROR\", name,\n\tsprintf(\"Properties.LifecycleConfiguration.Rules.%d\", [r.index]),\n\t\"The lifecycle rule specifies no action; S3 rejects it with \\\"At least one of [ExpirationDate,ExpirationInDays,AbortIncompleteMultipartUpload,Transition,...] needs to be specified\\\"\",\n\t\"Add an expiration, transition, or abort-incomplete-multipart-upload action to the rule, or remove the rule\",\n\t\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-s3-bucket-rule.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\tsome r in flatten_list(name, \"Properties.LifecycleConfiguration.Rules\")\n\tis_object(r.value)\n\tnot _pf_s3lna_has_action(r.value)\n}\n"
685
+ },
686
+ {
687
+ "id": "pf-s3-notification-overlapping-filters",
688
+ "service": "s3",
689
+ "severity": "ERROR",
690
+ "title": "Notification entries must not overlap for the same event type",
691
+ "upstream": "none",
692
+ "resourceTypes": [
693
+ "AWS::S3::Bucket"
694
+ ],
695
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# S3 keeps one notification configuration per bucket and rejects it when two\n# entries (across queue/topic/lambda alike) could match the same object event:\n# overlapping event types AND overlapping prefixes AND overlapping suffixes.\n# A missing filter side means \"\" and overlaps everything. Pairs with an\n# unresolvable event or filter value are skipped — overlap cannot be proven.\n\n_pf_s3no_configs(name) := array.concat(array.concat(\n\t[c | some c in flatten_list(name, \"Properties.NotificationConfiguration.QueueConfigurations\")],\n\t[c | some c in flatten_list(name, \"Properties.NotificationConfiguration.TopicConfigurations\")]),\n\t[c | some c in flatten_list(name, \"Properties.NotificationConfiguration.LambdaConfigurations\")])\n\n_pf_s3no_rules(c) := rules if {\n\tf := object.get(c, \"Filter\", null)\n\tis_object(f)\n\tk := object.get(f, \"S3Key\", null)\n\tis_object(k)\n\trules := object.get(k, \"Rules\", [])\n\tis_array(rules)\n}\n\n_pf_s3no_rules(c) := [] if {\n\tobject.get(c, \"Filter\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_s3no_filter_val(c, kind) := v if {\n\tvs := [x | some r in _pf_s3no_rules(c); is_object(r); lower(object.get(r, \"Name\", \"\")) == kind; x := object.get(r, \"Value\", null)]\n\tcount(vs) > 0\n\tv := vs[0]\n}\n\n_pf_s3no_filter_val(c, kind) := \"\" if {\n\tvs := [x | some r in _pf_s3no_rules(c); is_object(r); lower(object.get(r, \"Name\", \"\")) == kind; x := object.get(r, \"Value\", null)]\n\tcount(vs) == 0\n}\n\n_pf_s3no_pre_overlap(a, b) if startswith(a, b)\n\n_pf_s3no_pre_overlap(a, b) if startswith(b, a)\n\n_pf_s3no_suf_overlap(a, b) if endswith(a, b)\n\n_pf_s3no_suf_overlap(a, b) if endswith(b, a)\n\n# \"s3:ObjectCreated:*\" covers \"s3:ObjectCreated:Put\"; drop the trailing \"*\"\n# and prefix-match.\n_pf_s3no_event_overlap(e1, e2) if e1 == e2\n\n_pf_s3no_event_overlap(e1, e2) if {\n\tendswith(e1, \":*\")\n\tstartswith(e2, substring(e1, 0, count(e1) - 1))\n}\n\n_pf_s3no_event_overlap(e1, e2) if {\n\tendswith(e2, \":*\")\n\tstartswith(e1, substring(e2, 0, count(e2) - 1))\n}\n\nviolation contains make_diag_full(\"pf-s3-notification-overlapping-filters\", \"ERROR\", name,\n\t\"Properties.NotificationConfiguration\",\n\tsprintf(\"Two notification entries for overlapping event types ('%s' and '%s') have overlapping prefix/suffix filters; S3 rejects the configuration with \\\"Configuration is ambiguously defined. Cannot have overlapping suffixes in two rules if the prefixes are overlapping for the same event type.\\\"\", [e1, e2]),\n\t\"Make the prefixes or suffixes disjoint, or merge the two entries into one\",\n\t\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-filtering.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\tcs := _pf_s3no_configs(name)\n\tsome i, a in cs\n\tsome j, b in cs\n\ti < j\n\te1 := object.get(a.value, \"Event\", null)\n\tis_string(e1)\n\te2 := object.get(b.value, \"Event\", null)\n\tis_string(e2)\n\t_pf_s3no_event_overlap(e1, e2)\n\tp1 := _pf_s3no_filter_val(a.value, \"prefix\")\n\tis_string(p1)\n\tp2 := _pf_s3no_filter_val(b.value, \"prefix\")\n\tis_string(p2)\n\t_pf_s3no_pre_overlap(p1, p2)\n\ts1 := _pf_s3no_filter_val(a.value, \"suffix\")\n\tis_string(s1)\n\ts2 := _pf_s3no_filter_val(b.value, \"suffix\")\n\tis_string(s2)\n\t_pf_s3no_suf_overlap(s1, s2)\n}\n"
696
+ },
697
+ {
698
+ "id": "pf-s3-objectlock-requires-versioning",
699
+ "service": "s3",
700
+ "severity": "ERROR",
701
+ "title": "ObjectLockConfiguration needs versioning enabled",
702
+ "upstream": "none",
703
+ "resourceTypes": [
704
+ "AWS::S3::Bucket"
705
+ ],
706
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# ObjectLockConfiguration on its own does NOT require ObjectLockEnabled —\n# S3 accepts Object Lock on an existing versioned bucket (bench s05b deployed\n# clean). What it does require is versioning. When ObjectLockEnabled is true\n# the bucket is created lock-enabled and versioning comes with it, so the rule\n# fires only when lock-enablement is provably off (key literally absent or\n# literal false) and versioning is provably not enabled.\n_pf_s3olrv_no_lock_enabled(name) if {\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"ObjectLockEnabled\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_s3olrv_no_lock_enabled(name) if {\n\tcoerce_to_bool(resolve(name, \"Properties.ObjectLockEnabled\")) == false\n}\n\n_pf_s3olrv_bad_versioning(name) if {\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"VersioningConfiguration\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_s3olrv_bad_versioning(name) if {\n\tresolve(name, \"Properties.VersioningConfiguration.Status\") == \"Suspended\"\n}\n\nviolation contains make_diag_full(\"pf-s3-objectlock-requires-versioning\", \"ERROR\", name,\n\t\"Properties.ObjectLockConfiguration\",\n\t\"ObjectLockConfiguration is set on a bucket whose versioning is not enabled; S3 rejects it with \\\"Versioning must be 'Enabled' on the bucket to apply a Object Lock configuration\\\"\",\n\t\"Set VersioningConfiguration.Status to 'Enabled', or set ObjectLockEnabled: true to create the bucket lock-enabled\",\n\t\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\tis_object(resolve(name, \"Properties.ObjectLockConfiguration\"))\n\t_pf_s3olrv_no_lock_enabled(name)\n\t_pf_s3olrv_bad_versioning(name)\n}\n"
707
+ },
708
+ {
709
+ "id": "pf-s3-objectlock-versioning-suspended",
710
+ "service": "s3",
711
+ "severity": "ERROR",
712
+ "title": "Object Lock forbids suspending versioning",
713
+ "upstream": "none",
714
+ "resourceTypes": [
715
+ "AWS::S3::Bucket"
716
+ ],
717
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# Object Lock force-enables versioning at creation, so a template that also\n# suspends versioning contradicts itself and the handler's PutBucketVersioning\n# call is rejected. Fires only on a literal \"Suspended\".\nviolation contains make_diag_full(\"pf-s3-objectlock-versioning-suspended\", \"ERROR\", name,\n\t\"Properties.VersioningConfiguration.Status\",\n\t\"ObjectLockEnabled is true but VersioningConfiguration suspends versioning; S3 rejects it with \\\"An Object Lock configuration is present on this bucket, so the versioning state cannot be changed.\\\"\",\n\t\"Set VersioningConfiguration.Status to 'Enabled' (or drop it — Object Lock enables versioning itself)\",\n\t\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\tcoerce_to_bool(resolve(name, \"Properties.ObjectLockEnabled\")) == true\n\tresolve(name, \"Properties.VersioningConfiguration.Status\") == \"Suspended\"\n}\n"
718
+ },
719
+ {
720
+ "id": "pf-s3-replication-dest-versioning",
721
+ "service": "s3",
722
+ "severity": "ERROR",
723
+ "title": "The replication destination bucket needs versioning enabled",
724
+ "upstream": "none",
725
+ "resourceTypes": [
726
+ "AWS::S3::Bucket"
727
+ ],
728
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# The destination side of what pf-s3-replication-requires-versioning checks on\n# the source. Destination.Bucket is normally Fn::GetAtt/Ref to an in-template\n# bucket; resolve() turns both into the target's logical ID, so the\n# destination's own properties are readable. External destination ARNs resolve\n# to strings that are not logical IDs and skip. Versioning is \"not enabled\"\n# when VersioningConfiguration is literally absent (proven via\n# input.resources, see AGENTS.md) or Status resolves to \"Suspended\"; an\n# unresolvable Status skips.\n_pf_s3rdv_bad_versioning(dest) if {\n\tprops := input.resources[dest].properties\n\tis_object(props)\n\tobject.get(props, \"VersioningConfiguration\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_s3rdv_bad_versioning(dest) if {\n\tresolve(dest, \"Properties.VersioningConfiguration.Status\") == \"Suspended\"\n}\n\nviolation contains make_diag_full(\"pf-s3-replication-dest-versioning\", \"ERROR\", name,\n\tsprintf(\"Properties.ReplicationConfiguration.Rules.%d.Destination.Bucket\", [r.index]),\n\tsprintf(\"Replication destination bucket '%s' does not have versioning enabled; S3 rejects the configuration with \\\"Destination bucket must have versioning enabled\\\"\", [dest]),\n\t\"Set VersioningConfiguration.Status to 'Enabled' on the destination bucket\",\n\t\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-requirements.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\tsome r in flatten_list(name, \"Properties.ReplicationConfiguration.Rules\")\n\tdest := resolve(name, sprintf(\"Properties.ReplicationConfiguration.Rules.%d.Destination.Bucket\", [r.index]))\n\tis_string(dest)\n\tdest in resources_of_type(\"AWS::S3::Bucket\")\n\t_pf_s3rdv_bad_versioning(dest)\n}\n"
729
+ },
597
730
  {
598
731
  "id": "pf-s3-replication-requires-versioning",
599
732
  "service": "s3",
@@ -603,7 +736,18 @@ exports.BUNDLED_RULES = [
603
736
  "resourceTypes": [
604
737
  "AWS::S3::Bucket"
605
738
  ],
606
- "rego": "package cdk_preflight\n\nimport rego.v1\n\n# Status がリテラルで \"Suspended\" 以外(= \"Enabled\")、または未解決トークンなら OK 扱い。\n# VersioningConfiguration 自体が無い / Suspended のときだけ違反にする。\n_pf_s3repl_versioning_ok(name) if {\n\ts := resolve(name, \"Properties.VersioningConfiguration.Status\")\n\tnot s == \"Suspended\"\n}\n\nviolation contains make_diag_full(\"pf-s3-replication-requires-versioning\", \"ERROR\", name,\n\t\"Properties.ReplicationConfiguration\",\n\t\"ReplicationConfiguration is set but bucket versioning is not enabled; S3 rejects the replication configuration at deploy time (InvalidRequest: Versioning must be 'Enabled' on the bucket)\",\n\t\"Set VersioningConfiguration.Status to 'Enabled' on the source bucket\",\n\t\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-requirements.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\tis_object(resolve(name, \"Properties.ReplicationConfiguration\"))\n\tnot _pf_s3repl_versioning_ok(name)\n}\n"
739
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# 違反にするのは VersioningConfiguration が文字どおり不在(input.resources で\n# 証明、AGENTS.md 参照)か、Status がリテラルで \"Suspended\" のときだけ。\n# 未解決トークンは OK 扱い(resolve() はキー不在と未解決の両方で undefined に\n# なるため、`not resolve(...)` では不在を証明できない 2026-09-02 実測)。\n_pf_s3repl_bad_versioning(name) if {\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"VersioningConfiguration\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_s3repl_bad_versioning(name) if {\n\tresolve(name, \"Properties.VersioningConfiguration.Status\") == \"Suspended\"\n}\n\nviolation contains make_diag_full(\"pf-s3-replication-requires-versioning\", \"ERROR\", name,\n\t\"Properties.ReplicationConfiguration\",\n\t\"ReplicationConfiguration is set but bucket versioning is not enabled; S3 rejects the replication configuration at deploy time (InvalidRequest: Versioning must be 'Enabled' on the bucket)\",\n\t\"Set VersioningConfiguration.Status to 'Enabled' on the source bucket\",\n\t\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-requirements.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\tis_object(resolve(name, \"Properties.ReplicationConfiguration\"))\n\t_pf_s3repl_bad_versioning(name)\n}\n"
740
+ },
741
+ {
742
+ "id": "pf-s3-website-redirect-exclusive",
743
+ "service": "s3",
744
+ "severity": "ERROR",
745
+ "title": "RedirectAllRequestsTo excludes every other website setting",
746
+ "upstream": "none",
747
+ "resourceTypes": [
748
+ "AWS::S3::Bucket"
749
+ ],
750
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# RedirectAllRequestsTo redirects the whole site, so S3 rejects any sibling\n# website setting alongside it.\nviolation contains make_diag_full(\"pf-s3-website-redirect-exclusive\", \"ERROR\", name,\n\tsprintf(\"Properties.WebsiteConfiguration.%s\", [k]),\n\tsprintf(\"WebsiteConfiguration combines RedirectAllRequestsTo with %s; S3 rejects it with \\\"[IndexDocument, ErrorDocument, RoutingRules] should not be specified if RedirectAllRequestsTo is specified\\\"\", [k]),\n\t\"Keep RedirectAllRequestsTo alone, or drop it and configure the website with IndexDocument/ErrorDocument/RoutingRules\",\n\t\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-s3-bucket-websiteconfiguration.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\twc := resolve(name, \"Properties.WebsiteConfiguration\")\n\tis_object(wc)\n\tobject.get(wc, \"RedirectAllRequestsTo\", \"__pf_absent\") != \"__pf_absent\"\n\tsome k in {\"IndexDocument\", \"ErrorDocument\", \"RoutingRules\"}\n\tobject.get(wc, k, \"__pf_absent\") != \"__pf_absent\"\n}\n"
607
751
  },
608
752
  {
609
753
  "id": "pf-sns-fifo-topic-name",
@@ -628,4 +772,4 @@ exports.BUNDLED_RULES = [
628
772
  "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"
629
773
  }
630
774
  ];
631
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUscUNBQXFDO1FBQzNDLFNBQVMsRUFBRSxtQkFBbUI7UUFDOUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHlFQUF5RTtRQUNsRixVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixnQ0FBZ0M7U0FDakM7UUFDRCxNQUFNLEVBQUUsbzJCQUFvMkI7S0FDNzJCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsMkJBQTJCO1FBQ2pDLFNBQVMsRUFBRSxtQkFBbUI7UUFDOUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLDRFQUE0RTtRQUNyRixVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLGVBQWUsRUFBRTtZQUNmLGdDQUFnQztTQUNqQztRQUNELE1BQU0sRUFBRSwrNkJBQSs2QjtLQUN4N0I7SUFDRDtRQUNFLElBQUksRUFBRSwrQkFBK0I7UUFDckMsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHVEQUF1RDtRQUNoRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiwrQkFBK0I7U0FDaEM7UUFDRCxNQUFNLEVBQUUsNjZCQUE2NkI7S0FDdDdCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsa0RBQWtEO1FBQ3hELFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwyRUFBMkU7UUFDcEYsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsK0JBQStCO1NBQ2hDO1FBQ0QsTUFBTSxFQUFFLHMvQkFBcy9CO0tBQy8vQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLHFDQUFxQztRQUMzQyxTQUFTLEVBQUUsWUFBWTtRQUN2QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsa0RBQWtEO1FBQzNELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLCtCQUErQjtTQUNoQztRQUNELE1BQU0sRUFBRSwyZ0RBQTJnRDtLQUNwaEQ7SUFDRDtRQUNFLElBQUksRUFBRSxrQ0FBa0M7UUFDeEMsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLDJFQUEyRTtRQUNwRixVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiwrQkFBK0I7U0FDaEM7UUFDRCxNQUFNLEVBQUUsNi9DQUE2L0M7S0FDdGdEO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsbUNBQW1DO1FBQ3pDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxnRkFBZ0Y7UUFDekYsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsK0JBQStCO1NBQ2hDO1FBQ0QsTUFBTSxFQUFFLGl4RUFBaXhFO0tBQzF4RTtJQUNEO1FBQ0UsSUFBSSxFQUFFLDBDQUEwQztRQUNoRCxTQUFTLEVBQUUsWUFBWTtRQUN2QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsNEVBQTRFO1FBQ3JGLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLCtCQUErQjtTQUNoQztRQUNELE1BQU0sRUFBRSxpa0NBQWlrQztLQUMxa0M7SUFDRDtRQUNFLElBQUksRUFBRSx5QkFBeUI7UUFDL0IsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGlFQUFpRTtRQUMxRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiwrQkFBK0I7U0FDaEM7UUFDRCxNQUFNLEVBQUUsZ2lFQUFnaUU7S0FDemlFO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsa0NBQWtDO1FBQ3hDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxnRUFBZ0U7UUFDekUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsK0JBQStCO1NBQ2hDO1FBQ0QsTUFBTSxFQUFFLDZ2Q0FBNnZDO0tBQ3R3QztJQUNEO1FBQ0UsSUFBSSxFQUFFLHlDQUF5QztRQUMvQyxTQUFTLEVBQUUsVUFBVTtRQUNyQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsK0RBQStEO1FBQ3hFLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLHNCQUFzQjtTQUN2QjtRQUNELE1BQU0sRUFBRSxxNkVBQXE2RTtLQUM5NkU7SUFDRDtRQUNFLElBQUksRUFBRSxnQ0FBZ0M7UUFDdEMsU0FBUyxFQUFFLFVBQVU7UUFDckIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHdHQUF3RztRQUNqSCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixzQkFBc0I7U0FDdkI7UUFDRCxNQUFNLEVBQUUscWxEQUFxbEQ7S0FDOWxEO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsNkNBQTZDO1FBQ25ELFNBQVMsRUFBRSxVQUFVO1FBQ3JCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwrREFBK0Q7UUFDeEUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysc0JBQXNCO1NBQ3ZCO1FBQ0QsTUFBTSxFQUFFLHM0QkFBczRCO0tBQy80QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxTQUFTLEVBQUUsVUFBVTtRQUNyQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsc0NBQXNDO1FBQy9DLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLHNCQUFzQjtTQUN2QjtRQUNELE1BQU0sRUFBRSxzaENBQXNoQztLQUMvaEM7SUFDRDtRQUNFLElBQUksRUFBRSx5Q0FBeUM7UUFDL0MsU0FBUyxFQUFFLFVBQVU7UUFDckIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHlEQUF5RDtRQUNsRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiw0QkFBNEI7U0FDN0I7UUFDRCxNQUFNLEVBQUUsK3lDQUEreUM7S0FDeHpDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsb0NBQW9DO1FBQzFDLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSw0REFBNEQ7UUFDckUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysc0JBQXNCO1NBQ3ZCO1FBQ0QsTUFBTSxFQUFFLGdzRUFBZ3NFO0tBQ3pzRTtJQUNEO1FBQ0UsSUFBSSxFQUFFLG1DQUFtQztRQUN6QyxTQUFTLEVBQUUsVUFBVTtRQUNyQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsMkRBQTJEO1FBQ3BFLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLHNCQUFzQjtTQUN2QjtRQUNELE1BQU0sRUFBRSxpK0RBQWkrRDtLQUMxK0Q7SUFDRDtRQUNFLElBQUksRUFBRSw4QkFBOEI7UUFDcEMsU0FBUyxFQUFFLFVBQVU7UUFDckIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLDJDQUEyQztRQUNwRCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixzQkFBc0I7U0FDdkI7UUFDRCxNQUFNLEVBQUUsODlEQUE4OUQ7S0FDditEO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsbUNBQW1DO1FBQ3pDLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwrREFBK0Q7UUFDeEUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysc0JBQXNCO1NBQ3ZCO1FBQ0QsTUFBTSxFQUFFLCswQ0FBKzBDO0tBQ3gxQztJQUNEO1FBQ0UsSUFBSSxFQUFFLHVDQUF1QztRQUM3QyxTQUFTLEVBQUUsVUFBVTtRQUNyQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsNERBQTREO1FBQ3JFLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLHNCQUFzQjtTQUN2QjtRQUNELE1BQU0sRUFBRSw2b0RBQTZvRDtLQUN0cEQ7SUFDRDtRQUNFLElBQUksRUFBRSx1QkFBdUI7UUFDN0IsU0FBUyxFQUFFLFVBQVU7UUFDckIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLDJEQUEyRDtRQUNwRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixzQkFBc0I7U0FDdkI7UUFDRCxNQUFNLEVBQUUsMDBFQUEwMEU7S0FDbjFFO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsK0JBQStCO1FBQ3JDLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSx5Q0FBeUM7UUFDbEQsVUFBVSxFQUFFLGdCQUFnQjtRQUM1QixlQUFlLEVBQUU7WUFDZixzQkFBc0I7U0FDdkI7UUFDRCxNQUFNLEVBQUUseTlCQUF5OUI7S0FDbCtCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSw0RUFBNEU7UUFDckYsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YseUJBQXlCO1lBQ3pCLGdDQUFnQztZQUNoQywrQkFBK0I7U0FDaEM7UUFDRCxNQUFNLEVBQUUsb3lGQUFveUY7S0FDN3lGO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSx5Q0FBeUM7UUFDbEQsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysb0JBQW9CO1lBQ3BCLDBCQUEwQjtTQUMzQjtRQUNELE1BQU0sRUFBRSwyd0RBQTJ3RDtLQUNweEQ7SUFDRDtRQUNFLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsU0FBUyxFQUFFLEtBQUs7UUFDaEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLDhFQUE4RTtRQUN2RixVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixrQkFBa0I7U0FDbkI7UUFDRCxNQUFNLEVBQUUsK3dJQUErd0k7S0FDeHhJO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsb0NBQW9DO1FBQzFDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwwREFBMEQ7UUFDbkUsVUFBVSxFQUFFLGdCQUFnQjtRQUM1QixlQUFlLEVBQUU7WUFDZiwwQkFBMEI7U0FDM0I7UUFDRCxNQUFNLEVBQUUsK2xEQUErbEQ7S0FDeG1EO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsbUNBQW1DO1FBQ3pDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwwREFBMEQ7UUFDbkUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsMEJBQTBCO1NBQzNCO1FBQ0QsTUFBTSxFQUFFLCtyQ0FBK3JDO0tBQ3hzQztJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxTQUFTLEVBQUUsS0FBSztRQUNoQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsNEVBQTRFO1FBQ3JGLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLDBCQUEwQjtTQUMzQjtRQUNELE1BQU0sRUFBRSxxbURBQXFtRDtLQUM5bUQ7SUFDRDtRQUNFLElBQUksRUFBRSxxQ0FBcUM7UUFDM0MsU0FBUyxFQUFFLEtBQUs7UUFDaEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLDBDQUEwQztRQUNuRCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiwwQkFBMEI7U0FDM0I7UUFDRCxNQUFNLEVBQUUsc3BDQUFzcEM7S0FDL3BDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsa0NBQWtDO1FBQ3hDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSx5REFBeUQ7UUFDbEUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsMEJBQTBCO1NBQzNCO1FBQ0QsTUFBTSxFQUFFLHVoQ0FBdWhDO0tBQ2hpQztJQUNEO1FBQ0UsSUFBSSxFQUFFLGdDQUFnQztRQUN0QyxTQUFTLEVBQUUsS0FBSztRQUNoQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsMkNBQTJDO1FBQ3BELFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsZUFBZSxFQUFFO1lBQ2YsMEJBQTBCO1NBQzNCO1FBQ0QsTUFBTSxFQUFFLG0yQ0FBbTJDO0tBQzUyQztJQUNEO1FBQ0UsSUFBSSxFQUFFLDRCQUE0QjtRQUNsQyxTQUFTLEVBQUUsS0FBSztRQUNoQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsMENBQTBDO1FBQ25ELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLDBCQUEwQjtTQUMzQjtRQUNELE1BQU0sRUFBRSx1akNBQXVqQztLQUNoa0M7SUFDRDtRQUNFLElBQUksRUFBRSw2QkFBNkI7UUFDbkMsU0FBUyxFQUFFLEtBQUs7UUFDaEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHVEQUF1RDtRQUNoRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiwwQkFBMEI7U0FDM0I7UUFDRCxNQUFNLEVBQUUsNHZEQUE0dkQ7S0FDcndEO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0NBQWdDO1FBQ3RDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwwREFBMEQ7UUFDbkUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsMEJBQTBCO1NBQzNCO1FBQ0QsTUFBTSxFQUFFLHF6REFBcXpEO0tBQzl6RDtJQUNEO1FBQ0UsSUFBSSxFQUFFLGdDQUFnQztRQUN0QyxTQUFTLEVBQUUsT0FBTztRQUNsQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsNkRBQTZEO1FBQ3RFLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLDJDQUEyQztTQUM1QztRQUNELE1BQU0sRUFBRSx1aUNBQXVpQztLQUNoakM7SUFDRDtRQUNFLElBQUksRUFBRSx3Q0FBd0M7UUFDOUMsU0FBUyxFQUFFLE9BQU87UUFDbEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLDhFQUE4RTtRQUN2RixVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiwwQ0FBMEM7U0FDM0M7UUFDRCxNQUFNLEVBQUUsdThCQUF1OEI7S0FDaDlCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsOEJBQThCO1FBQ3BDLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwwRUFBMEU7UUFDbkYsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsMENBQTBDO1NBQzNDO1FBQ0QsTUFBTSxFQUFFLGsrQkFBaytCO0tBQzMrQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLDJCQUEyQjtRQUNqQyxTQUFTLEVBQUUsS0FBSztRQUNoQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsbUdBQW1HO1FBQzVHLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLGtCQUFrQjtZQUNsQixzQkFBc0I7WUFDdEIsc0JBQXNCO1lBQ3RCLHVCQUF1QjtTQUN4QjtRQUNELE1BQU0sRUFBRSwwM0JBQTAzQjtLQUNuNEI7SUFDRDtRQUNFLElBQUksRUFBRSw2QkFBNkI7UUFDbkMsU0FBUyxFQUFFLEtBQUs7UUFDaEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHVGQUF1RjtRQUNoRyxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtTQUNsQjtRQUNELE1BQU0sRUFBRSw4akNBQThqQztLQUN2a0M7SUFDRDtRQUNFLElBQUksRUFBRSw0QkFBNEI7UUFDbEMsU0FBUyxFQUFFLEtBQUs7UUFDaEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLCtFQUErRTtRQUN4RixVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZix5QkFBeUI7U0FDMUI7UUFDRCxNQUFNLEVBQUUseW5CQUF5bkI7S0FDbG9CO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLFNBQVMsRUFBRSxRQUFRO1FBQ25CLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxpRUFBaUU7UUFDMUUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsdUJBQXVCO1NBQ3hCO1FBQ0QsTUFBTSxFQUFFLG9nQ0FBb2dDO0tBQzdnQztJQUNEO1FBQ0UsSUFBSSxFQUFFLHFDQUFxQztRQUMzQyxTQUFTLEVBQUUsU0FBUztRQUNwQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsK0RBQStEO1FBQ3hFLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLHlCQUF5QjtTQUMxQjtRQUNELE1BQU0sRUFBRSwya0NBQTJrQztLQUNwbEM7SUFDRDtRQUNFLElBQUksRUFBRSx1QkFBdUI7UUFDN0IsU0FBUyxFQUFFLFNBQVM7UUFDcEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGtEQUFrRDtRQUMzRCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZix5QkFBeUI7WUFDekIsMEJBQTBCO1NBQzNCO1FBQ0QsTUFBTSxFQUFFLCs3Q0FBKzdDO0tBQ3g4QztJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxTQUFTLEVBQUUsU0FBUztRQUNwQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsK0RBQStEO1FBQ3hFLFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsZUFBZSxFQUFFO1lBQ2YseUJBQXlCO1NBQzFCO1FBQ0QsTUFBTSxFQUFFLDgrQkFBOCtCO0tBQ3YvQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLDZCQUE2QjtRQUNuQyxTQUFTLEVBQUUsU0FBUztRQUNwQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsc0RBQXNEO1FBQy9ELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLHlCQUF5QjtTQUMxQjtRQUNELE1BQU0sRUFBRSxndEJBQWd0QjtLQUN6dEI7SUFDRDtRQUNFLElBQUksRUFBRSx1Q0FBdUM7UUFDN0MsU0FBUyxFQUFFLFNBQVM7UUFDcEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLCtEQUErRDtRQUN4RSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZix5QkFBeUI7U0FDMUI7UUFDRCxNQUFNLEVBQUUsaXpEQUFpekQ7S0FDMXpEO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0NBQWdDO1FBQ3RDLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxxRUFBcUU7UUFDOUUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YseUJBQXlCO1NBQzFCO1FBQ0QsTUFBTSxFQUFFLHcrREFBdytEO0tBQ2ovRDtJQUNEO1FBQ0UsSUFBSSxFQUFFLHFDQUFxQztRQUMzQyxTQUFTLEVBQUUsU0FBUztRQUNwQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsOENBQThDO1FBQ3ZELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLHlCQUF5QjtTQUMxQjtRQUNELE1BQU0sRUFBRSxvOENBQW84QztLQUM3OEM7SUFDRDtRQUNFLElBQUksRUFBRSxtQ0FBbUM7UUFDekMsU0FBUyxFQUFFLFNBQVM7UUFDcEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHlEQUF5RDtRQUNsRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZix5QkFBeUI7U0FDMUI7UUFDRCxNQUFNLEVBQUUsdW9EQUF1b0Q7S0FDaHBEO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxpREFBaUQ7UUFDMUQsVUFBVSxFQUFFLGdCQUFnQjtRQUM1QixlQUFlLEVBQUU7WUFDZix5QkFBeUI7U0FDMUI7UUFDRCxNQUFNLEVBQUUsdXZCQUF1dkI7S0FDaHdCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUseUJBQXlCO1FBQy9CLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxrQ0FBa0M7UUFDM0MsVUFBVSxFQUFFLGdCQUFnQjtRQUM1QixlQUFlLEVBQUU7WUFDZix5QkFBeUI7U0FDMUI7UUFDRCxNQUFNLEVBQUUsc3ZCQUFzdkI7S0FDL3ZCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsa0NBQWtDO1FBQ3hDLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSw2Q0FBNkM7UUFDdEQsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YseUJBQXlCO1NBQzFCO1FBQ0QsTUFBTSxFQUFFLHk0QkFBeTRCO0tBQ2w1QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLDRCQUE0QjtRQUNsQyxTQUFTLEVBQUUsSUFBSTtRQUNmLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxrR0FBa0c7UUFDM0csVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsaUJBQWlCO1NBQ2xCO1FBQ0QsTUFBTSxFQUFFLHF3RUFBcXdFO0tBQzl3RTtJQUNEO1FBQ0UsSUFBSSxFQUFFLHVDQUF1QztRQUM3QyxTQUFTLEVBQUUsSUFBSTtRQUNmLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxpRkFBaUY7UUFDMUYsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsaUJBQWlCO1NBQ2xCO1FBQ0QsTUFBTSxFQUFFLHE5QkFBcTlCO0tBQzk5QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLHdCQUF3QjtRQUM5QixTQUFTLEVBQUUsS0FBSztRQUNoQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsOEVBQThFO1FBQ3ZGLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLGlCQUFpQjtTQUNsQjtRQUNELE1BQU0sRUFBRSw2K0NBQTYrQztLQUN0L0M7SUFDRDtRQUNFLElBQUksRUFBRSwwQkFBMEI7UUFDaEMsU0FBUyxFQUFFLGVBQWU7UUFDMUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGdJQUFnSTtRQUN6SSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixrQ0FBa0M7U0FDbkM7UUFDRCxNQUFNLEVBQUUsMitEQUEyK0Q7S0FDcC9EO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBzY3JpcHRzL2J1bmRsZS1ydWxlcy50cyBmcm9tIHJ1bGVzLyoqLiBEbyBub3QgZWRpdCBieSBoYW5kLlxuLy8gfn4gUmVnZW5lcmF0ZSB3aXRoOiBucHggcHJvamVuIGJ1bmRsZS1ydWxlc1xuLyogZXNsaW50LWRpc2FibGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlZFJ1bGVEYXRhIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuICByZWFkb25seSBzZXZlcml0eTogc3RyaW5nO1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICByZWFkb25seSB1cHN0cmVhbTogc3RyaW5nO1xuICByZWFkb25seSByZXNvdXJjZVR5cGVzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcmVnbzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQlVORExFRF9SVUxFUzogQnVuZGxlZFJ1bGVEYXRhW10gPSBbXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYWdlbnRjb3JlLWdhdGV3YXktand0LWF1dGhvcml6ZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJiZWRyb2NrLWFnZW50Y29yZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHYXRld2F5cyB3aXRoIEF1dGhvcml6ZXJUeXBlIENVU1RPTV9KV1QgcmVxdWlyZSBBdXRob3JpemVyQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpHYXRld2F5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2d3and0X2hhc19jb25maWcobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cXFwiKSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFnZW50Y29yZS1nYXRld2F5LWp3dC1hdXRob3JpemVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVyQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkF1dGhvcml6ZXJUeXBlIGlzIENVU1RPTV9KV1QgYnV0IEF1dGhvcml6ZXJDb25maWd1cmF0aW9uIGlzIG1pc3Npbmc7IHRoZSBDcmVhdGVHYXRld2F5IEFQSSByZXF1aXJlcyBpdCBhbmQgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBhIFZhbGlkYXRpb25FeGNlcHRpb25cXFwiLFxcblxcdFxcXCJBZGQgQXV0aG9yaXplckNvbmZpZ3VyYXRpb24uQ3VzdG9tSldUQXV0aG9yaXplciAoZGlzY292ZXJ5VXJsIGFuZCBhbGxvd2VkQXVkaWVuY2UvYWxsb3dlZENsaWVudHMpLCBvciBzd2l0Y2ggQXV0aG9yaXplclR5cGUgdG8gQVdTX0lBTVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUdhdGV3YXkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6R2F0ZXdheVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemVyVHlwZVxcXCIpID09IFxcXCJDVVNUT01fSldUXFxcIlxcblxcdG5vdCBfcGZfZ3dqd3RfaGFzX2NvbmZpZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFnZW50Y29yZS1ydW50aW1lLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiZWRyb2NrLWFnZW50Y29yZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBZ2VudENvcmUgUnVudGltZSBuYW1lcyBtdXN0IG1hdGNoIFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9IChubyBoeXBoZW5zKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ2xvdWRGb3JtYXRpb24g44K544Kt44O844Oe44GvIEFnZW50UnVudGltZU5hbWUg44Gu44OR44K/44O844Oz44KS5oyB44Gf44Gq44GE77yI44Ko44Oz44K444Oz57Sg6YCa44KK44CBXFxuIyAyMDI2LTA5LTAxIOOBqyAxLjcuMC1iZXRhIOOBp+eiuuiqje+8ieOBjOOAgUNyZWF0ZUFnZW50UnVudGltZSBBUEkg44GvXFxuIyBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSDjgpLlvLfliLbjgZnjgovjgILjg4/jgqTjg5Xjg7PlhaXjgorjga4gQ0RLIOmiqOWRveWQjeOBjOWumueVquOBruatu+WboOOAglxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYWdlbnRjb3JlLXJ1bnRpbWUtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWdlbnRSdW50aW1lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWdlbnRSdW50aW1lTmFtZSAnJXMnIGlzIGludmFsaWQ6IGl0IG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIGRpZ2l0cywgYW5kIHVuZGVyc2NvcmVzIChtYXggNDggY2hhcmFjdGVycywgaHlwaGVucyBhcmUgbm90IGFsbG93ZWQpOyBDcmVhdGVBZ2VudFJ1bnRpbWUgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYW4gdW5kZXJzY29yZS1zZXBhcmF0ZWQgbmFtZSBzdWNoIGFzICdteV9hZ2VudF9ydW50aW1lJ1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUFnZW50UnVudGltZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWdlbnRSdW50aW1lTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kYCwgbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWFjbS1jZXJ0LXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2xvdWRGcm9udCB2aWV3ZXIgY2VydGlmaWNhdGVzIG11c3QgbGl2ZSBpbiB1cy1lYXN0LTFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWFjbS1jZXJ0LXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlLkFjbUNlcnRpZmljYXRlQXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbG91ZEZyb250IHJlcXVpcmVzIHRoZSBBQ00gY2VydGlmaWNhdGUgdG8gYmUgaW4gdXMtZWFzdC0xLCBidXQgdGhlIGNlcnRpZmljYXRlIGlzIGluICVzXFxcIiwgW3JlZ2lvbl0pLFxcblxcdFxcXCJJc3N1ZSBvciBpbXBvcnQgdGhlIGNlcnRpZmljYXRlIGluIHVzLWVhc3QtMSAoZS5nLiBhIGRlZGljYXRlZCB1cy1lYXN0LTEgc3RhY2spIGFuZCByZWZlcmVuY2UgdGhhdCBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY25hbWVzLWFuZC1odHRwcy1yZXF1aXJlbWVudHMuaHRtbCNodHRwcy1yZXF1aXJlbWVudHMtY2VydGlmaWNhdGUtaXNzdWVyXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMl0gPT0gXFxcImFjbVxcXCJcXG5cXHRyZWdpb24gOj0gcGFydHNbM11cXG5cXHRyZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRyZWdpb24gIT0gXFxcInVzLWVhc3QtMVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWFsaWFzZXMtcmVxdWlyZS1jdXN0b20tY2VydGlmaWNhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgZGlzdHJpYnV0aW9uIHdpdGggQWxpYXNlcyBjYW5ub3QgdXNlIHRoZSBDbG91ZEZyb250IGRlZmF1bHQgY2VydGlmaWNhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2FsaWFzY2VydF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tdmlld2VyY2VydGlmaWNhdGUuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfYWxpYXNjZXJ0X2ZpeCA6PSBcXFwiQXR0YWNoIGFuIEFDTSBjZXJ0aWZpY2F0ZSAoQWNtQ2VydGlmaWNhdGVBcm4sIHVzLWVhc3QtMSkgb3IgYW4gSUFNIGNlcnRpZmljYXRlLCB0b2dldGhlciB3aXRoIFNzbFN1cHBvcnRNZXRob2QgYW5kIE1pbmltdW1Qcm90b2NvbFZlcnNpb25cXFwiXFxuXFxuX3BmX2NmX2FsaWFzY2VydF9jb3VudChuYW1lKSA6PSBjb3VudChbMSB8XFxuXFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQWxpYXNlc1xcXCIpXFxuXSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtYWxpYXNlcy1yZXF1aXJlLWN1c3RvbS1jZXJ0aWZpY2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlXFxcIixcXG5cXHRcXFwiQSBkaXN0cmlidXRpb24gd2l0aCBBbGlhc2VzIGNhbm5vdCB1c2UgdGhlIENsb3VkRnJvbnQgZGVmYXVsdCBjZXJ0aWZpY2F0ZVxcXCIsXFxuXFx0X3BmX2NmX2FsaWFzY2VydF9maXgsIF9wZl9jZl9hbGlhc2NlcnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0X3BmX2NmX2FsaWFzY2VydF9jb3VudChuYW1lKSA+IDBcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5DbG91ZEZyb250RGVmYXVsdENlcnRpZmljYXRlXFxcIikgPT0gdHJ1ZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtY2FjaGVkLW1ldGhvZHMtc3Vic2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZWRNZXRob2RzIG11c3QgYmUgYSBzdWJzZXQgb2YgQWxsb3dlZE1ldGhvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX21ldGhvZHNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWNhY2hlYmVoYXZpb3IuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfbWV0aG9kc19iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKSwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbiMgQ2xvdWRGcm9udCBkZWZhdWx0cyBBbGxvd2VkTWV0aG9kcyB0byBHRVQvSEVBRCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBvbWl0dGVkLFxcbiMgc28gYW4gb21pdHRlZCBBbGxvd2VkTWV0aG9kcyBzdGlsbCBjb25zdHJhaW5zIHdoYXQgbWF5IGJlIGNhY2hlZC5cXG5fcGZfY2ZfbWV0aG9kc19hbGxvd2VkKGIpIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkFsbG93ZWRNZXRob2RzXFxcIiwgW1xcXCJHRVRcXFwiLCBcXFwiSEVBRFxcXCJdKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1jYWNoZWQtbWV0aG9kcy1zdWJzZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNhY2hlZE1ldGhvZHNcXFwiLCBbYi5wYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiQ2FjaGVkTWV0aG9kcyBjb250YWlucyAlcywgd2hpY2ggaXMgbm90IGluIEFsbG93ZWRNZXRob2RzICV2XFxcIiwgW21ldGhvZCwgYWxsb3dlZF0pLFxcblxcdFxcXCJFdmVyeSBtZXRob2QgaW4gQ2FjaGVkTWV0aG9kcyBtdXN0IGFsc28gYXBwZWFyIGluIEFsbG93ZWRNZXRob2RzXFxcIixcXG5cXHRfcGZfY2ZfbWV0aG9kc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX21ldGhvZHNfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0Y2FjaGVkIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkNhY2hlZE1ldGhvZHNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGNhY2hlZClcXG5cXHRhbGxvd2VkIDo9IF9wZl9jZl9tZXRob2RzX2FsbG93ZWQoYilcXG5cXHRpc19hcnJheShhbGxvd2VkKVxcblxcdHNvbWUgbWV0aG9kIGluIGNhY2hlZFxcblxcdG5vdCBtZXRob2QgaW4gYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgZGlzdHJpYnV0aW9uIG11c3QgYmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9lZGdlcmVnaW9uX2ZpeCA6PSBcXFwiQ3JlYXRlIHRoZSBMYW1iZGFARWRnZSBmdW5jdGlvbiBpbiB1cy1lYXN0LTEgKGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiBkb2VzIHRoaXMgZm9yIHlvdSkgYW5kIGFzc29jaWF0ZSB0aGF0IHZlcnNpb24ncyBBUk5cXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvbGFtYmRhLWF0LWVkZ2UtZnVuY3Rpb24tcmVzdHJpY3Rpb25zLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIn0gfFxcblxcdFxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucy4lZC5MYW1iZGFGdW5jdGlvbkFSTlxcXCIsIFtiLnBhdGgsIGEuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgbXVzdCBsaXZlIGluIHVzLWVhc3QtMSwgYnV0IHRoaXMgZnVuY3Rpb24gaXMgaW4gJXNcXFwiLCBbcmVnaW9uXSksXFxuXFx0X3BmX2NmX2VkZ2VyZWdpb25fZml4LCBfcGZfY2ZfZWRnZXJlZ2lvbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDdcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBhc3NvY2lhdGlvbnMgbXVzdCByZWZlcmVuY2UgYSB2ZXJzaW9uIEFSTiwgbm90IGFuIGFsaWFzIG9yICRMQVRFU1RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfZml4IDo9IFxcXCJBc3NvY2lhdGUgYSB2ZXJzaW9uIEFSTiAoaW4gdGhlIENESywgZm4uY3VycmVudFZlcnNpb24uZWRnZUFybikgaW5zdGVhZCBvZiB0aGUgdW5xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBhbiBhbGlhcywgb3IgJExBVEVTVFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXZlcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tbGFtYmRhZnVuY3Rpb25hc3NvY2lhdGlvbi5odG1sXFxcIlxcblxcbl9wZl9jZl9lZGdldmVyX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCJ9IHxcXG5cXHRcXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxuIyBMYW1iZGEgQVJOcyBzcGxpdCBpbnRvIDcgc2VnbWVudHMgd2hlbiB1bnF1YWxpZmllZFxcbiMgKGFybjpwYXJ0aXRpb246bGFtYmRhOnJlZ2lvbjphY2NvdW50OmZ1bmN0aW9uOm5hbWUpIGFuZCA4IHdoZW4gYSB2ZXJzaW9uIG9yXFxuIyBhbGlhcyBxdWFsaWZpZXIgaXMgYXBwZW5kZWQuIE9ubHkgYW4gYWxsLWRpZ2l0IHF1YWxpZmllciBpcyBhIHZlcnNpb24uXFxuX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKSA6PSBbe1xcXCJwYXRoXFxcIjogcGF0aCwgXFxcImFyblxcXCI6IGFybiwgXFxcInBhcnRzXFxcIjogcGFydHN9IHxcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2V2ZXJfYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHBhcnRzWzVdID09IFxcXCJmdW5jdGlvblxcXCJcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zLiVkLkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgW2IucGF0aCwgYS5pbmRleF0pXFxuXVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRcXFwiTGFtYmRhQEVkZ2UgcmVxdWlyZXMgYSB2ZXJzaW9uLXF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGJ1dCB0aGlzIEFSTiBoYXMgbm8gcXVhbGlmaWVyXFxcIixcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA3XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSByZXF1aXJlcyBhIHZlcnNpb24tcXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYnV0ICclcycgaXMgYW4gYWxpYXMgb3IgJExBVEVTVFxcXCIsIFtxdWFsaWZpZXJdKSxcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA4XFxuXFx0cXVhbGlmaWVyIDo9IGl0LnBhcnRzWzddXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOV0rJFxcXCIsIHF1YWxpZmllcilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LW9yaWdpbi1ncm91cC1tZW1iZXItb3JpZ2luXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPcmlnaW4gZ3JvdXAgbWVtYmVycyBtdXN0IHJlZmVyZW5jZSBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gdGhlIGRpc3RyaWJ1dGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2Zfb2dtZW1iZXJfaWRzKG5hbWUpIDo9IHtpZCB8XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbnNcXFwiKVxcblxcdGlkIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJJZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGlkKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtb3JpZ2luLWdyb3VwLW1lbWJlci1vcmlnaW5cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbkdyb3Vwcy5JdGVtcy4lZC5NZW1iZXJzXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJPcmlnaW4gZ3JvdXAgbWVtYmVyICclcycgZG9lcyBub3QgbWF0Y2ggYW55IG9yaWdpbiBJZCBpbiB0aGUgZGlzdHJpYnV0aW9uXFxcIiwgW29pZF0pLFxcblxcdFxcXCJQb2ludCBldmVyeSBvcmlnaW4gZ3JvdXAgbWVtYmVyIGF0IHRoZSBJZCBvZiBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gT3JpZ2luc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tb3JpZ2luZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5PcmlnaW5Hcm91cHMuSXRlbXNcXFwiKVxcblxcdG1lbWJlcnMgOj0gb2JqZWN0LmdldChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJNZW1iZXJzXFxcIiwge30pLCBcXFwiSXRlbXNcXFwiLCBbXSlcXG5cXHRzb21lIG0gaW4gbWVtYmVyc1xcblxcdG9pZCA6PSBvYmplY3QuZ2V0KG0sIFxcXCJPcmlnaW5JZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKG9pZClcXG5cXHRub3Qgb2lkIGluIF9wZl9jZl9vZ21lbWJlcl9pZHMobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2FjaGUgYmVoYXZpb3IgVFRMcyBtdXN0IHNhdGlzZnkgTWluVFRMIDw9IERlZmF1bHRUVEwgPD0gTWF4VFRMXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl90dGxfZml4IDo9IFxcXCJPcmRlciB0aGUgVFRMcyBhcyBNaW5UVEwgPD0gRGVmYXVsdFRUTCA8PSBNYXhUVExcXFwiXFxuXFxuX3BmX2NmX3R0bF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIsIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJNaW5UVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNYXhUVEwgKCV2KVxcXCIsIFttbiwgbXhdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRteCA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTWF4VFRMXFxcIiwgbnVsbCkpXFxuXFx0bW4gPiBteFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIk1pblRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIERlZmF1bHRUVEwgKCV2KVxcXCIsIFttbiwgZGZdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG1uID4gZGZcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJEZWZhdWx0VFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTWF4VFRMICgldilcXFwiLCBbZGYsIG14XSksXFxuXFx0X3BmX2NmX3R0bF9maXgsIF9wZl9jZl90dGxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBiIGluIF9wZl9jZl9iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG14IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNYXhUVExcXFwiLCBudWxsKSlcXG5cXHRkZiA+IG14XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgV0FGdjIgd2ViIEFDTCBhdHRhY2hlZCB0byBDbG91ZEZyb250IG11c3QgYmUgZ2xvYmFsbHkgc2NvcGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBXQUZ2MiBBUk4gY2FycmllcyBpdHMgc2NvcGUgaW4gdGhlIHJlc291cmNlIHNlZ21lbnQ6XFxuIyAgIGFybjphd3M6d2FmdjI6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpnbG9iYWwvd2ViYWNsL25hbWUvaWQgICAgKENMT1VERlJPTlQpXFxuIyAgIGFybjphd3M6d2FmdjI6YXAtbm9ydGhlYXN0LTE6MTIzNDU2Nzg5MDEyOnJlZ2lvbmFsL3dlYmFjbC8uLi4gKFJFR0lPTkFMKVxcbiMgQ2xvdWRGcm9udCBhY2NlcHRzIG9ubHkgdGhlIGdsb2JhbCBmb3JtLiBDaGVja2luZyB0aGUgcmVnaW9uIGFsb25lIHdvdWxkIG1pc3NcXG4jIGEgUkVHSU9OQUwgd2ViIEFDTCB0aGF0IGhhcHBlbnMgdG8gaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gdXMtZWFzdC0xLCB3aGljaCBpc1xcbiMgdGhlIGVhc3kgbWlzdGFrZSB0byBtYWtlLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5XZWJBQ0xJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCBvbmx5IGFjY2VwdHMgYSBnbG9iYWxseSBzY29wZWQgd2ViIEFDTCwgYnV0IHRoaXMgQVJOIGlzIHNjb3BlZCAnJXMnXFxcIiwgW3Njb3BlXSksXFxuXFx0XFxcIkNyZWF0ZSB0aGUgd2ViIEFDTCB3aXRoIHNjb3BlIENMT1VERlJPTlQgaW4gdXMtZWFzdC0xICh3YWZ2Mi5DZm5XZWJBQ0wgd2l0aCBzY29wZTogJ0NMT1VERlJPTlQnKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utd2FmdjItd2ViYWNsLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLldlYkFDTElkXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwid2FmdjJcXFwiXFxuXFx0c2VnbWVudHMgOj0gc3BsaXQocGFydHNbNV0sIFxcXCIvXFxcIilcXG5cXHRzY29wZSA6PSBzZWdtZW50c1swXVxcblxcdHNjb3BlICE9IFxcXCJnbG9iYWxcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItYXR0cmlidXRlLWRlZmluaXRpb25zLXVzYWdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXZlcnkgQXR0cmlidXRlRGVmaW5pdGlvbnMgZW50cnkgbXVzdCBiZSB1c2VkIGJ5IGEga2V5IHNjaGVtYVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIER5bmFtb0RCIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoOiBldmVyeSBBdHRyaWJ1dGVEZWZpbml0aW9ucyBlbnRyeSBtdXN0IGJlXFxuIyB1c2VkIGJ5IHRoZSB0YWJsZSBrZXkgc2NoZW1hIG9yIGFuIGluZGV4IGtleSBzY2hlbWEuIFRoZSBlbmdpbmUncyBFMzAzOVxcbiMgY2hlY2tzIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb25seSAoa2V5IGF0dHJpYnV0ZSBub3QgZGVmaW5lZCksIHNvIHRoZVxcbiMgY2xhc3NpYyBcXFwicmVtb3ZlZCBhIEdTSSwgbGVmdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb25cXFwiIG1pc3Rha2Ugc2FpbHMgdGhyb3VnaC5cXG5cXG5fcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgOj0ge2EgfFxcblxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBwcm9wKSA6PSB7YSB8XFxuXFx0c29tZSBpeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQoaXgudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfZGRiYWR1X3VzZWQobmFtZSkgOj0gKChfcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgfFxcblxcdF9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpKSB8XFxuXFx0X3BmX2RkYmFkdV9pbmRleF9rZXlzKG5hbWUsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKSlcXG5cXG4jIEFueSB1bnJlc29sdmFibGUgQXR0cmlidXRlTmFtZSBpbiBhIGtleSBzY2hlbWEgbWVhbnMgdGhlIHVzZWQtc2V0IGlzXFxuIyBpbmNvbXBsZXRlLCBzbyB0aGUgcnVsZSBtdXN0IHN0YXkgc2lsZW50IHJhdGhlciB0aGFuIGd1ZXNzLlxcbl9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG59XFxuXFxuX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSkgaWYge1xcblxcdHNvbWUgcHJvcCBpbiBbXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIl1cXG5cXHRzb21lIGl4IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChpeC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWF0dHJpYnV0ZS1kZWZpbml0aW9ucy11c2FnZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9ucy4lZFxcXCIsIFtkLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQXR0cmlidXRlICclcycgaXMgZGVmaW5lZCBidXQgdXNlZCBieSBubyBrZXkgc2NoZW1hOyBEeW5hbW9EQiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaCBhbmQgZmFpbHMgd2l0aCBcXFxcXFxcIk51bWJlciBvZiBhdHRyaWJ1dGVzIGluIEtleVNjaGVtYSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIG51bWJlciBvZiBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgdW51c2VkIGRlZmluaXRpb24gKG5vbi1rZXkgYXR0cmlidXRlcyBzdWNoIGFzIGEgVFRMIGF0dHJpYnV0ZSBtdXN0IE5PVCBiZSBkZWNsYXJlZCksIG9yIGFkZCB0aGUgaW5kZXggdGhhdCB1c2VzIGl0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRub3QgX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSlcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJhZHVfdXNlZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIEJpbGxpbmdNb2RlIChyZXF1aXJlZCBmb3IgUFJPVklTSU9ORUQsIGZvcmJpZGRlbiBmb3IgUEFZX1BFUl9SRVFVRVNUKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0hvd0l0V29ya3MuUmVhZFdyaXRlQ2FwYWNpdHlNb2RlLmh0bWxcXFwiXFxuXFxuX3BmX2RkYmJ0X2hhc19wdChuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiKSlcXG5cXG5fcGZfZGRiYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKVxcblxcbiMgQmlsbGluZ01vZGUg44GM44Oq44OG44Op44OrIFxcXCJQUk9WSVNJT05FRFxcXCLjgIHjgb7jgZ/jga/mnKrmjIflrprvvIjjg4fjg5Xjgqnjg6vjg4ggUFJPVklTSU9ORUTvvInjgIJcXG4jIOODiOODvOOCr+ODs+WApO+8iFJlZiDnrYnvvInjga/liKTlrprjgavkvb/jgo/jgarjgYTvvIjoqqTmpJznn6XpmLLmraLvvInjgIJcXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQUk9WSVNJT05FRFxcXCJcXG5cXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJidF9iaWxsaW5nX3ByZXNlbnQobmFtZSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBzcGVjaWZpZWQgd2hlbiBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCwgb3Igc3dpdGNoIEJpbGxpbmdNb2RlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQQVlfUEVSX1JFUVVFU1RcXFwiXFxuXFx0X3BmX2RkYmJ0X2hhc19wdChuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiQmlsbGluZ01vZGUgaXMgUFJPVklTSU9ORUQgKHRoZSBkZWZhdWx0KSBidXQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGlzIG1pc3Npbmc7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiQWRkIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCAoUmVhZENhcGFjaXR5VW5pdHMgLyBXcml0ZUNhcGFjaXR5VW5pdHMpLCBvciBzZXQgQmlsbGluZ01vZGUgdG8gUEFZX1BFUl9SRVFVRVNUXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0X3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0bm90IF9wZl9kZGJidF9oYXNfcHQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtYXR0cmlidXRlLWRlZmluaXRpb25zXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXR0cmlidXRlRGVmaW5pdGlvbnMgbXVzdCBub3QgZGVmaW5lIHRoZSBzYW1lIGF0dHJpYnV0ZSB0d2ljZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnMuJWRcXFwiLCBbYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJBbiBhdHRyaWJ1dGUgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1xcXFxcXFwiXFxcIiwgW2FuXSksXFxuXFx0XFxcIktlZXAgYSBzaW5nbGUgZGVmaW5pdGlvbiBwZXIgYXR0cmlidXRlIG5hbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdHNvbWUgYiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0YW4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFuKVxcblxcdG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSA9PSBhblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2Vjb25kYXJ5IGluZGV4IG5hbWVzIG11c3QgYmUgdW5pcXVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJkaW5fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIlxcblxcbiMgRHVwbGljYXRlcyB3aXRoaW4gdGhlIHNhbWUgaW5kZXggbGlzdCBvbmx5OyBhIEdTSS9MU0kgY3Jvc3MtbGlzdCBjbGFzaCB3YXNcXG4jIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkluZGV4TmFtZVxcXCIsIFtwcm9wLCBiLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiSW5kZXggbmFtZSAnJXMnIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2U7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJEdXBsaWNhdGUgaW5kZXggbmFtZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkdpdmUgZXZlcnkgc2Vjb25kYXJ5IGluZGV4IGEgdW5pcXVlIEluZGV4TmFtZVxcXCIsXFxuXFx0X3BmX2RkYmRpbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIHByb3AgaW4gW1xcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIiwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCJdXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5hbWUpXFxuXFx0b2JqZWN0LmdldChiLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbCkgPT0gaW5hbWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nbG9iYWwtdGFibGUtcmVwbGljYS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHbG9iYWxUYWJsZSBSZXBsaWNhcyBtdXN0IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBvbmx5IHdoZW4gdGhlIGVuZm9yY2UgcGx1Z2luXFxuIyBrbm93cyB0aGUgYXBwJ3MgY29uY3JldGUgcmVnaW9uIChzZWUgc3JjL3ByaXZhdGUvZW5mb3JjZS50cyk7IHdpdGhvdXQgaXQgdGhlXFxuIyByZWZlcmVuY2UgaXMgdW5kZWZpbmVkIGFuZCB0aGlzIHJ1bGUgc2tpcHMuIFJlcGxpY2FzIHdpdGggdW5yZXNvbHZhYmxlXFxuIyBSZWdpb24gdmFsdWVzIGFsc28gbWFrZSB0aGUgcnVsZSBza2lwIOKAlCBhYnNlbmNlIGNhbm5vdCBiZSBwcm92ZW4gdGhlbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdsb2JhbC10YWJsZS1yZXBsaWNhLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVwbGljYXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBSZXBsaWNhcyBsaXN0ICV2IGRvZXMgbm90IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uICclcyc7IENyZWF0ZUdsb2JhbFRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgUmVwbGljYXMgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIHRoZSBjdXJyZW50IHJlZ2lvblxcXFxcXFwiXFxcIiwgW3JlcGxpY2FzLCByZWdpb25dKSxcXG5cXHRcXFwiQWRkIGEgcmVwbGljYSBlbnRyeSBmb3IgdGhlIHJlZ2lvbiB0aGUgc3RhY2sgZGVwbG95cyB0byAoQ0RLIFRhYmxlVjIgZG9lcyB0aGlzIGF1dG9tYXRpY2FsbHkpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItZ2xvYmFsdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXFxcIilcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRpc19zdHJpbmcocmVnaW9uKVxcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2FzXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IGl0IGluIGl0ZW1zIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpKVxcblxcdH1cXG5cXHRyZXBsaWNhcyA6PSBbciB8IHNvbWUgaXQgaW4gaXRlbXM7IHIgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpXVxcblxcdG5vdCByZWdpb24gaW4gcmVwbGljYXNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR1NJIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB0YWJsZSBCaWxsaW5nTW9kZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ2J0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLlJlYWRXcml0ZUNhcGFjaXR5TW9kZS5odG1sXFxcIlxcblxcbiMgR1NJLWxldmVsIGNvdW50ZXJwYXJ0IG9mIHBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dCAod2hpY2ggY292ZXJzIHRoZVxcbiMgdGFibGUtbGV2ZWwgcGFpciBvbmx5KS4gU2FtZSB0b2tlbiBzYWZldHk6IGxpdGVyYWwgQmlsbGluZ01vZGUgb3IgYWJzZW50XFxuIyAoZGVmYXVsdCBQUk9WSVNJT05FRCk7IHRva2VuIHZhbHVlcyBuZXZlciBqdWRnZWQuXFxuX3BmX2RkYmdidF9iaWxsaW5nX3ByZXNlbnQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpXFxuXFxuX3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBST1ZJU0lPTkVEXFxcIlxcblxcbl9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJnYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBzcGVjaWZpZXMgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGJ1dCBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9wZXJ0eSBQcm92aXNpb25lZFRocm91Z2hwdXQgY2FuJ3QgYmUgdXNlZCB3aXRoIFBBWV9QRVJfUkVRVUVTVCBCaWxsaW5nTW9kZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgR1NJJ3MgUHJvdmlzaW9uZWRUaHJvdWdocHV0LCBvciBzd2l0Y2ggdGhlIHRhYmxlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiZ2J0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUEFZX1BFUl9SRVFVRVNUXFxcIlxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIGlzIG1pc3NpbmcgUHJvdmlzaW9uZWRUaHJvdWdocHV0IHdoaWxlIHRoZSB0YWJsZSBiaWxscyBQUk9WSVNJT05FRCAodGhlIGRlZmF1bHQpOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvcGVydHkgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkFkZCBQcm92aXNpb25lZFRocm91Z2hwdXQgdG8gdGhlIEdTSSwgb3Igc2V0IEJpbGxpbmdNb2RlIHRvIFBBWV9QRVJfUkVRVUVTVFxcXCIsXFxuXFx0X3BmX2RkYmdidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRfcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRub3QgaXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vbktleUF0dHJpYnV0ZXMgZ29lcyB3aXRoIElOQ0xVREUsIGFuZCBvbmx5IHdpdGggSU5DTFVERVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ3BuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1wcm9qZWN0aW9uLmh0bWxcXFwiXFxuXFxuIyBHU0kgcHJvamVjdGlvbnMgb25seTogdGhlIExTSSBzaGFwZSBhbmQgdGhlIEtFWVNfT05MWStOb25LZXlBdHRyaWJ1dGVzIGNvbWJvXFxuIyB3ZXJlIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb2plY3Rpb25cXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIHVzZXMgUHJvamVjdGlvblR5cGUgSU5DTFVERSB3aXRob3V0IE5vbktleUF0dHJpYnV0ZXM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9qZWN0aW9uVHlwZSBpcyBJTkNMVURFLCBidXQgTm9uS2V5QXR0cmlidXRlcyBpcyBub3Qgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiTGlzdCB0aGUgcHJvamVjdGVkIGF0dHJpYnV0ZXMgaW4gTm9uS2V5QXR0cmlidXRlcywgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIEFMTCAvIEtFWVNfT05MWVxcXCIsXFxuXFx0X3BmX2RkYmdwbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHByb2ogOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvamVjdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2opXFxuXFx0b2JqZWN0LmdldChwcm9qLCBcXFwiUHJvamVjdGlvblR5cGVcXFwiLCBudWxsKSA9PSBcXFwiSU5DTFVERVxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA9PSAwXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLXByb2plY3Rpb24tbm9ua2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvamVjdGlvblxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgY29tYmluZXMgUHJvamVjdGlvblR5cGUgQUxMIHdpdGggTm9uS2V5QXR0cmlidXRlczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb2plY3Rpb25UeXBlIGlzIEFMTCwgYnV0IE5vbktleUF0dHJpYnV0ZXMgaXMgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiRHJvcCBOb25LZXlBdHRyaWJ1dGVzIChBTEwgYWxyZWFkeSBwcm9qZWN0cyBldmVyeXRoaW5nKSwgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIElOQ0xVREVcXFwiLFxcblxcdF9wZl9kZGJncG5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRwcm9qIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb2plY3Rpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm9qKVxcblxcdG9iamVjdC5nZXQocHJvaiwgXFxcIlByb2plY3Rpb25UeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkFMTFxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA+IDBcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiS2V5U2NoZW1hIG11c3QgYmUgW0hBU0hdIG9yIFtIQVNILCBSQU5HRV1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmtzaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiXFxuXFxuIyBUYWJsZS1sZXZlbCBrZXkgc2NoZW1hIG9ubHk6IGluZGV4IGtleSBzY2hlbWFzIHByb2R1Y2UgZGlmZmVyZW50IHNlcnZpY2VcXG4jIGVycm9ycyBhbmQgd2VyZSBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxuX3BmX2RkYmtzaF90eXBlKG5hbWUsIGkpIDo9IGt0IGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdGl0LmluZGV4ID09IGlcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hLjAuS2V5VHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIGZpcnN0IEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgSEFTSCwgZ290ICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIEtleVNjaGVtYTogVGhlIGZpcnN0IEtleVNjaGVtYUVsZW1lbnQgaXMgbm90IGEgSEFTSCBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlB1dCB0aGUgcGFydGl0aW9uIGtleSAoS2V5VHlwZSBIQVNIKSBmaXJzdCBhbmQgdGhlIG9wdGlvbmFsIHNvcnQga2V5IChSQU5HRSkgc2Vjb25kXFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGt0IDo9IF9wZl9kZGJrc2hfdHlwZShuYW1lLCAwKVxcblxcdGlzX3N0cmluZyhrdClcXG5cXHRrdCAhPSBcXFwiSEFTSFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWEuMS5LZXlUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgc2Vjb25kIEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgUkFOR0UsIGdvdCAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBLZXlTY2hlbWE6IFRoZSBzZWNvbmQgS2V5U2NoZW1hRWxlbWVudCBpcyBub3QgYSBSQU5HRSBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlVzZSBleGFjdGx5IG9uZSBIQVNIIGVsZW1lbnQsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgb25lIFJBTkdFIGVsZW1lbnRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0a3QgOj0gX3BmX2RkYmtzaF90eXBlKG5hbWUsIDEpXFxuXFx0aXNfc3RyaW5nKGt0KVxcblxcdGt0ICE9IFxcXCJSQU5HRVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiLFxcblxcdHNwcmludGYoXFxcIktleVNjaGVtYSBjYW4gaG9sZCBhdCBtb3N0IDIgZWxlbWVudHMgKEhBU0ggKyBvcHRpb25hbCBSQU5HRSksIGdvdCAlZFxcXCIsIFtuXSksXFxuXFx0XFxcIk1vZGVsIGV4dHJhIGFjY2VzcyBwYXR0ZXJucyBhcyBnbG9iYWwgb3IgbG9jYWwgc2Vjb25kYXJ5IGluZGV4ZXMgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRuIDo9IGNvdW50KFsxIHwgc29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKV0pXFxuXFx0biA+IDJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIEtpbmVzaXMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG11c3QgYmUgaW4gdGhlIHRhYmxlJ3MgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBLaW5lc2lzIERhdGEgU3RyZWFtcyBkZXN0aW5hdGlvbiBtdXN0IGxpdmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZVxcbiMgdGFibGUuIFRoZSBkZXBsb3ktdGltZSBmYWlsdXJlIG1vZGUgaXMgdWdseTogdGhlIHRhYmxlIGlzIGNyZWF0ZWQsIHRoZVxcbiMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG5ldmVyIHN0YWJpbGl6ZXMsIGFuZCBDbG91ZEZvcm1hdGlvbiByb2xscyBiYWNrIG9uXFxuIyBOb3RTdGFiaWxpemVkIG1pbnV0ZXMgbGF0ZXIg4oCUIG5vdGhpbmcgbmFtZXMgdGhlIHJlZ2lvbiBtaXNtYXRjaC5cXG4jIGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgb25seSBpbiBlbmZvcmNlIG1vZGUgd2l0aCBhXFxuIyBjb25jcmV0ZSByZWdpb247IG90aGVyd2lzZSB0aGlzIHJ1bGUgc2tpcHMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIEtpbmVzaXMgc3RyZWFtIGxpdmVzIGluICclcycgYnV0IHRoZSB0YWJsZSBkZXBsb3lzIHRvICclcyc7IHRoZSBzdHJlYW1pbmcgZGVzdGluYXRpb24gbmV2ZXIgc3RhYmlsaXplcyBhbmQgdGhlIHN0YWNrIHJvbGxzIGJhY2tcXFwiLCBbc3RyZWFtUmVnaW9uLCByZWdpb25dKSxcXG5cXHRcXFwiUG9pbnQgS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuIGF0IGEgc3RyZWFtIGluIHRoZSB0YWJsZSdzIG93biByZWdpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2tkcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdGlzX3N0cmluZyhyZWdpb24pXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG5cXHRzdHJlYW1SZWdpb24gOj0gcGFydHNbM11cXG5cXHRzdHJlYW1SZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRzdHJlYW1SZWdpb24gIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItbHNpLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1wiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxTSSBrZXkgYXR0cmlidXRlcyBtdXN0IGJlIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMzkgY2hlY2tzIHRhYmxlIGFuZCBHU0kga2V5IHNjaGVtYXMgYWdhaW5zdFxcbiMgQXR0cmlidXRlRGVmaW5pdGlvbnMgYnV0IGlzIGJsaW5kIHRvIExvY2FsU2Vjb25kYXJ5SW5kZXhlcyAobWVhc3VyZWRcXG4jIDIwMjYtMDktMDIsIDEuNy4wLWJldGEpLiBUaGlzIHJ1bGUgY292ZXJzIGV4YWN0bHkgdGhhdCBnYXAuXFxuXFxuX3BmX2RkYmxhZF9kZWZzKG5hbWUpIDo9IHthIHxcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG4jIElmIGFueSBkZWZpbml0aW9uJ3MgbmFtZSBpcyB1bnJlc29sdmFibGUgdGhlIHNldCBpcyBpbmNvbXBsZXRlIOKAlCBzdGF5IHNpbGVudC5cXG5fcGZfZGRibGFkX2RlZnNfcmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0ZXZlcnkgZCBpbiBbeCB8IHNvbWUgeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKV0ge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTFNJIGtleSBhdHRyaWJ1dGUgJyVzJyBpcyBub3QgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFuIGF0dHJpYnV0ZSByZWZlcmVuY2VkIGluIGEgS2V5U2NoZW1hIGVsZW1lbnQgaXMgbm90IGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIkFkZCB0aGUgYXR0cmlidXRlIHRvIEF0dHJpYnV0ZURlZmluaXRpb25zIChhbmQgbm93aGVyZSBlbHNlOiBvbmx5IGtleSBhdHRyaWJ1dGVzIGJlbG9uZyB0aGVyZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLWxvY2Fsc2Vjb25kYXJ5aW5kZXguaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRjb3VudChfcGZfZGRibGFkX2RlZnMobmFtZSkpID4gMFxcblxcdF9wZl9kZGJsYWRfZGVmc19yZXNvbHZhYmxlKG5hbWUpXFxuXFx0c29tZSBsIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJsYWRfZGVmcyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIExTSSBuZWVkcyBhIFJBTkdFIGtleSBhbmQgdGhlIHRhYmxlJ3MgbGVhZGluZyBoYXNoIGtleVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRibHNoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1sb2NhbHNlY29uZGFyeWluZGV4Lmh0bWxcXFwiXFxuXFxuX3BmX2RkYmxzaF9rZXl0eXBlcyhrcykgOj0ge2t0IHxcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoa3QpXFxufVxcblxcbiMgT25seSBqdWRnZSBhIGtleSBzY2hlbWEgd2hvc2UgS2V5VHlwZXMgYXJlIGFsbCBsaXRlcmFsIHN0cmluZ3MuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlKGtzKSBpZiBjb3VudChfcGZfZGRibHNoX2tleXR5cGVzKGtzKSkgPiAwXFxuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcykgaWYge1xcblxcdGV2ZXJ5IGsgaW4ga3Mge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyBoYXMgbm8gUkFOR0Uga2V5OyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW5kZXggS2V5U2NoZW1hIGRvZXMgbm90IGhhdmUgYSByYW5nZSBrZXkgZm9yIGluZGV4XFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiR2l2ZSB0aGUgTFNJIGEgc29ydCBrZXk6IFt0YWJsZSBIQVNIIGtleSwgaXRzIG93biBSQU5HRSBrZXldXFxcIixcXG5cXHRfcGZfZGRibHNoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRjb3VudChrcykgPiAwXFxuXFx0X3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcylcXG5cXHRub3QgXFxcIlJBTkdFXFxcIiBpbiBfcGZfZGRibHNoX2tleXR5cGVzKGtzKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyB1c2VzIGhhc2gga2V5ICclcycgYnV0IHRoZSB0YWJsZSdzIGhhc2gga2V5IGlzICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbmRleCBLZXlTY2hlbWEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBsZWFkaW5nIGhhc2gga2V5IGFzIHRhYmxlIEtleVNjaGVtYVxcXFxcXFwiXFxcIiwgW2luYW1lLCBsc2lIYXNoLCB0YWJsZUhhc2hdKSxcXG5cXHRcXFwiQW4gTFNJIG11c3QgcmV1c2UgdGhlIHRhYmxlJ3MgcGFydGl0aW9uIGtleTsgdXNlIGEgZ2xvYmFsIHNlY29uZGFyeSBpbmRleCBmb3IgYSBkaWZmZXJlbnQgaGFzaCBrZXlcXFwiLFxcblxcdF9wZl9kZGJsc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdHQuaW5kZXggPT0gMFxcblxcdHRhYmxlSGFzaCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFibGVIYXNoKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkhBU0hcXFwiXFxuXFx0bHNpSGFzaCA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobHNpSGFzaClcXG5cXHRsc2lIYXNoICE9IHRhYmxlSGFzaFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtbGVuZ3RoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFibGVOYW1lIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIG1lYXN1cmVkIGJvdW5kIChtaW5pbXVtIDMgY2hhcmFjdGVycykgaXMgZW5mb3JjZWQuIFRoZSAyNTUtY2hhclxcbiMgbWF4aW11bSBhbmQgdGhlIGNoYXJhY3RlciBwYXR0ZXJuIHdlcmUgbm90IG1lYXN1cmVkLiBOb3RlIHJlc29sdmUoKSB0dXJucyBhXFxuIyBSZWYtdG8tcmVzb3VyY2UgaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRDsgYSBsb2dpY2FsIElEIHNob3J0IGVub3VnaCB0b1xcbiMgdHJpcCB0aGlzIHJ1bGUgd2hpbGUgZmVlZGluZyBhIFRhYmxlTmFtZSBpcyB0cmVhdGVkIGFzIHRoZSBidWcgaXQgYWxtb3N0XFxuIyBjZXJ0YWlubHkgaXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYWJsZU5hbWUgJyVzJyBpcyBzaG9ydGVyIHRoYW4gMyBjaGFyYWN0ZXJzOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSBsZW5ndGggZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDNcXFxcXFxcIlxcXCIsIFt0bl0pLFxcblxcdFxcXCJVc2UgYSB0YWJsZSBuYW1lIG9mIGF0IGxlYXN0IDMgY2hhcmFjdGVycywgb3Igb21pdCBUYWJsZU5hbWUgYW5kIGxldCBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZSBvbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhYmxlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdGNvdW50KHRuKSA8IDNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcG9ydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBUQ1AvVURQIHBvcnRzIG11c3QgYmUgd2l0aGluIDAtNjU1MzUgYW5kIEZyb21Qb3J0IDw9IFRvUG9ydFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnX2ZpeCA6PSBcXFwiVXNlIGEgcG9ydCBiZXR3ZWVuIDAgYW5kIDY1NTM1IHdpdGggRnJvbVBvcnQgPD0gVG9Qb3J0XFxcIlxcblxcbl9wZl9zZ191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA+IDY1NTM1XFxuXFxuX3BmX3RjcF91ZHAocCkgaWYgcCBpbiB7XFxcInRjcFxcXCIsIFxcXCJ1ZHBcXFwiLCBcXFwiNlxcXCIsIFxcXCIxN1xcXCIsIDYsIDE3fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuJXNcXFwiLCBbZGlyLCBpdGVtLmluZGV4LCBwbmFtZV0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIG91dHNpZGUgdGhlIHZhbGlkIFRDUC9VRFAgcG9ydCByYW5nZSAwLTY1NTM1XFxcIiwgW3BuYW1lLCBuXSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRzb21lIHBuYW1lIGluIHtcXFwiRnJvbVBvcnRcXFwiLCBcXFwiVG9Qb3J0XFxcIn1cXG5cXHRuIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBwbmFtZSwgbnVsbCkpXFxuXFx0X3BmX3BvcnRfb3V0KG4pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuRnJvbVBvcnRcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiRnJvbVBvcnRcXFwiLCBudWxsKSlcXG5cXHR0IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVG9Qb3J0XFxcIiwgbnVsbCkpXFxuXFx0ZiA+PSAwXFxuXFx0dCA8PSA2NTUzNVxcblxcdGYgPiB0XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcG5hbWVdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyAldiBpcyBvdXRzaWRlIHRoZSB2YWxpZCBUQ1AvVURQIHBvcnQgcmFuZ2UgMC02NTUzNVxcXCIsIFtwbmFtZSwgbl0pLFxcblxcdF9wZl9zZ19maXgsIF9wZl9zZ191cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0X3BmX3RjcF91ZHAocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JcFByb3RvY29sXFxcIikpXFxuXFx0c29tZSBwbmFtZSBpbiB7XFxcIkZyb21Qb3J0XFxcIiwgXFxcIlRvUG9ydFxcXCJ9XFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BuYW1lXSkpKVxcblxcdF9wZl9wb3J0X291dChuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1wb3J0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Gcm9tUG9ydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRfcGZfdGNwX3VkcChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklwUHJvdG9jb2xcXFwiKSlcXG5cXHRmIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZyb21Qb3J0XFxcIikpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub1BvcnRcXFwiKSlcXG5cXHRmID49IDBcXG5cXHR0IDw9IDY1NTM1XFxuXFx0ZiA+IHRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQzIgdXNlciBkYXRhIGlzIGxpbWl0ZWQgdG8gMTYzODQgYnl0ZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfdWRzel9maXggOj0gXFxcIktlZXAgdXNlciBkYXRhIHVuZGVyIDE2Mzg0IGJ5dGVzOyBtb3ZlIGxhcmdlIHBheWxvYWRzIHRvIFMzIGFuZCBmZXRjaCB0aGVtIGZyb20gYSBzbWFsbCBib290c3RyYXAgc2NyaXB0XFxcIlxcblxcbl9wZl91ZHN6X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlZGF0YS1hZGQtdXNlci1kYXRhLmh0bWxcXFwiXFxuXFxuX3BmX3Vkc3pfbGltaXQgOj0gMTYzODRcXG5cXG4jIGJhc2U2NCDmloflrZfliJfjga7jg4fjgrPjg7zjg4nlvozjg5DjgqTjg4jmlbDvvIjjg5Hjg4fjgqPjg7PjgrDogIPmha7vvIlcXG5fcGZfdWRzel9kZWNvZGVkKHMpIDo9ICgoY291bnQocykgKiAzKSAvIDQpIC0gMiBpZiBlbmRzd2l0aChzLCBcXFwiPT1cXFwiKVxcblxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKChjb3VudChzKSAqIDMpIC8gNCkgLSAxIGlmIHtcXG5cXHRlbmRzd2l0aChzLCBcXFwiPVxcXCIpXFxuXFx0bm90IGVuZHN3aXRoKHMsIFxcXCI9PVxcXCIpXFxufVxcblxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKGNvdW50KHMpICogMykgLyA0IGlmIG5vdCBlbmRzd2l0aChzLCBcXFwiPVxcXCIpXFxuXFxuX3BmX3Vkc3pfcGF0aHMgOj0ge1xcblxcdFxcXCJBV1M6OkVDMjo6SW5zdGFuY2VcXFwiOiBcXFwiUHJvcGVydGllcy5Vc2VyRGF0YVxcXCIsXFxuXFx0XFxcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVxcXCI6IFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFRlbXBsYXRlRGF0YS5Vc2VyRGF0YVxcXCIsXFxufVxcblxcbiMgVXNlckRhdGEg44GM44Oq44OG44Op44OrIGJhc2U2NCDmloflrZfliJfjga7jgrHjg7zjgrlcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi11c2VyZGF0YS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgcCxcXG5cXHRzcHJpbnRmKFxcXCJVc2VyRGF0YSBkZWNvZGVzIHRvIGFib3V0ICV2IGJ5dGVzLCBidXQgRUMyIGxpbWl0cyB1c2VyIGRhdGEgdG8gJWQgYnl0ZXM7IFJ1bkluc3RhbmNlcyBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtzaXplLCBfcGZfdWRzel9saW1pdF0pLFxcblxcdF9wZl91ZHN6X2ZpeCwgX3BmX3Vkc3pfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgcCBpbiBfcGZfdWRzel9wYXRoc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHR1ZCA6PSByZXNvbHZlKG5hbWUsIHApXFxuXFx0aXNfc3RyaW5nKHVkKVxcblxcdHNpemUgOj0gX3BmX3Vkc3pfZGVjb2RlZCh1ZClcXG5cXHRzaXplID4gX3BmX3Vkc3pfbGltaXRcXG59XFxuXFxuIyBVc2VyRGF0YSDjgYwge1xcXCJGbjo6QmFzZTY0XFxcIjogXFxcIjxsaXRlcmFsPlxcXCJ9IOOBruOCseODvOOCue+8iOOCqOODs+OCs+ODvOODieWJjeOBrueUn+ODkOOCpOODiOaVsOOBp+WIpOWumu+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXVzZXJkYXRhLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBwLFxcblxcdHNwcmludGYoXFxcIlVzZXJEYXRhIGlzICVkIGJ5dGVzIGJlZm9yZSBiYXNlNjQgZW5jb2RpbmcsIGJ1dCBFQzIgbGltaXRzIHVzZXIgZGF0YSB0byAlZCBieXRlczsgUnVuSW5zdGFuY2VzIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW2NvdW50KGlubmVyKSwgX3BmX3Vkc3pfbGltaXRdKSxcXG5cXHRfcGZfdWRzel9maXgsIF9wZl91ZHN6X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUsIHAgaW4gX3BmX3Vkc3pfcGF0aHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0dWQgOj0gcmVzb2x2ZShuYW1lLCBwKVxcblxcdGlzX29iamVjdCh1ZClcXG5cXHRpbm5lciA6PSBvYmplY3QuZ2V0KHVkLCBcXFwiRm46OkJhc2U2NFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGlubmVyKVxcblxcdGNvdW50KGlubmVyKSA+IF9wZl91ZHN6X2xpbWl0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1pb3BzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVCUyBJb3BzL1Rocm91Z2hwdXQgbXVzdCBtYXRjaCB0aGUgdm9sdW1lIHR5cGUncyBzdXBwb3J0ZWQgcmFuZ2VzIGFuZCByYXRpb3NcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWb2x1bWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfdm9saW9wc19maXggOj0gXFxcIk1hdGNoIElvcHMvVGhyb3VnaHB1dCB0byB0aGUgdm9sdW1lIHR5cGU6IGdwMyAzMDAwLTgwMDAwIElPUFMgKG1heCA1MDAvR2lCLCB0aHJvdWdocHV0IDEyNS0yMDAwIE1pQi9zIGFuZCBhdCBtb3N0IElPUFMvNCksIGlvMSAxMDAtNjQwMDAgKG1heCA1MC9HaUIpLCBpbzIgMTAwLTI1NjAwMCAobWF4IDEwMDAvR2lCKTsgZ3AyL3N0MS9zYzEvc3RhbmRhcmQgYWNjZXB0IG5laXRoZXIgcHJvcGVydHlcXFwiXFxuXFxuX3BmX3ZvbGlvcHNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sXFxcIlxcblxcbl9wZl92b2xpb3BzX3JhbmdlIDo9IHtcXFwiZ3AzXFxcIjogWzMwMDAsIDgwMDAwXSwgXFxcImlvMVxcXCI6IFsxMDAsIDY0MDAwXSwgXFxcImlvMlxcXCI6IFsxMDAsIDI1NjAwMF19XFxuXFxuX3BmX3ZvbGlvcHNfcGVyX2dpYiA6PSB7XFxcImdwM1xcXCI6IDUwMCwgXFxcImlvMVxcXCI6IDUwLCBcXFwiaW8yXFxcIjogMTAwMH1cXG5cXG5fcGZfdm9saW9wc19vdXQobiwgbG8sIGhpKSBpZiBuIDwgbG9cXG5cXG5fcGZfdm9saW9wc19vdXQobiwgbG8sIGhpKSBpZiBuID4gaGlcXG5cXG5fcGZfdm9saW9wc19oYXNfaW9wcyhuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKVxcblxcbiMgSU9QUyDjgYzlnovjgZTjgajjga7ntbblr77jg6zjg7PjgrjlpJZcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgaXMgb3V0c2lkZSB0aGUgc3VwcG9ydGVkIHJhbmdlICVkLSVkIGZvciAlcyB2b2x1bWVzXFxcIiwgW24sIHJbMF0sIHJbMV0sIHZ0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0ciA6PSBfcGZfdm9saW9wc19yYW5nZVt2dF1cXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHRfcGZfdm9saW9wc19vdXQobiwgclswXSwgclsxXSlcXG59XFxuXFxuIyBJT1BTIDog44K144Kk44K65q+U44Gu6LaF6YGOXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzICV2IGV4Y2VlZHMgdGhlIG1heGltdW0gcmF0aW8gb2YgJWQgSU9QUyBwZXIgR2lCIGZvciAlcyAoU2l6ZSAldiBHaUIgYWxsb3dzIGF0IG1vc3QgJXYpXFxcIiwgW24sIHJhdGlvLCB2dCwgcywgcyAqIHJhdGlvXSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0cmF0aW8gOj0gX3BmX3ZvbGlvcHNfcGVyX2dpYlt2dF1cXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNpemVcXFwiKSlcXG5cXHRuID4gcyAqIHJhdGlvXFxufVxcblxcbiMgSW9wcyDjgpLlj5fjgZHku5jjgZHjgarjgYTlnovjgasgSW9wcyDjgpLmjIflrppcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMgdm9sdW1lcyAodmFsaWQgb25seSBmb3IgZ3AzLCBpbzEsIGlvMik7IEVDMiByZWplY3RzIHRoZSBDcmVhdGVWb2x1bWUgY2FsbFxcXCIsIFt2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHZ0IGluIHtcXFwiZ3AyXFxcIiwgXFxcInN0MVxcXCIsIFxcXCJzYzFcXFwiLCBcXFwic3RhbmRhcmRcXFwifVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpXFxufVxcblxcbiMgVGhyb3VnaHB1dCDjga8gZ3AzIOWwgueUqFxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcyB2b2x1bWVzICh2YWxpZCBvbmx5IGZvciBncDMpOyBFQzIgcmVqZWN0cyB0aGUgQ3JlYXRlVm9sdW1lIGNhbGxcXFwiLCBbdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRpc19zdHJpbmcodnQpXFxuXFx0dnQgIT0gXFxcImdwM1xcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKVxcbn1cXG5cXG4jIGdwMyBUaHJvdWdocHV0IOOBrue1tuWvvuODrOODs+OCuFxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCAldiBNaUIvcyBpcyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgMTI1LTIwMDAgZm9yIGdwMyB2b2x1bWVzXFxcIiwgW3RdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHRfcGZfdm9saW9wc19vdXQodCwgMTI1LCAyMDAwKVxcbn1cXG5cXG4jIGdwMyBUaHJvdWdocHV0IDogSU9QUyDmr5TvvIjmnIDlpKcgMC4yNSBNaUIvcyBwZXIgSU9QU++8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCAldiBNaUIvcyBleGNlZWRzIHRoZSBtYXhpbXVtIHJhdGlvIG9mIDAuMjUgTWlCL3MgcGVyIHByb3Zpc2lvbmVkIElPUFMgKCV2IElPUFMgYWxsb3dzIGF0IG1vc3QgJXYpXFxcIiwgW3QsIG4sIG4gLyA0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIikpXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0dCAqIDQgPiBuXFxufVxcblxcbiMgZ3AzIOOBpyBJb3BzIOacquaMh+Wumu+8iOODh+ODleOCqeODq+ODiCAzMDAw77yJ44Gu44Go44GN44GuIFRocm91Z2hwdXQg5q+UXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGV4Y2VlZHMgNzUwLCB0aGUgbWF4aW11bSBmb3IgdGhlIGRlZmF1bHQgMzAwMCBJT1BTICgwLjI1IE1pQi9zIHBlciBJT1BTKTsgcHJvdmlzaW9uIElvcHMgZXhwbGljaXRseSBvciBsb3dlciB0aGUgdGhyb3VnaHB1dFxcXCIsIFt0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0bm90IF9wZl92b2xpb3BzX2hhc19pb3BzKG5hbWUpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIikpXFxuXFx0dCA+IDc1MFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItZGVmaW5pdGlvbnMtZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyRGVmaW5pdGlvbnMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjb250YWluZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzY2RlX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2Vjc2NkZV9tc2cgOj0gXFxcIlJlZ2lzdGVyVGFza0RlZmluaXRpb24gbmVlZHMgYXQgbGVhc3Qgb25lIGNvbnRhaW5lcjsgdGhlIHNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBsaXN0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIlxcblxcbl9wZl9lY3NjZGVfZml4IDo9IFxcXCJBZGQgYXQgbGVhc3Qgb25lIGVudHJ5IHRvIENvbnRhaW5lckRlZmluaXRpb25zXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBtYXJrcyBubyBUYXNrRGVmaW5pdGlvbiBwcm9wZXJ0eSBhcyByZXF1aXJlZCwgc28gYW5cXG4jIGFic2VudCBvciBlbXB0eSBDb250YWluZXJEZWZpbml0aW9ucyBzYWlscyB0aHJvdWdoIHNjaGVtYSB2YWxpZGF0aW9uIGFuZFxcbiMgZGllcyBhdCByZWdpc3RyYXRpb24uIGZsYXR0ZW5fbGlzdCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIGFic2VudCBhbmRcXG4jIGVtcHR5IGFsaWtlLCBzbyBib3RoIGJsb2NrcyByZWFkIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcylcXG4jIHRvIHRlbGwgYSBsaXRlcmFsIGVtcHR5IGxpc3QgZnJvbSBhbiB1bnJlc29sdmFibGUgdmFsdWUgc3VjaCBhcyBGbjo6SWYuXFxuX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvbnRhaW5lckRlZmluaXRpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShyYXcpXFxuXFx0Y291bnQocmF3KSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIE1lbW9yeSBtdXN0IG5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgc2luZ2xlIGNvbnRhaW5lcidzIGhhcmQgTWVtb3J5IGxpbWl0IGNhbm5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LlxcbiMgVGFzayBNZW1vcnkgYXJyaXZlcyBhcyBhIHN0cmluZyAoXFxcIjUxMlxcXCIpOyB0b19udW1iZXIgY292ZXJzIGJvdGggc3BlbGxpbmdzIGFuZFxcbiMgbWFrZXMgdGhlIHJ1bGUgc2tpcCB3aGVuIGVpdGhlciBzaWRlIGlzIHVucmVzb2x2YWJsZSBvciBHQi1zdWZmaXhlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LW92ZXItdGFza1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlcXFwiLCBbYy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciAnJXMnIHNldHMgTWVtb3J5ICV2IGFib3ZlIHRoZSB0YXNrLWxldmVsIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiVGhlICdtZW1vcnknIHNldHRpbmcgZm9yIGNvbnRhaW5lciAnJXMnIGlzIGdyZWF0ZXIgdGhhbiBmb3IgdGhlIHRhc2tcXFxcXFxcIlxcXCIsIFtjbmFtZSwgY20sIHRtLCBjbmFtZV0pLFxcblxcdFxcXCJMb3dlciB0aGUgY29udGFpbmVyIE1lbW9yeSB0byBhdCBtb3N0IHRoZSB0YXNrLWxldmVsIE1lbW9yeSwgb3IgcmFpc2UgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHRtIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1lbW9yeVxcXCIpKVxcblxcdHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdChjLnZhbHVlKVxcblxcdGNtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRjbSA+IHRtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIG5lZWRzIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbiB3aGVuIHRoZSB0YXNrIHNldHMgbm8gTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzbWVtcmVxX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgV2hlbiB0aGUgdGFzayBkZWZpbml0aW9uIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeSwgZXZlcnkgY29udGFpbmVyIG11c3Qgc2V0XFxuIyBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb24uIFByb3ZpbmcgdHJ1ZSBhYnNlbmNlIG5lZWRzIHRoZSBwcmVwcm9jZXNzZWRcXG4jIGRvY3VtZW50IChpbnB1dC5yZXNvdXJjZXMpOiByZXNvbHZlKCkgaXMgdW5kZWZpbmVkIGZvciBhIG1pc3Npbmcga2V5IGFuZCBmb3JcXG4jIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBhbGlrZSwgc28gaXQgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwiUmVmIHRvIGFcXG4jIHBhcmFtZXRlclxcXCIuIFRoZSBpc19vYmplY3QgZ3VhcmQgZmFpbHMgY2xvc2VkIGlmIHRoYXQgaW50ZXJuYWwgc2hhcGUgY2hhbmdlcy5cXG5fcGZfZWNzbWVtcmVxX3Rhc2tfbWVtb3J5X2Fic2VudChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1lbW9yeVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZFxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBuZWl0aGVyIE1lbW9yeSBub3IgTWVtb3J5UmVzZXJ2YXRpb24gYW5kIHRoZSB0YXNrIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mICdtZW1vcnknIG9yICdtZW1vcnlSZXNlcnZhdGlvbicgbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtjbmFtZV0pLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnksIG9yIGdpdmUgdGhlIGNvbnRhaW5lciBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb25cXFwiLFxcblxcdF9wZl9lY3NtZW1yZXFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdGNuYW1lIDo9IG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZW1vcnlSZXNlcnZhdGlvbiBtdXN0IG5vdCBleGNlZWQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1lbW9yeVJlc2VydmF0aW9uIGlzIGEgc29mdCBmbG9vciBhbmQgTWVtb3J5IGEgaGFyZCBjZWlsaW5nOyB0aGUgc2VydmljZVxcbiMgcmVqZWN0cyBhIGZsb29yIGFib3ZlIHRoZSBjZWlsaW5nLiB0b19udW1iZXIgZmFpbHMgKGFuZCB0aGUgcnVsZSBza2lwcykgd2hlblxcbiMgZWl0aGVyIHZhbHVlIGlzIGFic2VudCBvciB1bnJlc29sdmFibGUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlSZXNlcnZhdGlvblxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnlSZXNlcnZhdGlvbiAldiBhYm92ZSBNZW1vcnkgJXY7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIidtZW1vcnknIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICdtZW1vcnlSZXNlcnZhdGlvbidcXFxcXFxcIlxcXCIsIFtjbmFtZSwgbXIsIG1dKSxcXG5cXHRcXFwiTG93ZXIgTWVtb3J5UmVzZXJ2YXRpb24gdG8gYXQgbW9zdCBNZW1vcnksIG9yIHJhaXNlIE1lbW9yeVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkpXFxuXFx0bXIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkpXFxuXFx0bXIgPiBtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIGRpYWdub3N0aWMgcGVyIGR1cGxpY2F0ZWQgbGF0ZXIgb2NjdXJyZW5jZTsgb25seSBsaXRlcmFsIHN0cmluZyBuYW1lc1xcbiMgY2FuIGJlIGNvbXBhcmVkLCBzbyBhIFJlZi12YWx1ZWQgTmFtZSBza2lwcyBpdHMgcGFpcnMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZHVwbGljYXRlLWNvbnRhaW5lci1uYW1lc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5OYW1lXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgbmFtZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cXFxcXFxcIlxcXCIsIFtuYV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IGNvbnRhaW5lciBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGEgZGlzdGluY3QgTmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRuYSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobmEpXFxuXFx0bmEgPT0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTmFtZVxcXCIsIG51bGwpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVwaGVtZXJhbFN0b3JhZ2UgU2l6ZUluR2lCIG11c3QgYmUgMjEtMjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2VwaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWVwaGVtZXJhbHN0b3JhZ2UuaHRtbFxcXCJcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgY2FycmllcyBubyBtaW5pbXVtL21heGltdW0gZm9yIFNpemVJbkdpQiwgc28gMjEtMjAwIGlzXFxuIyBlbmZvcmNlZCBvbmx5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYmVsb3cgMjE7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbGVhc3QgMjFcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQiwgb3IgZHJvcCBFcGhlbWVyYWxTdG9yYWdlIHRvIGtlZXAgdGhlIGRlZmF1bHQgMjAgR2lCXFxcIixcXG5cXHRfcGZfZWNzZXBoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIikpXFxuXFx0cyA8IDIxXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYWJvdmUgMjAwOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJFcGhlbWVyYWxTdG9yYWdlIHNpemUgc2hvdWxkIGJlIGF0IG1vc3QgMjAwXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJVc2UgYSBzaXplIGJldHdlZW4gMjEgYW5kIDIwMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzID4gMjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVzc2VudGlhbC1jb250YWluZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXQgbGVhc3Qgb25lIGNvbnRhaW5lciBtdXN0IGJlIGVzc2VudGlhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFc3NlbnRpYWwgZGVmYXVsdHMgdG8gdHJ1ZSwgc28gdGhlIHJ1bGUgZmlyZXMgb25seSB3aGVuIGV2ZXJ5IGNvbnRhaW5lciBzYXlzXFxuIyBFc3NlbnRpYWw6IGZhbHNlIGV4cGxpY2l0bHkuIEEgY29udGFpbmVyIHdob3NlIEVzc2VudGlhbCBpcyB1bnJlc29sdmFibGUgKG9yXFxuIyBhIG5vbi1ib29sZWFuKSBicmVha3MgdGhlIGBldmVyeWAsIGFuZCB0aGUgcnVsZSBza2lwcyDigJQgYWJzZW5jZSBvZiBhblxcbiMgZXNzZW50aWFsIGNvbnRhaW5lciBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdFxcXCJFdmVyeSBjb250YWluZXIgc2V0cyBFc3NlbnRpYWw6IGZhbHNlOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUYXNrIGRlZmluaXRpb24gZG9lc24ndCBoYXZlIGFueSBlc3NlbnRpYWwgY29udGFpbmVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJNYXJrIGF0IGxlYXN0IG9uZSBjb250YWluZXIgRXNzZW50aWFsOiB0cnVlLCBvciBvbWl0IEVzc2VudGlhbCAoaXQgZGVmYXVsdHMgdG8gdHJ1ZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdGl0ZW1zIDo9IFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBjIGluIGl0ZW1zIHtcXG5cXHRcXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJFc3NlbnRpYWxcXFwiLCBudWxsKSA9PSBmYWxzZVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmUgTmV0d29ya01vZGUgJ2F3c3ZwYydcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NubV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2tfZGVmaW5pdGlvbl9wYXJhbWV0ZXJzLmh0bWwjbmV0d29ya19tb2RlXFxcIlxcblxcbiMgcmVzb2x2ZSgpIGNhbm5vdCB0ZWxsIFxcXCJhYnNlbnRcXFwiIGZyb20gXFxcInVucmVzb2x2YWJsZVxcXCIgKGJvdGggdW5kZWZpbmVkKSwgc28gdHJ1ZVxcbiMgYWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50OyBhIFJlZi12YWx1ZWQgTmV0d29ya01vZGVcXG4jIG5vIGxvbmdlciB0cmlwcyB0aGUgbm90LXNldCBibG9jay5cXG5fcGZfZWNzbm1fYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya01vZGVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmV0d29ya01vZGUgaXMgJyVzJyBidXQgdGFzayBkZWZpbml0aW9ucyByZXF1aXJpbmcgRkFSR0FURSBjb21wYXRpYmlsaXR5IG11c3QgdXNlICdhd3N2cGMnOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25tXSksXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRubSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIilcXG5cXHRpc19zdHJpbmcobm0pXFxuXFx0bm0gIT0gXFxcImF3c3ZwY1xcXCJcXG59XFxuXFxuIyBOZXR3b3JrTW9kZSDmnKrmjIflrprjgafjgoIgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiDjga9cXG4jIFxcXCJGYXJnYXRlIG9ubHkgc3VwcG9ydHMgbmV0d29yayBtb2RlICdhd3N2cGMnLlxcXCIg44Gn5aSx5pWX44GZ44KL77yIMjAyNi0wOS0wMSDlrp8gQVBJIOeiuuiqje+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0XFxcIk5ldHdvcmtNb2RlIGlzIG5vdCBzZXQsIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCBzZXQgaXQgdG8gJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJTZXQgTmV0d29ya01vZGUgdG8gJ2F3c3ZwYydcXFwiLFxcblxcdF9wZl9lY3NubV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cmMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXF1aXJlc0NvbXBhdGliaWxpdGllc1xcXCIpXFxuXFx0aXNfYXJyYXkocmMpXFxuXFx0XFxcIkZBUkdBVEVcXFwiIGluIHJjXFxuXFx0X3BmX2Vjc25tX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGQVJHQVRFIGNvbXBhdGliaWxpdHkgcmVxdWlyZXMgdGFzay1sZXZlbCBDcHUgYW5kIE1lbW9yeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2ZhcmdjbV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjcy10YXNrZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDQ3IGNoZWNrcyB0aGUgQ3B1L01lbW9yeSBwYWlyaW5nIG9ubHkgd2hlbiBib3RoIGFyZSBwcmVzZW50O1xcbiMgbGVhdmluZyBvbmUgb3V0IGVudGlyZWx5IGlzIGNhdWdodCBieSBub3RoaW5nIGJlZm9yZSByZWdpc3RyYXRpb24uIFRydWVcXG4jIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIHBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxuIyBmb3IgdGhlIGlkaW9tKS5cXG5fcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSkgaWYge1xcblxcdHNvbWUgcmMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRyYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXFxuX3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DcHVcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBDcHUgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdjcHUnIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIENwdSAoYW5kIE1lbW9yeSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJDcHVcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIixcXG5cXHRcXFwiUmVxdWlyZXNDb21wYXRpYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5IGlzIG1pc3Npbmc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVxdWlyZXMgdGhhdCAnbWVtb3J5JyBiZSBkZWZpbmVkIGF0IHRoZSB0YXNrIGxldmVsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnkgKGFuZCBDcHUpIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEZhcmdhdGUgY29tYmluYXRpb25zXFxcIixcXG5cXHRfcGZfZWNzZmFyZ2NtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSlcXG5cXHRfcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBcXFwiTWVtb3J5XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBTEIgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaWRsZV90aW1lb3V0X291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPiA0MDAwXFxuXFxuX3BmX25vbl9hbGIobmFtZSkgaWYge1xcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIilcXG5cXHR0ICE9IFxcXCJhcHBsaWNhdGlvblxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXR0cmlidXRlcy4lZC5WYWx1ZVxcXCIsIFtpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQwMDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDQwMDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2FwcGxpY2F0aW9uLWxvYWQtYmFsYW5jZXJzLmh0bWwjY29ubmVjdGlvbi1pZGxlLXRpbWVvdXRcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0bm90IF9wZl9ub25fYWxiKG5hbWUpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9pZGxlX3RpbWVvdXRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1kZXJlZ2lzdHJhdGlvbi1kZWxheS1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM2MDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGVyZWdfZGVsYXlfb3V0KG4pIGlmIG4gPCAwXFxuXFxuX3BmX2RlcmVnX2RlbGF5X291dChuKSBpZiBuID4gMzYwMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItdGctZGVyZWdpc3RyYXRpb24tZGVsYXktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgaXMgJXYgYnV0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzNjAwIHNlY29uZHNcXFwiLCBbbnVtXSksXFxuXFx0XFxcIlNldCBkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDM2MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2VkaXQtdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXMuaHRtbCNkZXJlZ2lzdHJhdGlvbi1kZWxheVxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX2RlcmVnX2RlbGF5X291dChudW0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgbXVzdCBiZSAwIG9yIGJldHdlZW4gMzAgYW5kIDkwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiB7XFxuXFx0biA+IDBcXG5cXHRuIDwgMzBcXG59XFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIG4gPiA5MDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRnLXNsb3ctc3RhcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgaXMgJXYgYnV0IG11c3QgYmUgMCAoZGlzYWJsZWQpIG9yIGJldHdlZW4gMzAgYW5kIDkwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgc2xvd19zdGFydC5kdXJhdGlvbl9zZWNvbmRzIHRvIDAgb3IgYSB2YWx1ZSBiZXR3ZWVuIDMwIGFuZCA5MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2VkaXQtdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXMuaHRtbCNzbG93LXN0YXJ0LW1vZGVcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0YXR0ciA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGF0dHIpXFxuXFx0b2JqZWN0LmdldChhdHRyLCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9zbG93X3N0YXJ0X291dChudW0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLWlubGluZS1wb2xpY3ktc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbmxpbmUgcG9saWN5IGRvY3VtZW50cyBhcmUgbGltaXRlZCBwZXIgaWRlbnRpdHkgKHJvbGUgMTAyNDAgLyBncm91cCA1MTIwIC8gdXNlciAyMDQ4IGNoYXJhY3RlcnMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9pbmxpbmVfcG9saWN5X2xpbWl0cyA6PSB7XFxuXFx0XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiOiAxMDI0MCxcXG5cXHRcXFwiQVdTOjpJQU06OlJvbGVQb2xpY3lcXFwiOiAxMDI0MCxcXG5cXHRcXFwiQVdTOjpJQU06OlVzZXJQb2xpY3lcXFwiOiAyMDQ4LFxcblxcdFxcXCJBV1M6OklBTTo6R3JvdXBQb2xpY3lcXFwiOiA1MTIwLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1pbmxpbmUtcG9saWN5LXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQb2xpY3lEb2N1bWVudCBpcyAlZCBjaGFyYWN0ZXJzIChKU09OIHdpdGhvdXQgd2hpdGVzcGFjZSkgYnV0IHRoZSBpbmxpbmUgcG9saWN5IGxpbWl0IGZvciAlcyBpcyAlZCAocm9sZTogMTAyNDAsIGdyb3VwOiA1MTIwLCB1c2VyOiAyMDQ4KVxcXCIsIFtzaXplLCBydHlwZSwgbGltaXRdKSxcXG5cXHRcXFwiTW92ZSBzdGF0ZW1lbnRzIGludG8gbWFuYWdlZCBwb2xpY2llcyBvciBzaG9ydGVuIHRoZSBkb2N1bWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWFtLXF1b3Rhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgcnR5cGUsIGxpbWl0IGluIF9wZl9pbmxpbmVfcG9saWN5X2xpbWl0c1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRkb2MgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KGRvYylcXG5cXHRzaXplIDo9IGNvdW50KGpzb24ubWFyc2hhbChkb2MpKVxcblxcdHNpemUgPiBsaW1pdFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljaWVzIHBlciBpZGVudGl0eSBhcmUgY2FwcGVkIChoYXJkIG1heGltdW1zIHJvbGUgMjUgLyB1c2VyIDIwIC8gZ3JvdXAgMTApXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODj+ODvOODieS4iumZkO+8iFNlcnZpY2UgUXVvdGFzIOOBruOAjE1heGltdW0gcXVvdGHjgI09IOOBneOCjOS7peS4iuW8leOBjeS4iuOBkuS4jeWPr+iDveOBquWApO+8iTpcXG4jICAgcm9sZSAyNSAvIHVzZXIgMjAgLyBncm91cCAxMO+8iGdyb3VwIOOBryBhZGp1c3RhYmxlOiBmYWxzZeOAgeWun+a4rOOBp+OCgueiuuiqje+8ieOAglxcbiMg44OH44OV44Kp44Or44OI77yIcm9sZSAyMCAvIHVzZXIgMTAgLyBncm91cCAxMO+8iei2heOBr+OCouOCq+OCpuODs+ODiOOBruOCr+OCqeODvOOCv+W8leOBjeS4iuOBkuasoeesrOOBp1xcbiMg5oiQ5Yqf44GX5b6X44KL44Gf44KBIEVSUk9SIOOBq+OBl+OBquOBhO+8iGJlbmNoIOOCouOCq+OCpuODs+ODiOOBriByb2xlPTIwIOOBpyAxMSDlgIvmiJDlip/jgpLlrp/muKzmuIjjgb/vvInjgIJcXG5fcGZfaWFtcG9sX2xpbWl0cyA6PSB7XFxuXFx0XFxcIkFXUzo6SUFNOjpSb2xlXFxcIjogMjUsXFxuXFx0XFxcIkFXUzo6SUFNOjpVc2VyXFxcIjogMjAsXFxuXFx0XFxcIkFXUzo6SUFNOjpHcm91cFxcXCI6IDEwLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIG1hbmFnZWQgcG9saWNpZXMgYXJlIGF0dGFjaGVkLCBidXQgdGhlIGhhcmQgbWF4aW11bSBmb3IgJXMgaXMgJWQgKHF1b3RhIGRlZmF1bHRzOiByb2xlIDIwLCB1c2VyIDEwLCBncm91cCAxMDsgcmFpc2FibGUgb25seSB1cCB0byB0aGUgaGFyZCBtYXhpbXVtKTsgZGVwbG95bWVudCBmYWlscyB3aXRoIExpbWl0RXhjZWVkZWRcXFwiLCBbbiwgcnR5cGUsIGxpbWl0XSksXFxuXFx0XFxcIkNvbnNvbGlkYXRlIHN0YXRlbWVudHMgaW50byBmZXdlciBtYW5hZ2VkIHBvbGljaWVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgbGltaXQgaW4gX3BmX2lhbXBvbF9saW1pdHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0YXJyIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRuIDo9IGNvdW50KGFycilcXG5cXHRuID4gbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbWFuYWdlZC1wb2xpY3ktc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljeSBkb2N1bWVudHMgYXJlIGxpbWl0ZWQgdG8gNjE0NCBjaGFyYWN0ZXJzICh3aGl0ZXNwYWNlIGV4Y2x1ZGVkKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5RG9jdW1lbnQgaXMgJWQgY2hhcmFjdGVycyAoSlNPTiB3aXRob3V0IHdoaXRlc3BhY2UpIGJ1dCB0aGUgbWFuYWdlZCBwb2xpY3kgbGltaXQgaXMgNjE0NFxcXCIsIFtzaXplXSksXFxuXFx0XFxcIlNwbGl0IHRoZSBkb2N1bWVudCBpbnRvIG11bHRpcGxlIG1hbmFnZWQgcG9saWNpZXMgb3Igc2hvcnRlbiBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWFtLXF1b3Rhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwiKVxcblxcdGRvYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIilcXG5cXHRpc19vYmplY3QoZG9jKVxcblxcdHNpemUgOj0gY291bnQoanNvbi5tYXJzaGFsKGRvYykpXFxuXFx0c2l6ZSA+IDYxNDRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZW52LXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGFtYmRhIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbGltaXRlZCB0byA0MDk2IGJ5dGVzIGluIHRvdGFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODquODhuODqeODq+aWh+Wtl+WIl+OBruOCreODvC/lgKTjgaDjgZHjgpLmlbDjgYjjgovvvIjjg4jjg7zjgq/jg7Pjga/jgrnjgq3jg4Pjg5fvvInjgILlkIjoqIjjgYzml6LjgasgNDA5NiDjgpLotoXjgYjjgaZcXG4jIOOBhOOCjOOBsOOAgeWun+mam+OBruODh+ODl+ODreOCpOOBp+OCguW/heOBmuWkseaVl+OBmeOCi++8iOWun+OCteOCpOOCuuOBr+aOqOWumuS7peS4iuOBq+OBl+OBi+OBquOCieOBquOBhO+8ieOAglxcbiMgTk9URTog44GT44Gu44Ko44Oz44K444Oz44GuIFJlZ28g44OR44O844K144Gv5YaF5YyF6KGo6KiY5YaF44GuIDIg5aSJ5pWwIHNvbWXvvIhzb21lIGssIHYgaW4gdmFyc++8ieOCklxcbiMg5Y+X44GR5LuY44GR44Gq44GE44Gf44KB44CBb2JqZWN0LmtleXMg57WM55Sx44Gn5pu444GP44CCXFxuX3BmX2xlbnZfc2l6ZSh2YXJzKSA6PSBzdW0oW3MgfFxcblxcdHNvbWUgayBpbiBvYmplY3Qua2V5cyh2YXJzKVxcblxcdGlzX3N0cmluZyh2YXJzW2tdKVxcblxcdHMgOj0gY291bnQoaykgKyBjb3VudCh2YXJzW2tdKVxcbl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZW52LXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvdGFsIGF0IGxlYXN0ICVkIGJ5dGVzIChsaXRlcmFsIGtleXMgYW5kIHZhbHVlcyksIGJ1dCBMYW1iZGEgbGltaXRzIHRoZSBlbnZpcm9ubWVudCB0byA0MDk2IGJ5dGVzOyBDcmVhdGVGdW5jdGlvbiBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFt0b3RhbF0pLFxcblxcdFxcXCJNb3ZlIGxhcmdlIHZhbHVlcyB0byBTU00gUGFyYW1ldGVyIFN0b3JlLCBTZWNyZXRzIE1hbmFnZXIsIG9yIGEgYnVuZGxlZCBjb25maWcgZmlsZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2dldHRpbmdzdGFydGVkLWxpbWl0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHR2YXJzIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW52aXJvbm1lbnQuVmFyaWFibGVzXFxcIilcXG5cXHRpc19vYmplY3QodmFycylcXG5cXHR0b3RhbCA6PSBfcGZfbGVudl9zaXplKHZhcnMpXFxuXFx0dG90YWwgPiA0MDk2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1hbGlhcy1jbG91ZGZyb250LXpvbmUtaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ2xvdWRGcm9udCBhbGlhcyB0YXJnZXQgbXVzdCB1c2UgaG9zdGVkIHpvbmUgWjJGRFROREFUQVFZVzJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFdmVyeSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBpcyBhbGlhc2VkIHRocm91Z2ggdGhlIHNpbmdsZSBnbG9iYWwgaG9zdGVkXFxuIyB6b25lIFoyRkRUTkRBVEFRWVcyLiBBbnkgb3RoZXIgQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkIChhbiBBTEIncyByZWdpb25hbFxcbiMgem9uZSBpZCBpcyB0aGUgY2xhc3NpYyBwYXN0ZSBlcnJvcikgZmFpbHMgYXQgZGVwbG95IHRpbWUgd2l0aCBcXFwidGhlIGFsaWFzXFxuIyB0YXJnZXQgbmFtZSBkb2VzIG5vdCBsaWUgd2l0aGluIHRoZSB0YXJnZXQgem9uZVxcXCIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWFsaWFzLWNsb3VkZnJvbnQtem9uZS1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgYWxpYXMgdGFyZ2V0cyBhIENsb3VkRnJvbnQgZG9tYWluLCBzbyBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgbXVzdCBiZSBaMkZEVE5EQVRBUVlXMiwgbm90ICclcydcXFwiLCBbemlkXSksXFxuXFx0XFxcIlNldCBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgdG8gWjJGRFROREFUQVFZVzIgKGluIHRoZSBDREssIHJvdXRlNTNfdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0IGRvZXMgdGhpcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvY2ZfcmVnaW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0ZG5zIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuRE5TTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGRucylcXG5cXHRlbmRzd2l0aCh0cmltX3N1ZmZpeChsb3dlcihkbnMpLCBcXFwiLlxcXCIpLCBcXFwiLmNsb3VkZnJvbnQubmV0XFxcIilcXG5cXHR6aWQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6aWQpXFxuXFx0emlkICE9IFxcXCJaMkZEVE5EQVRBUVlXMlxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWFwZXgtY25hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ05BTUUgcmVjb3JkIGlzIG5vdCBwZXJtaXR0ZWQgYXQgdGhlIHpvbmUgYXBleFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M19hcGV4X25vcm0obikgOj0gdHJpbV9zdWZmaXgobG93ZXIobiksIFxcXCIuXFxcIilcXG5cXG4jIFRoZSBlbmdpbmUncyBFMzAyMyBjYXRjaGVzIGFuIGFwZXggQ05BTUUgb25seSB3aGVuIHRoZSByZWNvcmQgY2FycmllcyBhXFxuIyBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lLiBDREsgTDIgYWx3YXlzIGxpbmtzIHJlY29yZHMgd2l0aFxcbiMgSG9zdGVkWm9uZUlkOiB7XFxcIlJlZlxcXCI6IDx6b25lPn0sIHdoaWNoIEUzMDIzIGRvZXMgbm90IHNlZSAobWVhc3VyZWQgMjAyNi0wOS0wMixcXG4jIGVuZ2luZSAxLjcuMC1iZXRhKS4gcmVzb2x2ZSgpIHR1cm5zIHN1Y2ggYSBSZWYgaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRCxcXG4jIHNvIHdoZW4gdGhhdCBJRCBuYW1lcyBhIEhvc3RlZFpvbmUgaW4gdGhlIHNhbWUgdGVtcGxhdGUgd2UgY2FuIHJlYWQgaXRzXFxuIyBsaXRlcmFsIE5hbWUgYW5kIGRvIHRoZSBhcGV4IGNvbXBhcmlzb24gb3Vyc2VsdmVzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1hcGV4LWNuYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBIENOQU1FIHJlY29yZCBpcyBub3QgcGVybWl0dGVkIGF0IHRoZSB6b25lIGFwZXggKCclcycpOyB0aGUgZGVwbG95bWVudCBmYWlscyB3aXRoIFxcXFxcXFwiUlJTZXQgb2YgdHlwZSBDTkFNRSAuLi4gaXMgbm90IHBlcm1pdHRlZCBhdCBhcGV4XFxcXFxcXCJcXFwiLCBbcmVjTmFtZV0pLFxcblxcdFxcXCJVc2UgYW4gYWxpYXMgQS9BQUFBIHJlY29yZCBmb3IgdGhlIGFwZXggKEFsaWFzVGFyZ2V0KSwgb3IgbW92ZSB0aGUgQ05BTUUgdG8gYSBzdWJkb21haW5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcmVzb3VyY2UtcmVjb3JkLXNldHMtY2hvb3NpbmctYWxpYXMtbm9uLWFsaWFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHpyZWYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6cmVmKVxcblxcdHpyZWYgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6SG9zdGVkWm9uZVxcXCIpXFxuXFx0em9uZU5hbWUgOj0gcmVzb2x2ZSh6cmVmLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoem9uZU5hbWUpXFxuXFx0cmVjTmFtZSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhyZWNOYW1lKVxcblxcdF9wZl9yNTNfYXBleF9ub3JtKHJlY05hbWUpID09IF9wZl9yNTNfYXBleF9ub3JtKHpvbmVOYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtZ2VvbG9jYXRpb24tZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgZXhwcmVzc2VzIHRoaXMgYXMgYSBvbmVPZiwgd2hpY2ggdGhlIHNlcnZlci1zaWRlXFxuIyBwcmUtZGVwbG95IHZhbGlkYXRpb24gZW5mb3JjZXMgKFxcXCIyIHN1YnNjaGVtYXMgbWF0Y2hlZCBpbnN0ZWFkIG9mIG9uZVxcXCIpIGJ1dFxcbiMgdGhlIGJ1bmRsZWQgZW5naW5lIGRvZXMgbm90IGV2YWx1YXRlIOKAlCBoZW5jZSB1cHN0cmVhbTogcGVuZGluZy1lbmdpbmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWdlb2xvY2F0aW9uLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR2VvTG9jYXRpb25cXFwiLFxcblxcdFxcXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlOyBDbG91ZEZvcm1hdGlvbiByZWplY3RzIHRoZSByZWNvcmQgc2V0IGJlZm9yZSBwcm92aXNpb25pbmdcXFwiLFxcblxcdFxcXCJLZWVwIGVpdGhlciB0aGUgQ29udGluZW50Q29kZSBvciB0aGUgQ291bnRyeUNvZGUgKGFkZCBTdWJkaXZpc2lvbkNvZGUgb25seSBuZXh0IHRvIENvdW50cnlDb2RlIFVTKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtcm91dGU1My1yZWNvcmRzZXQtZ2VvbG9jYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRnZW8gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5HZW9Mb2NhdGlvblxcXCIpXFxuXFx0aXNfb2JqZWN0KGdlbylcXG5cXHRpc19zdHJpbmcob2JqZWN0LmdldChnZW8sIFxcXCJDb250aW5lbnRDb2RlXFxcIiwgbnVsbCkpXFxuXFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoZ2VvLCBcXFwiQ291bnRyeUNvZGVcXFwiLCBudWxsKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggQWxpYXNUYXJnZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdFxcXCJNdWx0aVZhbHVlQW5zd2VyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIEFsaWFzVGFyZ2V0OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJNdWx0aXZhbHVlIGFuc3dlciBycnNldCBzaG91bGQgbm90IGJlIGFuIGFsaWFzIHJyc2V0XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgcGxhaW4gbXVsdGl2YWx1ZSByZWNvcmRzIHdpdGggUmVzb3VyY2VSZWNvcmRzLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXIgYW5kIGtlZXAgdGhlIGFsaWFzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOUyByZWNvcmRzIHRha2Ugbm8gcm91dGluZyBwb2xpY3k7IENOQU1FIGNhbm5vdCBiZSBtdWx0aXZhbHVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfdHlwb2xfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbl9wZl9yNTNfdHlwb2xfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3R5cG9sX3Byb3BzXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BdKSkgIT0gbnVsbFxcbn1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuIyBPbmx5IGNvbWJpbmF0aW9ucyB0aGF0IGZhaWxlZCBvbiBhIHJlYWwgZGVwbG95IGFyZSBmbGFnZ2VkLiBTT0EvRFMgd2l0aCBhXFxuIyByb3V0aW5nIHBvbGljeSBhcmUgYWxzbyBkb2N1bWVudGVkIGFzIHVuc3VwcG9ydGVkIGJ1dCB3ZXJlIG5vdCBtZWFzdXJlZCwgc29cXG4jIHRoZXkgYXJlIGRlbGliZXJhdGVseSBsZWZ0IG91dCAoc2VlIHRoZSBkaXNjb3ZlcnkgaXNzdWUpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkFuIE5TIHJlY29yZCBjYW5ub3QgdXNlIGEgcm91dGluZyBwb2xpY3k7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcInRoaXMgdHlwZSBvZiBSUlNldCBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgYSBzaW1wbGUgcmVjb3JkIHNldCBmb3IgTlMgcmVjb3JkcyAobm8gV2VpZ2h0L1JlZ2lvbi9GYWlsb3Zlci9HZW9Mb2NhdGlvbi9NdWx0aVZhbHVlQW5zd2VyL0NpZHJSb3V0aW5nQ29uZmlnKVxcXCIsXFxuXFx0X3BmX3I1M190eXBvbF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiTlNcXFwiXFxuXFx0X3BmX3I1M190eXBvbF9oYXNfcG9saWN5KG5hbWUpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkEgQ05BTUUgcmVjb3JkIGNhbm5vdCB1c2UgdGhlIG11bHRpdmFsdWUgYW5zd2VyIHJvdXRpbmcgcG9saWN5OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJ0aGlzIHR5cGUgb2YgUlJTZXQgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiUG9pbnQgdGhlIG11bHRpdmFsdWUgcmVjb3JkcyBhdCBBL0FBQUEgKG9yIGFub3RoZXIgc3VwcG9ydGVkIHR5cGUpLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdF9wZl9yNTNfdHlwb2xfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVjb3JkIHNldCBuZWVkcyBBbGlhc1RhcmdldCBvciB0aGUgZnVsbCBUVEwrUmVzb3VyY2VSZWNvcmRzIHBhaXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M192YWxzcmNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbiMgVGhlIHNlcnZpY2UgZXhwZWN0cyBcXFwiZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kXFxuIyBSZXNvdXJjZVJlY29yZHNdXVxcXCIgKFRyYWZmaWNQb2xpY3lJbnN0YW5jZUlkIGhhcyBubyBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSkuXFxuIyBUaGUgVFRMK0FsaWFzVGFyZ2V0IGNvbWJpbmF0aW9uIGlzIGFscmVhZHkgdGhlIGVuZ2luZSdzIEUzMDI5LCBzbyB0aGlzIHJ1bGVcXG4jIGNvdmVycyB0aGUgcmVtYWluaW5nIHNoYXBlczogYWxpYXMgcGx1cyByZWNvcmRzLCBhbmQgYW4gaW5jb21wbGV0ZSBub24tYWxpYXNcXG4jIGdyb3VwIChyZWNvcmRzIHdpdGhvdXQgVFRMLCBUVEwgd2l0aG91dCByZWNvcmRzLCBvciBuZWl0aGVyKS5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSkgaWYge1xcblxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIilcXG59XFxuXFxuX3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIpICE9IG51bGxcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRcXFwiQWxpYXNUYXJnZXQgYW5kIFJlc291cmNlUmVjb3JkcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlOyB0aGUgc2VydmljZSBleHBlY3RzIGV4YWN0bHkgb25lIG9mIEFsaWFzVGFyZ2V0IG9yIFRUTC1wbHVzLVJlc291cmNlUmVjb3Jkc1xcXCIsXFxuXFx0XFxcIktlZXAgdGhlIEFsaWFzVGFyZ2V0IGFuZCBkcm9wIFJlc291cmNlUmVjb3Jkcywgb3IgbWFrZSBpdCBhIHBsYWluIHJlY29yZCB3aXRoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRfcGZfcjUzX3ZhbHNyY191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSlcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRcXFwiQSBub24tYWxpYXMgcmVjb3JkIHNldCBuZWVkcyBib3RoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzOyB0aGUgc2VydmljZSByZWplY3RzIGFuIGluY29tcGxldGUgcGFpciB3aXRoIFxcXFxcXFwiRXhwZWN0ZWQgZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kIFJlc291cmNlUmVjb3Jkc11dIC4uLiBmb3VuZCBub25lXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTcGVjaWZ5IFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzIHRvZ2V0aGVyLCBvciB1c2UgQWxpYXNUYXJnZXQgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX3I1M192YWxzcmNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0bm90IF9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKVxcblxcdG5vdCBfcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKVxcbn1cXG5cXG5fcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKSBpZiB7XFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3JyKG5hbWUpXFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHJlY29yZCBzZXQgY2FuIHVzZSBvbmx5IG9uZSByb3V0aW5nIHBvbGljeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIGVuZm9yY2VzIFxcXCJFeHBlY3RlZCBleGFjdGx5IG9uZSBvZiBbV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLFxcbiMgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIEdlb1Byb3hpbWl0eUxvY2F0aW9uLCBvciBDaWRyUm91dGluZ0NvbmZpZ11cXFwiLlxcbiMgR2VvUHJveGltaXR5TG9jYXRpb24gaXMgbm90IGEgQ2xvdWRGb3JtYXRpb24gcHJvcGVydHksIHNvIGZpdmUgcmVtYWluIGhlcmUuXFxuIyBNdWx0aVZhbHVlQW5zd2VyOiBmYWxzZSBpcyB0cmVhdGVkIGFzIGFic2VudCDigJQgb25seSB0cnVlIHNlbGVjdHMgdGhlIHBvbGljeS5cXG5fcGZfcjUzX3BvbHhfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3BvbHhfcHJlc2VudChuYW1lLCBwcm9wKSBpZiB7XFxuXFx0cHJvcCAhPSBcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIFxcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIikgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuX3BmX3I1M19wb2x4X3BvbGljaWVzKG5hbWUpIDo9IHBzIGlmIHtcXG5cXHRwcyA6PSBbcCB8IHNvbWUgcCBpbiBhcnJheS5jb25jYXQoX3BmX3I1M19wb2x4X3Byb3BzLCBbXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiXSk7IF9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIHApXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQSByZWNvcmQgc2V0IGNhbiB1c2Ugb25seSBvbmUgcm91dGluZyBwb2xpY3ksIGJ1dCAldiBhcmUgYWxsIHNwZWNpZmllZFxcXCIsIFtwc10pLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIG9mIFdlaWdodCwgUmVnaW9uLCBGYWlsb3ZlciwgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIG9yIENpZHJSb3V0aW5nQ29uZmlnIGFuZCBzcGxpdCB0aGUgcmVzdCBpbnRvIHNlcGFyYXRlIHJlY29yZCBzZXRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRwcyA6PSBfcGZfcjUzX3BvbHhfcG9saWNpZXMobmFtZSlcXG5cXHRjb3VudChwcykgPiAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXRJZGVudGlmaWVyIGFuZCBhIHJvdXRpbmcgcG9saWN5IG11c3QgYXBwZWFyIHRvZ2V0aGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfc2lkcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuX3BmX3I1M19zaWRwX3Byb3BzIDo9IFtcXFwiV2VpZ2h0XFxcIiwgXFxcIlJlZ2lvblxcXCIsIFxcXCJGYWlsb3ZlclxcXCIsIFxcXCJHZW9Mb2NhdGlvblxcXCIsIFxcXCJDaWRyUm91dGluZ0NvbmZpZ1xcXCJdXFxuXFxuX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3NpZHBfcHJvcHNcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiQSByb3V0aW5nIHBvbGljeSBpcyBjb25maWd1cmVkIGJ1dCBTZXRJZGVudGlmaWVyIGlzIG1pc3Npbmc7IHRoZSBDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiTWlzc2luZyBmaWVsZCAnU2V0SWRlbnRpZmllcidcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIFNldElkZW50aWZpZXIgdGhhdCBpcyB1bmlxdWUgYW1vbmcgdGhlIHJlY29yZCBzZXRzIHNoYXJpbmcgdGhpcyBOYW1lIGFuZCBUeXBlXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0X3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSlcXG5cXHRub3QgaXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtc2V0LWlkZW50aWZpZXItcGFpcmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIsXFxuXFx0XFxcIlNldElkZW50aWZpZXIgaXMgc3BlY2lmaWVkIGJ1dCBubyByb3V0aW5nIHBvbGljeSBpczsgdGhlIHNlcnZpY2UgZXhwZWN0cyBleGFjdGx5IG9uZSBvZiBXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsIEdlb0xvY2F0aW9uLCBNdWx0aVZhbHVlQW5zd2VyLCBvciBDaWRyUm91dGluZ0NvbmZpZyBhbmQgZmluZHMgbm9uZVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBTZXRJZGVudGlmaWVyIGZyb20gdGhpcyBzaW1wbGUgcmVjb3JkIHNldCwgb3IgYWRkIHRoZSByb3V0aW5nIHBvbGljeSBpdCB3YXMgbWVhbnQgZm9yXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcblxcdG5vdCBfcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtdHRsLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUVEwgbXVzdCBmaXQgaW4gMzIgYml0cyAoMC4uMjE0NzQ4MzY0NyBzZWNvbmRzKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCBpcyBlbmZvcmNlZDogdGhlIHNlcnZpY2UgcmVqZWN0ZWQgOTk5OTk5OTk5OSB3aXRoXFxuIyBcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjE0NzQ4MzY0N1xcXCIuIE5lZ2F0aXZlIFRUTHMgYXJlXFxuIyB1bnRlc3RlZCwgc28gdGhleSBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBmbGFnZ2VkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My10dGwtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVFRMIG11c3QgYmUgYXQgbW9zdCAyMTQ3NDgzNjQ3IHNlY29uZHMsIGdvdCAldlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBUVEwgdG8gYSAzMi1iaXQgdmFsdWU7IGFueXRoaW5nIGFib3ZlIGEgZGF5IHJhcmVseSBoZWxwcyBjYWNoaW5nIGFueXdheVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NoYW5nZVJlc291cmNlUmVjb3JkU2V0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UVExcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHQpXFxuXFx0biA+IDIxNDc0ODM2NDdcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiV2VpZ2h0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgaXMgZW5mb3JjZWQ6IHRoZSBzZXJ2aWNlIHJlamVjdGVkIDMwMCB3aXRoIFxcXCJNZW1iZXJcXG4jIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjU1XFxcIi4gTmVnYXRpdmUgd2VpZ2h0cyBhcmUgdW50ZXN0ZWQsXFxuIyBzbyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbm90IGZsYWdnZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJXZWlnaHQgbXVzdCBiZSBhdCBtb3N0IDI1NSwgZ290ICV2XFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFdlaWdodCB0byBhIHZhbHVlIGluIFswLCAyNTVdOyB3ZWlnaHRzIGFyZSByZWxhdGl2ZSwgc28gc2NhbGUgdGhlIGdyb3VwIGRvd24gcHJvcG9ydGlvbmFsbHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIilcXG5cXHRuIDo9IHRvX251bWJlcih3KVxcblxcdG4gPiAyNTVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXpvbmVuYW1lLXRyYWlsaW5nLWRvdFwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSG9zdGVkWm9uZU5hbWUgbXVzdCBlbmQgd2l0aCBhIHRyYWlsaW5nIGRvdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENsb3VkRm9ybWF0aW9uIGxvb2tzIHRoZSB6b25lIHVwIGJ5IHRoZSBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lIGFuZCBkb2VzIG5vdFxcbiMgbm9ybWFsaXplIHRoZSB0cmFpbGluZyBkb3Q6IHRoZSBzYW1lIHN0YWNrIGRlcGxveWVkIGNsZWFuIHdpdGhcXG4jIFxcXCJ6b25lLmV4YW1wbGUuXFxcIiBhbmQgZmFpbGVkIHdpdGggTm90Rm91bmQgZm9yIFxcXCJ6b25lLmV4YW1wbGVcXFwiICgyMDI2LTA5LTAyKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtem9uZW5hbWUtdHJhaWxpbmctZG90XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSG9zdGVkWm9uZU5hbWUgJyVzJyBpcyBtaXNzaW5nIHRoZSB0cmFpbGluZyBkb3QsIHNvIENsb3VkRm9ybWF0aW9uIGZhaWxzIHRoZSBsb29rdXAgd2l0aCBcXFxcXFxcIk5vIGhvc3RlZCB6b25lIHdpdGggbmFtZSAuLi4gZm91bmRcXFxcXFxcIlxcXCIsIFt6bl0pLFxcblxcdHNwcmludGYoXFxcIlVzZSAnJXMuJyAod2l0aCB0aGUgdHJhaWxpbmcgZG90KVxcXCIsIFt6bl0pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHpuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSG9zdGVkWm9uZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh6bilcXG5cXHR6biAhPSBcXFwiXFxcIlxcblxcdG5vdCBlbmRzd2l0aCh6biwgXFxcIi5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWxpZmVjeWNsZS1kYXlzLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGlmZWN5Y2xlIGFyY2hpdmUgdHJhbnNpdGlvbnMgbXVzdCBjb21lIDMwKyBkYXlzIGFmdGVyIElBLCBhbmQgZXhwaXJhdGlvbiBhZnRlciBldmVyeSB0cmFuc2l0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfczNvcmRfZml4IDo9IFxcXCJPcmRlciB0aGUgbGlmZWN5Y2xlIGRheXMgc28gYXJjaGl2ZSB0cmFuc2l0aW9ucyBjb21lIGF0IGxlYXN0IDMwIGRheXMgYWZ0ZXIgSUEgdHJhbnNpdGlvbnMgYW5kIGV4cGlyYXRpb24gY29tZXMgYWZ0ZXIgZXZlcnkgdHJhbnNpdGlvblxcXCJcXG5cXG5fcGZfczNvcmRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9saWZlY3ljbGUtdHJhbnNpdGlvbi1nZW5lcmFsLWNvbnNpZGVyYXRpb25zLmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtZGF5cy1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkLlRyYW5zaXRpb25zXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJUcmFuc2l0aW9uIHRvICVzIGF0ICV2IGRheXMgaXMgbGVzcyB0aGFuIDMwIGRheXMgYWZ0ZXIgdGhlICVzIHRyYW5zaXRpb24gYXQgJXYgZGF5czsgUzMgcmVxdWlyZXMgb2JqZWN0cyB0byBzdGF5IGF0IGxlYXN0IDMwIGRheXMgaW4gSUEgc3RvcmFnZVxcXCIsIFtzYzIsIGQyLCBzYzEsIGQxXSksXFxuXFx0X3BmX3Mzb3JkX2ZpeCwgX3BmX3Mzb3JkX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdHRyYW5zIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIlRyYW5zaXRpb25zXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkodHJhbnMpXFxuXFx0c29tZSB0MSBpbiB0cmFuc1xcblxcdGlzX29iamVjdCh0MSlcXG5cXHRzYzEgOj0gb2JqZWN0LmdldCh0MSwgXFxcIlN0b3JhZ2VDbGFzc1xcXCIsIFxcXCJcXFwiKVxcblxcdHNjMSBpbiB7XFxcIlNUQU5EQVJEX0lBXFxcIiwgXFxcIk9ORVpPTkVfSUFcXFwifVxcblxcdHJhdzEgOj0gb2JqZWN0LmdldCh0MSwgXFxcIlRyYW5zaXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhdzEgIT0gbnVsbCAjIHRvX251bWJlcihudWxsKSDjga8gMCDjgavjgarjgotcXG5cXHRkMSA6PSB0b19udW1iZXIocmF3MSlcXG5cXHRzb21lIHQyIGluIHRyYW5zXFxuXFx0aXNfb2JqZWN0KHQyKVxcblxcdHNjMiA6PSBvYmplY3QuZ2V0KHQyLCBcXFwiU3RvcmFnZUNsYXNzXFxcIiwgXFxcIlxcXCIpXFxuXFx0c2MyIGluIHtcXFwiR0xBQ0lFUlxcXCIsIFxcXCJERUVQX0FSQ0hJVkVcXFwifVxcblxcdHJhdzIgOj0gb2JqZWN0LmdldCh0MiwgXFxcIlRyYW5zaXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhdzIgIT0gbnVsbFxcblxcdGQyIDo9IHRvX251bWJlcihyYXcyKVxcblxcdGQyIDwgZDEgKyAzMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1kYXlzLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuRXhwaXJhdGlvbkluRGF5c1xcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRXhwaXJhdGlvbkluRGF5cyAoJXYpIG11c3QgYmUgZ3JlYXRlciB0aGFuIFRyYW5zaXRpb25JbkRheXMgKCV2KTsgUzMgcmVqZWN0cyBsaWZlY3ljbGUgcnVsZXMgdGhhdCBleHBpcmUgb2JqZWN0cyBiZWZvcmUgb3Igd2hlbiB0aGV5IHRyYW5zaXRpb25cXFwiLCBbZSwgZF0pLFxcblxcdF9wZl9zM29yZF9maXgsIF9wZl9zM29yZF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRyYXdlIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkV4cGlyYXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhd2UgIT0gbnVsbCAjIHRvX251bWJlcihudWxsKSDjga8gMCDjgavjgarjgotcXG5cXHRlIDo9IHRvX251bWJlcihyYXdlKVxcblxcdHRyYW5zIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIlRyYW5zaXRpb25zXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkodHJhbnMpXFxuXFx0c29tZSB0IGluIHRyYW5zXFxuXFx0aXNfb2JqZWN0KHQpXFxuXFx0cmF3ZCA6PSBvYmplY3QuZ2V0KHQsIFxcXCJUcmFuc2l0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXdkICE9IG51bGxcXG5cXHRkIDo9IHRvX251bWJlcihyYXdkKVxcblxcdGUgPD0gZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgdmVyc2lvbmluZyB0byBiZSBlbmFibGVkIG9uIHRoZSBzb3VyY2UgYnVja2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFN0YXR1cyDjgYzjg6rjg4bjg6njg6vjgacgXFxcIlN1c3BlbmRlZFxcXCIg5Lul5aSW77yIPSBcXFwiRW5hYmxlZFxcXCLvvInjgIHjgb7jgZ/jga/mnKrop6Pmsbrjg4jjg7zjgq/jg7PjgarjgokgT0sg5omx44GE44CCXFxuIyBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiDoh6rkvZPjgYznhKHjgYQgLyBTdXNwZW5kZWQg44Gu44Go44GN44Gg44GR6YGV5Y+N44Gr44GZ44KL44CCXFxuX3BmX3MzcmVwbF92ZXJzaW9uaW5nX29rKG5hbWUpIGlmIHtcXG5cXHRzIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIilcXG5cXHRub3QgcyA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBpcyBzZXQgYnV0IGJ1Y2tldCB2ZXJzaW9uaW5nIGlzIG5vdCBlbmFibGVkOyBTMyByZWplY3RzIHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGF0IGRlcGxveSB0aW1lIChJbnZhbGlkUmVxdWVzdDogVmVyc2lvbmluZyBtdXN0IGJlICdFbmFibGVkJyBvbiB0aGUgYnVja2V0KVxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIG9uIHRoZSBzb3VyY2UgYnVja2V0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvcmVwbGljYXRpb24tcmVxdWlyZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIpKVxcblxcdG5vdCBfcGZfczNyZXBsX3ZlcnNpb25pbmdfb2sobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtZmlmby10b3BpYy1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZJRk8gdG9waWMgbmFtZXMgbXVzdCBlbmQgd2l0aCAnLmZpZm8nIChhbmQgJy5maWZvJyBuYW1lcyByZXF1aXJlIEZpZm9Ub3BpYylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNmaWZvX2ZpeCA6PSBcXFwiR2l2ZSBGSUZPIHRvcGljcyBhIFRvcGljTmFtZSBlbmRpbmcgaW4gJy5maWZvJyAob3IgZHJvcCBUb3BpY05hbWUgdG8gbGV0IENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlIG9uZSksIGFuZCBzZXQgRmlmb1RvcGljOiB0cnVlIHdoZW5ldmVyIHRoZSBuYW1lIGVuZHMgaW4gJy5maWZvJ1xcXCJcXG5cXG5fcGZfc25zZmlmb191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2RnL3Nucy1jcmVhdGUtZmlmby10b3BpYy5odG1sXFxcIlxcblxcbl9wZl9zbnNmaWZvX3RydWUobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GaWZvVG9waWNcXFwiKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcblxcbiMgRmlmb1RvcGljIOOBjOWtmOWcqOOBl+OAgeODquODhuODqeODqyBmYWxzZSDku6XlpJbvvIh0cnVlIOOChOODiOODvOOCr+ODs++8ieOBquOCieOAjEZJRk8g44GL44KC44GX44KM44Gq44GE44CN5omx44GEXFxuX3BmX3Nuc2ZpZm9fbWF5YmVfZmlmbyhuYW1lKSBpZiB7XFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpXFxuXFx0bm90IHYgaW4ge2ZhbHNlLCBcXFwiZmFsc2VcXFwifVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLXRvcGljLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRmlmb1RvcGljIGlzIHRydWUgYnV0IFRvcGljTmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcuZmlmbyc7IFNOUyByZWplY3RzIHRoZSB0b3BpYyBhdCBkZXBsb3kgdGltZVxcXCIsIFt0bl0pLFxcblxcdF9wZl9zbnNmaWZvX2ZpeCwgX3BmX3Nuc2ZpZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdF9wZl9zbnNmaWZvX3RydWUobmFtZSlcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdG5vdCBlbmRzd2l0aCh0biwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby10b3BpYy1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ub3BpY05hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRvcGljTmFtZSAnJXMnIGVuZHMgd2l0aCAnLmZpZm8nIGJ1dCBGaWZvVG9waWMgaXMgbm90IHRydWU7IFNOUyByZWplY3RzIHRoZSB0b3BpYyBuYW1lIGF0IGRlcGxveSB0aW1lXFxcIiwgW3RuXSksXFxuXFx0X3BmX3Nuc2ZpZm9fZml4LCBfcGZfc25zZmlmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0dG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub3BpY05hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh0bilcXG5cXHRlbmRzd2l0aCh0biwgXFxcIi5maWZvXFxcIilcXG5cXHRub3QgX3BmX3Nuc2ZpZm9fbWF5YmVfZmlmbyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtbWlzc2luZy1zdGF0ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQVNMIE5leHQvRGVmYXVsdC9DaG9pY2VzIG11c3QgcmVmZXJlbmNlIGEgZGVmaW5lZCBzdGF0ZSAodG9wLWxldmVsIHN0YXRlczsgYSBkYW5nbGluZyBTdGFydEF0IGlzIGNvdmVyZWQgYnkgZW5naW5lIHJ1bGUgRTM2MDEpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5fZml4IDo9IFxcXCJQb2ludCBOZXh0L0RlZmF1bHQvQ2hvaWNlcyBhdCBhbiBleGlzdGluZyBzdGF0ZSBuYW1lXFxcIlxcblxcbl9wZl9zZm5fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2FtYXpvbi1zdGF0ZXMtbGFuZ3VhZ2Utc3RhdGVzLmh0bWxcXFwiXFxuXFxuX3BmX3Nmbl9hc2wobmFtZSkgOj0gYXNsIGlmIHtcXG5cXHRkZWYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIilcXG5cXHRpc19zdHJpbmcoZGVmKVxcblxcdGFzbCA6PSBqc29uLnVubWFyc2hhbChkZWYpXFxuXFx0aXNfb2JqZWN0KGFzbClcXG59XFxuXFxuX3BmX3Nmbl9kZWZpbmVkKGFzbCkgOj0ge3NuIHwgc29tZSBzbiwgXyBpbiBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIHt9KX1cXG5cXG4jIE5PVEU6IGEgZGFuZ2xpbmcgU3RhcnRBdCBpcyBkZWxpYmVyYXRlbHkgTk9UIGNoZWNrZWQgaGVyZSDigJQgdGhlIGVuZ2luZSdzXFxuIyBidWlsdC1pbiBydWxlIEUzNjAxIChFUlJPUi9DRk5fTElOVCkgYWxyZWFkeSBjb3ZlcnMgaXQuIFZlcmlmaWVkIGFnYWluc3RcXG4jIEBhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUgMS43LjAtYmV0YSBvbiAyMDI2LTA5LTAxOiBFMzYwMSBmaXJlcyBmb3JcXG4jIFN0YXJ0QXQgb25seSBhbmQgZG9lcyBub3QgY2hlY2sgTmV4dC9EZWZhdWx0L0Nob2ljZXMsIHdoaWNoIGlzIHdoYXQgdGhpc1xcbiMgcnVsZSBhZGRzLlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIHJlZmVyZW5jZXMgc3RhdGUgJyVzJyB2aWEgJXMsIGJ1dCBubyBzdGF0ZSB3aXRoIHRoYXQgbmFtZSBpcyBkZWZpbmVkXFxcIiwgW3NuYW1lLCB0YXJnZXQsIGtleV0pLFxcblxcdF9wZl9zZm5fZml4LCBfcGZfc2ZuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcXFwiKVxcblxcdGFzbCA6PSBfcGZfc2ZuX2FzbChuYW1lKVxcblxcdHNvbWUgc25hbWUsIHN0IGluIG9iamVjdC5nZXQoYXNsLCBcXFwiU3RhdGVzXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHN0KVxcblxcdHNvbWUga2V5IGluIHtcXFwiTmV4dFxcXCIsIFxcXCJEZWZhdWx0XFxcIn1cXG5cXHR0YXJnZXQgOj0gb2JqZWN0LmdldChzdCwga2V5LCBudWxsKVxcblxcdGlzX3N0cmluZyh0YXJnZXQpXFxuXFx0bm90IHRhcmdldCBpbiBfcGZfc2ZuX2RlZmluZWQoYXNsKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbWlzc2luZy1zdGF0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVmaW5pdGlvblN0cmluZ1xcXCIsXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBoYXMgYSBDaG9pY2UgcnVsZSByZWZlcmVuY2luZyBzdGF0ZSAnJXMnLCBidXQgbm8gc3RhdGUgd2l0aCB0aGF0IG5hbWUgaXMgZGVmaW5lZFxcXCIsIFtzbmFtZSwgdGFyZ2V0XSksXFxuXFx0X3BmX3Nmbl9maXgsIF9wZl9zZm5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0YXNsIDo9IF9wZl9zZm5fYXNsKG5hbWUpXFxuXFx0c29tZSBzbmFtZSwgc3QgaW4gb2JqZWN0LmdldChhc2wsIFxcXCJTdGF0ZXNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc3QpXFxuXFx0Y2hvaWNlcyA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQ2hvaWNlc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KGNob2ljZXMpXFxuXFx0c29tZSBjIGluIGNob2ljZXNcXG5cXHRpc19vYmplY3QoYylcXG5cXHR0YXJnZXQgOj0gb2JqZWN0LmdldChjLCBcXFwiTmV4dFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhcmdldClcXG5cXHRub3QgdGFyZ2V0IGluIF9wZl9zZm5fZGVmaW5lZChhc2wpXFxufVxcblwiXG4gIH1cbl07XG4iXX0=
775
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUscUNBQXFDO1FBQzNDLFNBQVMsRUFBRSxtQkFBbUI7UUFDOUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHlFQUF5RTtRQUNsRixVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixnQ0FBZ0M7U0FDakM7UUFDRCxNQUFNLEVBQUUsbzJCQUFvMkI7S0FDNzJCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsMkJBQTJCO1FBQ2pDLFNBQVMsRUFBRSxtQkFBbUI7UUFDOUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLDRFQUE0RTtRQUNyRixVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLGVBQWUsRUFBRTtZQUNmLGdDQUFnQztTQUNqQztRQUNELE1BQU0sRUFBRSwrNkJBQSs2QjtLQUN4N0I7SUFDRDtRQUNFLElBQUksRUFBRSwrQkFBK0I7UUFDckMsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHVEQUF1RDtRQUNoRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiwrQkFBK0I7U0FDaEM7UUFDRCxNQUFNLEVBQUUsNjZCQUE2NkI7S0FDdDdCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsa0RBQWtEO1FBQ3hELFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwyRUFBMkU7UUFDcEYsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsK0JBQStCO1NBQ2hDO1FBQ0QsTUFBTSxFQUFFLHMvQkFBcy9CO0tBQy8vQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLHFDQUFxQztRQUMzQyxTQUFT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IEdlbmVyYXRlZCBieSBzY3JpcHRzL2J1bmRsZS1ydWxlcy50cyBmcm9tIHJ1bGVzLyoqLiBEbyBub3QgZWRpdCBieSBoYW5kLlxuLy8gfn4gUmVnZW5lcmF0ZSB3aXRoOiBucHggcHJvamVuIGJ1bmRsZS1ydWxlc1xuLyogZXNsaW50LWRpc2FibGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlZFJ1bGVEYXRhIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuICByZWFkb25seSBzZXZlcml0eTogc3RyaW5nO1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICByZWFkb25seSB1cHN0cmVhbTogc3RyaW5nO1xuICByZWFkb25seSByZXNvdXJjZVR5cGVzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcmVnbzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQlVORExFRF9SVUxFUzogQnVuZGxlZFJ1bGVEYXRhW10gPSBbXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYWdlbnRjb3JlLWdhdGV3YXktand0LWF1dGhvcml6ZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJiZWRyb2NrLWFnZW50Y29yZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHYXRld2F5cyB3aXRoIEF1dGhvcml6ZXJUeXBlIENVU1RPTV9KV1QgcmVxdWlyZSBBdXRob3JpemVyQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpHYXRld2F5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2d3and0X2hhc19jb25maWcobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cXFwiKSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFnZW50Y29yZS1nYXRld2F5LWp3dC1hdXRob3JpemVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVyQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkF1dGhvcml6ZXJUeXBlIGlzIENVU1RPTV9KV1QgYnV0IEF1dGhvcml6ZXJDb25maWd1cmF0aW9uIGlzIG1pc3Npbmc7IHRoZSBDcmVhdGVHYXRld2F5IEFQSSByZXF1aXJlcyBpdCBhbmQgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBhIFZhbGlkYXRpb25FeGNlcHRpb25cXFwiLFxcblxcdFxcXCJBZGQgQXV0aG9yaXplckNvbmZpZ3VyYXRpb24uQ3VzdG9tSldUQXV0aG9yaXplciAoZGlzY292ZXJ5VXJsIGFuZCBhbGxvd2VkQXVkaWVuY2UvYWxsb3dlZENsaWVudHMpLCBvciBzd2l0Y2ggQXV0aG9yaXplclR5cGUgdG8gQVdTX0lBTVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUdhdGV3YXkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6R2F0ZXdheVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemVyVHlwZVxcXCIpID09IFxcXCJDVVNUT01fSldUXFxcIlxcblxcdG5vdCBfcGZfZ3dqd3RfaGFzX2NvbmZpZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFnZW50Y29yZS1ydW50aW1lLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiZWRyb2NrLWFnZW50Y29yZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBZ2VudENvcmUgUnVudGltZSBuYW1lcyBtdXN0IG1hdGNoIFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9IChubyBoeXBoZW5zKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ2xvdWRGb3JtYXRpb24g44K544Kt44O844Oe44GvIEFnZW50UnVudGltZU5hbWUg44Gu44OR44K/44O844Oz44KS5oyB44Gf44Gq44GE77yI44Ko44Oz44K444Oz57Sg6YCa44KK44CBXFxuIyAyMDI2LTA5LTAxIOOBqyAxLjcuMC1iZXRhIOOBp+eiuuiqje+8ieOBjOOAgUNyZWF0ZUFnZW50UnVudGltZSBBUEkg44GvXFxuIyBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSDjgpLlvLfliLbjgZnjgovjgILjg4/jgqTjg5Xjg7PlhaXjgorjga4gQ0RLIOmiqOWRveWQjeOBjOWumueVquOBruatu+WboOOAglxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYWdlbnRjb3JlLXJ1bnRpbWUtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWdlbnRSdW50aW1lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWdlbnRSdW50aW1lTmFtZSAnJXMnIGlzIGludmFsaWQ6IGl0IG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIGRpZ2l0cywgYW5kIHVuZGVyc2NvcmVzIChtYXggNDggY2hhcmFjdGVycywgaHlwaGVucyBhcmUgbm90IGFsbG93ZWQpOyBDcmVhdGVBZ2VudFJ1bnRpbWUgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYW4gdW5kZXJzY29yZS1zZXBhcmF0ZWQgbmFtZSBzdWNoIGFzICdteV9hZ2VudF9ydW50aW1lJ1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUFnZW50UnVudGltZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWdlbnRSdW50aW1lTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kYCwgbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWFjbS1jZXJ0LXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2xvdWRGcm9udCB2aWV3ZXIgY2VydGlmaWNhdGVzIG11c3QgbGl2ZSBpbiB1cy1lYXN0LTFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWFjbS1jZXJ0LXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlLkFjbUNlcnRpZmljYXRlQXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbG91ZEZyb250IHJlcXVpcmVzIHRoZSBBQ00gY2VydGlmaWNhdGUgdG8gYmUgaW4gdXMtZWFzdC0xLCBidXQgdGhlIGNlcnRpZmljYXRlIGlzIGluICVzXFxcIiwgW3JlZ2lvbl0pLFxcblxcdFxcXCJJc3N1ZSBvciBpbXBvcnQgdGhlIGNlcnRpZmljYXRlIGluIHVzLWVhc3QtMSAoZS5nLiBhIGRlZGljYXRlZCB1cy1lYXN0LTEgc3RhY2spIGFuZCByZWZlcmVuY2UgdGhhdCBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY25hbWVzLWFuZC1odHRwcy1yZXF1aXJlbWVudHMuaHRtbCNodHRwcy1yZXF1aXJlbWVudHMtY2VydGlmaWNhdGUtaXNzdWVyXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMl0gPT0gXFxcImFjbVxcXCJcXG5cXHRyZWdpb24gOj0gcGFydHNbM11cXG5cXHRyZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRyZWdpb24gIT0gXFxcInVzLWVhc3QtMVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWFsaWFzZXMtcmVxdWlyZS1jdXN0b20tY2VydGlmaWNhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgZGlzdHJpYnV0aW9uIHdpdGggQWxpYXNlcyBjYW5ub3QgdXNlIHRoZSBDbG91ZEZyb250IGRlZmF1bHQgY2VydGlmaWNhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2FsaWFzY2VydF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tdmlld2VyY2VydGlmaWNhdGUuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfYWxpYXNjZXJ0X2ZpeCA6PSBcXFwiQXR0YWNoIGFuIEFDTSBjZXJ0aWZpY2F0ZSAoQWNtQ2VydGlmaWNhdGVBcm4sIHVzLWVhc3QtMSkgb3IgYW4gSUFNIGNlcnRpZmljYXRlLCB0b2dldGhlciB3aXRoIFNzbFN1cHBvcnRNZXRob2QgYW5kIE1pbmltdW1Qcm90b2NvbFZlcnNpb25cXFwiXFxuXFxuX3BmX2NmX2FsaWFzY2VydF9jb3VudChuYW1lKSA6PSBjb3VudChbMSB8XFxuXFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQWxpYXNlc1xcXCIpXFxuXSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtYWxpYXNlcy1yZXF1aXJlLWN1c3RvbS1jZXJ0aWZpY2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlXFxcIixcXG5cXHRcXFwiQSBkaXN0cmlidXRpb24gd2l0aCBBbGlhc2VzIGNhbm5vdCB1c2UgdGhlIENsb3VkRnJvbnQgZGVmYXVsdCBjZXJ0aWZpY2F0ZVxcXCIsXFxuXFx0X3BmX2NmX2FsaWFzY2VydF9maXgsIF9wZl9jZl9hbGlhc2NlcnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0X3BmX2NmX2FsaWFzY2VydF9jb3VudChuYW1lKSA+IDBcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5DbG91ZEZyb250RGVmYXVsdENlcnRpZmljYXRlXFxcIikgPT0gdHJ1ZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtY2FjaGVkLW1ldGhvZHMtc3Vic2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZWRNZXRob2RzIG11c3QgYmUgYSBzdWJzZXQgb2YgQWxsb3dlZE1ldGhvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX21ldGhvZHNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWNhY2hlYmVoYXZpb3IuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfbWV0aG9kc19iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKSwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbiMgQ2xvdWRGcm9udCBkZWZhdWx0cyBBbGxvd2VkTWV0aG9kcyB0byBHRVQvSEVBRCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBvbWl0dGVkLFxcbiMgc28gYW4gb21pdHRlZCBBbGxvd2VkTWV0aG9kcyBzdGlsbCBjb25zdHJhaW5zIHdoYXQgbWF5IGJlIGNhY2hlZC5cXG5fcGZfY2ZfbWV0aG9kc19hbGxvd2VkKGIpIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkFsbG93ZWRNZXRob2RzXFxcIiwgW1xcXCJHRVRcXFwiLCBcXFwiSEVBRFxcXCJdKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1jYWNoZWQtbWV0aG9kcy1zdWJzZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNhY2hlZE1ldGhvZHNcXFwiLCBbYi5wYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiQ2FjaGVkTWV0aG9kcyBjb250YWlucyAlcywgd2hpY2ggaXMgbm90IGluIEFsbG93ZWRNZXRob2RzICV2XFxcIiwgW21ldGhvZCwgYWxsb3dlZF0pLFxcblxcdFxcXCJFdmVyeSBtZXRob2QgaW4gQ2FjaGVkTWV0aG9kcyBtdXN0IGFsc28gYXBwZWFyIGluIEFsbG93ZWRNZXRob2RzXFxcIixcXG5cXHRfcGZfY2ZfbWV0aG9kc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX21ldGhvZHNfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0Y2FjaGVkIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkNhY2hlZE1ldGhvZHNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGNhY2hlZClcXG5cXHRhbGxvd2VkIDo9IF9wZl9jZl9tZXRob2RzX2FsbG93ZWQoYilcXG5cXHRpc19hcnJheShhbGxvd2VkKVxcblxcdHNvbWUgbWV0aG9kIGluIGNhY2hlZFxcblxcdG5vdCBtZXRob2QgaW4gYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgZGlzdHJpYnV0aW9uIG11c3QgYmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9lZGdlcmVnaW9uX2ZpeCA6PSBcXFwiQ3JlYXRlIHRoZSBMYW1iZGFARWRnZSBmdW5jdGlvbiBpbiB1cy1lYXN0LTEgKGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiBkb2VzIHRoaXMgZm9yIHlvdSkgYW5kIGFzc29jaWF0ZSB0aGF0IHZlcnNpb24ncyBBUk5cXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvbGFtYmRhLWF0LWVkZ2UtZnVuY3Rpb24tcmVzdHJpY3Rpb25zLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIn0gfFxcblxcdFxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucy4lZC5MYW1iZGFGdW5jdGlvbkFSTlxcXCIsIFtiLnBhdGgsIGEuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgbXVzdCBsaXZlIGluIHVzLWVhc3QtMSwgYnV0IHRoaXMgZnVuY3Rpb24gaXMgaW4gJXNcXFwiLCBbcmVnaW9uXSksXFxuXFx0X3BmX2NmX2VkZ2VyZWdpb25fZml4LCBfcGZfY2ZfZWRnZXJlZ2lvbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDdcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBhc3NvY2lhdGlvbnMgbXVzdCByZWZlcmVuY2UgYSB2ZXJzaW9uIEFSTiwgbm90IGFuIGFsaWFzIG9yICRMQVRFU1RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfZml4IDo9IFxcXCJBc3NvY2lhdGUgYSB2ZXJzaW9uIEFSTiAoaW4gdGhlIENESywgZm4uY3VycmVudFZlcnNpb24uZWRnZUFybikgaW5zdGVhZCBvZiB0aGUgdW5xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBhbiBhbGlhcywgb3IgJExBVEVTVFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXZlcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tbGFtYmRhZnVuY3Rpb25hc3NvY2lhdGlvbi5odG1sXFxcIlxcblxcbl9wZl9jZl9lZGdldmVyX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCJ9IHxcXG5cXHRcXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxuIyBMYW1iZGEgQVJOcyBzcGxpdCBpbnRvIDcgc2VnbWVudHMgd2hlbiB1bnF1YWxpZmllZFxcbiMgKGFybjpwYXJ0aXRpb246bGFtYmRhOnJlZ2lvbjphY2NvdW50OmZ1bmN0aW9uOm5hbWUpIGFuZCA4IHdoZW4gYSB2ZXJzaW9uIG9yXFxuIyBhbGlhcyBxdWFsaWZpZXIgaXMgYXBwZW5kZWQuIE9ubHkgYW4gYWxsLWRpZ2l0IHF1YWxpZmllciBpcyBhIHZlcnNpb24uXFxuX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKSA6PSBbe1xcXCJwYXRoXFxcIjogcGF0aCwgXFxcImFyblxcXCI6IGFybiwgXFxcInBhcnRzXFxcIjogcGFydHN9IHxcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2V2ZXJfYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHBhcnRzWzVdID09IFxcXCJmdW5jdGlvblxcXCJcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zLiVkLkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgW2IucGF0aCwgYS5pbmRleF0pXFxuXVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRcXFwiTGFtYmRhQEVkZ2UgcmVxdWlyZXMgYSB2ZXJzaW9uLXF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGJ1dCB0aGlzIEFSTiBoYXMgbm8gcXVhbGlmaWVyXFxcIixcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA3XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSByZXF1aXJlcyBhIHZlcnNpb24tcXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYnV0ICclcycgaXMgYW4gYWxpYXMgb3IgJExBVEVTVFxcXCIsIFtxdWFsaWZpZXJdKSxcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA4XFxuXFx0cXVhbGlmaWVyIDo9IGl0LnBhcnRzWzddXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOV0rJFxcXCIsIHF1YWxpZmllcilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LW9yaWdpbi1ncm91cC1tZW1iZXItb3JpZ2luXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPcmlnaW4gZ3JvdXAgbWVtYmVycyBtdXN0IHJlZmVyZW5jZSBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gdGhlIGRpc3RyaWJ1dGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2Zfb2dtZW1iZXJfaWRzKG5hbWUpIDo9IHtpZCB8XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbnNcXFwiKVxcblxcdGlkIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJJZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGlkKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtb3JpZ2luLWdyb3VwLW1lbWJlci1vcmlnaW5cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbkdyb3Vwcy5JdGVtcy4lZC5NZW1iZXJzXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJPcmlnaW4gZ3JvdXAgbWVtYmVyICclcycgZG9lcyBub3QgbWF0Y2ggYW55IG9yaWdpbiBJZCBpbiB0aGUgZGlzdHJpYnV0aW9uXFxcIiwgW29pZF0pLFxcblxcdFxcXCJQb2ludCBldmVyeSBvcmlnaW4gZ3JvdXAgbWVtYmVyIGF0IHRoZSBJZCBvZiBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gT3JpZ2luc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tb3JpZ2luZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5PcmlnaW5Hcm91cHMuSXRlbXNcXFwiKVxcblxcdG1lbWJlcnMgOj0gb2JqZWN0LmdldChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJNZW1iZXJzXFxcIiwge30pLCBcXFwiSXRlbXNcXFwiLCBbXSlcXG5cXHRzb21lIG0gaW4gbWVtYmVyc1xcblxcdG9pZCA6PSBvYmplY3QuZ2V0KG0sIFxcXCJPcmlnaW5JZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKG9pZClcXG5cXHRub3Qgb2lkIGluIF9wZl9jZl9vZ21lbWJlcl9pZHMobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2FjaGUgYmVoYXZpb3IgVFRMcyBtdXN0IHNhdGlzZnkgTWluVFRMIDw9IERlZmF1bHRUVEwgPD0gTWF4VFRMXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl90dGxfZml4IDo9IFxcXCJPcmRlciB0aGUgVFRMcyBhcyBNaW5UVEwgPD0gRGVmYXVsdFRUTCA8PSBNYXhUVExcXFwiXFxuXFxuX3BmX2NmX3R0bF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIsIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJNaW5UVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNYXhUVEwgKCV2KVxcXCIsIFttbiwgbXhdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRteCA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTWF4VFRMXFxcIiwgbnVsbCkpXFxuXFx0bW4gPiBteFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIk1pblRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIERlZmF1bHRUVEwgKCV2KVxcXCIsIFttbiwgZGZdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG1uID4gZGZcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJEZWZhdWx0VFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTWF4VFRMICgldilcXFwiLCBbZGYsIG14XSksXFxuXFx0X3BmX2NmX3R0bF9maXgsIF9wZl9jZl90dGxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBiIGluIF9wZl9jZl9iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG14IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNYXhUVExcXFwiLCBudWxsKSlcXG5cXHRkZiA+IG14XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgV0FGdjIgd2ViIEFDTCBhdHRhY2hlZCB0byBDbG91ZEZyb250IG11c3QgYmUgZ2xvYmFsbHkgc2NvcGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBXQUZ2MiBBUk4gY2FycmllcyBpdHMgc2NvcGUgaW4gdGhlIHJlc291cmNlIHNlZ21lbnQ6XFxuIyAgIGFybjphd3M6d2FmdjI6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpnbG9iYWwvd2ViYWNsL25hbWUvaWQgICAgKENMT1VERlJPTlQpXFxuIyAgIGFybjphd3M6d2FmdjI6YXAtbm9ydGhlYXN0LTE6MTIzNDU2Nzg5MDEyOnJlZ2lvbmFsL3dlYmFjbC8uLi4gKFJFR0lPTkFMKVxcbiMgQ2xvdWRGcm9udCBhY2NlcHRzIG9ubHkgdGhlIGdsb2JhbCBmb3JtLiBDaGVja2luZyB0aGUgcmVnaW9uIGFsb25lIHdvdWxkIG1pc3NcXG4jIGEgUkVHSU9OQUwgd2ViIEFDTCB0aGF0IGhhcHBlbnMgdG8gaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gdXMtZWFzdC0xLCB3aGljaCBpc1xcbiMgdGhlIGVhc3kgbWlzdGFrZSB0byBtYWtlLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5XZWJBQ0xJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCBvbmx5IGFjY2VwdHMgYSBnbG9iYWxseSBzY29wZWQgd2ViIEFDTCwgYnV0IHRoaXMgQVJOIGlzIHNjb3BlZCAnJXMnXFxcIiwgW3Njb3BlXSksXFxuXFx0XFxcIkNyZWF0ZSB0aGUgd2ViIEFDTCB3aXRoIHNjb3BlIENMT1VERlJPTlQgaW4gdXMtZWFzdC0xICh3YWZ2Mi5DZm5XZWJBQ0wgd2l0aCBzY29wZTogJ0NMT1VERlJPTlQnKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utd2FmdjItd2ViYWNsLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLldlYkFDTElkXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwid2FmdjJcXFwiXFxuXFx0c2VnbWVudHMgOj0gc3BsaXQocGFydHNbNV0sIFxcXCIvXFxcIilcXG5cXHRzY29wZSA6PSBzZWdtZW50c1swXVxcblxcdHNjb3BlICE9IFxcXCJnbG9iYWxcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItYXR0cmlidXRlLWRlZmluaXRpb25zLXVzYWdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXZlcnkgQXR0cmlidXRlRGVmaW5pdGlvbnMgZW50cnkgbXVzdCBiZSB1c2VkIGJ5IGEga2V5IHNjaGVtYVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIER5bmFtb0RCIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoOiBldmVyeSBBdHRyaWJ1dGVEZWZpbml0aW9ucyBlbnRyeSBtdXN0IGJlXFxuIyB1c2VkIGJ5IHRoZSB0YWJsZSBrZXkgc2NoZW1hIG9yIGFuIGluZGV4IGtleSBzY2hlbWEuIFRoZSBlbmdpbmUncyBFMzAzOVxcbiMgY2hlY2tzIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb25seSAoa2V5IGF0dHJpYnV0ZSBub3QgZGVmaW5lZCksIHNvIHRoZVxcbiMgY2xhc3NpYyBcXFwicmVtb3ZlZCBhIEdTSSwgbGVmdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb25cXFwiIG1pc3Rha2Ugc2FpbHMgdGhyb3VnaC5cXG5cXG5fcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgOj0ge2EgfFxcblxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBwcm9wKSA6PSB7YSB8XFxuXFx0c29tZSBpeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQoaXgudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfZGRiYWR1X3VzZWQobmFtZSkgOj0gKChfcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgfFxcblxcdF9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpKSB8XFxuXFx0X3BmX2RkYmFkdV9pbmRleF9rZXlzKG5hbWUsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKSlcXG5cXG4jIEFueSB1bnJlc29sdmFibGUgQXR0cmlidXRlTmFtZSBpbiBhIGtleSBzY2hlbWEgbWVhbnMgdGhlIHVzZWQtc2V0IGlzXFxuIyBpbmNvbXBsZXRlLCBzbyB0aGUgcnVsZSBtdXN0IHN0YXkgc2lsZW50IHJhdGhlciB0aGFuIGd1ZXNzLlxcbl9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG59XFxuXFxuX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSkgaWYge1xcblxcdHNvbWUgcHJvcCBpbiBbXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIl1cXG5cXHRzb21lIGl4IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChpeC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWF0dHJpYnV0ZS1kZWZpbml0aW9ucy11c2FnZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9ucy4lZFxcXCIsIFtkLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQXR0cmlidXRlICclcycgaXMgZGVmaW5lZCBidXQgdXNlZCBieSBubyBrZXkgc2NoZW1hOyBEeW5hbW9EQiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaCBhbmQgZmFpbHMgd2l0aCBcXFxcXFxcIk51bWJlciBvZiBhdHRyaWJ1dGVzIGluIEtleVNjaGVtYSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIG51bWJlciBvZiBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgdW51c2VkIGRlZmluaXRpb24gKG5vbi1rZXkgYXR0cmlidXRlcyBzdWNoIGFzIGEgVFRMIGF0dHJpYnV0ZSBtdXN0IE5PVCBiZSBkZWNsYXJlZCksIG9yIGFkZCB0aGUgaW5kZXggdGhhdCB1c2VzIGl0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRub3QgX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSlcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJhZHVfdXNlZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIEJpbGxpbmdNb2RlIChyZXF1aXJlZCBmb3IgUFJPVklTSU9ORUQsIGZvcmJpZGRlbiBmb3IgUEFZX1BFUl9SRVFVRVNUKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0hvd0l0V29ya3MuUmVhZFdyaXRlQ2FwYWNpdHlNb2RlLmh0bWxcXFwiXFxuXFxuX3BmX2RkYmJ0X2hhc19wdChuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiKSlcXG5cXG5fcGZfZGRiYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKVxcblxcbiMgQmlsbGluZ01vZGUg44GM44Oq44OG44Op44OrIFxcXCJQUk9WSVNJT05FRFxcXCLjgIHjgb7jgZ/jga/mnKrmjIflrprvvIjjg4fjg5Xjgqnjg6vjg4ggUFJPVklTSU9ORUTvvInjgIJcXG4jIOODiOODvOOCr+ODs+WApO+8iFJlZiDnrYnvvInjga/liKTlrprjgavkvb/jgo/jgarjgYTvvIjoqqTmpJznn6XpmLLmraLvvInjgIJcXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQUk9WSVNJT05FRFxcXCJcXG5cXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJidF9iaWxsaW5nX3ByZXNlbnQobmFtZSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBzcGVjaWZpZWQgd2hlbiBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCwgb3Igc3dpdGNoIEJpbGxpbmdNb2RlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQQVlfUEVSX1JFUVVFU1RcXFwiXFxuXFx0X3BmX2RkYmJ0X2hhc19wdChuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiQmlsbGluZ01vZGUgaXMgUFJPVklTSU9ORUQgKHRoZSBkZWZhdWx0KSBidXQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGlzIG1pc3Npbmc7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiQWRkIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCAoUmVhZENhcGFjaXR5VW5pdHMgLyBXcml0ZUNhcGFjaXR5VW5pdHMpLCBvciBzZXQgQmlsbGluZ01vZGUgdG8gUEFZX1BFUl9SRVFVRVNUXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0X3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0bm90IF9wZl9kZGJidF9oYXNfcHQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtYXR0cmlidXRlLWRlZmluaXRpb25zXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXR0cmlidXRlRGVmaW5pdGlvbnMgbXVzdCBub3QgZGVmaW5lIHRoZSBzYW1lIGF0dHJpYnV0ZSB0d2ljZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnMuJWRcXFwiLCBbYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJBbiBhdHRyaWJ1dGUgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1xcXFxcXFwiXFxcIiwgW2FuXSksXFxuXFx0XFxcIktlZXAgYSBzaW5nbGUgZGVmaW5pdGlvbiBwZXIgYXR0cmlidXRlIG5hbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdHNvbWUgYiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0YW4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFuKVxcblxcdG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSA9PSBhblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2Vjb25kYXJ5IGluZGV4IG5hbWVzIG11c3QgYmUgdW5pcXVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJkaW5fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIlxcblxcbiMgRHVwbGljYXRlcyB3aXRoaW4gdGhlIHNhbWUgaW5kZXggbGlzdCBvbmx5OyBhIEdTSS9MU0kgY3Jvc3MtbGlzdCBjbGFzaCB3YXNcXG4jIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkluZGV4TmFtZVxcXCIsIFtwcm9wLCBiLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiSW5kZXggbmFtZSAnJXMnIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2U7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJEdXBsaWNhdGUgaW5kZXggbmFtZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkdpdmUgZXZlcnkgc2Vjb25kYXJ5IGluZGV4IGEgdW5pcXVlIEluZGV4TmFtZVxcXCIsXFxuXFx0X3BmX2RkYmRpbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIHByb3AgaW4gW1xcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIiwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCJdXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5hbWUpXFxuXFx0b2JqZWN0LmdldChiLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbCkgPT0gaW5hbWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nbG9iYWwtdGFibGUtcmVwbGljYS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHbG9iYWxUYWJsZSBSZXBsaWNhcyBtdXN0IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBvbmx5IHdoZW4gdGhlIGVuZm9yY2UgcGx1Z2luXFxuIyBrbm93cyB0aGUgYXBwJ3MgY29uY3JldGUgcmVnaW9uIChzZWUgc3JjL3ByaXZhdGUvZW5mb3JjZS50cyk7IHdpdGhvdXQgaXQgdGhlXFxuIyByZWZlcmVuY2UgaXMgdW5kZWZpbmVkIGFuZCB0aGlzIHJ1bGUgc2tpcHMuIFJlcGxpY2FzIHdpdGggdW5yZXNvbHZhYmxlXFxuIyBSZWdpb24gdmFsdWVzIGFsc28gbWFrZSB0aGUgcnVsZSBza2lwIOKAlCBhYnNlbmNlIGNhbm5vdCBiZSBwcm92ZW4gdGhlbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdsb2JhbC10YWJsZS1yZXBsaWNhLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVwbGljYXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBSZXBsaWNhcyBsaXN0ICV2IGRvZXMgbm90IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uICclcyc7IENyZWF0ZUdsb2JhbFRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgUmVwbGljYXMgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIHRoZSBjdXJyZW50IHJlZ2lvblxcXFxcXFwiXFxcIiwgW3JlcGxpY2FzLCByZWdpb25dKSxcXG5cXHRcXFwiQWRkIGEgcmVwbGljYSBlbnRyeSBmb3IgdGhlIHJlZ2lvbiB0aGUgc3RhY2sgZGVwbG95cyB0byAoQ0RLIFRhYmxlVjIgZG9lcyB0aGlzIGF1dG9tYXRpY2FsbHkpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItZ2xvYmFsdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXFxcIilcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRpc19zdHJpbmcocmVnaW9uKVxcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2FzXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IGl0IGluIGl0ZW1zIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpKVxcblxcdH1cXG5cXHRyZXBsaWNhcyA6PSBbciB8IHNvbWUgaXQgaW4gaXRlbXM7IHIgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpXVxcblxcdG5vdCByZWdpb24gaW4gcmVwbGljYXNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR1NJIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB0YWJsZSBCaWxsaW5nTW9kZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ2J0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLlJlYWRXcml0ZUNhcGFjaXR5TW9kZS5odG1sXFxcIlxcblxcbiMgR1NJLWxldmVsIGNvdW50ZXJwYXJ0IG9mIHBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dCAod2hpY2ggY292ZXJzIHRoZVxcbiMgdGFibGUtbGV2ZWwgcGFpciBvbmx5KS4gU2FtZSB0b2tlbiBzYWZldHk6IGxpdGVyYWwgQmlsbGluZ01vZGUgb3IgYWJzZW50XFxuIyAoZGVmYXVsdCBQUk9WSVNJT05FRCk7IHRva2VuIHZhbHVlcyBuZXZlciBqdWRnZWQuXFxuX3BmX2RkYmdidF9iaWxsaW5nX3ByZXNlbnQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpXFxuXFxuX3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBST1ZJU0lPTkVEXFxcIlxcblxcbl9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJnYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBzcGVjaWZpZXMgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGJ1dCBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9wZXJ0eSBQcm92aXNpb25lZFRocm91Z2hwdXQgY2FuJ3QgYmUgdXNlZCB3aXRoIFBBWV9QRVJfUkVRVUVTVCBCaWxsaW5nTW9kZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgR1NJJ3MgUHJvdmlzaW9uZWRUaHJvdWdocHV0LCBvciBzd2l0Y2ggdGhlIHRhYmxlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiZ2J0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUEFZX1BFUl9SRVFVRVNUXFxcIlxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIGlzIG1pc3NpbmcgUHJvdmlzaW9uZWRUaHJvdWdocHV0IHdoaWxlIHRoZSB0YWJsZSBiaWxscyBQUk9WSVNJT05FRCAodGhlIGRlZmF1bHQpOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvcGVydHkgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkFkZCBQcm92aXNpb25lZFRocm91Z2hwdXQgdG8gdGhlIEdTSSwgb3Igc2V0IEJpbGxpbmdNb2RlIHRvIFBBWV9QRVJfUkVRVUVTVFxcXCIsXFxuXFx0X3BmX2RkYmdidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRfcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRub3QgaXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vbktleUF0dHJpYnV0ZXMgZ29lcyB3aXRoIElOQ0xVREUsIGFuZCBvbmx5IHdpdGggSU5DTFVERVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ3BuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1wcm9qZWN0aW9uLmh0bWxcXFwiXFxuXFxuIyBHU0kgcHJvamVjdGlvbnMgb25seTogdGhlIExTSSBzaGFwZSBhbmQgdGhlIEtFWVNfT05MWStOb25LZXlBdHRyaWJ1dGVzIGNvbWJvXFxuIyB3ZXJlIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb2plY3Rpb25cXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIHVzZXMgUHJvamVjdGlvblR5cGUgSU5DTFVERSB3aXRob3V0IE5vbktleUF0dHJpYnV0ZXM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9qZWN0aW9uVHlwZSBpcyBJTkNMVURFLCBidXQgTm9uS2V5QXR0cmlidXRlcyBpcyBub3Qgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiTGlzdCB0aGUgcHJvamVjdGVkIGF0dHJpYnV0ZXMgaW4gTm9uS2V5QXR0cmlidXRlcywgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIEFMTCAvIEtFWVNfT05MWVxcXCIsXFxuXFx0X3BmX2RkYmdwbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHByb2ogOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvamVjdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2opXFxuXFx0b2JqZWN0LmdldChwcm9qLCBcXFwiUHJvamVjdGlvblR5cGVcXFwiLCBudWxsKSA9PSBcXFwiSU5DTFVERVxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA9PSAwXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLXByb2plY3Rpb24tbm9ua2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvamVjdGlvblxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgY29tYmluZXMgUHJvamVjdGlvblR5cGUgQUxMIHdpdGggTm9uS2V5QXR0cmlidXRlczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb2plY3Rpb25UeXBlIGlzIEFMTCwgYnV0IE5vbktleUF0dHJpYnV0ZXMgaXMgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiRHJvcCBOb25LZXlBdHRyaWJ1dGVzIChBTEwgYWxyZWFkeSBwcm9qZWN0cyBldmVyeXRoaW5nKSwgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIElOQ0xVREVcXFwiLFxcblxcdF9wZl9kZGJncG5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRwcm9qIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb2plY3Rpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm9qKVxcblxcdG9iamVjdC5nZXQocHJvaiwgXFxcIlByb2plY3Rpb25UeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkFMTFxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA+IDBcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiS2V5U2NoZW1hIG11c3QgYmUgW0hBU0hdIG9yIFtIQVNILCBSQU5HRV1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmtzaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiXFxuXFxuIyBUYWJsZS1sZXZlbCBrZXkgc2NoZW1hIG9ubHk6IGluZGV4IGtleSBzY2hlbWFzIHByb2R1Y2UgZGlmZmVyZW50IHNlcnZpY2VcXG4jIGVycm9ycyBhbmQgd2VyZSBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxuX3BmX2RkYmtzaF90eXBlKG5hbWUsIGkpIDo9IGt0IGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdGl0LmluZGV4ID09IGlcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hLjAuS2V5VHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIGZpcnN0IEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgSEFTSCwgZ290ICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIEtleVNjaGVtYTogVGhlIGZpcnN0IEtleVNjaGVtYUVsZW1lbnQgaXMgbm90IGEgSEFTSCBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlB1dCB0aGUgcGFydGl0aW9uIGtleSAoS2V5VHlwZSBIQVNIKSBmaXJzdCBhbmQgdGhlIG9wdGlvbmFsIHNvcnQga2V5IChSQU5HRSkgc2Vjb25kXFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGt0IDo9IF9wZl9kZGJrc2hfdHlwZShuYW1lLCAwKVxcblxcdGlzX3N0cmluZyhrdClcXG5cXHRrdCAhPSBcXFwiSEFTSFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWEuMS5LZXlUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgc2Vjb25kIEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgUkFOR0UsIGdvdCAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBLZXlTY2hlbWE6IFRoZSBzZWNvbmQgS2V5U2NoZW1hRWxlbWVudCBpcyBub3QgYSBSQU5HRSBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlVzZSBleGFjdGx5IG9uZSBIQVNIIGVsZW1lbnQsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgb25lIFJBTkdFIGVsZW1lbnRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0a3QgOj0gX3BmX2RkYmtzaF90eXBlKG5hbWUsIDEpXFxuXFx0aXNfc3RyaW5nKGt0KVxcblxcdGt0ICE9IFxcXCJSQU5HRVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiLFxcblxcdHNwcmludGYoXFxcIktleVNjaGVtYSBjYW4gaG9sZCBhdCBtb3N0IDIgZWxlbWVudHMgKEhBU0ggKyBvcHRpb25hbCBSQU5HRSksIGdvdCAlZFxcXCIsIFtuXSksXFxuXFx0XFxcIk1vZGVsIGV4dHJhIGFjY2VzcyBwYXR0ZXJucyBhcyBnbG9iYWwgb3IgbG9jYWwgc2Vjb25kYXJ5IGluZGV4ZXMgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRuIDo9IGNvdW50KFsxIHwgc29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKV0pXFxuXFx0biA+IDJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIEtpbmVzaXMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG11c3QgYmUgaW4gdGhlIHRhYmxlJ3MgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBLaW5lc2lzIERhdGEgU3RyZWFtcyBkZXN0aW5hdGlvbiBtdXN0IGxpdmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZVxcbiMgdGFibGUuIFRoZSBkZXBsb3ktdGltZSBmYWlsdXJlIG1vZGUgaXMgdWdseTogdGhlIHRhYmxlIGlzIGNyZWF0ZWQsIHRoZVxcbiMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG5ldmVyIHN0YWJpbGl6ZXMsIGFuZCBDbG91ZEZvcm1hdGlvbiByb2xscyBiYWNrIG9uXFxuIyBOb3RTdGFiaWxpemVkIG1pbnV0ZXMgbGF0ZXIg4oCUIG5vdGhpbmcgbmFtZXMgdGhlIHJlZ2lvbiBtaXNtYXRjaC5cXG4jIGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgb25seSBpbiBlbmZvcmNlIG1vZGUgd2l0aCBhXFxuIyBjb25jcmV0ZSByZWdpb247IG90aGVyd2lzZSB0aGlzIHJ1bGUgc2tpcHMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIEtpbmVzaXMgc3RyZWFtIGxpdmVzIGluICclcycgYnV0IHRoZSB0YWJsZSBkZXBsb3lzIHRvICclcyc7IHRoZSBzdHJlYW1pbmcgZGVzdGluYXRpb24gbmV2ZXIgc3RhYmlsaXplcyBhbmQgdGhlIHN0YWNrIHJvbGxzIGJhY2tcXFwiLCBbc3RyZWFtUmVnaW9uLCByZWdpb25dKSxcXG5cXHRcXFwiUG9pbnQgS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuIGF0IGEgc3RyZWFtIGluIHRoZSB0YWJsZSdzIG93biByZWdpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2tkcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdGlzX3N0cmluZyhyZWdpb24pXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG5cXHRzdHJlYW1SZWdpb24gOj0gcGFydHNbM11cXG5cXHRzdHJlYW1SZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRzdHJlYW1SZWdpb24gIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItbHNpLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1wiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxTSSBrZXkgYXR0cmlidXRlcyBtdXN0IGJlIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMzkgY2hlY2tzIHRhYmxlIGFuZCBHU0kga2V5IHNjaGVtYXMgYWdhaW5zdFxcbiMgQXR0cmlidXRlRGVmaW5pdGlvbnMgYnV0IGlzIGJsaW5kIHRvIExvY2FsU2Vjb25kYXJ5SW5kZXhlcyAobWVhc3VyZWRcXG4jIDIwMjYtMDktMDIsIDEuNy4wLWJldGEpLiBUaGlzIHJ1bGUgY292ZXJzIGV4YWN0bHkgdGhhdCBnYXAuXFxuXFxuX3BmX2RkYmxhZF9kZWZzKG5hbWUpIDo9IHthIHxcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG4jIElmIGFueSBkZWZpbml0aW9uJ3MgbmFtZSBpcyB1bnJlc29sdmFibGUgdGhlIHNldCBpcyBpbmNvbXBsZXRlIOKAlCBzdGF5IHNpbGVudC5cXG5fcGZfZGRibGFkX2RlZnNfcmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0ZXZlcnkgZCBpbiBbeCB8IHNvbWUgeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKV0ge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTFNJIGtleSBhdHRyaWJ1dGUgJyVzJyBpcyBub3QgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFuIGF0dHJpYnV0ZSByZWZlcmVuY2VkIGluIGEgS2V5U2NoZW1hIGVsZW1lbnQgaXMgbm90IGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIkFkZCB0aGUgYXR0cmlidXRlIHRvIEF0dHJpYnV0ZURlZmluaXRpb25zIChhbmQgbm93aGVyZSBlbHNlOiBvbmx5IGtleSBhdHRyaWJ1dGVzIGJlbG9uZyB0aGVyZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLWxvY2Fsc2Vjb25kYXJ5aW5kZXguaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRjb3VudChfcGZfZGRibGFkX2RlZnMobmFtZSkpID4gMFxcblxcdF9wZl9kZGJsYWRfZGVmc19yZXNvbHZhYmxlKG5hbWUpXFxuXFx0c29tZSBsIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJsYWRfZGVmcyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIExTSSBuZWVkcyBhIFJBTkdFIGtleSBhbmQgdGhlIHRhYmxlJ3MgbGVhZGluZyBoYXNoIGtleVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRibHNoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1sb2NhbHNlY29uZGFyeWluZGV4Lmh0bWxcXFwiXFxuXFxuX3BmX2RkYmxzaF9rZXl0eXBlcyhrcykgOj0ge2t0IHxcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoa3QpXFxufVxcblxcbiMgT25seSBqdWRnZSBhIGtleSBzY2hlbWEgd2hvc2UgS2V5VHlwZXMgYXJlIGFsbCBsaXRlcmFsIHN0cmluZ3MuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlKGtzKSBpZiBjb3VudChfcGZfZGRibHNoX2tleXR5cGVzKGtzKSkgPiAwXFxuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcykgaWYge1xcblxcdGV2ZXJ5IGsgaW4ga3Mge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyBoYXMgbm8gUkFOR0Uga2V5OyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW5kZXggS2V5U2NoZW1hIGRvZXMgbm90IGhhdmUgYSByYW5nZSBrZXkgZm9yIGluZGV4XFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiR2l2ZSB0aGUgTFNJIGEgc29ydCBrZXk6IFt0YWJsZSBIQVNIIGtleSwgaXRzIG93biBSQU5HRSBrZXldXFxcIixcXG5cXHRfcGZfZGRibHNoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRjb3VudChrcykgPiAwXFxuXFx0X3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcylcXG5cXHRub3QgXFxcIlJBTkdFXFxcIiBpbiBfcGZfZGRibHNoX2tleXR5cGVzKGtzKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyB1c2VzIGhhc2gga2V5ICclcycgYnV0IHRoZSB0YWJsZSdzIGhhc2gga2V5IGlzICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbmRleCBLZXlTY2hlbWEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBsZWFkaW5nIGhhc2gga2V5IGFzIHRhYmxlIEtleVNjaGVtYVxcXFxcXFwiXFxcIiwgW2luYW1lLCBsc2lIYXNoLCB0YWJsZUhhc2hdKSxcXG5cXHRcXFwiQW4gTFNJIG11c3QgcmV1c2UgdGhlIHRhYmxlJ3MgcGFydGl0aW9uIGtleTsgdXNlIGEgZ2xvYmFsIHNlY29uZGFyeSBpbmRleCBmb3IgYSBkaWZmZXJlbnQgaGFzaCBrZXlcXFwiLFxcblxcdF9wZl9kZGJsc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdHQuaW5kZXggPT0gMFxcblxcdHRhYmxlSGFzaCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFibGVIYXNoKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkhBU0hcXFwiXFxuXFx0bHNpSGFzaCA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobHNpSGFzaClcXG5cXHRsc2lIYXNoICE9IHRhYmxlSGFzaFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtbGVuZ3RoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFibGVOYW1lIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIG1lYXN1cmVkIGJvdW5kIChtaW5pbXVtIDMgY2hhcmFjdGVycykgaXMgZW5mb3JjZWQuIFRoZSAyNTUtY2hhclxcbiMgbWF4aW11bSBhbmQgdGhlIGNoYXJhY3RlciBwYXR0ZXJuIHdlcmUgbm90IG1lYXN1cmVkLiBOb3RlIHJlc29sdmUoKSB0dXJucyBhXFxuIyBSZWYtdG8tcmVzb3VyY2UgaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRDsgYSBsb2dpY2FsIElEIHNob3J0IGVub3VnaCB0b1xcbiMgdHJpcCB0aGlzIHJ1bGUgd2hpbGUgZmVlZGluZyBhIFRhYmxlTmFtZSBpcyB0cmVhdGVkIGFzIHRoZSBidWcgaXQgYWxtb3N0XFxuIyBjZXJ0YWlubHkgaXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYWJsZU5hbWUgJyVzJyBpcyBzaG9ydGVyIHRoYW4gMyBjaGFyYWN0ZXJzOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSBsZW5ndGggZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDNcXFxcXFxcIlxcXCIsIFt0bl0pLFxcblxcdFxcXCJVc2UgYSB0YWJsZSBuYW1lIG9mIGF0IGxlYXN0IDMgY2hhcmFjdGVycywgb3Igb21pdCBUYWJsZU5hbWUgYW5kIGxldCBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZSBvbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhYmxlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdGNvdW50KHRuKSA8IDNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcG9ydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBUQ1AvVURQIHBvcnRzIG11c3QgYmUgd2l0aGluIDAtNjU1MzUgYW5kIEZyb21Qb3J0IDw9IFRvUG9ydFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnX2ZpeCA6PSBcXFwiVXNlIGEgcG9ydCBiZXR3ZWVuIDAgYW5kIDY1NTM1IHdpdGggRnJvbVBvcnQgPD0gVG9Qb3J0XFxcIlxcblxcbl9wZl9zZ191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA+IDY1NTM1XFxuXFxuX3BmX3RjcF91ZHAocCkgaWYgcCBpbiB7XFxcInRjcFxcXCIsIFxcXCJ1ZHBcXFwiLCBcXFwiNlxcXCIsIFxcXCIxN1xcXCIsIDYsIDE3fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuJXNcXFwiLCBbZGlyLCBpdGVtLmluZGV4LCBwbmFtZV0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIG91dHNpZGUgdGhlIHZhbGlkIFRDUC9VRFAgcG9ydCByYW5nZSAwLTY1NTM1XFxcIiwgW3BuYW1lLCBuXSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRzb21lIHBuYW1lIGluIHtcXFwiRnJvbVBvcnRcXFwiLCBcXFwiVG9Qb3J0XFxcIn1cXG5cXHRuIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBwbmFtZSwgbnVsbCkpXFxuXFx0X3BmX3BvcnRfb3V0KG4pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuRnJvbVBvcnRcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiRnJvbVBvcnRcXFwiLCBudWxsKSlcXG5cXHR0IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVG9Qb3J0XFxcIiwgbnVsbCkpXFxuXFx0ZiA+PSAwXFxuXFx0dCA8PSA2NTUzNVxcblxcdGYgPiB0XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcG5hbWVdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyAldiBpcyBvdXRzaWRlIHRoZSB2YWxpZCBUQ1AvVURQIHBvcnQgcmFuZ2UgMC02NTUzNVxcXCIsIFtwbmFtZSwgbl0pLFxcblxcdF9wZl9zZ19maXgsIF9wZl9zZ191cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0X3BmX3RjcF91ZHAocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JcFByb3RvY29sXFxcIikpXFxuXFx0c29tZSBwbmFtZSBpbiB7XFxcIkZyb21Qb3J0XFxcIiwgXFxcIlRvUG9ydFxcXCJ9XFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BuYW1lXSkpKVxcblxcdF9wZl9wb3J0X291dChuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1wb3J0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Gcm9tUG9ydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRfcGZfdGNwX3VkcChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklwUHJvdG9jb2xcXFwiKSlcXG5cXHRmIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZyb21Qb3J0XFxcIikpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub1BvcnRcXFwiKSlcXG5cXHRmID49IDBcXG5cXHR0IDw9IDY1NTM1XFxuXFx0ZiA+IHRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQzIgdXNlciBkYXRhIGlzIGxpbWl0ZWQgdG8gMTYzODQgYnl0ZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfdWRzel9maXggOj0gXFxcIktlZXAgdXNlciBkYXRhIHVuZGVyIDE2Mzg0IGJ5dGVzOyBtb3ZlIGxhcmdlIHBheWxvYWRzIHRvIFMzIGFuZCBmZXRjaCB0aGVtIGZyb20gYSBzbWFsbCBib290c3RyYXAgc2NyaXB0XFxcIlxcblxcbl9wZl91ZHN6X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlZGF0YS1hZGQtdXNlci1kYXRhLmh0bWxcXFwiXFxuXFxuX3BmX3Vkc3pfbGltaXQgOj0gMTYzODRcXG5cXG4jIGJhc2U2NCDmloflrZfliJfjga7jg4fjgrPjg7zjg4nlvozjg5DjgqTjg4jmlbDvvIjjg5Hjg4fjgqPjg7PjgrDogIPmha7vvIlcXG5fcGZfdWRzel9kZWNvZGVkKHMpIDo9ICgoY291bnQocykgKiAzKSAvIDQpIC0gMiBpZiBlbmRzd2l0aChzLCBcXFwiPT1cXFwiKVxcblxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKChjb3VudChzKSAqIDMpIC8gNCkgLSAxIGlmIHtcXG5cXHRlbmRzd2l0aChzLCBcXFwiPVxcXCIpXFxuXFx0bm90IGVuZHN3aXRoKHMsIFxcXCI9PVxcXCIpXFxufVxcblxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKGNvdW50KHMpICogMykgLyA0IGlmIG5vdCBlbmRzd2l0aChzLCBcXFwiPVxcXCIpXFxuXFxuX3BmX3Vkc3pfcGF0aHMgOj0ge1xcblxcdFxcXCJBV1M6OkVDMjo6SW5zdGFuY2VcXFwiOiBcXFwiUHJvcGVydGllcy5Vc2VyRGF0YVxcXCIsXFxuXFx0XFxcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVxcXCI6IFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFRlbXBsYXRlRGF0YS5Vc2VyRGF0YVxcXCIsXFxufVxcblxcbiMgVXNlckRhdGEg44GM44Oq44OG44Op44OrIGJhc2U2NCDmloflrZfliJfjga7jgrHjg7zjgrlcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi11c2VyZGF0YS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgcCxcXG5cXHRzcHJpbnRmKFxcXCJVc2VyRGF0YSBkZWNvZGVzIHRvIGFib3V0ICV2IGJ5dGVzLCBidXQgRUMyIGxpbWl0cyB1c2VyIGRhdGEgdG8gJWQgYnl0ZXM7IFJ1bkluc3RhbmNlcyBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtzaXplLCBfcGZfdWRzel9saW1pdF0pLFxcblxcdF9wZl91ZHN6X2ZpeCwgX3BmX3Vkc3pfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgcCBpbiBfcGZfdWRzel9wYXRoc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHR1ZCA6PSByZXNvbHZlKG5hbWUsIHApXFxuXFx0aXNfc3RyaW5nKHVkKVxcblxcdHNpemUgOj0gX3BmX3Vkc3pfZGVjb2RlZCh1ZClcXG5cXHRzaXplID4gX3BmX3Vkc3pfbGltaXRcXG59XFxuXFxuIyBVc2VyRGF0YSDjgYwge1xcXCJGbjo6QmFzZTY0XFxcIjogXFxcIjxsaXRlcmFsPlxcXCJ9IOOBruOCseODvOOCue+8iOOCqOODs+OCs+ODvOODieWJjeOBrueUn+ODkOOCpOODiOaVsOOBp+WIpOWumu+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXVzZXJkYXRhLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBwLFxcblxcdHNwcmludGYoXFxcIlVzZXJEYXRhIGlzICVkIGJ5dGVzIGJlZm9yZSBiYXNlNjQgZW5jb2RpbmcsIGJ1dCBFQzIgbGltaXRzIHVzZXIgZGF0YSB0byAlZCBieXRlczsgUnVuSW5zdGFuY2VzIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW2NvdW50KGlubmVyKSwgX3BmX3Vkc3pfbGltaXRdKSxcXG5cXHRfcGZfdWRzel9maXgsIF9wZl91ZHN6X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUsIHAgaW4gX3BmX3Vkc3pfcGF0aHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0dWQgOj0gcmVzb2x2ZShuYW1lLCBwKVxcblxcdGlzX29iamVjdCh1ZClcXG5cXHRpbm5lciA6PSBvYmplY3QuZ2V0KHVkLCBcXFwiRm46OkJhc2U2NFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGlubmVyKVxcblxcdGNvdW50KGlubmVyKSA+IF9wZl91ZHN6X2xpbWl0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1pb3BzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVCUyBJb3BzL1Rocm91Z2hwdXQgbXVzdCBtYXRjaCB0aGUgdm9sdW1lIHR5cGUncyBzdXBwb3J0ZWQgcmFuZ2VzIGFuZCByYXRpb3NcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWb2x1bWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfdm9saW9wc19maXggOj0gXFxcIk1hdGNoIElvcHMvVGhyb3VnaHB1dCB0byB0aGUgdm9sdW1lIHR5cGU6IGdwMyAzMDAwLTgwMDAwIElPUFMgKG1heCA1MDAvR2lCLCB0aHJvdWdocHV0IDEyNS0yMDAwIE1pQi9zIGFuZCBhdCBtb3N0IElPUFMvNCksIGlvMSAxMDAtNjQwMDAgKG1heCA1MC9HaUIpLCBpbzIgMTAwLTI1NjAwMCAobWF4IDEwMDAvR2lCKTsgZ3AyL3N0MS9zYzEvc3RhbmRhcmQgYWNjZXB0IG5laXRoZXIgcHJvcGVydHlcXFwiXFxuXFxuX3BmX3ZvbGlvcHNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sXFxcIlxcblxcbl9wZl92b2xpb3BzX3JhbmdlIDo9IHtcXFwiZ3AzXFxcIjogWzMwMDAsIDgwMDAwXSwgXFxcImlvMVxcXCI6IFsxMDAsIDY0MDAwXSwgXFxcImlvMlxcXCI6IFsxMDAsIDI1NjAwMF19XFxuXFxuX3BmX3ZvbGlvcHNfcGVyX2dpYiA6PSB7XFxcImdwM1xcXCI6IDUwMCwgXFxcImlvMVxcXCI6IDUwLCBcXFwiaW8yXFxcIjogMTAwMH1cXG5cXG5fcGZfdm9saW9wc19vdXQobiwgbG8sIGhpKSBpZiBuIDwgbG9cXG5cXG5fcGZfdm9saW9wc19vdXQobiwgbG8sIGhpKSBpZiBuID4gaGlcXG5cXG5fcGZfdm9saW9wc19oYXNfaW9wcyhuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKVxcblxcbiMgSU9QUyDjgYzlnovjgZTjgajjga7ntbblr77jg6zjg7PjgrjlpJZcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgaXMgb3V0c2lkZSB0aGUgc3VwcG9ydGVkIHJhbmdlICVkLSVkIGZvciAlcyB2b2x1bWVzXFxcIiwgW24sIHJbMF0sIHJbMV0sIHZ0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0ciA6PSBfcGZfdm9saW9wc19yYW5nZVt2dF1cXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHRfcGZfdm9saW9wc19vdXQobiwgclswXSwgclsxXSlcXG59XFxuXFxuIyBJT1BTIDog44K144Kk44K65q+U44Gu6LaF6YGOXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzICV2IGV4Y2VlZHMgdGhlIG1heGltdW0gcmF0aW8gb2YgJWQgSU9QUyBwZXIgR2lCIGZvciAlcyAoU2l6ZSAldiBHaUIgYWxsb3dzIGF0IG1vc3QgJXYpXFxcIiwgW24sIHJhdGlvLCB2dCwgcywgcyAqIHJhdGlvXSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0cmF0aW8gOj0gX3BmX3ZvbGlvcHNfcGVyX2dpYlt2dF1cXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNpemVcXFwiKSlcXG5cXHRuID4gcyAqIHJhdGlvXFxufVxcblxcbiMgSW9wcyDjgpLlj5fjgZHku5jjgZHjgarjgYTlnovjgasgSW9wcyDjgpLmjIflrppcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMgdm9sdW1lcyAodmFsaWQgb25seSBmb3IgZ3AzLCBpbzEsIGlvMik7IEVDMiByZWplY3RzIHRoZSBDcmVhdGVWb2x1bWUgY2FsbFxcXCIsIFt2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHZ0IGluIHtcXFwiZ3AyXFxcIiwgXFxcInN0MVxcXCIsIFxcXCJzYzFcXFwiLCBcXFwic3RhbmRhcmRcXFwifVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpXFxufVxcblxcbiMgVGhyb3VnaHB1dCDjga8gZ3AzIOWwgueUqFxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcyB2b2x1bWVzICh2YWxpZCBvbmx5IGZvciBncDMpOyBFQzIgcmVqZWN0cyB0aGUgQ3JlYXRlVm9sdW1lIGNhbGxcXFwiLCBbdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRpc19zdHJpbmcodnQpXFxuXFx0dnQgIT0gXFxcImdwM1xcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKVxcbn1cXG5cXG4jIGdwMyBUaHJvdWdocHV0IOOBrue1tuWvvuODrOODs+OCuFxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCAldiBNaUIvcyBpcyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgMTI1LTIwMDAgZm9yIGdwMyB2b2x1bWVzXFxcIiwgW3RdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHRfcGZfdm9saW9wc19vdXQodCwgMTI1LCAyMDAwKVxcbn1cXG5cXG4jIGdwMyBUaHJvdWdocHV0IDogSU9QUyDmr5TvvIjmnIDlpKcgMC4yNSBNaUIvcyBwZXIgSU9QU++8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCAldiBNaUIvcyBleGNlZWRzIHRoZSBtYXhpbXVtIHJhdGlvIG9mIDAuMjUgTWlCL3MgcGVyIHByb3Zpc2lvbmVkIElPUFMgKCV2IElPUFMgYWxsb3dzIGF0IG1vc3QgJXYpXFxcIiwgW3QsIG4sIG4gLyA0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIikpXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0dCAqIDQgPiBuXFxufVxcblxcbiMgZ3AzIOOBpyBJb3BzIOacquaMh+Wumu+8iOODh+ODleOCqeODq+ODiCAzMDAw77yJ44Gu44Go44GN44GuIFRocm91Z2hwdXQg5q+UXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGV4Y2VlZHMgNzUwLCB0aGUgbWF4aW11bSBmb3IgdGhlIGRlZmF1bHQgMzAwMCBJT1BTICgwLjI1IE1pQi9zIHBlciBJT1BTKTsgcHJvdmlzaW9uIElvcHMgZXhwbGljaXRseSBvciBsb3dlciB0aGUgdGhyb3VnaHB1dFxcXCIsIFt0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0bm90IF9wZl92b2xpb3BzX2hhc19pb3BzKG5hbWUpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIikpXFxuXFx0dCA+IDc1MFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItZGVmaW5pdGlvbnMtZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyRGVmaW5pdGlvbnMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjb250YWluZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzY2RlX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2Vjc2NkZV9tc2cgOj0gXFxcIlJlZ2lzdGVyVGFza0RlZmluaXRpb24gbmVlZHMgYXQgbGVhc3Qgb25lIGNvbnRhaW5lcjsgdGhlIHNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBsaXN0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIlxcblxcbl9wZl9lY3NjZGVfZml4IDo9IFxcXCJBZGQgYXQgbGVhc3Qgb25lIGVudHJ5IHRvIENvbnRhaW5lckRlZmluaXRpb25zXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBtYXJrcyBubyBUYXNrRGVmaW5pdGlvbiBwcm9wZXJ0eSBhcyByZXF1aXJlZCwgc28gYW5cXG4jIGFic2VudCBvciBlbXB0eSBDb250YWluZXJEZWZpbml0aW9ucyBzYWlscyB0aHJvdWdoIHNjaGVtYSB2YWxpZGF0aW9uIGFuZFxcbiMgZGllcyBhdCByZWdpc3RyYXRpb24uIGZsYXR0ZW5fbGlzdCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIGFic2VudCBhbmRcXG4jIGVtcHR5IGFsaWtlLCBzbyBib3RoIGJsb2NrcyByZWFkIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcylcXG4jIHRvIHRlbGwgYSBsaXRlcmFsIGVtcHR5IGxpc3QgZnJvbSBhbiB1bnJlc29sdmFibGUgdmFsdWUgc3VjaCBhcyBGbjo6SWYuXFxuX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvbnRhaW5lckRlZmluaXRpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShyYXcpXFxuXFx0Y291bnQocmF3KSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIE1lbW9yeSBtdXN0IG5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgc2luZ2xlIGNvbnRhaW5lcidzIGhhcmQgTWVtb3J5IGxpbWl0IGNhbm5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LlxcbiMgVGFzayBNZW1vcnkgYXJyaXZlcyBhcyBhIHN0cmluZyAoXFxcIjUxMlxcXCIpOyB0b19udW1iZXIgY292ZXJzIGJvdGggc3BlbGxpbmdzIGFuZFxcbiMgbWFrZXMgdGhlIHJ1bGUgc2tpcCB3aGVuIGVpdGhlciBzaWRlIGlzIHVucmVzb2x2YWJsZSBvciBHQi1zdWZmaXhlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LW92ZXItdGFza1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlcXFwiLCBbYy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciAnJXMnIHNldHMgTWVtb3J5ICV2IGFib3ZlIHRoZSB0YXNrLWxldmVsIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiVGhlICdtZW1vcnknIHNldHRpbmcgZm9yIGNvbnRhaW5lciAnJXMnIGlzIGdyZWF0ZXIgdGhhbiBmb3IgdGhlIHRhc2tcXFxcXFxcIlxcXCIsIFtjbmFtZSwgY20sIHRtLCBjbmFtZV0pLFxcblxcdFxcXCJMb3dlciB0aGUgY29udGFpbmVyIE1lbW9yeSB0byBhdCBtb3N0IHRoZSB0YXNrLWxldmVsIE1lbW9yeSwgb3IgcmFpc2UgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHRtIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1lbW9yeVxcXCIpKVxcblxcdHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdChjLnZhbHVlKVxcblxcdGNtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRjbSA+IHRtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIG5lZWRzIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbiB3aGVuIHRoZSB0YXNrIHNldHMgbm8gTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzbWVtcmVxX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgV2hlbiB0aGUgdGFzayBkZWZpbml0aW9uIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeSwgZXZlcnkgY29udGFpbmVyIG11c3Qgc2V0XFxuIyBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb24uIFByb3ZpbmcgdHJ1ZSBhYnNlbmNlIG5lZWRzIHRoZSBwcmVwcm9jZXNzZWRcXG4jIGRvY3VtZW50IChpbnB1dC5yZXNvdXJjZXMpOiByZXNvbHZlKCkgaXMgdW5kZWZpbmVkIGZvciBhIG1pc3Npbmcga2V5IGFuZCBmb3JcXG4jIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBhbGlrZSwgc28gaXQgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwiUmVmIHRvIGFcXG4jIHBhcmFtZXRlclxcXCIuIFRoZSBpc19vYmplY3QgZ3VhcmQgZmFpbHMgY2xvc2VkIGlmIHRoYXQgaW50ZXJuYWwgc2hhcGUgY2hhbmdlcy5cXG5fcGZfZWNzbWVtcmVxX3Rhc2tfbWVtb3J5X2Fic2VudChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1lbW9yeVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZFxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBuZWl0aGVyIE1lbW9yeSBub3IgTWVtb3J5UmVzZXJ2YXRpb24gYW5kIHRoZSB0YXNrIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mICdtZW1vcnknIG9yICdtZW1vcnlSZXNlcnZhdGlvbicgbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtjbmFtZV0pLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnksIG9yIGdpdmUgdGhlIGNvbnRhaW5lciBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb25cXFwiLFxcblxcdF9wZl9lY3NtZW1yZXFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdGNuYW1lIDo9IG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZW1vcnlSZXNlcnZhdGlvbiBtdXN0IG5vdCBleGNlZWQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1lbW9yeVJlc2VydmF0aW9uIGlzIGEgc29mdCBmbG9vciBhbmQgTWVtb3J5IGEgaGFyZCBjZWlsaW5nOyB0aGUgc2VydmljZVxcbiMgcmVqZWN0cyBhIGZsb29yIGFib3ZlIHRoZSBjZWlsaW5nLiB0b19udW1iZXIgZmFpbHMgKGFuZCB0aGUgcnVsZSBza2lwcykgd2hlblxcbiMgZWl0aGVyIHZhbHVlIGlzIGFic2VudCBvciB1bnJlc29sdmFibGUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlSZXNlcnZhdGlvblxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnlSZXNlcnZhdGlvbiAldiBhYm92ZSBNZW1vcnkgJXY7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIidtZW1vcnknIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICdtZW1vcnlSZXNlcnZhdGlvbidcXFxcXFxcIlxcXCIsIFtjbmFtZSwgbXIsIG1dKSxcXG5cXHRcXFwiTG93ZXIgTWVtb3J5UmVzZXJ2YXRpb24gdG8gYXQgbW9zdCBNZW1vcnksIG9yIHJhaXNlIE1lbW9yeVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkpXFxuXFx0bXIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkpXFxuXFx0bXIgPiBtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIGRpYWdub3N0aWMgcGVyIGR1cGxpY2F0ZWQgbGF0ZXIgb2NjdXJyZW5jZTsgb25seSBsaXRlcmFsIHN0cmluZyBuYW1lc1xcbiMgY2FuIGJlIGNvbXBhcmVkLCBzbyBhIFJlZi12YWx1ZWQgTmFtZSBza2lwcyBpdHMgcGFpcnMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZHVwbGljYXRlLWNvbnRhaW5lci1uYW1lc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5OYW1lXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgbmFtZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cXFxcXFxcIlxcXCIsIFtuYV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IGNvbnRhaW5lciBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGEgZGlzdGluY3QgTmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRuYSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobmEpXFxuXFx0bmEgPT0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTmFtZVxcXCIsIG51bGwpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVwaGVtZXJhbFN0b3JhZ2UgU2l6ZUluR2lCIG11c3QgYmUgMjEtMjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2VwaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWVwaGVtZXJhbHN0b3JhZ2UuaHRtbFxcXCJcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgY2FycmllcyBubyBtaW5pbXVtL21heGltdW0gZm9yIFNpemVJbkdpQiwgc28gMjEtMjAwIGlzXFxuIyBlbmZvcmNlZCBvbmx5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYmVsb3cgMjE7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbGVhc3QgMjFcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQiwgb3IgZHJvcCBFcGhlbWVyYWxTdG9yYWdlIHRvIGtlZXAgdGhlIGRlZmF1bHQgMjAgR2lCXFxcIixcXG5cXHRfcGZfZWNzZXBoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIikpXFxuXFx0cyA8IDIxXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYWJvdmUgMjAwOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJFcGhlbWVyYWxTdG9yYWdlIHNpemUgc2hvdWxkIGJlIGF0IG1vc3QgMjAwXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJVc2UgYSBzaXplIGJldHdlZW4gMjEgYW5kIDIwMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzID4gMjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVzc2VudGlhbC1jb250YWluZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXQgbGVhc3Qgb25lIGNvbnRhaW5lciBtdXN0IGJlIGVzc2VudGlhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFc3NlbnRpYWwgZGVmYXVsdHMgdG8gdHJ1ZSwgc28gdGhlIHJ1bGUgZmlyZXMgb25seSB3aGVuIGV2ZXJ5IGNvbnRhaW5lciBzYXlzXFxuIyBFc3NlbnRpYWw6IGZhbHNlIGV4cGxpY2l0bHkuIEEgY29udGFpbmVyIHdob3NlIEVzc2VudGlhbCBpcyB1bnJlc29sdmFibGUgKG9yXFxuIyBhIG5vbi1ib29sZWFuKSBicmVha3MgdGhlIGBldmVyeWAsIGFuZCB0aGUgcnVsZSBza2lwcyDigJQgYWJzZW5jZSBvZiBhblxcbiMgZXNzZW50aWFsIGNvbnRhaW5lciBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdFxcXCJFdmVyeSBjb250YWluZXIgc2V0cyBFc3NlbnRpYWw6IGZhbHNlOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUYXNrIGRlZmluaXRpb24gZG9lc24ndCBoYXZlIGFueSBlc3NlbnRpYWwgY29udGFpbmVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJNYXJrIGF0IGxlYXN0IG9uZSBjb250YWluZXIgRXNzZW50aWFsOiB0cnVlLCBvciBvbWl0IEVzc2VudGlhbCAoaXQgZGVmYXVsdHMgdG8gdHJ1ZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdGl0ZW1zIDo9IFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBjIGluIGl0ZW1zIHtcXG5cXHRcXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJFc3NlbnRpYWxcXFwiLCBudWxsKSA9PSBmYWxzZVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmUgTmV0d29ya01vZGUgJ2F3c3ZwYydcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NubV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2tfZGVmaW5pdGlvbl9wYXJhbWV0ZXJzLmh0bWwjbmV0d29ya19tb2RlXFxcIlxcblxcbiMgcmVzb2x2ZSgpIGNhbm5vdCB0ZWxsIFxcXCJhYnNlbnRcXFwiIGZyb20gXFxcInVucmVzb2x2YWJsZVxcXCIgKGJvdGggdW5kZWZpbmVkKSwgc28gdHJ1ZVxcbiMgYWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50OyBhIFJlZi12YWx1ZWQgTmV0d29ya01vZGVcXG4jIG5vIGxvbmdlciB0cmlwcyB0aGUgbm90LXNldCBibG9jay5cXG5fcGZfZWNzbm1fYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya01vZGVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmV0d29ya01vZGUgaXMgJyVzJyBidXQgdGFzayBkZWZpbml0aW9ucyByZXF1aXJpbmcgRkFSR0FURSBjb21wYXRpYmlsaXR5IG11c3QgdXNlICdhd3N2cGMnOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25tXSksXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRubSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIilcXG5cXHRpc19zdHJpbmcobm0pXFxuXFx0bm0gIT0gXFxcImF3c3ZwY1xcXCJcXG59XFxuXFxuIyBOZXR3b3JrTW9kZSDmnKrmjIflrprjgafjgoIgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiDjga9cXG4jIFxcXCJGYXJnYXRlIG9ubHkgc3VwcG9ydHMgbmV0d29yayBtb2RlICdhd3N2cGMnLlxcXCIg44Gn5aSx5pWX44GZ44KL77yIMjAyNi0wOS0wMSDlrp8gQVBJIOeiuuiqje+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0XFxcIk5ldHdvcmtNb2RlIGlzIG5vdCBzZXQsIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCBzZXQgaXQgdG8gJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJTZXQgTmV0d29ya01vZGUgdG8gJ2F3c3ZwYydcXFwiLFxcblxcdF9wZl9lY3NubV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cmMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXF1aXJlc0NvbXBhdGliaWxpdGllc1xcXCIpXFxuXFx0aXNfYXJyYXkocmMpXFxuXFx0XFxcIkZBUkdBVEVcXFwiIGluIHJjXFxuXFx0X3BmX2Vjc25tX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGQVJHQVRFIGNvbXBhdGliaWxpdHkgcmVxdWlyZXMgdGFzay1sZXZlbCBDcHUgYW5kIE1lbW9yeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2ZhcmdjbV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjcy10YXNrZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDQ3IGNoZWNrcyB0aGUgQ3B1L01lbW9yeSBwYWlyaW5nIG9ubHkgd2hlbiBib3RoIGFyZSBwcmVzZW50O1xcbiMgbGVhdmluZyBvbmUgb3V0IGVudGlyZWx5IGlzIGNhdWdodCBieSBub3RoaW5nIGJlZm9yZSByZWdpc3RyYXRpb24uIFRydWVcXG4jIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIHBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxuIyBmb3IgdGhlIGlkaW9tKS5cXG5fcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSkgaWYge1xcblxcdHNvbWUgcmMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRyYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXFxuX3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DcHVcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBDcHUgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdjcHUnIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIENwdSAoYW5kIE1lbW9yeSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJDcHVcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIixcXG5cXHRcXFwiUmVxdWlyZXNDb21wYXRpYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5IGlzIG1pc3Npbmc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVxdWlyZXMgdGhhdCAnbWVtb3J5JyBiZSBkZWZpbmVkIGF0IHRoZSB0YXNrIGxldmVsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnkgKGFuZCBDcHUpIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEZhcmdhdGUgY29tYmluYXRpb25zXFxcIixcXG5cXHRfcGZfZWNzZmFyZ2NtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSlcXG5cXHRfcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBcXFwiTWVtb3J5XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBTEIgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaWRsZV90aW1lb3V0X291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPiA0MDAwXFxuXFxuX3BmX25vbl9hbGIobmFtZSkgaWYge1xcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIilcXG5cXHR0ICE9IFxcXCJhcHBsaWNhdGlvblxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXR0cmlidXRlcy4lZC5WYWx1ZVxcXCIsIFtpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQwMDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDQwMDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2FwcGxpY2F0aW9uLWxvYWQtYmFsYW5jZXJzLmh0bWwjY29ubmVjdGlvbi1pZGxlLXRpbWVvdXRcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0bm90IF9wZl9ub25fYWxiKG5hbWUpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9pZGxlX3RpbWVvdXRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1kZXJlZ2lzdHJhdGlvbi1kZWxheS1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM2MDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGVyZWdfZGVsYXlfb3V0KG4pIGlmIG4gPCAwXFxuXFxuX3BmX2RlcmVnX2RlbGF5X291dChuKSBpZiBuID4gMzYwMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItdGctZGVyZWdpc3RyYXRpb24tZGVsYXktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgaXMgJXYgYnV0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzNjAwIHNlY29uZHNcXFwiLCBbbnVtXSksXFxuXFx0XFxcIlNldCBkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDM2MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2VkaXQtdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXMuaHRtbCNkZXJlZ2lzdHJhdGlvbi1kZWxheVxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX2RlcmVnX2RlbGF5X291dChudW0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgbXVzdCBiZSAwIG9yIGJldHdlZW4gMzAgYW5kIDkwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiB7XFxuXFx0biA+IDBcXG5cXHRuIDwgMzBcXG59XFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIG4gPiA5MDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRnLXNsb3ctc3RhcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgaXMgJXYgYnV0IG11c3QgYmUgMCAoZGlzYWJsZWQpIG9yIGJldHdlZW4gMzAgYW5kIDkwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgc2xvd19zdGFydC5kdXJhdGlvbl9zZWNvbmRzIHRvIDAgb3IgYSB2YWx1ZSBiZXR3ZWVuIDMwIGFuZCA5MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2VkaXQtdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXMuaHRtbCNzbG93LXN0YXJ0LW1vZGVcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0YXR0ciA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGF0dHIpXFxuXFx0b2JqZWN0LmdldChhdHRyLCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9zbG93X3N0YXJ0X291dChudW0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLWlubGluZS1wb2xpY3ktc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbmxpbmUgcG9saWN5IGRvY3VtZW50cyBhcmUgbGltaXRlZCBwZXIgaWRlbnRpdHkgKHJvbGUgMTAyNDAgLyBncm91cCA1MTIwIC8gdXNlciAyMDQ4IGNoYXJhY3RlcnMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9pbmxpbmVfcG9saWN5X2xpbWl0cyA6PSB7XFxuXFx0XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiOiAxMDI0MCxcXG5cXHRcXFwiQVdTOjpJQU06OlJvbGVQb2xpY3lcXFwiOiAxMDI0MCxcXG5cXHRcXFwiQVdTOjpJQU06OlVzZXJQb2xpY3lcXFwiOiAyMDQ4LFxcblxcdFxcXCJBV1M6OklBTTo6R3JvdXBQb2xpY3lcXFwiOiA1MTIwLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1pbmxpbmUtcG9saWN5LXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQb2xpY3lEb2N1bWVudCBpcyAlZCBjaGFyYWN0ZXJzIChKU09OIHdpdGhvdXQgd2hpdGVzcGFjZSkgYnV0IHRoZSBpbmxpbmUgcG9saWN5IGxpbWl0IGZvciAlcyBpcyAlZCAocm9sZTogMTAyNDAsIGdyb3VwOiA1MTIwLCB1c2VyOiAyMDQ4KVxcXCIsIFtzaXplLCBydHlwZSwgbGltaXRdKSxcXG5cXHRcXFwiTW92ZSBzdGF0ZW1lbnRzIGludG8gbWFuYWdlZCBwb2xpY2llcyBvciBzaG9ydGVuIHRoZSBkb2N1bWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWFtLXF1b3Rhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgcnR5cGUsIGxpbWl0IGluIF9wZl9pbmxpbmVfcG9saWN5X2xpbWl0c1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRkb2MgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KGRvYylcXG5cXHRzaXplIDo9IGNvdW50KGpzb24ubWFyc2hhbChkb2MpKVxcblxcdHNpemUgPiBsaW1pdFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljaWVzIHBlciBpZGVudGl0eSBhcmUgY2FwcGVkIChoYXJkIG1heGltdW1zIHJvbGUgMjUgLyB1c2VyIDIwIC8gZ3JvdXAgMTApXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODj+ODvOODieS4iumZkO+8iFNlcnZpY2UgUXVvdGFzIOOBruOAjE1heGltdW0gcXVvdGHjgI09IOOBneOCjOS7peS4iuW8leOBjeS4iuOBkuS4jeWPr+iDveOBquWApO+8iTpcXG4jICAgcm9sZSAyNSAvIHVzZXIgMjAgLyBncm91cCAxMO+8iGdyb3VwIOOBryBhZGp1c3RhYmxlOiBmYWxzZeOAgeWun+a4rOOBp+OCgueiuuiqje+8ieOAglxcbiMg44OH44OV44Kp44Or44OI77yIcm9sZSAyMCAvIHVzZXIgMTAgLyBncm91cCAxMO+8iei2heOBr+OCouOCq+OCpuODs+ODiOOBruOCr+OCqeODvOOCv+W8leOBjeS4iuOBkuasoeesrOOBp1xcbiMg5oiQ5Yqf44GX5b6X44KL44Gf44KBIEVSUk9SIOOBq+OBl+OBquOBhO+8iGJlbmNoIOOCouOCq+OCpuODs+ODiOOBriByb2xlPTIwIOOBpyAxMSDlgIvmiJDlip/jgpLlrp/muKzmuIjjgb/vvInjgIJcXG5fcGZfaWFtcG9sX2xpbWl0cyA6PSB7XFxuXFx0XFxcIkFXUzo6SUFNOjpSb2xlXFxcIjogMjUsXFxuXFx0XFxcIkFXUzo6SUFNOjpVc2VyXFxcIjogMjAsXFxuXFx0XFxcIkFXUzo6SUFNOjpHcm91cFxcXCI6IDEwLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIG1hbmFnZWQgcG9saWNpZXMgYXJlIGF0dGFjaGVkLCBidXQgdGhlIGhhcmQgbWF4aW11bSBmb3IgJXMgaXMgJWQgKHF1b3RhIGRlZmF1bHRzOiByb2xlIDIwLCB1c2VyIDEwLCBncm91cCAxMDsgcmFpc2FibGUgb25seSB1cCB0byB0aGUgaGFyZCBtYXhpbXVtKTsgZGVwbG95bWVudCBmYWlscyB3aXRoIExpbWl0RXhjZWVkZWRcXFwiLCBbbiwgcnR5cGUsIGxpbWl0XSksXFxuXFx0XFxcIkNvbnNvbGlkYXRlIHN0YXRlbWVudHMgaW50byBmZXdlciBtYW5hZ2VkIHBvbGljaWVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgbGltaXQgaW4gX3BmX2lhbXBvbF9saW1pdHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0YXJyIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRuIDo9IGNvdW50KGFycilcXG5cXHRuID4gbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbWFuYWdlZC1wb2xpY3ktc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljeSBkb2N1bWVudHMgYXJlIGxpbWl0ZWQgdG8gNjE0NCBjaGFyYWN0ZXJzICh3aGl0ZXNwYWNlIGV4Y2x1ZGVkKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5RG9jdW1lbnQgaXMgJWQgY2hhcmFjdGVycyAoSlNPTiB3aXRob3V0IHdoaXRlc3BhY2UpIGJ1dCB0aGUgbWFuYWdlZCBwb2xpY3kgbGltaXQgaXMgNjE0NFxcXCIsIFtzaXplXSksXFxuXFx0XFxcIlNwbGl0IHRoZSBkb2N1bWVudCBpbnRvIG11bHRpcGxlIG1hbmFnZWQgcG9saWNpZXMgb3Igc2hvcnRlbiBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWFtLXF1b3Rhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwiKVxcblxcdGRvYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIilcXG5cXHRpc19vYmplY3QoZG9jKVxcblxcdHNpemUgOj0gY291bnQoanNvbi5tYXJzaGFsKGRvYykpXFxuXFx0c2l6ZSA+IDYxNDRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZW52LXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGFtYmRhIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbGltaXRlZCB0byA0MDk2IGJ5dGVzIGluIHRvdGFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODquODhuODqeODq+aWh+Wtl+WIl+OBruOCreODvC/lgKTjgaDjgZHjgpLmlbDjgYjjgovvvIjjg4jjg7zjgq/jg7Pjga/jgrnjgq3jg4Pjg5fvvInjgILlkIjoqIjjgYzml6LjgasgNDA5NiDjgpLotoXjgYjjgaZcXG4jIOOBhOOCjOOBsOOAgeWun+mam+OBruODh+ODl+ODreOCpOOBp+OCguW/heOBmuWkseaVl+OBmeOCi++8iOWun+OCteOCpOOCuuOBr+aOqOWumuS7peS4iuOBq+OBl+OBi+OBquOCieOBquOBhO+8ieOAglxcbiMgTk9URTog44GT44Gu44Ko44Oz44K444Oz44GuIFJlZ28g44OR44O844K144Gv5YaF5YyF6KGo6KiY5YaF44GuIDIg5aSJ5pWwIHNvbWXvvIhzb21lIGssIHYgaW4gdmFyc++8ieOCklxcbiMg5Y+X44GR5LuY44GR44Gq44GE44Gf44KB44CBb2JqZWN0LmtleXMg57WM55Sx44Gn5pu444GP44CCXFxuX3BmX2xlbnZfc2l6ZSh2YXJzKSA6PSBzdW0oW3MgfFxcblxcdHNvbWUgayBpbiBvYmplY3Qua2V5cyh2YXJzKVxcblxcdGlzX3N0cmluZyh2YXJzW2tdKVxcblxcdHMgOj0gY291bnQoaykgKyBjb3VudCh2YXJzW2tdKVxcbl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZW52LXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvdGFsIGF0IGxlYXN0ICVkIGJ5dGVzIChsaXRlcmFsIGtleXMgYW5kIHZhbHVlcyksIGJ1dCBMYW1iZGEgbGltaXRzIHRoZSBlbnZpcm9ubWVudCB0byA0MDk2IGJ5dGVzOyBDcmVhdGVGdW5jdGlvbiBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFt0b3RhbF0pLFxcblxcdFxcXCJNb3ZlIGxhcmdlIHZhbHVlcyB0byBTU00gUGFyYW1ldGVyIFN0b3JlLCBTZWNyZXRzIE1hbmFnZXIsIG9yIGEgYnVuZGxlZCBjb25maWcgZmlsZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2dldHRpbmdzdGFydGVkLWxpbWl0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHR2YXJzIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW52aXJvbm1lbnQuVmFyaWFibGVzXFxcIilcXG5cXHRpc19vYmplY3QodmFycylcXG5cXHR0b3RhbCA6PSBfcGZfbGVudl9zaXplKHZhcnMpXFxuXFx0dG90YWwgPiA0MDk2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibG9nc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGZpbHRlciBwYXR0ZXJuIHN0YXJ0aW5nIHdpdGggJ1snIG11c3QgZW5kIHdpdGggJ10nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9sZ2ZwYl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9sb2dzL0ZpbHRlckFuZFBhdHRlcm5TeW50YXguaHRtbFxcXCJcXG5cXG5fcGZfbGdmcGJfbXNnKGtpbmQpIDo9IHNwcmludGYoXFxcIlRoZSAlcyBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgYnV0IGRvZXMgbm90IGVuZCB3aXRoICddJzsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiSWYgYSBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgaXQgbXVzdCBlbmQgd2l0aCAnXSdcXFxcXFxcIlxcXCIsIFtraW5kXSlcXG5cXG5fcGZfbGdmcGJfZml4IDo9IFxcXCJDbG9zZSB0aGUgYnJhY2tldCDigJQgYSBzcGFjZS1kZWxpbWl0ZWQgcGF0dGVybiBpcyBbZmllbGQxLCBmaWVsZDIsIC4uLl1cXFwiXFxuXFxuIyBUaGUgc2FtZSBwYXJzZXIgcnVucyBmb3IgbWV0cmljIGZpbHRlcnMgYW5kIHN1YnNjcmlwdGlvbiBmaWx0ZXJzLCBhbmQgaXRcXG4jIHJ1bnMgYmVmb3JlIGFueSBkZXN0aW5hdGlvbiB2YWxpZGF0aW9uIChiZW5jaCBjMDEvYzA2KS4gT25seSB0aGlzXFxuIyBzdGFydC9lbmQgcGFpcmluZyBpcyBjaGVja2VkIGhlcmU7IGEgZnVsbCBwYXR0ZXJuIHBhcnNlciBpcyBvdXQgb2Ygc2NvcGUuXFxuX3BmX2xnZnBiX3VuYmFsYW5jZWQocCkgaWYge1xcblxcdHQgOj0gdHJpbV9zcGFjZShwKVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcIltcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh0LCBcXFwiXVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJtZXRyaWNcXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJzdWJzY3JpcHRpb25cXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZWZhdWx0VmFsdWUgaXMgZW1pdHRlZCB3aGVuIGEgbG9nIGxpbmUgZG9lcyBub3QgbWF0Y2gsIGJ1dCBhIGRpbWVuc2lvblxcbiMgdmFsdWUgY2FuIG9ubHkgY29tZSBmcm9tIGEgbWF0Y2gg4oCUIHRoZSBzZXJ2aWNlIHJlamVjdHMgdGhlIGNvbWJpbmF0aW9uLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNUcmFuc2Zvcm1hdGlvbnMuJWQuRGVmYXVsdFZhbHVlXFxcIiwgW3QuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbiBzZXRzIGJvdGggRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJJbnZhbGlkIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbjogZGltZW5zaW9ucyBhbmQgZGVmYXVsdCB2YWx1ZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHByb3BlcnRpZXNcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgRGVmYXVsdFZhbHVlIHdoZW4gdGhlIHRyYW5zZm9ybWF0aW9uIGhhcyBEaW1lbnNpb25zLCBvciBkcm9wIHRoZSBEaW1lbnNpb25zXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sb2dzLW1ldHJpY2ZpbHRlci1tZXRyaWN0cmFuc2Zvcm1hdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcXFwiKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTWV0cmljVHJhbnNmb3JtYXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEZWZhdWx0VmFsdWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0ZGltcyA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEaW1lbnNpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShkaW1zKVxcblxcdGNvdW50KGRpbXMpID4gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxvZ3Mtc3Vic2NyaXB0aW9uLWtpbmVzaXMtcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBLaW5lc2lzIGRlc3RpbmF0aW9uIG5lZWRzIFJvbGVBcm5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2xnc2tyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2xvZ3MvU3Vic2NyaXB0aW9uRmlsdGVycy5odG1sXFxcIlxcblxcbiMgVGhlIGRlc3RpbmF0aW9uIGlzIHByb3ZhYmx5IEtpbmVzaXMgdHdvIHdheXM6IGEgbGl0ZXJhbFxcbiMgYXJuOjxwYXJ0aXRpb24+OmtpbmVzaXM6IHN0cmluZywgb3IgYSBSZWYvR2V0QXR0IHRoYXQgcmVzb2x2ZSgpIHR1cm5zIGludG9cXG4jIHRoZSBsb2dpY2FsIElEIG9mIGFuIGluLXRlbXBsYXRlIEFXUzo6S2luZXNpczo6U3RyZWFtLiBTY29wZWQgdG8gS2luZXNpcyDigJRcXG4jIHRoZSBiZW5jaCBlcnJvciBuYW1lcyBcXFwidmVuZG9yIGtpbmVzaXNcXFwiOyBvdGhlciB2ZW5kb3JzIHdlcmUgbm90IG1lYXN1cmVkLlxcbl9wZl9sZ3Nrcl9raW5lc2lzX2Rlc3QobmFtZSkgaWYge1xcblxcdGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXN0aW5hdGlvbkFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGQpXFxuXFx0cGFydHMgOj0gc3BsaXQoZCwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSAzXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG59XFxuXFxuX3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKSBpZiB7XFxuXFx0ZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc3RpbmF0aW9uQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRkIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXM6OlN0cmVhbVxcXCIpXFxufVxcblxcbiMgVHJ1ZSBhYnNlbmNlIG9mIFJvbGVBcm4gbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2xnc2tyX3JvbGVfYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiUm9sZUFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLXN1YnNjcmlwdGlvbi1raW5lc2lzLXJvbGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvbGVBcm5cXFwiLFxcblxcdFxcXCJUaGUgc3Vic2NyaXB0aW9uIGZpbHRlciB0YXJnZXRzIGEgS2luZXNpcyBzdHJlYW0gYnV0IHNldHMgbm8gUm9sZUFybjsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiZGVzdGluYXRpb25Bcm4gZm9yIHZlbmRvciBraW5lc2lzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgcm9sZUFyblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgUm9sZUFybiBmb3IgYSByb2xlIHRoYXQgbG9ncy5hbWF6b25hd3MuY29tIGNhbiBhc3N1bWUgd2l0aCBraW5lc2lzOlB1dFJlY29yZCBvbiB0aGUgc3RyZWFtXFxcIixcXG5cXHRfcGZfbGdza3JfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0X3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKVxcblxcdF9wZl9sZ3Nrcl9yb2xlX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtYWxpYXMtY2xvdWRmcm9udC16b25lLWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIENsb3VkRnJvbnQgYWxpYXMgdGFyZ2V0IG11c3QgdXNlIGhvc3RlZCB6b25lIFoyRkRUTkRBVEFRWVcyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXZlcnkgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gaXMgYWxpYXNlZCB0aHJvdWdoIHRoZSBzaW5nbGUgZ2xvYmFsIGhvc3RlZFxcbiMgem9uZSBaMkZEVE5EQVRBUVlXMi4gQW55IG90aGVyIEFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCAoYW4gQUxCJ3MgcmVnaW9uYWxcXG4jIHpvbmUgaWQgaXMgdGhlIGNsYXNzaWMgcGFzdGUgZXJyb3IpIGZhaWxzIGF0IGRlcGxveSB0aW1lIHdpdGggXFxcInRoZSBhbGlhc1xcbiMgdGFyZ2V0IG5hbWUgZG9lcyBub3QgbGllIHdpdGhpbiB0aGUgdGFyZ2V0IHpvbmVcXFwiLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1hbGlhcy1jbG91ZGZyb250LXpvbmUtaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIGFsaWFzIHRhcmdldHMgYSBDbG91ZEZyb250IGRvbWFpbiwgc28gQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkIG11c3QgYmUgWjJGRFROREFUQVFZVzIsIG5vdCAnJXMnXFxcIiwgW3ppZF0pLFxcblxcdFxcXCJTZXQgQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkIHRvIFoyRkRUTkRBVEFRWVcyIChpbiB0aGUgQ0RLLCByb3V0ZTUzX3RhcmdldHMuQ2xvdWRGcm9udFRhcmdldCBkb2VzIHRoaXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL2NmX3JlZ2lvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdGRucyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0LkROU05hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhkbnMpXFxuXFx0ZW5kc3dpdGgodHJpbV9zdWZmaXgobG93ZXIoZG5zKSwgXFxcIi5cXFwiKSwgXFxcIi5jbG91ZGZyb250Lm5ldFxcXCIpXFxuXFx0emlkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkXFxcIilcXG5cXHRpc19zdHJpbmcoemlkKVxcblxcdHppZCAhPSBcXFwiWjJGRFROREFUQVFZVzJcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1hcGV4LWNuYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIENOQU1FIHJlY29yZCBpcyBub3QgcGVybWl0dGVkIGF0IHRoZSB6b25lIGFwZXhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6SG9zdGVkWm9uZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfYXBleF9ub3JtKG4pIDo9IHRyaW1fc3VmZml4KGxvd2VyKG4pLCBcXFwiLlxcXCIpXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMjMgY2F0Y2hlcyBhbiBhcGV4IENOQU1FIG9ubHkgd2hlbiB0aGUgcmVjb3JkIGNhcnJpZXMgYVxcbiMgbGl0ZXJhbCBIb3N0ZWRab25lTmFtZS4gQ0RLIEwyIGFsd2F5cyBsaW5rcyByZWNvcmRzIHdpdGhcXG4jIEhvc3RlZFpvbmVJZDoge1xcXCJSZWZcXFwiOiA8em9uZT59LCB3aGljaCBFMzAyMyBkb2VzIG5vdCBzZWUgKG1lYXN1cmVkIDIwMjYtMDktMDIsXFxuIyBlbmdpbmUgMS43LjAtYmV0YSkuIHJlc29sdmUoKSB0dXJucyBzdWNoIGEgUmVmIGludG8gdGhlIHRhcmdldCdzIGxvZ2ljYWwgSUQsXFxuIyBzbyB3aGVuIHRoYXQgSUQgbmFtZXMgYSBIb3N0ZWRab25lIGluIHRoZSBzYW1lIHRlbXBsYXRlIHdlIGNhbiByZWFkIGl0c1xcbiMgbGl0ZXJhbCBOYW1lIGFuZCBkbyB0aGUgYXBleCBjb21wYXJpc29uIG91cnNlbHZlcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtYXBleC1jbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQSBDTkFNRSByZWNvcmQgaXMgbm90IHBlcm1pdHRlZCBhdCB0aGUgem9uZSBhcGV4ICgnJXMnKTsgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBcXFxcXFxcIlJSU2V0IG9mIHR5cGUgQ05BTUUgLi4uIGlzIG5vdCBwZXJtaXR0ZWQgYXQgYXBleFxcXFxcXFwiXFxcIiwgW3JlY05hbWVdKSxcXG5cXHRcXFwiVXNlIGFuIGFsaWFzIEEvQUFBQSByZWNvcmQgZm9yIHRoZSBhcGV4IChBbGlhc1RhcmdldCksIG9yIG1vdmUgdGhlIENOQU1FIHRvIGEgc3ViZG9tYWluXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3Jlc291cmNlLXJlY29yZC1zZXRzLWNob29zaW5nLWFsaWFzLW5vbi1hbGlhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJDTkFNRVxcXCJcXG5cXHR6cmVmIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSG9zdGVkWm9uZUlkXFxcIilcXG5cXHRpc19zdHJpbmcoenJlZilcXG5cXHR6cmVmIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6Okhvc3RlZFpvbmVcXFwiKVxcblxcdHpvbmVOYW1lIDo9IHJlc29sdmUoenJlZiwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHpvbmVOYW1lKVxcblxcdHJlY05hbWUgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcocmVjTmFtZSlcXG5cXHRfcGZfcjUzX2FwZXhfbm9ybShyZWNOYW1lKSA9PSBfcGZfcjUzX2FwZXhfbm9ybSh6b25lTmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWdlb2xvY2F0aW9uLWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2VvTG9jYXRpb24gY2Fubm90IHNwZWNpZnkgYm90aCBDb250aW5lbnRDb2RlIGFuZCBDb3VudHJ5Q29kZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIGV4cHJlc3NlcyB0aGlzIGFzIGEgb25lT2YsIHdoaWNoIHRoZSBzZXJ2ZXItc2lkZVxcbiMgcHJlLWRlcGxveSB2YWxpZGF0aW9uIGVuZm9yY2VzIChcXFwiMiBzdWJzY2hlbWFzIG1hdGNoZWQgaW5zdGVhZCBvZiBvbmVcXFwiKSBidXRcXG4jIHRoZSBidW5kbGVkIGVuZ2luZSBkb2VzIG5vdCBldmFsdWF0ZSDigJQgaGVuY2UgdXBzdHJlYW06IHBlbmRpbmctZW5naW5lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1nZW9sb2NhdGlvbi1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkdlb0xvY2F0aW9uXFxcIixcXG5cXHRcXFwiR2VvTG9jYXRpb24gY2Fubm90IHNwZWNpZnkgYm90aCBDb250aW5lbnRDb2RlIGFuZCBDb3VudHJ5Q29kZTsgQ2xvdWRGb3JtYXRpb24gcmVqZWN0cyB0aGUgcmVjb3JkIHNldCBiZWZvcmUgcHJvdmlzaW9uaW5nXFxcIixcXG5cXHRcXFwiS2VlcCBlaXRoZXIgdGhlIENvbnRpbmVudENvZGUgb3IgdGhlIENvdW50cnlDb2RlIChhZGQgU3ViZGl2aXNpb25Db2RlIG9ubHkgbmV4dCB0byBDb3VudHJ5Q29kZSBVUylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXJvdXRlNTMtcmVjb3Jkc2V0LWdlb2xvY2F0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0Z2VvIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuR2VvTG9jYXRpb25cXFwiKVxcblxcdGlzX29iamVjdChnZW8pXFxuXFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoZ2VvLCBcXFwiQ29udGluZW50Q29kZVxcXCIsIG51bGwpKVxcblxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGdlbywgXFxcIkNvdW50cnlDb2RlXFxcIiwgbnVsbCkpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1tdWx0aXZhbHVlLWFsaWFzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNdWx0aVZhbHVlQW5zd2VyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIEFsaWFzVGFyZ2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1tdWx0aXZhbHVlLWFsaWFzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIixcXG5cXHRcXFwiTXVsdGlWYWx1ZUFuc3dlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBBbGlhc1RhcmdldDsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiTXVsdGl2YWx1ZSBhbnN3ZXIgcnJzZXQgc2hvdWxkIG5vdCBiZSBhbiBhbGlhcyBycnNldFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiVXNlIHBsYWluIG11bHRpdmFsdWUgcmVjb3JkcyB3aXRoIFJlc291cmNlUmVjb3Jkcywgb3IgZHJvcCBNdWx0aVZhbHVlQW5zd2VyIGFuZCBrZWVwIHRoZSBhbGlhc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0XFxcIikpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTlMgcmVjb3JkcyB0YWtlIG5vIHJvdXRpbmcgcG9saWN5OyBDTkFNRSBjYW5ub3QgYmUgbXVsdGl2YWx1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX3R5cG9sX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCJcXG5cXG5fcGZfcjUzX3R5cG9sX3Byb3BzIDo9IFtcXFwiV2VpZ2h0XFxcIiwgXFxcIlJlZ2lvblxcXCIsIFxcXCJGYWlsb3ZlclxcXCIsIFxcXCJHZW9Mb2NhdGlvblxcXCIsIFxcXCJDaWRyUm91dGluZ0NvbmZpZ1xcXCJdXFxuXFxuX3BmX3I1M190eXBvbF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRzb21lIHAgaW4gX3BmX3I1M190eXBvbF9wcm9wc1xcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwXSkpICE9IG51bGxcXG59XFxuXFxuX3BmX3I1M190eXBvbF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblxcbiMgT25seSBjb21iaW5hdGlvbnMgdGhhdCBmYWlsZWQgb24gYSByZWFsIGRlcGxveSBhcmUgZmxhZ2dlZC4gU09BL0RTIHdpdGggYVxcbiMgcm91dGluZyBwb2xpY3kgYXJlIGFsc28gZG9jdW1lbnRlZCBhcyB1bnN1cHBvcnRlZCBidXQgd2VyZSBub3QgbWVhc3VyZWQsIHNvXFxuIyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbGVmdCBvdXQgKHNlZSB0aGUgZGlzY292ZXJ5IGlzc3VlKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXR5cGUtcm91dGluZy1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiLFxcblxcdFxcXCJBbiBOUyByZWNvcmQgY2Fubm90IHVzZSBhIHJvdXRpbmcgcG9saWN5OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJ0aGlzIHR5cGUgb2YgUlJTZXQgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiVXNlIGEgc2ltcGxlIHJlY29yZCBzZXQgZm9yIE5TIHJlY29yZHMgKG5vIFdlaWdodC9SZWdpb24vRmFpbG92ZXIvR2VvTG9jYXRpb24vTXVsdGlWYWx1ZUFuc3dlci9DaWRyUm91dGluZ0NvbmZpZylcXFwiLFxcblxcdF9wZl9yNTNfdHlwb2xfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIk5TXFxcIlxcblxcdF9wZl9yNTNfdHlwb2xfaGFzX3BvbGljeShuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXR5cGUtcm91dGluZy1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiLFxcblxcdFxcXCJBIENOQU1FIHJlY29yZCBjYW5ub3QgdXNlIHRoZSBtdWx0aXZhbHVlIGFuc3dlciByb3V0aW5nIHBvbGljeTsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwidGhpcyB0eXBlIG9mIFJSU2V0IGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlBvaW50IHRoZSBtdWx0aXZhbHVlIHJlY29yZHMgYXQgQS9BQUFBIChvciBhbm90aGVyIHN1cHBvcnRlZCB0eXBlKSwgb3IgZHJvcCBNdWx0aVZhbHVlQW5zd2VyXFxcIixcXG5cXHRfcGZfcjUzX3R5cG9sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJDTkFNRVxcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1yZWNvcmQtdmFsdWUtc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHJlY29yZCBzZXQgbmVlZHMgQWxpYXNUYXJnZXQgb3IgdGhlIGZ1bGwgVFRMK1Jlc291cmNlUmVjb3JkcyBwYWlyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfdmFsc3JjX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCJcXG5cXG4jIFRoZSBzZXJ2aWNlIGV4cGVjdHMgXFxcImV4YWN0bHkgb25lIG9mIFtBbGlhc1RhcmdldCwgYWxsIG9mIFtUVEwsIGFuZFxcbiMgUmVzb3VyY2VSZWNvcmRzXV1cXFwiIChUcmFmZmljUG9saWN5SW5zdGFuY2VJZCBoYXMgbm8gQ2xvdWRGb3JtYXRpb24gcHJvcGVydHkpLlxcbiMgVGhlIFRUTCtBbGlhc1RhcmdldCBjb21iaW5hdGlvbiBpcyBhbHJlYWR5IHRoZSBlbmdpbmUncyBFMzAyOSwgc28gdGhpcyBydWxlXFxuIyBjb3ZlcnMgdGhlIHJlbWFpbmluZyBzaGFwZXM6IGFsaWFzIHBsdXMgcmVjb3JkcywgYW5kIGFuIGluY29tcGxldGUgbm9uLWFsaWFzXFxuIyBncm91cCAocmVjb3JkcyB3aXRob3V0IFRUTCwgVFRMIHdpdGhvdXQgcmVjb3Jkcywgb3IgbmVpdGhlcikuXFxuX3BmX3I1M192YWxzcmNfaGFzX2FsaWFzKG5hbWUpIGlmIGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0XFxcIikpXFxuXFxuX3BmX3I1M192YWxzcmNfaGFzX3JyKG5hbWUpIGlmIHtcXG5cXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlc291cmNlUmVjb3Jkc1xcXCIpXFxufVxcblxcbl9wZl9yNTNfdmFsc3JjX2hhc190dGwobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UVExcXFwiKSAhPSBudWxsXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlc291cmNlUmVjb3Jkc1xcXCIsXFxuXFx0XFxcIkFsaWFzVGFyZ2V0IGFuZCBSZXNvdXJjZVJlY29yZHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZTsgdGhlIHNlcnZpY2UgZXhwZWN0cyBleGFjdGx5IG9uZSBvZiBBbGlhc1RhcmdldCBvciBUVEwtcGx1cy1SZXNvdXJjZVJlY29yZHNcXFwiLFxcblxcdFxcXCJLZWVwIHRoZSBBbGlhc1RhcmdldCBhbmQgZHJvcCBSZXNvdXJjZVJlY29yZHMsIG9yIG1ha2UgaXQgYSBwbGFpbiByZWNvcmQgd2l0aCBUVEwgYW5kIFJlc291cmNlUmVjb3Jkc1xcXCIsXFxuXFx0X3BmX3I1M192YWxzcmNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX2FsaWFzKG5hbWUpXFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3JyKG5hbWUpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdmFsdWUtc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0XFxcIkEgbm9uLWFsaWFzIHJlY29yZCBzZXQgbmVlZHMgYm90aCBUVEwgYW5kIFJlc291cmNlUmVjb3JkczsgdGhlIHNlcnZpY2UgcmVqZWN0cyBhbiBpbmNvbXBsZXRlIHBhaXIgd2l0aCBcXFxcXFxcIkV4cGVjdGVkIGV4YWN0bHkgb25lIG9mIFtBbGlhc1RhcmdldCwgYWxsIG9mIFtUVEwsIGFuZCBSZXNvdXJjZVJlY29yZHNdXSAuLi4gZm91bmQgbm9uZVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU3BlY2lmeSBUVEwgYW5kIFJlc291cmNlUmVjb3JkcyB0b2dldGhlciwgb3IgdXNlIEFsaWFzVGFyZ2V0IGluc3RlYWRcXFwiLFxcblxcdF9wZl9yNTNfdmFsc3JjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdG5vdCBfcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSlcXG5cXHRub3QgX3BmX3I1M192YWxzcmNfY29tcGxldGUobmFtZSlcXG59XFxuXFxuX3BmX3I1M192YWxzcmNfY29tcGxldGUobmFtZSkgaWYge1xcblxcdF9wZl9yNTNfdmFsc3JjX2hhc19ycihuYW1lKVxcblxcdF9wZl9yNTNfdmFsc3JjX2hhc190dGwobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJvdXRpbmctcG9saWN5LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSByZWNvcmQgc2V0IGNhbiB1c2Ugb25seSBvbmUgcm91dGluZyBwb2xpY3lcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSBlbmZvcmNlcyBcXFwiRXhwZWN0ZWQgZXhhY3RseSBvbmUgb2YgW1dlaWdodCwgUmVnaW9uLCBGYWlsb3ZlcixcXG4jIEdlb0xvY2F0aW9uLCBNdWx0aVZhbHVlQW5zd2VyLCBHZW9Qcm94aW1pdHlMb2NhdGlvbiwgb3IgQ2lkclJvdXRpbmdDb25maWddXFxcIi5cXG4jIEdlb1Byb3hpbWl0eUxvY2F0aW9uIGlzIG5vdCBhIENsb3VkRm9ybWF0aW9uIHByb3BlcnR5LCBzbyBmaXZlIHJlbWFpbiBoZXJlLlxcbiMgTXVsdGlWYWx1ZUFuc3dlcjogZmFsc2UgaXMgdHJlYXRlZCBhcyBhYnNlbnQg4oCUIG9ubHkgdHJ1ZSBzZWxlY3RzIHRoZSBwb2xpY3kuXFxuX3BmX3I1M19wb2x4X3Byb3BzIDo9IFtcXFwiV2VpZ2h0XFxcIiwgXFxcIlJlZ2lvblxcXCIsIFxcXCJGYWlsb3ZlclxcXCIsIFxcXCJHZW9Mb2NhdGlvblxcXCIsIFxcXCJDaWRyUm91dGluZ0NvbmZpZ1xcXCJdXFxuXFxuX3BmX3I1M19wb2x4X3ByZXNlbnQobmFtZSwgcHJvcCkgaWYge1xcblxcdHByb3AgIT0gXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSkgIT0gbnVsbFxcbn1cXG5cXG5fcGZfcjUzX3BvbHhfcHJlc2VudChuYW1lLCBcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCIpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblxcbl9wZl9yNTNfcG9seF9wb2xpY2llcyhuYW1lKSA6PSBwcyBpZiB7XFxuXFx0cHMgOj0gW3AgfCBzb21lIHAgaW4gYXJyYXkuY29uY2F0KF9wZl9yNTNfcG9seF9wcm9wcywgW1xcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIl0pOyBfcGZfcjUzX3BvbHhfcHJlc2VudChuYW1lLCBwKV1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJvdXRpbmctcG9saWN5LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkEgcmVjb3JkIHNldCBjYW4gdXNlIG9ubHkgb25lIHJvdXRpbmcgcG9saWN5LCBidXQgJXYgYXJlIGFsbCBzcGVjaWZpZWRcXFwiLCBbcHNdKSxcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSBvZiBXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsIEdlb0xvY2F0aW9uLCBNdWx0aVZhbHVlQW5zd2VyLCBvciBDaWRyUm91dGluZ0NvbmZpZyBhbmQgc3BsaXQgdGhlIHJlc3QgaW50byBzZXBhcmF0ZSByZWNvcmQgc2V0c1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cHMgOj0gX3BmX3I1M19wb2x4X3BvbGljaWVzKG5hbWUpXFxuXFx0Y291bnQocHMpID4gMVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtc2V0LWlkZW50aWZpZXItcGFpcmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2V0SWRlbnRpZmllciBhbmQgYSByb3V0aW5nIHBvbGljeSBtdXN0IGFwcGVhciB0b2dldGhlclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX3NpZHBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbl9wZl9yNTNfc2lkcF9wcm9wcyA6PSBbXFxcIldlaWdodFxcXCIsIFxcXCJSZWdpb25cXFwiLCBcXFwiRmFpbG92ZXJcXFwiLCBcXFwiR2VvTG9jYXRpb25cXFwiLCBcXFwiQ2lkclJvdXRpbmdDb25maWdcXFwiXVxcblxcbl9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRzb21lIHAgaW4gX3BmX3I1M19zaWRwX3Byb3BzXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BdKSkgIT0gbnVsbFxcbn1cXG5cXG5fcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtc2V0LWlkZW50aWZpZXItcGFpcmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIsXFxuXFx0XFxcIkEgcm91dGluZyBwb2xpY3kgaXMgY29uZmlndXJlZCBidXQgU2V0SWRlbnRpZmllciBpcyBtaXNzaW5nOyB0aGUgQ2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIk1pc3NpbmcgZmllbGQgJ1NldElkZW50aWZpZXInXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBTZXRJZGVudGlmaWVyIHRoYXQgaXMgdW5pcXVlIGFtb25nIHRoZSByZWNvcmQgc2V0cyBzaGFyaW5nIHRoaXMgTmFtZSBhbmQgVHlwZVxcXCIsXFxuXFx0X3BmX3I1M19zaWRwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdF9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpXFxuXFx0bm90IGlzX3N0cmluZyhyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNldElkZW50aWZpZXJcXFwiKSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXNldC1pZGVudGlmaWVyLXBhaXJpbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNldElkZW50aWZpZXJcXFwiLFxcblxcdFxcXCJTZXRJZGVudGlmaWVyIGlzIHNwZWNpZmllZCBidXQgbm8gcm91dGluZyBwb2xpY3kgaXM7IHRoZSBzZXJ2aWNlIGV4cGVjdHMgZXhhY3RseSBvbmUgb2YgV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLCBHZW9Mb2NhdGlvbiwgTXVsdGlWYWx1ZUFuc3dlciwgb3IgQ2lkclJvdXRpbmdDb25maWcgYW5kIGZpbmRzIG5vbmVcXFwiLFxcblxcdFxcXCJSZW1vdmUgU2V0SWRlbnRpZmllciBmcm9tIHRoaXMgc2ltcGxlIHJlY29yZCBzZXQsIG9yIGFkZCB0aGUgcm91dGluZyBwb2xpY3kgaXQgd2FzIG1lYW50IGZvclxcXCIsXFxuXFx0X3BmX3I1M19zaWRwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdGlzX3N0cmluZyhyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNldElkZW50aWZpZXJcXFwiKSlcXG5cXHRub3QgX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXR0bC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVFRMIG11c3QgZml0IGluIDMyIGJpdHMgKDAuLjIxNDc0ODM2NDcgc2Vjb25kcylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgaXMgZW5mb3JjZWQ6IHRoZSBzZXJ2aWNlIHJlamVjdGVkIDk5OTk5OTk5OTkgd2l0aFxcbiMgXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIxNDc0ODM2NDdcXFwiLiBOZWdhdGl2ZSBUVExzIGFyZVxcbiMgdW50ZXN0ZWQsIHNvIHRoZXkgYXJlIGRlbGliZXJhdGVseSBub3QgZmxhZ2dlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtdHRsLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UVExcXFwiLFxcblxcdHNwcmludGYoXFxcIlRUTCBtdXN0IGJlIGF0IG1vc3QgMjE0NzQ4MzY0NyBzZWNvbmRzLCBnb3QgJXZcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgVFRMIHRvIGEgMzItYml0IHZhbHVlOyBhbnl0aGluZyBhYm92ZSBhIGRheSByYXJlbHkgaGVscHMgY2FjaGluZyBhbnl3YXlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVFRMXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcih0KVxcblxcdG4gPiAyMTQ3NDgzNjQ3XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My13ZWlnaHQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIldlaWdodCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIG1lYXN1cmVkIGJvdW5kIGlzIGVuZm9yY2VkOiB0aGUgc2VydmljZSByZWplY3RlZCAzMDAgd2l0aCBcXFwiTWVtYmVyXFxuIyBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDI1NVxcXCIuIE5lZ2F0aXZlIHdlaWdodHMgYXJlIHVudGVzdGVkLFxcbiMgc28gdGhleSBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBmbGFnZ2VkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My13ZWlnaHQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLldlaWdodFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiV2VpZ2h0IG11c3QgYmUgYXQgbW9zdCAyNTUsIGdvdCAldlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBXZWlnaHQgdG8gYSB2YWx1ZSBpbiBbMCwgMjU1XTsgd2VpZ2h0cyBhcmUgcmVsYXRpdmUsIHNvIHNjYWxlIHRoZSBncm91cCBkb3duIHByb3BvcnRpb25hbGx5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0dyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLldlaWdodFxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIodylcXG5cXHRuID4gMjU1XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My16b25lbmFtZS10cmFpbGluZy1kb3RcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhvc3RlZFpvbmVOYW1lIG11c3QgZW5kIHdpdGggYSB0cmFpbGluZyBkb3RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDbG91ZEZvcm1hdGlvbiBsb29rcyB0aGUgem9uZSB1cCBieSB0aGUgbGl0ZXJhbCBIb3N0ZWRab25lTmFtZSBhbmQgZG9lcyBub3RcXG4jIG5vcm1hbGl6ZSB0aGUgdHJhaWxpbmcgZG90OiB0aGUgc2FtZSBzdGFjayBkZXBsb3llZCBjbGVhbiB3aXRoXFxuIyBcXFwiem9uZS5leGFtcGxlLlxcXCIgYW5kIGZhaWxlZCB3aXRoIE5vdEZvdW5kIGZvciBcXFwiem9uZS5leGFtcGxlXFxcIiAoMjAyNi0wOS0wMikuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXpvbmVuYW1lLXRyYWlsaW5nLWRvdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSG9zdGVkWm9uZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkhvc3RlZFpvbmVOYW1lICclcycgaXMgbWlzc2luZyB0aGUgdHJhaWxpbmcgZG90LCBzbyBDbG91ZEZvcm1hdGlvbiBmYWlscyB0aGUgbG9va3VwIHdpdGggXFxcXFxcXCJObyBob3N0ZWQgem9uZSB3aXRoIG5hbWUgLi4uIGZvdW5kXFxcXFxcXCJcXFwiLCBbem5dKSxcXG5cXHRzcHJpbnRmKFxcXCJVc2UgJyVzLicgKHdpdGggdGhlIHRyYWlsaW5nIGRvdClcXFwiLCBbem5dKSxcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHR6biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhvc3RlZFpvbmVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoem4pXFxuXFx0em4gIT0gXFxcIlxcXCJcXG5cXHRub3QgZW5kc3dpdGgoem4sIFxcXCIuXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1hY2NlbGVyYXRlLWRvdHRlZC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVHJhbnNmZXIgQWNjZWxlcmF0aW9uIHJlamVjdHMgYnVja2V0IG5hbWVzIHdpdGggcGVyaW9kc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUcmFuc2ZlciBBY2NlbGVyYXRpb24gZW5kcG9pbnRzIGFyZSBETlMtYmFzZWQsIHNvIGJ1Y2tldCBuYW1lcyBjb250YWluaW5nXFxuIyBwZXJpb2RzIGFyZSByZWplY3RlZCBhdCBjcmVhdGlvbi4gT25seSBhIGxpdGVyYWwgQnVja2V0TmFtZSBpcyBjaGVja2FibGU7XFxuIyBDREstZ2VuZXJhdGVkIG5hbWVzIG5ldmVyIGNvbnRhaW4gcGVyaW9kcyBhbnl3YXkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1hY2NlbGVyYXRlLWRvdHRlZC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2NlbGVyYXRlQ29uZmlndXJhdGlvbi5BY2NlbGVyYXRpb25TdGF0dXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkJ1Y2tldCBuYW1lICclcycgY29udGFpbnMgcGVyaW9kcywgd2hpY2ggVHJhbnNmZXIgQWNjZWxlcmF0aW9uIGRvZXMgbm90IHN1cHBvcnQ7IENyZWF0ZUJ1Y2tldCBmYWlscyB3aXRoIFxcXFxcXFwiUzMgVHJhbnNmZXIgQWNjZWxlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGJ1Y2tldHMgd2l0aCBwZXJpb2RzICguKSBpbiB0aGVpciBuYW1lc1xcXFxcXFwiXFxcIiwgW2JuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgYnVja2V0IHdpdGhvdXQgcGVyaW9kcywgb3IgZHJvcCBBY2NlbGVyYXRlQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3RyYW5zZmVyLWFjY2VsZXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFjY2VsZXJhdGVDb25maWd1cmF0aW9uLkFjY2VsZXJhdGlvblN0YXR1c1xcXCIpID09IFxcXCJFbmFibGVkXFxcIlxcblxcdGJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQnVja2V0TmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJuKVxcblxcdGNvbnRhaW5zKGJuLCBcXFwiLlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtYnVja2V0LXBvbGljeS1hY3Rpb24tcmVzb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPYmplY3QtbGV2ZWwgYWN0aW9ucyBuZWVkIGFuIG9iamVjdC1sZXZlbCBSZXNvdXJjZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBbiBvYmplY3QtbGV2ZWwgYWN0aW9uIHdob3NlIHN0YXRlbWVudCBsaXN0cyBvbmx5IGJ1Y2tldC1sZXZlbCBBUk5zIGFwcGxpZXNcXG4jIHRvIG5vdGhpbmcsIGFuZCBTMyByZWplY3RzIHRoZSBwb2xpY3kuIEEgYnVja2V0LWxldmVsIEFSTiBpcyBwcm92YWJsZSB0d29cXG4jIHdheXM6IGEgbGl0ZXJhbCBhcm46Li4uOnMzOjo6bmFtZSB3aXRoIG5vIFxcXCIvXFxcIiBpbiB0aGUgbmFtZSBwYXJ0LCBvciBhIHZhbHVlXFxuIyB0aGF0IHJlc29sdmUoKSB0dXJucyBpbnRvIHRoZSBsb2dpY2FsIElEIG9mIGFuIGluLXRlbXBsYXRlIGJ1Y2tldCAoUmVmIGFuZFxcbiMgRm46OkdldEF0dCBBcm4gYm90aCBkbyDigJQgdGhlIEdldEF0dCBvZiBhIGJ1Y2tldCBpcyBpdHMgYnVja2V0IEFSTikuIEZpcmVzXFxuIyBvbmx5IHdoZW4gZXZlcnkgcmVzb3VyY2UgaW4gdGhlIHN0YXRlbWVudCBpcyBwcm92YWJseSBidWNrZXQtbGV2ZWwsIHNvXFxuIyB1bnJlc29sdmFibGUgZW50cmllcyAoZS5nLiBGbjo6U3ViIFxcXCIke0IuQXJufS8qXFxcIikgbXV0ZSB0aGUgc3RhdGVtZW50Llxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBzdGFydHN3aXRoKGxvd2VyKGEpLCBcXFwiczM6Z2V0b2JqZWN0XFxcIilcXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgc3RhcnRzd2l0aChsb3dlcihhKSwgXFxcInMzOnB1dG9iamVjdFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIHN0YXJ0c3dpdGgobG93ZXIoYSksIFxcXCJzMzpkZWxldGVvYmplY3RcXFwiKVxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBsb3dlcihhKSBpbiB7XFxcInMzOmFib3J0bXVsdGlwYXJ0dXBsb2FkXFxcIiwgXFxcInMzOnJlc3RvcmVvYmplY3RcXFwiLCBcXFwiczM6bGlzdG11bHRpcGFydHVwbG9hZHBhcnRzXFxcIn1cXG5cXG5fcGZfczNicGFyX2J1Y2tldF9sZXZlbChyKSBpZiByIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcbl9wZl9zM2JwYXJfYnVja2V0X2xldmVsKHIpIGlmIHtcXG5cXHRzdGFydHN3aXRoKHIsIFxcXCJhcm46XFxcIilcXG5cXHRjb250YWlucyhyLCBcXFwiOnMzOjo6XFxcIilcXG5cXHRwYXJ0cyA6PSBzcGxpdChyLCBcXFwiOjo6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPT0gMlxcblxcdG5vdCBjb250YWlucyhwYXJ0c1sxXSwgXFxcIi9cXFwiKVxcbn1cXG5cXG5fcGZfczNicGFyX2FjdGlvbnMobmFtZSwgaSkgOj0gW2FdIGlmIHtcXG5cXHRhIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuQWN0aW9uXFxcIiwgW2ldKSlcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuX3BmX3MzYnBhcl9hY3Rpb25zKG5hbWUsIGkpIDo9IGFjdHMgaWYge1xcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLkFjdGlvblxcXCIsIFtpXSkpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRhY3RzIDo9IFt2IHwgc29tZSBpdCBpbiBpdGVtczsgdiA6PSBpdC52YWx1ZTsgaXNfc3RyaW5nKHYpXVxcbn1cXG5cXG5fcGZfczNicGFyX3Jlc291cmNlcyhuYW1lLCBpKSA6PSBbcl0gaWYge1xcblxcdHIgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZVxcXCIsIFtpXSkpXFxuXFx0aXNfc3RyaW5nKHIpXFxufVxcblxcbl9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIGkpIDo9IHJzIGlmIHtcXG5cXHRpdGVtcyA6PSBbaXQgfCBzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZVxcXCIsIFtpXSkpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRycyA6PSBbdiB8IHNvbWUgaXQgaW4gaXRlbXM7IHYgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZS4lZFxcXCIsIFtpLCBpdC5pbmRleF0pKTsgaXNfc3RyaW5nKHYpXVxcblxcdGNvdW50KHJzKSA9PSBjb3VudChpdGVtcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1idWNrZXQtcG9saWN5LWFjdGlvbi1yZXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbc3QuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBY3Rpb24gJyVzJyB0YXJnZXRzIG9iamVjdHMgYnV0IHRoZSBzdGF0ZW1lbnQncyByZXNvdXJjZXMgYXJlIGFsbCBidWNrZXQtbGV2ZWwgQVJOczsgUzMgcmVqZWN0cyB0aGUgcG9saWN5IHdpdGggXFxcXFxcXCJBY3Rpb24gZG9lcyBub3QgYXBwbHkgdG8gYW55IHJlc291cmNlKHMpIGluIHN0YXRlbWVudFxcXFxcXFwiXFxcIiwgW2FdKSxcXG5cXHRcXFwiQWRkIHRoZSBvYmplY3QgZm9ybSBvZiB0aGUgQVJOIChhcHBlbmQgLyogb3IgYSBrZXkgcGF0dGVybikgdG8gUmVzb3VyY2UsIG9yIGRyb3AgdGhlIG9iamVjdC1sZXZlbCBhY3Rpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9idWNrZXQtcG9saWNpZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVxcXCIpXFxuXFx0c29tZSBzdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50XFxcIilcXG5cXHRpc19vYmplY3Qoc3QudmFsdWUpXFxuXFx0c29tZSBhIGluIF9wZl9zM2JwYXJfYWN0aW9ucyhuYW1lLCBzdC5pbmRleClcXG5cXHRfcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSlcXG5cXHRycyA6PSBfcGZfczNicGFyX3Jlc291cmNlcyhuYW1lLCBzdC5pbmRleClcXG5cXHRjb3VudChycykgPiAwXFxuXFx0ZXZlcnkgciBpbiBycyB7XFxuXFx0XFx0X3BmX3MzYnBhcl9idWNrZXRfbGV2ZWwocilcXG5cXHR9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtYnVja2V0LXBvbGljeS1wcmluY2lwYWxcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJCdWNrZXQgcG9saWN5IHN0YXRlbWVudHMgbmVlZCBhIFByaW5jaXBhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBSZXNvdXJjZS1iYXNlZCBwb2xpY2llcyByZXF1aXJlIFByaW5jaXBhbCAob3IgTm90UHJpbmNpcGFsKSBpbiBldmVyeVxcbiMgc3RhdGVtZW50IOKAlCB1bmxpa2UgaWRlbnRpdHkgcG9saWNpZXMsIHdoZXJlIGNmbi1saW50LWdyYWRlIGNoZWNrcyBhcmVcXG4jIHR1bmVkLiBBbiB1bnJlc29sdmFibGUgUHJpbmNpcGFsIHZhbHVlIHN0aWxsIGNvdW50cyBhcyBwcmVzZW50LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtYnVja2V0LXBvbGljeS1wcmluY2lwYWxcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkXFxcIiwgW3N0LmluZGV4XSksXFxuXFx0XFxcIlRoZSBzdGF0ZW1lbnQgaGFzIG5laXRoZXIgUHJpbmNpcGFsIG5vciBOb3RQcmluY2lwYWw7IFMzIHJlamVjdHMgdGhlIHBvbGljeSB3aXRoIFxcXFxcXFwiTWlzc2luZyByZXF1aXJlZCBmaWVsZCBQcmluY2lwYWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIFByaW5jaXBhbCAob3IgTm90UHJpbmNpcGFsKSB0byB0aGUgc3RhdGVtZW50IOKAlCBidWNrZXQgcG9saWNpZXMgYWx3YXlzIG5hbWUgd2hvIHRoZXkgYXBwbHkgdG9cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9idWNrZXQtcG9saWNpZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVxcXCIpXFxuXFx0c29tZSBzdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50XFxcIilcXG5cXHRpc19vYmplY3Qoc3QudmFsdWUpXFxuXFx0b2JqZWN0LmdldChzdC52YWx1ZSwgXFxcIlByaW5jaXBhbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRvYmplY3QuZ2V0KHN0LnZhbHVlLCBcXFwiTm90UHJpbmNpcGFsXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWxpZmVjeWNsZS1kYXlzLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGlmZWN5Y2xlIGFyY2hpdmUgdHJhbnNpdGlvbnMgbXVzdCBjb21lIDMwKyBkYXlzIGFmdGVyIElBLCBhbmQgZXhwaXJhdGlvbiBhZnRlciBldmVyeSB0cmFuc2l0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfczNvcmRfZml4IDo9IFxcXCJPcmRlciB0aGUgbGlmZWN5Y2xlIGRheXMgc28gYXJjaGl2ZSB0cmFuc2l0aW9ucyBjb21lIGF0IGxlYXN0IDMwIGRheXMgYWZ0ZXIgSUEgdHJhbnNpdGlvbnMgYW5kIGV4cGlyYXRpb24gY29tZXMgYWZ0ZXIgZXZlcnkgdHJhbnNpdGlvblxcXCJcXG5cXG5fcGZfczNvcmRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9saWZlY3ljbGUtdHJhbnNpdGlvbi1nZW5lcmFsLWNvbnNpZGVyYXRpb25zLmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtZGF5cy1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkLlRyYW5zaXRpb25zXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJUcmFuc2l0aW9uIHRvICVzIGF0ICV2IGRheXMgaXMgbGVzcyB0aGFuIDMwIGRheXMgYWZ0ZXIgdGhlICVzIHRyYW5zaXRpb24gYXQgJXYgZGF5czsgUzMgcmVxdWlyZXMgb2JqZWN0cyB0byBzdGF5IGF0IGxlYXN0IDMwIGRheXMgaW4gSUEgc3RvcmFnZVxcXCIsIFtzYzIsIGQyLCBzYzEsIGQxXSksXFxuXFx0X3BmX3Mzb3JkX2ZpeCwgX3BmX3Mzb3JkX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdHRyYW5zIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIlRyYW5zaXRpb25zXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkodHJhbnMpXFxuXFx0c29tZSB0MSBpbiB0cmFuc1xcblxcdGlzX29iamVjdCh0MSlcXG5cXHRzYzEgOj0gb2JqZWN0LmdldCh0MSwgXFxcIlN0b3JhZ2VDbGFzc1xcXCIsIFxcXCJcXFwiKVxcblxcdHNjMSBpbiB7XFxcIlNUQU5EQVJEX0lBXFxcIiwgXFxcIk9ORVpPTkVfSUFcXFwifVxcblxcdHJhdzEgOj0gb2JqZWN0LmdldCh0MSwgXFxcIlRyYW5zaXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhdzEgIT0gbnVsbCAjIHRvX251bWJlcihudWxsKSDjga8gMCDjgavjgarjgotcXG5cXHRkMSA6PSB0b19udW1iZXIocmF3MSlcXG5cXHRzb21lIHQyIGluIHRyYW5zXFxuXFx0aXNfb2JqZWN0KHQyKVxcblxcdHNjMiA6PSBvYmplY3QuZ2V0KHQyLCBcXFwiU3RvcmFnZUNsYXNzXFxcIiwgXFxcIlxcXCIpXFxuXFx0c2MyIGluIHtcXFwiR0xBQ0lFUlxcXCIsIFxcXCJERUVQX0FSQ0hJVkVcXFwifVxcblxcdHJhdzIgOj0gb2JqZWN0LmdldCh0MiwgXFxcIlRyYW5zaXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhdzIgIT0gbnVsbFxcblxcdGQyIDo9IHRvX251bWJlcihyYXcyKVxcblxcdGQyIDwgZDEgKyAzMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1kYXlzLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuRXhwaXJhdGlvbkluRGF5c1xcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRXhwaXJhdGlvbkluRGF5cyAoJXYpIG11c3QgYmUgZ3JlYXRlciB0aGFuIFRyYW5zaXRpb25JbkRheXMgKCV2KTsgUzMgcmVqZWN0cyBsaWZlY3ljbGUgcnVsZXMgdGhhdCBleHBpcmUgb2JqZWN0cyBiZWZvcmUgb3Igd2hlbiB0aGV5IHRyYW5zaXRpb25cXFwiLCBbZSwgZF0pLFxcblxcdF9wZl9zM29yZF9maXgsIF9wZl9zM29yZF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRyYXdlIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkV4cGlyYXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhd2UgIT0gbnVsbCAjIHRvX251bWJlcihudWxsKSDjga8gMCDjgavjgarjgotcXG5cXHRlIDo9IHRvX251bWJlcihyYXdlKVxcblxcdHRyYW5zIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIlRyYW5zaXRpb25zXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkodHJhbnMpXFxuXFx0c29tZSB0IGluIHRyYW5zXFxuXFx0aXNfb2JqZWN0KHQpXFxuXFx0cmF3ZCA6PSBvYmplY3QuZ2V0KHQsIFxcXCJUcmFuc2l0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXdkICE9IG51bGxcXG5cXHRkIDo9IHRvX251bWJlcihyYXdkKVxcblxcdGUgPD0gZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWxpZmVjeWNsZS1leHBpcmF0aW9uLXBvc2l0aXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXhwaXJhdGlvbkluRGF5cyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyBFeHBpcmF0aW9uSW5EYXlzIGFzIGEgYmFyZSBpbnRlZ2VyIHdpdGggbm9cXG4jIG1pbmltdW0sIHNvIDAgYW5kIG5lZ2F0aXZlcyByZWFjaCB0aGUgc2VydmljZS4gT25seSB0aGUgRXhwaXJhdGlvbiBhY3Rpb25cXG4jIHdhcyBiZW5jaC12ZXJpZmllZDsgb3RoZXIgZGF5IGZpZWxkcyBhcmUgbGVmdCBhbG9uZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1leHBpcmF0aW9uLXBvc2l0aXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuRXhwaXJhdGlvbkluRGF5c1xcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRXhwaXJhdGlvbkluRGF5cyBpcyAldjsgUzMgcmVqZWN0cyB0aGUgcnVsZSB3aXRoIFxcXFxcXFwiJ0RheXMnIGZvciBFeHBpcmF0aW9uIGFjdGlvbiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlclxcXFxcXFwiXFxcIiwgW2RdKSxcXG5cXHRcXFwiVXNlIGFuIEV4cGlyYXRpb25JbkRheXMgb2YgMSBvciBtb3JlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtcnVsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdHJhdyA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJFeHBpcmF0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXcgIT0gbnVsbFxcblxcdGQgOj0gdG9fbnVtYmVyKHJhdylcXG5cXHRkIDw9IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1saWZlY3ljbGUtcnVsZS1uby1hY3Rpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGxpZmVjeWNsZSBydWxlIG5lZWRzIGF0IGxlYXN0IG9uZSBhY3Rpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHRlbiBhY3Rpb24gZmllbGRzLCB2ZXJiYXRpbSBmcm9tIHRoZSBzZXJ2aWNlIGVycm9yLiBBIGZpZWxkIHdob3NlIHZhbHVlXFxuIyBpcyBhbiB1bnJlc29sdmFibGUgaW50cmluc2ljIHN0aWxsIGNvdW50cyBhcyBwcmVzZW50IChmYWlsIGNsb3NlZCkuXFxuX3BmX3MzbG5hX2FjdGlvbnMgOj0ge1xcblxcdFxcXCJBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWRcXFwiLFxcblxcdFxcXCJFeHBpcmF0aW9uRGF0ZVxcXCIsXFxuXFx0XFxcIkV4cGlyYXRpb25JbkRheXNcXFwiLFxcblxcdFxcXCJFeHBpcmVkT2JqZWN0RGVsZXRlTWFya2VyXFxcIixcXG5cXHRcXFwiTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uXFxcIixcXG5cXHRcXFwiTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uSW5EYXlzXFxcIixcXG5cXHRcXFwiTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uXFxcIixcXG5cXHRcXFwiTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uc1xcXCIsXFxuXFx0XFxcIlRyYW5zaXRpb25cXFwiLFxcblxcdFxcXCJUcmFuc2l0aW9uc1xcXCIsXFxufVxcblxcbl9wZl9zM2xuYV9oYXNfYWN0aW9uKHJ1bGUpIGlmIHtcXG5cXHRzb21lIGsgaW4gX3BmX3MzbG5hX2FjdGlvbnNcXG5cXHRvYmplY3QuZ2V0KHJ1bGUsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtcnVsZS1uby1hY3Rpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZFxcXCIsIFtyLmluZGV4XSksXFxuXFx0XFxcIlRoZSBsaWZlY3ljbGUgcnVsZSBzcGVjaWZpZXMgbm8gYWN0aW9uOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJBdCBsZWFzdCBvbmUgb2YgW0V4cGlyYXRpb25EYXRlLEV4cGlyYXRpb25JbkRheXMsQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkLFRyYW5zaXRpb24sLi4uXSBuZWVkcyB0byBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhbiBleHBpcmF0aW9uLCB0cmFuc2l0aW9uLCBvciBhYm9ydC1pbmNvbXBsZXRlLW11bHRpcGFydC11cGxvYWQgYWN0aW9uIHRvIHRoZSBydWxlLCBvciByZW1vdmUgdGhlIHJ1bGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC1ydWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0bm90IF9wZl9zM2xuYV9oYXNfYWN0aW9uKHIudmFsdWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbm90aWZpY2F0aW9uLW92ZXJsYXBwaW5nLWZpbHRlcnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOb3RpZmljYXRpb24gZW50cmllcyBtdXN0IG5vdCBvdmVybGFwIGZvciB0aGUgc2FtZSBldmVudCB0eXBlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFMzIGtlZXBzIG9uZSBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBwZXIgYnVja2V0IGFuZCByZWplY3RzIGl0IHdoZW4gdHdvXFxuIyBlbnRyaWVzIChhY3Jvc3MgcXVldWUvdG9waWMvbGFtYmRhIGFsaWtlKSBjb3VsZCBtYXRjaCB0aGUgc2FtZSBvYmplY3QgZXZlbnQ6XFxuIyBvdmVybGFwcGluZyBldmVudCB0eXBlcyBBTkQgb3ZlcmxhcHBpbmcgcHJlZml4ZXMgQU5EIG92ZXJsYXBwaW5nIHN1ZmZpeGVzLlxcbiMgQSBtaXNzaW5nIGZpbHRlciBzaWRlIG1lYW5zIFxcXCJcXFwiIGFuZCBvdmVybGFwcyBldmVyeXRoaW5nLiBQYWlycyB3aXRoIGFuXFxuIyB1bnJlc29sdmFibGUgZXZlbnQgb3IgZmlsdGVyIHZhbHVlIGFyZSBza2lwcGVkIOKAlCBvdmVybGFwIGNhbm5vdCBiZSBwcm92ZW4uXFxuXFxuX3BmX3Mzbm9fY29uZmlncyhuYW1lKSA6PSBhcnJheS5jb25jYXQoYXJyYXkuY29uY2F0KFxcblxcdFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uLlF1ZXVlQ29uZmlndXJhdGlvbnNcXFwiKV0sXFxuXFx0W2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24uVG9waWNDb25maWd1cmF0aW9uc1xcXCIpXSksXFxuXFx0W2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24uTGFtYmRhQ29uZmlndXJhdGlvbnNcXFwiKV0pXFxuXFxuX3BmX3Mzbm9fcnVsZXMoYykgOj0gcnVsZXMgaWYge1xcblxcdGYgOj0gb2JqZWN0LmdldChjLCBcXFwiRmlsdGVyXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoZilcXG5cXHRrIDo9IG9iamVjdC5nZXQoZiwgXFxcIlMzS2V5XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoaylcXG5cXHRydWxlcyA6PSBvYmplY3QuZ2V0KGssIFxcXCJSdWxlc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHJ1bGVzKVxcbn1cXG5cXG5fcGZfczNub19ydWxlcyhjKSA6PSBbXSBpZiB7XFxuXFx0b2JqZWN0LmdldChjLCBcXFwiRmlsdGVyXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNub19maWx0ZXJfdmFsKGMsIGtpbmQpIDo9IHYgaWYge1xcblxcdHZzIDo9IFt4IHwgc29tZSByIGluIF9wZl9zM25vX3J1bGVzKGMpOyBpc19vYmplY3Qocik7IGxvd2VyKG9iamVjdC5nZXQociwgXFxcIk5hbWVcXFwiLCBcXFwiXFxcIikpID09IGtpbmQ7IHggOj0gb2JqZWN0LmdldChyLCBcXFwiVmFsdWVcXFwiLCBudWxsKV1cXG5cXHRjb3VudCh2cykgPiAwXFxuXFx0diA6PSB2c1swXVxcbn1cXG5cXG5fcGZfczNub19maWx0ZXJfdmFsKGMsIGtpbmQpIDo9IFxcXCJcXFwiIGlmIHtcXG5cXHR2cyA6PSBbeCB8IHNvbWUgciBpbiBfcGZfczNub19ydWxlcyhjKTsgaXNfb2JqZWN0KHIpOyBsb3dlcihvYmplY3QuZ2V0KHIsIFxcXCJOYW1lXFxcIiwgXFxcIlxcXCIpKSA9PSBraW5kOyB4IDo9IG9iamVjdC5nZXQociwgXFxcIlZhbHVlXFxcIiwgbnVsbCldXFxuXFx0Y291bnQodnMpID09IDBcXG59XFxuXFxuX3BmX3Mzbm9fcHJlX292ZXJsYXAoYSwgYikgaWYgc3RhcnRzd2l0aChhLCBiKVxcblxcbl9wZl9zM25vX3ByZV9vdmVybGFwKGEsIGIpIGlmIHN0YXJ0c3dpdGgoYiwgYSlcXG5cXG5fcGZfczNub19zdWZfb3ZlcmxhcChhLCBiKSBpZiBlbmRzd2l0aChhLCBiKVxcblxcbl9wZl9zM25vX3N1Zl9vdmVybGFwKGEsIGIpIGlmIGVuZHN3aXRoKGIsIGEpXFxuXFxuIyBcXFwiczM6T2JqZWN0Q3JlYXRlZDoqXFxcIiBjb3ZlcnMgXFxcInMzOk9iamVjdENyZWF0ZWQ6UHV0XFxcIjsgZHJvcCB0aGUgdHJhaWxpbmcgXFxcIipcXFwiXFxuIyBhbmQgcHJlZml4LW1hdGNoLlxcbl9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKSBpZiBlMSA9PSBlMlxcblxcbl9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKSBpZiB7XFxuXFx0ZW5kc3dpdGgoZTEsIFxcXCI6KlxcXCIpXFxuXFx0c3RhcnRzd2l0aChlMiwgc3Vic3RyaW5nKGUxLCAwLCBjb3VudChlMSkgLSAxKSlcXG59XFxuXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIHtcXG5cXHRlbmRzd2l0aChlMiwgXFxcIjoqXFxcIilcXG5cXHRzdGFydHN3aXRoKGUxLCBzdWJzdHJpbmcoZTIsIDAsIGNvdW50KGUyKSAtIDEpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLW5vdGlmaWNhdGlvbi1vdmVybGFwcGluZy1maWx0ZXJzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUd28gbm90aWZpY2F0aW9uIGVudHJpZXMgZm9yIG92ZXJsYXBwaW5nIGV2ZW50IHR5cGVzICgnJXMnIGFuZCAnJXMnKSBoYXZlIG92ZXJsYXBwaW5nIHByZWZpeC9zdWZmaXggZmlsdGVyczsgUzMgcmVqZWN0cyB0aGUgY29uZmlndXJhdGlvbiB3aXRoIFxcXFxcXFwiQ29uZmlndXJhdGlvbiBpcyBhbWJpZ3VvdXNseSBkZWZpbmVkLiBDYW5ub3QgaGF2ZSBvdmVybGFwcGluZyBzdWZmaXhlcyBpbiB0d28gcnVsZXMgaWYgdGhlIHByZWZpeGVzIGFyZSBvdmVybGFwcGluZyBmb3IgdGhlIHNhbWUgZXZlbnQgdHlwZS5cXFxcXFxcIlxcXCIsIFtlMSwgZTJdKSxcXG5cXHRcXFwiTWFrZSB0aGUgcHJlZml4ZXMgb3Igc3VmZml4ZXMgZGlzam9pbnQsIG9yIG1lcmdlIHRoZSB0d28gZW50cmllcyBpbnRvIG9uZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL25vdGlmaWNhdGlvbi1ob3ctdG8tZmlsdGVyaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGNzIDo9IF9wZl9zM25vX2NvbmZpZ3MobmFtZSlcXG5cXHRzb21lIGksIGEgaW4gY3NcXG5cXHRzb21lIGosIGIgaW4gY3NcXG5cXHRpIDwgalxcblxcdGUxIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkV2ZW50XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoZTEpXFxuXFx0ZTIgOj0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRXZlbnRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhlMilcXG5cXHRfcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMilcXG5cXHRwMSA6PSBfcGZfczNub19maWx0ZXJfdmFsKGEudmFsdWUsIFxcXCJwcmVmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhwMSlcXG5cXHRwMiA6PSBfcGZfczNub19maWx0ZXJfdmFsKGIudmFsdWUsIFxcXCJwcmVmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhwMilcXG5cXHRfcGZfczNub19wcmVfb3ZlcmxhcChwMSwgcDIpXFxuXFx0czEgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChhLnZhbHVlLCBcXFwic3VmZml4XFxcIilcXG5cXHRpc19zdHJpbmcoczEpXFxuXFx0czIgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChiLnZhbHVlLCBcXFwic3VmZml4XFxcIilcXG5cXHRpc19zdHJpbmcoczIpXFxuXFx0X3BmX3Mzbm9fc3VmX292ZXJsYXAoczEsIHMyKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLW9iamVjdGxvY2stcmVxdWlyZXMtdmVyc2lvbmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdExvY2tDb25maWd1cmF0aW9uIG5lZWRzIHZlcnNpb25pbmcgZW5hYmxlZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPYmplY3RMb2NrQ29uZmlndXJhdGlvbiBvbiBpdHMgb3duIGRvZXMgTk9UIHJlcXVpcmUgT2JqZWN0TG9ja0VuYWJsZWQg4oCUXFxuIyBTMyBhY2NlcHRzIE9iamVjdCBMb2NrIG9uIGFuIGV4aXN0aW5nIHZlcnNpb25lZCBidWNrZXQgKGJlbmNoIHMwNWIgZGVwbG95ZWRcXG4jIGNsZWFuKS4gV2hhdCBpdCBkb2VzIHJlcXVpcmUgaXMgdmVyc2lvbmluZy4gV2hlbiBPYmplY3RMb2NrRW5hYmxlZCBpcyB0cnVlXFxuIyB0aGUgYnVja2V0IGlzIGNyZWF0ZWQgbG9jay1lbmFibGVkIGFuZCB2ZXJzaW9uaW5nIGNvbWVzIHdpdGggaXQsIHNvIHRoZSBydWxlXFxuIyBmaXJlcyBvbmx5IHdoZW4gbG9jay1lbmFibGVtZW50IGlzIHByb3ZhYmx5IG9mZiAoa2V5IGxpdGVyYWxseSBhYnNlbnQgb3JcXG4jIGxpdGVyYWwgZmFsc2UpIGFuZCB2ZXJzaW9uaW5nIGlzIHByb3ZhYmx5IG5vdCBlbmFibGVkLlxcbl9wZl9zM29scnZfbm9fbG9ja19lbmFibGVkKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiT2JqZWN0TG9ja0VuYWJsZWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM29scnZfbm9fbG9ja19lbmFibGVkKG5hbWUpIGlmIHtcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tFbmFibGVkXFxcIikpID09IGZhbHNlXFxufVxcblxcbl9wZl9zM29scnZfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Mzb2xydl9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLW9iamVjdGxvY2stcmVxdWlyZXMtdmVyc2lvbmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJPYmplY3RMb2NrQ29uZmlndXJhdGlvbiBpcyBzZXQgb24gYSBidWNrZXQgd2hvc2UgdmVyc2lvbmluZyBpcyBub3QgZW5hYmxlZDsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiVmVyc2lvbmluZyBtdXN0IGJlICdFbmFibGVkJyBvbiB0aGUgYnVja2V0IHRvIGFwcGx5IGEgT2JqZWN0IExvY2sgY29uZmlndXJhdGlvblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcsIG9yIHNldCBPYmplY3RMb2NrRW5hYmxlZDogdHJ1ZSB0byBjcmVhdGUgdGhlIGJ1Y2tldCBsb2NrLWVuYWJsZWRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9vYmplY3QtbG9jay5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrQ29uZmlndXJhdGlvblxcXCIpKVxcblxcdF9wZl9zM29scnZfbm9fbG9ja19lbmFibGVkKG5hbWUpXFxuXFx0X3BmX3Mzb2xydl9iYWRfdmVyc2lvbmluZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLW9iamVjdGxvY2stdmVyc2lvbmluZy1zdXNwZW5kZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPYmplY3QgTG9jayBmb3JiaWRzIHN1c3BlbmRpbmcgdmVyc2lvbmluZ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPYmplY3QgTG9jayBmb3JjZS1lbmFibGVzIHZlcnNpb25pbmcgYXQgY3JlYXRpb24sIHNvIGEgdGVtcGxhdGUgdGhhdCBhbHNvXFxuIyBzdXNwZW5kcyB2ZXJzaW9uaW5nIGNvbnRyYWRpY3RzIGl0c2VsZiBhbmQgdGhlIGhhbmRsZXIncyBQdXRCdWNrZXRWZXJzaW9uaW5nXFxuIyBjYWxsIGlzIHJlamVjdGVkLiBGaXJlcyBvbmx5IG9uIGEgbGl0ZXJhbCBcXFwiU3VzcGVuZGVkXFxcIi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLW9iamVjdGxvY2stdmVyc2lvbmluZy1zdXNwZW5kZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIsXFxuXFx0XFxcIk9iamVjdExvY2tFbmFibGVkIGlzIHRydWUgYnV0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uIHN1c3BlbmRzIHZlcnNpb25pbmc7IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkFuIE9iamVjdCBMb2NrIGNvbmZpZ3VyYXRpb24gaXMgcHJlc2VudCBvbiB0aGlzIGJ1Y2tldCwgc28gdGhlIHZlcnNpb25pbmcgc3RhdGUgY2Fubm90IGJlIGNoYW5nZWQuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJyAob3IgZHJvcCBpdCDigJQgT2JqZWN0IExvY2sgZW5hYmxlcyB2ZXJzaW9uaW5nIGl0c2VsZilcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9vYmplY3QtbG9jay5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tFbmFibGVkXFxcIikpID09IHRydWVcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtcmVwbGljYXRpb24tZGVzdC12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIHJlcGxpY2F0aW9uIGRlc3RpbmF0aW9uIGJ1Y2tldCBuZWVkcyB2ZXJzaW9uaW5nIGVuYWJsZWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGRlc3RpbmF0aW9uIHNpZGUgb2Ygd2hhdCBwZi1zMy1yZXBsaWNhdGlvbi1yZXF1aXJlcy12ZXJzaW9uaW5nIGNoZWNrcyBvblxcbiMgdGhlIHNvdXJjZS4gRGVzdGluYXRpb24uQnVja2V0IGlzIG5vcm1hbGx5IEZuOjpHZXRBdHQvUmVmIHRvIGFuIGluLXRlbXBsYXRlXFxuIyBidWNrZXQ7IHJlc29sdmUoKSB0dXJucyBib3RoIGludG8gdGhlIHRhcmdldCdzIGxvZ2ljYWwgSUQsIHNvIHRoZVxcbiMgZGVzdGluYXRpb24ncyBvd24gcHJvcGVydGllcyBhcmUgcmVhZGFibGUuIEV4dGVybmFsIGRlc3RpbmF0aW9uIEFSTnMgcmVzb2x2ZVxcbiMgdG8gc3RyaW5ncyB0aGF0IGFyZSBub3QgbG9naWNhbCBJRHMgYW5kIHNraXAuIFZlcnNpb25pbmcgaXMgXFxcIm5vdCBlbmFibGVkXFxcIlxcbiMgd2hlbiBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiBpcyBsaXRlcmFsbHkgYWJzZW50IChwcm92ZW4gdmlhXFxuIyBpbnB1dC5yZXNvdXJjZXMsIHNlZSBBR0VOVFMubWQpIG9yIFN0YXR1cyByZXNvbHZlcyB0byBcXFwiU3VzcGVuZGVkXFxcIjsgYW5cXG4jIHVucmVzb2x2YWJsZSBTdGF0dXMgc2tpcHMuXFxuX3BmX3MzcmR2X2JhZF92ZXJzaW9uaW5nKGRlc3QpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbZGVzdF0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM3Jkdl9iYWRfdmVyc2lvbmluZyhkZXN0KSBpZiB7XFxuXFx0cmVzb2x2ZShkZXN0LCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXJlcGxpY2F0aW9uLWRlc3QtdmVyc2lvbmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuRGVzdGluYXRpb24uQnVja2V0XFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJSZXBsaWNhdGlvbiBkZXN0aW5hdGlvbiBidWNrZXQgJyVzJyBkb2VzIG5vdCBoYXZlIHZlcnNpb25pbmcgZW5hYmxlZDsgUzMgcmVqZWN0cyB0aGUgY29uZmlndXJhdGlvbiB3aXRoIFxcXFxcXFwiRGVzdGluYXRpb24gYnVja2V0IG11c3QgaGF2ZSB2ZXJzaW9uaW5nIGVuYWJsZWRcXFxcXFxcIlxcXCIsIFtkZXN0XSksXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIG9uIHRoZSBkZXN0aW5hdGlvbiBidWNrZXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9yZXBsaWNhdGlvbi1yZXF1aXJlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGRlc3QgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5EZXN0aW5hdGlvbi5CdWNrZXRcXFwiLCBbci5pbmRleF0pKVxcblxcdGlzX3N0cmluZyhkZXN0KVxcblxcdGRlc3QgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0X3BmX3MzcmR2X2JhZF92ZXJzaW9uaW5nKGRlc3QpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtcmVwbGljYXRpb24tcmVxdWlyZXMtdmVyc2lvbmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbiByZXF1aXJlcyB2ZXJzaW9uaW5nIHRvIGJlIGVuYWJsZWQgb24gdGhlIHNvdXJjZSBidWNrZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMg6YGV5Y+N44Gr44GZ44KL44Gu44GvIFZlcnNpb25pbmdDb25maWd1cmF0aW9uIOOBjOaWh+Wtl+OBqeOBiuOCiuS4jeWcqO+8iGlucHV0LnJlc291cmNlcyDjgadcXG4jIOiovOaYjuOAgUFHRU5UUy5tZCDlj4LnhafvvInjgYvjgIFTdGF0dXMg44GM44Oq44OG44Op44Or44GnIFxcXCJTdXNwZW5kZWRcXFwiIOOBruOBqOOBjeOBoOOBkeOAglxcbiMg5pyq6Kej5rG644OI44O844Kv44Oz44GvIE9LIOaJseOBhO+8iHJlc29sdmUoKSDjga/jgq3jg7zkuI3lnKjjgajmnKrop6Pmsbrjga7kuKHmlrnjgacgdW5kZWZpbmVkIOOBq1xcbiMg44Gq44KL44Gf44KB44CBYG5vdCByZXNvbHZlKC4uLilgIOOBp+OBr+S4jeWcqOOCkuiovOaYjuOBp+OBjeOBquOBhCDigJQgMjAyNi0wOS0wMiDlrp/muKzvvInjgIJcXG5fcGZfczNyZXBsX2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1yZXBsaWNhdGlvbi1yZXF1aXJlcy12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gaXMgc2V0IGJ1dCBidWNrZXQgdmVyc2lvbmluZyBpcyBub3QgZW5hYmxlZDsgUzMgcmVqZWN0cyB0aGUgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiBhdCBkZXBsb3kgdGltZSAoSW52YWxpZFJlcXVlc3Q6IFZlcnNpb25pbmcgbXVzdCBiZSAnRW5hYmxlZCcgb24gdGhlIGJ1Y2tldClcXFwiLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJyBvbiB0aGUgc291cmNlIGJ1Y2tldFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3JlcGxpY2F0aW9uLXJlcXVpcmVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb25cXFwiKSlcXG5cXHRfcGZfczNyZXBsX2JhZF92ZXJzaW9uaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtd2Vic2l0ZS1yZWRpcmVjdC1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZWRpcmVjdEFsbFJlcXVlc3RzVG8gZXhjbHVkZXMgZXZlcnkgb3RoZXIgd2Vic2l0ZSBzZXR0aW5nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyByZWRpcmVjdHMgdGhlIHdob2xlIHNpdGUsIHNvIFMzIHJlamVjdHMgYW55IHNpYmxpbmdcXG4jIHdlYnNpdGUgc2V0dGluZyBhbG9uZ3NpZGUgaXQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy13ZWJzaXRlLXJlZGlyZWN0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5XZWJzaXRlQ29uZmlndXJhdGlvbi4lc1xcXCIsIFtrXSksXFxuXFx0c3ByaW50ZihcXFwiV2Vic2l0ZUNvbmZpZ3VyYXRpb24gY29tYmluZXMgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIHdpdGggJXM7IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIltJbmRleERvY3VtZW50LCBFcnJvckRvY3VtZW50LCBSb3V0aW5nUnVsZXNdIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGlmIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyBpcyBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtrXSksXFxuXFx0XFxcIktlZXAgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIGFsb25lLCBvciBkcm9wIGl0IGFuZCBjb25maWd1cmUgdGhlIHdlYnNpdGUgd2l0aCBJbmRleERvY3VtZW50L0Vycm9yRG9jdW1lbnQvUm91dGluZ1J1bGVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtd2Vic2l0ZWNvbmZpZ3VyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0d2MgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5XZWJzaXRlQ29uZmlndXJhdGlvblxcXCIpXFxuXFx0aXNfb2JqZWN0KHdjKVxcblxcdG9iamVjdC5nZXQod2MsIFxcXCJSZWRpcmVjdEFsbFJlcXVlc3RzVG9cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0c29tZSBrIGluIHtcXFwiSW5kZXhEb2N1bWVudFxcXCIsIFxcXCJFcnJvckRvY3VtZW50XFxcIiwgXFxcIlJvdXRpbmdSdWxlc1xcXCJ9XFxuXFx0b2JqZWN0LmdldCh3YywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maWZvLXRvcGljLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRklGTyB0b3BpYyBuYW1lcyBtdXN0IGVuZCB3aXRoICcuZmlmbycgKGFuZCAnLmZpZm8nIG5hbWVzIHJlcXVpcmUgRmlmb1RvcGljKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2ZpZm9fZml4IDo9IFxcXCJHaXZlIEZJRk8gdG9waWNzIGEgVG9waWNOYW1lIGVuZGluZyBpbiAnLmZpZm8nIChvciBkcm9wIFRvcGljTmFtZSB0byBsZXQgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGUgb25lKSwgYW5kIHNldCBGaWZvVG9waWM6IHRydWUgd2hlbmV2ZXIgdGhlIG5hbWUgZW5kcyBpbiAnLmZpZm8nXFxcIlxcblxcbl9wZl9zbnNmaWZvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWNyZWF0ZS1maWZvLXRvcGljLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFxuIyBGaWZvVG9waWMg44GM5a2Y5Zyo44GX44CB44Oq44OG44Op44OrIGZhbHNlIOS7peWklu+8iHRydWUg44KE44OI44O844Kv44Oz77yJ44Gq44KJ44CMRklGTyDjgYvjgoLjgZfjgozjgarjgYTjgI3mibHjgYRcXG5fcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpIGlmIHtcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIilcXG5cXHRub3QgdiBpbiB7ZmFsc2UsIFxcXCJmYWxzZVxcXCJ9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGaWZvVG9waWMgaXMgdHJ1ZSBidXQgVG9waWNOYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5maWZvJzsgU05TIHJlamVjdHMgdGhlIHRvcGljIGF0IGRlcGxveSB0aW1lXFxcIiwgW3RuXSksXFxuXFx0X3BmX3Nuc2ZpZm9fZml4LCBfcGZfc25zZmlmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0X3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0bm90IGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLXRvcGljLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVG9waWNOYW1lICclcycgZW5kcyB3aXRoICcuZmlmbycgYnV0IEZpZm9Ub3BpYyBpcyBub3QgdHJ1ZTsgU05TIHJlamVjdHMgdGhlIHRvcGljIG5hbWUgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG5dKSxcXG5cXHRfcGZfc25zZmlmb19maXgsIF9wZl9zbnNmaWZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcblxcdG5vdCBfcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBU0wgTmV4dC9EZWZhdWx0L0Nob2ljZXMgbXVzdCByZWZlcmVuY2UgYSBkZWZpbmVkIHN0YXRlICh0b3AtbGV2ZWwgc3RhdGVzOyBhIGRhbmdsaW5nIFN0YXJ0QXQgaXMgY292ZXJlZCBieSBlbmdpbmUgcnVsZSBFMzYwMSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nmbl9maXggOj0gXFxcIlBvaW50IE5leHQvRGVmYXVsdC9DaG9pY2VzIGF0IGFuIGV4aXN0aW5nIHN0YXRlIG5hbWVcXFwiXFxuXFxuX3BmX3Nmbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1zdGF0ZXMuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuX2FzbChuYW1lKSA6PSBhc2wgaWYge1xcblxcdGRlZiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiKVxcblxcdGlzX3N0cmluZyhkZWYpXFxuXFx0YXNsIDo9IGpzb24udW5tYXJzaGFsKGRlZilcXG5cXHRpc19vYmplY3QoYXNsKVxcbn1cXG5cXG5fcGZfc2ZuX2RlZmluZWQoYXNsKSA6PSB7c24gfCBzb21lIHNuLCBfIGluIG9iamVjdC5nZXQoYXNsLCBcXFwiU3RhdGVzXFxcIiwge30pfVxcblxcbiMgTk9URTogYSBkYW5nbGluZyBTdGFydEF0IGlzIGRlbGliZXJhdGVseSBOT1QgY2hlY2tlZCBoZXJlIOKAlCB0aGUgZW5naW5lJ3NcXG4jIGJ1aWx0LWluIHJ1bGUgRTM2MDEgKEVSUk9SL0NGTl9MSU5UKSBhbHJlYWR5IGNvdmVycyBpdC4gVmVyaWZpZWQgYWdhaW5zdFxcbiMgQGF3cy9jbG91ZGZvcm1hdGlvbi12YWxpZGF0ZSAxLjcuMC1iZXRhIG9uIDIwMjYtMDktMDE6IEUzNjAxIGZpcmVzIGZvclxcbiMgU3RhcnRBdCBvbmx5IGFuZCBkb2VzIG5vdCBjaGVjayBOZXh0L0RlZmF1bHQvQ2hvaWNlcywgd2hpY2ggaXMgd2hhdCB0aGlzXFxuIyBydWxlIGFkZHMuXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgcmVmZXJlbmNlcyBzdGF0ZSAnJXMnIHZpYSAlcywgYnV0IG5vIHN0YXRlIHdpdGggdGhhdCBuYW1lIGlzIGRlZmluZWRcXFwiLCBbc25hbWUsIHRhcmdldCwga2V5XSksXFxuXFx0X3BmX3Nmbl9maXgsIF9wZl9zZm5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0YXNsIDo9IF9wZl9zZm5fYXNsKG5hbWUpXFxuXFx0c29tZSBzbmFtZSwgc3QgaW4gb2JqZWN0LmdldChhc2wsIFxcXCJTdGF0ZXNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc3QpXFxuXFx0c29tZSBrZXkgaW4ge1xcXCJOZXh0XFxcIiwgXFxcIkRlZmF1bHRcXFwifVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KHN0LCBrZXksIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhcmdldClcXG5cXHRub3QgdGFyZ2V0IGluIF9wZl9zZm5fZGVmaW5lZChhc2wpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIGhhcyBhIENob2ljZSBydWxlIHJlZmVyZW5jaW5nIHN0YXRlICclcycsIGJ1dCBubyBzdGF0ZSB3aXRoIHRoYXQgbmFtZSBpcyBkZWZpbmVkXFxcIiwgW3NuYW1lLCB0YXJnZXRdKSxcXG5cXHRfcGZfc2ZuX2ZpeCwgX3BmX3Nmbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRhc2wgOj0gX3BmX3Nmbl9hc2wobmFtZSlcXG5cXHRzb21lIHNuYW1lLCBzdCBpbiBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIHt9KVxcblxcdGlzX29iamVjdChzdClcXG5cXHRjaG9pY2VzIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJDaG9pY2VzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkoY2hvaWNlcylcXG5cXHRzb21lIGMgaW4gY2hvaWNlc1xcblxcdGlzX29iamVjdChjKVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KGMsIFxcXCJOZXh0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcblxcdG5vdCB0YXJnZXQgaW4gX3BmX3Nmbl9kZWZpbmVkKGFzbClcXG59XFxuXCJcbiAgfVxuXTtcbiJdfQ==
package/package.json CHANGED
@@ -87,7 +87,7 @@
87
87
  "publishConfig": {
88
88
  "access": "public"
89
89
  },
90
- "version": "0.0.9",
90
+ "version": "0.0.11",
91
91
  "jest": {
92
92
  "coverageProvider": "v8",
93
93
  "testMatch": [