@fairfox/polly 0.89.0 → 0.90.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gallery/gallery.css +2 -0
- package/dist/gallery/gallery.js +94 -35
- package/dist/src/polly-ui/ActionSelect.d.ts +4 -0
- package/dist/src/polly-ui/index.css +2 -0
- package/dist/src/polly-ui/index.js +139 -137
- package/dist/src/polly-ui/index.js.map +6 -5
- package/dist/src/polly-ui/internal/select-trigger.d.ts +33 -0
- package/dist/src/polly-ui/styles.css +2 -0
- package/dist/tools/verify/src/cli.js +342 -84
- package/dist/tools/verify/src/cli.js.map +11 -9
- package/dist/tools/verify/src/config.d.ts +7 -0
- package/dist/tools/verify/src/config.js.map +2 -2
- package/dist/tools/visualize/src/cli.js +85 -13
- package/dist/tools/visualize/src/cli.js.map +5 -4
- package/package.json +1 -1
package/dist/gallery/gallery.js
CHANGED
|
@@ -2025,6 +2025,30 @@ var Select_module_default = {
|
|
|
2025
2025
|
optionCheck: "optionCheck_daofbw"
|
|
2026
2026
|
};
|
|
2027
2027
|
|
|
2028
|
+
// src/polly-ui/internal/select-trigger.tsx
|
|
2029
|
+
function SelectTrigger(props) {
|
|
2030
|
+
const { label, caret = true, as = "div" } = props;
|
|
2031
|
+
return /* @__PURE__ */ u4(Layout, {
|
|
2032
|
+
as,
|
|
2033
|
+
inline: true,
|
|
2034
|
+
columns: caret ? "1fr auto" : "1fr",
|
|
2035
|
+
...caret ? { gap: "var(--polly-space-sm)" } : {},
|
|
2036
|
+
alignItems: "center",
|
|
2037
|
+
maxInlineSize: "100%",
|
|
2038
|
+
children: [
|
|
2039
|
+
/* @__PURE__ */ u4("span", {
|
|
2040
|
+
class: Select_module_default["triggerLabel"],
|
|
2041
|
+
"data-polly-select-label": true,
|
|
2042
|
+
children: label
|
|
2043
|
+
}, undefined, false, undefined, this),
|
|
2044
|
+
caret && /* @__PURE__ */ u4("span", {
|
|
2045
|
+
class: Select_module_default["caret"],
|
|
2046
|
+
"aria-hidden": "true"
|
|
2047
|
+
}, undefined, false, undefined, this)
|
|
2048
|
+
]
|
|
2049
|
+
}, undefined, true, undefined, this);
|
|
2050
|
+
}
|
|
2051
|
+
|
|
2028
2052
|
// src/polly-ui/ActionSelect.tsx
|
|
2029
2053
|
function labelFor(options, value) {
|
|
2030
2054
|
for (const opt of options) {
|
|
@@ -2081,26 +2105,18 @@ function ActionSelect(props) {
|
|
|
2081
2105
|
class: triggerClass,
|
|
2082
2106
|
"aria-disabled": "true",
|
|
2083
2107
|
title: displayText,
|
|
2084
|
-
children: /* @__PURE__ */ u4(
|
|
2085
|
-
|
|
2086
|
-
|
|
2108
|
+
children: /* @__PURE__ */ u4(SelectTrigger, {
|
|
2109
|
+
as: "span",
|
|
2110
|
+
caret: false,
|
|
2111
|
+
label: displayText
|
|
2087
2112
|
}, undefined, false, undefined, this)
|
|
2088
2113
|
}, undefined, false, undefined, this) : /* @__PURE__ */ u4(Dropdown, {
|
|
2089
2114
|
isOpen,
|
|
2090
2115
|
triggerClassName: triggerClass,
|
|
2091
2116
|
triggerTitle: displayText,
|
|
2092
|
-
trigger: /* @__PURE__ */ u4(
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
class: Select_module_default["triggerLabel"],
|
|
2096
|
-
children: displayText
|
|
2097
|
-
}, undefined, false, undefined, this),
|
|
2098
|
-
/* @__PURE__ */ u4("span", {
|
|
2099
|
-
class: Select_module_default["caret"],
|
|
2100
|
-
"aria-hidden": "true"
|
|
2101
|
-
}, undefined, false, undefined, this)
|
|
2102
|
-
]
|
|
2103
|
-
}, undefined, true, undefined, this),
|
|
2117
|
+
trigger: /* @__PURE__ */ u4(SelectTrigger, {
|
|
2118
|
+
label: displayText
|
|
2119
|
+
}, undefined, false, undefined, this),
|
|
2104
2120
|
children: options.map((opt) => {
|
|
2105
2121
|
const isSelected = opt.value === value;
|
|
2106
2122
|
const optClass = isSelected ? `${Select_module_default["option"]} ${Select_module_default["optionSelected"]}` : Select_module_default["option"];
|
|
@@ -3507,24 +3523,9 @@ function Select(props) {
|
|
|
3507
3523
|
if (wide)
|
|
3508
3524
|
triggerParts.push(Select_module_default["triggerWide"] ?? "");
|
|
3509
3525
|
const triggerClass = triggerParts.filter(Boolean).join(" ");
|
|
3510
|
-
const triggerContent = /* @__PURE__ */ u4(
|
|
3511
|
-
|
|
3512
|
-
|
|
3513
|
-
gap: "var(--polly-space-sm)",
|
|
3514
|
-
alignItems: "center",
|
|
3515
|
-
maxInlineSize: "100%",
|
|
3516
|
-
children: [
|
|
3517
|
-
/* @__PURE__ */ u4("span", {
|
|
3518
|
-
class: Select_module_default["triggerLabel"],
|
|
3519
|
-
"data-polly-select-label": true,
|
|
3520
|
-
children: displayText.value
|
|
3521
|
-
}, undefined, false, undefined, this),
|
|
3522
|
-
/* @__PURE__ */ u4("span", {
|
|
3523
|
-
class: Select_module_default["caret"],
|
|
3524
|
-
"aria-hidden": "true"
|
|
3525
|
-
}, undefined, false, undefined, this)
|
|
3526
|
-
]
|
|
3527
|
-
}, undefined, true, undefined, this);
|
|
3526
|
+
const triggerContent = /* @__PURE__ */ u4(SelectTrigger, {
|
|
3527
|
+
label: displayText.value
|
|
3528
|
+
}, undefined, false, undefined, this);
|
|
3528
3529
|
const parts = [Select_module_default["select"] ?? ""];
|
|
3529
3530
|
if (className)
|
|
3530
3531
|
parts.push(className);
|
|
@@ -3996,6 +3997,7 @@ var $galleryDropdownOpen = $state(false);
|
|
|
3996
3997
|
var $gallerySelectSingle = $state(new Set(["comet"]));
|
|
3997
3998
|
var $gallerySelectMulti = $state(new Set(["comet", "nebula"]));
|
|
3998
3999
|
var $gallerySelectClearable = $state(new Set);
|
|
4000
|
+
var $gallerySelectLong = $state(new Set(["long"]));
|
|
3999
4001
|
var $galleryChecked = $state(true);
|
|
4000
4002
|
var $galleryText = $state("Controlled value");
|
|
4001
4003
|
var $galleryCommitted = $state("—");
|
|
@@ -4093,6 +4095,11 @@ var STAR = /* @__PURE__ */ u4("span", {
|
|
|
4093
4095
|
class: "gallery-icon",
|
|
4094
4096
|
children: "★"
|
|
4095
4097
|
}, undefined, false, undefined, this);
|
|
4098
|
+
var LONG_SELECT_LABEL = "A deliberately long option label that overflows the control max width";
|
|
4099
|
+
var LONG_SELECT_OPTIONS = [
|
|
4100
|
+
{ value: "long", label: LONG_SELECT_LABEL },
|
|
4101
|
+
{ value: "short", label: "Short" }
|
|
4102
|
+
];
|
|
4096
4103
|
var GALLERY_SECTIONS = [
|
|
4097
4104
|
{
|
|
4098
4105
|
id: "badge",
|
|
@@ -4931,6 +4938,15 @@ var GALLERY_SECTIONS = [
|
|
|
4931
4938
|
],
|
|
4932
4939
|
selected: $gallerySelectMulti
|
|
4933
4940
|
}, undefined, false, undefined, this)
|
|
4941
|
+
}, undefined, false, undefined, this),
|
|
4942
|
+
/* @__PURE__ */ u4(Specimen, {
|
|
4943
|
+
caption: "long label — truncates, caret stays on the row (polly#180)",
|
|
4944
|
+
children: /* @__PURE__ */ u4(Select, {
|
|
4945
|
+
id: "gallery-select-long",
|
|
4946
|
+
label: "Long label",
|
|
4947
|
+
options: LONG_SELECT_OPTIONS,
|
|
4948
|
+
selected: $gallerySelectLong
|
|
4949
|
+
}, undefined, false, undefined, this)
|
|
4934
4950
|
}, undefined, false, undefined, this)
|
|
4935
4951
|
]
|
|
4936
4952
|
}, undefined, true, undefined, this)
|
|
@@ -5119,6 +5135,49 @@ var GALLERY_SECTIONS = [
|
|
|
5119
5135
|
action: "gallery:commit",
|
|
5120
5136
|
disabled: true
|
|
5121
5137
|
}, undefined, false, undefined, this)
|
|
5138
|
+
}, undefined, false, undefined, this),
|
|
5139
|
+
/* @__PURE__ */ u4(Specimen, {
|
|
5140
|
+
caption: "long label — truncates, caret stays on the row (polly#180)",
|
|
5141
|
+
children: /* @__PURE__ */ u4(ActionSelect, {
|
|
5142
|
+
id: "gallery-action-select-long",
|
|
5143
|
+
label: "Long label",
|
|
5144
|
+
value: "long",
|
|
5145
|
+
options: LONG_SELECT_OPTIONS,
|
|
5146
|
+
action: "gallery:commit"
|
|
5147
|
+
}, undefined, false, undefined, this)
|
|
5148
|
+
}, undefined, false, undefined, this),
|
|
5149
|
+
/* @__PURE__ */ u4(Specimen, {
|
|
5150
|
+
caption: "long label, disabled — one row at the control height",
|
|
5151
|
+
children: /* @__PURE__ */ u4(ActionSelect, {
|
|
5152
|
+
id: "gallery-action-select-long-disabled",
|
|
5153
|
+
label: "Long label",
|
|
5154
|
+
value: "long",
|
|
5155
|
+
options: LONG_SELECT_OPTIONS,
|
|
5156
|
+
action: "gallery:commit",
|
|
5157
|
+
disabled: true
|
|
5158
|
+
}, undefined, false, undefined, this)
|
|
5159
|
+
}, undefined, false, undefined, this),
|
|
5160
|
+
/* @__PURE__ */ u4(Specimen, {
|
|
5161
|
+
caption: "empty — the placeholder is the same box as a value",
|
|
5162
|
+
children: /* @__PURE__ */ u4(ActionSelect, {
|
|
5163
|
+
id: "gallery-action-select-long-empty",
|
|
5164
|
+
label: "Long placeholder",
|
|
5165
|
+
value: "",
|
|
5166
|
+
placeholder: LONG_SELECT_LABEL,
|
|
5167
|
+
options: LONG_SELECT_OPTIONS,
|
|
5168
|
+
action: "gallery:commit"
|
|
5169
|
+
}, undefined, false, undefined, this)
|
|
5170
|
+
}, undefined, false, undefined, this),
|
|
5171
|
+
/* @__PURE__ */ u4(Specimen, {
|
|
5172
|
+
caption: "wide — short label, still one centred row",
|
|
5173
|
+
children: /* @__PURE__ */ u4(ActionSelect, {
|
|
5174
|
+
id: "gallery-action-select-wide",
|
|
5175
|
+
label: "Wide",
|
|
5176
|
+
value: "short",
|
|
5177
|
+
options: LONG_SELECT_OPTIONS,
|
|
5178
|
+
action: "gallery:commit",
|
|
5179
|
+
wide: true
|
|
5180
|
+
}, undefined, false, undefined, this)
|
|
5122
5181
|
}, undefined, false, undefined, this)
|
|
5123
5182
|
]
|
|
5124
5183
|
}, undefined, true, undefined, this)
|
|
@@ -5438,5 +5497,5 @@ installEventDelegation(async (dispatch) => {
|
|
|
5438
5497
|
var root = document.getElementById("app") ?? document.body;
|
|
5439
5498
|
R(/* @__PURE__ */ u4(GalleryApp, {}, undefined, false, undefined, this), root);
|
|
5440
5499
|
|
|
5441
|
-
//# debugId=
|
|
5442
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9kaXN0L3ByZWFjdC5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9ob29rcy9kaXN0L2hvb2tzLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHMtY29yZUAxLjE0LjIvbm9kZV9tb2R1bGVzL0BwcmVhY3Qvc2lnbmFscy1jb3JlL2Rpc3Qvc2lnbmFscy1jb3JlLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHNAMi45LjArOGFkZTYwMmVkNmMzNjM2MC9ub2RlX21vZHVsZXMvQHByZWFjdC9zaWduYWxzL2Rpc3Qvc2lnbmFscy5tb2R1bGUuanMiLCAic3JjL2FjdGlvbnMvZXJyb3IudHMiLCAic3JjL2FjdGlvbnMvb3ZlcmxheS50cyIsICJzcmMvYWN0aW9ucy9ldmVudC1kZWxlZ2F0aW9uLnRzIiwgInNyYy9hY3Rpb25zL2Zvcm0udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwgInNyYy9hY3Rpb25zL3N0b3JlLnRzeCIsICJzcmMvcG9sbHktdWkvQWN0aW9uRm9ybS50c3giLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvcGFzc3Rocm91Z2gudHMiLCAic3JjL3BvbGx5LXVpL0FjdGlvbklucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvTGF5b3V0LnRzeCIsICJzcmMvcG9sbHktdWkvRHJvcGRvd24udHN4IiwgInNyYy9wb2xseS11aS9BY3Rpb25TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9CYWRnZS50c3giLCAic3JjL3BvbGx5LXVpL0J1dHRvbi50c3giLCAic3JjL3BvbGx5LXVpL1N1cmZhY2UudHN4IiwgInNyYy9wb2xseS11aS9DYXJkLnRzeCIsICJzcmMvcG9sbHktdWkvQ2hlY2tib3gudHN4IiwgInNyYy9wb2xseS11aS9DbHVzdGVyLnRzeCIsICJzcmMvcG9sbHktdWkvQ29kZS50c3giLCAic3JjL3BvbGx5LXVpL0NvbGxhcHNpYmxlLnRzeCIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcmVhY3RAMTAuMjkuMS9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2ZvY3VzLXRyYXAudHMiLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL3Njcm9sbC1sb2NrLnRzIiwgInNyYy9wb2xseS11aS9PdmVybGF5Um9vdC50c3giLCAic3JjL3BvbGx5LXVpL01vZGFsLnRzeCIsICJzcmMvcG9sbHktdWkvQ29uZmlybURpYWxvZy50c3giLCAic3JjL3BvbGx5LXVpL0ZpbGVJbnB1dC50c3giLCAic3JjL3BvbGx5LXVpL0h0bWwudHN4IiwgInNyYy9wb2xseS11aS9MaW5rLnRzeCIsICJzcmMvcG9sbHktdWkvT3V0cHV0LnRzeCIsICJzcmMvcG9sbHktdWkvU2VsZWN0LnRzeCIsICJzcmMvcG9sbHktdWkvU2tlbGV0b24udHN4IiwgInNyYy9wb2xseS11aS9UYWJzLnRzeCIsICJzcmMvcG9sbHktdWkvVGV4dC50c3giLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2lucHV0LWJhc2UudHMiLCAic3JjL3BvbGx5LXVpL1RleHRJbnB1dC50c3giLCAic3JjL3BvbGx5LXVpL1RvYXN0LnRzeCIsICJzcmMvcG9sbHktdWkvVG9nZ2xlLnRzeCIsICJzcmMvc2hhcmVkL2xpYi9zdGF0ZS50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9zdG9yZXMudHMiLCAidG9vbHMvZ2FsbGVyeS9zcmMvYWN0aW9ucy50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9zcGVjaW1lbnMudHN4IiwgInRvb2xzL2dhbGxlcnkvc3JjL2dhbGxlcnktYXBwLnRzeCIsICJ0b29scy9nYWxsZXJ5L3NyYy9jbGllbnQudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgInZhciBuLGwsdSx0LGkscixvLGUsZixjLHMsYSxoLHAsdix5LGQ9e30sdz1bXSxfPS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksZz1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIG0obixsKXtmb3IodmFyIHUgaW4gbCluW3VdPWxbdV07cmV0dXJuIG59ZnVuY3Rpb24gYihuKXtuJiZuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX1mdW5jdGlvbiBrKGwsdSx0KXt2YXIgaSxyLG8sZT17fTtmb3IobyBpbiB1KVwia2V5XCI9PW8/aT11W29dOlwicmVmXCI9PW8/cj11W29dOmVbb109dVtvXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihlLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGwmJm51bGwhPWwuZGVmYXVsdFByb3BzKWZvcihvIGluIGwuZGVmYXVsdFByb3BzKXZvaWQgMD09PWVbb10mJihlW29dPWwuZGVmYXVsdFByb3BzW29dKTtyZXR1cm4geChsLGUsaSxyLG51bGwpfWZ1bmN0aW9uIHgobix0LGkscixvKXt2YXIgZT17dHlwZTpuLHByb3BzOnQsa2V5OmkscmVmOnIsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Om51bGw9PW8/Kyt1Om8sX19pOi0xLF9fdTowfTtyZXR1cm4gbnVsbD09byYmbnVsbCE9bC52bm9kZSYmbC52bm9kZShlKSxlfWZ1bmN0aW9uIE0oKXtyZXR1cm57Y3VycmVudDpudWxsfX1mdW5jdGlvbiBTKG4pe3JldHVybiBuLmNoaWxkcmVufWZ1bmN0aW9uIEMobixsKXt0aGlzLnByb3BzPW4sdGhpcy5jb250ZXh0PWx9ZnVuY3Rpb24gJChuLGwpe2lmKG51bGw9PWwpcmV0dXJuIG4uX18/JChuLl9fLG4uX19pKzEpOm51bGw7Zm9yKHZhciB1O2w8bi5fX2subGVuZ3RoO2wrKylpZihudWxsIT0odT1uLl9fa1tsXSkmJm51bGwhPXUuX19lKXJldHVybiB1Ll9fZTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGU/JChuKTpudWxsfWZ1bmN0aW9uIEkobil7aWYobi5fX1AmJm4uX19kKXt2YXIgdT1uLl9fdix0PXUuX19lLGk9W10scj1bXSxvPW0oe30sdSk7by5fX3Y9dS5fX3YrMSxsLnZub2RlJiZsLnZub2RlKG8pLHEobi5fX1Asbyx1LG4uX19uLG4uX19QLm5hbWVzcGFjZVVSSSwzMiZ1Ll9fdT9bdF06bnVsbCxpLG51bGw9PXQ/JCh1KTp0LCEhKDMyJnUuX191KSxyKSxvLl9fdj11Ll9fdixvLl9fLl9fa1tvLl9faV09byxEKGksbyxyKSx1Ll9fZT11Ll9fPW51bGwsby5fX2UhPXQmJlAobyl9fWZ1bmN0aW9uIFAobil7aWYobnVsbCE9KG49bi5fXykmJm51bGwhPW4uX19jKXJldHVybiBuLl9fZT1uLl9fYy5iYXNlPW51bGwsbi5fX2suc29tZShmdW5jdGlvbihsKXtpZihudWxsIT1sJiZudWxsIT1sLl9fZSlyZXR1cm4gbi5fX2U9bi5fX2MuYmFzZT1sLl9fZX0pLFAobil9ZnVuY3Rpb24gQShuKXsoIW4uX19kJiYobi5fX2Q9ITApJiZpLnB1c2gobikmJiFILl9fcisrfHxyIT1sLmRlYm91bmNlUmVuZGVyaW5nKSYmKChyPWwuZGVib3VuY2VSZW5kZXJpbmcpfHxvKShIKX1mdW5jdGlvbiBIKCl7dHJ5e2Zvcih2YXIgbixsPTE7aS5sZW5ndGg7KWkubGVuZ3RoPmwmJmkuc29ydChlKSxuPWkuc2hpZnQoKSxsPWkubGVuZ3RoLEkobil9ZmluYWxseXtpLmxlbmd0aD1ILl9fcj0wfX1mdW5jdGlvbiBMKG4sbCx1LHQsaSxyLG8sZSxmLGMscyl7dmFyIGEsaCxwLHYseSxfLGcsbT10JiZ0Ll9fa3x8dyxiPWwubGVuZ3RoO2ZvcihmPVQodSxsLG0sZixiKSxhPTA7YTxiO2ErKyludWxsIT0ocD11Ll9fa1thXSkmJihoPS0xIT1wLl9faSYmbVtwLl9faV18fGQscC5fX2k9YSxfPXEobixwLGgsaSxyLG8sZSxmLGMscyksdj1wLl9fZSxwLnJlZiYmaC5yZWYhPXAucmVmJiYoaC5yZWYmJkooaC5yZWYsbnVsbCxwKSxzLnB1c2gocC5yZWYscC5fX2N8fHYscCkpLG51bGw9PXkmJm51bGwhPXYmJih5PXYpLChnPSEhKDQmcC5fX3UpKXx8aC5fX2s9PT1wLl9faz8oZj1qKHAsZixuLGcpLGcmJmguX19lJiYoaC5fX2U9bnVsbCkpOlwiZnVuY3Rpb25cIj09dHlwZW9mIHAudHlwZSYmdm9pZCAwIT09Xz9mPV86diYmKGY9di5uZXh0U2libGluZykscC5fX3UmPS03KTtyZXR1cm4gdS5fX2U9eSxmfWZ1bmN0aW9uIFQobixsLHUsdCxpKXt2YXIgcixvLGUsZixjLHM9dS5sZW5ndGgsYT1zLGg9MDtmb3Iobi5fX2s9bmV3IEFycmF5KGkpLHI9MDtyPGk7cisrKW51bGwhPShvPWxbcl0pJiZcImJvb2xlYW5cIiE9dHlwZW9mIG8mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG8/KFwic3RyaW5nXCI9PXR5cGVvZiBvfHxcIm51bWJlclwiPT10eXBlb2Ygb3x8XCJiaWdpbnRcIj09dHlwZW9mIG98fG8uY29uc3RydWN0b3I9PVN0cmluZz9vPW4uX19rW3JdPXgobnVsbCxvLG51bGwsbnVsbCxudWxsKTpnKG8pP289bi5fX2tbcl09eChTLHtjaGlsZHJlbjpvfSxudWxsLG51bGwsbnVsbCk6dm9pZCAwPT09by5jb25zdHJ1Y3RvciYmby5fX2I+MD9vPW4uX19rW3JdPXgoby50eXBlLG8ucHJvcHMsby5rZXksby5yZWY/by5yZWY6bnVsbCxvLl9fdik6bi5fX2tbcl09byxmPXIraCxvLl9fPW4sby5fX2I9bi5fX2IrMSxlPW51bGwsLTEhPShjPW8uX19pPU8obyx1LGYsYSkpJiYoYS0tLChlPXVbY10pJiYoZS5fX3V8PTIpKSxudWxsPT1lfHxudWxsPT1lLl9fdj8oLTE9PWMmJihpPnM/aC0tOmk8cyYmaCsrKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBvLnR5cGUmJihvLl9fdXw9NCkpOmMhPWYmJihjPT1mLTE/aC0tOmM9PWYrMT9oKys6KGM+Zj9oLS06aCsrLG8uX191fD00KSkpOm4uX19rW3JdPW51bGw7aWYoYSlmb3Iocj0wO3I8cztyKyspbnVsbCE9KGU9dVtyXSkmJjA9PSgyJmUuX191KSYmKGUuX19lPT10JiYodD0kKGUpKSxLKGUsZSkpO3JldHVybiB0fWZ1bmN0aW9uIGoobixsLHUsdCl7dmFyIGkscjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGUpe2ZvcihpPW4uX19rLHI9MDtpJiZyPGkubGVuZ3RoO3IrKylpW3JdJiYoaVtyXS5fXz1uLGw9aihpW3JdLGwsdSx0KSk7cmV0dXJuIGx9bi5fX2UhPWwmJih0JiYobCYmbi50eXBlJiYhbC5wYXJlbnROb2RlJiYobD0kKG4pKSx1Lmluc2VydEJlZm9yZShuLl9fZSxsfHxudWxsKSksbD1uLl9fZSk7ZG97bD1sJiZsLm5leHRTaWJsaW5nfXdoaWxlKG51bGwhPWwmJjg9PWwubm9kZVR5cGUpO3JldHVybiBsfWZ1bmN0aW9uIEYobixsKXtyZXR1cm4gbD1sfHxbXSxudWxsPT1ufHxcImJvb2xlYW5cIj09dHlwZW9mIG58fChnKG4pP24uc29tZShmdW5jdGlvbihuKXtGKG4sbCl9KTpsLnB1c2gobikpLGx9ZnVuY3Rpb24gTyhuLGwsdSx0KXt2YXIgaSxyLG8sZT1uLmtleSxmPW4udHlwZSxjPWxbdV0scz1udWxsIT1jJiYwPT0oMiZjLl9fdSk7aWYobnVsbD09PWMmJm51bGw9PWV8fHMmJmU9PWMua2V5JiZmPT1jLnR5cGUpcmV0dXJuIHU7aWYodD4ocz8xOjApKWZvcihpPXUtMSxyPXUrMTtpPj0wfHxyPGwubGVuZ3RoOylpZihudWxsIT0oYz1sW289aT49MD9pLS06cisrXSkmJjA9PSgyJmMuX191KSYmZT09Yy5rZXkmJmY9PWMudHlwZSlyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiB6KG4sbCx1KXtcIi1cIj09bFswXT9uLnNldFByb3BlcnR5KGwsbnVsbD09dT9cIlwiOnUpOm5bbF09bnVsbD09dT9cIlwiOlwibnVtYmVyXCIhPXR5cGVvZiB1fHxfLnRlc3QobCk/dTp1K1wicHhcIn1mdW5jdGlvbiBOKG4sbCx1LHQsaSl7dmFyIHIsbztuOmlmKFwic3R5bGVcIj09bClpZihcInN0cmluZ1wiPT10eXBlb2YgdSluLnN0eWxlLmNzc1RleHQ9dTtlbHNle2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYobi5zdHlsZS5jc3NUZXh0PXQ9XCJcIiksdClmb3IobCBpbiB0KXUmJmwgaW4gdXx8eihuLnN0eWxlLGwsXCJcIik7aWYodSlmb3IobCBpbiB1KXQmJnVbbF09PXRbbF18fHoobi5zdHlsZSxsLHVbbF0pfWVsc2UgaWYoXCJvXCI9PWxbMF0mJlwiblwiPT1sWzFdKXI9bCE9KGw9bC5yZXBsYWNlKGEsXCIkMVwiKSksbz1sLnRvTG93ZXJDYXNlKCksbD1vIGluIG58fFwib25Gb2N1c091dFwiPT1sfHxcIm9uRm9jdXNJblwiPT1sP28uc2xpY2UoMik6bC5zbGljZSgyKSxuLmx8fChuLmw9e30pLG4ubFtsK3JdPXUsdT90P3Vbc109dFtzXToodVtzXT1oLG4uYWRkRXZlbnRMaXN0ZW5lcihsLHI/djpwLHIpKTpuLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxyP3Y6cCxyKTtlbHNle2lmKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj09aSlsPWwucmVwbGFjZSgveGxpbmsoSHw6aCkvLFwiaFwiKS5yZXBsYWNlKC9zTmFtZSQvLFwic1wiKTtlbHNlIGlmKFwid2lkdGhcIiE9bCYmXCJoZWlnaHRcIiE9bCYmXCJocmVmXCIhPWwmJlwibGlzdFwiIT1sJiZcImZvcm1cIiE9bCYmXCJ0YWJJbmRleFwiIT1sJiZcImRvd25sb2FkXCIhPWwmJlwicm93U3BhblwiIT1sJiZcImNvbFNwYW5cIiE9bCYmXCJyb2xlXCIhPWwmJlwicG9wb3ZlclwiIT1sJiZsIGluIG4pdHJ5e25bbF09bnVsbD09dT9cIlwiOnU7YnJlYWsgbn1jYXRjaChuKXt9XCJmdW5jdGlvblwiPT10eXBlb2YgdXx8KG51bGw9PXV8fCExPT09dSYmXCItXCIhPWxbNF0/bi5yZW1vdmVBdHRyaWJ1dGUobCk6bi5zZXRBdHRyaWJ1dGUobCxcInBvcG92ZXJcIj09bCYmMT09dT9cIlwiOnUpKX19ZnVuY3Rpb24gVihuKXtyZXR1cm4gZnVuY3Rpb24odSl7aWYodGhpcy5sKXt2YXIgdD10aGlzLmxbdS50eXBlK25dO2lmKG51bGw9PXVbY10pdVtjXT1oKys7ZWxzZSBpZih1W2NdPHRbc10pcmV0dXJuO3JldHVybiB0KGwuZXZlbnQ/bC5ldmVudCh1KTp1KX19fWZ1bmN0aW9uIHEobix1LHQsaSxyLG8sZSxmLGMscyl7dmFyIGEsaCxwLHYseSxkLF8sayx4LE0sJCxJLFAsQSxILFQ9dS50eXBlO2lmKHZvaWQgMCE9PXUuY29uc3RydWN0b3IpcmV0dXJuIG51bGw7MTI4JnQuX191JiYoYz0hISgzMiZ0Ll9fdSksbz1bZj11Ll9fZT10Ll9fZV0pLChhPWwuX19iKSYmYSh1KTtuOmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFQpdHJ5e2lmKGs9dS5wcm9wcyx4PVQucHJvdG90eXBlJiZULnByb3RvdHlwZS5yZW5kZXIsTT0oYT1ULmNvbnRleHRUeXBlKSYmaVthLl9fY10sJD1hP00/TS5wcm9wcy52YWx1ZTphLl9fOmksdC5fX2M/Xz0oaD11Ll9fYz10Ll9fYykuX189aC5fX0U6KHg/dS5fX2M9aD1uZXcgVChrLCQpOih1Ll9fYz1oPW5ldyBDKGssJCksaC5jb25zdHJ1Y3Rvcj1ULGgucmVuZGVyPVEpLE0mJk0uc3ViKGgpLGguc3RhdGV8fChoLnN0YXRlPXt9KSxoLl9fbj1pLHA9aC5fX2Q9ITAsaC5fX2g9W10saC5fc2I9W10pLHgmJm51bGw9PWguX19zJiYoaC5fX3M9aC5zdGF0ZSkseCYmbnVsbCE9VC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJihoLl9fcz09aC5zdGF0ZSYmKGguX19zPW0oe30saC5fX3MpKSxtKGguX19zLFQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKGssaC5fX3MpKSksdj1oLnByb3BzLHk9aC5zdGF0ZSxoLl9fdj11LHApeCYmbnVsbD09VC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJm51bGwhPWguY29tcG9uZW50V2lsbE1vdW50JiZoLmNvbXBvbmVudFdpbGxNb3VudCgpLHgmJm51bGwhPWguY29tcG9uZW50RGlkTW91bnQmJmguX19oLnB1c2goaC5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZih4JiZudWxsPT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmayE9PXYmJm51bGwhPWguY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmaC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGssJCksdS5fX3Y9PXQuX192fHwhaC5fX2UmJm51bGwhPWguc2hvdWxkQ29tcG9uZW50VXBkYXRlJiYhMT09PWguc2hvdWxkQ29tcG9uZW50VXBkYXRlKGssaC5fX3MsJCkpe3UuX192IT10Ll9fdiYmKGgucHJvcHM9ayxoLnN0YXRlPWguX19zLGguX19kPSExKSx1Ll9fZT10Ll9fZSx1Ll9faz10Ll9fayx1Ll9fay5zb21lKGZ1bmN0aW9uKG4pe24mJihuLl9fPXUpfSksdy5wdXNoLmFwcGx5KGguX19oLGguX3NiKSxoLl9zYj1bXSxoLl9faC5sZW5ndGgmJmUucHVzaChoKTticmVhayBufW51bGwhPWguY29tcG9uZW50V2lsbFVwZGF0ZSYmaC5jb21wb25lbnRXaWxsVXBkYXRlKGssaC5fX3MsJCkseCYmbnVsbCE9aC5jb21wb25lbnREaWRVcGRhdGUmJmguX19oLnB1c2goZnVuY3Rpb24oKXtoLmNvbXBvbmVudERpZFVwZGF0ZSh2LHksZCl9KX1pZihoLmNvbnRleHQ9JCxoLnByb3BzPWssaC5fX1A9bixoLl9fZT0hMSxJPWwuX19yLFA9MCx4KWguc3RhdGU9aC5fX3MsaC5fX2Q9ITEsSSYmSSh1KSxhPWgucmVuZGVyKGgucHJvcHMsaC5zdGF0ZSxoLmNvbnRleHQpLHcucHVzaC5hcHBseShoLl9faCxoLl9zYiksaC5fc2I9W107ZWxzZSBkb3toLl9fZD0hMSxJJiZJKHUpLGE9aC5yZW5kZXIoaC5wcm9wcyxoLnN0YXRlLGguY29udGV4dCksaC5zdGF0ZT1oLl9fc313aGlsZShoLl9fZCYmKytQPDI1KTtoLnN0YXRlPWguX19zLG51bGwhPWguZ2V0Q2hpbGRDb250ZXh0JiYoaT1tKG0oe30saSksaC5nZXRDaGlsZENvbnRleHQoKSkpLHgmJiFwJiZudWxsIT1oLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYoZD1oLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHYseSkpLEE9bnVsbCE9YSYmYS50eXBlPT09UyYmbnVsbD09YS5rZXk/RShhLnByb3BzLmNoaWxkcmVuKTphLGY9TChuLGcoQSk/QTpbQV0sdSx0LGkscixvLGUsZixjLHMpLGguYmFzZT11Ll9fZSx1Ll9fdSY9LTE2MSxoLl9faC5sZW5ndGgmJmUucHVzaChoKSxfJiYoaC5fX0U9aC5fXz1udWxsKX1jYXRjaChuKXtpZih1Ll9fdj1udWxsLGN8fG51bGwhPW8paWYobi50aGVuKXtmb3IodS5fX3V8PWM/MTYwOjEyODtmJiY4PT1mLm5vZGVUeXBlJiZmLm5leHRTaWJsaW5nOylmPWYubmV4dFNpYmxpbmc7b1tvLmluZGV4T2YoZildPW51bGwsdS5fX2U9Zn1lbHNle2ZvcihIPW8ubGVuZ3RoO0gtLTspYihvW0hdKTtCKHUpfWVsc2UgdS5fX2U9dC5fX2UsdS5fX2s9dC5fX2ssbi50aGVufHxCKHUpO2wuX19lKG4sdSx0KX1lbHNlIG51bGw9PW8mJnUuX192PT10Ll9fdj8odS5fX2s9dC5fX2ssdS5fX2U9dC5fX2UpOmY9dS5fX2U9Ryh0Ll9fZSx1LHQsaSxyLG8sZSxjLHMpO3JldHVybihhPWwuZGlmZmVkKSYmYSh1KSwxMjgmdS5fX3U/dm9pZCAwOmZ9ZnVuY3Rpb24gQihuKXtuJiYobi5fX2MmJihuLl9fYy5fX2U9ITApLG4uX19rJiZuLl9fay5zb21lKEIpKX1mdW5jdGlvbiBEKG4sdSx0KXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylKKHRbaV0sdFsrK2ldLHRbKytpXSk7bC5fX2MmJmwuX19jKHUsbiksbi5zb21lKGZ1bmN0aW9uKHUpe3RyeXtuPXUuX19oLHUuX19oPVtdLG4uc29tZShmdW5jdGlvbihuKXtuLmNhbGwodSl9KX1jYXRjaChuKXtsLl9fZShuLHUuX192KX19KX1mdW5jdGlvbiBFKG4pe3JldHVyblwib2JqZWN0XCIhPXR5cGVvZiBufHxudWxsPT1ufHxuLl9fYj4wP246ZyhuKT9uLm1hcChFKTptKHt9LG4pfWZ1bmN0aW9uIEcodSx0LGkscixvLGUsZixjLHMpe3ZhciBhLGgscCx2LHksdyxfLG09aS5wcm9wc3x8ZCxrPXQucHJvcHMseD10LnR5cGU7aWYoXCJzdmdcIj09eD9vPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjpcIm1hdGhcIj09eD9vPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiOm98fChvPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSxudWxsIT1lKWZvcihhPTA7YTxlLmxlbmd0aDthKyspaWYoKHk9ZVthXSkmJlwic2V0QXR0cmlidXRlXCJpbiB5PT0hIXgmJih4P3kubG9jYWxOYW1lPT14OjM9PXkubm9kZVR5cGUpKXt1PXksZVthXT1udWxsO2JyZWFrfWlmKG51bGw9PXUpe2lmKG51bGw9PXgpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGspO3U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8seCxrLmlzJiZrKSxjJiYobC5fX20mJmwuX19tKHQsZSksYz0hMSksZT1udWxsfWlmKG51bGw9PXgpbT09PWt8fGMmJnUuZGF0YT09a3x8KHUuZGF0YT1rKTtlbHNle2lmKGU9ZSYmbi5jYWxsKHUuY2hpbGROb2RlcyksIWMmJm51bGwhPWUpZm9yKG09e30sYT0wO2E8dS5hdHRyaWJ1dGVzLmxlbmd0aDthKyspbVsoeT11LmF0dHJpYnV0ZXNbYV0pLm5hbWVdPXkudmFsdWU7Zm9yKGEgaW4gbSl5PW1bYV0sXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hP3A9eTpcImNoaWxkcmVuXCI9PWF8fGEgaW4ga3x8XCJ2YWx1ZVwiPT1hJiZcImRlZmF1bHRWYWx1ZVwiaW4ga3x8XCJjaGVja2VkXCI9PWEmJlwiZGVmYXVsdENoZWNrZWRcImluIGt8fE4odSxhLG51bGwseSxvKTtmb3IoYSBpbiBrKXk9a1thXSxcImNoaWxkcmVuXCI9PWE/dj15OlwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09YT9oPXk6XCJ2YWx1ZVwiPT1hP3c9eTpcImNoZWNrZWRcIj09YT9fPXk6YyYmXCJmdW5jdGlvblwiIT10eXBlb2YgeXx8bVthXT09PXl8fE4odSxhLHksbVthXSxvKTtpZihoKWN8fHAmJihoLl9faHRtbD09cC5fX2h0bWx8fGguX19odG1sPT11LmlubmVySFRNTCl8fCh1LmlubmVySFRNTD1oLl9faHRtbCksdC5fX2s9W107ZWxzZSBpZihwJiYodS5pbm5lckhUTUw9XCJcIiksTChcInRlbXBsYXRlXCI9PXQudHlwZT91LmNvbnRlbnQ6dSxnKHYpP3Y6W3ZdLHQsaSxyLFwiZm9yZWlnbk9iamVjdFwiPT14P1wiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiOm8sZSxmLGU/ZVswXTppLl9fayYmJChpLDApLGMscyksbnVsbCE9ZSlmb3IoYT1lLmxlbmd0aDthLS07KWIoZVthXSk7Y3x8KGE9XCJ2YWx1ZVwiLFwicHJvZ3Jlc3NcIj09eCYmbnVsbD09dz91LnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpOm51bGwhPXcmJih3IT09dVthXXx8XCJwcm9ncmVzc1wiPT14JiYhd3x8XCJvcHRpb25cIj09eCYmdyE9bVthXSkmJk4odSxhLHcsbVthXSxvKSxhPVwiY2hlY2tlZFwiLG51bGwhPV8mJl8hPXVbYV0mJk4odSxhLF8sbVthXSxvKSl9cmV0dXJuIHV9ZnVuY3Rpb24gSihuLHUsdCl7dHJ5e2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciBpPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4uX191O2kmJm4uX191KCksaSYmbnVsbD09dXx8KG4uX191PW4odSkpfWVsc2Ugbi5jdXJyZW50PXV9Y2F0Y2gobil7bC5fX2Uobix0KX19ZnVuY3Rpb24gSyhuLHUsdCl7dmFyIGkscjtpZihsLnVubW91bnQmJmwudW5tb3VudChuKSwoaT1uLnJlZikmJihpLmN1cnJlbnQmJmkuY3VycmVudCE9bi5fX2V8fEooaSxudWxsLHUpKSxudWxsIT0oaT1uLl9fYykpe2lmKGkuY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e2kuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChuKXtsLl9fZShuLHUpfWkuYmFzZT1pLl9fUD1udWxsfWlmKGk9bi5fX2spZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdJiZLKGlbcl0sdSx0fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBuLnR5cGUpO3R8fGIobi5fX2UpLG4uX19jPW4uX189bi5fX2U9dm9pZCAwfWZ1bmN0aW9uIFEobixsLHUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKG4sdSl9ZnVuY3Rpb24gUih1LHQsaSl7dmFyIHIsbyxlLGY7dD09ZG9jdW1lbnQmJih0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksbC5fXyYmbC5fXyh1LHQpLG89KHI9XCJmdW5jdGlvblwiPT10eXBlb2YgaSk/bnVsbDppJiZpLl9fa3x8dC5fX2ssZT1bXSxmPVtdLHEodCx1PSghciYmaXx8dCkuX19rPWsoUyxudWxsLFt1XSksb3x8ZCxkLHQubmFtZXNwYWNlVVJJLCFyJiZpP1tpXTpvP251bGw6dC5maXJzdENoaWxkP24uY2FsbCh0LmNoaWxkTm9kZXMpOm51bGwsZSwhciYmaT9pOm8/by5fX2U6dC5maXJzdENoaWxkLHIsZiksRChlLHUsZil9ZnVuY3Rpb24gVShuLGwpe1IobixsLFUpfWZ1bmN0aW9uIFcobCx1LHQpe3ZhciBpLHIsbyxlLGY9bSh7fSxsLnByb3BzKTtmb3IobyBpbiBsLnR5cGUmJmwudHlwZS5kZWZhdWx0UHJvcHMmJihlPWwudHlwZS5kZWZhdWx0UHJvcHMpLHUpXCJrZXlcIj09bz9pPXVbb106XCJyZWZcIj09bz9yPXVbb106ZltvXT12b2lkIDA9PT11W29dJiZudWxsIT1lP2Vbb106dVtvXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiYoZi5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/bi5jYWxsKGFyZ3VtZW50cywyKTp0KSx4KGwudHlwZSxmLGl8fGwua2V5LHJ8fGwucmVmLG51bGwpfWZ1bmN0aW9uIFgobil7ZnVuY3Rpb24gbChuKXt2YXIgdSx0O3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KHU9bmV3IFNldCwodD17fSlbbC5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3U9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obil7dGhpcy5wcm9wcy52YWx1ZSE9bi52YWx1ZSYmdS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uX19lPSEwLEEobil9KX0sdGhpcy5zdWI9ZnVuY3Rpb24obil7dS5hZGQobik7dmFyIGw9bi5jb21wb25lbnRXaWxsVW5tb3VudDtuLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dSYmdS5kZWxldGUobiksbCYmbC5jYWxsKG4pfX0pLG4uY2hpbGRyZW59cmV0dXJuIGwuX19jPVwiX19jQ1wiK3krKyxsLl9fPW4sbC5Qcm92aWRlcj1sLl9fbD0obC5Db25zdW1lcj1mdW5jdGlvbihuLGwpe3JldHVybiBuLmNoaWxkcmVuKGwpfSkuY29udGV4dFR5cGU9bCxsfW49dy5zbGljZSxsPXtfX2U6ZnVuY3Rpb24obixsLHUsdCl7Zm9yKHZhciBpLHIsbztsPWwuX187KWlmKChpPWwuX19jKSYmIWkuX18pdHJ5e2lmKChyPWkuY29uc3RydWN0b3IpJiZudWxsIT1yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciYmKGkuc2V0U3RhdGUoci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IobikpLG89aS5fX2QpLG51bGwhPWkuY29tcG9uZW50RGlkQ2F0Y2gmJihpLmNvbXBvbmVudERpZENhdGNoKG4sdHx8e30pLG89aS5fX2QpLG8pcmV0dXJuIGkuX19FPWl9Y2F0Y2gobCl7bj1sfXRocm93IG59fSx1PTAsdD1mdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmdm9pZCAwPT09bi5jb25zdHJ1Y3Rvcn0sQy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24obixsKXt2YXIgdTt1PW51bGwhPXRoaXMuX19zJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1tKHt9LHRoaXMuc3RhdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPW4obSh7fSx1KSx0aGlzLnByb3BzKSksbiYmbSh1LG4pLG51bGwhPW4mJnRoaXMuX192JiYobCYmdGhpcy5fc2IucHVzaChsKSxBKHRoaXMpKX0sQy5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24obil7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCxuJiZ0aGlzLl9faC5wdXNoKG4pLEEodGhpcykpfSxDLnByb3RvdHlwZS5yZW5kZXI9UyxpPVtdLG89XCJmdW5jdGlvblwiPT10eXBlb2YgUHJvbWlzZT9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsZT1mdW5jdGlvbihuLGwpe3JldHVybiBuLl9fdi5fX2ItbC5fX3YuX19ifSxILl9fcj0wLGY9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxjPVwiX19kXCIrZixzPVwiX19hXCIrZixhPS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLGg9MCxwPVYoITEpLHY9VighMCkseT0wO2V4cG9ydHtDIGFzIENvbXBvbmVudCxTIGFzIEZyYWdtZW50LFcgYXMgY2xvbmVFbGVtZW50LFggYXMgY3JlYXRlQ29udGV4dCxrIGFzIGNyZWF0ZUVsZW1lbnQsTSBhcyBjcmVhdGVSZWYsayBhcyBoLFUgYXMgaHlkcmF0ZSx0IGFzIGlzVmFsaWRFbGVtZW50LGwgYXMgb3B0aW9ucyxSIGFzIHJlbmRlcixGIGFzIHRvQ2hpbGRBcnJheX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVhY3QubW9kdWxlLmpzLm1hcFxuIiwKICAgICJpbXBvcnR7b3B0aW9ucyBhcyBufWZyb21cInByZWFjdFwiO3ZhciB0LHIsdSxpLG89MCxmPVtdLGM9bixlPWMuX19iLGE9Yy5fX3Isdj1jLmRpZmZlZCxsPWMuX19jLG09Yy51bm1vdW50LHM9Yy5fXztmdW5jdGlvbiBwKG4sdCl7Yy5fX2gmJmMuX19oKHIsbixvfHx0KSxvPTA7dmFyIHU9ci5fX0h8fChyLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuIG4+PXUuX18ubGVuZ3RoJiZ1Ll9fLnB1c2goe30pLHUuX19bbl19ZnVuY3Rpb24gZChuKXtyZXR1cm4gbz0xLGgoRCxuKX1mdW5jdGlvbiBoKG4sdSxpKXt2YXIgbz1wKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6RCh2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIuX19mKSl7dmFyIGY9ZnVuY3Rpb24obix0LHIpe2lmKCFvLl9fYy5fX0gpcmV0dXJuITA7dmFyIHU9by5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5fX2N9KTtpZih1LmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiFuLl9fTn0pKXJldHVybiFjfHxjLmNhbGwodGhpcyxuLHQscik7dmFyIGk9by5fX2MucHJvcHMhPT1uO3JldHVybiB1LnNvbWUoZnVuY3Rpb24obil7aWYobi5fX04pe3ZhciB0PW4uX19bMF07bi5fXz1uLl9fTixuLl9fTj12b2lkIDAsdCE9PW4uX19bMF0mJihpPSEwKX19KSxjJiZjLmNhbGwodGhpcyxuLHQscil8fGl9O3IuX19mPSEwO3ZhciBjPXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlLGU9ci5jb21wb25lbnRXaWxsVXBkYXRlO3IuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihuLHQscil7aWYodGhpcy5fX2Upe3ZhciB1PWM7Yz12b2lkIDAsZihuLHQsciksYz11fWUmJmUuY2FsbCh0aGlzLG4sdCxyKX0sci5zaG91bGRDb21wb25lbnRVcGRhdGU9Zn1yZXR1cm4gby5fX058fG8uX199ZnVuY3Rpb24geShuLHUpe3ZhciBpPXAodCsrLDMpOyFjLl9fcyYmQyhpLl9fSCx1KSYmKGkuX189bixpLnU9dSxyLl9fSC5fX2gucHVzaChpKSl9ZnVuY3Rpb24gXyhuLHUpe3ZhciBpPXAodCsrLDQpOyFjLl9fcyYmQyhpLl9fSCx1KSYmKGkuX189bixpLnU9dSxyLl9faC5wdXNoKGkpKX1mdW5jdGlvbiBBKG4pe3JldHVybiBvPTUsVChmdW5jdGlvbigpe3JldHVybntjdXJyZW50Om59fSxbXSl9ZnVuY3Rpb24gRihuLHQscil7bz02LF8oZnVuY3Rpb24oKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXt2YXIgcj1uKHQoKSk7cmV0dXJuIGZ1bmN0aW9uKCl7bihudWxsKSxyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiZyKCl9fWlmKG4pcmV0dXJuIG4uY3VycmVudD10KCksZnVuY3Rpb24oKXtyZXR1cm4gbi5jdXJyZW50PW51bGx9fSxudWxsPT1yP3I6ci5jb25jYXQobikpfWZ1bmN0aW9uIFQobixyKXt2YXIgdT1wKHQrKyw3KTtyZXR1cm4gQyh1Ll9fSCxyKSYmKHUuX189bigpLHUuX19IPXIsdS5fX2g9biksdS5fX31mdW5jdGlvbiBxKG4sdCl7cmV0dXJuIG89OCxUKGZ1bmN0aW9uKCl7cmV0dXJuIG59LHQpfWZ1bmN0aW9uIHgobil7dmFyIHU9ci5jb250ZXh0W24uX19jXSxpPXAodCsrLDkpO3JldHVybiBpLmM9bix1PyhudWxsPT1pLl9fJiYoaS5fXz0hMCx1LnN1YihyKSksdS5wcm9wcy52YWx1ZSk6bi5fX31mdW5jdGlvbiBQKG4sdCl7Yy51c2VEZWJ1Z1ZhbHVlJiZjLnVzZURlYnVnVmFsdWUodD90KG4pOm4pfWZ1bmN0aW9uIGIobil7dmFyIHU9cCh0KyssMTApLGk9ZCgpO3JldHVybiB1Ll9fPW4sci5jb21wb25lbnREaWRDYXRjaHx8KHIuY29tcG9uZW50RGlkQ2F0Y2g9ZnVuY3Rpb24obix0KXt1Ll9fJiZ1Ll9fKG4sdCksaVsxXShuKX0pLFtpWzBdLGZ1bmN0aW9uKCl7aVsxXSh2b2lkIDApfV19ZnVuY3Rpb24gZygpe3ZhciBuPXAodCsrLDExKTtpZighbi5fXyl7Zm9yKHZhciB1PXIuX192O251bGwhPT11JiYhdS5fX20mJm51bGwhPT11Ll9fOyl1PXUuX187dmFyIGk9dS5fX218fCh1Ll9fbT1bMCwwXSk7bi5fXz1cIlBcIitpWzBdK1wiLVwiK2lbMV0rK31yZXR1cm4gbi5fX31mdW5jdGlvbiBqKCl7Zm9yKHZhciBuO249Zi5zaGlmdCgpOyl7dmFyIHQ9bi5fX0g7aWYobi5fX1AmJnQpdHJ5e3QuX19oLnNvbWUoeiksdC5fX2guc29tZShCKSx0Ll9faD1bXX1jYXRjaChyKXt0Ll9faD1bXSxjLl9fZShyLG4uX192KX19fWMuX19iPWZ1bmN0aW9uKG4pe3I9bnVsbCxlJiZlKG4pfSxjLl9fPWZ1bmN0aW9uKG4sdCl7biYmdC5fX2smJnQuX19rLl9fbSYmKG4uX19tPXQuX19rLl9fbSkscyYmcyhuLHQpfSxjLl9fcj1mdW5jdGlvbihuKXthJiZhKG4pLHQ9MDt2YXIgaT0ocj1uLl9fYykuX19IO2kmJih1PT09cj8oaS5fX2g9W10sci5fX2g9W10saS5fXy5zb21lKGZ1bmN0aW9uKG4pe24uX19OJiYobi5fXz1uLl9fTiksbi51PW4uX19OPXZvaWQgMH0pKTooaS5fX2guc29tZSh6KSxpLl9faC5zb21lKEIpLGkuX19oPVtdLHQ9MCkpLHU9cn0sYy5kaWZmZWQ9ZnVuY3Rpb24obil7diYmdihuKTt2YXIgdD1uLl9fYzt0JiZ0Ll9fSCYmKHQuX19ILl9faC5sZW5ndGgmJigxIT09Zi5wdXNoKHQpJiZpPT09Yy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoaT1jLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fHcpKGopKSx0Ll9fSC5fXy5zb21lKGZ1bmN0aW9uKG4pe24udSYmKG4uX19IPW4udSksbi51PXZvaWQgMH0pKSx1PXI9bnVsbH0sYy5fX2M9ZnVuY3Rpb24obix0KXt0LnNvbWUoZnVuY3Rpb24obil7dHJ5e24uX19oLnNvbWUoeiksbi5fX2g9bi5fX2guZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiFuLl9ffHxCKG4pfSl9Y2F0Y2gocil7dC5zb21lKGZ1bmN0aW9uKG4pe24uX19oJiYobi5fX2g9W10pfSksdD1bXSxjLl9fZShyLG4uX192KX19KSxsJiZsKG4sdCl9LGMudW5tb3VudD1mdW5jdGlvbihuKXttJiZtKG4pO3ZhciB0LHI9bi5fX2M7ciYmci5fX0gmJihyLl9fSC5fXy5zb21lKGZ1bmN0aW9uKG4pe3RyeXt6KG4pfWNhdGNoKG4pe3Q9bn19KSxyLl9fSD12b2lkIDAsdCYmYy5fX2UodCxyLl9fdikpfTt2YXIgaz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gdyhuKXt2YXIgdCxyPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHUpLGsmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQpLHNldFRpbWVvdXQobil9LHU9c2V0VGltZW91dChyLDM1KTtrJiYodD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocikpfWZ1bmN0aW9uIHoobil7dmFyIHQ9cix1PW4uX19jO1wiZnVuY3Rpb25cIj09dHlwZW9mIHUmJihuLl9fYz12b2lkIDAsdSgpKSxyPXR9ZnVuY3Rpb24gQihuKXt2YXIgdD1yO24uX19jPW4uX18oKSxyPXR9ZnVuY3Rpb24gQyhuLHQpe3JldHVybiFufHxuLmxlbmd0aCE9PXQubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCE9PW5bcl19KX1mdW5jdGlvbiBEKG4sdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG4pOnR9ZXhwb3J0e3EgYXMgdXNlQ2FsbGJhY2sseCBhcyB1c2VDb250ZXh0LFAgYXMgdXNlRGVidWdWYWx1ZSx5IGFzIHVzZUVmZmVjdCxiIGFzIHVzZUVycm9yQm91bmRhcnksZyBhcyB1c2VJZCxGIGFzIHVzZUltcGVyYXRpdmVIYW5kbGUsXyBhcyB1c2VMYXlvdXRFZmZlY3QsVCBhcyB1c2VNZW1vLGggYXMgdXNlUmVkdWNlcixBIGFzIHVzZVJlZixkIGFzIHVzZVN0YXRlfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvb2tzLm1vZHVsZS5qcy5tYXBcbiIsCiAgICAidmFyIGk9U3ltYm9sLmZvcihcInByZWFjdC1zaWduYWxzXCIpO2Z1bmN0aW9uIHQoKXtpZighKHM+MSkpe3ZhciBpLHQ9ITE7IWZ1bmN0aW9uKCl7dmFyIGk9YztjPXZvaWQgMDt3aGlsZSh2b2lkIDAhPT1pKXtpZihpLlMudj09PWkudilpLlMuaT1pLmk7aT1pLm99fSgpO3doaWxlKHZvaWQgMCE9PWgpe3ZhciBuPWg7aD12b2lkIDA7disrO3doaWxlKHZvaWQgMCE9PW4pe3ZhciByPW4udTtuLnU9dm9pZCAwO24uZiY9LTM7aWYoISg4Jm4uZikmJncobikpdHJ5e24uYygpfWNhdGNoKG4pe2lmKCF0KXtpPW47dD0hMH19bj1yfX12PTA7cy0tO2lmKHQpdGhyb3cgaX1lbHNlIHMtLX1mdW5jdGlvbiBuKGkpe2lmKHM+MClyZXR1cm4gaSgpO2U9Kyt1O3MrKzt0cnl7cmV0dXJuIGkoKX1maW5hbGx5e3QoKX19dmFyIHI9dm9pZCAwO2Z1bmN0aW9uIG8oaSl7dmFyIHQ9cjtyPXZvaWQgMDt0cnl7cmV0dXJuIGkoKX1maW5hbGx5e3I9dH19dmFyIGYsaD12b2lkIDAscz0wLHY9MCx1PTAsZT0wLGM9dm9pZCAwLGQ9MDtmdW5jdGlvbiBhKGkpe2lmKHZvaWQgMCE9PXIpe3ZhciB0PWkubjtpZih2b2lkIDA9PT10fHx0LnQhPT1yKXt0PXtpOjAsUzppLHA6ci5zLG46dm9pZCAwLHQ6cixlOnZvaWQgMCx4OnZvaWQgMCxyOnR9O2lmKHZvaWQgMCE9PXIucylyLnMubj10O3Iucz10O2kubj10O2lmKDMyJnIuZilpLlModCk7cmV0dXJuIHR9ZWxzZSBpZigtMT09PXQuaSl7dC5pPTA7aWYodm9pZCAwIT09dC5uKXt0Lm4ucD10LnA7aWYodm9pZCAwIT09dC5wKXQucC5uPXQubjt0LnA9ci5zO3Qubj12b2lkIDA7ci5zLm49dDtyLnM9dH1yZXR1cm4gdH19fWZ1bmN0aW9uIGwoaSx0KXt0aGlzLnY9aTt0aGlzLmk9MDt0aGlzLm49dm9pZCAwO3RoaXMudD12b2lkIDA7dGhpcy5sPTA7dGhpcy5XPW51bGw9PXQ/dm9pZCAwOnQud2F0Y2hlZDt0aGlzLlo9bnVsbD09dD92b2lkIDA6dC51bndhdGNoZWQ7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZX1sLnByb3RvdHlwZS5icmFuZD1pO2wucHJvdG90eXBlLmg9ZnVuY3Rpb24oKXtyZXR1cm4hMH07bC5wcm90b3R5cGUuUz1mdW5jdGlvbihpKXt2YXIgdD10aGlzLG49dGhpcy50O2lmKG4hPT1pJiZ2b2lkIDA9PT1pLmUpe2kueD1uO3RoaXMudD1pO2lmKHZvaWQgMCE9PW4pbi5lPWk7ZWxzZSBvKGZ1bmN0aW9uKCl7dmFyIGk7bnVsbD09KGk9dC5XKXx8aS5jYWxsKHQpfSl9fTtsLnByb3RvdHlwZS5VPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXM7aWYodm9pZCAwIT09dGhpcy50KXt2YXIgbj1pLmUscj1pLng7aWYodm9pZCAwIT09bil7bi54PXI7aS5lPXZvaWQgMH1pZih2b2lkIDAhPT1yKXtyLmU9bjtpLng9dm9pZCAwfWlmKGk9PT10aGlzLnQpe3RoaXMudD1yO2lmKHZvaWQgMD09PXIpbyhmdW5jdGlvbigpe3ZhciBpO251bGw9PShpPXQuWil8fGkuY2FsbCh0KX0pfX19O2wucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihpKXt2YXIgdD10aGlzO3JldHVybiBqKGZ1bmN0aW9uKCl7dmFyIG49dC52YWx1ZSxvPXI7cj12b2lkIDA7dHJ5e2kobil9ZmluYWxseXtyPW99fSx7bmFtZTpcInN1YlwifSl9O2wucHJvdG90eXBlLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX07bC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZStcIlwifTtsLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX07bC5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3ZhciBpPXRoaXM7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gaS52YWx1ZX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsXCJ2YWx1ZVwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgaT1hKHRoaXMpO2lmKHZvaWQgMCE9PWkpaS5pPXRoaXMuaTtyZXR1cm4gdGhpcy52fSxzZXQ6ZnVuY3Rpb24oaSl7aWYoaSE9PXRoaXMudil7aWYodj4xMDApdGhyb3cgbmV3IEVycm9yKFwiQ3ljbGUgZGV0ZWN0ZWRcIik7IWZ1bmN0aW9uKGkpe2lmKDAhPT1zJiYwPT09dilpZihpLmwhPT1lKXtpLmw9ZTtjPXtTOmksdjppLnYsaTppLmksbzpjfX19KHRoaXMpO3RoaXMudj1pO3RoaXMuaSsrO2QrKztzKys7dHJ5e2Zvcih2YXIgbj10aGlzLnQ7dm9pZCAwIT09bjtuPW4ueCluLnQuTigpfWZpbmFsbHl7dCgpfX19fSk7ZnVuY3Rpb24geShpLHQpe3JldHVybiBuZXcgbChpLHQpfWZ1bmN0aW9uIHcoaSl7Zm9yKHZhciB0PWkuczt2b2lkIDAhPT10O3Q9dC5uKWlmKHQuUy5pIT09dC5pfHwhdC5TLmgoKXx8dC5TLmkhPT10LmkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gXyhpKXtmb3IodmFyIHQ9aS5zO3ZvaWQgMCE9PXQ7dD10Lm4pe3ZhciBuPXQuUy5uO2lmKHZvaWQgMCE9PW4pdC5yPW47dC5TLm49dDt0Lmk9LTE7aWYodm9pZCAwPT09dC5uKXtpLnM9dDticmVha319fWZ1bmN0aW9uIGIoaSl7dmFyIHQ9aS5zLG49dm9pZCAwO3doaWxlKHZvaWQgMCE9PXQpe3ZhciByPXQucDtpZigtMT09PXQuaSl7dC5TLlUodCk7aWYodm9pZCAwIT09cilyLm49dC5uO2lmKHZvaWQgMCE9PXQubil0Lm4ucD1yfWVsc2Ugbj10O3QuUy5uPXQucjtpZih2b2lkIDAhPT10LnIpdC5yPXZvaWQgMDt0PXJ9aS5zPW59ZnVuY3Rpb24gcChpLHQpe2wuY2FsbCh0aGlzLHZvaWQgMCk7dGhpcy54PWk7dGhpcy5zPXZvaWQgMDt0aGlzLmc9ZC0xO3RoaXMuZj00O3RoaXMuVz1udWxsPT10P3ZvaWQgMDp0LndhdGNoZWQ7dGhpcy5aPW51bGw9PXQ/dm9pZCAwOnQudW53YXRjaGVkO3RoaXMubmFtZT1udWxsPT10P3ZvaWQgMDp0Lm5hbWV9cC5wcm90b3R5cGU9bmV3IGw7cC5wcm90b3R5cGUuaD1mdW5jdGlvbigpe3RoaXMuZiY9LTM7aWYoMSZ0aGlzLmYpcmV0dXJuITE7aWYoMzI9PSgzNiZ0aGlzLmYpKXJldHVybiEwO3RoaXMuZiY9LTU7aWYodGhpcy5nPT09ZClyZXR1cm4hMDt0aGlzLmc9ZDt0aGlzLmZ8PTE7aWYodGhpcy5pPjAmJiF3KHRoaXMpKXt0aGlzLmYmPS0yO3JldHVybiEwfXZhciBpPXI7dHJ5e18odGhpcyk7cj10aGlzO3ZhciB0PXRoaXMueCgpO2lmKDE2JnRoaXMuZnx8dGhpcy52IT09dHx8MD09PXRoaXMuaSl7dGhpcy52PXQ7dGhpcy5mJj0tMTc7dGhpcy5pKyt9fWNhdGNoKGkpe3RoaXMudj1pO3RoaXMuZnw9MTY7dGhpcy5pKyt9cj1pO2IodGhpcyk7dGhpcy5mJj0tMjtyZXR1cm4hMH07cC5wcm90b3R5cGUuUz1mdW5jdGlvbihpKXtpZih2b2lkIDA9PT10aGlzLnQpe3RoaXMuZnw9MzY7Zm9yKHZhciB0PXRoaXMuczt2b2lkIDAhPT10O3Q9dC5uKXQuUy5TKHQpfWwucHJvdG90eXBlLlMuY2FsbCh0aGlzLGkpfTtwLnByb3RvdHlwZS5VPWZ1bmN0aW9uKGkpe2lmKHZvaWQgMCE9PXRoaXMudCl7bC5wcm90b3R5cGUuVS5jYWxsKHRoaXMsaSk7aWYodm9pZCAwPT09dGhpcy50KXt0aGlzLmYmPS0zMztmb3IodmFyIHQ9dGhpcy5zO3ZvaWQgMCE9PXQ7dD10Lm4pdC5TLlUodCl9fX07cC5wcm90b3R5cGUuTj1mdW5jdGlvbigpe2lmKCEoMiZ0aGlzLmYpKXt0aGlzLmZ8PTY7Zm9yKHZhciBpPXRoaXMudDt2b2lkIDAhPT1pO2k9aS54KWkudC5OKCl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsXCJ2YWx1ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtpZigxJnRoaXMuZil0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZFwiKTt2YXIgaT1hKHRoaXMpO3RoaXMuaCgpO2lmKHZvaWQgMCE9PWkpaS5pPXRoaXMuaTtpZigxNiZ0aGlzLmYpdGhyb3cgdGhpcy52O3JldHVybiB0aGlzLnZ9fSk7ZnVuY3Rpb24gZyhpLHQpe3JldHVybiBuZXcgcChpLHQpfWZ1bmN0aW9uIFMoaSl7dmFyIG49aS5tO2kubT12b2lkIDA7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7cysrO3ZhciBvPXI7cj12b2lkIDA7dHJ5e24oKX1jYXRjaCh0KXtpLmYmPS0yO2kuZnw9ODttKGkpO3Rocm93IHR9ZmluYWxseXtyPW87dCgpfX19ZnVuY3Rpb24gbShpKXtmb3IodmFyIHQ9aS5zO3ZvaWQgMCE9PXQ7dD10Lm4pdC5TLlUodCk7aS54PXZvaWQgMDtpLnM9dm9pZCAwO1MoaSl9ZnVuY3Rpb24geChpKXtpZihyIT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoXCJPdXQtb2Ytb3JkZXIgZWZmZWN0XCIpO2IodGhpcyk7cj1pO3RoaXMuZiY9LTI7aWYoOCZ0aGlzLmYpbSh0aGlzKTt0KCl9ZnVuY3Rpb24gRShpLHQpe3RoaXMueD1pO3RoaXMubT12b2lkIDA7dGhpcy5zPXZvaWQgMDt0aGlzLnU9dm9pZCAwO3RoaXMuZj0zMjt0aGlzLm5hbWU9bnVsbD09dD92b2lkIDA6dC5uYW1lO2lmKGYpZi5wdXNoKHRoaXMpfUUucHJvdG90eXBlLmM9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLlMoKTt0cnl7aWYoOCZ0aGlzLmYpcmV0dXJuO2lmKHZvaWQgMD09PXRoaXMueClyZXR1cm47dmFyIHQ9dGhpcy54KCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl0aGlzLm09dH1maW5hbGx5e2koKX19O0UucHJvdG90eXBlLlM9ZnVuY3Rpb24oKXtpZigxJnRoaXMuZil0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZFwiKTt0aGlzLmZ8PTE7dGhpcy5mJj0tOTtTKHRoaXMpO18odGhpcyk7cysrO3ZhciBpPXI7cj10aGlzO3JldHVybiB4LmJpbmQodGhpcyxpKX07RS5wcm90b3R5cGUuTj1mdW5jdGlvbigpe2lmKCEoMiZ0aGlzLmYpKXt0aGlzLmZ8PTI7dGhpcy51PWg7aD10aGlzfX07RS5wcm90b3R5cGUuZD1mdW5jdGlvbigpe3RoaXMuZnw9ODtpZighKDEmdGhpcy5mKSltKHRoaXMpfTtFLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5kKCl9O2Z1bmN0aW9uIGooaSx0KXt2YXIgbj1uZXcgRShpLHQpO3RyeXtuLmMoKX1jYXRjaChpKXtuLmQoKTt0aHJvdyBpfXZhciByPW4uZC5iaW5kKG4pO3JbU3ltYm9sLmRpc3Bvc2VdPXI7cmV0dXJuIHJ9ZnVuY3Rpb24gQyhpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMscj10aGlzO3JldHVybiBuKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseShyLFtdLnNsaWNlLmNhbGwodCkpfSl9KX19ZnVuY3Rpb24gTygpe3ZhciBpPWY7Zj1bXTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1mO2lmKGYmJmkpaT1pLmNvbmNhdChmKTtmPWk7cmV0dXJuIHR9fXZhciBrPWZ1bmN0aW9uKGkpe2Zvcih2YXIgdCBpbiBpKXt2YXIgbj1pW3RdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4paVt0XT1DKG4pO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIG4mJm51bGwhPT1uJiYhKFwiYnJhbmRcImluIG4pKWsobil9fTtmdW5jdGlvbiBUKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0LG4scj1PKCk7dHJ5e249aS5hcHBseSh2b2lkIDAsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1jYXRjaChpKXtmPXZvaWQgMDt0aHJvdyBpfWZpbmFsbHl7dD1yKCl9ayhuKTtuW1N5bWJvbC5kaXNwb3NlXT1DKGZ1bmN0aW9uKCl7aWYodClmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl0W2ldLmRpc3Bvc2UoKTt0PXZvaWQgMH0pO3JldHVybiBufX1leHBvcnR7cCBhcyBDb21wdXRlZCxFIGFzIEVmZmVjdCxsIGFzIFNpZ25hbCxDIGFzIGFjdGlvbixuIGFzIGJhdGNoLGcgYXMgY29tcHV0ZWQsVCBhcyBjcmVhdGVNb2RlbCxqIGFzIGVmZmVjdCx5IGFzIHNpZ25hbCxvIGFzIHVudHJhY2tlZH07Ly8jIHNvdXJjZU1hcHBpbmdVUkw9c2lnbmFscy1jb3JlLm1vZHVsZS5qcy5tYXBcbiIsCiAgICAiaW1wb3J0e0NvbXBvbmVudCBhcyBpLG9wdGlvbnMgYXMgbixpc1ZhbGlkRWxlbWVudCBhcyByLEZyYWdtZW50IGFzIHR9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZU1lbW8gYXMgbyx1c2VSZWYgYXMgZSx1c2VFZmZlY3QgYXMgZn1mcm9tXCJwcmVhY3QvaG9va3NcIjtpbXBvcnR7ZWZmZWN0IGFzIHUsU2lnbmFsIGFzIGEsY29tcHV0ZWQgYXMgYyxzaWduYWwgYXMgdixiYXRjaCBhcyBzfWZyb21cIkBwcmVhY3Qvc2lnbmFscy1jb3JlXCI7ZXhwb3J0e1NpZ25hbCxhY3Rpb24sYmF0Y2gsY29tcHV0ZWQsY3JlYXRlTW9kZWwsZWZmZWN0LHNpZ25hbCx1bnRyYWNrZWR9ZnJvbVwiQHByZWFjdC9zaWduYWxzLWNvcmVcIjt2YXIgbCxkLGgscD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiYhIXdpbmRvdy5fX1BSRUFDVF9TSUdOQUxTX0RFVlRPT0xTX18sbT1bXSxfPVtdO3UoZnVuY3Rpb24oKXtsPXRoaXMuTn0pKCk7ZnVuY3Rpb24gZyhpLHIpe25baV09ci5iaW5kKG51bGwsbltpXXx8ZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBiKGkpe2lmKGgpe3ZhciBuPWg7aD12b2lkIDA7bigpfWg9aSYmaS5TKCl9ZnVuY3Rpb24geShpKXt2YXIgbj10aGlzLHQ9aS5kYXRhLGU9dXNlU2lnbmFsKHQpO2UudmFsdWU9dDt2YXIgZj1vKGZ1bmN0aW9uKCl7dmFyIGk9bix0PW4uX192O3doaWxlKHQ9dC5fXylpZih0Ll9fYyl7dC5fX2MuX18kZnw9NDticmVha312YXIgbz1jKGZ1bmN0aW9uKCl7dmFyIGk9ZS52YWx1ZS52YWx1ZTtyZXR1cm4gMD09PWk/MDohMD09PWk/XCJcIjppfHxcIlwifSksZj1jKGZ1bmN0aW9uKCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoby52YWx1ZSkmJiFyKG8udmFsdWUpfSksYT11KGZ1bmN0aW9uKCl7dGhpcy5OPUY7aWYoZi52YWx1ZSl7dmFyIG49by52YWx1ZTtpZihpLl9fdiYmaS5fX3YuX19lJiYzPT09aS5fX3YuX19lLm5vZGVUeXBlKWkuX192Ll9fZS5kYXRhPW59fSksdj1uLl9fJHUuZDtuLl9fJHUuZD1mdW5jdGlvbigpe2EoKTt2LmNhbGwodGhpcyl9O3JldHVybltmLG9dfSxbXSksYT1mWzBdLHY9ZlsxXTtyZXR1cm4gYS52YWx1ZT92LnBlZWsoKTp2LnZhbHVlfXkuZGlzcGxheU5hbWU9XCJSZWFjdGl2ZVRleHROb2RlXCI7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOntjb25maWd1cmFibGU6ITAsdmFsdWU6dm9pZCAwfSx0eXBlOntjb25maWd1cmFibGU6ITAsdmFsdWU6eX0scHJvcHM6e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3JldHVybntkYXRhOntnZXQgdmFsdWUoKXtyZXR1cm4gaS52YWx1ZX19fX19LF9fYjp7Y29uZmlndXJhYmxlOiEwLHZhbHVlOjF9fSk7ZyhcIl9fYlwiLGZ1bmN0aW9uKGksbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSl7dmFyIHIsdD1uLnByb3BzO2Zvcih2YXIgbyBpbiB0KWlmKFwiY2hpbGRyZW5cIiE9PW8pe3ZhciBlPXRbb107aWYoZSBpbnN0YW5jZW9mIGEpe2lmKCFyKW4uX19ucD1yPXt9O3Jbb109ZTt0W29dPWUucGVlaygpfX19aShuKX0pO2coXCJfX3JcIixmdW5jdGlvbihpLG4pe2kobik7aWYobi50eXBlIT09dCl7YigpO3ZhciByLG89bi5fX2M7aWYobyl7by5fXyRmJj0tMjtpZih2b2lkIDA9PT0ocj1vLl9fJHUpKW8uX18kdT1yPWZ1bmN0aW9uKGksbil7dmFyIHI7dShmdW5jdGlvbigpe3I9dGhpc30se25hbWU6bn0pO3IuYz1pO3JldHVybiByfShmdW5jdGlvbigpe3ZhciBpO2lmKHApbnVsbD09KGk9ci55KXx8aS5jYWxsKHIpO28uX18kZnw9MTtvLnNldFN0YXRlKHt9KX0sXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50eXBlP24udHlwZS5kaXNwbGF5TmFtZXx8bi50eXBlLm5hbWU6XCJcIil9ZD1vO2Iocil9fSk7ZyhcIl9fZVwiLGZ1bmN0aW9uKGksbixyLHQpe2IoKTtkPXZvaWQgMDtpKG4scix0KX0pO2coXCJkaWZmZWRcIixmdW5jdGlvbihpLG4pe2IoKTtkPXZvaWQgMDt2YXIgcjtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiYocj1uLl9fZSkpe3ZhciB0PW4uX19ucCxvPW4ucHJvcHM7aWYodCl7dmFyIGU9ci5VO2lmKGUpZm9yKHZhciBmIGluIGUpe3ZhciB1PWVbZl07aWYodm9pZCAwIT09dSYmIShmIGluIHQpKXt1LmQoKTtlW2ZdPXZvaWQgMH19ZWxzZXtlPXt9O3IuVT1lfWZvcih2YXIgYSBpbiB0KXt2YXIgYz1lW2FdLHY9dFthXTtpZih2b2lkIDA9PT1jKXtjPXcocixhLHYpO2VbYV09Y31lbHNlIGMubyh2LG8pfWZvcih2YXIgcyBpbiB0KW9bc109dFtzXX19aShuKX0pO2Z1bmN0aW9uIHcoaSxuLHIsdCl7dmFyIG89biBpbiBpJiZ2b2lkIDA9PT1pLm93bmVyU1ZHRWxlbWVudCxlPXYociksZj1yLnBlZWsoKTtyZXR1cm57bzpmdW5jdGlvbihpLG4pe2UudmFsdWU9aTtmPWkucGVlaygpfSxkOnUoZnVuY3Rpb24oKXt0aGlzLk49Rjt2YXIgcj1lLnZhbHVlLnZhbHVlO2lmKGYhPT1yKXtmPXZvaWQgMDtpZihvKWlbbl09cjtlbHNlIGlmKG51bGwhPXImJighMSE9PXJ8fFwiLVwiPT09bls0XSkpaS5zZXRBdHRyaWJ1dGUobixyKTtlbHNlIGkucmVtb3ZlQXR0cmlidXRlKG4pfWVsc2UgZj12b2lkIDB9KX19ZyhcInVubW91bnRcIixmdW5jdGlvbihpLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUpe3ZhciByPW4uX19lO2lmKHIpe3ZhciB0PXIuVTtpZih0KXtyLlU9dm9pZCAwO2Zvcih2YXIgbyBpbiB0KXt2YXIgZT10W29dO2lmKGUpZS5kKCl9fX1uLl9fbnA9dm9pZCAwfWVsc2V7dmFyIGY9bi5fX2M7aWYoZil7dmFyIHU9Zi5fXyR1O2lmKHUpe2YuX18kdT12b2lkIDA7dS5kKCl9fX1pKG4pfSk7ZyhcIl9faFwiLGZ1bmN0aW9uKGksbixyLHQpe2lmKHQ8M3x8OT09PXQpbi5fXyRmfD0yO2kobixyLHQpfSk7aS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKGksbil7aWYodGhpcy5fX1IpcmV0dXJuITA7dmFyIHI9dGhpcy5fXyR1LHQ9ciYmdm9pZCAwIT09ci5zO2Zvcih2YXIgbyBpbiBuKXJldHVybiEwO2lmKHRoaXMuX19mfHxcImJvb2xlYW5cIj09dHlwZW9mIHRoaXMudSYmITA9PT10aGlzLnUpe3ZhciBlPTImdGhpcy5fXyRmO2lmKCEodHx8ZXx8NCZ0aGlzLl9fJGYpKXJldHVybiEwO2lmKDEmdGhpcy5fXyRmKXJldHVybiEwfWVsc2V7aWYoISh0fHw0JnRoaXMuX18kZikpcmV0dXJuITA7aWYoMyZ0aGlzLl9fJGYpcmV0dXJuITB9Zm9yKHZhciBmIGluIGkpaWYoXCJfX3NvdXJjZVwiIT09ZiYmaVtmXSE9PXRoaXMucHJvcHNbZl0pcmV0dXJuITA7Zm9yKHZhciB1IGluIHRoaXMucHJvcHMpaWYoISh1IGluIGkpKXJldHVybiEwO3JldHVybiExfTtmdW5jdGlvbiB1c2VTaWduYWwoaSxuKXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiB2KGksbil9LFtdKX1mdW5jdGlvbiB1c2VDb21wdXRlZChpLG4pe3ZhciByPWUoaSk7ci5jdXJyZW50PWk7ZC5fXyRmfD00O3JldHVybiBvKGZ1bmN0aW9uKCl7cmV0dXJuIGMoZnVuY3Rpb24oKXtyZXR1cm4gci5jdXJyZW50KCl9LG4pfSxbXSl9dmFyIGs9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9zZXRUaW1lb3V0OmZ1bmN0aW9uKGkpe3ZhciBuPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpO2NhbmNlbEFuaW1hdGlvbkZyYW1lKHQpO2koKX0scj1zZXRUaW1lb3V0KG4sMzUpLHQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSxxPWZ1bmN0aW9uKGkpe3F1ZXVlTWljcm90YXNrKGZ1bmN0aW9uKCl7cXVldWVNaWNyb3Rhc2soaSl9KX07ZnVuY3Rpb24gQSgpe3MoZnVuY3Rpb24oKXt2YXIgaTt3aGlsZShpPW0uc2hpZnQoKSlsLmNhbGwoaSl9KX1mdW5jdGlvbiBUKCl7aWYoMT09PW0ucHVzaCh0aGlzKSkobi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGspKEEpfWZ1bmN0aW9uIHgoKXtzKGZ1bmN0aW9uKCl7dmFyIGk7d2hpbGUoaT1fLnNoaWZ0KCkpbC5jYWxsKGkpfSl9ZnVuY3Rpb24gRigpe2lmKDE9PT1fLnB1c2godGhpcykpKG4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxxKSh4KX1mdW5jdGlvbiB1c2VTaWduYWxFZmZlY3QoaSxuKXt2YXIgcj1lKGkpO3IuY3VycmVudD1pO2YoZnVuY3Rpb24oKXtyZXR1cm4gdShmdW5jdGlvbigpe3RoaXMuTj1UO3JldHVybiByLmN1cnJlbnQoKX0sbil9LFtdKX1mdW5jdGlvbiBNKGkpe3ZhciBuPW8oZnVuY3Rpb24oKXtyZXR1cm4gaSgpfSxbXSk7ZihmdW5jdGlvbigpe3JldHVybiBuW1N5bWJvbC5kaXNwb3NlXX0sW25dKTtyZXR1cm4gbn1leHBvcnR7dXNlQ29tcHV0ZWQsTSBhcyB1c2VNb2RlbCx1c2VTaWduYWwsdXNlU2lnbmFsRWZmZWN0fTsvLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYWxzLm1vZHVsZS5qcy5tYXBcbiIsCiAgICAiLyoqXG4gKiBHbG9iYWwgZXJyb3Igc3VyZmFjZSBmb3IgYWN0aW9uIGhhbmRsZXJzLlxuICpcbiAqIEFjdGlvbnMgdGhhdCBmYWlsIHNldCB0aGUgZXJyb3JTdGF0ZSBzaWduYWwgdmlhIGBzdWJtaXRFcnJvcmA7IGEgYDxUb2FzdD5gXG4gKiBjb21wb25lbnQgY29uc3VtZXMgdGhhdCBzaWduYWwgYW5kIHJlbmRlcnMgYSBkaXNtaXNzYWJsZSBtZXNzYWdlLiBIYW5kbGVyc1xuICogdGhhdCBjYXRjaCBleHBlY3RlZCBmYWlsdXJlcyAodmFsaWRhdGlvbiwgcXVvdGEpIG1heSBjYWxsIGBzZXRFcnJvcmAgZGlyZWN0bHkuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuXG5leHBvcnQgdHlwZSBFcnJvclNldmVyaXR5ID0gXCJlcnJvclwiIHwgXCJ3YXJuaW5nXCIgfCBcImluZm9cIjtcblxuZXhwb3J0IHR5cGUgRXJyb3JFbnRyeSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXZlcml0eTogRXJyb3JTZXZlcml0eTtcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBlcnJvclN0YXRlID0gc2lnbmFsPEVycm9yRW50cnlbXT4oW10pO1xuXG5sZXQgbmV4dElkID0gMDtcbmZ1bmN0aW9uIGFsbG9jSWQoKTogc3RyaW5nIHtcbiAgbmV4dElkICs9IDE7XG4gIHJldHVybiBgcG9sbHktZXJyLSR7bmV4dElkfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcihcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBvcHRzOiB7IHNldmVyaXR5PzogRXJyb3JTZXZlcml0eTsgYWN0aW9uPzogc3RyaW5nIH0gPSB7fVxuKTogc3RyaW5nIHtcbiAgY29uc3QgZW50cnk6IEVycm9yRW50cnkgPSB7XG4gICAgaWQ6IGFsbG9jSWQoKSxcbiAgICBtZXNzYWdlLFxuICAgIHNldmVyaXR5OiBvcHRzLnNldmVyaXR5ID8/IFwiZXJyb3JcIixcbiAgICBhY3Rpb246IG9wdHMuYWN0aW9uLFxuICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgfTtcbiAgZXJyb3JTdGF0ZS52YWx1ZSA9IFsuLi5lcnJvclN0YXRlLnZhbHVlLCBlbnRyeV07XG4gIHJldHVybiBlbnRyeS5pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRXJyb3IoaWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICBlcnJvclN0YXRlLnZhbHVlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG4gIGVycm9yU3RhdGUudmFsdWUgPSBlcnJvclN0YXRlLnZhbHVlLmZpbHRlcigoZSkgPT4gZS5pZCAhPT0gaWQpO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIGFuIGFjdGlvbidzIGNhdGNoIGJsb2NrLlxuICogTG9ncyB0aGUgYWN0aW9uIG5hbWUgKyBlcnJvciBhbmQgc3VyZmFjZXMgYSB1c2VyLXZpc2libGUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Ym1pdEVycm9yKGFjdGlvbjogc3RyaW5nLCBlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICByZXR1cm4gc2V0RXJyb3IobWVzc2FnZSwgeyBhY3Rpb24sIHNldmVyaXR5OiBcImVycm9yXCIgfSk7XG59XG4iLAogICAgIi8qKlxuICogT3ZlcmxheSByZWdpc3RyeS5cbiAqXG4gKiBUcmFja3MgdGhlIHN0YWNrIG9mIG9wZW4gb3ZlcmxheXMgKG1vZGFscywgcG9wb3ZlcnMsIGNvbmZpcm0gZGlhbG9ncykgc29cbiAqIEVzY2FwZSBjYW4gY2xvc2UgdGhlIHRvcG1vc3QgYW5kIGBkYXRhLW92ZXJsYXktaWRgLWJhc2VkIERPTSBzY2FucyBoYXZlXG4gKiBhIG1pcnJvciBpbiBtZW1vcnkuIEVhY2ggZW50cnkgc3RvcmVzIGFuIGlkIHBsdXMgYW4gb3B0aW9uYWwgY2xvc2VcbiAqIGNhbGxiYWNrOyBgY2xvc2VUb3BPdmVybGF5YCBpbnZva2VzIHRoZSBjYWxsYmFjayBhbmQgcG9wcyB0aGUgZW50cnkuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuXG5leHBvcnQgdHlwZSBPdmVybGF5RW50cnkgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xufTtcblxuY29uc3Qgc3RhY2sgPSBzaWduYWw8T3ZlcmxheUVudHJ5W10+KFtdKTtcblxuLyoqIEN1cnJlbnQgb3ZlcmxheSBzdGFjayBhcyBhIHJlYWQtb25seSBzbmFwc2hvdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybGF5U3RhY2soKTogcmVhZG9ubHkgT3ZlcmxheUVudHJ5W10ge1xuICByZXR1cm4gc3RhY2sudmFsdWU7XG59XG5cbi8qKiBJcyBhbnkgb3ZlcmxheSBjdXJyZW50bHkgb3Blbj8gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNPcGVuT3ZlcmxheSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YWNrLnZhbHVlLmxlbmd0aCA+IDA7XG59XG5cbi8qKiBUaGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgdW5kZWZpbmVkIGlmIGVtcHR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvcE92ZXJsYXkoKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHN0YWNrLnZhbHVlO1xuICByZXR1cm4gc1tzLmxlbmd0aCAtIDFdO1xufVxuXG4vKiogUHVzaCBhbiBvdmVybGF5IG9udG8gdGhlIHN0YWNrLiBSZXR1cm5zIHRoZSBwb3BwZWQgZW50cnkgd2hlbiBjbG9zZWQuICovXG5leHBvcnQgZnVuY3Rpb24gcHVzaE92ZXJsYXkoZW50cnk6IE92ZXJsYXlFbnRyeSk6IHZvaWQge1xuICBzdGFjay52YWx1ZSA9IFsuLi5zdGFjay52YWx1ZSwgZW50cnldO1xufVxuXG4vKiogUG9wIGEgc3BlY2lmaWMgb3ZlcmxheSBieSBpZCAob3IgdGhlIHRvcCBpZiBubyBpZCBnaXZlbikuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wT3ZlcmxheShpZD86IHN0cmluZyk6IE92ZXJsYXlFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHMgPSBzdGFjay52YWx1ZTtcbiAgaWYgKHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHRvcCA9IHNbcy5sZW5ndGggLSAxXTtcbiAgICBzdGFjay52YWx1ZSA9IHMuc2xpY2UoMCwgLTEpO1xuICAgIHJldHVybiB0b3A7XG4gIH1cbiAgY29uc3QgaWR4ID0gcy5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVudHJ5ID0gc1tpZHhdO1xuICBzdGFjay52YWx1ZSA9IFsuLi5zLnNsaWNlKDAsIGlkeCksIC4uLnMuc2xpY2UoaWR4ICsgMSldO1xuICByZXR1cm4gZW50cnk7XG59XG5cbi8qKiBDbG9zZSB0aGUgdG9wIG92ZXJsYXkgYnkgY2FsbGluZyBpdHMgb25DbG9zZSBhbmQgcG9wcGluZyBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVRvcE92ZXJsYXkoKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9wID0gdG9wT3ZlcmxheSgpO1xuICBpZiAoIXRvcCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdG9wLm9uQ2xvc2U/LigpO1xuICByZXR1cm4gcG9wT3ZlcmxheSh0b3AuaWQpO1xufVxuXG4vKiogUmVzZXQgdGhlIHN0YWNrLiBJbnRlbmRlZCBmb3IgdGVzdHMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRPdmVybGF5U3RhY2soKTogdm9pZCB7XG4gIHN0YWNrLnZhbHVlID0gW107XG59XG4iLAogICAgIi8qKlxuICogRXZlbnQgZGVsZWdhdGlvbiBjb3JlLlxuICpcbiAqIE9uZSBkb2N1bWVudCBsaXN0ZW5lciBkaXNwYXRjaGVzIGBkYXRhLWFjdGlvbmAgZXZlbnRzIHRvIHR5cGVkIGhhbmRsZXJzLlxuICogV2Fsa3MgdXAgdGhlIERPTSB3aXRoIGBjbG9zZXN0KCdbZGF0YS1hY3Rpb25dJylgLCBwYXJzZXMgYGRhdGEtYWN0aW9uLSpgXG4gKiBhdHRyaWJ1dGVzIGludG8gYSBjYW1lbENhc2Ugb2JqZWN0LCBhbmQgaGFuZHMgdGhlIGRpc3BhdGNoIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogRm9ybXMgYXJlIHNraXBwZWQgb24gY2xpY2sg4oCUIGEgYDxmb3JtIGRhdGEtYWN0aW9uPVwiLi4uXCI+YCByZXNwb25kcyB0b1xuICogc3VibWl0IG9ubHksIHNvIGNsaWNrcyBvbiBmb3JtIGNoaWxkcmVuIGRvbid0IGJ1YmJsZSBpbnRvIGl0cyBhY3Rpb24uXG4gKiBFc2NhcGUgY2xvc2VzIHRoZSB0b3Btb3N0IG92ZXJsYXkgYnkgY2FsbGluZyB0aGUgb3ZlcmxheSByZWdpc3RyeS5cbiAqIEVudGVyL1NwYWNlIG9uIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cyB3aXRoIGBkYXRhLWFjdGlvbmAgZmlyZSB0aGVcbiAqIGFjdGlvbiAoU3BhY2UgaXMgcHJldmVudGVkIHRvIHN0b3AgcGFnZSBzY3JvbGwpLiBDbGljayBvdXRzaWRlIGFueVxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFsc28gcG9wcyB0aGUgdG9wIG92ZXJsYXkuXG4gKi9cblxuaW1wb3J0IHsgY2xvc2VUb3BPdmVybGF5IGFzIGNsb3NlVG9wUmVnaXN0cnlPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheS50c1wiO1xuXG4vKiogRWxlbWVudHMgdGhhdCBuYXRpdmVseSBmaXJlIGNsaWNrIG9uIEVudGVyL1NwYWNlLiAqL1xuZXhwb3J0IGNvbnN0IElOVEVSQUNUSVZFX1RBR1MgPSBuZXcgU2V0KFtcIkJVVFRPTlwiLCBcIkFcIiwgXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdKTtcblxuLyoqIEV2ZW50IHR5cGVzIHRoYXQgbWF5IHRyaWdnZXIgYSBkYXRhLWFjdGlvbiBkaXNwYXRjaC4gKi9cbmV4cG9ydCBjb25zdCBBQ1RJT05fRVZFTlRfVFlQRVMgPSBuZXcgU2V0KFtcImNsaWNrXCIsIFwic3VibWl0XCIsIFwiY2hhbmdlXCIsIFwiaW5wdXRcIl0pO1xuXG4vKiogUGFyc2VkIGFjdGlvbiBkaXNwYXRjaCDigJQgd2hhdCB0aGUgcnVudGltZSByZXNvbHZlcyBiZWZvcmUgaW52b2tpbmcgYSBoYW5kbGVyLiAqL1xuZXhwb3J0IHR5cGUgQWN0aW9uRGlzcGF0Y2ggPSB7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgZXZlbnQ6IEV2ZW50O1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuLyoqXG4gKiBQYXJzZSBgZGF0YS1hY3Rpb24tKmAgYXR0cmlidXRlcyBpbnRvIGNhbWVsQ2FzZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogYGRhdGEtYWN0aW9uLXRleHQtc2V0LWlkPVwiNDJcImAgYmVjb21lcyBgeyB0ZXh0U2V0SWQ6IFwiNDJcIiB9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWN0aW9uRGF0YShlbGVtZW50OiBIVE1MRWxlbWVudCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgYXR0ciBvZiBBcnJheS5mcm9tKGVsZW1lbnQuYXR0cmlidXRlcykpIHtcbiAgICBpZiAoYXR0ci5uYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLWFjdGlvbi1cIikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGF0dHIubmFtZVxuICAgICAgICAucmVwbGFjZShcImRhdGEtYWN0aW9uLVwiLCBcIlwiKVxuICAgICAgICAucmVwbGFjZSgvLShbYS16XSkvZywgKF9tOiBzdHJpbmcsIGxldHRlcjogc3RyaW5nKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKSk7XG4gICAgICBkYXRhW2tleV0gPSBhdHRyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBDbG9zZSB0aGUgdG9wbW9zdCBvdmVybGF5IGJ5IGRpc3BhdGNoaW5nIGBvdmVybGF5OmNsb3NlYCBvbiBpdHMgZWxlbWVudC5cbiAqIE92ZXJsYXlzIG1hcmsgdGhlbXNlbHZlcyB3aXRoIGBkYXRhLW92ZXJsYXktaWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VUb3BPdmVybGF5KCk6IHZvaWQge1xuICBjb25zdCBvdmVybGF5cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgXCJbZGF0YS1vdmVybGF5LWlkXTpwb3BvdmVyLW9wZW4sIGRpYWxvZ1tkYXRhLW92ZXJsYXktaWRdW29wZW5dXCJcbiAgKTtcbiAgaWYgKG92ZXJsYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBjb25zdCB0b3BPdmVybGF5ID0gb3ZlcmxheXNbb3ZlcmxheXMubGVuZ3RoIC0gMV07XG4gIGlmICghdG9wT3ZlcmxheSkgcmV0dXJuO1xuICB0b3BPdmVybGF5LmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KFwib3ZlcmxheTpjbG9zZVwiLCB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgZGV0YWlsOiB7IGlkOiB0b3BPdmVybGF5LmdldEF0dHJpYnV0ZShcImRhdGEtb3ZlcmxheS1pZFwiKSB9LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIERPTSBldmVudCB0byBhbiBBY3Rpb25EaXNwYXRjaCwgb3IgbnVsbCBpZiBubyBkYXRhLWFjdGlvbiBtYXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFjdGlvbihldmVudDogRXZlbnQpOiBBY3Rpb25EaXNwYXRjaCB8IG51bGwge1xuICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYWN0aW9uRWxlbWVudCA9IHRhcmdldC5jbG9zZXN0KFwiW2RhdGEtYWN0aW9uXVwiKTtcbiAgaWYgKCEoYWN0aW9uRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIG51bGw7XG4gIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgYWN0aW9uRWxlbWVudC50YWdOYW1lID09PSBcIkZPUk1cIikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFjdGlvbiA9IGFjdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hY3Rpb25cIik7XG4gIGlmICghYWN0aW9uKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBhY3Rpb24sXG4gICAgZWxlbWVudDogYWN0aW9uRWxlbWVudCxcbiAgICBldmVudCxcbiAgICBkYXRhOiBwYXJzZUFjdGlvbkRhdGEoYWN0aW9uRWxlbWVudCksXG4gIH07XG59XG5cbi8qKlxuICogSW5zdGFsbCBkb2N1bWVudC1sZXZlbCBsaXN0ZW5lcnMgZm9yIHRoZSBkZWxlZ2F0aW9uIHN5c3RlbS5cbiAqIFJldHVybnMgYSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgcmVtb3ZlcyBldmVyeSBsaXN0ZW5lciBpdCBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uKFxuICBvbkRpc3BhdGNoOiAoZGlzcGF0Y2g6IEFjdGlvbkRpc3BhdGNoKSA9PiB2b2lkLFxuICBvcHRpb25zOiB7IG9uRXNjYXBlPzogKCkgPT4gdm9pZDsgb25PdXRzaWRlT3ZlcmxheUNsaWNrPzogKCkgPT4gdm9pZCB9ID0ge31cbik6ICgpID0+IHZvaWQge1xuICBjb25zdCBoYW5kbGVBY3Rpb25FdmVudCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICBjb25zdCBkaXNwYXRjaCA9IHJlc29sdmVBY3Rpb24oZXZlbnQpO1xuICAgIGlmIChkaXNwYXRjaCkgb25EaXNwYXRjaChkaXNwYXRjaCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIGlmIChvcHRpb25zLm9uRXNjYXBlKSB7XG4gICAgICAgIG9wdGlvbnMub25Fc2NhcGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlVG9wUmVnaXN0cnlPdmVybGF5KCk7XG4gICAgICAgIGNsb3NlVG9wT3ZlcmxheSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgfHwgZXZlbnQua2V5ID09PSBcIiBcIikge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICAgIGlmIChJTlRFUkFDVElWRV9UQUdTLmhhcyh0YXJnZXQudGFnTmFtZSkpIHJldHVybjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gcmVzb2x2ZUFjdGlvbihldmVudCk7XG4gICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25EaXNwYXRjaChkaXNwYXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICghKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XG4gICAgY29uc3QgY2xpY2tlZE92ZXJsYXkgPSBldmVudC50YXJnZXQuY2xvc2VzdChcIltkYXRhLW92ZXJsYXktaWRdXCIpO1xuICAgIGlmIChjbGlja2VkT3ZlcmxheSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50YXJnZXQuY2xvc2VzdChcImJ1dHRvbltwb3BvdmVydGFyZ2V0XVwiKSkgcmV0dXJuO1xuICAgIGlmIChvcHRpb25zLm9uT3V0c2lkZU92ZXJsYXlDbGljaykge1xuICAgICAgb3B0aW9ucy5vbk91dHNpZGVPdmVybGF5Q2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkoKTtcbiAgICAgIGNsb3NlVG9wT3ZlcmxheSgpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBBQ1RJT05fRVZFTlRfVFlQRVMpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlQWN0aW9uRXZlbnQpO1xuICB9XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIGhhbmRsZU1vdXNlRG93bik7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBBQ1RJT05fRVZFTlRfVFlQRVMpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVBY3Rpb25FdmVudCk7XG4gICAgfVxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgaGFuZGxlTW91c2VEb3duKTtcbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBGb3JtIHByaW1pdGl2ZS5cbiAqXG4gKiBgY3JlYXRlRm9ybWAgcmV0dXJucyBhIHR5cGVkIGZvcm0gc3RvcmU6IHBlci1maWVsZCBzaWduYWxzLCBhbiBhZ2dyZWdhdGVkXG4gKiB2YWx1ZXMgc2lnbmFsLCBvcGVuL2Nsb3NlL3N1Ym1pdCBtZXRob2RzLCBhbmQgdGhyZWUgYXV0by1yZWdpc3RlcmVkIGFjdGlvblxuICogaGFuZGxlcnMgKGB7bmFtZX06b3BlbmAsIGB7bmFtZX06Y2xvc2VgLCBge25hbWV9OnN1Ym1pdGApIHRoYXQgY2FsbGVycyBzcHJlYWRcbiAqIGludG8gdGhlaXIgZ2xvYmFsIGFjdGlvbiByZWdpc3RyeS5cbiAqXG4gKiBMaWZlY3ljbGU6XG4gKiAgIG9wZW4gIOKGkiByZXNldHMgZmllbGRzIHRvIGluaXRpYWxWYWx1ZXMsIGFwcGxpZXMgb25PcGVuIG92ZXJyaWRlcyxcbiAqICAgICAgICAgICBzZXRzIGlzT3BlbiA9IHRydWUsIHJlY29yZHMgZGF0YS1hY3Rpb24tKiBkYXRhIGluIG9wZW5QYXJhbXNcbiAqICAgdHlwaW5nIOKGkiB1bmNvbnRyb2xsZWQgaW5wdXRzIGtlZXAgdGhlaXIgb3duIHN0YXRlOyBjb250cm9sbGVkIGlucHV0c1xuICogICAgICAgICAgIHdyaXRlIGZpZWxkcy5YLnZhbHVlIGRpcmVjdGx5XG4gKiAgIHN1Ym1pdCDihpIgcmVhZHMgRm9ybURhdGEgZnJvbSB0aGUgZm9ybSBlbGVtZW50LCBtZXJnZXMgaW50byBmaWVsZHMsXG4gKiAgICAgICAgICAgcnVucyBvcHRpb25hbCB2YWxpZGF0ZSwgY2FsbHMgdXNlciBvblN1Ym1pdCB3aXRoIGZpbmFsIHZhbHVlcyxcbiAqICAgICAgICAgICBjbG9zZXMgb24gc3VjY2Vzcywgc2V0cyBlcnJvclN0YXRlIG9uIGZhaWx1cmVcbiAqICAgY2xvc2UgIOKGkiByZXNldHMgYW5kIHNldHMgaXNPcGVuID0gZmFsc2VcbiAqICAgZ3VhcmQgIOKGkiBhdXRvbm9tb3VzIGVmZmVjdDsgaWYgZ3VhcmQoKSByZXR1cm5zIGZhbHNlIHdoaWxlIG9wZW4sIGNsb3NlKClcbiAqL1xuXG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCB0eXBlIFJlYWRvbmx5U2lnbmFsLCB0eXBlIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgc3VibWl0RXJyb3IgfSBmcm9tIFwiLi9lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWdpc3RyeSB9IGZyb20gXCIuL3JlZ2lzdHJ5LnRzXCI7XG5cbmZ1bmN0aW9uIGlzRm9ybUVsZW1lbnQodGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiB0YXJnZXQgaXMgSFRNTEZvcm1FbGVtZW50IHtcbiAgaWYgKCF0YXJnZXQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBIVE1MRm9ybUVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50O1xuICB9XG4gIGNvbnN0IHQgPSB0YXJnZXQgYXMgdW5rbm93biBhcyB7IHRhZ05hbWU/OiB1bmtub3duIH07XG4gIHJldHVybiB0eXBlb2YgdC50YWdOYW1lID09PSBcInN0cmluZ1wiICYmIHQudGFnTmFtZSA9PT0gXCJGT1JNXCI7XG59XG5cbmV4cG9ydCB0eXBlIEZvcm1PcGVuQ29udGV4dDxUU3RvcmVzPiA9IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgc3RvcmVzOiBUU3RvcmVzO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1Ym1pdENvbnRleHQ8VFZhbHVlcywgVFN0b3Jlcz4gPSB7XG4gIHZhbHVlczogVFZhbHVlcztcbiAgc3RvcmVzOiBUU3RvcmVzO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUNvbmZpZzxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIC8qKiBVc2VkIGFzIGFjdGlvbiBuYW1lc3BhY2U6IGB7bmFtZX06b3BlbmAsIGB7bmFtZX06Y2xvc2VgLCBge25hbWV9OnN1Ym1pdGAuICovXG4gIG5hbWU6IHN0cmluZztcbiAgaW5pdGlhbFZhbHVlczogVFZhbHVlcztcbiAgb25TdWJtaXQ6IChjdHg6IEZvcm1TdWJtaXRDb250ZXh0PFRWYWx1ZXMsIFRTdG9yZXM+KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEludm9rZWQgb24gb3BlbjsgcmV0dXJuIHBhcnRpYWwgb3ZlcnJpZGVzIHRvIHByZS1wb3B1bGF0ZSBmaWVsZHMuICovXG4gIG9uT3Blbj86IChjdHg6IEZvcm1PcGVuQ29udGV4dDxUU3RvcmVzPikgPT4gUGFydGlhbDxUVmFsdWVzPiB8IHVuZGVmaW5lZDtcbiAgLyoqIFJldHVybnMgZmFsc2Ugd2hpbGUgb3BlbiDihpIgZm9ybSBhdXRvLWNsb3NlcyAoZW50aXR5LWRlbGV0aW9uIGd1YXJkKS4gKi9cbiAgZ3VhcmQ/OiAoY3R4OiB7IHN0b3JlczogVFN0b3JlcyB9KSA9PiBib29sZWFuO1xuICAvKiogU3luY2hyb25vdXMgdmFsaWRhdGlvbi4gUmV0dXJuaW5nIGtleXMgYmxvY2tzIHN1Ym1pdC4gKi9cbiAgdmFsaWRhdGU/OiAodmFsdWVzOiBUVmFsdWVzKSA9PiBQYXJ0aWFsPFJlY29yZDxrZXlvZiBUVmFsdWVzLCBzdHJpbmc+PiB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3RvcmU8VFZhbHVlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIFRTdG9yZXM+ID0ge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzT3BlbjogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IHZhbHVlczogUmVhZG9ubHlTaWduYWw8VFZhbHVlcz47XG4gIHJlYWRvbmx5IGZpZWxkczogeyBbSyBpbiBrZXlvZiBUVmFsdWVzXTogU2lnbmFsPFRWYWx1ZXNbS10+IH07XG4gIHJlYWRvbmx5IGVycm9yczogUmVhZG9ubHlTaWduYWw8UGFydGlhbDxSZWNvcmQ8a2V5b2YgVFZhbHVlcywgc3RyaW5nPj4+O1xuICByZWFkb25seSBpc1N1Ym1pdHRpbmc6IFJlYWRvbmx5U2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBvcGVuUGFyYW1zOiBSZWFkb25seVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgb3BlbihvdmVycmlkZT86IFBhcnRpYWw8VFZhbHVlcz4sIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkO1xuICBjbG9zZSgpOiB2b2lkO1xuICBzdWJtaXQoZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBMYXRlLWJpbmRzIHN0b3JlczsgcmVxdWlyZWQgYmVmb3JlIGd1YXJkL29uT3Blbi9vblN1Ym1pdCBjYW4gYWNjZXNzIHN0b3Jlcy4gKi9cbiAgYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkO1xuICAvKiogQWN0aW9uIGhhbmRsZXIgZW50cmllcy4gU3ByZWFkIGludG8gdGhlIHVzZXIncyBBY3Rpb25SZWdpc3RyeS4gKi9cbiAgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybTxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4oXG4gIGNvbmZpZzogRm9ybUNvbmZpZzxUVmFsdWVzLCBUU3RvcmVzPlxuKTogRm9ybVN0b3JlPFRWYWx1ZXMsIFRTdG9yZXM+IHtcbiAgY29uc3QgZmllbGRLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnLmluaXRpYWxWYWx1ZXMpIGFzIHVua25vd24gYXMgKGtleW9mIFRWYWx1ZXMpW107XG5cbiAgY29uc3QgZmllbGRzID0ge30gYXMgdW5rbm93biBhcyB7IFtLIGluIGtleW9mIFRWYWx1ZXNdOiBTaWduYWw8VFZhbHVlc1tLXT4gfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRLZXlzKSB7XG4gICAgZmllbGRzW2tleV0gPSBzaWduYWwoY29uZmlnLmluaXRpYWxWYWx1ZXNba2V5XSk7XG4gIH1cblxuICBjb25zdCB2YWx1ZXMgPSBjb21wdXRlZDxUVmFsdWVzPigoKSA9PiB7XG4gICAgY29uc3QgdiA9IHt9IGFzIHVua25vd24gYXMgVFZhbHVlcztcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICAgIHZba2V5XSA9IGZpZWxkc1trZXldLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfSk7XG5cbiAgY29uc3QgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgaXNTdWJtaXR0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgZXJyb3JzID0gc2lnbmFsPFBhcnRpYWw8UmVjb3JkPGtleW9mIFRWYWx1ZXMsIHN0cmluZz4+Pih7fSk7XG4gIGNvbnN0IG9wZW5QYXJhbXMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuXG4gIGxldCBnZXRTdG9yZXNSZWY6ICgoKSA9PiBUU3RvcmVzKSB8IG51bGwgPSBudWxsO1xuICBsZXQgZGlzcG9zZUd1YXJkRWZmZWN0OiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBmdW5jdGlvbiBnZXRTdG9yZXNPclRocm93KCk6IFRTdG9yZXMge1xuICAgIGlmICghZ2V0U3RvcmVzUmVmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGb3JtIFwiJHtjb25maWcubmFtZX1cIiB1c2VkIGJlZm9yZSBiaW5kU3RvcmVzKCkuIENhbGwgZm9ybS5iaW5kU3RvcmVzKCgpID0+IHlvdXJTdG9yZXMpIGF0IGFwcCBpbml0LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdG9yZXNSZWYoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VG9Jbml0aWFsKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgZmllbGRzW2tleV0udmFsdWUgPSBjb25maWcuaW5pdGlhbFZhbHVlc1trZXldO1xuICAgIH1cbiAgICBlcnJvcnMudmFsdWUgPSB7fTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBvcGVuIGFwcGxpZXMgdHdvIGxheWVycyBvZiBvdmVycmlkZXMgcGx1cyBvcHRpb25hbCBvbk9wZW4g4oCUIGJyYW5jaHkgYnkgZGVzaWduLlxuICBmdW5jdGlvbiBvcGVuKG92ZXJyaWRlPzogUGFydGlhbDxUVmFsdWVzPiwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30pOiB2b2lkIHtcbiAgICByZXNldFRvSW5pdGlhbCgpO1xuICAgIG9wZW5QYXJhbXMudmFsdWUgPSBwYXJhbXM7XG4gICAgaWYgKGNvbmZpZy5vbk9wZW4gJiYgZ2V0U3RvcmVzUmVmKSB7XG4gICAgICBjb25zdCBvbk9wZW5PdmVycmlkZSA9IGNvbmZpZy5vbk9wZW4oeyBkYXRhOiBwYXJhbXMsIHN0b3JlczogZ2V0U3RvcmVzT3JUaHJvdygpIH0pID8/IHt9O1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob25PcGVuT3ZlcnJpZGUpKSB7XG4gICAgICAgIGlmIChrIGluIGZpZWxkcykge1xuICAgICAgICAgIGZpZWxkc1trIGFzIGtleW9mIFRWYWx1ZXNdLnZhbHVlID0gdiBhcyBUVmFsdWVzW2tleW9mIFRWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3ZlcnJpZGUpKSB7XG4gICAgICAgIGlmIChrIGluIGZpZWxkcykge1xuICAgICAgICAgIGZpZWxkc1trIGFzIGtleW9mIFRWYWx1ZXNdLnZhbHVlID0gdiBhcyBUVmFsdWVzW2tleW9mIFRWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlzT3Blbi52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkIHtcbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICByZXNldFRvSW5pdGlhbCgpO1xuICAgIG9wZW5QYXJhbXMudmFsdWUgPSB7fTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBzdWJtaXQgZnVubmVscyBGb3JtRGF0YSwgdmFsaWRhdGUsIG9uU3VibWl0LCBlcnJvclN0YXRlLCBhbmQgY2xvc2Ug4oCUIG9uZS1wYXRoLXBlci1zdGFnZSBieSBkZXNpZ24uXG4gIGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudCAmJiBpc0Zvcm1FbGVtZW50KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKGV2ZW50LnRhcmdldCk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICAgICAgY29uc3QgcmF3ID0gZmQuZ2V0KGtleSBhcyB1bmtub3duIGFzIHN0cmluZyk7XG4gICAgICAgIGlmIChyYXcgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWVsZHNba2V5XS52YWx1ZSA9IFN0cmluZyhyYXcpIGFzIHVua25vd24gYXMgVFZhbHVlc1t0eXBlb2Yga2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjdXJyZW50ID0gdmFsdWVzLnZhbHVlO1xuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSBjb25maWcudmFsaWRhdGU/LihjdXJyZW50KTtcbiAgICBpZiAodmFsaWRhdGlvbkVycm9ycyAmJiBPYmplY3Qua2V5cyh2YWxpZGF0aW9uRXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICBlcnJvcnMudmFsdWUgPSB2YWxpZGF0aW9uRXJyb3JzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlcnJvcnMudmFsdWUgPSB7fTtcbiAgICBpc1N1Ym1pdHRpbmcudmFsdWUgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb25maWcub25TdWJtaXQoe1xuICAgICAgICB2YWx1ZXM6IGN1cnJlbnQsXG4gICAgICAgIHN0b3JlczogZ2V0U3RvcmVzT3JUaHJvdygpLFxuICAgICAgfSk7XG4gICAgICBjbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3VibWl0RXJyb3IoYCR7Y29uZmlnLm5hbWV9OnN1Ym1pdGAsIGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzU3VibWl0dGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbmRTdG9yZXMoZ2V0U3RvcmVzOiAoKSA9PiBUU3RvcmVzKTogdm9pZCB7XG4gICAgZ2V0U3RvcmVzUmVmID0gZ2V0U3RvcmVzO1xuICAgIGRpc3Bvc2VHdWFyZEVmZmVjdD8uKCk7XG4gICAgY29uc3QgZ3VhcmRGbiA9IGNvbmZpZy5ndWFyZDtcbiAgICBpZiAoZ3VhcmRGbikge1xuICAgICAgZGlzcG9zZUd1YXJkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFpc09wZW4udmFsdWUpIHJldHVybjtcbiAgICAgICAgaWYgKCFndWFyZEZuKHsgc3RvcmVzOiBnZXRTdG9yZXMoKSB9KSkgY2xvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFjdGlvbnM6IEFjdGlvblJlZ2lzdHJ5PFRTdG9yZXM+ID0ge1xuICAgIFtgJHtjb25maWcubmFtZX06b3BlbmBdOiAoeyBkYXRhIH0pID0+IHtcbiAgICAgIG9wZW4odW5kZWZpbmVkLCBkYXRhKTtcbiAgICB9LFxuICAgIFtgJHtjb25maWcubmFtZX06Y2xvc2VgXTogKCkgPT4ge1xuICAgICAgY2xvc2UoKTtcbiAgICB9LFxuICAgIFtgJHtjb25maWcubmFtZX06c3VibWl0YF06IGFzeW5jICh7IGV2ZW50IH0pID0+IHtcbiAgICAgIGF3YWl0IHN1Ym1pdChldmVudCk7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgIGlzT3BlbixcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRzLFxuICAgIGVycm9ycyxcbiAgICBpc1N1Ym1pdHRpbmcsXG4gICAgb3BlblBhcmFtcyxcbiAgICBvcGVuLFxuICAgIGNsb3NlLFxuICAgIHN1Ym1pdCxcbiAgICBiaW5kU3RvcmVzLFxuICAgIGFjdGlvbnMsXG4gIH07XG59XG5cbi8qKlxuICogQ29tcG9zZSBtYW55IGZvcm1zIGludG8gYSBzaW5nbGUgc2V0OiBtZXJnZWQgYWN0aW9ucywgY2xvc2VBbGwsIG9wZW5Gb3JtIHNpZ25hbC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVNldDxUU3RvcmVzPiA9IHtcbiAgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz47XG4gIG9wZW5Gb3JtOiBSZWFkb25seVNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbiAgY2xvc2VBbGwoKTogdm9pZDtcbiAgYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1TZXQ8VFN0b3Jlcz4oXG4gIGZvcm1zOiByZWFkb25seSBGb3JtU3RvcmU8UmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz5bXVxuKTogRm9ybVNldDxUU3RvcmVzPiB7XG4gIGNvbnN0IG1lcmdlZDogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz4gPSB7fTtcbiAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSB7XG4gICAgT2JqZWN0LmFzc2lnbihtZXJnZWQsIGZvcm0uYWN0aW9ucyk7XG4gIH1cblxuICBjb25zdCBvcGVuRm9ybSA9IGNvbXB1dGVkPHN0cmluZyB8IG51bGw+KCgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIHtcbiAgICAgIGlmIChmb3JtLmlzT3Blbi52YWx1ZSkgcmV0dXJuIGZvcm0ubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYWN0aW9uczogbWVyZ2VkLFxuICAgIG9wZW5Gb3JtLFxuICAgIGNsb3NlQWxsKCkge1xuICAgICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSBmb3JtLmNsb3NlKCk7XG4gICAgfSxcbiAgICBiaW5kU3RvcmVzKGdldFN0b3Jlcykge1xuICAgICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSBmb3JtLmJpbmRTdG9yZXMoZ2V0U3RvcmVzKTtcbiAgICB9LFxuICB9O1xufVxuIiwKICAgICJpbXBvcnR7b3B0aW9ucyBhcyByLEZyYWdtZW50IGFzIGV9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciB0PS9bXCImPF0vO2Z1bmN0aW9uIG4ocil7aWYoMD09PXIubGVuZ3RofHwhMT09PXQudGVzdChyKSlyZXR1cm4gcjtmb3IodmFyIGU9MCxuPTAsbz1cIlwiLGY9XCJcIjtuPHIubGVuZ3RoO24rKyl7c3dpdGNoKHIuY2hhckNvZGVBdChuKSl7Y2FzZSAzNDpmPVwiJnF1b3Q7XCI7YnJlYWs7Y2FzZSAzODpmPVwiJmFtcDtcIjticmVhaztjYXNlIDYwOmY9XCImbHQ7XCI7YnJlYWs7ZGVmYXVsdDpjb250aW51ZX1uIT09ZSYmKG8rPXIuc2xpY2UoZSxuKSksbys9ZixlPW4rMX1yZXR1cm4gbiE9PWUmJihvKz1yLnNsaWNlKGUsbikpLG99dmFyIG89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxmPTAsaT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHUoZSx0LG4sbyxpLHUpe3R8fCh0PXt9KTt2YXIgYSxjLHA9dDtpZihcInJlZlwiaW4gcClmb3IoYyBpbiBwPXt9LHQpXCJyZWZcIj09Yz9hPXRbY106cFtjXT10W2NdO3ZhciBsPXt0eXBlOmUscHJvcHM6cCxrZXk6bixyZWY6YSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1mLF9faTotMSxfX3U6MCxfX3NvdXJjZTppLF9fc2VsZjp1fTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoYT1lLmRlZmF1bHRQcm9wcykpZm9yKGMgaW4gYSl2b2lkIDA9PT1wW2NdJiYocFtjXT1hW2NdKTtyZXR1cm4gci52bm9kZSYmci52bm9kZShsKSxsfWZ1bmN0aW9uIGEocil7dmFyIHQ9dShlLHt0cGw6cixleHByczpbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKX0pO3JldHVybiB0LmtleT10Ll9fdix0fXZhciBjPXt9LHA9L1tBLVpdL2c7ZnVuY3Rpb24gbChlLHQpe2lmKHIuYXR0cil7dmFyIGY9ci5hdHRyKGUsdCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGYpcmV0dXJuIGZ9aWYodD1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9PXImJlwib2JqZWN0XCI9PXR5cGVvZiByJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnZhbHVlT2Y/ci52YWx1ZU9mKCk6cn0odCksXCJyZWZcIj09PWV8fFwia2V5XCI9PT1lKXJldHVyblwiXCI7aWYoXCJzdHlsZVwiPT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIHQpe3ZhciBpPVwiXCI7Zm9yKHZhciB1IGluIHQpe3ZhciBhPXRbdV07aWYobnVsbCE9YSYmXCJcIiE9PWEpe3ZhciBsPVwiLVwiPT11WzBdP3U6Y1t1XXx8KGNbdV09dS5yZXBsYWNlKHAsXCItJCZcIikudG9Mb3dlckNhc2UoKSkscz1cIjtcIjtcIm51bWJlclwiIT10eXBlb2YgYXx8bC5zdGFydHNXaXRoKFwiLS1cIil8fG8udGVzdChsKXx8KHM9XCJweDtcIiksaT1pK2wrXCI6XCIrYStzfX1yZXR1cm4gZSsnPVwiJytuKGkpKydcIid9cmV0dXJuIG51bGw9PXR8fCExPT09dHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdHx8XCJvYmplY3RcIj09dHlwZW9mIHQ/XCJcIjohMD09PXQ/ZTplKyc9XCInK24oXCJcIit0KSsnXCInfWZ1bmN0aW9uIHMocil7aWYobnVsbD09cnx8XCJib29sZWFuXCI9PXR5cGVvZiByfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXJldHVybiBudWxsO2lmKFwib2JqZWN0XCI9PXR5cGVvZiByKXtpZih2b2lkIDA9PT1yLmNvbnN0cnVjdG9yKXJldHVybiByO2lmKGkocikpe2Zvcih2YXIgZT0wO2U8ci5sZW5ndGg7ZSsrKXJbZV09cyhyW2VdKTtyZXR1cm4gcn19cmV0dXJuIG4oXCJcIityKX1leHBvcnR7dSBhcyBqc3gsbCBhcyBqc3hBdHRyLHUgYXMganN4REVWLHMgYXMganN4RXNjYXBlLGEgYXMganN4VGVtcGxhdGUsdSBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIFN0b3JlIGJhc2UgKyBQcmVhY3QgY29udGV4dC5cbiAqXG4gKiBgY3JlYXRlU3RvcmVgIGlzIGEgdGhpbiBjb252ZW50aW9uLWVuZm9yY2VyOiBhIHR5cGVkIGJhZyBvZiBzaWduYWxzXG4gKiBwbHVzIG1ldGhvZHMuIEFwcHMgdXNlIGl0IHRvIGRlZmluZSBkb21haW4gc3RvcmVzIHdob3NlIG9ubHkgcHVibGljXG4gKiBtdXRhdGlvbiBzdXJmYWNlIGlzIG5hbWVkIG1ldGhvZHMgKGFjdGlvbnMgY2FsbCB0aGVtOyBjb21wb25lbnRzIHJlYWRcbiAqIHNpZ25hbHMgYW5kIGRpc3BhdGNoIGFjdGlvbnMpLiBObyBjbGV2ZXJuZXNzIOKAlCBhIG5hbWVkIHBhdHRlcm4gbW9yZVxuICogdGhhbiBhIGxpYnJhcnkuXG4gKlxuICogYFN0b3JlUHJvdmlkZXJgICsgYHVzZVN0b3Jlc2Agd2lyZSB0aGUgc3RvcmVzIGJhZyBpbnRvIFByZWFjdCBjb250ZXh0XG4gKiBzbyBjb21wb25lbnRzIGFuZCB0aGUgZGVsZWdhdGlvbiBydW50aW1lIGNhbiByZWFjaCBpdCB2aWEgYSBzaW5nbGUgaG9vay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5cbi8qKlxuICogSWRlbnRpdHkgaGVscGVyOyBleGlzdHMgc28gZG9tYWluIHN0b3JlcyBoYXZlIGEgY2Fub25pY2FsIGNyZWF0aW9uXG4gKiBjYWxsIGV2ZW4gdGhvdWdoIHRoZSBiYWcgaXRzZWxmIGlzIGEgcGxhaW4gb2JqZWN0LiBDZW50cmFsaXNpbmcgaGVyZVxuICogbGV0cyB1cyBoYW5nIGFkZGl0aW9uYWwgYmVoYXZpb3VyIG9mZiB0aGUgY2FsbCBzaXRlIGxhdGVyIChkZWJ1Z1xuICogaW5zdHJ1bWVudGF0aW9uLCBkZXZ0b29scykgd2l0aG91dCBhIG1pZ3JhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQgZXh0ZW5kcyBvYmplY3Q+KGluaXQ6IFQpOiBUIHtcbiAgcmV0dXJuIGluaXQ7XG59XG5cbmNvbnN0IFN0b3JlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8dW5rbm93bj4obnVsbCk7XG5cbmV4cG9ydCB0eXBlIFN0b3JlUHJvdmlkZXJQcm9wczxUU3RvcmVzPiA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gU3RvcmVQcm92aWRlcjxUU3RvcmVzPih7IGNoaWxkcmVuLCBzdG9yZXMgfTogU3RvcmVQcm92aWRlclByb3BzPFRTdG9yZXM+KSB7XG4gIHJldHVybiA8U3RvcmVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzdG9yZXN9PntjaGlsZHJlbn08L1N0b3JlQ29udGV4dC5Qcm92aWRlcj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdG9yZXM8VFN0b3Jlcz4oKTogVFN0b3JlcyB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoU3RvcmVDb250ZXh0KSBhcyB1bmtub3duIGFzIFRTdG9yZXMgfCBudWxsO1xuICBpZiAoY3R4ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlU3RvcmVzIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBTdG9yZVByb3ZpZGVyXCIpO1xuICB9XG4gIHJldHVybiBjdHg7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9uRm9ybSDigJQgd3JhcHMgYSBuYXRpdmUgPGZvcm0+IHdpdGggdGhlIGFjdGlvbiBwYXR0ZXJuLlxuICpcbiAqIFJlbmRlcnMgPGZvcm0gZGF0YS1hY3Rpb249XCJ7Zm9ybS5uYW1lfTpzdWJtaXRcIj4gc28gdGhlIGluc3RhbGxlZFxuICogZXZlbnQgZGVsZWdhdGlvbiBjYXRjaGVzIHRoZSBzdWJtaXQgZXZlbnQgYW5kIGRpc3BhdGNoZXMgdG8gdGhlXG4gKiBmb3JtJ3MgYXV0by1yZWdpc3RlcmVkIDpzdWJtaXQgaGFuZGxlci4gYGFyaWEtYnVzeWAgbWlycm9ycyB0aGVcbiAqIGBpc1N1Ym1pdHRpbmdgIHNpZ25hbCBzbyBjb25zdW1lciBzdHlsaW5nIGNhbiByZXNwb25kIHdpdGhvdXQgZXh0cmFcbiAqIHdpcmluZy4gVGhlIGZvcm0gZWxlbWVudCBhbHNvIGV4cG9zZXMgYGRhdGEtcG9sbHktYWN0aW9uLWZvcm1gIGZvclxuICogc3RhYmxlIHNlbGVjdG9yIGhvb2tzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgRm9ybVN0b3JlIH0gZnJvbSBcIi4uL2FjdGlvbnMvZm9ybS50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQWN0aW9uRm9ybS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkZvcm1Qcm9wczxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIGZvcm06IEZvcm1TdG9yZTxUVmFsdWVzLCBUU3RvcmVzPjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25Gb3JtPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPihcbiAgcHJvcHM6IEFjdGlvbkZvcm1Qcm9wczxUVmFsdWVzLCBUU3RvcmVzPlxuKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGZvcm0sIGNoaWxkcmVuLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgY29tYmluZWQgPSBjbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wiZm9ybVwiXX0gJHtjbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJmb3JtXCJdO1xuICByZXR1cm4gKFxuICAgIDxmb3JtXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17Y29tYmluZWR9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1mb3JtPXtmb3JtLm5hbWV9XG4gICAgICBkYXRhLWFjdGlvbj17YCR7Zm9ybS5uYW1lfTpzdWJtaXRgfVxuICAgICAgYXJpYS1idXN5PXtmb3JtLmlzU3VibWl0dGluZy52YWx1ZX1cbiAgICAgIGFyaWEtbGFiZWw9e3Byb3BzW1wiYXJpYS1sYWJlbFwiXX1cbiAgICAgIGFyaWEtbGFiZWxsZWRieT17cHJvcHNbXCJhcmlhLWxhYmVsbGVkYnlcIl19XG4gICAgICBub1ZhbGlkYXRlXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZm9ybT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBGaXJlIGEgbmFtZWQgYWN0aW9uIHRocm91Z2ggdGhlIGdsb2JhbCBldmVudC1kZWxlZ2F0aW9uIHJlZ2lzdHJ5LlxuICpcbiAqIFRoZSBBY3Rpb24qIHByaW1pdGl2ZXMgKDxBY3Rpb25JbnB1dD4sIDxBY3Rpb25TZWxlY3Q+KSBjb21taXQgYnlcbiAqIGNsaWNraW5nIGEgZGV0YWNoZWQgYDxidXR0b24gZGF0YS1hY3Rpb249XCLigKZcIj5gIGNhcnJ5aW5nIGRhdGEtYWN0aW9uLSpcbiAqIGF0dHJpYnV0ZXM7IHRoZSBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXIgcm91dGVzIGl0IGludG8gdGhlXG4gKiBjb25zdW1lcidzIGFjdGlvbiByZWdpc3RyeSB3aXRoIG5vIGV4dHJhIHdpcmluZy4gQ2VudHJhbGlzZWQgaGVyZSBzb1xuICogZXZlcnkgQWN0aW9uKiBwcmltaXRpdmUgZGlzcGF0Y2hlcyBpZGVudGljYWxseS5cbiAqXG4gKiBLZXlzIGluIGBkYXRhYCBhcmUgY2FtZWxDYXNlIGFuZCBjb252ZXJ0ZWQgdG8gZGFzaC1jYXNlIGF0dHJpYnV0ZVxuICogbmFtZXMg4oCUIGBhY3Rpb25EYXRhPXt7IHRhc2tJZCB9fWAgYmVjb21lcyBgZGF0YS1hY3Rpb24tdGFzay1pZGAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uKGFjdGlvbjogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gIGNvbnN0IGhpZGRlbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gIGhpZGRlbi5zZXRBdHRyaWJ1dGUoXCJkYXRhLWFjdGlvblwiLCBhY3Rpb24pO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgIGNvbnN0IGRhc2hLZXkgPSBrZXkucmVwbGFjZSgvW0EtWl0vZywgKG0pID0+IGAtJHttLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgaGlkZGVuLnNldEF0dHJpYnV0ZShgZGF0YS1hY3Rpb24tJHtkYXNoS2V5fWAsIHZhbHVlKTtcbiAgfVxuICBoaWRkZW4uc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gIGhpZGRlbi5zdHlsZS5vcGFjaXR5ID0gXCIwXCI7XG4gIGhpZGRlbi5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XG4gIGhpZGRlbi50YWJJbmRleCA9IC0xO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhpZGRlbik7XG4gIHRyeSB7XG4gICAgaGlkZGVuLmNsaWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaGlkZGVuLnJlbW92ZSgpO1xuICB9XG59XG4iLAogICAgIi8qKlxuICogcG9sbHkjMTI1OiBkYXRhLSogLyBhcmlhLSogYXR0cmlidXRlIHBhc3N0aHJvdWdoIGZvciBVSSBwcmltaXRpdmVzLlxuICpcbiAqIFByaW1pdGl2ZXMgYWNjZXB0IGEgZml4ZWQgcHJvcCBzZXQuIFdpdGhvdXQgcGFzc3Rocm91Z2gsIGEgY29uc3VtZXJcbiAqIHRoYXQgbmVlZHMgYSBgZGF0YS0qYCB0ZXN0IGhvb2sgb3IgYW4gYGFyaWEtKmAgYXR0cmlidXRlIG9uIHRoZVxuICogcHJpbWl0aXZlJ3Mgb3duIGVsZW1lbnQgaGFzIHRvIHdyYXAgaXQgaW4gYW4gZXh0cmEgRE9NIG5vZGUg4oCUIGEgc21lbGwuXG4gKlxuICoge0BsaW5rIFBhc3N0aHJvdWdoQXR0cnN9IHdpZGVucyBhIHByaW1pdGl2ZSdzIHByb3BzIHRvIGFjY2VwdCBhbnlcbiAqIGBkYXRhLSpgIC8gYGFyaWEtKmAga2V5OyB7QGxpbmsgY29sbGVjdFBhc3N0aHJvdWdofSBnYXRoZXJzIHRoZW0gZm9yXG4gKiBzcHJlYWRpbmcgb250byB0aGUgcmVuZGVyZWQgcm9vdCBlbGVtZW50LiBTcHJlYWQgdGhlIHJlc3VsdCAqYmVmb3JlKlxuICogdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHNvIGEgY29uc3VtZXIga2V5IGNhbiBuZXZlciBvdmVycmlkZVxuICogb25lIHRoZSBwcmltaXRpdmUgc2V0cyBpdHNlbGYgKGBkYXRhLXBvbGx5LSpgLCBldGMuKS5cbiAqL1xuXG4vKiogSW5kZXggc2lnbmF0dXJlcyBsZXR0aW5nIGEgcHJpbWl0aXZlJ3MgcHJvcHMgYWNjZXB0IGFyYml0cmFyeVxuICogIGBkYXRhLSpgIGFuZCBgYXJpYS0qYCBhdHRyaWJ1dGVzLCBwbHVzIHRoZSBzdGFuZGFyZCBgdGl0bGVgXG4gKiAgYXR0cmlidXRlIOKAlCBhIG5hdGl2ZSB0b29sdGlwIGlzIGEgRE9NIGhvb2ssIG5vdCBzdHlsaW5nLCBzbyBpdFxuICogIHJpZGVzIHRoZSBzYW1lIHBhc3N0aHJvdWdoIHBhdGggKHBvbGx5IzEzNSkuICovXG5leHBvcnQgdHlwZSBQYXNzdGhyb3VnaEF0dHJzID0ge1xuICBbZGF0YUF0dHI6IGBkYXRhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBbYXJpYUF0dHI6IGBhcmlhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKiogTmF0aXZlIHRvb2x0aXAgdGV4dCwgZm9yd2FyZGVkIHRvIHRoZSByZW5kZXJlZCByb290IGVsZW1lbnQuICovXG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuLyoqIEtleXMsIGJleW9uZCB0aGUgYGRhdGEtKmAgLyBgYXJpYS0qYCBwcmVmaXhlcywgdGhhdCBwYXNzIHRocm91Z2guICovXG5mdW5jdGlvbiBpc1Bhc3N0aHJvdWdoS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBrZXkuc3RhcnRzV2l0aChcImRhdGEtXCIpIHx8IGtleS5zdGFydHNXaXRoKFwiYXJpYS1cIikgfHwga2V5ID09PSBcInRpdGxlXCI7XG59XG5cbi8qKlxuICogQ29sbGVjdCBgZGF0YS0qYCAvIGBhcmlhLSpgIC8gYHRpdGxlYCBhdHRyaWJ1dGVzIGZyb20gYSBwcm9wcyBvYmplY3RcbiAqIHNvIHRoZXkgY2FuIGJlIHNwcmVhZCBvbnRvIGEgcHJpbWl0aXZlJ3Mgcm9vdCBlbGVtZW50LiBgdW5kZWZpbmVkYFxuICogdmFsdWVzIGFuZCBub24tYXR0cmlidXRlIHZhbHVlIHR5cGVzIChmdW5jdGlvbnMsIG9iamVjdHMpIGFyZSBkcm9wcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFBhc3N0aHJvdWdoKFxuICBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+IHtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICBpZiAoIWlzUGFzc3Rocm91Z2hLZXkoa2V5KSkgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wc1trZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIG91dFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9uSW5wdXQg4oCUIGR1YWwtbW9kZSB2aWV3L2VkaXQgaW5wdXQgd2l0aCBhY3Rpb24gZGlzcGF0Y2ggb24gY29tbWl0LlxuICpcbiAqIFZpZXcgbW9kZSByZW5kZXJzIHRoZSBjdXJyZW50IHZhbHVlIGFzIHRleHQgKG9wdGlvbmFsbHkgdGhyb3VnaCBhXG4gKiBjYWxsZXItc3VwcGxpZWQgYHJlbmRlclZpZXdgIGZvciBtYXJrZG93biwgcmljaCBmb3JtYXR0aW5nLCBldGMuKS5cbiAqIENsaWNrLCBFbnRlciwgb3IgU3BhY2UgZW50ZXJzIGVkaXQgbW9kZS4gRWRpdCBtb2RlIGlzIGEgbmF0aXZlIGlucHV0XG4gKiBvciB0ZXh0YXJlYTsgY29tbWl0IGZpcmVzIHRoZSBjb25maWd1cmVkIGFjdGlvbiB3aXRoIGBkYXRhLWFjdGlvbi12YWx1ZWBcbiAqIGFuZCBgZGF0YS1hY3Rpb24tZmllbGRgIHNldCBmcm9tIEZvcm1EYXRhLXNoYXBlIHNlbWFudGljcywgc28gdGhlXG4gKiBleGlzdGluZyBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXMgaXQgd2l0aCBubyBleHRyYSB3aXJpbmcuXG4gKlxuICogYHNhdmVPbmAgcGlja3MgdGhlIGNvbW1pdCB0cmlnZ2VyOlxuICogICBcImJsdXJcIiAgICAgICBjb21taXQgd2hlbiB0aGUgZmllbGQgbG9zZXMgZm9jdXNcbiAqICAgXCJlbnRlclwiICAgICAgY29tbWl0IG9uIEVudGVyIChzaW5nbGUtbGluZSkgb3IgQ21kL0N0cmwrRW50ZXIgKG11bHRpLWxpbmUpXG4gKiAgIFwiY21kLWVudGVyXCIgIGNvbW1pdCBvbmx5IG9uIENtZC9DdHJsK0VudGVyXG4gKiAgIFwiZXhwbGljaXRcIiAgIG5ldmVyIGF1dG8tY29tbWl0IOKAlCBjYWxsZXIgd2lyZXMgYSBzYXZlIGJ1dHRvbiB3aXRoIGRhdGEtYWN0aW9uXG4gKiAgIFwiaW5wdXRcIiAgICAgIGNvbW1pdCBvbiBldmVyeSBrZXlzdHJva2Ug4oCUIGZvciBmaWx0ZXItYXMteW91LXR5cGUgZmllbGRzO1xuICogICAgICAgICAgICAgICAgdGhlIGZpZWxkIHN0YXlzIGluIGVkaXQgbW9kZSByYXRoZXIgdGhhbiB0b2dnbGluZyB0byB2aWV3XG4gKlxuICogYGlucHV0VHlwZWAgc2V0cyB0aGUgbmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50IOKAlFxuICogXCJ0ZXh0XCIgKGRlZmF1bHQpLCBcImRhdGVcIiwgXCJ0aW1lXCIsIFwibnVtYmVyXCIsIGFuZCBmcmllbmRzIOKAlCBzbyBhIGRhdGVcbiAqIG9yIG51bWVyaWMgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBhY3Rpb24gc3lzdGVtIGxpa2UgYW55IG90aGVyLlxuICpcbiAqIExheW91dC1zaGlmdC1mcmVlOiB2aWV3IGFuZCBlZGl0IG1vZGVzIHNoYXJlIHBhZGRpbmcsIGJvcmRlciB3aWR0aCxcbiAqIGZvbnQsIGFuZCBsaW5lLWhlaWdodCBzbyB0aGUgdG9nZ2xlIGNhdXNlcyBubyByZWZsb3cuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQWN0aW9uSW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRTYXZlT24gPSBcImJsdXJcIiB8IFwiZW50ZXJcIiB8IFwiY21kLWVudGVyXCIgfCBcImV4cGxpY2l0XCIgfCBcImlucHV0XCI7XG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFZhcmlhbnQgPSBcInNpbmdsZVwiIHwgXCJtdWx0aVwiO1xuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRUeXBlID1cbiAgfCBcInRleHRcIlxuICB8IFwiZGF0ZVwiXG4gIHwgXCJkYXRldGltZS1sb2NhbFwiXG4gIHwgXCJ0aW1lXCJcbiAgfCBcIm1vbnRoXCJcbiAgfCBcIndlZWtcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImVtYWlsXCJcbiAgfCBcInVybFwiXG4gIHwgXCJ0ZWxcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIC8qKiBDdXJyZW50IHZhbHVlIHRvIHJlbmRlciBpbiB2aWV3IG1vZGUgYW5kIHNlZWQgdGhlIGVkaXQgYnVmZmVyLiAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogQWN0aW9uIG5hbWUgdG8gZGlzcGF0Y2ggb24gY29tbWl0LiBSZWNlaXZlcyBkYXRhLWFjdGlvbi12YWx1ZT08bmV3IHZhbHVlPi4gKi9cbiAgYWN0aW9uOiBzdHJpbmc7XG4gIC8qKiBDb21taXQgdHJpZ2dlci4gRGVmYXVsdDogXCJibHVyXCIuICovXG4gIHNhdmVPbj86IEFjdGlvbklucHV0U2F2ZU9uO1xuICB2YXJpYW50PzogQWN0aW9uSW5wdXRWYXJpYW50O1xuICAvKiogTmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50LiBEZWZhdWx0OiBcInRleHRcIi4gKi9cbiAgaW5wdXRUeXBlPzogQWN0aW9uSW5wdXRUeXBlO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogRXh0cmEgZGF0YS1hY3Rpb24tKiBhdHRyaWJ1dGVzIHRvIGluY2x1ZGUgYXQgY29tbWl0IChlLmcuIGVudGl0eSBpZCkuICovXG4gIGFjdGlvbkRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogQ3VzdG9tIHZpZXcgcmVuZGVyZXIg4oCUIHJlY2VpdmVzIHZhbHVlLCByZXR1cm5zIFZOb2RlLiAqL1xuICByZW5kZXJWaWV3PzogKHZhbHVlOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50IHwgc3RyaW5nO1xuICAvKiogTGFiZWwgYW5ub3VuY2VkIGJ5IHNjcmVlbiByZWFkZXJzIGZvciB0aGUgZWRpdCBhZmZvcmRhbmNlLiAqL1xuICBhcmlhTGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiB0d28gcmVuZGVyIGJyYW5jaGVzIHRpbWVzIHR3byB2YXJpYW50cyB0aW1lcyBmaXZlIHNhdmVPbiB0cmlnZ2VyczsgYnJhbmNoaW5nIGlzIGluaGVyZW50IHRvIHRoZSBwcmltaXRpdmUuXG5leHBvcnQgZnVuY3Rpb24gQWN0aW9uSW5wdXQocHJvcHM6IEFjdGlvbklucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHZhcmlhbnQgPSBwcm9wcy52YXJpYW50ID8/IFwic2luZ2xlXCI7XG4gIGNvbnN0IHNhdmVPbiA9IHByb3BzLnNhdmVPbiA/PyBcImJsdXJcIjtcbiAgLy8gXCJpbnB1dFwiIG1vZGUgaXMgYSBwZXJtYW5lbnRseS1lZGl0YWJsZSBmaWx0ZXIgZmllbGQg4oCUIGl0IG5ldmVyIGhhcyBhXG4gIC8vIHZpZXcgbW9kZSB0byB0b2dnbGUgYmFjayB0bywgc28gaXQgc3RhcnRzIGluIGVkaXQuXG4gIGNvbnN0IGxpdmUgPSBzYXZlT24gPT09IFwiaW5wdXRcIjtcbiAgY29uc3QgW21vZGUsIHNldE1vZGVdID0gdXNlU3RhdGU8XCJ2aWV3XCIgfCBcImVkaXRcIj4obGl2ZSA/IFwiZWRpdFwiIDogXCJ2aWV3XCIpO1xuICBjb25zdCBbZHJhZnQsIHNldERyYWZ0XSA9IHVzZVN0YXRlKHByb3BzLnZhbHVlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RlID09PSBcInZpZXdcIikgc2V0RHJhZnQocHJvcHMudmFsdWUpO1xuICB9LCBbcHJvcHMudmFsdWUsIG1vZGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIERvbid0IHN0ZWFsIGZvY3VzIG9uIG1vdW50IGZvciBhIGxpdmUgZmlsdGVyIGZpZWxkOyBvbmx5IHB1bGwgZm9jdXNcbiAgICAvLyB3aGVuIHRoZSB1c2VyIGhhcyBleHBsaWNpdGx5IHRvZ2dsZWQgYSB2aWV3IGZpZWxkIGludG8gZWRpdCBtb2RlLlxuICAgIGlmIChtb2RlID09PSBcImVkaXRcIiAmJiAhbGl2ZSAmJiBpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnNlbGVjdD8uKCk7XG4gICAgfVxuICB9LCBbbW9kZSwgbGl2ZV0pO1xuXG4gIGNvbnN0IGVudGVyRWRpdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBzZXREcmFmdChwcm9wcy52YWx1ZSk7XG4gICAgc2V0TW9kZShcImVkaXRcIik7XG4gIH0sIFtwcm9wcy5kaXNhYmxlZCwgcHJvcHMudmFsdWVdKTtcblxuICBjb25zdCBjb21taXQgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobmV4dCAhPT0gcHJvcHMudmFsdWUpIHtcbiAgICAgICAgZGlzcGF0Y2hBY3Rpb24ocHJvcHMuYWN0aW9uLCB7IC4uLihwcm9wcy5hY3Rpb25EYXRhID8/IHt9KSwgdmFsdWU6IG5leHQgfSk7XG4gICAgICB9XG4gICAgICAvLyBBIGxpdmUgZmlsdGVyIGZpZWxkIHN0YXlzIGVkaXRhYmxlOyBldmVyeSBvdGhlciB0cmlnZ2VyIHJldHVybnNcbiAgICAgIC8vIHRvIHZpZXcgbW9kZSBvbmNlIHRoZSB2YWx1ZSBpcyBjb21taXR0ZWQuXG4gICAgICBpZiAoIWxpdmUpIHNldE1vZGUoXCJ2aWV3XCIpO1xuICAgIH0sXG4gICAgW3Byb3BzLmFjdGlvbiwgcHJvcHMuYWN0aW9uRGF0YSwgcHJvcHMudmFsdWUsIGxpdmVdXG4gICk7XG5cbiAgY29uc3QgY2FuY2VsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldERyYWZ0KHByb3BzLnZhbHVlKTtcbiAgICBpZiAoIWxpdmUpIHNldE1vZGUoXCJ2aWV3XCIpO1xuICB9LCBbcHJvcHMudmFsdWUsIGxpdmVdKTtcblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eToga2V5Ym9hcmQgaGFuZGxlciBlbmNvZGVzIHRoZSBzYXZlT24gw5cgdmFyaWFudCBtYXRyaXguXG4gIGNvbnN0IG9uS2V5RG93biA9IChldmVudDogSlNYLlRhcmdldGVkS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY2FuY2VsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgY29uc3QgY21kID0gZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5O1xuICAgICAgaWYgKHNhdmVPbiA9PT0gXCJlbnRlclwiICYmIHZhcmlhbnQgPT09IFwic2luZ2xlXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29tbWl0KGRyYWZ0KTtcbiAgICAgIH0gZWxzZSBpZiAoKHNhdmVPbiA9PT0gXCJlbnRlclwiICYmIHZhcmlhbnQgPT09IFwibXVsdGlcIiAmJiBjbWQpIHx8IHNhdmVPbiA9PT0gXCJjbWQtZW50ZXJcIikge1xuICAgICAgICBpZiAoY21kKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBjb21taXQoZHJhZnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJyb290XCJdfSAke3Byb3BzLmNsYXNzTmFtZX1gIDogY2xhc3Nlc1tcInJvb3RcIl07XG5cbiAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmb3J3YXJkZWQgb250byB3aGljaGV2ZXIgZWxlbWVudCBpcyB0aGUgcm9vdFxuICAvLyBmb3IgdGhlIGN1cnJlbnQgbW9kZTsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHdpbiBvbiBjb2xsaXNpb24uXG4gIGNvbnN0IHBhc3N0aHJvdWdoID0gY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKTtcblxuICBpZiAobW9kZSA9PT0gXCJ2aWV3XCIpIHtcbiAgICBjb25zdCByZW5kZXJlZCA9IHByb3BzLnJlbmRlclZpZXcgPyBwcm9wcy5yZW5kZXJWaWV3KHByb3BzLnZhbHVlKSA6IHByb3BzLnZhbHVlO1xuICAgIGNvbnN0IGlzRW1wdHkgPSBwcm9wcy52YWx1ZS5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogPGJ1dHRvbj4gd291bGQgc3dhbGxvdyB0ZXh0IHNlbGVjdGlvbiBhbmQgYWRkIGRlZmF1bHQgc3R5bGluZzsgZGl2IHdpdGggcm9sZT1idXR0b24gaXMgdGhlIGlubGluZS1lZGl0IGlkaW9tLlxuICAgICAgPGRpdlxuICAgICAgICB7Li4ucGFzc3Rocm91Z2h9XG4gICAgICAgIGNsYXNzPXtgJHtjbGFzc05hbWV9ICR7Y2xhc3Nlc1tcInZpZXdcIl19YH1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWFjdGlvbi1pbnB1dFxuICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgICAgICBkYXRhLXZhcmlhbnQ9e3ZhcmlhbnR9XG4gICAgICAgIHRhYkluZGV4PXtwcm9wcy5kaXNhYmxlZCA/IC0xIDogMH1cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9e3Byb3BzLmFyaWFMYWJlbCA/PyBcIkVkaXRcIn1cbiAgICAgICAgYXJpYS1kaXNhYmxlZD17cHJvcHMuZGlzYWJsZWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZH1cbiAgICAgICAgb25DbGljaz17ZW50ZXJFZGl0fVxuICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIgfHwgZS5rZXkgPT09IFwiIFwiKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlbnRlckVkaXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtpc0VtcHR5ICYmIHByb3BzLnBsYWNlaG9sZGVyID8gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wicGxhY2Vob2xkZXJcIl19Pntwcm9wcy5wbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgcmVuZGVyZWRcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBjb25zdCBjb21tb24gPSB7XG4gICAgLi4ucGFzc3Rocm91Z2gsXG4gICAgY2xhc3M6IGAke2NsYXNzZXNbXCJlZGl0XCJdfSAke2NsYXNzZXNbXCJyb290XCJdfWAsXG4gICAgXCJkYXRhLXBvbGx5LXVpXCI6IHRydWUsXG4gICAgXCJkYXRhLXBvbGx5LWFjdGlvbi1pbnB1dFwiOiB0cnVlLFxuICAgIFwiZGF0YS1zdGF0ZVwiOiBcImVkaXRpbmdcIixcbiAgICBcImRhdGEtdmFyaWFudFwiOiB2YXJpYW50LFxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICB2YWx1ZTogZHJhZnQsXG4gICAgb25JbnB1dDogKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgIHNldERyYWZ0KG5leHQpO1xuICAgICAgaWYgKGxpdmUpIGNvbW1pdChuZXh0KTtcbiAgICB9LFxuICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgaWYgKHNhdmVPbiA9PT0gXCJibHVyXCIpIGNvbW1pdChkcmFmdCk7XG4gICAgICBlbHNlIGlmICghbGl2ZSkgY2FuY2VsKCk7XG4gICAgfSxcbiAgICBvbktleURvd24sXG4gICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzLmFyaWFMYWJlbCA/PyBcIkVkaXRcIixcbiAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gIH07XG5cbiAgaWYgKHZhcmlhbnQgPT09IFwibXVsdGlcIikge1xuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50ID0gZWw7XG4gICAgICAgIH19XG4gICAgICAgIHsuLi4oY29tbW9uIGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxpbnB1dFxuICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudCA9IGVsO1xuICAgICAgfX1cbiAgICAgIHR5cGU9e3Byb3BzLmlucHV0VHlwZSA/PyBcInRleHRcIn1cbiAgICAgIHsuLi4oY29tbW9uIGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+KX1cbiAgICAvPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIExheW91dCDigJQgdGhlIG9uZSBwcmltaXRpdmUgdGhhdCBvd25zIGxheW91dGluZyBjb25jZXJucy5cbiAqXG4gKiBFdmVyeSBvdGhlciBjb21wb25lbnQgaW4gQGZhaXJmb3gvcG9sbHkvdWkgKGFuZCBldmVyeSBjb25zdW1lciBhcHBcbiAqIHRoYXQgcnVucyBgcG9sbHkgcXVhbGl0eSBjc3MtbGF5b3V0YCkgcm91dGVzIGZsZXgvZ3JpZCBkZWNpc2lvbnNcbiAqIHRocm91Z2ggdGhpcyBjb21wb25lbnQuIFByb3BzIG1hcCB0byBDU1MgY3VzdG9tIHByb3BlcnRpZXMgc28gdGhlXG4gKiBzdHlsZXNoZWV0IGNhbiByZWFkIHRoZW0gdW5pZm9ybWx5IGFuZCBzbyBjb25zdW1lcnMgY2FuIG92ZXJyaWRlXG4gKiBhbnkgb2YgdGhlbSBpbiBtZWRpYSBxdWVyaWVzIHdpdGhvdXQgdG91Y2hpbmcgc3BlY2lmaWNpdHkuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1gsIHR5cGUgUmVmIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vTGF5b3V0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKGRpdiwgc2VjdGlvbiwgaGVhZGVyLCBuYXYsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcblxuICAvKiogQ1NTIGdyaWQgc3RydWN0dXJlLiAqL1xuICByb3dzPzogc3RyaW5nO1xuICBjb2x1bW5zPzogc3RyaW5nO1xuICBhdXRvRmxvdz86IHN0cmluZztcbiAgYXV0b1Jvd3M/OiBzdHJpbmc7XG4gIGF1dG9Db2x1bW5zPzogc3RyaW5nO1xuXG4gIC8qKiBkaXNwbGF5OiBjb250ZW50cyDigJQgbGV0cyBjaGlsZHJlbiBwYXJ0aWNpcGF0ZSBpbiBhbiBhbmNlc3RvciBncmlkLiAqL1xuICBjb250ZW50cz86IGJvb2xlYW47XG4gIC8qKiBJbmhlcml0IHBhcmVudCBncmlkIHRyYWNrcyB2aWEgQ1NTIHN1YmdyaWQuICovXG4gIHN1YmdyaWQ/OiBib29sZWFuO1xuXG4gIC8qKiBTcGFjaW5nLiAqL1xuICBnYXA/OiBzdHJpbmc7XG4gIHBhZGRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIFNpemluZy4gKi9cbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDYXAgdGhlIGlubGluZSBzaXplIGFuZCBjZW50cmUgd2l0aGluIHRoZSBwYXJlbnQuIFR5cGljYWwgdmFsdWVzIHVzZSB0aGVcbiAgICogYC0tcG9sbHktbWVhc3VyZS0qYCB0b2tlbnMgKGUuZy4gXCJ2YXIoLS1wb2xseS1tZWFzdXJlLXBhZ2UpXCIgZm9yIGFuIGFwcFxuICAgKiBzaGVsbCwgXCJ2YXIoLS1wb2xseS1tZWFzdXJlLXByb3NlKVwiIGZvciBib2R5IGNvcHkpLiBBbnkgQ1NTIGxlbmd0aCB3b3Jrcy5cbiAgICovXG4gIG1heElubGluZVNpemU/OiBzdHJpbmc7XG5cbiAgLyoqIENvbnRhaW5lciBhbGlnbm1lbnQuICovXG4gIGp1c3RpZnlJdGVtcz86IHN0cmluZztcbiAgYWxpZ25JdGVtcz86IHN0cmluZztcbiAganVzdGlmeUNvbnRlbnQ/OiBzdHJpbmc7XG4gIGFsaWduQ29udGVudD86IHN0cmluZztcblxuICAvKiogU2VsZiBhbGlnbm1lbnQgKHdoZW4gdGhpcyBMYXlvdXQgaXMgYW4gaXRlbSBpbiBhIHBhcmVudCBncmlkKS4gKi9cbiAganVzdGlmeVNlbGY/OiBzdHJpbmc7XG4gIGFsaWduU2VsZj86IHN0cmluZztcblxuICAvKiogQ29sbGFwc2UgdG8gYSBzaW5nbGUgY29sdW1uIGF0IOKJpDY0MHB4LiAqL1xuICBzdGFja09uTW9iaWxlPzogYm9vbGVhbjtcblxuICAvKiogUmVuZGVyIGFzIGRpc3BsYXk6IGlubGluZS1ncmlkIHNvIHRoZSBMYXlvdXQgZmxvd3MgaW5saW5lIHdpdGggc3Vycm91bmRpbmcgdGV4dC9jb250cm9scy4gKi9cbiAgaW5saW5lPzogYm9vbGVhbjtcblxuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG9uQ2xpY2s/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbktleURvd24/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbktleVVwPzogSlNYLktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxFbGVtZW50PjtcbiAgLyoqIFBvaW50ZXItZW50ZXIvbGVhdmUgb24gdGhlIGNvbnRhaW5lciBpdHNlbGYg4oCUIGEgaG92ZXItc2NvcGVkIGJlaGF2aW91clxuICAgKiBzdWNoIGFzIHBhdXNpbmcgYSB0aW1lciB3aGlsZSB0aGUgcG9pbnRlciBpcyBvdmVyIGEgc3RhY2suIFdpdGhvdXQgdGhlc2VcbiAgICogYSBjb21wb25lbnQgdGhhdCBuZWVkcyBvbmUgaGFzIHRvIHJlbmRlciBpdHMgb3duIGVsZW1lbnQgYW5kIHdyaXRlIGl0c1xuICAgKiBvd24gZ3JpZCwgd2hpY2ggaXMgdGhlIGxvb3Bob2xlIDxMYXlvdXQ+IGV4aXN0cyB0byBjbG9zZS4gKi9cbiAgb25Nb3VzZUVudGVyPzogSlNYLk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxFbGVtZW50PjtcbiAgb25Nb3VzZUxlYXZlPzogSlNYLk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxFbGVtZW50PjtcbiAgLyoqIFJlZiB0byB0aGUgcmVuZGVyZWQgZWxlbWVudC4gU2FtZSByZWFzb24gYXMgdGhlIGhhbmRsZXJzIGFib3ZlOiBhIGZvY3VzXG4gICAqIHRyYXAgb3IgYSBtZWFzdXJlbWVudCBuZWVkcyB0aGUgbm9kZSwgYW5kIHJlZnVzaW5nIGl0IGZvcmNlcyByYXcgQ1NTLlxuICAgKlxuICAgKiBOYW1lZCBgZWxlbWVudFJlZmAsIG5vdCBgcmVmYDogUHJlYWN0IGxpZnRzIGEgYHJlZmAgcHJvcCBvZmYgYSBmdW5jdGlvblxuICAgKiBjb21wb25lbnQgaW50byB0aGUgdm5vZGUgYW5kIG5ldmVyIHBhc3NlcyBpdCB0aHJvdWdoIHByb3BzLCBzbyBhIHBsYWluXG4gICAqIGByZWZgIGhlcmUgd291bGQgYmUgc2lsZW50bHkgZHJvcHBlZC4gQ2F1Z2h0IGJ5IE1vZGFsJ3Mgb3ZlcmxheSB0ZXN0IOKAlFxuICAgKiB0aGUgc3RhY2sgc3RvcHBlZCBwb3BwaW5nIGJlY2F1c2UgdGhlIGNhbGxiYWNrIG5ldmVyIHJhbi4gKi9cbiAgZWxlbWVudFJlZj86IFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbiAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI/OiBzdHJpbmc7XG59O1xuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogc2l4dGVlbiBvcHRpb25hbCBwcm9wLXRvLWN1c3RvbS1wcm9wZXJ0eSBtYXBwaW5nczsgZmxhdCBhbmQgbGluZWFyLlxuZXhwb3J0IGZ1bmN0aW9uIExheW91dChwcm9wczogTGF5b3V0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBhcyA9IFwiZGl2XCIsXG4gICAgcm93cyxcbiAgICBjb2x1bW5zLFxuICAgIGNvbnRlbnRzLFxuICAgIHN1YmdyaWQsXG4gICAgZ2FwLFxuICAgIHBhZGRpbmcsXG4gICAgaGVpZ2h0LFxuICAgIG1pbkhlaWdodCxcbiAgICBtYXhJbmxpbmVTaXplLFxuICAgIGp1c3RpZnlJdGVtcyxcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGp1c3RpZnlDb250ZW50LFxuICAgIGFsaWduQ29udGVudCxcbiAgICBqdXN0aWZ5U2VsZixcbiAgICBhbGlnblNlbGYsXG4gICAgYXV0b0Zsb3csXG4gICAgYXV0b1Jvd3MsXG4gICAgYXV0b0NvbHVtbnMsXG4gICAgc3RhY2tPbk1vYmlsZSxcbiAgICBpbmxpbmUsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9uQ2xpY2ssXG4gICAgb25LZXlEb3duLFxuICAgIG9uS2V5VXAsXG4gICAgb25Nb3VzZUVudGVyLFxuICAgIG9uTW91c2VMZWF2ZSxcbiAgICBlbGVtZW50UmVmLFxuICAgIHJvbGUsXG4gICAgdGFiSW5kZXgsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGlmIChjb250ZW50cykge1xuICAgIHN0eWxlW1wiZGlzcGxheVwiXSA9IFwiY29udGVudHNcIjtcbiAgfSBlbHNlIGlmIChzdWJncmlkKSB7XG4gICAgc3R5bGVbXCItLWwtY29sXCJdID0gXCIxIC8gLTFcIjtcbiAgICBzdHlsZVtcIi0tbC1jb2xzXCJdID0gXCJzdWJncmlkXCI7XG4gICAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1sLXBcIl0gPSBwYWRkaW5nO1xuICAgIGlmIChhbGlnbkl0ZW1zKSBzdHlsZVtcIi0tbC1haVwiXSA9IGFsaWduSXRlbXM7XG4gICAgaWYgKGdhcCkgc3R5bGVbXCItLWwtZ2FwXCJdID0gZ2FwO1xuICB9IGVsc2Uge1xuICAgIGlmIChwYWRkaW5nKSBzdHlsZVtcIi0tbC1wXCJdID0gcGFkZGluZztcbiAgICBpZiAoaGVpZ2h0KSBzdHlsZVtcIi0tbC1oXCJdID0gaGVpZ2h0O1xuICAgIGlmIChtaW5IZWlnaHQpIHN0eWxlW1wiLS1sLW1oXCJdID0gbWluSGVpZ2h0O1xuICAgIGlmIChtYXhJbmxpbmVTaXplKSBzdHlsZVtcIi0tbC1taXNcIl0gPSBtYXhJbmxpbmVTaXplO1xuICAgIGlmIChyb3dzKSBzdHlsZVtcIi0tbC1yb3dzXCJdID0gcm93cztcbiAgICBpZiAoY29sdW1ucykgc3R5bGVbXCItLWwtY29sc1wiXSA9IGNvbHVtbnM7XG4gICAgaWYgKGdhcCkgc3R5bGVbXCItLWwtZ2FwXCJdID0gZ2FwO1xuICAgIGlmIChqdXN0aWZ5SXRlbXMpIHN0eWxlW1wiLS1sLWppXCJdID0ganVzdGlmeUl0ZW1zO1xuICAgIGlmIChhbGlnbkl0ZW1zKSBzdHlsZVtcIi0tbC1haVwiXSA9IGFsaWduSXRlbXM7XG4gICAgaWYgKGp1c3RpZnlDb250ZW50KSBzdHlsZVtcIi0tbC1qY1wiXSA9IGp1c3RpZnlDb250ZW50O1xuICAgIGlmIChhbGlnbkNvbnRlbnQpIHN0eWxlW1wiLS1sLWFjXCJdID0gYWxpZ25Db250ZW50O1xuICAgIGlmIChhdXRvRmxvdykgc3R5bGVbXCItLWwtZmxvd1wiXSA9IGF1dG9GbG93O1xuICAgIGlmIChhdXRvUm93cykgc3R5bGVbXCItLWwtYXJvd3NcIl0gPSBhdXRvUm93cztcbiAgICBpZiAoYXV0b0NvbHVtbnMpIHN0eWxlW1wiLS1sLWFjb2xzXCJdID0gYXV0b0NvbHVtbnM7XG4gIH1cbiAgaWYgKGp1c3RpZnlTZWxmKSBzdHlsZVtcIi0tbC1qc1wiXSA9IGp1c3RpZnlTZWxmO1xuICBpZiAoYWxpZ25TZWxmKSBzdHlsZVtcIi0tbC1hc1wiXSA9IGFsaWduU2VsZjtcblxuICBjb25zdCBiYXNlUGFydHMgPSBbY2xhc3Nlc1tcImxheW91dFwiXV07XG4gIGlmIChpbmxpbmUpIGJhc2VQYXJ0cy5wdXNoKGNsYXNzZXNbXCJpbmxpbmVcIl0pO1xuICBpZiAoc3RhY2tPbk1vYmlsZSkgYmFzZVBhcnRzLnB1c2goY2xhc3Nlc1tcInN0YWNrT25Nb2JpbGVcIl0pO1xuICBjb25zdCBiYXNlQ2xhc3MgPSBiYXNlUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICBjb25zdCBjb21iaW5lZCA9IGNvbnRlbnRzID8gY2xhc3NOYW1lIDogY2xhc3NOYW1lID8gYCR7YmFzZUNsYXNzfSAke2NsYXNzTmFtZX1gIDogYmFzZUNsYXNzO1xuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgIGFzLFxuICAgIHtcbiAgICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSovdGl0bGUgZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd25cbiAgICAgIC8vIGF0dHJpYnV0ZXMgYmVsb3cgd2luIG9uIGFueSBjb2xsaXNpb24uXG4gICAgICAuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpLFxuICAgICAgaWQsXG4gICAgICBjbGFzc05hbWU6IGNvbWJpbmVkLFxuICAgICAgc3R5bGUsXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25LZXlVcCxcbiAgICAgIG9uTW91c2VFbnRlcixcbiAgICAgIG9uTW91c2VMZWF2ZSxcbiAgICAgIHJlZjogZWxlbWVudFJlZixcbiAgICAgIHJvbGUsXG4gICAgICB0YWJJbmRleCxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBwcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXSxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBwcm9wc1tcImFyaWEtZGVzY3JpYmVkYnlcIl0sXG4gICAgICBcImRhdGEtcG9sbHktbGF5b3V0XCI6IHRydWUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIERyb3Bkb3duIOKAlCB0cmlnZ2VyIGJ1dHRvbiArIHBvcG92ZXIgbWVudSB1c2luZyB0aGUgbmF0aXZlIFBvcG92ZXIgQVBJLlxuICpcbiAqIEEgc2hvd24gcG9wb3ZlciBpcyBwcm9tb3RlZCB0byB0aGUgYnJvd3NlcidzIHRvcCBsYXllciwgd2hlcmUgQ1NTXG4gKiBwb3NpdGlvbmluZyByZXNvbHZlcyBhZ2FpbnN0IHRoZSB2aWV3cG9ydCByYXRoZXIgdGhhbiB0aGUgYC5kcm9wZG93bmBcbiAqIHdyYXBwZXIg4oCUIHNvIHRoZSBtZW51IGNhbm5vdCBiZSBwbGFjZWQgd2l0aCBgcG9zaXRpb246IGFic29sdXRlYFxuICogYWxvbmUuIEluc3RlYWQgaXQgaXMgcGlubmVkIHdpdGggYHBvc2l0aW9uOiBmaXhlZGAgYW5kIGNvb3JkaW5hdGVzXG4gKiBtZWFzdXJlZCBmcm9tIHRoZSB0cmlnZ2VyOyBzZWUgYHBvc2l0aW9uTWVudWAgYmVsb3cgKGlzc3VlICMxMjgpLlxuICpcbiAqIFRoZSBtZW51IGVsZW1lbnQgZ2V0cyBgcG9wb3Zlcj1cImF1dG9cImAgYW5kIGEgdW5pcXVlIGBkYXRhLW92ZXJsYXktaWRgLlxuICogYGNsb3NlVG9wT3ZlcmxheSgpYCBmcm9tIEBmYWlyZm94L3BvbGx5L2FjdGlvbnMgZmluZHMgdGhlIHRvcG1vc3RcbiAqIGBbZGF0YS1vdmVybGF5LWlkXWAgZWxlbWVudCBhbmQgZGlzcGF0Y2hlcyBgb3ZlcmxheTpjbG9zZWAg4oCUIHRoZVxuICogRHJvcGRvd24gbGlzdGVucyBmb3IgdGhhdCBldmVudCBhbmQgbWlycm9ycyBpdCBvbnRvIHRoZSBgaXNPcGVuYFxuICogc2lnbmFsLiBJbiBzaW5nbGUtc2VsZWN0IG1vZGUsIGNsaWNraW5nIHRoZSBtZW51IGNsb3NlcyBpdDsgaW5cbiAqIG11bHRpLXNlbGVjdCBtb2RlLCB0aGUgbWVudSBzdGF5cyBvcGVuIHNvIHRoZSBjb25zdW1lciBjYW4gcGlja1xuICogc2V2ZXJhbCBpdGVtcy5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIFNpZ25hbCwgdXNlU2lnbmFsRWZmZWN0IH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Ecm9wZG93bi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5cbmV4cG9ydCB0eXBlIERyb3Bkb3duUHJvcHMgPSB7XG4gIGlzT3BlbjogU2lnbmFsPGJvb2xlYW4+O1xuICB0cmlnZ2VyOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIHRyaWdnZXIgPGJ1dHRvbj4gaW4gcGxhY2Ugb2YgRHJvcGRvd24ncyBvd25cbiAgICogZGVmYXVsdC4gTGV0cyBhIGNvbXBvc2luZyBjb21wb25lbnQgKFNlbGVjdCwgQWN0aW9uU2VsZWN0KSBzdHlsZVxuICAgKiB0aGUgc2luZ2xlIGludGVyYWN0aXZlIGVsZW1lbnQgZGlyZWN0bHksIHdpdGggbm8gc3R5bGVkIG5vZGVcbiAgICogbmVzdGVkIGluc2lkZSB0aGUgYnV0dG9uLiBUaGUgdHJpZ2dlciBhbHNvIGNhcnJpZXMgYVxuICAgKiBgZGF0YS1vcGVuPVwidHJ1ZXxmYWxzZVwiYCBhdHRyaWJ1dGUgbWlycm9yaW5nIGBpc09wZW5gLCBzbyB0aGVcbiAgICogY2xhc3MgY2FuIHN0eWxlIG9wZW4tc3RhdGUgYWZmb3JkYW5jZXMgKGUuZy4gYSByb3RhdGluZyBjYXJldCkuXG4gICAqL1xuICB0cmlnZ2VyQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKiogRGlzYWJsZXMgdGhlIHRyaWdnZXIgPGJ1dHRvbj4uICovXG4gIHRyaWdnZXJEaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBOYXRpdmUgaG92ZXIgdG9vbHRpcCBvbiB0aGUgdHJpZ2dlciA8YnV0dG9uPi4gU2VsZWN0L0FjdGlvblNlbGVjdFxuICAgKiBwYXNzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBzbyBhIHRydW5jYXRlZCB0cmlnZ2VyIHN0aWxsIHJldmVhbHMgaXRzXG4gICAqIGZ1bGwgdmFsdWUgb24gaG92ZXIuXG4gICAqL1xuICB0cmlnZ2VyVGl0bGU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxubGV0IGRyb3Bkb3duQ291bnRlciA9IDA7XG5cbi8qKiBHYXAgaW4gcHggdGhlIG1lbnUgbGVhdmVzIGJldHdlZW4gaXRzZWxmIGFuZCB0aGUgdHJpZ2dlci4gKi9cbmNvbnN0IE1FTlVfR0FQID0gNDtcbi8qKiBNaW5pbXVtIGdhcCBpbiBweCB0aGUgbWVudSBrZWVwcyBmcm9tIGV2ZXJ5IHZpZXdwb3J0IGVkZ2UuICovXG5jb25zdCBWSUVXUE9SVF9QQURESU5HID0gODtcblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duKHByb3BzOiBEcm9wZG93blByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgaXNPcGVuLFxuICAgIHRyaWdnZXIsXG4gICAgY2hpbGRyZW4sXG4gICAgYWxpZ24gPSBcImxlZnRcIixcbiAgICBtdWx0aVNlbGVjdCA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZSxcbiAgICB0cmlnZ2VyQ2xhc3NOYW1lLFxuICAgIHRyaWdnZXJEaXNhYmxlZCA9IGZhbHNlLFxuICAgIHRyaWdnZXJUaXRsZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IG1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB0cmlnZ2VyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKTtcbiAgY29uc3QgaWRSZWYgPSB1c2VSZWYoYHBvbGx5LWRyb3Bkb3duLSR7Kytkcm9wZG93bkNvdW50ZXJ9YCk7XG4gIGNvbnN0IHBvcG92ZXJJZCA9IGlkUmVmLmN1cnJlbnQ7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0cmlnZ2VyUmVmLmN1cnJlbnQ/LnNldEF0dHJpYnV0ZShcInBvcG92ZXJ0YXJnZXRcIiwgcG9wb3ZlcklkKTtcbiAgfSwgW3BvcG92ZXJJZF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBpZiAoIW1lbnUpIHJldHVybjtcbiAgICBjb25zdCBvbk92ZXJsYXlDbG9zZSA9IChlOiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBDdXN0b21FdmVudCAmJiBlLmRldGFpbD8uaWQgPT09IHBvcG92ZXJJZCkge1xuICAgICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcIm92ZXJsYXk6Y2xvc2VcIiwgb25PdmVybGF5Q2xvc2UpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvdmVybGF5OmNsb3NlXCIsIG9uT3ZlcmxheUNsb3NlKTtcbiAgICB9O1xuICB9LCBbcG9wb3ZlcklkLCBpc09wZW5dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG1lbnUgPSBtZW51UmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgdHJpZ2dlciA9IHRyaWdnZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIW1lbnUgfHwgIXRyaWdnZXIpIHJldHVybjtcblxuICAgIC8vIFBpbiB0aGUgdG9wLWxheWVyIG1lbnUgdG8gaXRzIHRyaWdnZXIgd2l0aCB2aWV3cG9ydCBjb29yZGluYXRlcy5cbiAgICAvLyBSdW4gZnJvbSBgYmVmb3JldG9nZ2xlYCB0aGlzIGhhcHBlbnMgc3luY2hyb25vdXNseSBiZWZvcmUgdGhlXG4gICAgLy8gcG9wb3ZlciBwYWludHMsIHNvIHRoZSBtZW51IGlzIGNvcnJlY3Qgb24gaXRzIGZpcnN0IGZyYW1lIOKAlCBub1xuICAgIC8vIGZsYXNoLiBSdW4gZnJvbSBzY3JvbGwvcmVzaXplIGl0IGtlZXBzIHRoZSBtZW51IHBpbm5lZC5cbiAgICBjb25zdCBwb3NpdGlvbk1lbnUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB0ID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgLy8gQSBub3QteWV0LXNob3duIHBvcG92ZXIgaXMgYGRpc3BsYXk6IG5vbmVgIGFuZCBoYXMgbm8gYm94IHRvXG4gICAgICAvLyBtZWFzdXJlLiBGb3JjZSBsYXlvdXQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgKHN5bmNocm9ub3VzKVxuICAgICAgLy8gcmVhZCwgdGhlbiByZXN0b3JlIOKAlCBub3RoaW5nIHBhaW50cyBpbiBiZXR3ZWVuLiBDbGVhcmluZyB0aGVcbiAgICAgIC8vIGlubGluZSBtYXgtaGVpZ2h0IGZpcnN0IG1lYXN1cmVzIHRoZSBtZW51J3MgbmF0dXJhbCBzaXplLlxuICAgICAgY29uc3QgcHJldkRpc3BsYXkgPSBtZW51LnN0eWxlLmRpc3BsYXk7XG4gICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IFwiXCI7XG4gICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBjb25zdCBtZW51V2lkdGggPSBtZW51Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgbWVudUhlaWdodCA9IG1lbnUub2Zmc2V0SGVpZ2h0O1xuICAgICAgbWVudS5zdHlsZS5kaXNwbGF5ID0gcHJldkRpc3BsYXk7XG5cbiAgICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgICAgIC8vIEhvcml6b250YWw6IGFsaWduIGxlZnQgZWRnZXMgKHJpZ2h0IGVkZ2VzIHdoZW4gYWxpZ249XCJyaWdodFwiKSxcbiAgICAgIC8vIHRoZW4gY2xhbXAgc28gdGhlIG1lbnUgbmV2ZXIgb3ZlcmZsb3dzIGEgdmlld3BvcnQgZWRnZS4gVW5kZXJcbiAgICAgIC8vIFJUTCB0aGUgXCJsZWZ0XCIgZGVmYXVsdCByZWFkcyBhcyB0aGUgaW5saW5lLXN0YXJ0IGVkZ2UsIHdoaWNoXG4gICAgICAvLyBpcyB0aGUgdHJpZ2dlcidzICpyaWdodCogZWRnZSDigJQgZmxpcCB0aGUgYW5jaG9yIHNvIHRoZSBtZW51XG4gICAgICAvLyBncm93cyB0b3dhcmQgdGhlIGlubGluZS1lbmQgbGlrZSBpdHMgbmF0aXZlIGNvdW50ZXJwYXJ0LlxuICAgICAgY29uc3QgaXNSdGwgPVxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHRyaWdnZXIpLmRpcmVjdGlvbiA9PT0gXCJydGxcIiB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGlyID09PSBcInJ0bFwiO1xuICAgICAgY29uc3QgcGh5c2ljYWxSaWdodCA9IChpc1J0bCAmJiBhbGlnbiA9PT0gXCJsZWZ0XCIpIHx8IGFsaWduID09PSBcInJpZ2h0XCI7XG4gICAgICBsZXQgbGVmdCA9IHBoeXNpY2FsUmlnaHQgPyB0LnJpZ2h0IC0gbWVudVdpZHRoIDogdC5sZWZ0O1xuICAgICAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KFZJRVdQT1JUX1BBRERJTkcsIHZpZXdwb3J0V2lkdGggLSBtZW51V2lkdGggLSBWSUVXUE9SVF9QQURESU5HKTtcbiAgICAgIGxlZnQgPSBNYXRoLm1pbihNYXRoLm1heChsZWZ0LCBWSUVXUE9SVF9QQURESU5HKSwgbWF4TGVmdCk7XG5cbiAgICAgIC8vIFZlcnRpY2FsOiBiZWxvdyB0aGUgdHJpZ2dlciBieSBkZWZhdWx0OyBmbGlwIGFib3ZlIHdoZW4gdGhhdFxuICAgICAgLy8gbGVhdmVzIG1vcmUgcm9vbS4gQ2FwIHRoZSBoZWlnaHQgdG8gdGhlIHNwYWNlIGF2YWlsYWJsZSBzbyB0aGVcbiAgICAgIC8vIG1lbnUgYWx3YXlzIHN0YXlzIG9uLXNjcmVlbi5cbiAgICAgIGNvbnN0IHNwYWNlQmVsb3cgPSB2aWV3cG9ydEhlaWdodCAtIHQuYm90dG9tIC0gTUVOVV9HQVAgLSBWSUVXUE9SVF9QQURESU5HO1xuICAgICAgY29uc3Qgc3BhY2VBYm92ZSA9IHQudG9wIC0gTUVOVV9HQVAgLSBWSUVXUE9SVF9QQURESU5HO1xuICAgICAgbGV0IHRvcDogbnVtYmVyO1xuICAgICAgaWYgKG1lbnVIZWlnaHQgPD0gc3BhY2VCZWxvdyB8fCBzcGFjZUJlbG93ID49IHNwYWNlQWJvdmUpIHtcbiAgICAgICAgdG9wID0gdC5ib3R0b20gKyBNRU5VX0dBUDtcbiAgICAgICAgaWYgKG1lbnVIZWlnaHQgPiBzcGFjZUJlbG93KSB7XG4gICAgICAgICAgbWVudS5zdHlsZS5tYXhIZWlnaHQgPSBgJHtNYXRoLm1heChzcGFjZUJlbG93LCAwKX1weGA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZSA9IE1hdGgubWF4KHNwYWNlQWJvdmUsIDApO1xuICAgICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IGAke2F2YWlsYWJsZX1weGA7XG4gICAgICAgIHRvcCA9IHQudG9wIC0gTUVOVV9HQVAgLSBNYXRoLm1pbihtZW51SGVpZ2h0LCBhdmFpbGFibGUpO1xuICAgICAgfVxuXG4gICAgICBtZW51LnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiO1xuICAgICAgbWVudS5zdHlsZS5tYXJnaW4gPSBcIjBcIjtcbiAgICAgIG1lbnUuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgO1xuICAgICAgbWVudS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgO1xuICAgIH07XG5cbiAgICBjb25zdCBvbkJlZm9yZVRvZ2dsZSA9IChlOiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKFwibmV3U3RhdGVcIiBpbiBlICYmIGUubmV3U3RhdGUgPT09IFwib3BlblwiKSB7XG4gICAgICAgIHBvc2l0aW9uTWVudSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25SZXBvc2l0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKG1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHBvc2l0aW9uTWVudSgpO1xuICAgIH07XG5cbiAgICBtZW51LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV0b2dnbGVcIiwgb25CZWZvcmVUb2dnbGUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uUmVwb3NpdGlvbiwgdHJ1ZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgb25SZXBvc2l0aW9uKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbWVudS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldG9nZ2xlXCIsIG9uQmVmb3JlVG9nZ2xlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uUmVwb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlcG9zaXRpb24pO1xuICAgIH07XG4gIH0sIFthbGlnbl0pO1xuXG4gIHVzZVNpZ25hbEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBpZiAoIW1lbnUpIHJldHVybjtcbiAgICBpZiAoaXNPcGVuLnZhbHVlICYmICFtZW51Lm1hdGNoZXMoXCI6cG9wb3Zlci1vcGVuXCIpKSB7XG4gICAgICBtZW51LnNob3dQb3BvdmVyKCk7XG4gICAgfSBlbHNlIGlmICghaXNPcGVuLnZhbHVlICYmIG1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHtcbiAgICAgIG1lbnUuaGlkZVBvcG92ZXIoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZSA9IChlOiBFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmIChcIm5ld1N0YXRlXCIgaW4gZSkge1xuICAgICAgaXNPcGVuLnZhbHVlID0gKGUgYXMgdW5rbm93biBhcyB7IG5ld1N0YXRlOiBzdHJpbmcgfSkubmV3U3RhdGUgPT09IFwib3BlblwiO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNZW51Q2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCFtdWx0aVNlbGVjdCkge1xuICAgICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJkcm9wZG93blwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD17aWR9IGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1kcm9wZG93bj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgcmVmPXt0cmlnZ2VyUmVmfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9e3RyaWdnZXJDbGFzc05hbWUgPz8gY2xhc3Nlc1tcInRyaWdnZXJcIl0gPz8gXCJcIn1cbiAgICAgICAgZGlzYWJsZWQ9e3RyaWdnZXJEaXNhYmxlZH1cbiAgICAgICAgdGl0bGU9e3RyaWdnZXJUaXRsZX1cbiAgICAgICAgZGF0YS1vcGVuPXtpc09wZW4udmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgID5cbiAgICAgICAge3RyaWdnZXJ9XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXttZW51UmVmfVxuICAgICAgICBpZD17cG9wb3ZlcklkfVxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtbXVsdGlzZWxlY3RhYmxlPXttdWx0aVNlbGVjdCA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkfVxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm1lbnVcIl0gPz8gXCJcIn1cbiAgICAgICAgZGF0YS1hbGlnbj17YWxpZ259XG4gICAgICAgIHBvcG92ZXI9XCJhdXRvXCJcbiAgICAgICAgZGF0YS1vdmVybGF5LWlkPXtwb3BvdmVySWR9XG4gICAgICAgIG9uVG9nZ2xlPXtoYW5kbGVUb2dnbGV9XG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZU1lbnVDbGlja31cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgPlxuICAgICAgICA8TGF5b3V0IHJvd3M9XCJhdXRvXCIgZ2FwPVwiMFwiPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9MYXlvdXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25TZWxlY3Qg4oCUIHNpbmdsZS1zZWxlY3QgZHJvcGRvd24gdGhhdCBjb21taXRzIHZpYSB0aGUgYWN0aW9uIHN5c3RlbS5cbiAqXG4gKiBUaGUgYWN0aW9uLWRpc3BhdGNoaW5nIHNpYmxpbmcgb2YgPFNlbGVjdD4uIFdoZXJlIDxTZWxlY3Q+IGJpbmRzIGFcbiAqIGBTaWduYWw8U2V0PFQ+PmAgYW5kIGlzIGJ1aWx0IGZvciBpbi1tZW1vcnkgZmlsdGVyIFVJcywgQWN0aW9uU2VsZWN0XG4gKiB0YWtlcyB0aGUgY3VycmVudCBgdmFsdWVgIGFzIGEgcGxhaW4gc3RyaW5nIGFuZCBmaXJlcyBgYWN0aW9uYCB3aXRoXG4gKiBgZGF0YS1hY3Rpb24tdmFsdWVgIHNldCB0byB0aGUgY2hvc2VuIG9wdGlvbiDigJQgc28gZWRpdGluZyBhXG4gKiBzZXJ2ZXItYmFja2VkIGZpZWxkIGNvbW1pdHMgdGhyb3VnaCB0aGUgc2FtZSBldmVudCBkZWxlZ2F0aW9uIGFzXG4gKiA8QWN0aW9uSW5wdXQ+IGFuZCA8QWN0aW9uRm9ybT4sIHdpdGggbm8gc3ludGhldGljIHNpZ25hbCBvciBicmlkZ2luZ1xuICogYGVmZmVjdGAgcmVxdWlyZWQuXG4gKlxuICogQ29tcG9zZXMgPERyb3Bkb3duPiBmb3IgdGhlIG1lbnUuIFRoZSB0cmlnZ2VyIHN0eWxpbmcgaXMgYXBwbGllZFxuICogZGlyZWN0bHkgdG8gRHJvcGRvd24ncyBvd24gPGJ1dHRvbj4gdmlhIGB0cmlnZ2VyQ2xhc3NOYW1lYCwgc28gdGhlXG4gKiB2aXNpYmxlIGJveCBhbmQgdGhlIGludGVyYWN0aXZlIGVsZW1lbnQgYXJlIG9uZSBhbmQgdGhlIHNhbWUgbm9kZSDigJRcbiAqIG5vIHN0eWxlZCA8c3Bhbj4gbmVzdGVkIGluc2lkZSBhbiB1bnN0eWxlZCA8YnV0dG9uPi4gQSBkaXNhYmxlZFxuICogQWN0aW9uU2VsZWN0IHJlbmRlcnMgYXMgc3RhdGljIHRleHQgd2l0aG91dCBhIGNhcmV0LlxuICovXG5cbmltcG9ydCB7IHVzZVNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgRHJvcGRvd24gfSBmcm9tIFwiLi9Ecm9wZG93bi50c3hcIjtcbmltcG9ydCB7IGRpc3BhdGNoQWN0aW9uIH0gZnJvbSBcIi4vaW50ZXJuYWwvZGlzcGF0Y2gtYWN0aW9uLnRzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RPcHRpb24gfSBmcm9tIFwiLi9TZWxlY3QudHN4XCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblNlbGVjdFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgLyoqIEN1cnJlbnQgdmFsdWUg4oCUIG1hdGNoZWQgYWdhaW5zdCBgb3B0aW9uc2AgdG8gcmVuZGVyIHRoZSB0cmlnZ2VyIGxhYmVsLiAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogU2VsZWN0YWJsZSBvcHRpb25zLiAqL1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb248c3RyaW5nPltdO1xuICAvKiogQWN0aW9uIG5hbWUgdG8gZGlzcGF0Y2ggb24gc2VsZWN0aW9uLiBSZWNlaXZlcyBkYXRhLWFjdGlvbi12YWx1ZT08b3B0aW9uIHZhbHVlPi4gKi9cbiAgYWN0aW9uOiBzdHJpbmc7XG4gIC8qKiBFeHRyYSBkYXRhLWFjdGlvbi0qIGF0dHJpYnV0ZXMgdG8gaW5jbHVkZSBvbiBjb21taXQgKGUuZy4gZW50aXR5IGlkKS4gKi9cbiAgYWN0aW9uRGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBWaXNpYmxlIGZpZWxkIGxhYmVsIHJlbmRlcmVkIGFib3ZlIHRoZSB0cmlnZ2VyLiAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqIFRyaWdnZXIgdGV4dCBzaG93biB3aGVuIGB2YWx1ZWAgbWF0Y2hlcyBubyBvcHRpb24uIERlZmF1bHQ6IFwiU2VsZWN04oCmXCIuICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBBcHBseSBhIGNvbWZvcnRhYmxlIG1pbmltdW0gd2lkdGggdG8gdGhlIHRyaWdnZXIuIERlZmF1bHQ6IHNpemVzIHRvIGNvbnRlbnQuICovXG4gIHdpZGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gbGFiZWxGb3Iob3B0aW9uczogU2VsZWN0T3B0aW9uPHN0cmluZz5bXSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0LnZhbHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdC5sYWJlbDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWN0aW9uU2VsZWN0KHByb3BzOiBBY3Rpb25TZWxlY3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIHZhbHVlLFxuICAgIG9wdGlvbnMsXG4gICAgYWN0aW9uLFxuICAgIGFjdGlvbkRhdGEsXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIgPSBcIlNlbGVjdOKAplwiLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgd2lkZSA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHVzZVNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgY3VycmVudCA9IGxhYmVsRm9yKG9wdGlvbnMsIHZhbHVlKTtcbiAgY29uc3QgaXNFbXB0eSA9IGN1cnJlbnQgPT09IHVuZGVmaW5lZDtcbiAgY29uc3QgZGlzcGxheVRleHQgPSBjdXJyZW50ID8/IHBsYWNlaG9sZGVyO1xuXG4gIGNvbnN0IGNvbW1pdCA9IChuZXh0OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICBpZiAobmV4dCA9PT0gdmFsdWUpIHJldHVybjtcbiAgICBkaXNwYXRjaEFjdGlvbihhY3Rpb24sIHsgLi4uKGFjdGlvbkRhdGEgPz8ge30pLCB2YWx1ZTogbmV4dCB9KTtcbiAgfTtcblxuICBjb25zdCB0cmlnZ2VyUGFydHMgPSBbY2xhc3Nlc1tcInRyaWdnZXJcIl0gPz8gXCJcIl07XG4gIGlmIChpc0VtcHR5KSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1wicGxhY2Vob2xkZXJcIl0gPz8gXCJcIik7XG4gIGlmICh3aWRlKSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1widHJpZ2dlcldpZGVcIl0gPz8gXCJcIik7XG4gIGNvbnN0IHRyaWdnZXJDbGFzcyA9IHRyaWdnZXJQYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInNlbGVjdFwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1hY3Rpb24tc2VsZWN0XG4gICAgICBkYXRhLXN0YXRlPXtpc0VtcHR5ID8gXCJlbXB0eVwiIDogXCJmaWxsZWRcIn1cbiAgICA+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICAgIHtkaXNhYmxlZCA/IChcbiAgICAgICAgPHNwYW4gY2xhc3M9e3RyaWdnZXJDbGFzc30gYXJpYS1kaXNhYmxlZD1cInRydWVcIiB0aXRsZT17ZGlzcGxheVRleHR9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1widHJpZ2dlckxhYmVsXCJdfT57ZGlzcGxheVRleHR9PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApIDogKFxuICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgICB0cmlnZ2VyQ2xhc3NOYW1lPXt0cmlnZ2VyQ2xhc3N9XG4gICAgICAgICAgdHJpZ2dlclRpdGxlPXtkaXNwbGF5VGV4dH1cbiAgICAgICAgICB0cmlnZ2VyPXtcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1widHJpZ2dlckxhYmVsXCJdfT57ZGlzcGxheVRleHR9PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImNhcmV0XCJdfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBvcHQudmFsdWUgPT09IHZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgb3B0Q2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgID8gYCR7Y2xhc3Nlc1tcIm9wdGlvblwiXX0gJHtjbGFzc2VzW1wib3B0aW9uU2VsZWN0ZWRcIl19YFxuICAgICAgICAgICAgICA6IGNsYXNzZXNbXCJvcHRpb25cIl07XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXtvcHQudmFsdWV9XG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9e29wdENsYXNzfVxuICAgICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWQgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb21taXQob3B0LnZhbHVlKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPntvcHQubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvRHJvcGRvd24+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEJhZGdlIOKAlCBzbWFsbCBpbmxpbmUgc3RhdHVzIGNoaXAuXG4gKlxuICogUmVuZGVycyBhcyBhIHBhc3NpdmUgPHNwYW4+IHdpdGggdGludGVkIGJhY2tncm91bmQgYW5kIG9uLXRpbnQgdGV4dFxuICogZnJvbSB0aGUgYC0tcG9sbHktc3RhdHVzLSpgIHRva2VuIGZhbWlseS4gVGhlIGRlZmF1bHQgdmFyaWFudCB1c2VzXG4gKiBzdXJmYWNlLXN1bmtlbiArIG11dGVkIHRleHQgZm9yIGEgbmV1dHJhbCBwaWxsLiBDb25zdW1lcnMgc3R5bGVcbiAqIHBsYWNlbWVudCB2aWEgY2xhc3NOYW1lOyB0aGUgcHJpbWl0aXZlIG93bnMgc2l6ZSwgc2hhcGUsIGFuZCBjb2xvdXIuXG4gKlxuICogQSBiYWRnZSBpcyBvZnRlbiBhbiBhYmJyZXZpYXRlZCBvciBpY29uaWMgc3RhdHVzIChcIjNcIiwgXCLil49cIik7IHBhc3NcbiAqIGB0aXRsZWAgdG8gYXR0YWNoIGFuIGV4cGxhbmF0b3J5IGhvdmVyIHRvb2x0aXAgKFwiMyBwZWVycyBjb25uZWN0ZWRcIikuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQmFkZ2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBCYWRnZVZhcmlhbnQgPSBcImRlZmF1bHRcIiB8IFwiaW5mb1wiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCI7XG5cbmV4cG9ydCB0eXBlIEJhZGdlUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgdmFyaWFudD86IEJhZGdlVmFyaWFudDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgLyoqIE5hdGl2ZSBob3ZlciB0b29sdGlwIOKAlCBleHBsYWlucyBhbiBhYmJyZXZpYXRlZCBvciBpY29uaWMgYmFkZ2UuICovXG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gdmFyaWFudENsYXNzKHZhcmlhbnQ6IEJhZGdlVmFyaWFudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YXJpYW50ID09PSBcImluZm9cIikgcmV0dXJuIGNsYXNzZXNbXCJpbmZvXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBjbGFzc2VzW1wic3VjY2Vzc1wiXTtcbiAgaWYgKHZhcmlhbnQgPT09IFwid2FybmluZ1wiKSByZXR1cm4gY2xhc3Nlc1tcIndhcm5pbmdcIl07XG4gIGlmICh2YXJpYW50ID09PSBcImRhbmdlclwiKSByZXR1cm4gY2xhc3Nlc1tcImRhbmdlclwiXTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJhZGdlKHByb3BzOiBCYWRnZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCB2YXJpYW50ID0gXCJkZWZhdWx0XCIsIGNsYXNzTmFtZSwgaWQsIHRpdGxlIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImJhZGdlXCJdXTtcbiAgY29uc3QgdiA9IHZhcmlhbnRDbGFzcyh2YXJpYW50KTtcbiAgaWYgKHYpIHBhcnRzLnB1c2godik7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8c3BhbiBpZD17aWR9IHRpdGxlPXt0aXRsZX0gY2xhc3M9e3BhcnRzLmpvaW4oXCIgXCIpfSBkYXRhLXBvbGx5LXVpIGRhdGEtcG9sbHktYmFkZ2U9e3ZhcmlhbnR9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBCdXR0b24g4oCUIGludGVyYWN0aXZlIGNvbnRyb2wgd2l0aCB0aWVyLCBzZW1hbnRpYyBjb2xvdXIsIGFuZCBzaXplLlxuICpcbiAqIFJlbmRlcnMgYXMgYSA8YnV0dG9uPiBieSBkZWZhdWx0OyBzd2l0Y2hlcyB0byBhbiA8YT4gd2hlbiBnaXZlbiBhblxuICogYGhyZWZgLiBUaWVyIHNldHMgdmlzdWFsIGltcG9ydGFuY2UgKHByaW1hcnkvc2Vjb25kYXJ5L3RlcnRpYXJ5KSxcbiAqIGNvbG9yIG92ZXJsYXlzIHNlbWFudGljIG1lYW5pbmcgKGluZm8vc3VjY2Vzcy93YXJuaW5nL2RhbmdlciksXG4gKiBzaXplIHBpY2tzIHRoZSBoZWlnaHQgKyBwYWRkaW5nICsgZm9udCBzY2FsZSAoc21hbGwvbm9ybWFsL2xhcmdlKS5cbiAqIFRoZSBidXR0b24gaXMgYSBmbGV4IGNvbnRhaW5lciwgc28gYW4gaWNvbiBhbmQgYSBsYWJlbCBhcmUgaXRzIG93blxuICogY2hpbGRyZW4gd2l0aCBhIGBnYXBgIGJldHdlZW4gdGhlbS5cbiAqXG4gKiBIZWlnaHQgY29tZXMgZnJvbSAtLXBvbGx5LWNvbnRyb2wtaGVpZ2h0LSosIG5ldmVyIGZyb20gcGFkZGluZywgc28gYVxuICogQnV0dG9uIGlzIGV4YWN0bHkgYXMgdGFsbCBhcyBhIFRleHRJbnB1dCBvciBhIFNlbGVjdCBpbiB0aGUgc2FtZSByb3cuXG4gKlxuICogQSB0ZXh0IGBsYWJlbGAgaXMgdGhlIGFjY2Vzc2libGUgbmFtZS4gQW4gaWNvbi1vbmx5IGJ1dHRvbiAoaWNvbiwgbm9cbiAqIGxhYmVsKSBoYXMgbm9uZSwgc28gdGhlIHR5cGUgUkVRVUlSRVMgYGFyaWEtbGFiZWxgIHRoZXJlIOKAlCBhbiB1bm5hbWVkXG4gKiBpY29uIGJ1dHRvbiB3b24ndCBjb21waWxlLiBObyBidWlsZC10aW1lIGxpbnQgbmVlZGVkOyB0aGUgY2FsbCBzaXRlXG4gKiBpdHNlbGYgaXMgdGhlIGdhdGUuXG4gKlxuICogQWN0aW9uIHdpcmluZyBpcyBkZWNsYXJlZCB2aWEgZGF0YS0qIGF0dHJpYnV0ZXMgY29uc3VtZWQgYnkgdGhlXG4gKiBnbG9iYWwgZXZlbnQgZGVsZWdhdG9yIGluIEBmYWlyZm94L3BvbGx5L2FjdGlvbnMg4oCUIEJ1dHRvbiBkb2VzIG5vdFxuICogYWNjZXB0IGFuIG9uQ2xpY2sgcHJvcC5cbiAqXG4gKiBFdmVyeSBidXR0b24gc3VyZmFjZXMgYSBuYXRpdmUgaG92ZXIgdG9vbHRpcDogYW4gZXhwbGljaXQgYHRpdGxlYFxuICogd2lucywgZWxzZSB0aGUgdmlzaWJsZSB0ZXh0IGxhYmVsLCBlbHNlIHRoZSBgYXJpYS1sYWJlbGAgKHNvIGFuXG4gKiBpY29uLW9ubHkgYnV0dG9uIHN0aWxsIGdldHMgb25lKS4gUGFzcyBgdGl0bGU9XCJcImAgdG8gc3VwcHJlc3MgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYLCBWTm9kZSB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5cbmV4cG9ydCB0eXBlIEJ1dHRvblRpZXIgPSBcInByaW1hcnlcIiB8IFwic2Vjb25kYXJ5XCIgfCBcInRlcnRpYXJ5XCI7XG5leHBvcnQgdHlwZSBCdXR0b25Db2xvciA9IFwiZGVmYXVsdFwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIjtcbmV4cG9ydCB0eXBlIEJ1dHRvblNpemUgPSBcInNtYWxsXCIgfCBcIm5vcm1hbFwiIHwgXCJsYXJnZVwiO1xuXG50eXBlIEJhc2VCdXR0b25Qcm9wcyA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIHRpZXI/OiBCdXR0b25UaWVyO1xuICBjb2xvcj86IEJ1dHRvbkNvbG9yO1xuICBzaXplPzogQnV0dG9uU2l6ZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBmdWxsV2lkdGg/OiBib29sZWFuO1xuICBjaXJjbGU/OiBib29sZWFuO1xuICAvKiogQ2FwIHRoZSBidXR0b24gd2lkdGggYXQgYC0tcG9sbHktY29udHJvbC1tYXgtd2lkdGhgIGFuZCBlbGxpcHNpcy1cbiAgICogdHJ1bmNhdGUgdGhlIGxhYmVsLiBVc2UgZm9yIHVzZXItc3VwcGxpZWQgb3Igb3RoZXJ3aXNlIHVuYm91bmRlZFxuICAgKiBsYWJlbHMgc28gYSBsb25nIHN0cmluZyBkb2Vzbid0IGJsb3cgb3V0IHRoZSByb3cuICovXG4gIGJvdW5kZWQ/OiBib29sZWFuO1xuICAvKiogUHVsbCB0aGUgYm94IG91dCBieSBpdHMgb3duIGlubGluZSBwYWRkaW5nIHNvIHRoZSBMQUJFTCBzaXRzIG9uIHRoZVxuICAgKiB0ZXh0IGVkZ2UgcmF0aGVyIHRoYW4gdGhlIGJveCBlZGdlLiBGb3IgYSBgdGVydGlhcnlgIGJ1dHRvbiBpbiBhIHRleHRcbiAgICogY29sdW1uLCB3aGVyZSB0aGUgaW52aXNpYmxlIHBhZGRpbmcgb3RoZXJ3aXNlIHJlYWRzIGFzIGFuIGluZGVudFxuICAgKiBhZ2FpbnN0IHRoZSBjb3B5IGJlc2lkZSBpdC4gQSBib3JkZXJlZCBidXR0b24gc2hvdWxkIGtlZXAgaXRzIGRlZmF1bHRcbiAgICogYm94IGFsaWdubWVudCDigJQgdGhlIGJvcmRlciBpcyB3aGF0IG1ha2VzIHRoYXQgZWRnZSBsZWdpYmxlLiBUaGUgaGl0XG4gICAqIHRhcmdldCBpcyB1bmNoYW5nZWQ7IG9ubHkgdGhlIGJveCdzIHBvc2l0aW9uIGluIHRoZSBsYXlvdXQgbW92ZXMuICovXG4gIGZsdXNoPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgXCJkYXRhLWFjdGlvblwiPzogc3RyaW5nO1xuICAvKiogQWRkaXRpb25hbCBhY3Rpb24tcGF5bG9hZCBhdHRyaWJ1dGVzIHRoZSBldmVudCBkZWxlZ2F0b3IgcGFyc2VzXG4gICAqIGludG8gYGN0eC5kYXRhYC4gYGRhdGEtYWN0aW9uLXRpZD1cInQtMTdcImAgYmVjb21lcyBgeyB0aWQ6IFwidC0xN1wiIH1gLFxuICAgKiBgZGF0YS1hY3Rpb24taXRlbS1pZD1cIuKAplwiYCBiZWNvbWVzIGB7IGl0ZW1JZDogXCLigKZcIiB9YCwgYW5kIHNvIG9uLlxuICAgKiBUeXBlZCBhcyBhbiBpbmRleCBzaWduYXR1cmUgc28gZXZlcnkgYGRhdGEtYWN0aW9uLSpgIGtleSB0aGVcbiAgICogY29uc3VtZXIgY2FyZXMgYWJvdXQgdHlwZS1jaGVja3Mgd2l0aG91dCBhIEJ1dHRvbi1zaWRlIGVudW1lcmF0aW9uLiAqL1xuICBbYWN0aW9uRGF0YUF0dHI6IGBkYXRhLWFjdGlvbi0ke3N0cmluZ31gXTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDb250ZW50L2FjY2Vzc2liaWxpdHkgZGltZW5zaW9uLiBBIHZpc2libGUgdGV4dCBgbGFiZWxgIGlzIHRoZVxuICogYWNjZXNzaWJsZSBuYW1lLCBzbyBpdCBtYWtlcyBgYXJpYS1sYWJlbGAgb3B0aW9uYWwuIEFuIGljb24tb25seVxuICogYnV0dG9uIGhhcyBubyB0ZXh0IHRvIG5hbWUgaXQsIHNvIGBhcmlhLWxhYmVsYCBpcyBSRVFVSVJFRCDigJQgeW91XG4gKiBjYW5ub3QgY29uc3RydWN0IGFuIHVubmFtZWQgaWNvbiBidXR0b24uIChCdXR0b24ncyBob3ZlciB0aXRsZSB0aGVuXG4gKiBmYWxscyBiYWNrIHRvIHRoYXQgYXJpYS1sYWJlbCwgc28gdGhlIHNhbWUgcHJvcCBnaXZlcyBib3RoIHRoZVxuICogYWNjZXNzaWJsZSBuYW1lIGFuZCB0aGUgdG9vbHRpcC4pXG4gKi9cbnR5cGUgTGFiZWxsZWRDb250ZW50ID0ge1xuICBsYWJlbDogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGljb24/OiBWTm9kZTtcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xudHlwZSBJY29uT25seUNvbnRlbnQgPSB7XG4gIGljb246IFZOb2RlO1xuICBsYWJlbD86IG5ldmVyO1xuICBcImFyaWEtbGFiZWxcIjogc3RyaW5nO1xufTtcbnR5cGUgQnV0dG9uQ29udGVudCA9IExhYmVsbGVkQ29udGVudCB8IEljb25Pbmx5Q29udGVudDtcblxudHlwZSBCdXR0b25FbGVtZW50ID0ge1xuICBocmVmPzogbmV2ZXI7XG4gIHRhcmdldD86IG5ldmVyO1xuICByZWw/OiBuZXZlcjtcbiAgZG93bmxvYWQ/OiBuZXZlcjtcbiAgdHlwZT86IFwiYnV0dG9uXCIgfCBcInN1Ym1pdFwiIHwgXCJyZXNldFwiO1xufTtcblxudHlwZSBMaW5rRWxlbWVudCA9IHtcbiAgaHJlZjogc3RyaW5nO1xuICB0YXJnZXQ/OiBzdHJpbmc7XG4gIHJlbD86IHN0cmluZztcbiAgLyoqIEZvcndhcmRlZCB0byB0aGUgcmVuZGVyZWQgPGE+IHNvIGEgQnV0dG9uLWFzLWxpbmsgY2FuIG9mZmVyIGEgZmlsZVxuICAgKiBkb3dubG9hZC4gQW4gZW1wdHkgc3RyaW5nIHVzZXMgdGhlIHJlc291cmNlJ3Mgb3duIGZpbGVuYW1lLiAqL1xuICBkb3dubG9hZD86IHN0cmluZztcbiAgdHlwZT86IG5ldmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQnV0dG9uUHJvcHMgPSBCYXNlQnV0dG9uUHJvcHMgJiBCdXR0b25Db250ZW50ICYgKEJ1dHRvbkVsZW1lbnQgfCBMaW5rRWxlbWVudCk7XG5cbmZ1bmN0aW9uIHRpZXJDbGFzcyh0aWVyOiBCdXR0b25UaWVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHRpZXIgPT09IFwicHJpbWFyeVwiKSByZXR1cm4gY2xhc3Nlc1tcInRpZXJQcmltYXJ5XCJdO1xuICBpZiAodGllciA9PT0gXCJ0ZXJ0aWFyeVwiKSByZXR1cm4gY2xhc3Nlc1tcInRpZXJUZXJ0aWFyeVwiXTtcbiAgcmV0dXJuIGNsYXNzZXNbXCJ0aWVyU2Vjb25kYXJ5XCJdO1xufVxuXG5mdW5jdGlvbiBjb2xvckNsYXNzKGNvbG9yOiBCdXR0b25Db2xvcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjb2xvciA9PT0gXCJpbmZvXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JJbmZvXCJdO1xuICBpZiAoY29sb3IgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yU3VjY2Vzc1wiXTtcbiAgaWYgKGNvbG9yID09PSBcIndhcm5pbmdcIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvcldhcm5pbmdcIl07XG4gIGlmIChjb2xvciA9PT0gXCJkYW5nZXJcIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvckRhbmdlclwiXTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc2l6ZUNsYXNzKHNpemU6IEJ1dHRvblNpemUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoc2l6ZSA9PT0gXCJzbWFsbFwiKSByZXR1cm4gY2xhc3Nlc1tcImJ0blNtYWxsXCJdO1xuICBpZiAoc2l6ZSA9PT0gXCJsYXJnZVwiKSByZXR1cm4gY2xhc3Nlc1tcImJ0bkxhcmdlXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogZmxhdCBwcm9wLXRvLWNsYXNzIGNvbXBvc2l0aW9uIHBsdXMgb25lIGFuY2hvci9idXR0b24gYnJhbmNoOyBzcGxpdHRpbmcgd291bGQganVzdCBoaWRlIHRoZSBtYXBwaW5nLlxuZXhwb3J0IGZ1bmN0aW9uIEJ1dHRvbihwcm9wczogQnV0dG9uUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICB0aWVyID0gXCJzZWNvbmRhcnlcIixcbiAgICBjb2xvciA9IFwiZGVmYXVsdFwiLFxuICAgIHNpemUgPSBcIm5vcm1hbFwiLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgY2lyY2xlID0gZmFsc2UsXG4gICAgYm91bmRlZCA9IGZhbHNlLFxuICAgIGZsdXNoID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIHRpdGxlLFxuICAgIGljb24sXG4gICAgbGFiZWwsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYnRuXCJdID8/IFwiXCJdO1xuICBjb25zdCB0YyA9IHRpZXJDbGFzcyh0aWVyKTtcbiAgaWYgKHRjKSBwYXJ0cy5wdXNoKHRjKTtcbiAgY29uc3QgY2MgPSBjb2xvckNsYXNzKGNvbG9yKTtcbiAgaWYgKGNjKSBwYXJ0cy5wdXNoKGNjKTtcbiAgY29uc3Qgc2MgPSBzaXplQ2xhc3Moc2l6ZSk7XG4gIGlmIChzYykgcGFydHMucHVzaChzYyk7XG4gIGlmIChjaXJjbGUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImJ0bkNpcmNsZVwiXSA/PyBcIlwiKTtcbiAgaWYgKGZ1bGxXaWR0aCkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuRnVsbFdpZHRoXCJdID8/IFwiXCIpO1xuICBpZiAoYm91bmRlZCkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuQm91bmRlZFwiXSA/PyBcIlwiKTtcbiAgaWYgKGZsdXNoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5GbHVzaFwiXSA/PyBcIlwiKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICBjb25zdCBidXR0b25DbGFzcyA9IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICAvLyBBbiBpY29uIGJlc2lkZSBhIGxhYmVsIGlzIGFuIGFycmFuZ2VtZW50LCBzbyBpdCBnb2VzIHRocm91Z2ggPExheW91dD4uXG4gIC8vIEEgbGFiZWwgb24gaXRzIG93biBpcyBub3Q6IGl0IGlzIG9uZSBpbmxpbmUgY2hpbGQgdGhhdCB0aGUgYnV0dG9uJ3NcbiAgLy8gYWxpZ24tY29udGVudCBhbmQgdGV4dC1hbGlnbiBjZW50cmUsIHdpdGggbm8gY29udGFpbmVyIGF0IGFsbC5cbiAgY29uc3QgY29udGVudCA9XG4gICAgaWNvbiA9PT0gdW5kZWZpbmVkID8gKFxuICAgICAgbGFiZWxcbiAgICApIDogKFxuICAgICAgPExheW91dCBpbmxpbmUgY29sdW1ucz1cImF1dG8gYXV0b1wiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJpY29uXCJdfT57aWNvbn08L3NwYW4+XG4gICAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAgPC9MYXlvdXQ+XG4gICAgKTtcblxuICBjb25zdCBkYXRhQWN0aW9uID0gcHJvcHNbXCJkYXRhLWFjdGlvblwiXTtcbiAgY29uc3QgYXJpYUxhYmVsID0gcHJvcHNbXCJhcmlhLWxhYmVsXCJdO1xuICAvLyBFdmVyeSBidXR0b24gc3VyZmFjZXMgYSBob3ZlciB0b29sdGlwOiBhbiBleHBsaWNpdCB0aXRsZSB3aW5zLCBlbHNlIHRoZVxuICAvLyB2aXNpYmxlIHRleHQgbGFiZWwsIGVsc2UgdGhlIGFjY2Vzc2libGUgbmFtZSDigJQgc28gYW4gaWNvbi1vbmx5IGJ1dHRvblxuICAvLyAod2hpY2ggY2FycmllcyBhbiBhcmlhLWxhYmVsKSBzdGlsbCBnZXRzIG9uZS4gUGFzcyB0aXRsZT1cIlwiIHRvIG9wdCBvdXQuXG4gIGNvbnN0IHJlc29sdmVkVGl0bGUgPVxuICAgIHRpdGxlID8/XG4gICAgKHR5cGVvZiBsYWJlbCA9PT0gXCJzdHJpbmdcIiAmJiBsYWJlbC5sZW5ndGggPiAwXG4gICAgICA/IGxhYmVsXG4gICAgICA6IHR5cGVvZiBhcmlhTGFiZWwgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBhcmlhTGFiZWxcbiAgICAgICAgOiB1bmRlZmluZWQpO1xuICAvLyBDb2xsZWN0IGV2ZXJ5IGBkYXRhLWFjdGlvbi0qYCBleHRyYSB0aGUgY29uc3VtZXIgcGFzc2VkIHNvIHRoZVxuICAvLyBldmVudCBkZWxlZ2F0b3IgY2FuIHJlYWQgdGhlbSBvZmYgdGhlIHJlbmRlcmVkIGVsZW1lbnQuIFdpdGhvdXRcbiAgLy8gdGhpcywgYW55dGhpbmcgYmV5b25kIGBkYXRhLWFjdGlvbmAgaXMgc2lsZW50bHkgZHJvcHBlZCBhbmRcbiAgLy8gaGFuZGxlcnMgZmlyZSB3aXRoIGFuIGVtcHR5IGBjdHguZGF0YWAuXG4gIGNvbnN0IGFjdGlvbkRhdGFBdHRyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoXCJkYXRhLWFjdGlvbi1cIikpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKHByb3BzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGFjdGlvbkRhdGFBdHRyc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKFwiaHJlZlwiIGluIHByb3BzICYmIHByb3BzLmhyZWYpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGFcbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBjbGFzcz17YnV0dG9uQ2xhc3N9XG4gICAgICAgIHRpdGxlPXtyZXNvbHZlZFRpdGxlfVxuICAgICAgICBocmVmPXtkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IHByb3BzLmhyZWZ9XG4gICAgICAgIHRhcmdldD17XCJ0YXJnZXRcIiBpbiBwcm9wcyA/IHByb3BzLnRhcmdldCA6IHVuZGVmaW5lZH1cbiAgICAgICAgcmVsPXtcInJlbFwiIGluIHByb3BzID8gcHJvcHMucmVsIDogdW5kZWZpbmVkfVxuICAgICAgICBkb3dubG9hZD17XCJkb3dubG9hZFwiIGluIHByb3BzID8gcHJvcHMuZG93bmxvYWQgOiB1bmRlZmluZWR9XG4gICAgICAgIGFyaWEtZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1idXR0b249e3RpZXJ9XG4gICAgICAgIGRhdGEtYWN0aW9uPXtkYXRhQWN0aW9ufVxuICAgICAgICB7Li4uYWN0aW9uRGF0YUF0dHJzfVxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvYT5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRUeXBlOiBcImJ1dHRvblwiIHwgXCJzdWJtaXRcIiB8IFwicmVzZXRcIiA9XG4gICAgXCJ0eXBlXCIgaW4gcHJvcHMgJiYgcHJvcHMudHlwZSA/IHByb3BzLnR5cGUgOiBcImJ1dHRvblwiO1xuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e2J1dHRvbkNsYXNzfVxuICAgICAgdGl0bGU9e3Jlc29sdmVkVGl0bGV9XG4gICAgICB0eXBlPXtyZXNvbHZlZFR5cGV9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWJ1dHRvbj17dGllcn1cbiAgICAgIGRhdGEtYWN0aW9uPXtkYXRhQWN0aW9ufVxuICAgICAgey4uLmFjdGlvbkRhdGFBdHRyc31cbiAgICA+XG4gICAgICB7Y29udGVudH1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTdXJmYWNlIOKAlCB0aGUgb25lIHByaW1pdGl2ZSB0aGF0IG93bnMgdmlzdWFsLXN1cmZhY2UgY29uY2VybnMuXG4gKlxuICogV2hlcmUgTGF5b3V0IGdvdmVybnMgc3BhdGlhbCBjb25jZXJucyAoZ3JpZCwgZmxleCwgZ2FwLCBhbGlnbm1lbnQpLFxuICogU3VyZmFjZSBnb3Zlcm5zIHRoZSBjaHJvbWUgdGhhdCBzaXRzIG9uIHRvcCBvZiBsYXlvdXQ6IHBhZGRpbmcsXG4gKiBiYWNrZ3JvdW5kLCBib3JkZXIsIHJhZGl1cywgc2hhZG93LCBhbmQgdGhlIG5hcnJvdyBwb3NpdGlvbmluZyBpZGlvbXNcbiAqIChzdGlja3kgc3RyaXBzLCBmaXhlZCBmbG9hdGluZyBwYW5lcykgdGhhdCBjb25zdW1lcnMgcmVhY2ggZm9yIGlubGluZVxuICogc3R5bGVzIHRvIGV4cHJlc3MuIEV2ZXJ5IHByb3AgbWFwcyB0byBhIGAtLXBvbGx5LSpgIHRva2VuIHRocm91Z2ggYVxuICogbG9jYWwgYC0tcy0qYCBjdXN0b20gcHJvcGVydHksIHNvIGNvbnN1bWVycyBjYW4gcmV0aGVtZSBhbiBpbmRpdmlkdWFsXG4gKiBTdXJmYWNlIGJ5IG92ZXJyaWRpbmcgdGhlIHBvbGx5IHRva2VuIGluIGBzdHlsZWAgd2l0aG91dCB0b3VjaGluZyB0aGVcbiAqIHByaW1pdGl2ZSdzIENTUy5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1N1cmZhY2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTdXJmYWNlVmFyaWFudCA9XG4gIHwgXCJwbGFpblwiXG4gIHwgXCJyYWlzZWRcIlxuICB8IFwic3Vua2VuXCJcbiAgfCBcImJ1YmJsZVwiXG4gIHwgXCJjaGlwXCJcbiAgfCBcImNhbGxvdXRcIlxuICB8IFwiZmxvYXRpbmdcIlxuICB8IFwic3RpY2t5LWJhclwiO1xuXG50eXBlIEJhY2tncm91bmQgPSBcInJhaXNlZFwiIHwgXCJzdW5rZW5cIiB8IFwidHJhbnNwYXJlbnRcIiB8IChzdHJpbmcgJiB7fSk7XG50eXBlIFJhZGl1cyA9IFwibm9uZVwiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiIHwgXCJmdWxsXCI7XG50eXBlIEJvcmRlciA9IFwibm9uZVwiIHwgXCJkZWZhdWx0XCIgfCBcInN0cm9uZ1wiO1xudHlwZSBCb3JkZXJXaWR0aCA9IFwibm9uZVwiIHwgXCJkZWZhdWx0XCIgfCBcIm1lZGl1bVwiIHwgXCJ0aGlja1wiO1xudHlwZSBCb3JkZXJTaWRlcyA9XG4gIHwgXCJhbGxcIlxuICB8IFwiYmxvY2stc3RhcnRcIlxuICB8IFwiYmxvY2stZW5kXCJcbiAgfCBcImlubGluZS1zdGFydFwiXG4gIHwgXCJpbmxpbmUtZW5kXCJcbiAgfCBcImJsb2NrXCJcbiAgfCBcImlubGluZVwiO1xudHlwZSBTaGFkb3cgPSBcIm5vbmVcIiB8IFwic21cIiB8IFwibWRcIiB8IFwibGdcIjtcbnR5cGUgUG9zaXRpb24gPSBcInN0YXRpY1wiIHwgXCJyZWxhdGl2ZVwiIHwgXCJhYnNvbHV0ZVwiIHwgXCJzdGlja3lcIiB8IFwiZml4ZWRcIjtcbnR5cGUgQm9yZGVyU3R5bGUgPSBcInNvbGlkXCIgfCBcImRhc2hlZFwiO1xudHlwZSBPdmVyZmxvdyA9IFwidmlzaWJsZVwiIHwgXCJoaWRkZW5cIiB8IFwiYXV0b1wiIHwgXCJzY3JvbGxcIjtcbnR5cGUgU2NoZW1lID0gXCJkYXJrXCIgfCBcImxpZ2h0XCI7XG5cbi8qKlxuICogQXJiaXRyYXJ5IGBkYXRhLSpgLCBgYXJpYS0qYCwgYW5kIGB0aXRsZWAgYXR0cmlidXRlcyBmb3J3YXJkZWQgdG8gdGhlXG4gKiByZW5kZXJlZCBlbGVtZW50IHNvIGNvbnN1bWVycyAoTW9kYWwsIFRvYXN0LCBDYXJkLCBldGMuKSBjYW4gY29tcG9zZVxuICogU3VyZmFjZSB3aXRob3V0IGxvc2luZyBET00gaG9va3MsIEFSSUEgc2VtYW50aWNzLCBvciBhIG5hdGl2ZSB0b29sdGlwLlxuICovXG5leHBvcnQgdHlwZSBTdXJmYWNlRGF0YUF0dHJzID0ge1xuICBbZGF0YUF0dHI6IGBkYXRhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBbYXJpYUF0dHI6IGBhcmlhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB0aXRsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFN1cmZhY2VQcm9wcyA9IFN1cmZhY2VEYXRhQXR0cnMgJiB7XG4gIGNoaWxkcmVuPzogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKGRpdiwgc2VjdGlvbiwgYXJ0aWNsZSwgYXNpZGUsIGhlYWRlciwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBOYW1lZCBwcmVzZXQgdGhhdCByZXNvbHZlcyB0byBhIGRlZmF1bHQgYnVuZGxlIG9mIHRoZSBwcm9wcyBiZWxvdy4gRXhwbGljaXQgcHJvcHMgb3ZlcnJpZGUuICovXG4gIHZhcmlhbnQ/OiBTdXJmYWNlVmFyaWFudDtcblxuICAvKiogQW55IENTUyBsZW5ndGgsIHR5cGljYWxseSBgdmFyKC0tcG9sbHktc3BhY2UtKilgLiAqL1xuICBwYWRkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBOYW1lZCB2YWx1ZXMgbWFwIHRvIGB2YXIoLS1wb2xseS1zdXJmYWNlLSopYDsgcmF3IHN0cmluZ3MgcGFzcyB0aHJvdWdoIGZvciBvbmUtb2ZmIGNvbG91cnMuICovXG4gIGJhY2tncm91bmQ/OiBCYWNrZ3JvdW5kO1xuXG4gIHJhZGl1cz86IFJhZGl1cztcbiAgYm9yZGVyPzogQm9yZGVyO1xuICBib3JkZXJXaWR0aD86IEJvcmRlcldpZHRoO1xuICBib3JkZXJTaWRlcz86IEJvcmRlclNpZGVzO1xuICAvKiogQm9yZGVyIGxpbmUgc3R5bGUuIERlZmF1bHQ6IGAnc29saWQnYC4gKi9cbiAgYm9yZGVyU3R5bGU/OiBCb3JkZXJTdHlsZTtcbiAgLyoqIEFueSBDU1MgY29sb3VyLCBvdmVycmlkaW5nIHRoZSB0b2tlbiB0aGUgYGJvcmRlcmAgcHJvcCB3b3VsZCBwaWNrLlxuICAgKiBGb3Igb25lLW9mZiByaW5ncyAoYSBjdXRvdXQgcmluZywgYSBmb2N1cyBoYWxvKSB0aGF0IG5vIHNlbWFudGljXG4gICAqIGJvcmRlciB0b2tlbiBleHByZXNzZXMuIEltcGxpZXMgYSBib3JkZXIgd2lkdGggd2hlbiBub25lIGlzIHNldC4gKi9cbiAgYm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gIHNoYWRvdz86IFNoYWRvdztcblxuICAvKipcbiAgICogUmV0aW50IHRoZSB0b2tlbiBzdWJ0cmVlIHNvIGRlc2NlbmRhbnQgYFRleHRgL2BCdXR0b25gIHJlYWQgdGhlXG4gICAqIHJpZ2h0IGNvbnRyYXN0IG9uIGEgZGFyayAob3IgZm9yY2VkLWxpZ2h0KSBTdXJmYWNlIOKAlCBlcnJvclxuICAgKiBiYW5uZXJzLCBjYW1lcmEgb3ZlcmxheXMsIGNoYXQgYnViYmxlcy4gU2V0cyBgZGF0YS1wb2xseS10aGVtZWAsXG4gICAqIHNvIGV2ZXJ5IGAtLXBvbGx5LSpgIGNvbG91ciB0b2tlbiBmbGlwcyBmb3IgdGhlIHN1YnRyZWU7IG5vIGlubGluZVxuICAgKiBgLS1wb2xseS10ZXh0YCBvdmVycmlkZSBuZWVkZWQgKHBvbGx5IzEzNSkuXG4gICAqL1xuICBzY2hlbWU/OiBTY2hlbWU7XG5cbiAgLyoqIGAnbm9uZSdgIG1ha2VzIGEgZGVjb3JhdGl2ZSBTdXJmYWNlIChhIHNjYW4tZnJhbWUgb3ZlcmxheSkgaWdub3JlXG4gICAqIHRoZSBwb2ludGVyIHNvIGNsaWNrcyBmYWxsIHRocm91Z2ggdG8gd2hhdCBpcyBiZWhpbmQgaXQuICovXG4gIHBvaW50ZXJFdmVudHM/OiBcIm5vbmVcIiB8IFwiYXV0b1wiO1xuXG4gIC8qKiBkaXNwbGF5OiBpbmxpbmUtYmxvY2sg4oCUIFN1cmZhY2UgZmxvd3MgaW5saW5lIHdpdGggc3Vycm91bmRpbmcgdGV4dC4gKi9cbiAgaW5saW5lPzogYm9vbGVhbjtcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIGhlaWdodD86IHN0cmluZztcbiAgbWluSGVpZ2h0Pzogc3RyaW5nO1xuICAvKiogTWF4aW11bSBibG9jayBzaXplIOKAlCBhIFN1cmZhY2UgdGhhdCBzaHJpbmtzIHRvIGNvbnRlbnQgYnV0IGlzIGNhcHBlZC4gKi9cbiAgbWF4SGVpZ2h0Pzogc3RyaW5nO1xuICBtYXhJbmxpbmVTaXplPzogc3RyaW5nO1xuXG4gIC8qKiBPdmVyZmxvdyBiZWhhdmlvdXIuIGAnYXV0bydgIG1ha2VzIGEgaGVpZ2h0LWNhcHBlZCBTdXJmYWNlIHNjcm9sbC4gKi9cbiAgb3ZlcmZsb3c/OiBPdmVyZmxvdztcblxuICBwb3NpdGlvbj86IFBvc2l0aW9uO1xuICAvKiogQW55IENTUyBpbnNldCB2YWx1ZSAoYCcwJ2AsIGAnYXV0byBhdXRvIDFyZW0gMXJlbSdgLCBgJzFyZW0nYCwg4oCmKS4gKi9cbiAgaW5zZXQ/OiBzdHJpbmc7XG4gIC8qKiBDU1MgdHJhbnNmb3JtIOKAlCBlLmcuIGAndHJhbnNsYXRlWCgtNTAlKSdgIHRvIGNlbnRyZSBhIGZpeGVkIGJhbm5lclxuICAgKiBwYWlyZWQgd2l0aCBgaW5zZXQ6ICfigKYgYXV0byDigKYgNTAlJ2AuIFRoZSBzYW5jdGlvbmVkIHRyYW5zZm9ybSBlc2NhcGUuICovXG4gIHRyYW5zZm9ybT86IHN0cmluZztcbiAgekluZGV4PzogbnVtYmVyO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFBlci1pbnN0YW5jZSBvdmVycmlkZXMuIFRoZSBzdXBwb3J0ZWQgcmV0aW50IHBhdGggaXMgdG8gc2V0IHBvbGx5IHRva2Vuc1xuICAgKiBoZXJlLCBlLmcuIGBzdHlsZT17eyBcIi0tcG9sbHktc3VyZmFjZS1yYWlzZWRcIjogXCIjZmVmM2M3XCIgfX1gLiBTdXJmYWNlXG4gICAqIG1lcmdlcyB0aGlzIGludG8gaXRzIG93biBjb21wdXRlZCBzdHlsZS5cbiAgICovXG4gIHN0eWxlPzogSlNYLkNTU1Byb3BlcnRpZXM7XG5cbiAgaWQ/OiBzdHJpbmc7XG4gIHJvbGU/OiBKU1guQXJpYVJvbGU7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbiAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI/OiBzdHJpbmc7XG4gIG9uQ2xpY2s/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbktleURvd24/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xufTtcblxudHlwZSBWYXJpYW50RGVmYXVsdHMgPSBQYXJ0aWFsPFxuICBQaWNrPFxuICAgIFN1cmZhY2VQcm9wcyxcbiAgICB8IFwicGFkZGluZ1wiXG4gICAgfCBcImJhY2tncm91bmRcIlxuICAgIHwgXCJyYWRpdXNcIlxuICAgIHwgXCJib3JkZXJcIlxuICAgIHwgXCJib3JkZXJXaWR0aFwiXG4gICAgfCBcImJvcmRlclNpZGVzXCJcbiAgICB8IFwic2hhZG93XCJcbiAgICB8IFwiaW5saW5lXCJcbiAgICB8IFwid2lkdGhcIlxuICAgIHwgXCJoZWlnaHRcIlxuICAgIHwgXCJtaW5IZWlnaHRcIlxuICAgIHwgXCJtYXhJbmxpbmVTaXplXCJcbiAgICB8IFwicG9zaXRpb25cIlxuICAgIHwgXCJpbnNldFwiXG4gICAgfCBcInpJbmRleFwiXG4gID5cbj47XG5cbmNvbnN0IHZhcmlhbnREZWZhdWx0czogUmVjb3JkPFN1cmZhY2VWYXJpYW50LCBWYXJpYW50RGVmYXVsdHM+ID0ge1xuICBwbGFpbjoge30sXG4gIHJhaXNlZDoge1xuICAgIGJhY2tncm91bmQ6IFwicmFpc2VkXCIsXG4gICAgcmFkaXVzOiBcIm1kXCIsXG4gICAgc2hhZG93OiBcIm1kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbiAgc3Vua2VuOiB7XG4gICAgYmFja2dyb3VuZDogXCJzdW5rZW5cIixcbiAgICByYWRpdXM6IFwibWRcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBidWJibGU6IHtcbiAgICBiYWNrZ3JvdW5kOiBcInZhcigtLXBvbGx5LXN1cmZhY2UtYnViYmxlKVwiLFxuICAgIHJhZGl1czogXCJtZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gICAgcGFkZGluZzogXCJ2YXIoLS1wb2xseS1zcGFjZS1zbSkgdmFyKC0tcG9sbHktc3BhY2UtbWQpXCIsXG4gIH0sXG4gIGNoaXA6IHtcbiAgICBpbmxpbmU6IHRydWUsXG4gICAgcmFkaXVzOiBcImZ1bGxcIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXhzKSB2YXIoLS1wb2xseS1zcGFjZS1zbSlcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBjYWxsb3V0OiB7XG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICByYWRpdXM6IFwic21cIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXNtKSB2YXIoLS1wb2xseS1zcGFjZS1tZClcIixcbiAgfSxcbiAgZmxvYXRpbmc6IHtcbiAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgIHJhZGl1czogXCJsZ1wiLFxuICAgIHNoYWRvdzogXCJsZ1wiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gICAgYmFja2dyb3VuZDogXCJyYWlzZWRcIixcbiAgICB6SW5kZXg6IDk5OTksXG4gIH0sXG4gIFwic3RpY2t5LWJhclwiOiB7XG4gICAgcG9zaXRpb246IFwic3RpY2t5XCIsXG4gICAgaW5zZXQ6IFwiMCAwIGF1dG8gMFwiLFxuICAgIGJvcmRlclNpZGVzOiBcImJsb2NrLWVuZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBiZ1ZhbHVlKGI6IEJhY2tncm91bmQpOiBzdHJpbmcge1xuICBpZiAoYiA9PT0gXCJyYWlzZWRcIikgcmV0dXJuIFwidmFyKC0tcG9sbHktc3VyZmFjZS1yYWlzZWQpXCI7XG4gIGlmIChiID09PSBcInN1bmtlblwiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1zdXJmYWNlLXN1bmtlbilcIjtcbiAgaWYgKGIgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIFwidHJhbnNwYXJlbnRcIjtcbiAgcmV0dXJuIGI7XG59XG5cbmZ1bmN0aW9uIHJhZGl1c1ZhbHVlKHI6IFJhZGl1cyk6IHN0cmluZyB7XG4gIGlmIChyID09PSBcIm5vbmVcIikgcmV0dXJuIFwiMFwiO1xuICByZXR1cm4gYHZhcigtLXBvbGx5LXJhZGl1cy0ke3J9KWA7XG59XG5cbmZ1bmN0aW9uIGJvcmRlckNvbG9yVmFsdWUoYjogQm9yZGVyKTogc3RyaW5nIHtcbiAgaWYgKGIgPT09IFwibm9uZVwiKSByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICBpZiAoYiA9PT0gXCJzdHJvbmdcIikgcmV0dXJuIFwidmFyKC0tcG9sbHktYm9yZGVyLXN0cm9uZylcIjtcbiAgcmV0dXJuIFwidmFyKC0tcG9sbHktYm9yZGVyKVwiO1xufVxuXG5mdW5jdGlvbiBib3JkZXJXaWR0aFZhbHVlKHc6IEJvcmRlcldpZHRoKTogc3RyaW5nIHtcbiAgaWYgKHcgPT09IFwibm9uZVwiKSByZXR1cm4gXCIwXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktYm9yZGVyLXdpZHRoLSR7d30pYDtcbn1cblxuZnVuY3Rpb24gc2hhZG93VmFsdWUoczogU2hhZG93KTogc3RyaW5nIHtcbiAgaWYgKHMgPT09IFwibm9uZVwiKSByZXR1cm4gXCJub25lXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktc2hhZG93LSR7c30pYDtcbn1cblxuZnVuY3Rpb24gYm9yZGVyU2lkZXNDbGFzcyhzaWRlczogQm9yZGVyU2lkZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoc2lkZXMgPT09IFwiYWxsXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChzaWRlcyA9PT0gXCJibG9jay1zdGFydFwiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWJsb2NrLXN0YXJ0XCJdO1xuICBpZiAoc2lkZXMgPT09IFwiYmxvY2stZW5kXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2stZW5kXCJdO1xuICBpZiAoc2lkZXMgPT09IFwiaW5saW5lLXN0YXJ0XCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lLXN0YXJ0XCJdO1xuICBpZiAoc2lkZXMgPT09IFwiaW5saW5lLWVuZFwiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWlubGluZS1lbmRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJibG9ja1wiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWJsb2NrXCJdO1xuICBpZiAoc2lkZXMgPT09IFwiaW5saW5lXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogcHJvcC10by1jdXN0b20tcHJvcGVydHkgbWFwcGluZzsgZmxhdCBhbmQgbGluZWFyLCBtaXJyb3JzIExheW91dC50c3guXG5leHBvcnQgZnVuY3Rpb24gU3VyZmFjZShwcm9wczogU3VyZmFjZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHZhcmlhbnQgPSBcInBsYWluXCIgfSA9IHByb3BzO1xuICBjb25zdCB2ID0gdmFyaWFudERlZmF1bHRzW3ZhcmlhbnRdO1xuXG4gIGNvbnN0IGFzID0gcHJvcHMuYXMgPz8gXCJkaXZcIjtcbiAgY29uc3QgcGFkZGluZyA9IHByb3BzLnBhZGRpbmcgPz8gdi5wYWRkaW5nO1xuICBjb25zdCBiYWNrZ3JvdW5kID0gcHJvcHMuYmFja2dyb3VuZCA/PyB2LmJhY2tncm91bmQ7XG4gIGNvbnN0IHJhZGl1cyA9IHByb3BzLnJhZGl1cyA/PyB2LnJhZGl1cztcbiAgY29uc3QgYm9yZGVyID0gcHJvcHMuYm9yZGVyID8/IHYuYm9yZGVyO1xuICBjb25zdCBib3JkZXJTaWRlcyA9IHByb3BzLmJvcmRlclNpZGVzID8/IHYuYm9yZGVyU2lkZXMgPz8gXCJhbGxcIjtcbiAgY29uc3Qgc2hhZG93ID0gcHJvcHMuc2hhZG93ID8/IHYuc2hhZG93O1xuICBjb25zdCBpbmxpbmUgPSBwcm9wcy5pbmxpbmUgPz8gdi5pbmxpbmU7XG4gIGNvbnN0IHdpZHRoID0gcHJvcHMud2lkdGggPz8gdi53aWR0aDtcbiAgY29uc3QgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0ID8/IHYuaGVpZ2h0O1xuICBjb25zdCBtaW5IZWlnaHQgPSBwcm9wcy5taW5IZWlnaHQgPz8gdi5taW5IZWlnaHQ7XG4gIGNvbnN0IG1heElubGluZVNpemUgPSBwcm9wcy5tYXhJbmxpbmVTaXplID8/IHYubWF4SW5saW5lU2l6ZTtcbiAgY29uc3QgcG9zaXRpb24gPSBwcm9wcy5wb3NpdGlvbiA/PyB2LnBvc2l0aW9uO1xuICBjb25zdCBpbnNldCA9IHByb3BzLmluc2V0ID8/IHYuaW5zZXQ7XG4gIGNvbnN0IHpJbmRleCA9IHByb3BzLnpJbmRleCA/PyB2LnpJbmRleDtcbiAgLy8gcG9sbHkjMTI2LyMxMzU6IG5vIHZhcmlhbnQgc2V0cyB0aGVzZSwgc28gdGhleSByZXNvbHZlIHN0cmFpZ2h0IGZyb20gcHJvcHMuXG4gIGNvbnN0IHsgbWF4SGVpZ2h0LCBvdmVyZmxvdywgYm9yZGVyU3R5bGUsIHRyYW5zZm9ybSwgYm9yZGVyQ29sb3IsIHNjaGVtZSwgcG9pbnRlckV2ZW50cyB9ID0gcHJvcHM7XG5cbiAgLy8gQSBib3JkZXJlZCBzdXJmYWNlIG5lZWRzIGEgd2lkdGguIElmIHRoZSBjb25zdW1lciBhc2tlZCBmb3IgYSBib3JkZXIg4oCUXG4gIC8vIGJ5IG5hbWUgb3IgYnkgcmF3IGNvbG91ciDigJQgYnV0IGRpZG4ndCBwaWNrIGEgd2lkdGgsIGluZmVyICdkZWZhdWx0J1xuICAvLyBzbyB0aGUgYm9yZGVyIHJlbmRlcnMuXG4gIGNvbnN0IHdhbnRzQm9yZGVyID0gKGJvcmRlciAhPT0gdW5kZWZpbmVkICYmIGJvcmRlciAhPT0gXCJub25lXCIpIHx8IGJvcmRlckNvbG9yICE9PSB1bmRlZmluZWQ7XG4gIGNvbnN0IGJvcmRlcldpZHRoID0gcHJvcHMuYm9yZGVyV2lkdGggPz8gdi5ib3JkZXJXaWR0aCA/PyAod2FudHNCb3JkZXIgPyBcImRlZmF1bHRcIiA6IHVuZGVmaW5lZCk7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1zLXBcIl0gPSBwYWRkaW5nO1xuICBpZiAoYmFja2dyb3VuZCkgc3R5bGVbXCItLXMtYmdcIl0gPSBiZ1ZhbHVlKGJhY2tncm91bmQpO1xuICBpZiAocmFkaXVzKSBzdHlsZVtcIi0tcy1yYWRpdXNcIl0gPSByYWRpdXNWYWx1ZShyYWRpdXMpO1xuICBpZiAoYm9yZGVyKSBzdHlsZVtcIi0tcy1ib3JkZXItY29sb3JcIl0gPSBib3JkZXJDb2xvclZhbHVlKGJvcmRlcik7XG4gIC8vIEEgcmF3IGJvcmRlckNvbG9yIHdpbnMgb3ZlciB3aGF0ZXZlciB0b2tlbiBgYm9yZGVyYCByZXNvbHZlZCB0by5cbiAgaWYgKGJvcmRlckNvbG9yKSBzdHlsZVtcIi0tcy1ib3JkZXItY29sb3JcIl0gPSBib3JkZXJDb2xvcjtcbiAgaWYgKGJvcmRlcldpZHRoKSBzdHlsZVtcIi0tcy1ib3JkZXItd2lkdGhcIl0gPSBib3JkZXJXaWR0aFZhbHVlKGJvcmRlcldpZHRoKTtcbiAgaWYgKHNoYWRvdykgc3R5bGVbXCItLXMtc2hhZG93XCJdID0gc2hhZG93VmFsdWUoc2hhZG93KTtcbiAgaWYgKGJvcmRlclN0eWxlKSBzdHlsZVtcIi0tcy1ib3JkZXItc3R5bGVcIl0gPSBib3JkZXJTdHlsZTtcbiAgaWYgKHBvaW50ZXJFdmVudHMpIHN0eWxlW1wiLS1zLXBlXCJdID0gcG9pbnRlckV2ZW50cztcbiAgaWYgKHdpZHRoKSBzdHlsZVtcIi0tcy13XCJdID0gd2lkdGg7XG4gIGlmIChoZWlnaHQpIHN0eWxlW1wiLS1zLWhcIl0gPSBoZWlnaHQ7XG4gIGlmIChtaW5IZWlnaHQpIHN0eWxlW1wiLS1zLW1oXCJdID0gbWluSGVpZ2h0O1xuICBpZiAobWF4SGVpZ2h0KSBzdHlsZVtcIi0tcy1tYXhoXCJdID0gbWF4SGVpZ2h0O1xuICBpZiAobWF4SW5saW5lU2l6ZSkgc3R5bGVbXCItLXMtbWlzXCJdID0gbWF4SW5saW5lU2l6ZTtcbiAgaWYgKG92ZXJmbG93KSBzdHlsZVtcIi0tcy1vdmVyZmxvd1wiXSA9IG92ZXJmbG93O1xuICBpZiAocG9zaXRpb24pIHN0eWxlW1wiLS1zLXBvc2l0aW9uXCJdID0gcG9zaXRpb247XG4gIGlmIChpbnNldCkgc3R5bGVbXCItLXMtaW5zZXRcIl0gPSBpbnNldDtcbiAgaWYgKHRyYW5zZm9ybSkgc3R5bGVbXCItLXMtdHJhbnNmb3JtXCJdID0gdHJhbnNmb3JtO1xuICBpZiAoekluZGV4ICE9PSB1bmRlZmluZWQpIHN0eWxlW1wiLS1zLXpcIl0gPSBTdHJpbmcoekluZGV4KTtcblxuICBpZiAocHJvcHMuc3R5bGUpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0eWxlLCBwcm9wcy5zdHlsZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pO1xuICB9XG5cbiAgY29uc3QgcGFydHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10gPSBbY2xhc3Nlc1tcInN1cmZhY2VcIl1dO1xuICBpZiAoaW5saW5lKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJpbmxpbmVcIl0pO1xuICBwYXJ0cy5wdXNoKGJvcmRlclNpZGVzQ2xhc3MoYm9yZGVyU2lkZXMpKTtcbiAgaWYgKHByb3BzLmNsYXNzTmFtZSkgcGFydHMucHVzaChwcm9wcy5jbGFzc05hbWUpO1xuICBjb25zdCBjbGFzc05hbWUgPSBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cbiAgY29uc3QgcGFzc3Rocm91Z2g6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGNvbnN0IGlzRGF0YSA9IGtleS5zdGFydHNXaXRoKFwiZGF0YS1cIik7XG4gICAgY29uc3QgaXNBcmlhID0ga2V5LnN0YXJ0c1dpdGgoXCJhcmlhLVwiKTtcbiAgICBpZiAoIWlzRGF0YSAmJiAhaXNBcmlhICYmIGtleSAhPT0gXCJ0aXRsZVwiKSBjb250aW51ZTtcbiAgICBpZiAoa2V5ID09PSBcImRhdGEtcG9sbHktc3VyZmFjZVwiKSBjb250aW51ZTtcbiAgICBpZiAoa2V5ID09PSBcImFyaWEtbGFiZWxcIiB8fCBrZXkgPT09IFwiYXJpYS1sYWJlbGxlZGJ5XCIgfHwga2V5ID09PSBcImFyaWEtZGVzY3JpYmVkYnlcIikgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSAocHJvcHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcGFzc3Rocm91Z2hba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgIGFzLFxuICAgIHtcbiAgICAgIGlkOiBwcm9wcy5pZCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHN0eWxlLFxuICAgICAgb25DbGljazogcHJvcHMub25DbGljayxcbiAgICAgIG9uS2V5RG93bjogcHJvcHMub25LZXlEb3duLFxuICAgICAgcm9sZTogcHJvcHMucm9sZSxcbiAgICAgIHRhYkluZGV4OiBwcm9wcy50YWJJbmRleCxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBwcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXSxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBwcm9wc1tcImFyaWEtZGVzY3JpYmVkYnlcIl0sXG4gICAgICBcImRhdGEtcG9sbHktc3VyZmFjZVwiOiB2YXJpYW50LFxuICAgICAgXCJkYXRhLXBvbGx5LXRoZW1lXCI6IHNjaGVtZSxcbiAgICAgIC4uLnBhc3N0aHJvdWdoLFxuICAgIH0sXG4gICAgcHJvcHMuY2hpbGRyZW5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDYXJkIOKAlCBjb21wb3VuZCBwcmltaXRpdmUgdGhhdCBjb21wb3NlcyBTdXJmYWNlIGZvciBlYWNoIG5hbWVkIHNsb3QuXG4gKlxuICogQ2FyZCBpcyB0aGUgZmlyc3QgY29tcG91bmQgdGhhdCBpcyBwdXJlbHkgYSByZS1za2luIG9mIFN1cmZhY2Ug4oCUIG5vXG4gKiBiZWhhdmlvdXJhbCBsYXllci4gSGVhZGVyLCBCb2R5LCBhbmQgRm9vdGVyIGFyZSBlYWNoIFN1cmZhY2VzIHdpdGhcbiAqIHNlbnNpYmxlIGRlZmF1bHRzOyBSb290IGlzIGEgcmFpc2VkIFN1cmZhY2UgdGhhdCB3cmFwcyB0aGVtLiBFdmVyeVxuICogc2xvdCBhY2NlcHRzIHRoZSBmdWxsIFN1cmZhY2VQcm9wcywgc28gY29uc3VtZXJzIHJldGludCwgb3ZlcnJpZGUsIG9yXG4gKiByZWFjaCBmb3IgcmF3IHBhZGRpbmcgd2l0aG91dCByZWFjaGluZyBwYXN0IHRoZSBwcmltaXRpdmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBTdXJmYWNlLCB0eXBlIFN1cmZhY2VQcm9wcyB9IGZyb20gXCIuL1N1cmZhY2UudHN4XCI7XG5cbmV4cG9ydCB0eXBlIENhcmRQcm9wcyA9IFN1cmZhY2VQcm9wcztcbmV4cG9ydCB0eXBlIENhcmRTbG90UHJvcHMgPSBTdXJmYWNlUHJvcHM7XG5cbmZ1bmN0aW9uIFJvb3QocHJvcHM6IENhcmRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyB2YXJpYW50ID0gXCJyYWlzZWRcIiwgcmFkaXVzID0gXCJtZFwiLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZSB2YXJpYW50PXt2YXJpYW50fSByYWRpdXM9e3JhZGl1c30gZGF0YS1wb2xseS1jYXJkIHsuLi5yZXN0fT5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEhlYWRlcihwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIHBhZGRpbmcgPSBcInZhcigtLXBvbGx5LXNwYWNlLW1kKSB2YXIoLS1wb2xseS1zcGFjZS1sZylcIixcbiAgICBib3JkZXIgPSBcImRlZmF1bHRcIixcbiAgICBib3JkZXJTaWRlcyA9IFwiYmxvY2stZW5kXCIsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHBhZGRpbmc9e3BhZGRpbmd9XG4gICAgICBib3JkZXI9e2JvcmRlcn1cbiAgICAgIGJvcmRlclNpZGVzPXtib3JkZXJTaWRlc31cbiAgICAgIGRhdGEtcG9sbHktY2FyZC1oZWFkZXJcbiAgICAgIHsuLi5yZXN0fVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEJvZHkocHJvcHM6IENhcmRTbG90UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbGcpXCIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHBhZGRpbmc9e3BhZGRpbmd9IGRhdGEtcG9sbHktY2FyZC1ib2R5IHsuLi5yZXN0fT5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEZvb3Rlcihwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIHBhZGRpbmcgPSBcInZhcigtLXBvbGx5LXNwYWNlLW1kKSB2YXIoLS1wb2xseS1zcGFjZS1sZylcIixcbiAgICBib3JkZXIgPSBcImRlZmF1bHRcIixcbiAgICBib3JkZXJTaWRlcyA9IFwiYmxvY2stc3RhcnRcIixcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgcGFkZGluZz17cGFkZGluZ31cbiAgICAgIGJvcmRlcj17Ym9yZGVyfVxuICAgICAgYm9yZGVyU2lkZXM9e2JvcmRlclNpZGVzfVxuICAgICAgZGF0YS1wb2xseS1jYXJkLWZvb3RlclxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IENhcmQgPSB7IFJvb3QsIEhlYWRlciwgQm9keSwgRm9vdGVyIH07XG4iLAogICAgIi8qKlxuICogQ2hlY2tib3gg4oCUIG5hdGl2ZSBjaGVja2JveCB3cmFwcGVkIGluIGEgbGFiZWwuXG4gKlxuICogUGFzcyBhIHBsYWluIGJvb2xlYW4gZm9yIGNvbnRyb2xsZWQgdXNlIChjYWxsZXIgbGlzdGVucyBlbHNld2hlcmUpLFxuICogb3IgYSBTaWduYWw8Ym9vbGVhbj4gdG8gaGF2ZSB0aGUgcHJpbWl0aXZlIGJpbmQgaXRzIG93biBjaGFuZ2VcbiAqIGxpc3RlbmVyIGFuZCBtdXRhdGUgdGhlIHNpZ25hbCBkaXJlY3RseS4gVGhlIGxhYmVsIHdyYXBzIHRoZSBpbnB1dFxuICogc28gY2xpY2tzIGFueXdoZXJlIGluIHRoZSB0YXJnZXQgYXJlYSB0b2dnbGUgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcbiAgY2hlY2tlZD86IGJvb2xlYW4gfCBTaWduYWw8Ym9vbGVhbj47XG4gIGRlZmF1bHRDaGVja2VkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGlzU2lnbmFsKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2lnbmFsPGJvb2xlYW4+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBcInZhbHVlXCIgaW4gdmFsdWUgJiYgXCJwZWVrXCIgaW4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDaGVja2JveChwcm9wczogQ2hlY2tib3hQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGVja2VkLCBkZWZhdWx0Q2hlY2tlZCwgbmFtZSwgZGlzYWJsZWQgPSBmYWxzZSwgbGFiZWwsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBKU1guVGFyZ2V0ZWRFdmVudDxIVE1MSW5wdXRFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgIGlmIChpc1NpZ25hbChjaGVja2VkKSkge1xuICAgICAgY2hlY2tlZC52YWx1ZSA9IGUuY3VycmVudFRhcmdldC5jaGVja2VkO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGVja2VkVmFsdWUgPSBpc1NpZ25hbChjaGVja2VkKSA/IGNoZWNrZWQudmFsdWUgOiBjaGVja2VkO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJjaGVja2JveFwiXV07XG4gIGlmIChkaXNhYmxlZCkgcGFydHMucHVzaChjbGFzc2VzW1wiZGlzYWJsZWRcIl0gPz8gXCJcIik7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxMYXlvdXRcbiAgICAgIGFzPVwibGFiZWxcIlxuICAgICAgaW5saW5lXG4gICAgICBjb2x1bW5zPVwiYXV0byBhdXRvXCJcbiAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgIGNsYXNzTmFtZT17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1jaGVja2JveFxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17aWR9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiaW5wdXRcIl19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWRWYWx1ZX1cbiAgICAgICAgZGVmYXVsdENoZWNrZWQ9e2RlZmF1bHRDaGVja2VkfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAvPlxuICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgPC9MYXlvdXQ+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQ2x1c3RlciDigJQgd3JhcHBpbmcgcm93IG9mIHZhcmlhYmxlLXdpZHRoIGl0ZW1zLlxuICpcbiAqIFRoZSBmbGV4LXdyYXAgY291bnRlcnBhcnQgdG8gPExheW91dD4uIFdoZXJlIExheW91dCBvd25zIENTUyBncmlkXG4gKiB0cmFja3MsIENsdXN0ZXIgb3ducyBhIHJvdyBvZiBpdGVtcyB0aGF0IGRpZmZlciBpbiB3aWR0aCBhbmQgbXVzdFxuICogcmVmbG93IGFzIHNwYWNlIHJ1bnMgb3V0IOKAlCBmaWx0ZXIgY2hpcHMsIHRhZyBhbmQgYmFkZ2UgbGlzdHMsIGdyb3Vwc1xuICogb2Ygc21hbGwgYnV0dG9ucy4gSXRlbXMga2VlcCBldmVuIHNwYWNpbmcgb24gYm90aCBheGVzIHZpYSBgZ2FwYDsgdGhlXG4gKiByb3cgd3JhcHMgYXV0b21hdGljYWxseSBhdCBuYXJyb3cgd2lkdGhzLiBMaWtlIExheW91dCwgcHJvcHMgbWFwIHRvXG4gKiBDU1MgY3VzdG9tIHByb3BlcnRpZXMgc28gY29uc3VtZXJzIGNhbiBvdmVycmlkZSBhbnkgb2YgdGhlbSBpbiBhXG4gKiBtZWRpYSBxdWVyeSB3aXRob3V0IHRvdWNoaW5nIHNwZWNpZmljaXR5LlxuICpcbiAqIFRoaXMgaXMgdGhlIHNlY29uZCAoYW5kIGZpbmFsKSBsYXlvdXQgcHJpbWl0aXZlOiBhIGNvbnN1bWVyIG5ldmVyXG4gKiB3cml0ZXMgYGRpc3BsYXk6IGZsZXhgIG9yIGBkaXNwbGF5OiBncmlkYCB0aGVtc2VsdmVzIOKAlCBncmlkIGdvZXNcbiAqIHRocm91Z2ggPExheW91dD4sIGEgd3JhcHBpbmcgY2x1c3RlciBnb2VzIHRocm91Z2ggPENsdXN0ZXI+LlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ2x1c3Rlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIENsdXN0ZXJQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBuYXYsIHVsLCDigKYpLiBEZWZhdWx0cyB0byAnZGl2Jy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIFNwYWNlIGJldHdlZW4gaXRlbXMsIGJvdGggYXhlcy4gVHlwaWNhbGx5IGEgYC0tcG9sbHktc3BhY2UtKmAgdG9rZW4uICovXG4gIGdhcD86IHN0cmluZztcbiAgcGFkZGluZz86IHN0cmluZztcblxuICAvKiogTWFpbi1heGlzIGRpc3RyaWJ1dGlvbiDigJQgbWFwcyB0byBqdXN0aWZ5LWNvbnRlbnQuIERlZmF1bHQ6IHN0YXJ0LiAqL1xuICBqdXN0aWZ5Pzogc3RyaW5nO1xuICAvKiogQ3Jvc3MtYXhpcyBhbGlnbm1lbnQgd2l0aGluIGEgd3JhcHBlZCByb3cg4oCUIG1hcHMgdG8gYWxpZ24taXRlbXMuIERlZmF1bHQ6IGNlbnRlci4gKi9cbiAgYWxpZ24/OiBzdHJpbmc7XG5cbiAgLyoqIFJlbmRlciBhcyBpbmxpbmUtZmxleCBzbyB0aGUgY2x1c3RlciBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0LiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJvbGU/OiBKU1guQXJpYVJvbGU7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENsdXN0ZXIocHJvcHM6IENsdXN0ZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgYXMgPSBcImRpdlwiLCBnYXAsIHBhZGRpbmcsIGp1c3RpZnksIGFsaWduLCBpbmxpbmUsIGNsYXNzTmFtZSwgaWQsIHJvbGUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGlmIChnYXApIHN0eWxlW1wiLS1jLWdhcFwiXSA9IGdhcDtcbiAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1jLXBcIl0gPSBwYWRkaW5nO1xuICBpZiAoanVzdGlmeSkgc3R5bGVbXCItLWMtamNcIl0gPSBqdXN0aWZ5O1xuICBpZiAoYWxpZ24pIHN0eWxlW1wiLS1jLWFpXCJdID0gYWxpZ247XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNsdXN0ZXJcIl1dO1xuICBpZiAoaW5saW5lKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJpbmxpbmVcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHdpbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzOiBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksXG4gICAgICBzdHlsZSxcbiAgICAgIHJvbGUsXG4gICAgICBcImFyaWEtbGFiZWxcIjogcHJvcHNbXCJhcmlhLWxhYmVsXCJdLFxuICAgICAgXCJkYXRhLXBvbGx5LXVpXCI6IHRydWUsXG4gICAgICBcImRhdGEtcG9sbHktY2x1c3RlclwiOiB0cnVlLFxuICAgIH0sXG4gICAgY2hpbGRyZW5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDb2RlIOKAlCBpbmxpbmUgbW9ub3NwYWNlIGNvZGUgc3Bhbi5cbiAqXG4gKiBSZW5kZXJzIGEgYDxjb2RlPmAgd2l0aCB0aGUgYC0tcG9sbHktZm9udC1tb25vYCBzdGFjaywgYSBmYWludCBzdW5rZW5cbiAqIHRpbnQsIGFuZCBzbnVnIHBhZGRpbmcgc28gYSBjb25zdW1lciBuZXZlciBoYW5kLXJvbGxzIGEgYC5tb25vYCBjbGFzc1xuICogZm9yIGlubGluZSBjb2RlLCBpZGVudGlmaWVycywgb3Iga2V5Ym9hcmQgaGludHMuIEZvciBtdWx0aS1saW5lIGNvZGVcbiAqIGJsb2NrcywgcGFzcyBgYmxvY2tgLCB3aGljaCBzd2l0Y2hlcyB0byBhIHByZS13cmFwcGVkIDxwcmU+PGNvZGU+LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NvZGUubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBDb2RlUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIC8qKiBSZW5kZXIgYXMgYSBibG9jayAoPHByZT48Y29kZT4pIGluc3RlYWQgb2YgYW4gaW5saW5lIHNwYW4uICovXG4gIGJsb2NrPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2RlKHByb3BzOiBDb2RlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGJsb2NrLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIHNwcmVhZCBmaXJzdDsgdGhlIGV4cGxpY2l0IGF0dHJpYnV0ZXMgYWZ0ZXJcbiAgLy8gd2luIG9uIGFueSBjb2xsaXNpb24uXG4gIGNvbnN0IHBhc3N0aHJvdWdoID0gY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKTtcblxuICBpZiAoYmxvY2spIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYmxvY2tcIl1dO1xuICAgIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHByZVxuICAgICAgICB7Li4ucGFzc3Rocm91Z2h9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWNvZGU9XCJibG9ja1wiXG4gICAgICA+XG4gICAgICAgIDxjb2RlPntjaGlsZHJlbn08L2NvZGU+XG4gICAgICA8L3ByZT5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNvZGVcIl1dO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXG4gICAgPGNvZGVcbiAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNvZGU9XCJpbmxpbmVcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2NvZGU+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQ29sbGFwc2libGUg4oCUIG5hdGl2ZSA8ZGV0YWlscz4vPHN1bW1hcnk+IHdyYXBwZXIuXG4gKlxuICogVXNlcyB0aGUgYnJvd3NlcidzIGJ1aWx0LWluIGRpc2Nsb3N1cmUgc2VtYW50aWNzIHNvIGtleWJvYXJkIGFuZFxuICogc2NyZWVuLXJlYWRlciBiZWhhdmlvdXIgY29tZSBmcmVlLiBUaGUgYXJyb3cgaXMgYSByZWFsIGVsZW1lbnQsIG5vdCBhXG4gKiA6OmJlZm9yZTogdGhlIHN1bW1hcnkgaXMgYSB0d28tdHJhY2sgPExheW91dD4sIGFuZCBubyBsYXlvdXQgY29udGFpbmVyIGNhblxuICogYXJyYW5nZSBhIHBzZXVkby1lbGVtZW50LiBJdCByb3RhdGVzIG9uIG9wZW4uXG4gKiBDb2xvcnMsIHNwYWNpbmcsIGFuZCBtb3Rpb24gY29tZSBmcm9tIHRva2VuczsgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gXG4gKiB6ZXJvZXMgdGhlIHJvdGF0aW9uIHZpYSB0aGUgbW90aW9uIHRva2VuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NvbGxhcHNpYmxlLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ29sbGFwc2libGVQcm9wcyA9IHtcbiAgLyoqIERpc2Nsb3N1cmUgaGVhZGVyLiBBIHN0cmluZyBmb3IgdGhlIGNvbW1vbiBjYXNlLCBvciBhbnkgbm9kZSDigJRcbiAgICogZS5nLiBhIG11dGVkLCBzbWFsbCA8VGV4dD4g4oCUIHdoZW4gdGhlIGhlYWRlciBuZWVkcyBzdHlsaW5nLiAqL1xuICBzdW1tYXJ5OiBDb21wb25lbnRDaGlsZHJlbjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBkZWZhdWx0T3Blbj86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG4vKiogSW5wdXQgdHlwZXMgd2hvc2UgU3BhY2UvRW50ZXIgaXMgYW4gYWN0aXZhdGlvbiwgbm90IHRleHQgZW50cnkg4oCUIHRoZXNlXG4gKiBrZWVwIHRoZWlyIG93biBrZXlib2FyZCBiZWhhdmlvdXIgYW5kIG11c3Qgbm90IGJlIGd1YXJkZWQuICovXG5jb25zdCBOT05fVEVYVF9JTlBVVF9UWVBFUyA9IG5ldyBTZXQoW1xuICBcImNoZWNrYm94XCIsXG4gIFwicmFkaW9cIixcbiAgXCJidXR0b25cIixcbiAgXCJzdWJtaXRcIixcbiAgXCJyZXNldFwiLFxuICBcImZpbGVcIixcbiAgXCJpbWFnZVwiLFxuICBcInJhbmdlXCIsXG4gIFwiY29sb3JcIixcbl0pO1xuXG4vKiogSXMgdGhlIGV2ZW50IHRhcmdldCBhIGZpZWxkIHdoZXJlIFNwYWNlL0VudGVyIGluc2VydHMvZWRpdHMgdGV4dD8gKi9cbmZ1bmN0aW9uIGlzVGV4dEVudHJ5VGFyZ2V0KHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkgcmV0dXJuIHRydWU7XG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUpIHJldHVybiB0cnVlO1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgIHJldHVybiAhTk9OX1RFWFRfSU5QVVRfVFlQRVMuaGFzKHRhcmdldC50eXBlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hyb21pdW0gdG9nZ2xlcyBhIDxkZXRhaWxzPiBvbiB0aGUgU3BhY2UvRW50ZXIgKmtleXVwKiBvZiBpdHMgPHN1bW1hcnk+LFxuICogZXZlbiB3aGVuIGZvY3VzIHNpdHMgaW4gYSBuZXN0ZWQgdGV4dCBmaWVsZCDigJQgc28gZXZlcnkgc3BhY2UgdHlwZWQgaW4gYW5cbiAqIGVkaXRhYmxlIGhlYWRlciB3b3VsZCBjb2xsYXBzZSB0aGUgZGlzY2xvc3VyZS4gc3RvcFByb3BhZ2F0aW9uIGNhbid0IHN0b3BcbiAqIGl0ICh0aGUgdG9nZ2xlIGlzIHRoZSBzdW1tYXJ5J3Mgb3duIGFjdGl2YXRpb24gYmVoYXZpb3VyLCBub3QgYSBidWJibGluZ1xuICogbGlzdGVuZXIpIGFuZCBwcmV2ZW50RGVmYXVsdCBvbiAqa2V5ZG93biogd291bGQgc3dhbGxvdyB0aGUgY2hhcmFjdGVyLiBUaGVcbiAqIGNoYXJhY3RlciBpcyBhbHJlYWR5IGluc2VydGVkIGJ5IHRoZSB0aW1lIGtleXVwIGZpcmVzLCBzbyBjYW5jZWxsaW5nIHRoZVxuICoga2V5dXAgZGVmYXVsdCBmb3IgdGV4dC1lbnRyeSBmaWVsZHMga2lsbHMgdGhlIHRvZ2dsZSB3aGlsZSBsZWF2aW5nIHR5cGluZ1xuICogdW50b3VjaGVkLiBCdXR0b25zL2NoZWNrYm94L3JhZGlvIGZhbGwgdGhyb3VnaCBhbmQga2VlcCB0aGVpciBvd25cbiAqIGFjdGl2YXRpb247IHRoZSBzdW1tYXJ5IGl0c2VsZiAobm8gbmVzdGVkIGZpZWxkKSBrZWVwcyBub3JtYWwga2V5Ym9hcmRcbiAqIGRpc2Nsb3N1cmUuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVN1bW1hcnlLZXlVcChldmVudDogSlNYLlRhcmdldGVkS2V5Ym9hcmRFdmVudDxIVE1MRWxlbWVudD4pOiB2b2lkIHtcbiAgaWYgKGV2ZW50LmtleSAhPT0gXCIgXCIgJiYgZXZlbnQua2V5ICE9PSBcIkVudGVyXCIpIHJldHVybjtcbiAgaWYgKCFpc1RleHRFbnRyeVRhcmdldChldmVudC50YXJnZXQpKSByZXR1cm47XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xsYXBzaWJsZShwcm9wczogQ29sbGFwc2libGVQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBzdW1tYXJ5LCBjaGlsZHJlbiwgZGVmYXVsdE9wZW4gPSBmYWxzZSwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJjb2xsYXBzaWJsZVwiXV07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8ZGV0YWlsc1xuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmpvaW4oXCIgXCIpfVxuICAgICAgb3Blbj17ZGVmYXVsdE9wZW59XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNvbGxhcHNpYmxlXG4gICAgPlxuICAgICAgPExheW91dFxuICAgICAgICBhcz1cInN1bW1hcnlcIlxuICAgICAgICBjb2x1bW5zPVwiYXV0byAxZnJcIlxuICAgICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzW1wic3VtbWFyeVwiXX1cbiAgICAgICAgb25LZXlVcD17aGFuZGxlU3VtbWFyeUtleVVwfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcIm1hcmtlclwiXX0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJzdW1tYXJ5Q29udGVudFwiXX0+e3N1bW1hcnl9PC9zcGFuPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiY29udGVudFwiXX0+e2NoaWxkcmVufTwvZGl2PlxuICAgIDwvZGV0YWlscz5cbiAgKTtcbn1cbiIsCiAgICAiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBjLGNsb25lRWxlbWVudCBhcyBmfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsRnJhZ21lbnQgYXMgU3RyaWN0TW9kZSxjcmVhdGVDb250ZXh0LGNyZWF0ZUVsZW1lbnQsY3JlYXRlUmVmfWZyb21cInByZWFjdFwiO2ltcG9ydHt1c2VTdGF0ZSBhcyBhLHVzZUxheW91dEVmZmVjdCBhcyBzLHVzZUVmZmVjdCBhcyBoLHVzZUNhbGxiYWNrIGFzIHYsdXNlQ29udGV4dCBhcyBkLHVzZURlYnVnVmFsdWUgYXMgbSx1c2VJZCBhcyBwLHVzZUltcGVyYXRpdmVIYW5kbGUgYXMgeSx1c2VNZW1vIGFzIF8sdXNlUmVkdWNlciBhcyBiLHVzZVJlZiBhcyBTfWZyb21cInByZWFjdC9ob29rc1wiO2V4cG9ydCpmcm9tXCJwcmVhY3QvaG9va3NcIjtmdW5jdGlvbiBnKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdO3JldHVybiBufWZ1bmN0aW9uIEUobix0KXtmb3IodmFyIGUgaW4gbilpZihcIl9fc291cmNlXCIhPT1lJiYhKGUgaW4gdCkpcmV0dXJuITA7Zm9yKHZhciByIGluIHQpaWYoXCJfX3NvdXJjZVwiIT09ciYmbltyXSE9PXRbcl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQyhuLHQpe3ZhciBlPXQoKSxyPWEoe3Q6e19fOmUsdTp0fX0pLHU9clswXS50LG89clsxXTtyZXR1cm4gcyhmdW5jdGlvbigpe3UuX189ZSx1LnU9dCxSKHUpJiZvKHt0OnV9KX0sW24sZSx0XSksaChmdW5jdGlvbigpe3JldHVybiBSKHUpJiZvKHt0OnV9KSxuKGZ1bmN0aW9uKCl7Uih1KSYmbyh7dDp1fSl9KX0sW25dKSxlfWZ1bmN0aW9uIFIobil7dHJ5e3JldHVybiEoKHQ9bi5fXyk9PT0oZT1uLnUoKSkmJigwIT09dHx8MS90PT0xL2UpfHx0IT10JiZlIT1lKX1jYXRjaChuKXtyZXR1cm4hMH12YXIgdCxlfWZ1bmN0aW9uIHgobil7bigpfWZ1bmN0aW9uIHcobil7cmV0dXJuIG59ZnVuY3Rpb24gaygpe3JldHVyblshMSx4XX12YXIgST1zO2Z1bmN0aW9uIE0obix0KXt0aGlzLnByb3BzPW4sdGhpcy5jb250ZXh0PXR9ZnVuY3Rpb24gTihuLGUpe2Z1bmN0aW9uIHIobil7dmFyIHQ9dGhpcy5wcm9wcy5yZWY7cmV0dXJuIHQhPW4ucmVmJiZ0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG51bGwpOnQuY3VycmVudD1udWxsKSxlPyFlKHRoaXMucHJvcHMsbil8fHQhPW4ucmVmOkUodGhpcy5wcm9wcyxuKX1mdW5jdGlvbiB1KGUpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1yLHQobixlKX1yZXR1cm4gdS5kaXNwbGF5TmFtZT1cIk1lbW8oXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdS5fX2Y9dS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCx1LnR5cGU9bix1fShNLnByb3RvdHlwZT1uZXcgbikuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsTS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEUodGhpcy5wcm9wcyxuKXx8RSh0aGlzLnN0YXRlLHQpfTt2YXIgVD1lLl9fYjtlLl9fYj1mdW5jdGlvbihuKXtuLnR5cGUmJm4udHlwZS5fX2YmJm4ucmVmJiYobi5wcm9wcy5yZWY9bi5yZWYsbi5yZWY9bnVsbCksVCYmVChuKX07dmFyIEE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpfHwzOTExO2Z1bmN0aW9uIEQobil7ZnVuY3Rpb24gdCh0KXt2YXIgZT1nKHt9LHQpO3JldHVybiBkZWxldGUgZS5yZWYsbihlLHQucmVmfHxudWxsKX1yZXR1cm4gdC4kJHR5cGVvZj1BLHQucmVuZGVyPW4sdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD10Ll9fZj0hMCx0LmRpc3BsYXlOYW1lPVwiRm9yd2FyZFJlZihcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix0fXZhciBGPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/bnVsbDpyKHIobikubWFwKHQpKX0sTD17bWFwOkYsZm9yRWFjaDpGLGNvdW50OmZ1bmN0aW9uKG4pe3JldHVybiBuP3IobikubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24obil7dmFyIHQ9cihuKTtpZigxIT09dC5sZW5ndGgpdGhyb3dcIkNoaWxkcmVuLm9ubHlcIjtyZXR1cm4gdFswXX0sdG9BcnJheTpyfSxPPWUuX19lO2UuX19lPWZ1bmN0aW9uKG4sdCxlLHIpe2lmKG4udGhlbilmb3IodmFyIHUsbz10O289by5fXzspaWYoKHU9by5fX2MpJiZ1Ll9fYylyZXR1cm4gbnVsbD09dC5fX2UmJih0Ll9fZT1lLl9fZSx0Ll9faz1lLl9fayksdS5fX2Mobix0KTtPKG4sdCxlLHIpfTt2YXIgVT1lLnVubW91bnQ7ZnVuY3Rpb24gVihuLHQsZSl7cmV0dXJuIG4mJihuLl9fYyYmbi5fX2MuX19IJiYobi5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7XCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fX2MmJm4uX19jKCl9KSxuLl9fYy5fX0g9bnVsbCksbnVsbCE9KG49Zyh7fSxuKSkuX19jJiYobi5fX2MuX19QPT09ZSYmKG4uX19jLl9fUD10KSxuLl9fYy5fX2U9ITAsbi5fX2M9bnVsbCksbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVihuLHQsZSl9KSksbn1mdW5jdGlvbiBXKG4sdCxlKXtyZXR1cm4gbiYmZSYmKG4uX192PW51bGwsbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVyhuLHQsZSl9KSxuLl9fYyYmbi5fX2MuX19QPT09dCYmKG4uX19lJiZlLmFwcGVuZENoaWxkKG4uX19lKSxuLl9fYy5fX2U9ITAsbi5fX2MuX19QPWUpKSxufWZ1bmN0aW9uIFAoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gaihuKXt2YXIgdD1uLl9fJiZuLl9fLl9fYztyZXR1cm4gdCYmdC5fX2EmJnQuX19hKG4pfWZ1bmN0aW9uIHoobil7dmFyIGUscix1LG89bnVsbDtmdW5jdGlvbiBpKGkpe2lmKGV8fChlPW4oKSkudGhlbihmdW5jdGlvbihuKXtuJiYobz1uLmRlZmF1bHR8fG4pLHU9ITB9LGZ1bmN0aW9uKG4pe3I9bix1PSEwfSkscil0aHJvdyByO2lmKCF1KXRocm93IGU7cmV0dXJuIG8/dChvLGkpOm51bGx9cmV0dXJuIGkuZGlzcGxheU5hbWU9XCJMYXp5XCIsaS5fX2Y9ITAsaX1mdW5jdGlvbiBCKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9ZS51bm1vdW50PWZ1bmN0aW9uKG4pe3ZhciB0PW4uX19jO3QmJih0Ll9fej0hMCksdCYmdC5fX1ImJnQuX19SKCksdCYmMzImbi5fX3UmJihuLnR5cGU9bnVsbCksVSYmVShuKX0sKFAucHJvdG90eXBlPW5ldyBuKS5fX2M9ZnVuY3Rpb24obix0KXt2YXIgZT10Ll9fYyxyPXRoaXM7bnVsbD09ci5vJiYoci5vPVtdKSxyLm8ucHVzaChlKTt2YXIgdT1qKHIuX192KSxvPSExLGk9ZnVuY3Rpb24oKXtvfHxyLl9fenx8KG89ITAsZS5fX1I9bnVsbCx1P3UoYyk6YygpKX07ZS5fX1I9aTt2YXIgbD1lLl9fUDtlLl9fUD1udWxsO3ZhciBjPWZ1bmN0aW9uKCl7aWYoIS0tci5fX3Upe2lmKHIuc3RhdGUuX19hKXt2YXIgbj1yLnN0YXRlLl9fYTtyLl9fdi5fX2tbMF09VyhuLG4uX19jLl9fUCxuLl9fYy5fX08pfXZhciB0O2ZvcihyLnNldFN0YXRlKHtfX2E6ci5fX2I9bnVsbH0pO3Q9ci5vLnBvcCgpOyl0Ll9fUD1sLHQuZm9yY2VVcGRhdGUoKX19O3IuX191Kyt8fDMyJnQuX191fHxyLnNldFN0YXRlKHtfX2E6ci5fX2I9ci5fX3YuX19rWzBdfSksbi50aGVuKGksaSl9LFAucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxQLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obixlKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG89dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09Vih0aGlzLl9fYixyLG8uX19PPW8uX19QKX10aGlzLl9fYj1udWxsfXZhciBpPWUuX19hJiZ0KHUsbnVsbCxuLmZhbGxiYWNrKTtyZXR1cm4gaSYmKGkuX191Jj0tMzMpLFt0KHUsbnVsbCxlLl9fYT9udWxsOm4uY2hpbGRyZW4pLGldfTt2YXIgSD1mdW5jdGlvbihuLHQsZSl7aWYoKytlWzFdPT09ZVswXSYmbi5sLmRlbGV0ZSh0KSxuLnByb3BzLnJldmVhbE9yZGVyJiYoXCJ0XCIhPT1uLnByb3BzLnJldmVhbE9yZGVyWzBdfHwhbi5sLnNpemUpKWZvcihlPW4uaTtlOyl7Zm9yKDtlLmxlbmd0aD4zOyllLnBvcCgpKCk7aWYoZVsxXTxlWzBdKWJyZWFrO24uaT1lPWVbMl19fTtmdW5jdGlvbiBaKG4pe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBuLmNvbnRleHR9LG4uY2hpbGRyZW59ZnVuY3Rpb24gWShuKXt2YXIgZT10aGlzLHI9bi5oO2lmKGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtvKG51bGwsZS52KSxlLnY9bnVsbCxlLmg9bnVsbH0sZS5oJiZlLmghPT1yJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCksIWUudil7Zm9yKHZhciB1PWUuX192O251bGwhPT11JiYhdS5fX20mJm51bGwhPT11Ll9fOyl1PXUuX187ZS5oPXIsZS52PXtub2RlVHlwZToxLHBhcmVudE5vZGU6cixjaGlsZE5vZGVzOltdLF9fazp7X19tOnUuX19tfSxjb250YWluczpmdW5jdGlvbigpe3JldHVybiEwfSxuYW1lc3BhY2VVUkk6ci5uYW1lc3BhY2VVUkksaW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7dGhpcy5jaGlsZE5vZGVzLnB1c2gobiksZS5oLmluc2VydEJlZm9yZShuLHQpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKG4pPj4+MSwxKSxlLmgucmVtb3ZlQ2hpbGQobil9fX1vKHQoWix7Y29udGV4dDplLmNvbnRleHR9LG4uX192KSxlLnYpfWZ1bmN0aW9uICQobixlKXt2YXIgcj10KFkse19fdjpuLGg6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShCLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1qKHQuX192KSxyPXQubC5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxIKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sQi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLmwuc2V0KHRbZV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuIG4uY2hpbGRyZW59LEIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1CLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24odCxlKXtIKG4sZSx0KX0pfTt2YXIgcT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsRz0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sSj0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLEs9L1tBLVowLTldL2csUT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQsWD1mdW5jdGlvbihuKXtyZXR1cm4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KG4pfTtmdW5jdGlvbiBubihuLHQsZSl7cmV0dXJuIG51bGw9PXQuX19rJiYodC50ZXh0Q29udGVudD1cIlwiKSxvKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1mdW5jdGlvbiB0bihuLHQsZSl7cmV0dXJuIGkobix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfW4ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsW1wiY29tcG9uZW50V2lsbE1vdW50XCIsXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXCJjb21wb25lbnRXaWxsVXBkYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tcIlVOU0FGRV9cIit0XX0sc2V0OmZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9fSl9KTt2YXIgZW49ZS5ldmVudDtlLmV2ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBlbiYmKG49ZW4obikpLG4ucGVyc2lzdD1mdW5jdGlvbigpe30sbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sbi5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSxuLm5hdGl2ZUV2ZW50PW59O3ZhciBybix1bj17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sb249ZS52bm9kZTtlLnZub2RlPWZ1bmN0aW9uKG4pe1wic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUmJmZ1bmN0aW9uKG4pe3ZhciB0PW4ucHJvcHMsZT1uLnR5cGUsdT17fSxvPS0xPT1lLmluZGV4T2YoXCItXCIpO2Zvcih2YXIgaSBpbiB0KXt2YXIgbD10W2ldO2lmKCEoXCJ2YWx1ZVwiPT09aSYmXCJkZWZhdWx0VmFsdWVcImluIHQmJm51bGw9PWx8fFEmJlwiY2hpbGRyZW5cIj09PWkmJlwibm9zY3JpcHRcIj09PWV8fFwiY2xhc3NcIj09PWl8fFwiY2xhc3NOYW1lXCI9PT1pKSl7dmFyIGM9aS50b0xvd2VyQ2FzZSgpO1wiZGVmYXVsdFZhbHVlXCI9PT1pJiZcInZhbHVlXCJpbiB0JiZudWxsPT10LnZhbHVlP2k9XCJ2YWx1ZVwiOlwiZG93bmxvYWRcIj09PWkmJiEwPT09bD9sPVwiXCI6XCJ0cmFuc2xhdGVcIj09PWMmJlwibm9cIj09PWw/bD0hMTpcIm9cIj09PWNbMF0mJlwiblwiPT09Y1sxXT9cIm9uZG91YmxlY2xpY2tcIj09PWM/aT1cIm9uZGJsY2xpY2tcIjpcIm9uY2hhbmdlXCIhPT1jfHxcImlucHV0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lfHxYKHQudHlwZSk/XCJvbmZvY3VzXCI9PT1jP2k9XCJvbmZvY3VzaW5cIjpcIm9uYmx1clwiPT09Yz9pPVwib25mb2N1c291dFwiOkoudGVzdChpKSYmKGk9Yyk6Yz1pPVwib25pbnB1dFwiOm8mJkcudGVzdChpKT9pPWkucmVwbGFjZShLLFwiLSQmXCIpLnRvTG93ZXJDYXNlKCk6bnVsbD09PWwmJihsPXZvaWQgMCksXCJvbmlucHV0XCI9PT1jJiZ1W2k9Y10mJihpPVwib25pbnB1dENhcHR1cmVcIiksdVtpXT1sfX1cInNlbGVjdFwiPT1lJiYodS5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh1LnZhbHVlKSYmKHUudmFsdWU9cih0LmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucHJvcHMuc2VsZWN0ZWQ9LTEhPXUudmFsdWUuaW5kZXhPZihuLnByb3BzLnZhbHVlKX0pKSxudWxsIT11LmRlZmF1bHRWYWx1ZSYmKHUudmFsdWU9cih0LmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucHJvcHMuc2VsZWN0ZWQ9dS5tdWx0aXBsZT8tMSE9dS5kZWZhdWx0VmFsdWUuaW5kZXhPZihuLnByb3BzLnZhbHVlKTp1LmRlZmF1bHRWYWx1ZT09bi5wcm9wcy52YWx1ZX0pKSksdC5jbGFzcyYmIXQuY2xhc3NOYW1lPyh1LmNsYXNzPXQuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJjbGFzc05hbWVcIix1bikpOnQuY2xhc3NOYW1lJiYodS5jbGFzcz11LmNsYXNzTmFtZT10LmNsYXNzTmFtZSksbi5wcm9wcz11fShuKSxuLiQkdHlwZW9mPXEsb24mJm9uKG4pfTt2YXIgbG49ZS5fX3I7ZS5fX3I9ZnVuY3Rpb24obil7bG4mJmxuKG4pLHJuPW4uX19jfTt2YXIgY249ZS5kaWZmZWQ7ZS5kaWZmZWQ9ZnVuY3Rpb24obil7Y24mJmNuKG4pO3ZhciB0PW4ucHJvcHMsZT1uLl9fZTtudWxsIT1lJiZcInRleHRhcmVhXCI9PT1uLnR5cGUmJlwidmFsdWVcImluIHQmJnQudmFsdWUhPT1lLnZhbHVlJiYoZS52YWx1ZT1udWxsPT10LnZhbHVlP1wiXCI6dC52YWx1ZSkscm49bnVsbH07dmFyIGZuPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOntjdXJyZW50OntyZWFkQ29udGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gcm4uX19uW24uX19jXS5wcm9wcy52YWx1ZX0sdXNlQ2FsbGJhY2s6dix1c2VDb250ZXh0OmQsdXNlRGVidWdWYWx1ZTptLHVzZURlZmVycmVkVmFsdWU6dyx1c2VFZmZlY3Q6aCx1c2VJZDpwLHVzZUltcGVyYXRpdmVIYW5kbGU6eSx1c2VJbnNlcnRpb25FZmZlY3Q6SSx1c2VMYXlvdXRFZmZlY3Q6cyx1c2VNZW1vOl8sdXNlUmVkdWNlcjpiLHVzZVJlZjpTLHVzZVN0YXRlOmEsdXNlU3luY0V4dGVybmFsU3RvcmU6Qyx1c2VUcmFuc2l0aW9uOmt9fX0sYW49XCIxOC4zLjFcIjtmdW5jdGlvbiBzbihuKXtyZXR1cm4gdC5iaW5kKG51bGwsbil9ZnVuY3Rpb24gaG4obil7cmV0dXJuISFuJiZuLiQkdHlwZW9mPT09cX1mdW5jdGlvbiB2bihuKXtyZXR1cm4gaG4obikmJm4udHlwZT09PXV9ZnVuY3Rpb24gZG4obil7cmV0dXJuISFuJiZcInN0cmluZ1wiPT10eXBlb2Ygbi5kaXNwbGF5TmFtZSYmMD09bi5kaXNwbGF5TmFtZS5pbmRleE9mKFwiTWVtbyhcIil9ZnVuY3Rpb24gbW4obil7cmV0dXJuIGhuKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gcG4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24geW4obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgX249ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sYm49ZnVuY3Rpb24obix0KXt2YXIgcj1lLmRlYm91bmNlUmVuZGVyaW5nO2UuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24obil7cmV0dXJuIG4oKX07dmFyIHU9bih0KTtyZXR1cm4gZS5kZWJvdW5jZVJlbmRlcmluZz1yLHV9LFNuPWhuLGduPXt1c2VTdGF0ZTphLHVzZUlkOnAsdXNlUmVkdWNlcjpiLHVzZUVmZmVjdDpoLHVzZUxheW91dEVmZmVjdDpzLHVzZUluc2VydGlvbkVmZmVjdDpJLHVzZVRyYW5zaXRpb246ayx1c2VEZWZlcnJlZFZhbHVlOncsdXNlU3luY0V4dGVybmFsU3RvcmU6QyxzdGFydFRyYW5zaXRpb246eCx1c2VSZWY6Uyx1c2VJbXBlcmF0aXZlSGFuZGxlOnksdXNlTWVtbzpfLHVzZUNhbGxiYWNrOnYsdXNlQ29udGV4dDpkLHVzZURlYnVnVmFsdWU6bSx2ZXJzaW9uOlwiMTguMy4xXCIsQ2hpbGRyZW46TCxyZW5kZXI6bm4saHlkcmF0ZTp0bix1bm1vdW50Q29tcG9uZW50QXROb2RlOnBuLGNyZWF0ZVBvcnRhbDokLGNyZWF0ZUVsZW1lbnQ6dCxjcmVhdGVDb250ZXh0OmwsY3JlYXRlRmFjdG9yeTpzbixjbG9uZUVsZW1lbnQ6bW4sY3JlYXRlUmVmOmMsRnJhZ21lbnQ6dSxpc1ZhbGlkRWxlbWVudDpobixpc0VsZW1lbnQ6U24saXNGcmFnbWVudDp2bixpc01lbW86ZG4sZmluZERPTU5vZGU6eW4sQ29tcG9uZW50Om4sUHVyZUNvbXBvbmVudDpNLG1lbW86Tixmb3J3YXJkUmVmOkQsZmx1c2hTeW5jOmJuLHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOl9uLFN0cmljdE1vZGU6dSxTdXNwZW5zZTpQLFN1c3BlbnNlTGlzdDpCLGxhenk6eixfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDpmbn07ZXhwb3J0e0wgYXMgQ2hpbGRyZW4sTSBhcyBQdXJlQ29tcG9uZW50LFAgYXMgU3VzcGVuc2UsQiBhcyBTdXNwZW5zZUxpc3QsZm4gYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsbW4gYXMgY2xvbmVFbGVtZW50LHNuIGFzIGNyZWF0ZUZhY3RvcnksJCBhcyBjcmVhdGVQb3J0YWwsZ24gYXMgZGVmYXVsdCx5biBhcyBmaW5kRE9NTm9kZSxibiBhcyBmbHVzaFN5bmMsRCBhcyBmb3J3YXJkUmVmLHRuIGFzIGh5ZHJhdGUsU24gYXMgaXNFbGVtZW50LHZuIGFzIGlzRnJhZ21lbnQsZG4gYXMgaXNNZW1vLGhuIGFzIGlzVmFsaWRFbGVtZW50LHogYXMgbGF6eSxOIGFzIG1lbW8sbm4gYXMgcmVuZGVyLHggYXMgc3RhcnRUcmFuc2l0aW9uLHBuIGFzIHVubW91bnRDb21wb25lbnRBdE5vZGUsX24gYXMgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsdyBhcyB1c2VEZWZlcnJlZFZhbHVlLEkgYXMgdXNlSW5zZXJ0aW9uRWZmZWN0LEMgYXMgdXNlU3luY0V4dGVybmFsU3RvcmUsayBhcyB1c2VUcmFuc2l0aW9uLGFuIGFzIHZlcnNpb259O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcGF0Lm1vZHVsZS5qcy5tYXBcbiIsCiAgICAiLyoqXG4gKiBGb2N1cyB0cmFwLlxuICpcbiAqIEtlZXBzIFRhYiAvIFNoaWZ0K1RhYiBpbnNpZGUgYSByb290IGVsZW1lbnQuIFJldHVybnMgYSBjbGVhbnVwIHRoYXRcbiAqIHJlc3RvcmVzIGZvY3VzIHRvIHRoZSBlbGVtZW50IHRoYXQgd2FzIGFjdGl2ZSBiZWZvcmUgdGhlIHRyYXAgbW91bnRlZC5cbiAqIFNpbXBsZSBhbmQgc3luY2hyb25vdXMg4oCUIGFzc3VtZXMgYSBzaW5nbGUgYWN0aXZlIHRyYXAgcGVyIE92ZXJsYXlSb290XG4gKiBhbmQgbGV0cyB0aGUgb3ZlcmxheSByZWdpc3RyeSBpbiBgQGZhaXJmb3gvcG9sbHkvYWN0aW9uc2AgZW5mb3JjZSB0aGF0XG4gKiBhdCB0aGUgc3RhY2sgbGV2ZWwuXG4gKi9cblxuY29uc3QgRk9DVVNBQkxFX1NFTEVDVE9SID0gW1xuICBcImFbaHJlZl1cIixcbiAgXCJhcmVhW2hyZWZdXCIsXG4gIFwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKVwiLFxuICBcImlucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3R5cGU9aGlkZGVuXSlcIixcbiAgXCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwiaWZyYW1lXCIsXG4gIFwib2JqZWN0XCIsXG4gIFwiZW1iZWRcIixcbiAgJ1t0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKScsXG4gIFwiW2NvbnRlbnRlZGl0YWJsZV1cIixcbl0uam9pbihcIixcIik7XG5cbmZ1bmN0aW9uIGdldEZvY3VzYWJsZShyb290OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50W10ge1xuICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20ocm9vdC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihGT0NVU0FCTEVfU0VMRUNUT1IpKTtcbiAgcmV0dXJuIG5vZGVzLmZpbHRlcihcbiAgICAoZWwpID0+ICFlbC5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSAmJiBlbC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiKSAhPT0gXCJ0cnVlXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxGb2N1c1RyYXAocm9vdDogSFRNTEVsZW1lbnQpOiAoKSA9PiB2b2lkIHtcbiAgY29uc3QgcHJldmlvdXNBY3RpdmUgPSAoXG4gICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA6IG51bGxcbiAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLy8gTW92ZSBmb2N1cyBpbnRvIHRoZSByb290IGlmIGl0J3Mgbm90IGFscmVhZHkuXG4gIGNvbnN0IGZvY3VzYWJsZSA9IGdldEZvY3VzYWJsZShyb290KTtcbiAgY29uc3QgZmlyc3QgPSBmb2N1c2FibGVbMF0gPz8gcm9vdDtcbiAgaWYgKCFyb290LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgZmlyc3QuZm9jdXMoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBcIlRhYlwiKSByZXR1cm47XG4gICAgY29uc3QgaXRlbXMgPSBnZXRGb2N1c2FibGUocm9vdCk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RJdGVtID0gaXRlbXNbMF07XG4gICAgY29uc3QgbGFzdEl0ZW0gPSBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIWZpcnN0SXRlbSB8fCAhbGFzdEl0ZW0pIHJldHVybjtcbiAgICBjb25zdCBhY3RpdmUgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgaWYgKGFjdGl2ZSA9PT0gZmlyc3RJdGVtIHx8ICFyb290LmNvbnRhaW5zKGFjdGl2ZSkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGFzdEl0ZW0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFjdGl2ZSA9PT0gbGFzdEl0ZW0pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBmaXJzdEl0ZW0uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICAgIGlmIChwcmV2aW91c0FjdGl2ZSAmJiBkb2N1bWVudC5jb250YWlucyhwcmV2aW91c0FjdGl2ZSkpIHtcbiAgICAgIHByZXZpb3VzQWN0aXZlLmZvY3VzKCk7XG4gICAgfVxuICB9O1xufVxuIiwKICAgICIvKipcbiAqIFNjcm9sbCBsb2NrLlxuICpcbiAqIFJlZmVyZW5jZS1jb3VudGVkLiBNdWx0aXBsZSBvdmVybGF5cyBjYW4gcmVxdWVzdCBhIGxvY2s7IHRoZSBib2R5XG4gKiBzdGF5cyBsb2NrZWQgdW50aWwgZXZlcnkgcmVxdWVzdCByZWxlYXNlcy4gQSBzY3JvbGxiYXItZ3V0dGVyIHRva2VuXG4gKiBpcyB3cml0dGVuIGF0IGFjcXVpcmUgdGltZSBzbyBjb250ZW50IGJlaGluZCB0aGUgb3ZlcmxheSBkb2Vzbid0XG4gKiByZWZsb3cgd2hlbiB0aGUgYmFyIGRpc2FwcGVhcnMuXG4gKi9cblxubGV0IGNvdW50ID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjcXVpcmVTY3JvbGxMb2NrKCk6ICgpID0+IHZvaWQge1xuICBpZiAoY291bnQgPT09IDApIHtcbiAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGNvbnN0IGd1dHRlciA9IHdpbmRvdy5pbm5lcldpZHRoIC0gaHRtbC5jbGllbnRXaWR0aDtcbiAgICBodG1sLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb2xseS1zY3JvbGxiYXItZ3V0dGVyXCIsIGAke2d1dHRlcn1weGApO1xuICAgIGh0bWwuc2V0QXR0cmlidXRlKFwiZGF0YS1wb2xseS1zY3JvbGwtbG9ja2VkXCIsIFwidHJ1ZVwiKTtcbiAgfVxuICBjb3VudCArPSAxO1xuICBsZXQgcmVsZWFzZWQgPSBmYWxzZTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAocmVsZWFzZWQpIHJldHVybjtcbiAgICByZWxlYXNlZCA9IHRydWU7XG4gICAgY291bnQgLT0gMTtcbiAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgY291bnQgPSAwO1xuICAgICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIGh0bWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1wb2xseS1zY3JvbGwtbG9ja2VkXCIpO1xuICAgICAgaHRtbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIi0tcG9sbHktc2Nyb2xsYmFyLWd1dHRlclwiKTtcbiAgICB9XG4gIH07XG59XG4iLAogICAgIi8qKlxuICogT3ZlcmxheVJvb3Qg4oCUIHBvcnRhbCB0YXJnZXQgZm9yIHN0YWNrZWQgb3ZlcmxheXMuXG4gKlxuICogQXBwcyByZW5kZXIgPE92ZXJsYXlSb290IC8+IG9uY2UsIHR5cGljYWxseSBhcyB0aGUgbGFzdCBjaGlsZCBvZiB0aGVcbiAqIGFwcCByb290LiBNb2RhbCwgQ29uZmlybURpYWxvZywgYW5kIFRvYXN0IHBvcnRhbCBpbnRvIHRoaXMgZWxlbWVudDtcbiAqIHRoZSBzY3JvbGwgbG9jayB0b2dnbGVzIGJhc2VkIG9uIHRoZSBvdmVybGF5IHJlZ2lzdHJ5IGNvdW50LlxuICovXG5cbmltcG9ydCB7IGVmZmVjdCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgaGFzT3Blbk92ZXJsYXkgfSBmcm9tIFwiLi4vYWN0aW9ucy9vdmVybGF5LnRzXCI7XG5pbXBvcnQgeyBhY3F1aXJlU2Nyb2xsTG9jayB9IGZyb20gXCIuL2ludGVybmFsL3Njcm9sbC1sb2NrLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9PdmVybGF5Um9vdC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBPdmVybGF5Um9vdCgpIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCByZWxlYXNlOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCBkaXNwb3NlID0gZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChoYXNPcGVuT3ZlcmxheSgpKSB7XG4gICAgICAgIGlmICghcmVsZWFzZSkgcmVsZWFzZSA9IGFjcXVpcmVTY3JvbGxMb2NrKCk7XG4gICAgICB9IGVsc2UgaWYgKHJlbGVhc2UpIHtcbiAgICAgICAgcmVsZWFzZSgpO1xuICAgICAgICByZWxlYXNlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZGlzcG9zZSgpO1xuICAgICAgcmVsZWFzZT8uKCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiA8ZGl2IHJlZj17cmVmfSBjbGFzcz17Y2xhc3Nlc1tcInJvb3RcIl19IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1vdmVybGF5LXJvb3QgLz47XG59XG5cbi8qKiBHZXQgdGhlIG1vdW50IG5vZGUgZm9yIHBvcnRhbGVkIG92ZXJsYXlzLiBSZXR1cm5zIG51bGwgYmVmb3JlIG1vdW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE92ZXJsYXlSb290Tm9kZSgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXCJbZGF0YS1wb2xseS1vdmVybGF5LXJvb3RdXCIpO1xufVxuIiwKICAgICIvKipcbiAqIE1vZGFsIOKAlCBjb21wb3VuZCBkaWFsb2cgd2l0aCBmb2N1cyB0cmFwLCBFc2NhcGUgaGFuZGxpbmcsIHBvcnRhbCxcbiAqIGFuZCBvdmVybGF5LXN0YWNrIGludGVncmF0aW9uLlxuICpcbiAqIFJvb3QgdGFrZXMgYSBgd2hlbmAgc2lnbmFsIChvciBib29sZWFuKS4gV2hlbiB0cnV0aHkgdGhlIGNvbnRlbnQgbW91bnRzXG4gKiBpbnRvIHRoZSBPdmVybGF5Um9vdCBwb3J0YWwsIGZvY3VzIG1vdmVzIGluc2lkZSwgVGFiIGlzIHRyYXBwZWQsIEVzY2FwZVxuICogZmlyZXMgYGRhdGEtYWN0aW9uPVwibW9kYWw6Y2xvc2VcImAgKG9yIHRoZSBvdmVybGF5IHJlZ2lzdHJ5J3Mgb25DbG9zZVxuICogY2FsbGJhY2spLCBhbmQgdGhlIGJvZHkgc2Nyb2xsIGxvY2tzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVhZG9ubHlTaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVDb250ZXh0LCB0eXBlIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZUlkLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgcG9wT3ZlcmxheSwgcHVzaE92ZXJsYXkgfSBmcm9tIFwiLi4vYWN0aW9ucy9vdmVybGF5LnRzXCI7XG5pbXBvcnQgeyBpbnN0YWxsRm9jdXNUcmFwIH0gZnJvbSBcIi4vaW50ZXJuYWwvZm9jdXMtdHJhcC50c1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vTW9kYWwubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZ2V0T3ZlcmxheVJvb3ROb2RlIH0gZnJvbSBcIi4vT3ZlcmxheVJvb3QudHN4XCI7XG5pbXBvcnQgeyBTdXJmYWNlIH0gZnJvbSBcIi4vU3VyZmFjZS50c3hcIjtcblxudHlwZSBNb2RhbENvbnRleHQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlSWQ6IHN0cmluZztcbiAgZGVzY0lkOiBzdHJpbmc7XG4gIGNsb3NlOiAoKSA9PiB2b2lkO1xufTtcblxuY29uc3QgQ3R4ID0gY3JlYXRlQ29udGV4dDxNb2RhbENvbnRleHQgfCBudWxsPihudWxsKTtcblxuZnVuY3Rpb24gdXNlTW9kYWwoKTogTW9kYWxDb250ZXh0IHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChDdHgpO1xuICBpZiAoIWN0eCkgdGhyb3cgbmV3IEVycm9yKFwiTW9kYWwgc3ViLWNvbXBvbmVudHMgbXVzdCByZW5kZXIgaW5zaWRlIDxNb2RhbC5Sb290PlwiKTtcbiAgcmV0dXJuIGN0eDtcbn1cblxudHlwZSBSb290UHJvcHMgPSB7XG4gIHdoZW46IFJlYWRvbmx5U2lnbmFsPGJvb2xlYW4+IHwgYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIEFjY2Vzc2libGUgbGFiZWwgc291cmNlOiBcInRpdGxlXCIgdXNlcyB0aGUgPE1vZGFsLlRpdGxlPiBpZCwgb3IgcGFzcyBhbiBleHBsaWNpdCBsYWJlbC4gKi9cbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBSb290KHsgd2hlbiwgb25DbG9zZSwgY2hpbGRyZW4sIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwgfTogUm9vdFByb3BzKSB7XG4gIGNvbnN0IGlkID0gdXNlSWQoKTtcbiAgY29uc3QgdGl0bGVJZCA9IGAke2lkfS10aXRsZWA7XG4gIGNvbnN0IGRlc2NJZCA9IGAke2lkfS1kZXNjYDtcbiAgY29uc3QgbW91bnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3BvcnRhbE5vZGUsIHNldFBvcnRhbE5vZGVdID0gdXNlU3RhdGU8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBpc09wZW4gPSB0eXBlb2Ygd2hlbiA9PT0gXCJib29sZWFuXCIgPyB3aGVuIDogd2hlbi52YWx1ZTtcblxuICAvLyBDb25zdW1lcnMgYWxtb3N0IGFsd2F5cyBwYXNzIGFuIGlubGluZSBjbG9zdXJlIGZvciBgb25DbG9zZWAsIHNvIHRoZSBwcm9wXG4gIC8vIGhhcyBhIG5ldyBpZGVudGl0eSBvbiBldmVyeSByZW5kZXIuIEtlZXBpbmcgaXQgaW4gdGhlIG92ZXJsYXkgZWZmZWN0J3NcbiAgLy8gZGVwZW5kZW5jeSBhcnJheSBtYWRlIHRoYXQgZWZmZWN0IHRlYXIgZG93biBhbmQgcmUtaW5zdGFsbCBwZXIgcmVuZGVyOlxuICAvLyBlYWNoIHJ1biB3cm90ZSB0aGUgYHN0YWNrYCBzaWduYWwgdHdpY2UgYW5kIG1vdmVkIGZvY3VzIHR3aWNlLCBhbmQgdGhlXG4gIC8vIHNpZ25hbCB3cml0ZSByZS1yZW5kZXJlZCB0aGUgc3Vic2NyaWJlciB0aGF0IHByb2R1Y2VkIHRoZSBuZXh0IGNsb3N1cmUuXG4gIC8vIFRoZSByZXN1bHQgd2FzIGFuIHVuYm91bmRlZCByZW5kZXIgbG9vcCB0aGF0IHBpbm5lZCB0aGUgbWFpbiB0aHJlYWRcbiAgLy8gKHBvbGx5IzE3NykuIFRoZSBlZmZlY3Qgbm93IHJlYWRzIHRoZSBsYXRlc3QgY2FsbGJhY2sgdGhyb3VnaCBhIHJlZiwgc29cbiAgLy8gaXRzIGRlcGVuZGVuY2llcyBhcmUgb25seSB0aGUgdmFsdWVzIHRoYXQgZ2VudWluZWx5IHJlLW9wZW4gdGhlIG92ZXJsYXkuXG4gIGNvbnN0IG9uQ2xvc2VSZWYgPSB1c2VSZWYob25DbG9zZSk7XG4gIG9uQ2xvc2VSZWYuY3VycmVudCA9IG9uQ2xvc2U7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgc2V0UG9ydGFsTm9kZShudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0UG9ydGFsTm9kZShnZXRPdmVybGF5Um9vdE5vZGUoKSk7XG4gIH0sIFtpc09wZW5dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuIHx8ICFwb3J0YWxOb2RlKSByZXR1cm47XG4gICAgY29uc3QgZW50cnkgPSB7IGlkLCBvbkNsb3NlOiAoKSA9PiBvbkNsb3NlUmVmLmN1cnJlbnQ/LigpIH07XG4gICAgcHVzaE92ZXJsYXkoZW50cnkpO1xuICAgIGNvbnN0IGVsID0gbW91bnRSZWYuY3VycmVudDtcbiAgICBjb25zdCBjbGVhbnVwID0gZWxcbiAgICAgID8gaW5zdGFsbEZvY3VzVHJhcChlbClcbiAgICAgIDogKCkgPT4ge1xuICAgICAgICAgIC8qIG5vIHJlZiB5ZXQgKi9cbiAgICAgICAgfTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcG9wT3ZlcmxheShpZCk7XG4gICAgfTtcbiAgfSwgW2lzT3BlbiwgcG9ydGFsTm9kZSwgaWRdKTtcblxuICBpZiAoIWlzT3BlbiB8fCAhcG9ydGFsTm9kZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgb25DbG9zZT8uKCk7XG4gIH07XG5cbiAgY29uc3QgY3R4OiBNb2RhbENvbnRleHQgPSB7IGlkLCB0aXRsZUlkLCBkZXNjSWQsIGNsb3NlIH07XG5cbiAgY29uc3QgY29udGVudCA9IChcbiAgICA8Q3R4LlByb3ZpZGVyIHZhbHVlPXtjdHh9PlxuICAgICAgPExheW91dFxuICAgICAgICBlbGVtZW50UmVmPXttb3VudFJlZn1cbiAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICAgIGp1c3RpZnlJdGVtcz1cImNlbnRlclwiXG4gICAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJjb250YWluZXJcIl19XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1tb2RhbC1jb250ZW50XG4gICAgICAgIGRhdGEtb3ZlcmxheS1pZD17aWR9XG4gICAgICAgIGRhdGEtc3RhdGU9XCJvcGVuXCJcbiAgICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXthcmlhTGFiZWwgPyB1bmRlZmluZWQgOiB0aXRsZUlkfVxuICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e2Rlc2NJZH1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9DdHguUHJvdmlkZXI+XG4gICk7XG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChjb250ZW50LCBwb3J0YWxOb2RlKTtcbn1cblxuZnVuY3Rpb24gQmFja2Ryb3AoKSB7XG4gIGNvbnN0IHsgY2xvc2UgfSA9IHVzZU1vZGFsKCk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzcz17Y2xhc3Nlc1tcImJhY2tkcm9wXCJdfSBkYXRhLXBvbGx5LW1vZGFsLWJhY2tkcm9wIG9uQ2xpY2s9e2Nsb3NlfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICApO1xufVxuXG50eXBlIENvbnRlbnRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogSlNYLkNTU1Byb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBDb250ZW50KHsgY2hpbGRyZW4sIGNsYXNzTmFtZSwgc3R5bGUgfTogQ29udGVudFByb3BzKSB7XG4gIGNvbnN0IGNscyA9IGNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJzdXJmYWNlXCJdfSAke2NsYXNzTmFtZX1gIDogY2xhc3Nlc1tcInN1cmZhY2VcIl07XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgcmFkaXVzPVwibGdcIlxuICAgICAgc2hhZG93PVwibGdcIlxuICAgICAgcG9zaXRpb249XCJyZWxhdGl2ZVwiXG4gICAgICBjbGFzc05hbWU9e2Nsc31cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgIGRhdGEtcG9sbHktbW9kYWwtc3VyZmFjZVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEhlYWRlcih7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8aGVhZGVyIGNsYXNzPXtjbGFzc2VzW1wiaGVhZGVyXCJdfSBkYXRhLXBvbGx5LW1vZGFsLWhlYWRlcj5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2hlYWRlcj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gVGl0bGUoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIGNvbnN0IHsgdGl0bGVJZCB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8aDIgaWQ9e3RpdGxlSWR9IGNsYXNzPXtjbGFzc2VzW1widGl0bGVcIl19IGRhdGEtcG9sbHktbW9kYWwtdGl0bGU+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9oMj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQm9keSh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgY29uc3QgeyBkZXNjSWQgfSA9IHVzZU1vZGFsKCk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD17ZGVzY0lkfSBjbGFzcz17Y2xhc3Nlc1tcImJvZHlcIl19IGRhdGEtcG9sbHktbW9kYWwtYm9keT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRm9vdGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxmb290ZXIgY2xhc3M9e2NsYXNzZXNbXCJmb290ZXJcIl19IGRhdGEtcG9sbHktbW9kYWwtZm9vdGVyPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZm9vdGVyPlxuICApO1xufVxuXG50eXBlIENsb3NlUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIEZpcmUgYSByZWdpc3RlcmVkIGRhdGEtYWN0aW9uIGluc3RlYWQgb2YgY2FsbGluZyB0aGUgb25DbG9zZSBjYWxsYmFjay4gKi9cbiAgYWN0aW9uPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQ2xvc2UoeyBjaGlsZHJlbiwgYWN0aW9uIH06IENsb3NlUHJvcHMpIHtcbiAgY29uc3QgeyBjbG9zZSB9ID0gdXNlTW9kYWwoKTtcbiAgaWYgKGFjdGlvbikge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImNsb3NlXCJdfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgZGF0YS1wb2xseS1tb2RhbC1jbG9zZVxuICAgICAgICBkYXRhLWFjdGlvbj17YWN0aW9ufVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz17Y2xhc3Nlc1tcImNsb3NlXCJdfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgZGF0YS1wb2xseS1tb2RhbC1jbG9zZVxuICAgICAgb25DbGljaz17Y2xvc2V9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgTW9kYWwgPSB7XG4gIFJvb3QsXG4gIEJhY2tkcm9wLFxuICBDb250ZW50LFxuICBIZWFkZXIsXG4gIFRpdGxlLFxuICBCb2R5LFxuICBGb290ZXIsXG4gIENsb3NlLFxufTtcbiIsCiAgICAiLyoqXG4gKiBDb25maXJtRGlhbG9nIOKAlCBQcm9taXNlLXJldHVybmluZyBjb25maXJtYXRpb24gcHJpbWl0aXZlLlxuICpcbiAqIGBjb25maXJtKHsgdGl0bGUsIGJvZHksIGRhbmdlciB9KWAgcmV0dXJucyBQcm9taXNlPGJvb2xlYW4+LiBPcGVucyB0aGVcbiAqIHJlbmRlcmVkIGA8Q29uZmlybURpYWxvZy5Ib3N0IC8+YCBtb2RhbCAod2hpY2ggbXVzdCBiZSBtb3VudGVkIG9uY2UgYXRcbiAqIHRoZSBhcHAgcm9vdCkuIFVzZXIgcGlja2luZyBjb25maXJtIG9yIGNhbmNlbCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEVzY2FwZSwgYmFja2Ryb3AgY2xpY2ssIGFuZCBleHBsaWNpdCBgLmRpc21pc3MoKWAgcmVzb2x2ZSBmYWxzZS5cbiAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NvbmZpcm1EaWFsb2cubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiLi9Nb2RhbC50c3hcIjtcblxudHlwZSBDb25maXJtUmVxdWVzdCA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgYm9keT86IHN0cmluZztcbiAgZGFuZ2VyPzogYm9vbGVhbjtcbiAgY29uZmlybUxhYmVsPzogc3RyaW5nO1xuICBjYW5jZWxMYWJlbD86IHN0cmluZztcbiAgcmVzb2x2ZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xufTtcblxuY29uc3QgcGVuZGluZyA9IHNpZ25hbDxDb25maXJtUmVxdWVzdCB8IG51bGw+KG51bGwpO1xuY29uc3QgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcbmxldCBuZXh0SWQgPSAwO1xuXG5leHBvcnQgdHlwZSBDb25maXJtT3B0aW9ucyA9IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgYm9keT86IHN0cmluZztcbiAgZGFuZ2VyPzogYm9vbGVhbjtcbiAgY29uZmlybUxhYmVsPzogc3RyaW5nO1xuICBjYW5jZWxMYWJlbD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25maXJtKG9wdGlvbnM6IENvbmZpcm1PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgIG5leHRJZCArPSAxO1xuICAgIHBlbmRpbmcudmFsdWUgPSB7XG4gICAgICBpZDogbmV4dElkLFxuICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGUsXG4gICAgICBib2R5OiBvcHRpb25zLmJvZHksXG4gICAgICBkYW5nZXI6IG9wdGlvbnMuZGFuZ2VyLFxuICAgICAgY29uZmlybUxhYmVsOiBvcHRpb25zLmNvbmZpcm1MYWJlbCxcbiAgICAgIGNhbmNlbExhYmVsOiBvcHRpb25zLmNhbmNlbExhYmVsLFxuICAgICAgcmVzb2x2ZSxcbiAgICB9O1xuICAgIGlzT3Blbi52YWx1ZSA9IHRydWU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbG9zZShyZXN1bHQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgY3VycmVudCA9IHBlbmRpbmcudmFsdWU7XG4gIGlmICghY3VycmVudCkgcmV0dXJuO1xuICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgcGVuZGluZy52YWx1ZSA9IG51bGw7XG4gIGN1cnJlbnQucmVzb2x2ZShyZXN1bHQpO1xufVxuXG4vKiogUmVuZGVycyB0aGUgYWN0aXZlIGNvbmZpcm0gZGlhbG9nLiBNb3VudCBvbmNlIG5lYXIgdGhlIGFwcCByb290LiAqL1xuZnVuY3Rpb24gSG9zdCgpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBjdXJyZW50ID0gcGVuZGluZy52YWx1ZTtcbiAgaWYgKCFjdXJyZW50KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIChcbiAgICA8TW9kYWwuUm9vdCB3aGVuPXtpc09wZW59IG9uQ2xvc2U9eygpID0+IGNsb3NlKGZhbHNlKX0+XG4gICAgICA8TW9kYWwuQmFja2Ryb3AgLz5cbiAgICAgIDxNb2RhbC5Db250ZW50PlxuICAgICAgICA8TW9kYWwuSGVhZGVyPlxuICAgICAgICAgIDxNb2RhbC5UaXRsZT57Y3VycmVudC50aXRsZX08L01vZGFsLlRpdGxlPlxuICAgICAgICA8L01vZGFsLkhlYWRlcj5cbiAgICAgICAge2N1cnJlbnQuYm9keSA/IDxNb2RhbC5Cb2R5PntjdXJyZW50LmJvZHl9PC9Nb2RhbC5Cb2R5PiA6IG51bGx9XG4gICAgICAgIDxNb2RhbC5Gb290ZXI+XG4gICAgICAgICAgPExheW91dFxuICAgICAgICAgICAgY29sdW1ucz1cImF1dG8gYXV0b1wiXG4gICAgICAgICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJlbmRcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzW1wiYWN0aW9uc1wiXX1cbiAgICAgICAgICAgIGRhdGEtcG9sbHktY29uZmlybS1hY3Rpb25zXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjYW5jZWxcIl19XG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LWNvbmZpcm0tY2FuY2VsXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsb3NlKGZhbHNlKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2N1cnJlbnQuY2FuY2VsTGFiZWwgPz8gXCJDYW5jZWxcIn1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9e2N1cnJlbnQuZGFuZ2VyID8gY2xhc3Nlc1tcImNvbmZpcm1EYW5nZXJcIl0gOiBjbGFzc2VzW1wiY29uZmlybVwiXX1cbiAgICAgICAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktY29uZmlybS1va1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbG9zZSh0cnVlKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2N1cnJlbnQuY29uZmlybUxhYmVsID8/IFwiT0tcIn1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L01vZGFsLkZvb3Rlcj5cbiAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICA8L01vZGFsLlJvb3Q+XG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBDb25maXJtRGlhbG9nID0geyBIb3N0LCBjb25maXJtIH07XG4iLAogICAgIi8qKlxuICogRmlsZUlucHV0IOKAlCBhIHN0eWxlZCB0cmlnZ2VyIGZvciB0aGUgbmF0aXZlIGZpbGUgcGlja2VyLlxuICpcbiAqIEEgZmlsZSBpcyBhIGJpbmFyeSBvYmplY3Q6IGl0IGNhbm5vdCByaWRlIGEgYGRhdGEtYWN0aW9uYCBhdHRyaWJ1dGVcbiAqIHRoZSB3YXkgYSBzdHJpbmcgdmFsdWUgZG9lcywgc28gRmlsZUlucHV0IGlzIHRoZSBvbmUgaW5wdXQgcHJpbWl0aXZlXG4gKiB0aGF0IHRha2VzIGEgY2FsbGJhY2suIGBvbkZpbGVzYCBmaXJlcyB3aXRoIHRoZSBjaG9zZW4gRmlsZUxpc3QuIFRoZVxuICogbmF0aXZlIDxpbnB1dCB0eXBlPVwiZmlsZVwiPiBzdGF5cyBpbiB0aGUgRE9NIOKAlCB2aXN1YWxseSBoaWRkZW4gaW5zaWRlXG4gKiB0aGUgPGxhYmVsPiDigJQgc28gdGhlIHdob2xlIGNvbnRyb2wgb3BlbnMgdGhlIHBpY2tlciBhbmQgcmVtYWluc1xuICoga2V5Ym9hcmQtYWNjZXNzaWJsZSAocG9sbHkjMTM1KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0ZpbGVJbnB1dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEZpbGVJbnB1dFByb3BzID0ge1xuICAvKiogRmlyZWQgd2l0aCB0aGUgY2hvc2VuIGZpbGVzIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4gKi9cbiAgb25GaWxlczogKGZpbGVzOiBGaWxlTGlzdCkgPT4gdm9pZDtcbiAgLyoqIFZpc2libGUgdHJpZ2dlciB0ZXh0LiBEZWZhdWx0OiAnQ2hvb3NlIGZpbGUnLiAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqIGBhY2NlcHRgIGZpbHRlciBmb3J3YXJkZWQgdG8gdGhlIG5hdGl2ZSBpbnB1dCAoZS5nLiAnaW1hZ2UvKicpLiAqL1xuICBhY2NlcHQ/OiBzdHJpbmc7XG4gIC8qKiBBbGxvdyBzZWxlY3RpbmcgbW9yZSB0aGFuIG9uZSBmaWxlLiAqL1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBGaWxlSW5wdXQocHJvcHM6IEZpbGVJbnB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IG9uRmlsZXMsIGxhYmVsID0gXCJDaG9vc2UgZmlsZVwiLCBhY2NlcHQsIG11bHRpcGxlLCBkaXNhYmxlZCwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgY29uc3QgeyBmaWxlcyB9ID0gZS5jdXJyZW50VGFyZ2V0O1xuICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSBvbkZpbGVzKGZpbGVzKTtcbiAgfTtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiZmlsZUlucHV0XCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxsYWJlbCBpZD17aWR9IGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1maWxlLWlucHV0PlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJuYXRpdmVcIl19XG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIC8+XG4gICAgICA8c3Bhbj57bGFiZWx9PC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogSHRtbCDigJQgcmVuZGVyIHRydXN0ZWQsIGFscmVhZHktc2FuaXRpc2VkIHJhdyBtYXJrdXAuXG4gKlxuICogVGhlIGRlbGliZXJhdGUgZXNjYXBlIGhhdGNoIGZvciB0aGUgcmFyZSB0aGluZyBwb2xseS11aSBjYW5ub3RcbiAqIGV4cHJlc3M6IGEgbG9jYWxseSBnZW5lcmF0ZWQsIGFscmVhZHktc2FmZSBTVkcgKGEgUVIgY29kZSksIGFcbiAqIHByZS1yZW5kZXJlZCBkaWFncmFtLiBUaGUgY2FsbGVyIG93bnMgc2FmZXR5IOKAlCBgaHRtbGAgZ29lcyBzdHJhaWdodFxuICogaW50byBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLCBzbyBpdCBNVVNUIGJlIHRydXN0ZWQgb3Igc2FuaXRpc2VkXG4gKiBmaXJzdC4gRm9yIHVudHJ1c3RlZCBtYXJrZG93biB1c2UgYHJlbmRlck1hcmtkb3duYCwgd2hpY2ggc2FuaXRpc2VzO1xuICogZm9yIGFueXRoaW5nIGEgcHJpbWl0aXZlIGFscmVhZHkgY292ZXJzLCB1c2UgdGhlIHByaW1pdGl2ZS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgSHRtbFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgLyoqIFRydXN0ZWQsIGFscmVhZHktc2FuaXRpc2VkIEhUTUwuIFRoZSBjYWxsZXIgb3ducyBpdHMgc2FmZXR5LiAqL1xuICBodG1sOiBzdHJpbmc7XG4gIC8qKiBQb2x5bW9ycGhpYyB3cmFwcGVyIGVsZW1lbnQgKGRpdiwgc3BhbiwgZmlndXJlLCDigKYpLiBEZWZhdWx0cyB0byAnZGl2Jy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gSHRtbChwcm9wczogSHRtbFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGh0bWwsIGFzID0gXCJkaXZcIiwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoYXMsIHtcbiAgICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qL3RpdGxlIGZpcnN0OyB0aGUgcHJpbWl0aXZlJ3Mgb3duXG4gICAgLy8gYXR0cmlidXRlcyBiZWxvdyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgICAuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpLFxuICAgIGlkLFxuICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgXCJkYXRhLXBvbGx5LXVpXCI6IHRydWUsXG4gICAgXCJkYXRhLXBvbGx5LWh0bWxcIjogdHJ1ZSxcbiAgICAvLyBub3NlbWdyZXA6IHR5cGVzY3JpcHQucmVhY3Quc2VjdXJpdHkuYXVkaXQucmVhY3QtZGFuZ2Vyb3VzbHlzZXRpbm5lcmh0bWwucmVhY3QtZGFuZ2Vyb3VzbHlzZXRpbm5lcmh0bWwg4oCUIHRoaXMgcHJpbWl0aXZlIElTIHRoZSBkb2N1bWVudGVkIHRydXN0ZWQtbWFya3VwIGVzY2FwZSBoYXRjaDsgdGhlIGNhbGxlciBvd25zIHNhbml0aXNhdGlvbiAoc2VlIG1vZHVsZSBkb2NzKS5cbiAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDogeyBfX2h0bWw6IGh0bWwgfSxcbiAgfSk7XG59XG4iLAogICAgIi8qKlxuICogTGluayDigJQgdG9rZW4tc3R5bGVkIG5hdmlnYXRpb25hbCBhbmNob3IuXG4gKlxuICogVGhlIHByaW1pdGl2ZSBmb3IgcGxhaW4gaHlwZXJsaW5rczogaHViIGFwcC1ncmlkIGNhcmRzLCBhIGZpbGVcbiAqIGRvd25sb2FkLCBhbiBleHRlcm5hbCByZWZlcmVuY2UuIDxCdXR0b24gaHJlZj4gaXMgZm9yIGxpbmstc2hhcGVkXG4gKiBCVVRUT05TIOKAlCBhIGNhbGwgdG8gYWN0aW9uIHdlYXJpbmcgYnV0dG9uIGNocm9tZTsgPExpbms+IGlzIGZvclxuICogaW5saW5lLCB0ZXh0dWFsIGxpbmtzIHRoYXQgcmVhZCBhcyBsaW5rcy4gYGV4dGVybmFsYCBvcGVucyBhIG5ldyB0YWJcbiAqIHdpdGggYHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcImA7IGBkb3dubG9hZGAgb2ZmZXJzIHRoZSB0YXJnZXQgYXMgYVxuICogZmlsZSAoYW4gZW1wdHkgc3RyaW5nIGtlZXBzIHRoZSByZXNvdXJjZSdzIG93biBmaWxlbmFtZSkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vTGluay5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIExpbmtQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgaHJlZjogc3RyaW5nO1xuICAvKiogT3BlbiBpbiBhIG5ldyB0YWIgd2l0aCByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIuICovXG4gIGV4dGVybmFsPzogYm9vbGVhbjtcbiAgLyoqIE9mZmVyIHRoZSBocmVmIGFzIGEgZG93bmxvYWQ7IGFuIGVtcHR5IHN0cmluZyBrZWVwcyBpdHMgZmlsZW5hbWUuICovXG4gIGRvd25sb2FkPzogc3RyaW5nO1xuICAvKiogRHJvcCB0aGUgdW5kZXJsaW5lIHVudGlsIGhvdmVyIOKAlCBmb3IgbGluayBncmlkcyBhbmQgY2FyZCBsaW5rcy4gKi9cbiAgc3VidGxlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBMaW5rKHByb3BzOiBMaW5rUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGhyZWYsIGV4dGVybmFsLCBkb3dubG9hZCwgc3VidGxlLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wibGlua1wiXV07XG4gIGlmIChzdWJ0bGUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcInN1YnRsZVwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICB7Li4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBocmVmPXtocmVmfVxuICAgICAgdGFyZ2V0PXtleHRlcm5hbCA/IFwiX2JsYW5rXCIgOiB1bmRlZmluZWR9XG4gICAgICByZWw9e2V4dGVybmFsID8gXCJub29wZW5lciBub3JlZmVycmVyXCIgOiB1bmRlZmluZWR9XG4gICAgICBkb3dubG9hZD17ZG93bmxvYWR9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWxpbmtcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9hPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIE91dHB1dCDigJQgcmVhZC1vbmx5LCBtdWx0aS1saW5lIGRpYWdub3N0aWMgdGV4dC5cbiAqXG4gKiBGb3IgcHJvZ3JhbSBvdXRwdXQgYSBjb25zdW1lciBtdXN0IFNIT1cgYnV0IG5vdCBlZGl0OiBhIG1lc2gtc3RhdGVcbiAqIHNuYXBzaG90LCBhIHBlci1wZWVyIHN5bmMgdGFibGUsIGEgcmVjb3ZlcnkgYmxvYi4gPFRleHRJbnB1dD4gYW5kXG4gKiA8QWN0aW9uSW5wdXQ+IGFyZSBzaW5nbGUtbGluZSBhbmQgZWRpdGFibGU7IDxDb2RlPiBpcyBmb3IgY29kZVxuICogc2FtcGxlcyBhbmQgbmV2ZXIgd3JhcHMuIDxPdXRwdXQ+IHJlbmRlcnMgYSBtb25vc3BhY2UgPHByZT4gdGhhdFxuICogd3JhcHMgbG9uZyBsaW5lcyBieSBkZWZhdWx0IOKAlCBhIGRpYWdub3N0aWMgZHVtcCBzaG91bGQgc3RheSBvblxuICogc2NyZWVuIOKAlCB3aXRoIGBzY3JvbGxgIHRvIHN3aXRjaCB0byBhIGhvcml6b250YWwgc2Nyb2xsYmFyIGluc3RlYWQuXG4gKlxuICogSXQgY2FycmllcyB0aGUgcG9sbHkjMTI1IHBhc3N0aHJvdWdoIHN1cmZhY2UsIHNvIGEgYGRhdGEtYWN0aW9uYFxuICogZm9yIGEgdGFwLXRvLXNlbGVjdC1hbGwgZ2VzdHVyZSByaWRlcyBzdHJhaWdodCBvbnRvIHRoZSA8cHJlPlxuICogKHBvbGx5IzEzNSkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vT3V0cHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgT3V0cHV0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIC8qKiBTY3JvbGwgbG9uZyB1bmJyZWFrYWJsZSBsaW5lcyBob3Jpem9udGFsbHkgaW5zdGVhZCBvZiB3cmFwcGluZy4gKi9cbiAgc2Nyb2xsPzogYm9vbGVhbjtcbiAgLyoqIE1ha2UgdGhlIGJsb2NrIGZvY3VzYWJsZSDigJQgcGFpciB3aXRoIGEgYGRhdGEtYWN0aW9uYCB0YXAgZ2VzdHVyZS4gKi9cbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gT3V0cHV0KHByb3BzOiBPdXRwdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgc2Nyb2xsLCB0YWJJbmRleCwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcIm91dHB1dFwiXV07XG4gIGlmIChzY3JvbGwpIHBhcnRzLnB1c2goY2xhc3Nlc1tcInNjcm9sbFwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxwcmVcbiAgICAgIHsuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpfVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIHRhYkluZGV4PXt0YWJJbmRleH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktb3V0cHV0XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvcHJlPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNlbGVjdCDigJQgZHJvcGRvd24gb2Ygb3B0aW9ucyB3aXRoIHNpbmdsZS0gb3IgbXVsdGktc2VsZWN0IHNlbWFudGljcy5cbiAqXG4gKiBDb21wb3NlcyBEcm9wZG93biBmb3IgdGhlIG1lbnUgYW5kIGEgbmF0aXZlIGNoZWNrYm94IGluIGVhY2ggb3B0aW9uXG4gKiByb3cgZm9yIG11bHRpLXNlbGVjdC4gVGhlIGBzZWxlY3RlZGAgc3RhdGUgaXMgYSBTaWduYWw8U2V0PFQ+PjtcbiAqIHNpbmdsZS1zZWxlY3QgcmVwbGFjZXMgdGhlIHNldCwgbXVsdGktc2VsZWN0IHRvZ2dsZXMgbWVtYmVyc2hpcC5cbiAqIE11bHRpLXNlbGVjdCBtb2RlIGFsc28gc2hvd3MgU2VsZWN0IEFsbCAvIENsZWFyIGFjdGlvbiBidXR0b25zIGF0XG4gKiB0aGUgdG9wIG9mIHRoZSBtZW51LiBTaW5nbGUtc2VsZWN0IG1vZGUgY2FuIG9wdCBpbnRvIGBjbGVhcmFibGVgLFxuICogd2hpY2ggcHJlcGVuZHMgYSBwbGFjZWhvbGRlci1sYWJlbGxlZCBvcHRpb24gdGhhdCByZXR1cm5zIHRoZVxuICogc2VsZWN0aW9uIHRvIGVtcHR5IOKAlCBmb3IgXCJBbnkg4oCmXCIgZmlsdGVyIHNlbWFudGljcy5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIFNpZ25hbCwgdXNlQ29tcHV0ZWQsIHVzZVNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgRHJvcGRvd24gfSBmcm9tIFwiLi9Ecm9wZG93bi50c3hcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdE9wdGlvbjxUID0gc3RyaW5nPiA9IHsgdmFsdWU6IFQ7IGxhYmVsOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgU2VsZWN0UHJvcHM8VCA9IHN0cmluZz4gPSB7XG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxUPltdO1xuICBzZWxlY3RlZDogU2lnbmFsPFNldDxUPj47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgbXVsdGlTZWxlY3Q/OiBib29sZWFuO1xuICAvKipcbiAgICogU2luZ2xlLXNlbGVjdCBvbmx5OiBwcmVwZW5kIGFuIG9wdGlvbiBsYWJlbGxlZCB3aXRoIHRoZSBwbGFjZWhvbGRlclxuICAgKiB0aGF0IHJldHVybnMgdGhlIHNlbGVjdGlvbiB0byBlbXB0eS4gV2l0aG91dCBpdCwgcGlja2luZyBhbiBvcHRpb25cbiAgICogaXMgYSB0cmFwIOKAlCBub3RoaW5nIGluIHRoZSBsaXN0IGxlYWRzIGJhY2sgdG8gXCJhbnlcIi4gVXNlIGl0IGZvclxuICAgKiBvcHRpb25hbCBmaWx0ZXJzIChcIkFueSBzdGFnZVwiKSwgbm90IHJlcXVpcmVkIGZvcm0gZmllbGRzXG4gICAqIChcIlNlbGVjdCBhIHRlYW1cIikuIElnbm9yZWQgaW4gbXVsdGktc2VsZWN0LCB3aGljaCBoYXMgQ2xlYXIuXG4gICAqL1xuICBjbGVhcmFibGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBBcHBseSBhIGNvbWZvcnRhYmxlIG1pbmltdW0gd2lkdGggdG8gdGhlIHRyaWdnZXIuIERlZmF1bHQ6IHNpemVzIHRvIGNvbnRlbnQuICovXG4gIHdpZGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuY29uc3QgTVVMVElfU0VMRUNUX0xBQkVMX1RIUkVTSE9MRCA9IDI7XG5cbmZ1bmN0aW9uIGZvcm1hdFNlbGVjdGVkPFQ+KFxuICBvcHRpb25zOiBTZWxlY3RPcHRpb248VD5bXSxcbiAgc2VsZWN0ZWQ6IFNldDxUPixcbiAgbXVsdGlTZWxlY3Q6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGlmIChzZWxlY3RlZC5zaXplID09PSAwKSByZXR1cm4gXCJcIjtcbiAgaWYgKG11bHRpU2VsZWN0ICYmIHNlbGVjdGVkLnNpemUgPiBNVUxUSV9TRUxFQ1RfTEFCRUxfVEhSRVNIT0xEKSB7XG4gICAgcmV0dXJuIGAke3NlbGVjdGVkLnNpemV9IHNlbGVjdGVkYDtcbiAgfVxuICBjb25zdCBsYWJlbHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBpZiAoc2VsZWN0ZWQuaGFzKG9wdC52YWx1ZSkpIGxhYmVscy5wdXNoKG9wdC5sYWJlbCk7XG4gIH1cbiAgcmV0dXJuIGxhYmVscy5qb2luKFwiLCBcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3Q8VCA9IHN0cmluZz4ocHJvcHM6IFNlbGVjdFByb3BzPFQ+KTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgb3B0aW9ucyxcbiAgICBzZWxlY3RlZCxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlciA9IFwiU2VsZWN0XFx1MjAyNlwiLFxuICAgIG11bHRpU2VsZWN0ID0gZmFsc2UsXG4gICAgY2xlYXJhYmxlID0gZmFsc2UsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICB3aWRlID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaXNPcGVuID0gdXNlU2lnbmFsKGZhbHNlKTtcblxuICBjb25zdCBkaXNwbGF5VGV4dCA9IHVzZUNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0ZXh0ID0gZm9ybWF0U2VsZWN0ZWQob3B0aW9ucywgc2VsZWN0ZWQudmFsdWUsIG11bHRpU2VsZWN0KTtcbiAgICByZXR1cm4gdGV4dC5sZW5ndGggPiAwID8gdGV4dCA6IHBsYWNlaG9sZGVyO1xuICB9KTtcblxuICBjb25zdCBpc0VtcHR5ID0gdXNlQ29tcHV0ZWQoKCkgPT4gc2VsZWN0ZWQudmFsdWUuc2l6ZSA9PT0gMCk7XG5cbiAgY29uc3QgaGFuZGxlT3B0aW9uQ2xpY2sgPSAodmFsdWU6IFQpOiB2b2lkID0+IHtcbiAgICBpZiAobXVsdGlTZWxlY3QpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHNlbGVjdGVkLnZhbHVlKTtcbiAgICAgIGlmIChuZXh0Lmhhcyh2YWx1ZSkpIG5leHQuZGVsZXRlKHZhbHVlKTtcbiAgICAgIGVsc2UgbmV4dC5hZGQodmFsdWUpO1xuICAgICAgc2VsZWN0ZWQudmFsdWUgPSBuZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZC52YWx1ZSA9IG5ldyBTZXQoW3ZhbHVlXSk7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0QWxsID0gKCk6IHZvaWQgPT4ge1xuICAgIHNlbGVjdGVkLnZhbHVlID0gbmV3IFNldChvcHRpb25zLm1hcCgobykgPT4gby52YWx1ZSkpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNsZWFyID0gKCk6IHZvaWQgPT4ge1xuICAgIHNlbGVjdGVkLnZhbHVlID0gbmV3IFNldCgpO1xuICB9O1xuXG4gIC8vIFRoZSBjbGVhciBvcHRpb24gYmVoYXZlcyBsaWtlIGEgbm9ybWFsIHNlbGVjdGlvbjogcGljayBpdCwgbWVudSBjbG9zZXMuXG4gIGNvbnN0IGhhbmRsZUNsZWFyT3B0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgIHNlbGVjdGVkLnZhbHVlID0gbmV3IFNldCgpO1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJQYXJ0cyA9IFtjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwiXTtcbiAgaWYgKGlzRW1wdHkudmFsdWUpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJwbGFjZWhvbGRlclwiXSA/PyBcIlwiKTtcbiAgaWYgKHdpZGUpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJ0cmlnZ2VyV2lkZVwiXSA/PyBcIlwiKTtcbiAgY29uc3QgdHJpZ2dlckNsYXNzID0gdHJpZ2dlclBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbiAgY29uc3QgdHJpZ2dlckNvbnRlbnQgPSAoXG4gICAgPExheW91dFxuICAgICAgaW5saW5lXG4gICAgICBjb2x1bW5zPVwiMWZyIGF1dG9cIlxuICAgICAgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCJcbiAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgbWF4SW5saW5lU2l6ZT1cIjEwMCVcIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1widHJpZ2dlckxhYmVsXCJdfSBkYXRhLXBvbGx5LXNlbGVjdC1sYWJlbD5cbiAgICAgICAge2Rpc3BsYXlUZXh0LnZhbHVlfVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJjYXJldFwiXX0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICA8L0xheW91dD5cbiAgKTtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wic2VsZWN0XCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LXNlbGVjdD5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAgPERyb3Bkb3duXG4gICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICB0cmlnZ2VyPXt0cmlnZ2VyQ29udGVudH1cbiAgICAgICAgdHJpZ2dlckNsYXNzTmFtZT17dHJpZ2dlckNsYXNzfVxuICAgICAgICB0cmlnZ2VyRGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICB0cmlnZ2VyVGl0bGU9e2Rpc3BsYXlUZXh0LnZhbHVlfVxuICAgICAgICBtdWx0aVNlbGVjdD17bXVsdGlTZWxlY3R9XG4gICAgICA+XG4gICAgICAgIHttdWx0aVNlbGVjdCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzcz17Y2xhc3Nlc1tcImFjdGlvbnNcIl19PlxuICAgICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIDFmclwiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz17Y2xhc3Nlc1tcImFjdGlvbkJ0blwiXX0gb25DbGljaz17aGFuZGxlU2VsZWN0QWxsfT5cbiAgICAgICAgICAgICAgICBTZWxlY3QgQWxsXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz17Y2xhc3Nlc1tcImFjdGlvbkJ0blwiXX0gb25DbGljaz17aGFuZGxlQ2xlYXJ9PlxuICAgICAgICAgICAgICAgIENsZWFyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHshbXVsdGlTZWxlY3QgJiYgY2xlYXJhYmxlICYmIChcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD17aXNFbXB0eS52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgY2xhc3M9e1xuICAgICAgICAgICAgICBpc0VtcHR5LnZhbHVlXG4gICAgICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICAgICAgOiBjbGFzc2VzW1wib3B0aW9uXCJdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhLXBvbGx5LXNlbGVjdC1jbGVhclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJPcHRpb259XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3BsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgICAge29wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWQudmFsdWUuaGFzKG9wdC52YWx1ZSk7XG4gICAgICAgICAgY29uc3Qgb3B0Q2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgICAgICAgICA/IGAke2NsYXNzZXNbXCJvcHRpb25cIl19ICR7Y2xhc3Nlc1tcIm9wdGlvblNlbGVjdGVkXCJdfWBcbiAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e1N0cmluZyhvcHQudmFsdWUpfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWQgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgICAgY2xhc3M9e29wdENsYXNzfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVPcHRpb25DbGljayhvcHQudmFsdWUpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bXVsdGlTZWxlY3QgJiYgKFxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPXtjbGFzc2VzW1wib3B0aW9uQ2hlY2tcIl19XG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc1NlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICAgICAgICAgICAgcmVhZE9ubHk9e3RydWV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPHNwYW4+e29wdC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvRHJvcGRvd24+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2tlbGV0b24g4oCUIHNoaW1tZXJpbmcgcGxhY2Vob2xkZXIgZm9yIGxvYWRpbmcgc3RhdGVzLlxuICpcbiAqIFRocmVlIHZhcmlhbnRzOiB0ZXh0IChmdWxsLXdpZHRoLCAxZW0gdGFsbCksIHJlY3QgKGZ1bGwtd2lkdGgsIDEwMHB4XG4gKiB0YWxsKSwgY2lyY2xlICg0MHg0MCkuIEEgQ1NTIGdyYWRpZW50IGFuaW1hdGVzIGxlZnQtdG8tcmlnaHQgb3ZlclxuICogMS41cy4gYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIHplcm9lcyB0aGUgYW5pbWF0aW9uIHZpYSB0aGUgdG9rZW5cbiAqIHN5c3RlbS4gQ29uc3VtZXJzIHNpemUgdmlhIHdpZHRoL2hlaWdodCBwcm9wcyAocHggbnVtYmVycyBvciBDU1NcbiAqIHN0cmluZ3MpOyBkZWZhdWx0IHNpemluZyBjb21lcyBmcm9tIHRoZSB2YXJpYW50LlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU2tlbGV0b24ubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTa2VsZXRvblZhcmlhbnQgPSBcInRleHRcIiB8IFwicmVjdFwiIHwgXCJjaXJjbGVcIjtcblxuZXhwb3J0IHR5cGUgU2tlbGV0b25Qcm9wcyA9IHtcbiAgdmFyaWFudD86IFNrZWxldG9uVmFyaWFudDtcbiAgd2lkdGg/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGhlaWdodD86IHN0cmluZyB8IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gcmVzb2x2ZVNpemUodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gYCR7dmFsdWV9cHhgO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHZhcmlhbnRDbGFzcyh2YXJpYW50OiBTa2VsZXRvblZhcmlhbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFyaWFudCA9PT0gXCJjaXJjbGVcIikgcmV0dXJuIGNsYXNzZXNbXCJjaXJjbGVcIl07XG4gIGlmICh2YXJpYW50ID09PSBcInJlY3RcIikgcmV0dXJuIGNsYXNzZXNbXCJyZWN0XCJdO1xuICByZXR1cm4gY2xhc3Nlc1tcInRleHRcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTa2VsZXRvbihwcm9wczogU2tlbGV0b25Qcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyB2YXJpYW50ID0gXCJ0ZXh0XCIsIHdpZHRoLCBoZWlnaHQsIGNsYXNzTmFtZSB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgY29uc3QgdyA9IHJlc29sdmVTaXplKHdpZHRoKTtcbiAgY29uc3QgaCA9IHJlc29sdmVTaXplKGhlaWdodCk7XG4gIGlmICh3ICE9PSB1bmRlZmluZWQpIHN0eWxlW1wid2lkdGhcIl0gPSB3O1xuICBpZiAoaCAhPT0gdW5kZWZpbmVkKSBzdHlsZVtcImhlaWdodFwiXSA9IGg7XG5cbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGJhc2UgPSBjbGFzc2VzW1wic2tlbGV0b25cIl07XG4gIGlmIChiYXNlKSBwYXJ0cy5wdXNoKGJhc2UpO1xuICBjb25zdCB2Q2xhc3MgPSB2YXJpYW50Q2xhc3ModmFyaWFudCk7XG4gIGlmICh2Q2xhc3MpIHBhcnRzLnB1c2godkNsYXNzKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPXtwYXJ0cy5qb2luKFwiIFwiKX1cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktc2tlbGV0b249e3ZhcmlhbnR9XG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIC8+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVGFicyDigJQgaG9yaXpvbnRhbCBuYXYgd2l0aCBhY3RpdmUtdGFiIGFjY2VudC5cbiAqXG4gKiBFYWNoIGJ1dHRvbiBjYXJyaWVzIGBkYXRhLWFjdGlvbmAgKHRoZSBjb25zdW1lci1wcm92aWRlZCBhY3Rpb24gbmFtZSlcbiAqIGFuZCBgZGF0YS1hY3Rpb24taWQ9e3RhYi5pZH1gIHNvIHRoZSBldmVudCBkZWxlZ2F0b3IgcmVzb2x2ZXMgdGhlXG4gKiBhY3RpdmF0ZWQgdGFiLiBUaGUgYWN0aXZlIHRhYiBnZXRzIGBhcmlhLWN1cnJlbnQ9XCJwYWdlXCJgIGFuZCBhXG4gKiBib3R0b20tYm9yZGVyIGFjY2VudC4gVGhlIG5hdiBzY3JvbGxzIGhvcml6b250YWxseSB3aXRoIGEgaGlkZGVuXG4gKiBzY3JvbGxiYXIgZm9yIG92ZXJmbG93LiBJbnRlcm5hbCBhcnJhbmdlbWVudCB1c2VzIDxMYXlvdXQ+LCBwYWNrZWQgdG9cbiAqIHRoZSBpbmxpbmUgc3RhcnQ6IHRoZSBncmlkIGlzIDEwMCUgd2lkZSwgc28gd2l0aG91dCBqdXN0aWZ5Q29udGVudCB0aGVcbiAqIGBhdXRvYCB0cmFja3Mgc3RyZXRjaCBhbmQgZm91ciB0YWJzIHNwcmVhZCBhY3Jvc3MgdGhlIHdob2xlIGNvbnRhaW5lci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RhYnMubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUYWIgPSB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGRpc2FibGVkPzogYm9vbGVhbiB9O1xuXG5leHBvcnQgdHlwZSBUYWJzUHJvcHMgPSB7XG4gIHRhYnM6IFRhYltdO1xuICBhY3RpdmVUYWI6IHN0cmluZztcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUYWJzKHByb3BzOiBUYWJzUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdGFicywgYWN0aXZlVGFiLCBhY3Rpb24sIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1widGFic1wiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxuYXZcbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBhcmlhLWxhYmVsPXtwcm9wc1tcImFyaWEtbGFiZWxcIl19XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRhYnNcbiAgICA+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGNvbHVtbnM9e2ByZXBlYXQoJHt0YWJzLmxlbmd0aH0sIGF1dG8pYH1cbiAgICAgICAgZ2FwPVwiMFwiXG4gICAgICAgIGFsaWduSXRlbXM9XCJlbmRcIlxuICAgICAgICBqdXN0aWZ5Q29udGVudD1cInN0YXJ0XCJcbiAgICAgID5cbiAgICAgICAge3RhYnMubWFwKCh0YWIpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVRhYiA9PT0gdGFiLmlkO1xuICAgICAgICAgIGNvbnN0IHRhYkNsYXNzID0gaXNBY3RpdmUgPyBgJHtjbGFzc2VzW1widGFiXCJdfSAke2NsYXNzZXNbXCJhY3RpdmVcIl19YCA6IGNsYXNzZXNbXCJ0YWJcIl07XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXt0YWIuaWR9XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17dGFiQ2xhc3N9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0YWIuZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGFyaWEtY3VycmVudD17aXNBY3RpdmUgPyBcInBhZ2VcIiA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgZGF0YS1hY3Rpb249e2FjdGlvbn1cbiAgICAgICAgICAgICAgZGF0YS1hY3Rpb24taWQ9e3RhYi5pZH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3RhYi5sYWJlbH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9uYXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVGV4dCDigJQgdHlwb2dyYXBoaWMgcHJpbWl0aXZlIGZvciBzZWNvbmRhcnksIHNpemVkLCBhbmQgc3RhdHVzIGNvcHkuXG4gKlxuICogUmVuZGVycyBzdWJ0aXRsZXMsIGNhcHRpb25zLCBmaWVsZCBsYWJlbHMsIGVtcHR5LXN0YXRlIGNvcHksIGFuZFxuICogZXJyb3Ivd2FybmluZyBtZXNzYWdlcyB3aXRob3V0IHRoZSBjb25zdW1lciByZWFjaGluZyBmb3IgYSBgc3R5bGVgXG4gKiBhdHRyaWJ1dGUgb3IgYSBoYW5kLXJvbGxlZCBjbGFzcy4gYHRvbmVgIG1hcHMgdG8gdGhlIHNlbWFudGljXG4gKiBgLS1wb2xseS10ZXh0LSpgIGFuZCBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW4gZmFtaWxpZXM7IGBzaXplYCxcbiAqIGB3ZWlnaHRgLCBgaXRhbGljYCwgYW5kIGBsZWFkaW5nYCBjb3ZlciB0aGUgcmVtYWluaW5nIHR5cG9ncmFwaGljXG4gKiBheGVzLiBgYXNgIGtlZXBzIHRoZSBlbGVtZW50IHBvbHltb3JwaGljIHNvIHRoZSBzYW1lIHByaW1pdGl2ZSBiYWNrcyBhXG4gKiA8c3Bhbj4sIDxwPiwgPGxhYmVsPiwgb3IgPGZpZ2NhcHRpb24+LiBBIG5vLXByb3AgPFRleHQ+IGlzIGFuIG9yZGluYXJ5XG4gKiA8c3Bhbj4gYXQgYm9keSBzaXplIGFuZCBkZWZhdWx0IGNvbG91ci5cbiAqXG4gKiBwb2xseSMxMjU6IGFyYml0cmFyeSBgZGF0YS0qYCAvIGBhcmlhLSpgIGF0dHJpYnV0ZXMgYXJlIGZvcndhcmRlZCB0b1xuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQsIHNvIGEgVGV4dCB0aGF0IGFsc28gbmVlZHMgYSB0ZXN0IGhvb2sgb3IgYW5cbiAqIGExMXkgYXR0cmlidXRlIHN0YXlzIGEgc2luZ2xlIGVsZW1lbnQuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9UZXh0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVGV4dFRvbmUgPSBcImRlZmF1bHRcIiB8IFwibXV0ZWRcIiB8IFwiZGFuZ2VyXCIgfCBcIndhcm5pbmdcIiB8IFwic3VjY2Vzc1wiO1xuZXhwb3J0IHR5cGUgVGV4dFNpemUgPSBcInhzXCIgfCBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgfCBcInhsXCI7XG5leHBvcnQgdHlwZSBUZXh0V2VpZ2h0ID0gXCJub3JtYWxcIiB8IFwibWVkaXVtXCIgfCBcImJvbGRcIjtcbmV4cG9ydCB0eXBlIFRleHRMZWFkaW5nID0gXCJ0aWdodFwiIHwgXCJiYXNlXCIgfCBcImxvb3NlXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoc3BhbiwgcCwgbGFiZWwsIGZpZ2NhcHRpb24sIOKApikuIERlZmF1bHRzIHRvICdzcGFuJy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIENvbG91ciByb2xlLiAnbXV0ZWQnIGRlLWVtcGhhc2lzZXM7ICdkYW5nZXInLyd3YXJuaW5nJy8nc3VjY2VzcydcbiAgICogcmVuZGVyIHN0YXR1cyBjb3B5IGZyb20gdGhlIGAtLXBvbGx5LXN0YXR1cy0qYCB0b2tlbnMuIERlZmF1bHQ6ICdkZWZhdWx0Jy4gKi9cbiAgdG9uZT86IFRleHRUb25lO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgZm9udCBzaXplLiBEZWZhdWx0OiBpbmhlcml0IGZyb20gY29udGV4dC4gKi9cbiAgc2l6ZT86IFRleHRTaXplO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgZm9udCB3ZWlnaHQuIERlZmF1bHQ6IGluaGVyaXQgZnJvbSBjb250ZXh0LiAqL1xuICB3ZWlnaHQ/OiBUZXh0V2VpZ2h0O1xuXG4gIC8qKiBJdGFsaWMgZW1waGFzaXMg4oCUIGZvciBoaW50cyBhbmQgYXNpZGVzIOKAlCB3aXRob3V0IGFuIGlubGluZSBzdHlsZS4gKi9cbiAgaXRhbGljPzogYm9vbGVhbjtcblxuICAvKiogTGluZS10aHJvdWdoIOKAlCBmb3IgY29tcGxldGVkIHRvZG8gaXRlbXMgYW5kIHN1cGVyc2VkZWQgY29weS4gKi9cbiAgc3RyaWtldGhyb3VnaD86IGJvb2xlYW47XG5cbiAgLyoqIFRva2VuLWJhY2tlZCBsaW5lIGhlaWdodC4gJ2xvb3NlJyBzdWl0cyBtdWx0aS1saW5lIGJvZHkgY29weS4gKi9cbiAgbGVhZGluZz86IFRleHRMZWFkaW5nO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBGb3J3YXJkZWQgc28gPFRleHQgYXM9XCJsYWJlbFwiPiBjYW4gcG9pbnQgYXQgYSBjb250cm9sLiAqL1xuICBodG1sRm9yPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRleHQocHJvcHM6IFRleHRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGFzID0gXCJzcGFuXCIsXG4gICAgdG9uZSA9IFwiZGVmYXVsdFwiLFxuICAgIHNpemUsXG4gICAgd2VpZ2h0LFxuICAgIGl0YWxpYyxcbiAgICBzdHJpa2V0aHJvdWdoLFxuICAgIGxlYWRpbmcsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInRleHRcIl1dO1xuICBpZiAodG9uZSAhPT0gXCJkZWZhdWx0XCIpIHBhcnRzLnB1c2goY2xhc3Nlc1t0b25lXSk7XG4gIGlmIChzaXplKSBwYXJ0cy5wdXNoKGNsYXNzZXNbc2l6ZV0pO1xuICBpZiAod2VpZ2h0KSBwYXJ0cy5wdXNoKGNsYXNzZXNbd2VpZ2h0XSk7XG4gIGlmIChpdGFsaWMpIHBhcnRzLnB1c2goY2xhc3Nlc1tcIml0YWxpY1wiXSk7XG4gIGlmIChzdHJpa2V0aHJvdWdoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJzdHJpa2V0aHJvdWdoXCJdKTtcbiAgaWYgKGxlYWRpbmcpIHBhcnRzLnB1c2goY2xhc3Nlc1tsZWFkaW5nXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICBhcyxcbiAgICB7XG4gICAgICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZpcnN0OyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXNcbiAgICAgIC8vIGJlbG93IHdpbiBvbiBhbnkgY29sbGlzaW9uLlxuICAgICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICAgIGlkLFxuICAgICAgY2xhc3M6IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgIGZvcjogcHJvcHMuaHRtbEZvcixcbiAgICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgICAgXCJkYXRhLXBvbGx5LXRleHRcIjogdG9uZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2hhcmVkIGlucHV0IGExMXkgd2lyaW5nLlxuICpcbiAqIFJldHVybnMgYSBjb21tb24gc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBUZXh0SW5wdXQsIEFjdGlvbklucHV0LCBhbmRcbiAqIGFueSBjb25zdW1lci1idWlsdCBpbnB1dCBjYW4gc3BsYXQgb250byBpdHMgbmF0aXZlIGVsZW1lbnQuIEtlZXBzXG4gKiBhcmlhLSogYW5kIGRhdGEtcG9sbHktKiBuYW1lcyBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFtaWx5LlxuICovXG5cbmV4cG9ydCB0eXBlIElucHV0QTExeVByb3BzID0ge1xuICBuYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBpbnZhbGlkPzogYm9vbGVhbjtcbiAgZGVzY3JpYmVkQnk/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZElucHV0QTExeShwcm9wczogSW5wdXRBMTF5UHJvcHMpIHtcbiAgY29uc3QgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgIFwiZGF0YS1wb2xseS1pbnB1dFwiOiB0cnVlLFxuICAgIFwiYXJpYS1pbnZhbGlkXCI6IHByb3BzLmludmFsaWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZCxcbiAgICBcImFyaWEtcmVxdWlyZWRcIjogcHJvcHMucmVxdWlyZWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZCxcbiAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogcHJvcHMuZGVzY3JpYmVkQnksXG4gICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICBpZDogcHJvcHMuaWQsXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICByZWFkT25seTogcHJvcHMucmVhZE9ubHksXG4gIH07XG4gIGlmIChwcm9wcy5pbnZhbGlkKSBhdHRyc1tcImRhdGEtc3RhdGVcIl0gPSBcImludmFsaWRcIjtcbiAgcmV0dXJuIGF0dHJzO1xufVxuIiwKICAgICIvKipcbiAqIFRleHRJbnB1dCDigJQgcGFzc2l2ZSwgc2lnbmFsLWZyaWVuZGx5IG5hdGl2ZSBpbnB1dCB3cmFwcGVyLlxuICpcbiAqIERlc2lnbmVkIHRvIGxpdmUgaW5zaWRlIDxBY3Rpb25Gb3JtPi4gUGFzcyBhIHBsYWluIHN0cmluZyBmb3JcbiAqIHVuY29udHJvbGxlZCBtb2RlIChGb3JtRGF0YS1vbi1zdWJtaXQgcGlja3MgdXAgdGhlIHZhbHVlKSBvciBhXG4gKiBTaWduYWw8c3RyaW5nPiBmb3IgY29udHJvbGxlZCBtb2RlLiBFaXRoZXIgd2F5LCBhMTF5IGF0dHJpYnV0ZXMgYXJlXG4gKiB3aXJlZCBieSB0aGUgc2hhcmVkIGlucHV0LWJhc2UsIHRoZSBzdGFibGUgYFtkYXRhLXBvbGx5LWlucHV0XWAgaG9va1xuICogaXMgYXBwbGllZCBmb3Igc3R5bGluZywgYW5kIGBpbnZhbGlkYCBmbGlwcyBgYXJpYS1pbnZhbGlkYCBhbmRcbiAqIGBkYXRhLXN0YXRlPVwiaW52YWxpZFwiYCBmb3IgY29uc3VtZXIgc2VsZWN0b3JzLlxuICpcbiAqIGBpbnB1dFR5cGVgIHNldHMgdGhlIG5hdGl2ZSBzaW5nbGUtbGluZSBpbnB1dCB0eXBlIOKAlCBcInRleHRcIiAoZGVmYXVsdCksXG4gKiBcImVtYWlsXCIsIFwibnVtYmVyXCIsIFwiZGF0ZVwiLCBhbmQgZnJpZW5kcyDigJQgc28gdGhlIGJyb3dzZXIgc3VwcGxpZXMgdGhlXG4gKiByaWdodCBrZXlib2FyZCBhbmQgdmFsaWRhdGlvbi4gYG1pbmAvYG1heGAvYHN0ZXBgIGFwcGx5IHRvIHRoZVxuICogc2luZ2xlLWxpbmUgdmFyaWFudCAoZS5nLiBudW1lcmljIG9yIGRhdGUgYm91bmRzKSBhbmQga2VlcCBmaWx0ZXJcbiAqIGZpZWxkcyBmcm9tIGJlaW5nIHVudmFsaWRhdGVkIGZyZWUgdGV4dC5cbiAqXG4gKiBgZXJyb3JgLCB3aGVuIHN1cHBsaWVkLCByZW5kZXJzIGEgbWVzc2FnZSBiZW5lYXRoIHRoZSBmaWVsZCwgd3JhcHMgdGhlXG4gKiBjb250cm9sIGluIGEgbGFiZWxsZWQgZ3JvdXAsIGFuZCBhdXRvLXdpcmVzIGBhcmlhLWRlc2NyaWJlZGJ5YCBwbHVzIHRoZVxuICogaW52YWxpZCBzdGF0ZSDigJQgbm8gbWFudWFsIGlkIGp1Z2dsaW5nLiBXaXRob3V0IGBlcnJvcmAgdGhlIHByaW1pdGl2ZVxuICogc3RheXMgYSBiYXJlIG5hdGl2ZSBlbGVtZW50LCBleGFjdGx5IGFzIGJlZm9yZSwgc28gY29uc3VtZXJzIHRoYXQgb3duXG4gKiB0aGVpciBvd24gc3Vycm91bmRpbmcgc3RydWN0dXJlIGFyZSB1bmFmZmVjdGVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VJZCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGJ1aWxkSW5wdXRBMTF5IH0gZnJvbSBcIi4vaW50ZXJuYWwvaW5wdXQtYmFzZS50c1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBWYXJpYW50ID0gXCJzaW5nbGVcIiB8IFwibXVsdGlcIjtcblxuLyoqIE5hdGl2ZSBzaW5nbGUtbGluZSBpbnB1dCB0eXBlcyBwb2xseSdzIGZpbHRlci9mb3JtIGZpZWxkcyB1c2UuICovXG5leHBvcnQgdHlwZSBUZXh0SW5wdXRUeXBlID1cbiAgfCBcInRleHRcIlxuICB8IFwiZW1haWxcIlxuICB8IFwidXJsXCJcbiAgfCBcInRlbFwiXG4gIHwgXCJzZWFyY2hcIlxuICB8IFwicGFzc3dvcmRcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImRhdGVcIlxuICB8IFwiZGF0ZXRpbWUtbG9jYWxcIlxuICB8IFwidGltZVwiXG4gIHwgXCJtb250aFwiXG4gIHwgXCJ3ZWVrXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTaWduYWw8c3RyaW5nPiBmb3IgY29udHJvbGxlZCwgc3RyaW5nIGZvciB1bmNvbnRyb2xsZWQgZGVmYXVsdC4gKi9cbiAgdmFsdWU/OiBTaWduYWw8c3RyaW5nPiB8IHN0cmluZztcbiAgdmFyaWFudD86IFZhcmlhbnQ7XG4gIC8qKiBOYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQuIERlZmF1bHQ6IFwidGV4dFwiLiAqL1xuICBpbnB1dFR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICAvKiogTG93ZXIgYm91bmQgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50IChudW1iZXIvZGF0ZSB0eXBlcykuICovXG4gIG1pbj86IG51bWJlciB8IHN0cmluZztcbiAgLyoqIFVwcGVyIGJvdW5kIGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBtYXg/OiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBTdGVwIGdyYW51bGFyaXR5IGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBzdGVwPzogbnVtYmVyIHwgc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIE5hdGl2ZSBob3ZlciB0b29sdGlwIOKAlCBhIGhpbnQgYmV5b25kIHRoZSBwbGFjZWhvbGRlci9sYWJlbC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGludmFsaWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogVmFsaWRhdGlvbiBtZXNzYWdlIHJlbmRlcmVkIGJlbmVhdGggdGhlIGZpZWxkLiBXaGVuIHByZXNlbnQgdGhlXG4gICAqIHByaW1pdGl2ZSB3cmFwcyB0aGUgY29udHJvbCwgbGlua3MgdGhlIG1lc3NhZ2UgdmlhIGFyaWEtZGVzY3JpYmVkYnksXG4gICAqIGFuZCBtYXJrcyB0aGUgZmllbGQgaW52YWxpZC4gT21pdCBpdCB0byBrZWVwIGEgYmFyZSBuYXRpdmUgZWxlbWVudC5cbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpZD86IHN0cmluZztcbiAgZGVzY3JpYmVkQnk/OiBzdHJpbmc7XG4gIHJvd3M/OiBudW1iZXI7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGlzU2lnbmFsPFQ+KHY6IFNpZ25hbDxUPiB8IFQgfCB1bmRlZmluZWQpOiB2IGlzIFNpZ25hbDxUPiB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmIFwidmFsdWVcIiBpbiB2ICYmIFwicGVla1wiIGluICh2IGFzIHVua25vd24gYXMgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRleHRJbnB1dChwcm9wczogVGV4dElucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHZhcmlhbnQgPSBwcm9wcy52YXJpYW50ID8/IFwic2luZ2xlXCI7XG4gIC8vIEFsd2F5cyBjYWxsZWQgc28gaG9vayBvcmRlciBpcyBzdGFibGU7IG9ubHkgdXNlZCB3aGVuIGBlcnJvcmAgaXMgc2V0LlxuICBjb25zdCBlcnJvcklkID0gdXNlSWQoKTtcbiAgY29uc3QgaGFzRXJyb3IgPSBwcm9wcy5lcnJvciAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmVycm9yICE9PSBcIlwiO1xuXG4gIGNvbnN0IGRlc2NyaWJlZEJ5ID1cbiAgICBbcHJvcHMuZGVzY3JpYmVkQnksIGhhc0Vycm9yID8gZXJyb3JJZCA6IHVuZGVmaW5lZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpIHx8IHVuZGVmaW5lZDtcblxuICBjb25zdCBhMTF5ID0gYnVpbGRJbnB1dEExMXkoe1xuICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgaWQ6IHByb3BzLmlkLFxuICAgIHJlcXVpcmVkOiBwcm9wcy5yZXF1aXJlZCxcbiAgICAvLyBBbiBlcnJvciBtZXNzYWdlIGltcGxpZXMgdGhlIGZpZWxkIGlzIGludmFsaWQuXG4gICAgaW52YWxpZDogcHJvcHMuaW52YWxpZCB8fCBoYXNFcnJvcixcbiAgICBkZXNjcmliZWRCeSxcbiAgICBwbGFjZWhvbGRlcjogcHJvcHMucGxhY2Vob2xkZXIsXG4gICAgZGlzYWJsZWQ6IHByb3BzLmRpc2FibGVkLFxuICAgIHJlYWRPbmx5OiBwcm9wcy5yZWFkT25seSxcbiAgfSk7XG5cbiAgY29uc3QgY29udHJvbGxlZCA9IGlzU2lnbmFsKHByb3BzLnZhbHVlKTtcbiAgY29uc3Qgc3RyaW5nVmFsdWUgPSBjb250cm9sbGVkID8gKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgU2lnbmFsPHN0cmluZz4pLnZhbHVlIDogdW5kZWZpbmVkO1xuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBjb250cm9sbGVkXG4gICAgPyB1bmRlZmluZWRcbiAgICA6ICgocHJvcHMudmFsdWUgYXMgdW5rbm93biBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/IFwiXCIpO1xuXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJpbnB1dFwiXX0gJHtwcm9wcy5jbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJpbnB1dFwiXTtcblxuICBjb25zdCBvbklucHV0ID0gKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgIGlmIChjb250cm9sbGVkKSB7XG4gICAgICAocHJvcHMudmFsdWUgYXMgdW5rbm93biBhcyBTaWduYWw8c3RyaW5nPikudmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudmFsdWU7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbnRyb2wgPVxuICAgIHZhcmlhbnQgPT09IFwibXVsdGlcIiA/IChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICB7Li4uKGExMXkgYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTFRleHRBcmVhRWxlbWVudD4pfVxuICAgICAgICBjbGFzcz17Y2xhc3NOYW1lfVxuICAgICAgICB0aXRsZT17cHJvcHMudGl0bGV9XG4gICAgICAgIGRhdGEtcG9sbHktaW5wdXQtdmFyaWFudD1cIm11bHRpXCJcbiAgICAgICAgcm93cz17cHJvcHMucm93c31cbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub0F1dG9mb2N1czogb3B0LWluIHByb3Ag4oCUIGNhbGxlciByZXF1ZXN0cyBhdXRvZm9jdXMgZXhwbGljaXRseSAoZS5nLiBmb3JtIG9wZW5zIHRvIHRoaXMgZmllbGQpLlxuICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cbiAgICAgICAgdmFsdWU9e3N0cmluZ1ZhbHVlfVxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgIC8+XG4gICAgKSA6IChcbiAgICAgIDxpbnB1dFxuICAgICAgICB7Li4uKGExMXkgYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4pfVxuICAgICAgICB0eXBlPXtwcm9wcy5pbnB1dFR5cGUgPz8gXCJ0ZXh0XCJ9XG4gICAgICAgIGNsYXNzPXtjbGFzc05hbWV9XG4gICAgICAgIHRpdGxlPXtwcm9wcy50aXRsZX1cbiAgICAgICAgZGF0YS1wb2xseS1pbnB1dC12YXJpYW50PVwic2luZ2xlXCJcbiAgICAgICAgbWluPXtwcm9wcy5taW59XG4gICAgICAgIG1heD17cHJvcHMubWF4fVxuICAgICAgICBzdGVwPXtwcm9wcy5zdGVwfVxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vQXV0b2ZvY3VzOiBvcHQtaW4gcHJvcCDigJQgY2FsbGVyIHJlcXVlc3RzIGF1dG9mb2N1cyBleHBsaWNpdGx5IChlLmcuIGZvcm0gb3BlbnMgdG8gdGhpcyBmaWVsZCkuXG4gICAgICAgIGF1dG9Gb2N1cz17cHJvcHMuYXV0b0ZvY3VzfVxuICAgICAgICB2YWx1ZT17c3RyaW5nVmFsdWV9XG4gICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgICBvbklucHV0PXtvbklucHV0fVxuICAgICAgLz5cbiAgICApO1xuXG4gIGlmICghaGFzRXJyb3IpIHJldHVybiBjb250cm9sO1xuXG4gIHJldHVybiAoXG4gICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIiBjbGFzc05hbWU9e2NsYXNzZXNbXCJmaWVsZFwiXX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWZpZWxkPlxuICAgICAge2NvbnRyb2x9XG4gICAgICA8c3BhbiBpZD17ZXJyb3JJZH0gcm9sZT1cImFsZXJ0XCIgY2xhc3M9e2NsYXNzZXNbXCJlcnJvclwiXX0+XG4gICAgICAgIHtwcm9wcy5lcnJvcn1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBUb2FzdCDigJQgY29uc3VtZXItZmFjaW5nIHN1cmZhY2UgZm9yIHRoZSBnbG9iYWwgZXJyb3JTdGF0ZS5cbiAqXG4gKiBSZW5kZXJzIGV2ZXJ5IGVudHJ5IG9mIHRoZSBgZXJyb3JTdGF0ZWAgc2lnbmFsIGludG8gYSB2aWV3cG9ydCBtb3VudGVkXG4gKiBpbnNpZGUgT3ZlcmxheVJvb3QuIGBhcmlhLWxpdmVgIGlzIHBvbGl0ZSBmb3IgaW5mby93YXJuaW5nIGFuZFxuICogYXNzZXJ0aXZlIGZvciBlcnJvciBzZXZlcml0eS4gRWFjaCBpdGVtIGF1dG8tZGlzbWlzc2VzIGFmdGVyXG4gKiBgYXV0b0Rpc21pc3NNc2AgdW5sZXNzIHRoZSB1c2VyIGhvdmVycyB0aGUgdmlld3BvcnQuIENsaWNraW5nIGFcbiAqIHRvYXN0IG9yIGl0cyBjbG9zZSBidXR0b24gcmVtb3ZlcyB0aGF0IHNpbmdsZSBlbnRyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgY2xlYXJFcnJvciwgdHlwZSBFcnJvckVudHJ5LCBlcnJvclN0YXRlIH0gZnJvbSBcIi4uL2FjdGlvbnMvZXJyb3IudHNcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCB7IGdldE92ZXJsYXlSb290Tm9kZSB9IGZyb20gXCIuL092ZXJsYXlSb290LnRzeFwiO1xuaW1wb3J0IHsgU3VyZmFjZSB9IGZyb20gXCIuL1N1cmZhY2UudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRvYXN0Vmlld3BvcnRQcm9wcyA9IHtcbiAgYXV0b0Rpc21pc3NNcz86IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlld3BvcnQocHJvcHM6IFRvYXN0Vmlld3BvcnRQcm9wcyk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGF1dG9EaXNtaXNzTXMgPSBwcm9wcy5hdXRvRGlzbWlzc01zID8/IDUwMDA7XG4gIGNvbnN0IFtwb3J0YWxOb2RlLCBzZXRQb3J0YWxOb2RlXSA9IHVzZVN0YXRlPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtwYXVzZWQsIHNldFBhdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGVudHJpZXMgPSBlcnJvclN0YXRlLnZhbHVlO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0UG9ydGFsTm9kZShnZXRPdmVybGF5Um9vdE5vZGUoKSk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwYXVzZWQgfHwgZW50cmllcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBoZWFkID0gZW50cmllc1swXTtcbiAgICBpZiAoIWhlYWQpIHJldHVybjtcbiAgICBjb25zdCB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFyRXJyb3IoaGVhZC5pZCk7XG4gICAgfSwgYXV0b0Rpc21pc3NNcyk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpO1xuICB9LCBbcGF1c2VkLCBlbnRyaWVzLCBhdXRvRGlzbWlzc01zXSk7XG5cbiAgaWYgKCFwb3J0YWxOb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDxMYXlvdXRcbiAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICBjbGFzc05hbWU9e2Ake2NsYXNzZXNbXCJ2aWV3cG9ydFwiXX0gJHtwcm9wcy5jbGFzc05hbWUgPz8gXCJcIn1gLnRyaW0oKX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktdG9hc3Qtdmlld3BvcnRcbiAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0UGF1c2VkKHRydWUpfVxuICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRQYXVzZWQoZmFsc2UpfVxuICAgID5cbiAgICAgIHtlbnRyaWVzLm1hcCgoZW50cnkpID0+IChcbiAgICAgICAgPFRvYXN0SXRlbSBrZXk9e2VudHJ5LmlkfSBlbnRyeT17ZW50cnl9IC8+XG4gICAgICApKX1cbiAgICA8L0xheW91dD5cbiAgKTtcbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChjb250ZW50LCBwb3J0YWxOb2RlKTtcbn1cblxuZnVuY3Rpb24gVG9hc3RJdGVtKHsgZW50cnkgfTogeyBlbnRyeTogRXJyb3JFbnRyeSB9KTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBsaXZlbmVzcyA9IGVudHJ5LnNldmVyaXR5ID09PSBcImVycm9yXCIgPyBcImFzc2VydGl2ZVwiIDogXCJwb2xpdGVcIjtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJpdGVtXCJdfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10b2FzdC1pdGVtXG4gICAgICBkYXRhLXNldmVyaXR5PXtlbnRyeS5zZXZlcml0eX1cbiAgICAgIHJvbGU9e2VudHJ5LnNldmVyaXR5ID09PSBcImVycm9yXCIgPyBcImFsZXJ0XCIgOiBcInN0YXR1c1wifVxuICAgICAgYXJpYS1saXZlPXtsaXZlbmVzc31cbiAgICA+XG4gICAgICA8TGF5b3V0IGNvbHVtbnM9XCIxZnIgYXV0b1wiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJtZXNzYWdlXCJdfT57ZW50cnkubWVzc2FnZX08L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImNsb3NlXCJdfVxuICAgICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgICAgZGF0YS1wb2xseS10b2FzdC1jbG9zZVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsZWFyRXJyb3IoZW50cnkuaWQpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJEaXNtaXNzXCJcbiAgICAgICAgPlxuICAgICAgICAgIMOXXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgVG9hc3QgPSB7IFZpZXdwb3J0IH07XG4iLAogICAgIi8qKlxuICogVG9nZ2xlIOKAlCBzd2l0Y2gtcm9sZSBjaGVja2JveC5cbiAqXG4gKiBBIHZpc3VhbGx5LWhpZGRlbiA8aW5wdXQgcm9sZT1cInN3aXRjaFwiPiBwYWlyZWQgd2l0aCBhIHN0eWxlZCB0cmFja1xuICogYW5kIHRodW1iIGluc2lkZSBhIDxsYWJlbD4uIFBhc3NpdmU6IHRoZSBjYWxsZXIgZHJpdmVzIGBjaGVja2VkYCBhbmRcbiAqIGhhbmRsZXMgc3RhdGUgY2hhbmdlcyB2aWEgdGhlIGFjdGlvbiByZWdpc3RyeSAod3JhcCB0aGUgVG9nZ2xlIGluIGFcbiAqIDxsYWJlbCBkYXRhLWFjdGlvbj1cIi4uLlwiPiBvciBiaW5kIGEgcGFyZW50IGZvcm0ncyBzdWJtaXQpLiBhMTF5XG4gKiBhdHRyaWJ1dGVzIGNvbWUgZnJvbSB0aGUgbmF0aXZlIGlucHV0OyB0aGUgbGFiZWwgd3JhcHMgc28gY2xpY2tzXG4gKiBhbnl3aGVyZSBpbiB0aGUgY29udHJvbCB0b2dnbGUgdGhlIGlucHV0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVG9nZ2xlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVG9nZ2xlUHJvcHMgPSB7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRvZ2dsZShwcm9wczogVG9nZ2xlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hlY2tlZCA9IGZhbHNlLCBkaXNhYmxlZCA9IGZhbHNlLCBsYWJlbCwgbmFtZSwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJ0b2dnbGVcIl1dO1xuICBpZiAoZGlzYWJsZWQpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImRpc2FibGVkXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxMYXlvdXRcbiAgICAgIGFzPVwibGFiZWxcIlxuICAgICAgaW5saW5lXG4gICAgICBjb2x1bW5zPVwiYXV0byBhdXRvXCJcbiAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgIGNsYXNzTmFtZT17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRvZ2dsZVxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17aWR9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIHJvbGU9XCJzd2l0Y2hcIlxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICBhcmlhLWNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiaW5wdXRcIl19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz17Y2hlY2tlZCA/IGAke2NsYXNzZXNbXCJ0cmFja1wiXX0gJHtjbGFzc2VzW1widHJhY2tDaGVja2VkXCJdfWAgOiBjbGFzc2VzW1widHJhY2tcIl19PlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPXtjaGVja2VkID8gYCR7Y2xhc3Nlc1tcInRodW1iXCJdfSAke2NsYXNzZXNbXCJ0aHVtYkNoZWNrZWRcIl19YCA6IGNsYXNzZXNbXCJ0aHVtYlwiXX1cbiAgICAgICAgLz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgIDwvTGF5b3V0PlxuICApO1xufVxuIiwKICAgICIvLyBTdGF0ZSBwcmltaXRpdmVzIHdpdGggb3B0aW9uYWwgc3luYyBhbmQgcGVyc2lzdGVuY2VcblxuaW1wb3J0IHsgZWZmZWN0LCB0eXBlIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlQnVzIH0gZnJvbSBcIi4vbWVzc2FnZS1idXNcIjtcbmltcG9ydCB7IGNyZWF0ZVN0b3JhZ2VBZGFwdGVyLCB0eXBlIFN0b3JhZ2VBZGFwdGVyIH0gZnJvbSBcIi4vc3RvcmFnZS1hZGFwdGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVTeW5jQWRhcHRlciwgdHlwZSBTeW5jQWRhcHRlciB9IGZyb20gXCIuL3N5bmMtYWRhcHRlclwiO1xuXG4vKipcbiAqIFNpZ25hbCBleHRlbmRlZCB3aXRoIC5sb2FkZWQgcHJvbWlzZSBmb3IgaHlkcmF0aW9uIGNvbnRyb2xcbiAqL1xudHlwZSBTaWduYWxXaXRoTG9hZGVkPFQ+ID0gU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfTtcblxuLyoqXG4gKiBTaWduYWwgZXh0ZW5kZWQgd2l0aCAubG9hZGVkIGFuZCAudmVyaWZ5IHByb3BlcnRpZXMgZm9yIHZlcmlmaWNhdGlvbiB0cmFja2luZ1xuICovXG50eXBlIFNpZ25hbFdpdGhWZXJpZnk8VD4gPSBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPjsgdmVyaWZ5OiBUIH07XG5cbnR5cGUgU3RhdGVFbnRyeTxUPiA9IHtcbiAgc2lnbmFsOiBTaWduYWw8VD47XG4gIGNsb2NrOiBudW1iZXI7IC8vIExhbXBvcnQgY2xvY2sgZm9yIGNhdXNhbCBvcmRlcmluZ1xuICBsb2FkZWQ6IFByb21pc2U8dm9pZD47XG4gIHVwZGF0aW5nOiBib29sZWFuO1xufTtcblxudHlwZSBTdGF0ZU9wdGlvbnM8VCA9IHVua25vd24+ID0ge1xuICAvLyBMZWdhY3kgTWVzc2FnZUJ1cyBzdXBwb3J0IChkZXByZWNhdGVkLCB3aWxsIGJlIHJlbW92ZWQgaW4gdjIuMClcbiAgYnVzPzogTWVzc2FnZUJ1cztcblxuICAvLyBOZXcgYWRhcHRlciBzeXN0ZW0gKHJlY29tbWVuZGVkKVxuICBzdG9yYWdlPzogU3RvcmFnZUFkYXB0ZXI7IC8vIEN1c3RvbSBzdG9yYWdlIGFkYXB0ZXJcbiAgc3luYz86IFN5bmNBZGFwdGVyOyAvLyBDdXN0b20gc3luYyBhZGFwdGVyXG5cbiAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICBkZWJvdW5jZU1zPzogbnVtYmVyOyAvLyBEZWJvdW5jZSBzdG9yYWdlIHdyaXRlc1xuICB2YWxpZGF0b3I/OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFQ7IC8vIFJ1bnRpbWUgdHlwZSB2YWxpZGF0aW9uXG4gIHZlcmlmeT86IGJvb2xlYW47IC8vIEVuYWJsZSB2ZXJpZmljYXRpb24gdHJhY2tpbmcgKGNyZWF0ZXMgcGxhaW4gb2JqZWN0IG1pcnJvcilcbn07XG5cbmNvbnN0IHN0YXRlUmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgU3RhdGVFbnRyeTx1bmtub3duPj4oKTtcblxuLyoqXG4gKiBTaGFyZWQgc3RhdGU6IHN5bmNlZCBhY3Jvc3MgYWxsIGNvbnRleHRzIEFORCBwZXJzaXN0ZWQgdG8gc3RvcmFnZVxuICpcbiAqIFVzZXMgTGFtcG9ydCBjbG9jayBmb3IgY29uZmxpY3QgcmVzb2x1dGlvbi4gU3RhdGUgaXMgYXV0b21hdGljYWxseTpcbiAqIC0gTG9hZGVkIGZyb20gY2hyb21lLnN0b3JhZ2Ugb24gaW5pdGlhbGl6YXRpb25cbiAqIC0gU3luY2VkIHRvIG90aGVyIGNvbnRleHRzIHZpYSBicm9hZGNhc3QgbWVzc2FnZXNcbiAqIC0gUGVyc2lzdGVkIHRvIGNocm9tZS5zdG9yYWdlIG9uIGV2ZXJ5IGNoYW5nZVxuICpcbiAqIEF2YWlsYWJsZSBpbjogYmFja2dyb3VuZCwgcG9wdXAsIG9wdGlvbnMsIGRldnRvb2xzLCBjb250ZW50IHNjcmlwdHNcbiAqIOKaoO+4jyBOT1QgYXZhaWxhYmxlIGluIHBhZ2Ugc2NyaXB0cyAodXNlIGNvbnRlbnQgc2NyaXB0IHN0YXRlIGluc3RlYWQpXG4gKlxuICogQHBhcmFtIGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHN0YXRlIChlLmcuLCBcImFwcC1zZXR0aW5nc1wiKVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWUgaWYgbm90aGluZyBpcyBpbiBzdG9yYWdlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKGJ1cywgZGVib3VuY2VNcylcbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCB0aGF0IHN0YXlzIGluIHN5bmMgYWNyb3NzIGFsbCBjb250ZXh0c1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBEZWZpbmUgb25jZSwgdXNlIGV2ZXJ5d2hlcmVcbiAqIGNvbnN0IHNldHRpbmdzID0gJHNoYXJlZFN0YXRlKFwic2V0dGluZ3NcIiwgeyB0aGVtZTogXCJkYXJrXCIgfSlcbiAqXG4gKiAvLyBDaGFuZ2VzIGF1dG9tYXRpY2FsbHkgc3luY1xuICogc2V0dGluZ3MudmFsdWUgPSB7IHRoZW1lOiBcImxpZ2h0XCIgfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc2hhcmVkU3RhdGU8VD4oXG4gIGtleTogc3RyaW5nLFxuICBpbml0aWFsVmFsdWU6IFQsXG4gIG9wdGlvbnM6IFN0YXRlT3B0aW9uczxUPiA9IHt9XG4pOiBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPjsgdmVyaWZ5PzogVCB9IHtcbiAgY29uc3Qgc2lnID0gY3JlYXRlU3RhdGUoa2V5LCBpbml0aWFsVmFsdWUsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuYWJsZVN5bmM6IHRydWUsXG4gICAgZW5hYmxlUGVyc2lzdDogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gRXhwb3NlIGxvYWRlZCBwcm9taXNlIGZvciBhd2FpdGluZyBoeWRyYXRpb25cbiAgY29uc3QgZW50cnkgPSBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICBpZiAoZW50cnkpIHtcbiAgICAoc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aExvYWRlZDxUPikubG9hZGVkID0gZW50cnkubG9hZGVkO1xuICB9XG5cbiAgcmV0dXJuIHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH07XG59XG5cbi8qKlxuICogU3luY2VkIHN0YXRlOiBzeW5jZWQgYWNyb3NzIGFsbCBjb250ZXh0cyBidXQgTk9UIHBlcnNpc3RlZFxuICpcbiAqIFN0YXRlIGlzIGJyb2FkY2FzdCB0byBhbGwgY29udGV4dHMgaW4gcmVhbC10aW1lIGJ1dCByZXNldHMgb24gZXh0ZW5zaW9uIHJlbG9hZC5cbiAqXG4gKiBBdmFpbGFibGUgaW46IGJhY2tncm91bmQsIHBvcHVwLCBvcHRpb25zLCBkZXZ0b29scywgY29udGVudCBzY3JpcHRzXG4gKiDimqDvuI8gTk9UIGF2YWlsYWJsZSBpbiBwYWdlIHNjcmlwdHNcbiAqXG4gKiBAcGFyYW0ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc3RhdGVcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCBzeW5jZWQgYWNyb3NzIGNvbnRleHRzIChidXQgbm90IHBlcnNpc3RlZClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gVGVtcG9yYXJ5IHNoYXJlZCBzdGF0ZVxuICogY29uc3QgYWN0aXZlVGFiSWQgPSAkc3luY2VkU3RhdGUoXCJhY3RpdmUtdGFiXCIsIG51bGwpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzeW5jZWRTdGF0ZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIGluaXRpYWxWYWx1ZTogVCxcbiAgb3B0aW9uczogU3RhdGVPcHRpb25zPFQ+ID0ge31cbik6IFNpZ25hbDxUPiB7XG4gIHJldHVybiBjcmVhdGVTdGF0ZShrZXksIGluaXRpYWxWYWx1ZSwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5hYmxlU3luYzogdHJ1ZSxcbiAgICBlbmFibGVQZXJzaXN0OiBmYWxzZSxcbiAgfSk7XG59XG5cbi8qKlxuICogUGVyc2lzdGVkIHN0YXRlOiBwZXJzaXN0ZWQgdG8gc3RvcmFnZSBidXQgTk9UIHN5bmNlZCBhY3Jvc3MgY29udGV4dHNcbiAqXG4gKiBFYWNoIGNvbnRleHQgaGFzIGl0cyBvd24gY29weSBvZiB0aGUgc3RhdGUsIHBlcnNpc3RlZCBpbmRlcGVuZGVudGx5LlxuICpcbiAqIEF2YWlsYWJsZSBpbjogYmFja2dyb3VuZCwgcG9wdXAsIG9wdGlvbnMsIGRldnRvb2xzLCBjb250ZW50IHNjcmlwdHNcbiAqIOKaoO+4jyBOT1QgYXZhaWxhYmxlIGluIHBhZ2Ugc2NyaXB0c1xuICpcbiAqIEBwYXJhbSBrZXkgLSBVbmlxdWUgaWRlbnRpZmllciAodXNlIHByZWZpeCBsaWtlIFwicG9wdXA6c3RhdGVcIiB0byBhdm9pZCBjb2xsaXNpb25zKVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIHBlcnNpc3RlZCB0byBzdG9yYWdlIChidXQgbm90IHN5bmNlZClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRWFjaCBjb250ZXh0IGhhcyBpdHMgb3duIHBlcnNpc3RlZCBzdGF0ZVxuICogY29uc3QgcG9wdXBTdGF0ZSA9ICRwZXJzaXN0ZWRTdGF0ZShcInBvcHVwOmxhc3QtcGFuZWxcIiwgXCJob21lXCIpXG4gKiBjb25zdCBkZXZ0b29sc1N0YXRlID0gJHBlcnNpc3RlZFN0YXRlKFwiZGV2dG9vbHM6ZXhwYW5kZWRcIiwgdHJ1ZSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHBlcnNpc3RlZFN0YXRlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgaW5pdGlhbFZhbHVlOiBULFxuICBvcHRpb25zOiBTdGF0ZU9wdGlvbnM8VD4gPSB7fVxuKTogU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfSB7XG4gIGNvbnN0IHNpZyA9IGNyZWF0ZVN0YXRlKGtleSwgaW5pdGlhbFZhbHVlLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmFibGVTeW5jOiBmYWxzZSxcbiAgICBlbmFibGVQZXJzaXN0OiB0cnVlLFxuICB9KTtcblxuICAvLyBFeHBvc2UgbG9hZGVkIHByb21pc2UgZm9yIGF3YWl0aW5nIGh5ZHJhdGlvblxuICBjb25zdCBlbnRyeSA9IHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIGlmIChlbnRyeSkge1xuICAgIChzaWcgYXMgdW5rbm93biBhcyBTaWduYWxXaXRoTG9hZGVkPFQ+KS5sb2FkZWQgPSBlbnRyeS5sb2FkZWQ7XG4gIH1cblxuICByZXR1cm4gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfTtcbn1cblxuLyoqXG4gKiBMb2NhbCBzdGF0ZTogbm90IHN5bmNlZCwgbm90IHBlcnNpc3RlZCAobGlrZSByZWd1bGFyIFByZWFjdCBzaWduYWwpXG4gKlxuICogU2ltcGxlIHJlYWN0aXZlIHN0YXRlIHRoYXQgbGl2ZXMgb25seSBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuICogUmVzZXRzIG9uIHJlbG9hZCBvciBjb250ZXh0IHJlc3RhcnQuXG4gKlxuICogQXZhaWxhYmxlIGluOiBhbGwgY29udGV4dHMgKGluY2x1ZGluZyBwYWdlIHNjcmlwdHMpXG4gKlxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWVcbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCAobG9jYWwgb25seSlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gTG9jYWwgVUkgc3RhdGVcbiAqIGNvbnN0IGlzTG9hZGluZyA9ICRzdGF0ZShmYWxzZSlcbiAqIGNvbnN0IGVycm9yID0gJHN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzdGF0ZTxUPihpbml0aWFsVmFsdWU6IFQpOiBTaWduYWw8VD4ge1xuICByZXR1cm4gc2lnbmFsKGluaXRpYWxWYWx1ZSk7XG59XG5cbi8qKiBTZXJ2ZXItc2lkZSBhdXRob3JpdGF0aXZlIHN0YXRlLCBrZXllZCBmb3Igc3RhYmxlIGlkZW50aXR5IGFjcm9zcyB0aGVcbiAqICBwcm9jZXNzLiBVbmxpa2UgdGhlIGJyb3dzZXIgcHJpbWl0aXZlcyBpdCBkb2VzIE5PVCBzeW5jIGFjcm9zcyBjb250ZXh0cyBvclxuICogIHBlcnNpc3QgdG8gY2hyb21lLnN0b3JhZ2Ug4oCUIHRoZSBzZXJ2ZXIgaG9sZHMgdGhlIGNhbm9uaWNhbCByZXBsaWNhIGFuZCBpc1xuICogIHRoZSBhbHdheXMtb24gcGVlcjsgY29ubmVjdGVkIGNsaWVudHMgcmVjZWl2ZSBkZXJpdmVkIHVwZGF0ZXMgdGhyb3VnaCB0aGVcbiAqICBFbHlzaWEgYHBvbGx5KClgIHBsdWdpbidzIGVmZmVjdC9icm9hZGNhc3QgbGF5ZXIgcmF0aGVyIHRoYW4gdGhyb3VnaCB0aGlzXG4gKiAgc2lnbmFsIGRpcmVjdGx5LiBVc2VkIGluc2lkZSBgcG9sbHkoeyBzdGF0ZTogeyBzZXJ2ZXI6IHsgLi4uIH0gfSB9KWAgYW5kXG4gKiAgcmVhZCBvbiB0aGUgcmVxdWVzdCBjb250ZXh0IGFzIGBwb2xseVN0YXRlLnNlcnZlci48a2V5Pi52YWx1ZWAuICovXG5jb25zdCBzZXJ2ZXJTdGF0ZVJlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4oKTtcblxuLyoqXG4gKiBSZWFjdGl2ZSBzZXJ2ZXItb25seSBzdGF0ZS4gVGhlIGZpcnN0IGNhbGwgZm9yIGEgYGtleWAgY3JlYXRlcyB0aGUgc2lnbmFsO1xuICogbGF0ZXIgY2FsbHMgd2l0aCB0aGUgc2FtZSBga2V5YCByZXR1cm4gdGhhdCBzYW1lIHNpZ25hbCwgc28gYSBtb2R1bGUgdGhhdFxuICogZGVjbGFyZXMgaXRzIHNlcnZlciBzdGF0ZSBvbmNlIGdldHMgYSBzdGFibGUgcmVmZXJlbmNlIGV2ZXJ5d2hlcmUgaXQgaXNcbiAqIHJlYWQuXG4gKlxuICogQHBhcmFtIGtleSAtIFN0YWJsZSBpZGVudGlmaWVyIGZvciB0aGlzIHNlcnZlciBzdGF0ZSAoZS5nLiBcImRiXCIpXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gVmFsdWUgaGVsZCB1bnRpbCB0aGUgc2VydmVyIG11dGF0ZXMgaXRcbiAqIEByZXR1cm5zIEEgcmVhY3RpdmUgc2lnbmFsIGhvbGRpbmcgdGhlIGF1dGhvcml0YXRpdmUgc2VydmVyIHZhbHVlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7ICRzZXJ2ZXJTdGF0ZSB9IGZyb20gXCJAZmFpcmZveC9wb2xseVwiO1xuICpcbiAqIGNvbnN0IGRiID0geyB0b2Rvczogc2lnbmFsKFtdKSwgbmV4dElkOiAxIH07XG4gKiBwb2xseSh7IHN0YXRlOiB7IHNlcnZlcjogeyBkYjogJHNlcnZlclN0YXRlKFwiZGJcIiwgZGIpIH0gfSB9KTtcbiAqIC8vIGluIGEgaGFuZGxlcjogY3R4LnBvbGx5U3RhdGUuc2VydmVyLmRiLnZhbHVlLnRvZG9zLnZhbHVlID0gWy4uLl1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHNlcnZlclN0YXRlPFQ+KGtleTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IFQpOiBTaWduYWw8VD4ge1xuICBjb25zdCBleGlzdGluZyA9IHNlcnZlclN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIC8vIFRoZSByZWdpc3RyeSBlcmFzZXMgVCAoaXQgc3RvcmVzIFNpZ25hbDx1bmtub3duPik7IHRoZSBrZXkgaXMgdGhlXG4gIC8vIGNhbGxlcidzIGNvbnRyYWN0IHRoYXQgdGhlIHN0b3JlZCBzaWduYWwgY2FycmllcyB0aGVpciBULlxuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZyBhcyB1bmtub3duIGFzIFNpZ25hbDxUPjtcbiAgY29uc3Qgc2lnID0gc2lnbmFsKGluaXRpYWxWYWx1ZSk7XG4gIHNlcnZlclN0YXRlUmVnaXN0cnkuc2V0KGtleSwgc2lnIGFzIHVua25vd24gYXMgU2lnbmFsPHVua25vd24+KTtcbiAgcmV0dXJuIHNpZztcbn1cblxudHlwZSBJbnRlcm5hbFN0YXRlT3B0aW9uczxUID0gdW5rbm93bj4gPSBTdGF0ZU9wdGlvbnM8VD4gJiB7XG4gIGVuYWJsZVN5bmM6IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gZW5hYmxlIHN5bmMgKGF2b2lkIGNvbGxpc2lvbiB3aXRoIHN5bmM/OiBTeW5jQWRhcHRlcilcbiAgZW5hYmxlUGVyc2lzdDogYm9vbGVhbjsgLy8gV2hldGhlciB0byBlbmFibGUgcGVyc2lzdGVuY2Vcbn07XG5cbi8vIERlZXAgZXF1YWxpdHkgY2hlY2sgdG8gcHJldmVudCByZWR1bmRhbnQgdXBkYXRlc1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBFcXVhbChhOiB1bmtub3duLCBiOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzQSkge1xuICAgIGlmICgha2V5c0IuaW5jbHVkZXMoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChcbiAgICAgICFkZWVwRXF1YWwoXG4gICAgICAgIChhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0sXG4gICAgICAgIChiIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV1cbiAgICAgIClcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHN0b3JhZ2UgYW5kIHN5bmMgYWRhcHRlcnMgd2l0aCB0aHJlZS10aWVyIHByaW9yaXR5OlxuICogMS4gRXhwbGljaXQgYWRhcHRlcnMgZnJvbSBvcHRpb25zIChoaWdoZXN0IHByaW9yaXR5KVxuICogMi4gTWVzc2FnZUJ1cyBhZGFwdGVycyAobGVnYWN5LCBkZXByZWNhdGVkKVxuICogMy4gQXV0by1kZXRlY3RlZCBhZGFwdGVycyAoZGVmYXVsdCBiZWhhdmlvcilcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFkYXB0ZXJzKG9wdGlvbnM6IEludGVybmFsU3RhdGVPcHRpb25zKToge1xuICBzdG9yYWdlOiBTdG9yYWdlQWRhcHRlciB8IG51bGw7XG4gIHN5bmM6IFN5bmNBZGFwdGVyIHwgbnVsbDtcbn0ge1xuICAvLyBQcmlvcml0eSAxOiBFeHBsaWNpdCBhZGFwdGVycyAocGFydGlhbCBvciBmdWxsKVxuICBpZiAob3B0aW9ucy5zdG9yYWdlIHx8IG9wdGlvbnMuc3luYykge1xuICAgIHJldHVybiB7XG4gICAgICBzdG9yYWdlOiBvcHRpb25zLnN0b3JhZ2UgfHwgKG9wdGlvbnMuZW5hYmxlUGVyc2lzdCA/IGNyZWF0ZVN0b3JhZ2VBZGFwdGVyKCkgOiBudWxsKSxcbiAgICAgIHN5bmM6IG9wdGlvbnMuc3luYyB8fCAob3B0aW9ucy5lbmFibGVTeW5jID8gY3JlYXRlU3luY0FkYXB0ZXIoKSA6IG51bGwpLFxuICAgIH07XG4gIH1cblxuICAvLyBQcmlvcml0eSAyOiBNZXNzYWdlQnVzIChsZWdhY3kgc3VwcG9ydClcbiAgLy8gTWVzc2FnZUJ1cyBkb2Vzbid0IHByb3ZpZGUgc3luYyBhZGFwdGVyLCBvbmx5IENocm9tZSBzdG9yYWdlXG4gIGlmIChvcHRpb25zLmJ1cykge1xuICAgIHJldHVybiB7XG4gICAgICBzdG9yYWdlOiBvcHRpb25zLmJ1cy5hZGFwdGVycy5zdG9yYWdlLFxuICAgICAgc3luYzogb3B0aW9ucy5lbmFibGVTeW5jID8gY3JlYXRlU3luY0FkYXB0ZXIoKSA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFByaW9yaXR5IDM6IEF1dG8tZGV0ZWN0IGJhc2VkIG9uIGVuYWJsZVN5bmMgYW5kIGVuYWJsZVBlcnNpc3QgZmxhZ3NcbiAgcmV0dXJuIHtcbiAgICBzdG9yYWdlOiBvcHRpb25zLmVuYWJsZVBlcnNpc3QgPyBjcmVhdGVTdG9yYWdlQWRhcHRlcigpIDogbnVsbCxcbiAgICBzeW5jOiBvcHRpb25zLmVuYWJsZVN5bmMgPyBjcmVhdGVTeW5jQWRhcHRlcigpIDogbnVsbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RhdGU8VD4oa2V5OiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogVCwgb3B0aW9uczogSW50ZXJuYWxTdGF0ZU9wdGlvbnM8VD4pOiBTaWduYWw8VD4ge1xuICAvLyBSZXR1cm4gZXhpc3Rpbmcgc2lnbmFsIGlmIGFscmVhZHkgcmVnaXN0ZXJlZFxuICBpZiAoc3RhdGVSZWdpc3RyeS5oYXMoa2V5KSkge1xuICAgIHJldHVybiBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpPy5zaWduYWwgYXMgdW5rbm93biBhcyBTaWduYWw8VD47XG4gIH1cblxuICBjb25zdCBzaWcgPSBzaWduYWwoaW5pdGlhbFZhbHVlKTtcblxuICAvLyBDcmVhdGUgdmVyaWZpY2F0aW9uIG1pcnJvciBpZiByZXF1ZXN0ZWRcbiAgaWYgKG9wdGlvbnMudmVyaWZ5KSB7XG4gICAgLy8gQ3JlYXRlIHBsYWluIG9iamVjdCBtaXJyb3IgZm9yIHZlcmlmaWNhdGlvblxuICAgIGNvbnN0IG1pcnJvciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5pdGlhbFZhbHVlKSkgYXMgdW5rbm93biBhcyBUO1xuICAgIChzaWcgYXMgdW5rbm93biBhcyBTaWduYWxXaXRoVmVyaWZ5PFQ+KS52ZXJpZnkgPSBtaXJyb3I7XG4gIH1cblxuICBjb25zdCBlbnRyeTogU3RhdGVFbnRyeTxUPiA9IHtcbiAgICBzaWduYWw6IHNpZyxcbiAgICBjbG9jazogMCxcbiAgICBsb2FkZWQ6IFByb21pc2UucmVzb2x2ZSgpLFxuICAgIHVwZGF0aW5nOiBmYWxzZSxcbiAgfTtcblxuICAvLyBSZXNvbHZlIGFkYXB0ZXJzIChleHBsaWNpdCwgTWVzc2FnZUJ1cywgb3IgYXV0by1kZXRlY3QpXG4gIGNvbnN0IGFkYXB0ZXJzID0gcmVzb2x2ZUFkYXB0ZXJzKG9wdGlvbnMpO1xuXG4gIC8vIExvYWQgZnJvbSBzdG9yYWdlIGlmIHBlcnNpc3QgaXMgZW5hYmxlZFxuICBpZiAob3B0aW9ucy5lbmFibGVQZXJzaXN0ICYmIGFkYXB0ZXJzLnN0b3JhZ2UpIHtcbiAgICBlbnRyeS5sb2FkZWQgPSBsb2FkRnJvbVN0b3JhZ2Uoa2V5LCBzaWcsIGVudHJ5LCBhZGFwdGVycy5zdG9yYWdlLCBvcHRpb25zLnZhbGlkYXRvcik7XG4gIH1cblxuICAvLyBXYXRjaCBmb3IgY2hhbmdlcyBhZnRlciBpbml0aWFsIGxvYWRcbiAgZW50cnkubG9hZGVkLnRoZW4oKCkgPT4ge1xuICAgIGxldCBkZWJvdW5jZVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBwcmV2aW91c1ZhbHVlID0gc2lnLnZhbHVlO1xuICAgIGxldCBpc0ZpcnN0UnVuID0gdHJ1ZTtcblxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBTeW5jIGVmZmVjdCByZXF1aXJlcyBjb29yZGluYXRpb24gb2YgbXVsdGlwbGUgc3RhdGUgY2hhbmdlIHNjZW5hcmlvc1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBSZWFkIHRoZSBzaWduYWwgRklSU1QsIGJlZm9yZSBhbnkgZWFybHkgcmV0dXJuIGNhbiBoYXBwZW4uXG4gICAgICAvL1xuICAgICAgLy8gUHJlYWN0IHJlLWNvbGxlY3RzIGFuIGVmZmVjdCdzIGRlcGVuZGVuY2llcyBvbiBldmVyeSBydW4sIHNvIGEgcnVuIHRoYXRcbiAgICAgIC8vIHJldHVybnMgd2l0aG91dCB0b3VjaGluZyBgc2lnLnZhbHVlYCB1bnN1YnNjcmliZXMgdGhlIGVmZmVjdCBmb3IgZ29vZC5cbiAgICAgIC8vIFRoZSBydW4gYW4gaW5jb21pbmcgc3luYyBtZXNzYWdlIHRyaWdnZXJzIGlzIGV4YWN0bHkgc3VjaCBhIHJ1bi5cbiAgICAgIGNvbnN0IHZhbHVlID0gc2lnLnZhbHVlO1xuXG4gICAgICAvLyBTa2lwIGZpcnN0IHJ1biAoZWZmZWN0IGZpcmVzIGltbWVkaWF0ZWx5IG9uIHJlZ2lzdHJhdGlvbilcbiAgICAgIGlmIChpc0ZpcnN0UnVuKSB7XG4gICAgICAgIGlzRmlyc3RSdW4gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBbiBpbmNvbWluZyBtZXNzYWdlIGlzIGJlaW5nIGFwcGxpZWQuIEFkb3B0IGl0IGFzIHRoZSBiYXNlbGluZSDigJQgdGhpc1xuICAgICAgLy8gY29udGV4dCBub3cgaG9sZHMgaXQsIHNvIHRoZSBuZXh0IGxvY2FsIGNoYW5nZSBpcyBhIGNoYW5nZSBhZ2FpbnN0IGl0IOKAlFxuICAgICAgLy8gYW5kIGRvIG5vdCBicm9hZGNhc3QsIHdoaWNoIHdvdWxkIGVjaG8gaXQgYmFjayB0byB0aGUgc2VuZGVyLlxuICAgICAgaWYgKGVudHJ5LnVwZGF0aW5nKSB7XG4gICAgICAgIHByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGlmIHZhbHVlIGhhc24ndCBjaGFuZ2VkIChkZWVwIGVxdWFsaXR5IGNoZWNrKVxuICAgICAgaWYgKGRlZXBFcXVhbCh2YWx1ZSwgcHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91c1ZhbHVlID0gdmFsdWU7XG5cbiAgICAgIC8vIFVwZGF0ZSB2ZXJpZmljYXRpb24gbWlycm9yIGlmIGVuYWJsZWRcbiAgICAgIGlmIChvcHRpb25zLnZlcmlmeSkge1xuICAgICAgICBjb25zdCB2ZXJpZnlTaWduYWwgPSBzaWcgYXMgdW5rbm93biBhcyBTaWduYWxXaXRoVmVyaWZ5PFQ+O1xuICAgICAgICBpZiAodmVyaWZ5U2lnbmFsLnZlcmlmeSkge1xuICAgICAgICAgIC8vIG5vc2VtZ3JlcDogamF2YXNjcmlwdC5sYW5nLnNlY3VyaXR5Lmluc2VjdXJlLW9iamVjdC1hc3NpZ24uaW5zZWN1cmUtb2JqZWN0LWFzc2lnbiDigJQgaW50ZXJuYWwgbWlycm9yOyB2YWx1ZSBpcyBhIGRlZXAgSlNPTiBjbG9uZSwgbm90IGFyYml0cmFyeSBleHRlcm5hbCBpbnB1dC5cbiAgICAgICAgICBPYmplY3QuYXNzaWduKHZlcmlmeVNpZ25hbC52ZXJpZnksIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSW5jcmVtZW50IGNsb2NrIG1vbm90b25pY2FsbHlcbiAgICAgIGVudHJ5LmNsb2NrKys7XG5cbiAgICAgIGNvbnN0IGRvVXBkYXRlID0gKCkgPT4ge1xuICAgICAgICAvLyBQZXJzaXN0IHRvIHN0b3JhZ2VcbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlUGVyc2lzdCAmJiBhZGFwdGVycy5zdG9yYWdlKSB7XG4gICAgICAgICAgcGVyc2lzdFRvU3RvcmFnZShrZXksIHZhbHVlLCBlbnRyeS5jbG9jaywgYWRhcHRlcnMuc3RvcmFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCcm9hZGNhc3QgdG8gb3RoZXIgY29udGV4dHNcbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlU3luYyAmJiBhZGFwdGVycy5zeW5jKSB7XG4gICAgICAgICAgYnJvYWRjYXN0VXBkYXRlKGtleSwgdmFsdWUsIGVudHJ5LmNsb2NrLCBhZGFwdGVycy5zeW5jKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gRGVib3VuY2UgaWYgc3BlY2lmaWVkXG4gICAgICBpZiAob3B0aW9ucy5kZWJvdW5jZU1zKSB7XG4gICAgICAgIGlmIChkZWJvdW5jZVRpbWVyKSBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7XG4gICAgICAgIGRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KGRvVXBkYXRlLCBvcHRpb25zLmRlYm91bmNlTXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9VcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gTGlzdGVuIGZvciB1cGRhdGVzIGZyb20gb3RoZXIgY29udGV4dHMgKG9ubHkgaWYgc3luYyBlbmFibGVkKVxuICBpZiAob3B0aW9ucy5lbmFibGVTeW5jICYmIGFkYXB0ZXJzLnN5bmMpIHtcbiAgICAvLyBDb25uZWN0IGlmIG5lZWRlZCAoc29tZSBhZGFwdGVycyByZXF1aXJlIGV4cGxpY2l0IGNvbm5lY3Rpb24pXG4gICAgaWYgKGFkYXB0ZXJzLnN5bmMuY29ubmVjdCkge1xuICAgICAgYWRhcHRlcnMuc3luYy5jb25uZWN0KCk7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgc3luYyBtZXNzYWdlIGxpc3RlbmVyXG4gICAgYWRhcHRlcnMuc3luYy5vbk1lc3NhZ2U8VD4oKG1lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlLmtleSAhPT0ga2V5KSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG9sZENsb2NrID0gZW50cnkuY2xvY2s7XG5cbiAgICAgIC8vIExhbXBvcnQgY2xvY2sgcnVsZTogQWx3YXlzIHVwZGF0ZSB0byBtYXgobG9jYWwsIHJlY2VpdmVkKVxuICAgICAgLy8gVGhpcyBtYWludGFpbnMgY2F1c2FsIG9yZGVyaW5nIGV2ZW4gd2hlbiByZWplY3RpbmcgdXBkYXRlc1xuICAgICAgZW50cnkuY2xvY2sgPSBNYXRoLm1heChlbnRyeS5jbG9jaywgbWVzc2FnZS5jbG9jayk7XG5cbiAgICAgIC8vIE9ubHkgYWNjZXB0IHZhbHVlIHVwZGF0ZXMgaWYgcmVjZWl2ZWQgY2xvY2sgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIG9sZCBsb2NhbCBjbG9ja1xuICAgICAgLy8gVGhpcyBlbnN1cmVzIHdlIG9ubHkgYXBwbHkgY2F1c2FsbHkgbmV3ZXIgdXBkYXRlc1xuICAgICAgaWYgKG1lc3NhZ2UuY2xvY2sgPiBvbGRDbG9jaykge1xuICAgICAgICAvLyBWYWxpZGF0ZSBpbmNvbWluZyB2YWx1ZSBpZiB2YWxpZGF0b3IgcHJvdmlkZWRcbiAgICAgICAgaWYgKG9wdGlvbnMudmFsaWRhdG9yICYmICFvcHRpb25zLnZhbGlkYXRvcihtZXNzYWdlLnZhbHVlKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBbUG9sbHldIFN0YXRlIFwiJHtrZXl9XCI6IFJlY2VpdmVkIGludmFsaWQgdmFsdWUgZnJvbSBzeW5jIChjbG9jazogJHttZXNzYWdlLmNsb2NrfSlgLFxuICAgICAgICAgICAgbWVzc2FnZS52YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2tpcCByZWR1bmRhbnQgdXBkYXRlcyAoZGVlcCBlcXVhbGl0eSBjaGVjaylcbiAgICAgICAgaWYgKGRlZXBFcXVhbChlbnRyeS5zaWduYWwudmFsdWUsIG1lc3NhZ2UudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwbHlVcGRhdGUoZW50cnksIG1lc3NhZ2UudmFsdWUgYXMgdW5rbm93biBhcyBULCBtZXNzYWdlLmNsb2NrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRlUmVnaXN0cnkuc2V0KGtleSwgZW50cnkgYXMgdW5rbm93biBhcyBTdGF0ZUVudHJ5PHVua25vd24+KTtcbiAgcmV0dXJuIHNpZztcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQmFja2ZpbGwga2V5cyBhZGRlZCB0byB0aGUgc3RhdGUgc2hhcGUgc2luY2UgYSB2YWx1ZSB3YXMgcGVyc2lzdGVkLlxuICpcbiAqIFN0b3JlZCBwbGFpbiBvYmplY3RzIGFyZSBzaGFsbG93LW1lcmdlZCBvdmVyIHRoZSBjdXJyZW50IGRlZmF1bHRzIHNvIHRoYXQgYVxuICogZmllbGQgYWRkZWQgaW4gYSBsYXRlciByZWxlYXNlIHJlaHlkcmF0ZXMgdG8gaXRzIGRlZmF1bHQgcmF0aGVyIHRoYW5cbiAqIGB1bmRlZmluZWRgLiBQcmltaXRpdmVzIGFuZCBhcnJheXMgYXJlIHJlcGxhY2VkIHdob2xlc2FsZSDigJQgbWVyZ2luZyB0aG9zZVxuICogd291bGQgY29ycnVwdCB0aGVtLlxuICovXG5mdW5jdGlvbiByZWNvbmNpbGVXaXRoRGVmYXVsdHM8VD4oZGVmYXVsdHM6IFQsIHN0b3JlZDogdW5rbm93bik6IFQge1xuICAvLyBQZXJzaXN0ZWQgdmFsdWVzIGFyZSB0cnVzdGVkIHRvIGJlIHRoZSBUIHRoaXMga2V5IHdhcyByZWdpc3RlcmVkIHdpdGg7XG4gIC8vIHNjaGVtYSBkcmlmdCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXJnZSwgbm90IGJ5IHJ1bnRpbWUgdmFsaWRhdGlvbi5cbiAgaWYgKGlzUGxhaW5PYmplY3QoZGVmYXVsdHMpICYmIGlzUGxhaW5PYmplY3Qoc3RvcmVkKSkge1xuICAgIHJldHVybiB7IC4uLmRlZmF1bHRzLCAuLi5zdG9yZWQgfSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIHN0b3JlZCBhcyB1bmtub3duIGFzIFQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRGcm9tU3RvcmFnZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIHNpZzogU2lnbmFsPFQ+LFxuICBlbnRyeTogU3RhdGVFbnRyeTxUPixcbiAgc3RvcmFnZTogU3RvcmFnZUFkYXB0ZXIsXG4gIHZhbGlkYXRvcj86ICh2YWx1ZTogdW5rbm93bikgPT4gdmFsdWUgaXMgVFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RvcmFnZS5nZXQoW2tleSwgYCR7a2V5fTpjbG9ja2BdKTtcblxuICAgIGlmIChyZXN1bHRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzaWcgc3RpbGwgaG9sZHMgdGhlIGluaXRpYWwgdmFsdWUgaGVyZSwgc28gaXQgaXMgdGhlIGRlZmF1bHQgYmFzZVxuICAgICAgLy8gZm9yIGJhY2tmaWxsaW5nIGtleXMgdGhlIHBlcnNpc3RlZCBibG9iIHByZWRhdGVzLlxuICAgICAgY29uc3Qgc3RvcmVkVmFsdWUgPSByZWNvbmNpbGVXaXRoRGVmYXVsdHMoc2lnLnBlZWsoKSwgcmVzdWx0W2tleV0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBzdG9yZWQgdmFsdWUgaWYgdmFsaWRhdG9yIHByb3ZpZGVkXG4gICAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICAgIGlmICh2YWxpZGF0b3Ioc3RvcmVkVmFsdWUpKSB7XG4gICAgICAgICAgc2lnLnZhbHVlID0gc3RvcmVkVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtQb2xseV0gU3RhdGUgXCIke2tleX1cIjogU3RvcmVkIHZhbHVlIGZhaWxlZCB2YWxpZGF0aW9uLCB1c2luZyBpbml0aWFsIHZhbHVlYCxcbiAgICAgICAgICAgIHN0b3JlZFZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2lnLnZhbHVlID0gc3RvcmVkVmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHRbYCR7a2V5fTpjbG9ja2BdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVudHJ5LmNsb2NrID0gcmVzdWx0W2Ake2tleX06Y2xvY2tgXSBhcyB1bmtub3duIGFzIG51bWJlcjtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKGBbUG9sbHldIEZhaWxlZCB0byBsb2FkIHN0YXRlIGZyb20gc3RvcmFnZTogJHtrZXl9YCwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcnNpc3RUb1N0b3JhZ2U8VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBULCBjbG9jazogbnVtYmVyLCBzdG9yYWdlOiBTdG9yYWdlQWRhcHRlcik6IHZvaWQge1xuICB0cnkge1xuICAgIHN0b3JhZ2Uuc2V0KHtcbiAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICAgIFtgJHtrZXl9OmNsb2NrYF06IGNsb2NrLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihgW1BvbGx5XSBGYWlsZWQgdG8gcGVyc2lzdCBzdGF0ZSB0byBzdG9yYWdlOiAke2tleX1gLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnJvYWRjYXN0VXBkYXRlPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCwgY2xvY2s6IG51bWJlciwgc3luYzogU3luY0FkYXB0ZXIpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBzeW5jLmJyb2FkY2FzdCh7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIGNsb2NrLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihgW1BvbGx5XSBGYWlsZWQgdG8gYnJvYWRjYXN0IHN0YXRlIHVwZGF0ZTogJHtrZXl9YCwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VXBkYXRlPFQ+KGVudHJ5OiBTdGF0ZUVudHJ5PFQ+LCB2YWx1ZTogVCwgY2xvY2s6IG51bWJlcik6IHZvaWQge1xuICBlbnRyeS51cGRhdGluZyA9IHRydWU7XG4gIGVudHJ5LnNpZ25hbC52YWx1ZSA9IHZhbHVlO1xuICBlbnRyeS5jbG9jayA9IGNsb2NrO1xuICBlbnRyeS51cGRhdGluZyA9IGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCBzdGF0ZSBieSBrZXkgKHVzZWZ1bCBmb3IgcmV0cmlldmluZyBzdGF0ZSB3aXRob3V0IHJlLWNyZWF0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdGVCeUtleTxUPihrZXk6IHN0cmluZyk6IFNpZ25hbDxUPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVudHJ5ID0gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgcmV0dXJuIGVudHJ5Py5zaWduYWwgYXMgdW5rbm93biBhcyBTaWduYWw8VD4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2xlYXIgc3RhdGUgcmVnaXN0cnkgKHVzZWZ1bCBmb3IgdGVzdGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU3RhdGVSZWdpc3RyeSgpOiB2b2lkIHtcbiAgc3RhdGVSZWdpc3RyeS5jbGVhcigpO1xufVxuIiwKICAgICIvKipcbiAqIFN0YXRlIG93bmVkIGJ5IHRoZSBjb21wb25lbnQgZ2FsbGVyeS5cbiAqXG4gKiBUaGUgZ2FsbGVyeSBpcyBhIHN0YW5kYWxvbmUgZGV2IHN1cmZhY2Ugd2l0aCBubyBzZXJ2ZXIgc3RhdGUsIHNvIHRoZXNlXG4gKiBzaWduYWxzIHN0YXkgbW9kdWxlLWxvY2FsIOKAlCB0aGV5IG5ldmVyIGpvaW4gYSBzeW5jZWQgc3RvcmUgYnVuZGxlLiBBY3Rpb25cbiAqIGhhbmRsZXJzIChhY3Rpb25zLnRzKSByZWFjaCB0aGVtIGJ5IGltcG9ydCwgdGhlIHdheSBlYWwncyBzaG93Y2FzZSBkb2VzLlxuICogYHJlc2V0R2FsbGVyeVN0b3JlcygpYCBleGlzdHMgc28gdGhlIGJyb3dzZXIvdmlzdWFsIHRlc3QgY2FuIGlzb2xhdGUgcnVucy5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVGb3JtLCBzZXRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgJHN0YXRlIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9zaGFyZWQvbGliL3N0YXRlLnRzXCI7XG5cbmV4cG9ydCB0eXBlIEdhbGxlcnlUaGVtZSA9IFwic3lzdGVtXCIgfCBcImxpZ2h0XCIgfCBcImRhcmtcIjtcblxuLyoqIFRoZSBnYWxsZXJ5J3MgQWN0aW9uRm9ybSBiaW5kcyB0byBhbiBlbXB0eSBidW5kbGUg4oCUIG5vIHN0b3JlIGlzIHRvdWNoZWQuICovXG5leHBvcnQgdHlwZSBHYWxsZXJ5U3RvcmVzID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuXG4vKiogVGhlbWUgb3ZlcnJpZGUsIGFwcGxpZWQgdG8gdGhlIHBhbmVsIGFzIGBkYXRhLXBvbGx5LXRoZW1lYC4gYHN5c3RlbWAgb21pdHNcbiAqICB0aGUgYXR0cmlidXRlIGFuZCBsZXRzIGBwcmVmZXJzLWNvbG9yLXNjaGVtZWAgZGVjaWRlLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5VGhlbWUgPSAkc3RhdGU8R2FsbGVyeVRoZW1lPihcInN5c3RlbVwiKTtcbi8qKiBEcml2ZXMgdGhlIGxpdmUgPE1vZGFsPiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeU1vZGFsT3BlbiA9ICRzdGF0ZTxib29sZWFuPihmYWxzZSk7XG4vKiogRHJpdmVzIHRoZSBsaXZlIDxEcm9wZG93bj4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlEcm9wZG93bk9wZW4gPSAkc3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuLyoqIFNlbGVjdGlvbiBmb3IgdGhlIHNpbmdsZS1zZWxlY3QgPFNlbGVjdD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RTaW5nbGUgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoW1wiY29tZXRcIl0pKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBtdWx0aS1zZWxlY3QgPFNlbGVjdD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RNdWx0aSA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldChbXCJjb21ldFwiLCBcIm5lYnVsYVwiXSkpO1xuLyoqIFNlbGVjdGlvbiBmb3IgdGhlIGNsZWFyYWJsZSBzaW5nbGUtc2VsZWN0IDxTZWxlY3Q+IHNwZWNpbWVuLiBTdGFydHMgZW1wdHlcbiAqICBzbyB0aGUgXCJBbnkg4oCmXCIgY2xlYXIgb3B0aW9uIGlzIHRoZSBhY3RpdmUgcm93LiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuLyoqIFRoZSBsaXZlLCBzaWduYWwtYm91bmQgPENoZWNrYm94PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeUNoZWNrZWQgPSAkc3RhdGU8Ym9vbGVhbj4odHJ1ZSk7XG4vKiogVGhlIGNvbnRyb2xsZWQgPFRleHRJbnB1dD4gc3BlY2ltZW4gdmFsdWUuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlUZXh0ID0gJHN0YXRlPHN0cmluZz4oXCJDb250cm9sbGVkIHZhbHVlXCIpO1xuLyoqIExhc3QgdmFsdWUgY29tbWl0dGVkIGJ5IHRoZSA8QWN0aW9uSW5wdXQ+IC8gPEFjdGlvblNlbGVjdD4gc3BlY2ltZW5zLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5Q29tbWl0dGVkID0gJHN0YXRlPHN0cmluZz4oXCLigJRcIik7XG4vKiogQWN0aXZlIHRhYiBpZCBmb3IgdGhlIDxUYWJzPiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVRhYiA9ICRzdGF0ZTxzdHJpbmc+KFwib3ZlcnZpZXdcIik7XG4vKiogTmFtZSBvZiB0aGUgbGFzdCBmaWxlIHBpY2tlZCBieSB0aGUgPEZpbGVJbnB1dD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlGaWxlTmFtZSA9ICRzdGF0ZTxzdHJpbmc+KFwi4oCUXCIpO1xuXG4vKipcbiAqIFRoZSBmb3JtIGJlaGluZCB0aGUgPEFjdGlvbkZvcm0+IHNwZWNpbWVuLiBgY3JlYXRlRm9ybWAgcmVxdWlyZXMgYGJpbmRTdG9yZXNgXG4gKiBiZWZvcmUgYSBzdWJtaXQgY2FuIHJ1bjsgY2xpZW50LnRzeCBiaW5kcyBpdCB0byB0aGUgZW1wdHkgZ2FsbGVyeSBidW5kbGUgYXRcbiAqIGJvb3QuIEl0cyBgLmFjdGlvbnNgIGFyZSBzcHJlYWQgaW50byB0aGUgcmVnaXN0cnkgKHNlZSBhY3Rpb25zLnRzKS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdhbGxlcnlGb3JtID0gY3JlYXRlRm9ybTx7IGZ1bGxOYW1lOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmcgfSwgR2FsbGVyeVN0b3Jlcz4oe1xuICBuYW1lOiBcImdhbGxlcnktZm9ybVwiLFxuICBpbml0aWFsVmFsdWVzOiB7IGZ1bGxOYW1lOiBcIlwiLCBlbWFpbDogXCJcIiB9LFxuICBvblN1Ym1pdDogKHsgdmFsdWVzIH0pID0+IHtcbiAgICBzZXRFcnJvcihcbiAgICAgIGBBY3Rpb25Gb3JtIHN1Ym1pdHRlZCDigJQgbmFtZSBcIiR7dmFsdWVzLmZ1bGxOYW1lIHx8IFwiKGVtcHR5KVwifVwiLCBgICtcbiAgICAgICAgYGVtYWlsIFwiJHt2YWx1ZXMuZW1haWwgfHwgXCIoZW1wdHkpXCJ9XCIuYCxcbiAgICAgIHsgc2V2ZXJpdHk6IFwiaW5mb1wiIH1cbiAgICApO1xuICB9LFxufSk7XG5cbi8qKiBSZXNldCBldmVyeSBnYWxsZXJ5IHNpZ25hbCB0byBpdHMgaW5pdGlhbCB2YWx1ZSDigJQgZm9yIHRlc3QgaXNvbGF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0R2FsbGVyeVN0b3JlcygpOiB2b2lkIHtcbiAgJGdhbGxlcnlUaGVtZS52YWx1ZSA9IFwic3lzdGVtXCI7XG4gICRnYWxsZXJ5TW9kYWxPcGVuLnZhbHVlID0gZmFsc2U7XG4gICRnYWxsZXJ5RHJvcGRvd25PcGVuLnZhbHVlID0gZmFsc2U7XG4gICRnYWxsZXJ5U2VsZWN0U2luZ2xlLnZhbHVlID0gbmV3IFNldChbXCJjb21ldFwiXSk7XG4gICRnYWxsZXJ5U2VsZWN0TXVsdGkudmFsdWUgPSBuZXcgU2V0KFtcImNvbWV0XCIsIFwibmVidWxhXCJdKTtcbiAgJGdhbGxlcnlTZWxlY3RDbGVhcmFibGUudmFsdWUgPSBuZXcgU2V0KCk7XG4gICRnYWxsZXJ5Q2hlY2tlZC52YWx1ZSA9IHRydWU7XG4gICRnYWxsZXJ5VGV4dC52YWx1ZSA9IFwiQ29udHJvbGxlZCB2YWx1ZVwiO1xuICAkZ2FsbGVyeUNvbW1pdHRlZC52YWx1ZSA9IFwi4oCUXCI7XG4gICRnYWxsZXJ5VGFiLnZhbHVlID0gXCJvdmVydmlld1wiO1xuICAkZ2FsbGVyeUZpbGVOYW1lLnZhbHVlID0gXCLigJRcIjtcbiAgZ2FsbGVyeUZvcm0uY2xvc2UoKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25zIGZvciB0aGUgZ2FsbGVyeSdzIGludGVyYWN0aXZlIHNwZWNpbWVucy4gRXZlcnkgaGFuZGxlciBkcml2ZXMgYVxuICogbW9kdWxlLWxvY2FsIHNpZ25hbCAoc3RvcmVzLnRzKSBvciBhIHBvbGx5IG92ZXJsYXkgcHJpbWl0aXZlIOKAlCBub25lIHRvdWNoZXMgYVxuICogc3RvcmUgYnVuZGxlLCBzbyB0aGUgZ2FsbGVyeSBzdGF5cyBhIHNlbGYtY29udGFpbmVkIGRldiBzdXJmYWNlLiBTcHJlYWRpbmdcbiAqIGBnYWxsZXJ5Rm9ybS5hY3Rpb25zYCBhZGRzIHRoZSBhdXRvLXJlZ2lzdGVyZWQgYGdhbGxlcnktZm9ybTp7b3BlbixjbG9zZSxcbiAqIHN1Ym1pdH1gIGhhbmRsZXJzLiBjbGllbnQudHN4IHdpcmVzIHRoaXMgcmVnaXN0cnkgaW50byB0aGUgZG9jdW1lbnQgdmlhXG4gKiBgaW5zdGFsbEV2ZW50RGVsZWdhdGlvbmAsIGV4YWN0bHkgYXMgYSByZWFsIGNvbnN1bWVyIGFwcCB3b3VsZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZ2lzdHJ5LCBFcnJvclNldmVyaXR5IH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyBzZXRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gXCIuLi8uLi8uLi9zcmMvcG9sbHktdWlcIjtcbmltcG9ydCB7XG4gICRnYWxsZXJ5Q29tbWl0dGVkLFxuICAkZ2FsbGVyeU1vZGFsT3BlbixcbiAgJGdhbGxlcnlUYWIsXG4gICRnYWxsZXJ5VGhlbWUsXG4gIHR5cGUgR2FsbGVyeVN0b3JlcyxcbiAgdHlwZSBHYWxsZXJ5VGhlbWUsXG4gIGdhbGxlcnlGb3JtLFxufSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcblxuY29uc3QgVEhFTUVTOiByZWFkb25seSBHYWxsZXJ5VGhlbWVbXSA9IFtcInN5c3RlbVwiLCBcImxpZ2h0XCIsIFwiZGFya1wiXTtcbmNvbnN0IFNFVkVSSVRJRVM6IHJlYWRvbmx5IEVycm9yU2V2ZXJpdHlbXSA9IFtcImluZm9cIiwgXCJ3YXJuaW5nXCIsIFwiZXJyb3JcIl07XG5cbmV4cG9ydCBjb25zdCBHQUxMRVJZX0FDVElPTlM6IEFjdGlvblJlZ2lzdHJ5PEdhbGxlcnlTdG9yZXM+ID0ge1xuICAuLi5nYWxsZXJ5Rm9ybS5hY3Rpb25zLFxuXG4gIFwiZ2FsbGVyeTpzZXQtdGhlbWVcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgdGhlbWUgPSBkYXRhW1widGhlbWVcIl07XG4gICAgaWYgKHRoZW1lID09PSBcInN5c3RlbVwiIHx8IHRoZW1lID09PSBcImxpZ2h0XCIgfHwgdGhlbWUgPT09IFwiZGFya1wiKSB7XG4gICAgICAkZ2FsbGVyeVRoZW1lLnZhbHVlID0gdGhlbWU7XG4gICAgfVxuICB9LFxuXG4gIFwiZ2FsbGVyeTpzZXQtdGFiXCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IGlkID0gZGF0YVtcImlkXCJdO1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIpICRnYWxsZXJ5VGFiLnZhbHVlID0gaWQ7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5Om1vZGFsLW9wZW5cIjogKCkgPT4ge1xuICAgICRnYWxsZXJ5TW9kYWxPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfSxcblxuICBcImdhbGxlcnk6Y29tbWl0XCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YVtcInZhbHVlXCJdO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpICRnYWxsZXJ5Q29tbWl0dGVkLnZhbHVlID0gdmFsdWU7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OnRvYXN0XCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IHNldmVyaXR5ID0gU0VWRVJJVElFUy5maW5kKChzKSA9PiBzID09PSBkYXRhW1wic2V2ZXJpdHlcIl0pID8/IFwiaW5mb1wiO1xuICAgIHNldEVycm9yKGBUaGlzIGlzIGEgJHtzZXZlcml0eX0gdG9hc3Qg4oCUIGNsaWNrIGl0IG9yIHdhaXQgZm9yIGl0IHRvIGRpc21pc3MuYCwge1xuICAgICAgc2V2ZXJpdHksXG4gICAgfSk7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OmNvbmZpcm1cIjogYXN5bmMgKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgZGFuZ2VyID0gZGF0YVtcImRhbmdlclwiXSA9PT0gXCJ0cnVlXCI7XG4gICAgY29uc3Qgb2sgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgIHRpdGxlOiBkYW5nZXIgPyBcIkRlbGV0ZSB0aGlzIGl0ZW0/XCIgOiBcIlNhdmUgeW91ciBjaGFuZ2VzP1wiLFxuICAgICAgYm9keTogZGFuZ2VyXG4gICAgICAgID8gXCJUaGlzIGNhbm5vdCBiZSB1bmRvbmUuIFRoZSBpdGVtIHdpbGwgYmUgcGVybWFuZW50bHkgcmVtb3ZlZC5cIlxuICAgICAgICA6IFwiWW91ciBjaGFuZ2VzIHdpbGwgYmUgYXBwbGllZCBpbW1lZGlhdGVseS5cIixcbiAgICAgIGRhbmdlcixcbiAgICAgIGNvbmZpcm1MYWJlbDogZGFuZ2VyID8gXCJEZWxldGVcIiA6IFwiU2F2ZVwiLFxuICAgIH0pO1xuICAgIHNldEVycm9yKGBDb25maXJtRGlhbG9nIHJlc29sdmVkICR7U3RyaW5nKG9rKX0uYCwgeyBzZXZlcml0eTogb2sgPyBcImluZm9cIiA6IFwid2FybmluZ1wiIH0pO1xuICB9LFxufTtcblxuLyoqIFRoZSB0aGVtZSBjeWNsZSwgZXhwb3NlZCBzbyB0aGUgcGFuZWwgY2FuIHJlbmRlciBvbmUgYnV0dG9uIHBlciBvcHRpb24uICovXG5leHBvcnQgeyBUSEVNRVMgfTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgZ2FsbGVyeSBjYXRhbG9ndWUg4oCUIG9uZSBzZWN0aW9uIHBlciBwb2xseS11aSBwcmltaXRpdmUsIGVhY2ggcmVuZGVyaW5nXG4gKiB0aGUgY29uZmlndXJhdGlvbnMgd29ydGggc2VlaW5nLiBBZGFwdGVkIGZyb20gZWFsJ3Mgc2hvd2Nhc2UgKHdoaWNoIGNvbnN1bWVzXG4gKiB0aGlzIHZlcnkgbGlicmFyeSksIHJlcG9pbnRlZCBhdCB0aGUgbG9jYWwgc291cmNlIHNvIHRoZSBnYWxsZXJ5IHJlbmRlcnMgdGhlXG4gKiBwcmltaXRpdmVzIGV4YWN0bHkgYXMgdGhleSBzaGlwLlxuICpcbiAqIEV2ZXJ5IHNlY3Rpb24gY2FycmllcyBhIGBjb21wb25lbnRgIG5hbWluZyB0aGUgcG9sbHktdWkgZXhwb3J0IGl0IGNvdmVycztcbiAqIHJlZ2lzdHJ5LWNvdmVyYWdlLnRzIGFzc2VydHMgdGhhdCBldmVyeSBjb21wb25lbnQgaW4gcmVnaXN0cnkuZ2VuZXJhdGVkLnRzXG4gKiBoYXMgYSBzZWN0aW9uIGhlcmUsIHNvIGEgbmV3IHByaW1pdGl2ZSBjYW4ndCBsYW5kIHdpdGhvdXQgYSBzcGVjaW1lbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQge1xuICBBY3Rpb25Gb3JtLFxuICBBY3Rpb25JbnB1dCxcbiAgQWN0aW9uU2VsZWN0LFxuICBCYWRnZSxcbiAgQnV0dG9uLFxuICBDYXJkLFxuICBDaGVja2JveCxcbiAgQ2x1c3RlcixcbiAgQ29kZSxcbiAgQ29sbGFwc2libGUsXG4gIERyb3Bkb3duLFxuICBGaWxlSW5wdXQsXG4gIEh0bWwsXG4gIExheW91dCxcbiAgTGluayxcbiAgTW9kYWwsXG4gIE91dHB1dCxcbiAgU2VsZWN0LFxuICBTa2VsZXRvbixcbiAgU3VyZmFjZSxcbiAgVGFicyxcbiAgVGV4dCxcbiAgVGV4dElucHV0LFxuICBUb2dnbGUsXG59IGZyb20gXCIuLi8uLi8uLi9zcmMvcG9sbHktdWlcIjtcbmltcG9ydCB7XG4gICRnYWxsZXJ5Q2hlY2tlZCxcbiAgJGdhbGxlcnlDb21taXR0ZWQsXG4gICRnYWxsZXJ5RHJvcGRvd25PcGVuLFxuICAkZ2FsbGVyeUZpbGVOYW1lLFxuICAkZ2FsbGVyeU1vZGFsT3BlbixcbiAgJGdhbGxlcnlTZWxlY3RDbGVhcmFibGUsXG4gICRnYWxsZXJ5U2VsZWN0TXVsdGksXG4gICRnYWxsZXJ5U2VsZWN0U2luZ2xlLFxuICAkZ2FsbGVyeVRhYixcbiAgJGdhbGxlcnlUZXh0LFxuICBnYWxsZXJ5Rm9ybSxcbn0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5cbi8qKlxuICogT25lIGNhdGFsb2d1ZWQgZXhhbXBsZTogYSBzdGFnZSBob2xkaW5nIGxpdmUgY29tcG9uZW50KHMpIGFuZCBhIGNhcHRpb25cbiAqIG5hbWluZyB0aGUgY29uZmlndXJhdGlvbiBvbiBzaG93LiBgd2lkZWAgc3BhbnMgZXZlcnkgZ3JpZCBjb2x1bW4gZm9yXG4gKiBzcGVjaW1lbnMgdGhhdCBuZWVkIHRoZSByb29tIChsYXlvdXRzLCBmb3JtcywgY2FyZHMpLlxuICovXG5mdW5jdGlvbiBTcGVjaW1lbihwcm9wczogeyBjYXB0aW9uOiBzdHJpbmc7IHdpZGU/OiBib29sZWFuOyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwic3Vua2VuXCJcbiAgICAgIHJhZGl1cz1cIm1kXCJcbiAgICAgIGJvcmRlcj1cImRlZmF1bHRcIlxuICAgICAgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiXG4gICAgICBjbGFzc05hbWU9e3Byb3BzLndpZGUgPyBcImdhbGxlcnktc3BlY2ltZW4gZ2FsbGVyeS1zcGVjaW1lbi0td2lkZVwiIDogXCJnYWxsZXJ5LXNwZWNpbWVuXCJ9XG4gICAgPlxuICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdhbGxlcnktc3RhZ2VcIj57cHJvcHMuY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiIHRvbmU9XCJtdXRlZFwiIGNsYXNzTmFtZT1cImdhbGxlcnktY29kZVwiPlxuICAgICAgICAgIHtwcm9wcy5jYXB0aW9ufVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0xheW91dD5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbi8qKiBBIG5ldXRyYWwgZmlsbGVyIGJsb2NrIGZvciB0aGUgbGF5b3V0IHNwZWNpbWVucy4gKi9cbmZ1bmN0aW9uIEJveChwcm9wczogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHZhcmlhbnQ9XCJyYWlzZWRcIiByYWRpdXM9XCJzbVwiIGJvcmRlcj1cImRlZmF1bHRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICA8VGV4dCBzaXplPVwic21cIj57cHJvcHMuY2hpbGRyZW59PC9UZXh0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuY29uc3QgU1RBUjogSlNYLkVsZW1lbnQgPSAoXG4gIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZ2FsbGVyeS1pY29uXCI+XG4gICAg4piFXG4gIDwvc3Bhbj5cbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2FsbGVyeVNlY3Rpb24ge1xuICAvKiogQW5jaG9yIGlkIGZvciB0aGUgaW4tcGFnZSBuYXYuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IGhlYWRpbmcuICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBUaGUgcG9sbHktdWkgZXhwb3J0IHRoaXMgc2VjdGlvbiBjb3ZlcnMgKG1hdGNoZWQgYWdhaW5zdCB0aGUgcmVnaXN0cnkpLiAqL1xuICBjb21wb25lbnQ6IHN0cmluZztcbiAgLyoqIE9uZS1saW5lIGRlc2NyaXB0aW9uLiAqL1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIHJlbmRlcjogKCkgPT4gSlNYLkVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBHQUxMRVJZX1NFQ1RJT05TOiByZWFkb25seSBHYWxsZXJ5U2VjdGlvbltdID0gW1xuICB7XG4gICAgaWQ6IFwiYmFkZ2VcIixcbiAgICB0aXRsZTogXCJCYWRnZVwiLFxuICAgIGNvbXBvbmVudDogXCJCYWRnZVwiLFxuICAgIHN1bW1hcnk6IFwiU21hbGwgaW5saW5lIHN0YXR1cyBjaGlwLiBPbmUgdmFyaWFudCBwZXIgc2VtYW50aWMgdG9uZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIHsoW1wiZGVmYXVsdFwiLCBcImluZm9cIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiXSBhcyBjb25zdCkubWFwKCh2KSA9PiAoXG4gICAgICAgICAgPFNwZWNpbWVuIGtleT17dn0gY2FwdGlvbj17YHZhcmlhbnQ9XCIke3Z9XCJgfT5cbiAgICAgICAgICAgIDxCYWRnZSB2YXJpYW50PXt2fT57dn08L0JhZGdlPlxuICAgICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgICkpfVxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImJ1dHRvblwiLFxuICAgIHRpdGxlOiBcIkJ1dHRvblwiLFxuICAgIGNvbXBvbmVudDogXCJCdXR0b25cIixcbiAgICBzdW1tYXJ5OiBcIkludGVyYWN0aXZlIGNvbnRyb2wuIFRpZXIgc2V0cyBpbXBvcnRhbmNlLCBjb2xvciBvdmVybGF5cyBtZWFuaW5nLCBzaXplIHNldHMgc2NhbGUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInRpZXI6IHByaW1hcnkgLyBzZWNvbmRhcnkgLyB0ZXJ0aWFyeVwiPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIlByaW1hcnlcIiAvPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInNlY29uZGFyeVwiIGxhYmVsPVwiU2Vjb25kYXJ5XCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJ0ZXJ0aWFyeVwiIGxhYmVsPVwiVGVydGlhcnlcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbG9yOiBkZWZhdWx0IC8gaW5mbyAvIHN1Y2Nlc3MgLyB3YXJuaW5nIC8gZGFuZ2VyXCI+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cImRlZmF1bHRcIiBsYWJlbD1cIkRlZmF1bHRcIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJpbmZvXCIgbGFiZWw9XCJJbmZvXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic3VjY2Vzc1wiIGxhYmVsPVwiU3VjY2Vzc1wiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cIndhcm5pbmdcIiBsYWJlbD1cIldhcm5pbmdcIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJkYW5nZXJcIiBsYWJlbD1cIkRhbmdlclwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2l6ZTogc21hbGwgLyBub3JtYWwgLyBsYXJnZVwiPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgbGFiZWw9XCJTbWFsbFwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwibm9ybWFsXCIgbGFiZWw9XCJOb3JtYWxcIiAvPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cImxhcmdlXCIgbGFiZWw9XCJMYXJnZVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8QnV0dG9uIGxhYmVsPVwiRGlzYWJsZWRcIiBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImljb24gKyBsYWJlbFwiPlxuICAgICAgICAgIDxCdXR0b24gaWNvbj17U1RBUn0gbGFiZWw9XCJXaXRoIGljb25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNpcmNsZSAoaWNvbi1vbmx5IG5lZWRzIGFyaWEtbGFiZWwpXCI+XG4gICAgICAgICAgPEJ1dHRvbiBjaXJjbGUgYXJpYS1sYWJlbD1cIlN0YXJcIiBsYWJlbD17U1RBUn0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJocmVmIOKAlCByZW5kZXJzIGFuIDxhPlwiPlxuICAgICAgICAgIDxCdXR0b24gaHJlZj1cIiNidXR0b25cIiB0aWVyPVwic2Vjb25kYXJ5XCIgbGFiZWw9XCJMaW5rIGJ1dHRvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZnVsbFdpZHRoXCIgd2lkZT5cbiAgICAgICAgICA8QnV0dG9uIGZ1bGxXaWR0aCB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiRnVsbC13aWR0aCBidXR0b25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICB7LyogVGhlIHR3byByb3dzIHNoYXJlIGEgbGVmdCBlZGdlLCBzbyB0aGUgb2Zmc2V0IGlzIHRoZSB3aG9sZSBwb2ludDpcbiAgICAgICAgICAgIHRoZSBkZWZhdWx0IGJ1dHRvbiBhbGlnbnMgaXRzIEJPWCB0byB0aGF0IGVkZ2UgYW5kIGl0cyBsYWJlbCBzaXRzXG4gICAgICAgICAgICBhbiBpbmxpbmUtcGFkZGluZyBmdXJ0aGVyIGluOyB0aGUgZmx1c2ggb25lIHB1dHMgdGhlIExBQkVMIHRoZXJlLiAqL31cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJmbHVzaCDigJQgbGFiZWwgb24gdGhlIHRleHQgZWRnZSwgZm9yIGEgdGVydGlhcnkgYnV0dG9uIGJlc2lkZSBjb3B5XCIgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICAgIEEgbGluZSBvZiBib2R5IGNvcHkgZm9yIHRoZSBsZWZ0IGVkZ2UuXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8Q2x1c3Rlcj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0aWVyPVwidGVydGlhcnlcIiBsYWJlbD1cIkRlZmF1bHQg4oCUIGJveCBhbGlnbnNcIiAvPlxuICAgICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICAgICAgPENsdXN0ZXI+XG4gICAgICAgICAgICAgIDxCdXR0b24gdGllcj1cInRlcnRpYXJ5XCIgZmx1c2ggbGFiZWw9XCJGbHVzaCDigJQgbGFiZWwgYWxpZ25zXCIgLz5cbiAgICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0ZXh0XCIsXG4gICAgdGl0bGU6IFwiVGV4dFwiLFxuICAgIGNvbXBvbmVudDogXCJUZXh0XCIsXG4gICAgc3VtbWFyeTogXCJUeXBvZ3JhcGhpYyBwcmltaXRpdmUg4oCUIHRvbmUsIHNpemUsIHdlaWdodCwgaXRhbGljLCBzdHJpa2V0aHJvdWdoLCBhbmQgbGVhZGluZy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidG9uZTogZGVmYXVsdCAvIG11dGVkIC8gZGFuZ2VyIC8gd2FybmluZyAvIHN1Y2Nlc3NcIj5cbiAgICAgICAgICA8VGV4dCB0b25lPVwiZGVmYXVsdFwiPkRlZmF1bHQ8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIm11dGVkXCI+TXV0ZWQ8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cImRhbmdlclwiPkRhbmdlcjwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB0b25lPVwid2FybmluZ1wiPldhcm5pbmc8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cInN1Y2Nlc3NcIj5TdWNjZXNzPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpemU6IHhzIC8gc20gLyBtZCAvIGxnIC8geGxcIj5cbiAgICAgICAgICB7KFtcInhzXCIsIFwic21cIiwgXCJtZFwiLCBcImxnXCIsIFwieGxcIl0gYXMgY29uc3QpLm1hcCgocykgPT4gKFxuICAgICAgICAgICAgPFRleHQga2V5PXtzfSBzaXplPXtzfT5cbiAgICAgICAgICAgICAge3N9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwid2VpZ2h0OiBub3JtYWwgLyBtZWRpdW0gLyBib2xkXCI+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwibm9ybWFsXCI+Tm9ybWFsPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cIm1lZGl1bVwiPk1lZGl1bTwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJib2xkXCI+Qm9sZDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpdGFsaWMgLyBzdHJpa2V0aHJvdWdoXCI+XG4gICAgICAgICAgPFRleHQgaXRhbGljPkl0YWxpYyBlbXBoYXNpczwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHJpa2V0aHJvdWdoPlN0cnVjayB0aHJvdWdoPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nbGVhZGluZz1cImxvb3NlXCIg4oCUIG11bHRpLWxpbmUgYm9keSBjb3B5JyB3aWRlPlxuICAgICAgICAgIDxUZXh0IGFzPVwicFwiIGxlYWRpbmc9XCJsb29zZVwiPlxuICAgICAgICAgICAgQSBwYXJhZ3JhcGggcmVuZGVyZWQgd2l0aCBsb29zZSBsZWFkaW5nLiBQb2xseSdzIFRleHQgcHJpbWl0aXZlIGJhY2tzIGV2ZXJ5IHNwYW4sXG4gICAgICAgICAgICBwYXJhZ3JhcGgsIGxhYmVsLCBhbmQgY2FwdGlvbiBzbyBjb25zdW1lcnMgbmV2ZXIgcmVhY2ggZm9yIGEgcmF3IHN0eWxlIGF0dHJpYnV0ZSB0byBzZXRcbiAgICAgICAgICAgIHRvbmUsIHNpemUsIHdlaWdodCwgb3IgbGluZSBoZWlnaHQuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNvZGVcIixcbiAgICB0aXRsZTogXCJDb2RlXCIsXG4gICAgY29tcG9uZW50OiBcIkNvZGVcIixcbiAgICBzdW1tYXJ5OiBcIk1vbm9zcGFjZSBjb2RlIOKAlCBpbmxpbmUgYnkgZGVmYXVsdCwgb3IgYSB3cmFwcGVkIGJsb2NrLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpbmxpbmVcIj5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIFJ1biA8Q29kZT5wb2xseSBnYWxsZXJ5PC9Db2RlPiB0byBvcGVuIHRoaXMgcGFnZS5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiYmxvY2tcIiB3aWRlPlxuICAgICAgICAgIDxDb2RlIGJsb2NrPnsnY29uc3QgZ2FsbGVyeSA9IHtcXG4gIHNlcnZlZDogXCJieSBwb2xseVwiLFxcbn07J308L0NvZGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibGlua1wiLFxuICAgIHRpdGxlOiBcIkxpbmtcIixcbiAgICBjb21wb25lbnQ6IFwiTGlua1wiLFxuICAgIHN1bW1hcnk6IFwiQW5jaG9yIHByaW1pdGl2ZSDigJQgdW5kZXJsaW5lIGJ5IGRlZmF1bHQsIHdpdGggZXh0ZXJuYWwsIHN1YnRsZSwgYW5kIGRvd25sb2FkIG1vZGVzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkZWZhdWx0XCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cIiNsaW5rXCI+SW4tcGFnZSBsaW5rPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImV4dGVybmFsIOKAlCBuZXcgdGFiLCByZWw9bm9vcGVuZXJcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiIGV4dGVybmFsPlxuICAgICAgICAgICAgRXh0ZXJuYWwgbGlua1xuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzdWJ0bGUg4oCUIHVuZGVybGluZSBvbiBob3ZlciBvbmx5XCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cIiNsaW5rXCIgc3VidGxlPlxuICAgICAgICAgICAgU3VidGxlIGxpbmtcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZG93bmxvYWRcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiZGF0YTp0ZXh0L3BsYWluLGdhbGxlcnlcIiBkb3dubG9hZD1cImdhbGxlcnkudHh0XCI+XG4gICAgICAgICAgICBEb3dubG9hZCBsaW5rXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInN1cmZhY2VcIixcbiAgICB0aXRsZTogXCJTdXJmYWNlXCIsXG4gICAgY29tcG9uZW50OiBcIlN1cmZhY2VcIixcbiAgICBzdW1tYXJ5OiBcIk93bnMgdmlzdWFsIGNocm9tZSDigJQgYmFja2dyb3VuZCwgYm9yZGVyLCByYWRpdXMsIHNoYWRvdywgcG9zaXRpb25pbmcuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICB7KFtcInBsYWluXCIsIFwicmFpc2VkXCIsIFwic3Vua2VuXCIsIFwiYnViYmxlXCIsIFwiY2hpcFwiLCBcImNhbGxvdXRcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8U3VyZmFjZSB2YXJpYW50PXt2fSBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbVwiPnt2fTwvVGV4dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ6IFwiZmxvYXRpbmdcIiAvIFwic3RpY2t5LWJhclwiIHBpbiB0byB0aGUgdmlld3BvcnQg4oCUIG9taXR0ZWQgaGVyZSc+XG4gICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBQb3NpdGlvbmFsIHZhcmlhbnRzIGFyZSBwcmV2aWV3ZWQgaW4gY29udGV4dCwgbm90IGluIGEgZ3JpZCBjZWxsLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgey8qIEVxdWFsIHNxdWFyZSBib3hlcy4gVGhlIGxhYmVsIHVzZWQgdG8gc2l6ZSBlYWNoIG9uZSwgc28gdGhlIGxhZGRlclxuICAgICAgICAgICAgd2FzIGNvbXBhcmVkIGFjcm9zcyBmaXZlIGRpZmZlcmVudCB3aWR0aHMgKDQ2LzM1LzM2LzI4LzM1IHB4KSBhbmRcbiAgICAgICAgICAgIGBmdWxsYCByZW5kZXJlZCBhcyBhIHN0YWRpdW0gdGFsbGVyIHRoYW4gaXQgd2FzIHdpZGUgcmF0aGVyIHRoYW4gYVxuICAgICAgICAgICAgY2lyY2xlLiBBIHNxdWFyZSBib3ggbWFrZXMgOTk5OXB4IHJlYWQgYXMgdGhlIGNpcmNsZSBpdCBpcy4gKi99XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwicmFkaXVzOiBub25lIC8gc20gLyBtZCAvIGxnIC8gZnVsbFwiPlxuICAgICAgICAgIHsoW1wibm9uZVwiLCBcInNtXCIsIFwibWRcIiwgXCJsZ1wiLCBcImZ1bGxcIl0gYXMgY29uc3QpLm1hcCgocikgPT4gKFxuICAgICAgICAgICAgPFN1cmZhY2VcbiAgICAgICAgICAgICAga2V5PXtyfVxuICAgICAgICAgICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgICAgICAgICAgYm9yZGVyPVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgIHJhZGl1cz17cn1cbiAgICAgICAgICAgICAgd2lkdGg9XCI1NnB4XCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiNTZweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMYXlvdXQgaGVpZ2h0PVwiMTAwJVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIiBqdXN0aWZ5SXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwieHNcIj57cn08L1RleHQ+XG4gICAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImJvcmRlcjogbm9uZSAvIGRlZmF1bHQgLyBzdHJvbmdcIj5cbiAgICAgICAgICB7KFtcIm5vbmVcIiwgXCJkZWZhdWx0XCIsIFwic3Ryb25nXCJdIGFzIGNvbnN0KS5tYXAoKGIpID0+IChcbiAgICAgICAgICAgIDxTdXJmYWNlIGtleT17Yn0gYm9yZGVyPXtifSByYWRpdXM9XCJtZFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCI+e2J9PC9UZXh0PlxuICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICB7LyogT24gdGhlIHN1bmtlbiBjYXJkIGV2ZXJ5IHNwZWNpbWVuIHNpdHMgb24sIGEgc29mdCBzaGFkb3cgbGFuZHMgZ3JleVxuICAgICAgICAgICAgb24gZ3JleSBhbmQgbm9uZSBvZiB0aGUgdGhyZWUgc3RlcHMgcmVhZC4gVGhleSBhcmUgY2FzdCBvbiBhIHBsYWluXG4gICAgICAgICAgICBzdXJmYWNlIGhlcmUsIGFuZCBlYWNoIGJveCBpcyBzcXVhcmUgYW5kIGVxdWFsIHNvIHRoZSBvbmx5IHRoaW5nXG4gICAgICAgICAgICB0aGF0IGRpZmZlcnMgYmV0d2VlbiB0aGVtIGlzIHRoZSBzaGFkb3cuICovfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNoYWRvdzogc20gLyBtZCAvIGxnXCI+XG4gICAgICAgICAgPFN1cmZhY2UgYmFja2dyb3VuZD1cInZhcigtLXBvbGx5LXN1cmZhY2UpXCIgcmFkaXVzPVwibWRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbGcpXCI+XG4gICAgICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14bClcIj5cbiAgICAgICAgICAgICAgeyhbXCJzbVwiLCBcIm1kXCIsIFwibGdcIl0gYXMgY29uc3QpLm1hcCgocykgPT4gKFxuICAgICAgICAgICAgICAgIDxTdXJmYWNlIGtleT17c30gdmFyaWFudD1cInJhaXNlZFwiIHNoYWRvdz17c30gcmFkaXVzPVwibWRcIiB3aWR0aD1cIjU2cHhcIiBoZWlnaHQ9XCI1NnB4XCI+XG4gICAgICAgICAgICAgICAgICA8TGF5b3V0IGhlaWdodD1cIjEwMCVcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCIganVzdGlmeUl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiPntzfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNhcmRcIixcbiAgICB0aXRsZTogXCJDYXJkXCIsXG4gICAgY29tcG9uZW50OiBcIkNhcmRcIixcbiAgICBzdW1tYXJ5OiBcIkNvbXBvdW5kIG9mIFN1cmZhY2VzIOKAlCBhIHJhaXNlZCBSb290IHdyYXBwaW5nIEhlYWRlciwgQm9keSwgYW5kIEZvb3RlciBzbG90cy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiQ2FyZC5Sb290ID4gSGVhZGVyIC8gQm9keSAvIEZvb3RlclwiIHdpZGU+XG4gICAgICAgIDxDYXJkLlJvb3QgcGFkZGluZz1cIjBcIj5cbiAgICAgICAgICA8Q2FyZC5IZWFkZXIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgPFRleHQgd2VpZ2h0PVwiYm9sZFwiPkNhcmQgaGVhZGVyPC9UZXh0PlxuICAgICAgICAgIDwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgPENhcmQuQm9keSBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgVGhlIGJvZHkgc2xvdCBjYXJyaWVzIHRoZSBtYWluIGNvbnRlbnQuIEVhY2ggc2xvdCBhY2NlcHRzIHRoZSBmdWxsIFN1cmZhY2VQcm9wcywgc28gaXRcbiAgICAgICAgICAgICAgY2FuIGJlIHJldGludGVkIG9yIHJlcGFkZGVkIHdpdGhvdXQgcmVhY2hpbmcgcGFzdCB0aGUgcHJpbWl0aXZlLlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvQ2FyZC5Cb2R5PlxuICAgICAgICAgIDxDYXJkLkZvb3RlciBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJGb290ZXIgYWN0aW9uXCIgLz5cbiAgICAgICAgICA8L0NhcmQuRm9vdGVyPlxuICAgICAgICA8L0NhcmQuUm9vdD5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInNrZWxldG9uXCIsXG4gICAgdGl0bGU6IFwiU2tlbGV0b25cIixcbiAgICBjb21wb25lbnQ6IFwiU2tlbGV0b25cIixcbiAgICBzdW1tYXJ5OiBcIlNoaW1tZXJpbmcgcGxhY2Vob2xkZXIgZm9yIGxvYWRpbmcgc3RhdGVzLiBBbmltYXRpb24gaG9ub3VycyByZWR1Y2VkLW1vdGlvbi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIHsoW1widGV4dFwiLCBcInJlY3RcIiwgXCJjaXJjbGVcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD17dn0gLz5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjdXN0b20gd2lkdGggKyBoZWlnaHRcIj5cbiAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cInJlY3RcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9ezY0fSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcIm91dHB1dFwiLFxuICAgIHRpdGxlOiBcIk91dHB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJPdXRwdXRcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJNb25vc3BhY2Ugb3V0cHV0IHJlZ2lvbiBmb3IgY29tbWFuZCByZXN1bHRzIG9yIGxvZ3Mg4oCUIHdyYXBzLCBvciBzY3JvbGxzIGhvcml6b250YWxseS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGVmYXVsdCDigJQgd3JhcHNcIiB3aWRlPlxuICAgICAgICAgIDxPdXRwdXQ+cG9sbHkgZ2FsbGVyeSDihpIgc2VydmluZyBhdCBodHRwOi8vbG9jYWxob3N0OjQzMjE8L091dHB1dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzY3JvbGwg4oCUIHNpbmdsZSBsb25nIGxpbmUgc2Nyb2xscyBpbnN0ZWFkIG9mIHdyYXBwaW5nXCIgd2lkZT5cbiAgICAgICAgICA8T3V0cHV0IHNjcm9sbD5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkIHBvbGx5IGdhbGxlcnkgLS1idWlsZCAuL2Rpc3QvZ2FsbGVyeSAgICMgb25lIGxvbmcgbGluZSB0aGF0IHNjcm9sbHMgaG9yaXpvbnRhbGx5IHJhdGhlciB0aGFuIHdyYXBwaW5nIG9udG8gdGhlIG5leHQgcm93XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L091dHB1dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJodG1sXCIsXG4gICAgdGl0bGU6IFwiSHRtbFwiLFxuICAgIGNvbXBvbmVudDogXCJIdG1sXCIsXG4gICAgc3VtbWFyeTogXCJSZW5kZXJzIGEgdHJ1c3RlZCBIVE1MIHN0cmluZy4gVGhlIGNhbGxlciBvd25zIHNhbml0aXNhdGlvbiDigJQgbmV2ZXIgcGFzcyB1c2VyIGlucHV0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJodG1sPXt0cnVzdGVkIHN0cmluZ31cIiB3aWRlPlxuICAgICAgICA8SHRtbCBodG1sPVwiPHN0cm9uZz5Cb2xkPC9zdHJvbmc+LCA8ZW0+aXRhbGljPC9lbT4sIGFuZCBhIDxjb2RlPmNvZGUgc3BhbjwvY29kZT4gZnJvbSBhIHRydXN0ZWQgbWFya3VwIHN0cmluZy5cIiAvPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY29sbGFwc2libGVcIixcbiAgICB0aXRsZTogXCJDb2xsYXBzaWJsZVwiLFxuICAgIGNvbXBvbmVudDogXCJDb2xsYXBzaWJsZVwiLFxuICAgIHN1bW1hcnk6IFwiTmF0aXZlIDxkZXRhaWxzPi88c3VtbWFyeT4gZGlzY2xvc3VyZSDigJQga2V5Ym9hcmQgYW5kIHNjcmVlbi1yZWFkZXIgYmVoYXZpb3VyIGZyZWUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNsb3NlZCBieSBkZWZhdWx0XCIgd2lkZT5cbiAgICAgICAgICA8Q29sbGFwc2libGUgc3VtbWFyeT1cIlNob3cgbW9yZSBkZXRhaWxcIj5cbiAgICAgICAgICAgIDxUZXh0PlRoaXMgY29udGVudCBpcyByZXZlYWxlZCB3aGVuIHRoZSBkaXNjbG9zdXJlIGlzIG9wZW5lZC48L1RleHQ+XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkZWZhdWx0T3BlblwiIHdpZGU+XG4gICAgICAgICAgPENvbGxhcHNpYmxlIHN1bW1hcnk9XCJPcGVuIGZyb20gdGhlIHN0YXJ0XCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICA8VGV4dD5UaGlzIGNvbGxhcHNpYmxlIHJlbmRlcnMgZXhwYW5kZWQgb24gZmlyc3QgcGFpbnQuPC9UZXh0PlxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZWRpdGFibGUgZmllbGQgaW4gdGhlIHN1bW1hcnkg4oCUIFNwYWNlL0VudGVyIG5vIGxvbmdlciBjb2xsYXBzZSBpdFwiIHdpZGU+XG4gICAgICAgICAgPENvbGxhcHNpYmxlXG4gICAgICAgICAgICBzdW1tYXJ5PXtcbiAgICAgICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZ2FsbGVyeS1jb2xsYXBzaWJsZS1zdW1tYXJ5XCIgcGxhY2Vob2xkZXI9XCJUeXBlIGEgc3BhY2UgaGVyZeKAplwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHQ+VGhlIGhlYWRlciBndWFyZCBjYW5jZWxzIHRoZSBkaXNjbG9zdXJlIHRvZ2dsZSBmb3IgdGV4dC1lbnRyeSBmaWVsZHMuPC9UZXh0PlxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibGF5b3V0XCIsXG4gICAgdGl0bGU6IFwiTGF5b3V0XCIsXG4gICAgY29tcG9uZW50OiBcIkxheW91dFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIlRoZSBncmlkIHByaW1pdGl2ZS4gUHJvcHMgbWFwIHRvIENTUyBjdXN0b20gcHJvcGVydGllcyDigJQgbm8gaGFuZC13cml0dGVuIGZsZXggb3IgZ3JpZC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdjb2x1bW5zPVwiMWZyIDFmciAxZnJcIicgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCIxZnIgMWZyIDFmclwiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nY29sdW1ucz1cImF1dG8gMWZyIGF1dG9cIicgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCJhdXRvIDFmciBhdXRvXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgPEJveD5hdXRvPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgICAgPEJveD5hdXRvPC9Cb3g+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic3RhY2tPbk1vYmlsZSDigJQgY29sbGFwc2VzIHRvIG9uZSBjb2x1bW4g4omkNjQwcHhcIiB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiBzdGFja09uTW9iaWxlPlxuICAgICAgICAgICAgPEJveD5TaWRlIGJ5IHNpZGUsIHRoZW4gc3RhY2tlZDwvQm94PlxuICAgICAgICAgICAgPEJveD5TaWRlIGJ5IHNpZGUsIHRoZW4gc3RhY2tlZDwvQm94PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNsdXN0ZXJcIixcbiAgICB0aXRsZTogXCJDbHVzdGVyXCIsXG4gICAgY29tcG9uZW50OiBcIkNsdXN0ZXJcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJXcmFwcGluZyByb3cgb2YgdmFyaWFibGUtd2lkdGggaXRlbXMg4oCUIGNoaXBzLCB0YWdzLCBidXR0b24gZ3JvdXBzLiBSZWZsb3dzIGFzIHNwYWNlIHJ1bnMgb3V0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJnYXAg4oCUIGl0ZW1zIHdyYXAgb250byBuZXcgcm93c1wiIHdpZGU+XG4gICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgIHtbXCJHcm9jZXJpZXNcIiwgXCJFcnJhbmRzXCIsIFwiSG9tZVwiLCBcIkdhcmRlblwiLCBcIkZpbmFuY2VcIiwgXCJUcmF2ZWxcIiwgXCJIZWFsdGhcIiwgXCJBZG1pblwiXS5tYXAoXG4gICAgICAgICAgICAodGFnKSA9PiAoXG4gICAgICAgICAgICAgIDxCYWRnZSBrZXk9e3RhZ30gdmFyaWFudD1cImluZm9cIj5cbiAgICAgICAgICAgICAgICB7dGFnfVxuICAgICAgICAgICAgICA8L0JhZGdlPlxuICAgICAgICAgICAgKVxuICAgICAgICAgICl9XG4gICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRhYnNcIixcbiAgICB0aXRsZTogXCJUYWJzXCIsXG4gICAgY29tcG9uZW50OiBcIlRhYnNcIixcbiAgICBzdW1tYXJ5OiBcIkhvcml6b250YWwgbmF2IHdpdGggYW4gYWN0aXZlLXRhYiBhY2NlbnQuIERpc3BhdGNoZXMgYW4gYWN0aW9uIHBlciB0YWIuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImludGVyYWN0aXZlIOKAlCBvbmUgdGFiIGRpc2FibGVkXCIgd2lkZT5cbiAgICAgICAgPFRhYnNcbiAgICAgICAgICB0YWJzPXtbXG4gICAgICAgICAgICB7IGlkOiBcIm92ZXJ2aWV3XCIsIGxhYmVsOiBcIk92ZXJ2aWV3XCIgfSxcbiAgICAgICAgICAgIHsgaWQ6IFwiYWN0aXZpdHlcIiwgbGFiZWw6IFwiQWN0aXZpdHlcIiB9LFxuICAgICAgICAgICAgeyBpZDogXCJzZXR0aW5nc1wiLCBsYWJlbDogXCJTZXR0aW5nc1wiIH0sXG4gICAgICAgICAgICB7IGlkOiBcImFyY2hpdmVkXCIsIGxhYmVsOiBcIkFyY2hpdmVkXCIsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgICBhY3RpdmVUYWI9eyRnYWxsZXJ5VGFiLnZhbHVlfVxuICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6c2V0LXRhYlwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkdhbGxlcnkgdGFic1wiXG4gICAgICAgIC8+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjaGVja2JveFwiLFxuICAgIHRpdGxlOiBcIkNoZWNrYm94XCIsXG4gICAgY29tcG9uZW50OiBcIkNoZWNrYm94XCIsXG4gICAgc3VtbWFyeTogXCJOYXRpdmUgY2hlY2tib3ggaW4gYSBsYWJlbC4gQSBwbGFpbiBib29sZWFuIGlzIGNvbnRyb2xsZWQ7IGEgU2lnbmFsIGJpbmRzIGl0c2VsZi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidW5jaGVja2VkXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiVW5jaGVja2VkXCIgY2hlY2tlZD17ZmFsc2V9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2hlY2tlZFwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIkNoZWNrZWRcIiBjaGVja2VkPXt0cnVlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiRGlzYWJsZWRcIiBjaGVja2VkPXt0cnVlfSBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNoZWNrZWQ9e3NpZ25hbH0g4oCUIGNsaWNrIHRvIHRvZ2dsZVwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIkJvdW5kIHRvIGEgc2lnbmFsXCIgY2hlY2tlZD17JGdhbGxlcnlDaGVja2VkfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRvZ2dsZVwiLFxuICAgIHRpdGxlOiBcIlRvZ2dsZVwiLFxuICAgIGNvbXBvbmVudDogXCJUb2dnbGVcIixcbiAgICBzdW1tYXJ5OiBcIlN3aXRjaC1yb2xlIGNoZWNrYm94LiBQYXNzaXZlIOKAlCB0aGUgY2FsbGVyIGRyaXZlcyB0aGUgY2hlY2tlZCBzdGF0ZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib2ZmXCI+XG4gICAgICAgICAgPFRvZ2dsZSBsYWJlbD1cIk9mZlwiIGNoZWNrZWQ9e2ZhbHNlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9uXCI+XG4gICAgICAgICAgPFRvZ2dsZSBsYWJlbD1cIk9uXCIgY2hlY2tlZD17dHJ1ZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxUb2dnbGUgbGFiZWw9XCJEaXNhYmxlZFwiIGNoZWNrZWQ9e3RydWV9IGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidGV4dC1pbnB1dFwiLFxuICAgIHRpdGxlOiBcIlRleHRJbnB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJUZXh0SW5wdXRcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJTaWduYWwtZnJpZW5kbHkgbmF0aXZlIGlucHV0LiBBIHBsYWluIHN0cmluZyBpcyB1bmNvbnRyb2xsZWQ7IGEgU2lnbmFsIGlzIGNvbnRyb2xsZWQuIFwiICtcbiAgICAgIFwiaW5wdXRUeXBlIHBpY2tzIHRoZSBuYXRpdmUga2V5Ym9hcmQgYW5kIHZhbGlkYXRpb247IGVycm9yIHJlbmRlcnMgYSBsaW5rZWQgbWVzc2FnZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwic2luZ2xlXCIgd2l0aCBwbGFjZWhvbGRlcic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1zaW5nbGVcIiBwbGFjZWhvbGRlcj1cIlR5cGUgaGVyZeKAplwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwibXVsdGlcIic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1tdWx0aVwiIHZhcmlhbnQ9XCJtdWx0aVwiIHJvd3M9ezN9IHBsYWNlaG9sZGVyPVwiTXVsdGlwbGUgbGluZXPigKZcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwiZW1haWxcIic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1lbWFpbFwiIGlucHV0VHlwZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJhZGFAZXhhbXBsZS5jb21cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwibnVtYmVyXCIgd2l0aCBtaW4vbWF4L3N0ZXAnPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tbnVtYmVyXCIgaW5wdXRUeXBlPVwibnVtYmVyXCIgbWluPXswfSBtYXg9ezEwfSBzdGVwPXsxfSB2YWx1ZT1cIjVcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImVycm9yIOKAlCBsaW5rZWQgbWVzc2FnZSwgbWFya3MgaW52YWxpZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tZXJyb3JcIiB2YWx1ZT1cIm5vdC1hbi1lbWFpbFwiIGVycm9yPVwiRW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLlwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaW52YWxpZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8taW52YWxpZFwiIHZhbHVlPVwibm90LWFuLWVtYWlsXCIgaW52YWxpZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1kaXNhYmxlZFwiIHZhbHVlPVwiRGlzYWJsZWRcIiBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInJlYWRPbmx5XCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1yZWFkb25seVwiIHZhbHVlPVwiUmVhZCBvbmx5XCIgcmVhZE9ubHkgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ2YWx1ZT17c2lnbmFsfSDigJQgY29udHJvbGxlZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tY29udHJvbGxlZFwiIHZhbHVlPXskZ2FsbGVyeVRleHR9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic2VsZWN0XCIsXG4gICAgdGl0bGU6IFwiU2VsZWN0XCIsXG4gICAgY29tcG9uZW50OiBcIlNlbGVjdFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkRyb3Bkb3duIG9mIG9wdGlvbnMgYm91bmQgdG8gYSBTaWduYWw8U2V0Pi4gU2luZ2xlIHJlcGxhY2VzLCBtdWx0aSB0b2dnbGVzLiBcIiArXG4gICAgICAnY2xlYXJhYmxlIHByZXBlbmRzIGFuIFwiQW55IOKAplwiIHJvdyBzbyBhbiBvcHRpb25hbCBmaWx0ZXIgaGFzIGEgcGF0aCBiYWNrIHRvIHVuc2V0LicsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpbmdsZS1zZWxlY3RcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlBpY2sgb25lXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJjb21ldFwiLCBsYWJlbDogXCJDb21ldFwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibmVidWxhXCIsIGxhYmVsOiBcIk5lYnVsYVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwicXVhc2FyXCIsIGxhYmVsOiBcIlF1YXNhclwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0U2luZ2xlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2xlYXJhYmxlIOKAlCBzaW5nbGUtc2VsZWN0IHdpdGggYW4g4oCcQW55IOKApuKAnSByb3dcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRlciBieVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFueSBvYmplY3RcIlxuICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiY29tZXRcIiwgbGFiZWw6IFwiQ29tZXRcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm5lYnVsYVwiLCBsYWJlbDogXCJOZWJ1bGFcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcInF1YXNhclwiLCBsYWJlbDogXCJRdWFzYXJcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdENsZWFyYWJsZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm11bHRpU2VsZWN0XCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQaWNrIHNldmVyYWxcIlxuICAgICAgICAgICAgbXVsdGlTZWxlY3RcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJjb21ldFwiLCBsYWJlbDogXCJDb21ldFwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibmVidWxhXCIsIGxhYmVsOiBcIk5lYnVsYVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwicXVhc2FyXCIsIGxhYmVsOiBcIlF1YXNhclwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0TXVsdGl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJmaWxlLWlucHV0XCIsXG4gICAgdGl0bGU6IFwiRmlsZUlucHV0XCIsXG4gICAgY29tcG9uZW50OiBcIkZpbGVJbnB1dFwiLFxuICAgIHN1bW1hcnk6IFwiU3R5bGVkIHdyYXBwZXIgb3ZlciBhIG5hdGl2ZSBmaWxlIHBpY2tlci4gSGFuZHMgdGhlIGNob3NlbiBGaWxlTGlzdCB0byBvbkZpbGVzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvbkZpbGVzIOKAlCBwaWNrIGEgZmlsZVwiPlxuICAgICAgICAgIDxGaWxlSW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQ2hvb3NlIGZpbGVcIlxuICAgICAgICAgICAgb25GaWxlcz17KGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICRnYWxsZXJ5RmlsZU5hbWUudmFsdWUgPSBmaWxlc1swXT8ubmFtZSA/PyBcIuKAlFwiO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImFjY2VwdCArIG11bHRpcGxlXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJDaG9vc2UgaW1hZ2VzXCJcbiAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgIG9uRmlsZXM9eyhmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAkZ2FsbGVyeUZpbGVOYW1lLnZhbHVlID0gZmlsZXNbMF0/Lm5hbWUgPz8gXCLigJRcIjtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxGaWxlSW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiRGlzYWJsZWRcIlxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgIG9uRmlsZXM9eygpID0+IHtcbiAgICAgICAgICAgICAgLyogZGlzYWJsZWQg4oCUIG5ldmVyIGludm9rZWQgKi9cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsYXN0IHBpY2tlZCBmaWxlXCIgd2lkZT5cbiAgICAgICAgICA8VGV4dCB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgIExhc3QgcGlja2VkOiA8Q29kZT57JGdhbGxlcnlGaWxlTmFtZS52YWx1ZX08L0NvZGU+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImRyb3Bkb3duXCIsXG4gICAgdGl0bGU6IFwiRHJvcGRvd25cIixcbiAgICBjb21wb25lbnQ6IFwiRHJvcGRvd25cIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJMb3ctbGV2ZWwgdHJpZ2dlciArIHBvcG92ZXIgcGx1bWJpbmcuIFRoZSBwcmltaXRpdmUgaXRzZWxmIGhhcyBubyBjaHJvbWUg4oCUIFwiICtcbiAgICAgIFwiY29uc3VtZXJzIChTZWxlY3QsIEFjdGlvblNlbGVjdCkgd3JhcCBpdCB3aXRoIHRoZSBzdHlsZWQgdHJpZ2dlciBhbmQgY2FyZXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInRyaWdnZXIgZHJlc3NlZCB2aWEgdHJpZ2dlckNsYXNzTmFtZSArIGRhdGEtb3BlblwiPlxuICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICBpc09wZW49eyRnYWxsZXJ5RHJvcGRvd25PcGVufVxuICAgICAgICAgIHRyaWdnZXJDbGFzc05hbWU9XCJnYWxsZXJ5LWRyb3Bkb3duLXRyaWdnZXJcIlxuICAgICAgICAgIHRyaWdnZXI9e1xuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPHNwYW4+T3BlbiBtZW51PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdhbGxlcnktZHJvcGRvd24tY2FyZXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAgICA8VGV4dD5GaXJzdCBpdGVtPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+U2Vjb25kIGl0ZW08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD5UaGlyZCBpdGVtPC9UZXh0PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L0Ryb3Bkb3duPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYWN0aW9uLWlucHV0XCIsXG4gICAgdGl0bGU6IFwiQWN0aW9uSW5wdXRcIixcbiAgICBjb21wb25lbnQ6IFwiQWN0aW9uSW5wdXRcIixcbiAgICBzdW1tYXJ5OiBcIkR1YWwtbW9kZSB2aWV3L2VkaXQgZmllbGQuIENsaWNrIHRvIGVkaXQ7IGNvbW1pdCBkaXNwYXRjaGVzIGFuIGFjdGlvbi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdzYXZlT249XCJibHVyXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCJDbGljayB0byBlZGl0LCBjb21taXRzIG9uIGJsdXJcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJCbHVyLWNvbW1pdCBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nc2F2ZU9uPVwiZW50ZXJcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkVkaXQgYW5kIHByZXNzIEVudGVyXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHNhdmVPbj1cImVudGVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIkVudGVyLWNvbW1pdCBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwiZGF0ZVwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiMjAyNi0wNS0yMlwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBpbnB1dFR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgIHNhdmVPbj1cImJsdXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiRGF0ZSBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudD1cIm11bHRpXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCJBIGxvbmdlciwgbXVsdGktbGluZSB2YWx1ZVwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICB2YXJpYW50PVwibXVsdGlcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJNdWx0aS1saW5lIGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibGFzdCBjb21taXR0ZWQgdmFsdWVcIiB3aWRlPlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgTGFzdCBjb21taXR0ZWQ6IDxDb2RlPnskZ2FsbGVyeUNvbW1pdHRlZC52YWx1ZX08L0NvZGU+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImFjdGlvbi1zZWxlY3RcIixcbiAgICB0aXRsZTogXCJBY3Rpb25TZWxlY3RcIixcbiAgICBjb21wb25lbnQ6IFwiQWN0aW9uU2VsZWN0XCIsXG4gICAgc3VtbWFyeTogXCJTaW5nbGUtc2VsZWN0IHRoYXQgY29tbWl0cyBhIHBsYWluIHN0cmluZyB2YWx1ZSB0aHJvdWdoIHRoZSBhY3Rpb24gc3lzdGVtLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb21taXRzIHZpYSBhY3Rpb25cIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlByaW9yaXR5XCJcbiAgICAgICAgICAgIHZhbHVlPVwibWVkaXVtXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJsb3dcIiwgbGFiZWw6IFwiTG93XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJtZWRpdW1cIiwgbGFiZWw6IFwiTWVkaXVtXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJoaWdoXCIsIGxhYmVsOiBcIkhpZ2hcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkIOKAlCByZW5kZXJzIGFzIHN0YXRpYyB0ZXh0XCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQcmlvcml0eVwiXG4gICAgICAgICAgICB2YWx1ZT1cImhpZ2hcIlxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImxvd1wiLCBsYWJlbDogXCJMb3dcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm1lZGl1bVwiLCBsYWJlbDogXCJNZWRpdW1cIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcImhpZ2hcIiwgbGFiZWw6IFwiSGlnaFwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImFjdGlvbi1mb3JtXCIsXG4gICAgdGl0bGU6IFwiQWN0aW9uRm9ybVwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25Gb3JtXCIsXG4gICAgc3VtbWFyeTogXCJXcmFwcyBhIG5hdGl2ZSBmb3JtIHdpdGggdGhlIGFjdGlvbiBwYXR0ZXJuIOKAlCBzdWJtaXQgZGlzcGF0Y2hlcyB0aGUgZm9ybSBoYW5kbGVyLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJmb3JtIHdpdGggVGV4dElucHV0IGZpZWxkcyArIGEgc3VibWl0IEJ1dHRvblwiIHdpZGU+XG4gICAgICAgIDxBY3Rpb25Gb3JtIGZvcm09e2dhbGxlcnlGb3JtfSBhcmlhLWxhYmVsPVwiR2FsbGVyeSBkZW1vIGZvcm1cIj5cbiAgICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgICAgPFRleHQgYXM9XCJsYWJlbFwiIHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiIGh0bWxGb3I9XCJnYWxsZXJ5LWZvcm0tbmFtZVwiPlxuICAgICAgICAgICAgICBGdWxsIG5hbWVcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgaWQ9XCJnYWxsZXJ5LWZvcm0tbmFtZVwiIG5hbWU9XCJmdWxsTmFtZVwiIHBsYWNlaG9sZGVyPVwiQWRhIExvdmVsYWNlXCIgLz5cbiAgICAgICAgICAgIDxUZXh0IGFzPVwibGFiZWxcIiBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIiBodG1sRm9yPVwiZ2FsbGVyeS1mb3JtLWVtYWlsXCI+XG4gICAgICAgICAgICAgIEVtYWlsXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dElucHV0IGlkPVwiZ2FsbGVyeS1mb3JtLWVtYWlsXCIgbmFtZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJhZGFAZXhhbXBsZS5jb21cIiAvPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgdGllcj1cInByaW1hcnlcIiBjb2xvcj1cImluZm9cIiBsYWJlbD1cIlN1Ym1pdFwiIC8+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvQWN0aW9uRm9ybT5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcIm1vZGFsXCIsXG4gICAgdGl0bGU6IFwiTW9kYWxcIixcbiAgICBjb21wb25lbnQ6IFwiTW9kYWxcIixcbiAgICBzdW1tYXJ5OiBcIkNvbXBvdW5kIGRpYWxvZyDigJQgZm9jdXMgdHJhcCwgRXNjYXBlIGhhbmRsaW5nLCBwb3J0YWwsIHNjcm9sbCBsb2NrLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvcGVucyBhIHBvcnRhbGxlZCBkaWFsb2dcIj5cbiAgICAgICAgPEJ1dHRvbiB0aWVyPVwicHJpbWFyeVwiIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTptb2RhbC1vcGVuXCIgbGFiZWw9XCJPcGVuIG1vZGFsXCIgLz5cbiAgICAgICAgPE1vZGFsLlJvb3RcbiAgICAgICAgICB3aGVuPXskZ2FsbGVyeU1vZGFsT3Blbn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIH19XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbW8gbW9kYWxcIlxuICAgICAgICA+XG4gICAgICAgICAgPE1vZGFsLkJhY2tkcm9wIC8+XG4gICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICA8TW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgICA8TW9kYWwuVGl0bGU+TW9kYWwgdGl0bGU8L01vZGFsLlRpdGxlPlxuICAgICAgICAgICAgPC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgICAgICA8TW9kYWwuQm9keT5cbiAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgRm9jdXMgaXMgdHJhcHBlZCBpbnNpZGUgdGhlIGRpYWxvZywgRXNjYXBlIGNsb3NlcyBpdCwgdGhlIGJhY2tkcm9wIGNsaWNrIGNsb3NlcyBpdCxcbiAgICAgICAgICAgICAgICBhbmQgdGhlIGJvZHkgc2Nyb2xsIGlzIGxvY2tlZCB3aGlsZSBpdCBpcyBvcGVuLlxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L01vZGFsLkJvZHk+XG4gICAgICAgICAgICA8TW9kYWwuRm9vdGVyPlxuICAgICAgICAgICAgICA8TW9kYWwuQ2xvc2U+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiRG9uZVwiIC8+XG4gICAgICAgICAgICAgIDwvTW9kYWwuQ2xvc2U+XG4gICAgICAgICAgICA8L01vZGFsLkZvb3Rlcj5cbiAgICAgICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgICAgIDwvTW9kYWwuUm9vdD5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNvbmZpcm0tZGlhbG9nXCIsXG4gICAgdGl0bGU6IFwiQ29uZmlybURpYWxvZ1wiLFxuICAgIGNvbXBvbmVudDogXCJDb25maXJtRGlhbG9nXCIsXG4gICAgc3VtbWFyeTogXCJQcm9taXNlLXJldHVybmluZyBjb25maXJtYXRpb24uIGNvbmZpcm0oKSByZXNvbHZlcyB0cnVlIG9yIGZhbHNlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb25maXJtKCkg4oCUIHN0YW5kYXJkXCI+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwic2Vjb25kYXJ5XCIgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OmNvbmZpcm1cIiBsYWJlbD1cIkNvbmZpcm0gYW4gYWN0aW9uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb25maXJtKHsgZGFuZ2VyOiB0cnVlIH0pXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6Y29uZmlybVwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1kYW5nZXI9XCJ0cnVlXCJcbiAgICAgICAgICAgIGxhYmVsPVwiQ29uZmlybSBhIGRlbGV0aW9uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRvYXN0XCIsXG4gICAgdGl0bGU6IFwiVG9hc3RcIixcbiAgICBjb21wb25lbnQ6IFwiVG9hc3RcIixcbiAgICBzdW1tYXJ5OiBcIlJlbmRlcnMgdGhlIGdsb2JhbCBlcnJvclN0YXRlIHNpZ25hbC4gU2V2ZXJpdHkgc2V0cyB0aGUgYXJpYS1saXZlIHBvbGl0ZW5lc3MuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInB1c2ggYSB0b2FzdCBhdCBlYWNoIHNldmVyaXR5XCIgd2lkZT5cbiAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImluZm9cIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnRvYXN0XCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLXNldmVyaXR5PVwiaW5mb1wiXG4gICAgICAgICAgICBsYWJlbD1cIkluZm8gdG9hc3RcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cIndhcm5pbmdcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnRvYXN0XCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLXNldmVyaXR5PVwid2FybmluZ1wiXG4gICAgICAgICAgICBsYWJlbD1cIldhcm5pbmcgdG9hc3RcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6dG9hc3RcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tc2V2ZXJpdHk9XCJlcnJvclwiXG4gICAgICAgICAgICBsYWJlbD1cIkVycm9yIHRvYXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJvdmVybGF5LXJvb3RcIixcbiAgICB0aXRsZTogXCJPdmVybGF5Um9vdFwiLFxuICAgIGNvbXBvbmVudDogXCJPdmVybGF5Um9vdFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkluZnJhc3RydWN0dXJlLCBub3QgYSB2aXN1YWwgY29udHJvbC4gTW91bnQgaXQgb25jZSBuZWFyIHRoZSBhcHAgcm9vdDsgTW9kYWwsIFRvYXN0LCBhbmQgXCIgK1xuICAgICAgXCJDb25maXJtRGlhbG9nIHBvcnRhbCBpbnRvIGl0LiBUaGUgZ2FsbGVyeSBzaGVsbCBhbHJlYWR5IG1vdW50cyBvbmUg4oCUIHRoaXMgc2VjdGlvbiBkb2N1bWVudHMgaXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm1vdW50ZWQgb25jZSBhdCB0aGUgYXBwIHJvb3RcIiB3aWRlPlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICA8Q29kZT57XCI8T3ZlcmxheVJvb3QgLz5cIn08L0NvZGU+IHJlbmRlcnMgdGhlIHBvcnRhbCB0YXJnZXQgdGhlIG92ZXJsYXkgcHJpbWl0aXZlcyBuZWVkLlxuICAgICAgICAgIFdpdGhvdXQgaXQsIHRoZSBNb2RhbCAvIFRvYXN0IC8gQ29uZmlybURpYWxvZyBzcGVjaW1lbnMgYWJvdmUgd291bGQgaGF2ZSBub3doZXJlIHRvXG4gICAgICAgICAgcmVuZGVyLiBJdCBkcmF3cyBub3RoaW5nIGl0c2VsZjsgdGhlIGdhbGxlcnkgc2hlbGwgbW91bnRzIHRoZSBzaW5nbGUgbGl2ZSBpbnN0YW5jZS5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuXTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgZ2FsbGVyeSBhcHAgcm9vdCDigJQgYSBzaW5nbGUgc2Nyb2xsYWJsZSBwYWdlIGNhdGFsb2d1aW5nIGV2ZXJ5IHBvbGx5LXVpXG4gKiBwcmltaXRpdmUgaW4gaXRzIGNvbmZpZ3VyYXRpb25zLiBBbiBpbi1wYWdlIG5hdiBqdW1wcyBiZXR3ZWVuIHNlY3Rpb25zOyBhXG4gKiB0aGVtZSB0b2dnbGUgZm9yY2VzIGxpZ2h0L2Rhcmsgb24gdGhlIHBhbmVsIHN1YnRyZWUgdmlhIGBkYXRhLXBvbGx5LXRoZW1lYFxuICogc28gYm90aCBwYWxldHRlcyBjYW4gYmUgaW5zcGVjdGVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIE9TIHNldHRpbmcuXG4gKlxuICogVGhlIG92ZXJsYXkgaG9zdHMgKE92ZXJsYXlSb290IC8gVG9hc3QuVmlld3BvcnQgLyBDb25maXJtRGlhbG9nLkhvc3QpIGFyZVxuICogbW91bnRlZCBoZXJlIG9uY2UsIHNvIHRoZSBNb2RhbCwgVG9hc3QsIGFuZCBDb25maXJtRGlhbG9nIHNwZWNpbWVucyBoYXZlIGFcbiAqIHBvcnRhbCB0YXJnZXQg4oCUIHRoZSBzYW1lIHdpcmluZyBhIHJlYWwgY29uc3VtZXIgYXBwIGRvZXMgYXQgaXRzIHJvb3QuXG4gKi9cblxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDbHVzdGVyLFxuICBDb25maXJtRGlhbG9nLFxuICBMYXlvdXQsXG4gIE92ZXJsYXlSb290LFxuICBTdXJmYWNlLFxuICBUZXh0LFxuICBUb2FzdCxcbn0gZnJvbSBcIi4uLy4uLy4uL3NyYy9wb2xseS11aVwiO1xuaW1wb3J0IHsgVEhFTUVTIH0gZnJvbSBcIi4vYWN0aW9ucy50c1wiO1xuaW1wb3J0IHsgR0FMTEVSWV9TRUNUSU9OUywgdHlwZSBHYWxsZXJ5U2VjdGlvbiB9IGZyb20gXCIuL3NwZWNpbWVucy50c3hcIjtcbmltcG9ydCB7ICRnYWxsZXJ5VGhlbWUgfSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcblxuLyoqIEEgY2FwaXRhbGlzZWQgbGFiZWwgZm9yIGEgdGhlbWUgb3B0aW9uLiAqL1xuZnVuY3Rpb24gdGhlbWVMYWJlbCh0aGVtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRoZW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhlbWUuc2xpY2UoMSk7XG59XG5cbi8qKiBPbmUgY2F0YWxvZ3VlZCBjb21wb25lbnQ6IGEgbGFiZWxsZWQgbGFuZG1hcmsgd2l0aCBhIGdyaWQgb2Ygc3BlY2ltZW5zLiAqL1xuZnVuY3Rpb24gU2VjdGlvbihwcm9wczogeyBzZWN0aW9uOiBHYWxsZXJ5U2VjdGlvbiB9KSB7XG4gIGNvbnN0IHsgc2VjdGlvbiB9ID0gcHJvcHM7XG4gIGNvbnN0IGhlYWRpbmdJZCA9IGAke3NlY3Rpb24uaWR9LWhlYWRpbmdgO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICBhcz1cInNlY3Rpb25cIlxuICAgICAgaWQ9e3NlY3Rpb24uaWR9XG4gICAgICB2YXJpYW50PVwicGxhaW5cIlxuICAgICAgY2xhc3NOYW1lPVwiZ2FsbGVyeS1zZWN0aW9uXCJcbiAgICAgIGFyaWEtbGFiZWxsZWRieT17aGVhZGluZ0lkfVxuICAgID5cbiAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgIDxoMiBpZD17aGVhZGluZ0lkfSBjbGFzcz1cImdhbGxlcnktc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgIHtzZWN0aW9uLnRpdGxlfVxuICAgICAgICA8L2gyPlxuICAgICAgICA8VGV4dCBhcz1cInBcIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICB7c2VjdGlvbi5zdW1tYXJ5fVxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxMYXlvdXRcbiAgICAgICAgICBjb2x1bW5zPVwicmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KG1pbigxMDAlLCAxNHJlbSksIDFmcikpXCJcbiAgICAgICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIlxuICAgICAgICA+XG4gICAgICAgICAge3NlY3Rpb24ucmVuZGVyKCl9XG4gICAgICAgIDwvTGF5b3V0PlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR2FsbGVyeUFwcCgpIHtcbiAgY29uc3QgdGhlbWUgPSAkZ2FsbGVyeVRoZW1lLnZhbHVlO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgIHBhZGRpbmc9XCJjbGFtcCh2YXIoLS1wb2xseS1zcGFjZS1zbSksIDN2dywgdmFyKC0tcG9sbHktc3BhY2UteGwpKVwiXG4gICAgICBkYXRhLWdhbGxlcnktcGFuZWw9XCJ0cnVlXCJcbiAgICAgIGRhdGEtcG9sbHktdGhlbWU9e3RoZW1lID09PSBcInN5c3RlbVwiID8gdW5kZWZpbmVkIDogdGhlbWV9XG4gICAgPlxuICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIj5cbiAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJnYWxsZXJ5LXRpdGxlXCI+UG9sbHkgVUkgZ2FsbGVyeTwvaDE+XG4gICAgICAgICAgPFRleHQgYXM9XCJwXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBFdmVyeSA8VGV4dCB3ZWlnaHQ9XCJtZWRpdW1cIj5AZmFpcmZveC9wb2xseS91aTwvVGV4dD4gcHJpbWl0aXZlLCBpbiBpdHMgY29uZmlndXJhdGlvbnMg4oCUXG4gICAgICAgICAgICBhIHJlZmVyZW5jZSBmb3IgYnVpbGRpbmcgcG9sbHkgYXBwcywgYW5kIGEgc2luZ2xlIHN1cmZhY2UgZm9yIGFjY2Vzc2liaWxpdHkgYW5kXG4gICAgICAgICAgICB2aXN1YWwtcmVncmVzc2lvbiBjaGVja3MuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0xheW91dD5cblxuICAgICAgICA8U3VyZmFjZSB2YXJpYW50PVwiY2FsbG91dFwiIHJhZGl1cz1cIm1kXCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8VGV4dCBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgICAgVGhlbWVcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIHtUSEVNRVMubWFwKCh0KSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3R9XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICB0aWVyPXt0ID09PSB0aGVtZSA/IFwicHJpbWFyeVwiIDogXCJ0ZXJ0aWFyeVwifVxuICAgICAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTpzZXQtdGhlbWVcIlxuICAgICAgICAgICAgICAgIGRhdGEtYWN0aW9uLXRoZW1lPXt0fVxuICAgICAgICAgICAgICAgIGxhYmVsPXt0aGVtZUxhYmVsKHQpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICA8L1N1cmZhY2U+XG5cbiAgICAgICAgPG5hdiBhcmlhLWxhYmVsPVwiQ29tcG9uZW50c1wiPlxuICAgICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAge0dBTExFUllfU0VDVElPTlMubWFwKChzZWN0aW9uKSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3NlY3Rpb24uaWR9XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICB0aWVyPVwidGVydGlhcnlcIlxuICAgICAgICAgICAgICAgIGhyZWY9e2AjJHtzZWN0aW9uLmlkfWB9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3NlY3Rpb24udGl0bGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgIDwvbmF2PlxuXG4gICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteGwpXCI+XG4gICAgICAgICAge0dBTExFUllfU0VDVElPTlMubWFwKChzZWN0aW9uKSA9PiAoXG4gICAgICAgICAgICA8U2VjdGlvbiBrZXk9e3NlY3Rpb24uaWR9IHNlY3Rpb249e3NlY3Rpb259IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvTGF5b3V0PlxuICAgICAgPC9MYXlvdXQ+XG5cbiAgICAgIHsvKiBNb3VudGVkIG9uY2Ugc28gdGhlIG92ZXJsYXkgc3BlY2ltZW5zIGhhdmUgYSBwb3J0YWwgdGFyZ2V0LiAqL31cbiAgICAgIDxPdmVybGF5Um9vdCAvPlxuICAgICAgPFRvYXN0LlZpZXdwb3J0IC8+XG4gICAgICA8Q29uZmlybURpYWxvZy5Ib3N0IC8+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRoZSBnYWxsZXJ5J3MgYnJvd3NlciBlbnRyeSBwb2ludC4gQnVuZGxlZCBieSBzZXJ2ZXIudHMgKG9uZSBCdW4uYnVpbGQgcGFzcylcbiAqIOKAlCBpdHMgdHJhbnNpdGl2ZSBgLm1vZHVsZS5jc3NgIGltcG9ydHMgcGx1cyB0aGUgZ2xvYmFsIHN0eWxlc2hlZXRzIGJlbG93IGNvbWVcbiAqIG91dCBhcyBhIHNpbmdsZSBDU1MgYXJ0aWZhY3QgdGhlIHNlcnZlciBzZXJ2ZXMgYWxvbmdzaWRlIHRoaXMgc2NyaXB0LlxuICpcbiAqIEJvb3QgbWlycm9ycyBhIHJlYWwgY29uc3VtZXIgYXBwOiBiaW5kIHRoZSBkZW1vIGZvcm0sIGluc3RhbGwgdGhlIGRvY3VtZW50XG4gKiBldmVudCBkZWxlZ2F0aW9uIHRoYXQgcm91dGVzIGBkYXRhLWFjdGlvbmAgY2xpY2tzL3N1Ym1pdHMgaW50byB0aGUgZ2FsbGVyeSdzXG4gKiBhY3Rpb24gcmVnaXN0cnksIHRoZW4gcmVuZGVyLiBUaGUgb3ZlcmxheSBob3N0cyBsaXZlIGluc2lkZSA8R2FsbGVyeUFwcCAvPi5cbiAqL1xuXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyBHQUxMRVJZX0FDVElPTlMgfSBmcm9tIFwiLi9hY3Rpb25zLnRzXCI7XG5pbXBvcnQgeyBHYWxsZXJ5QXBwIH0gZnJvbSBcIi4vZ2FsbGVyeS1hcHAudHN4XCI7XG5pbXBvcnQgeyB0eXBlIEdhbGxlcnlTdG9yZXMsIGdhbGxlcnlGb3JtIH0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zcmMvcG9sbHktdWkvdGhlbWUuY3NzXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zcmMvcG9sbHktdWkvc3R5bGVzLmNzc1wiO1xuaW1wb3J0IFwiLi9nYWxsZXJ5LmNzc1wiO1xuXG5jb25zdCBzdG9yZXM6IEdhbGxlcnlTdG9yZXMgPSB7fTtcbmdhbGxlcnlGb3JtLmJpbmRTdG9yZXMoKCkgPT4gc3RvcmVzKTtcblxuaW5zdGFsbEV2ZW50RGVsZWdhdGlvbihhc3luYyAoZGlzcGF0Y2gpID0+IHtcbiAgY29uc3QgaGFuZGxlciA9IEdBTExFUllfQUNUSU9OU1tkaXNwYXRjaC5hY3Rpb25dO1xuICBpZiAoaGFuZGxlcikge1xuICAgIGF3YWl0IGhhbmRsZXIoe1xuICAgICAgc3RvcmVzLFxuICAgICAgZXZlbnQ6IGRpc3BhdGNoLmV2ZW50LFxuICAgICAgZWxlbWVudDogZGlzcGF0Y2guZWxlbWVudCxcbiAgICAgIGRhdGE6IGRpc3BhdGNoLmRhdGEsXG4gICAgfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBcIikgPz8gZG9jdW1lbnQuYm9keTtcbnJlbmRlcig8R2FsbGVyeUFwcCAvPiwgcm9vdCk7XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsSUFBSTtBQUFKLElBQU07QUFBTixJQUFRO0FBQVIsSUFBVTtBQUFWLElBQVk7QUFBWixJQUFjO0FBQWQsSUFBZ0I7QUFBaEIsSUFBa0I7QUFBbEIsSUFBb0I7QUFBcEIsSUFBc0I7QUFBdEIsSUFBd0I7QUFBeEIsSUFBMEI7QUFBMUIsSUFBNEI7QUFBNUIsSUFBOEI7QUFBOUIsSUFBZ0M7QUFBaEMsSUFBa0M7QUFBbEMsSUFBb0MsSUFBRSxDQUFDO0FBQXZDLElBQXlDLElBQUUsQ0FBQztBQUE1QyxJQUE4QyxJQUFFO0FBQWhELElBQW9ILElBQUUsTUFBTTtBQUFRLFNBQVMsQ0FBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsU0FBUSxLQUFLO0FBQUEsSUFBRSxFQUFFLEtBQUcsRUFBRTtBQUFBLEVBQUcsT0FBTztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsS0FBRyxFQUFFLGNBQVksRUFBRSxXQUFXLFlBQVksQ0FBQztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFF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QUssRUFBRTtBQUFBLEtBQUksR0FBRSxFQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUU7QUFBQSxHQUFFLENBQUMsRUFBRSxRQUFNLEVBQUUsTUFBSSxTQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUcsQ0FBQyxFQUFFLFNBQU8sS0FBRyxFQUFFLHdCQUFzQixJQUFFLEVBQUUsc0JBQW9CLEdBQUcsQ0FBQztBQUFBO0FBQUUsU0FBUyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUc7QUFBQSxJQUFDLFNBQVEsR0FBRSxJQUFFLEVBQUUsRUFBRTtBQUFBLE1BQVEsRUFBRSxTQUFPLEtBQUcsRUFBRSxLQUFLLENBQUMsR0FBRSxJQUFFLEVBQUUsTUFBTSxHQUFFLElBQUUsRUFBRSxRQUFPLEVBQUUsQ0FBQztBQUFBLFlBQUU7QUFBQSxJQUFRLEVBQUUsU0FBTyxFQUFFLE1BQUk7QUFBQTtBQUFBO0FBQUcsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsSUFBRSxLQUFHLEVBQUUsT0FBSyxHQUFFLElBQUUsRUFBRTtBQUFBLEVBQU8sS0FBSSxJQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLElBQUUsR0FBRTtBQUFBLEtBQVcsSUFBRSxFQUFFLElBQUksT0FBZixTQUFxQixJQUFNLEVBQUUsT0FBTixNQUFXLEVBQUUsRUFBRSxRQUFNLEdBQUUsRUFBRSxNQUFJLEdBQUUsSUFBRSxFQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsS0FBSSxFQUFFLE9BQUssRUFBRSxPQUFLLEVBQUUsUUFBTSxFQUFFLE9BQUssRUFBRSxFQUFFLEtBQUksTUFBSyxDQUFDLEdBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSSxFQUFFLE9B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QUEsUUFBTztBQUFBLFlBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxNQUFJLEVBQUUsS0FBSSxFQUFFLFFBQU0sRUFBRSxDQUFDO0FBQUEsUUFBRSxFQUFFLElBQUksR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFBLElBQU87QUFBQSxNQUFNLEtBQU4sUUFBUyxFQUFFLE9BQUssRUFBRSxPQUFLLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxNQUFJLEVBQUUsT0FBSyxJQUFFLEVBQUUsTUFBSSxFQUFFLEVBQUUsS0FBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxFQUFFLFFBQU8sSUFBRSxFQUFFLFdBQVMsRUFBRSxDQUFDLEdBQUUsTUFBSSxFQUFFLE1BQVMsWUFBRTtBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBSSxFQUFFLFFBQU0sRUFBRSxJQUFJLE1BQUksT0FBSSxFQUFFLE9BQUssRUFBRSxJQUFJLEtBQUssQ0FBQztBQUFBO0FBQUcsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLElBQUUsRUFBRSxRQUFPO0FBQUEsSUFBSSxFQUFFLEVBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRyxFQUFFLEVBQUUsRUFBRTtBQUFBLEVBQUUsRUFBRSxPQUFLLEVBQUUsSUFBSSxHQUFFLENBQUMsR0FBRSxFQUFFLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUc7QUFBQSxNQUFDLElBQUUsRUFBRSxLQUFJLEVBQUUsTUFBSSxDQUFDLEdBQUUsRUFBRSxLQUFLLFFBQVEsQ0FBQyxHQUFFO0FBQUEsUUFBQyxFQUFFLEtBQUssQ0FBQztBQUFBLE9BQUU7QUFBQSxNQUFFLE9BQU0sR0FBRTtBQUFBLE1BQUMsRUFBRSxJQUFJLEdBQUUsRUFBRSxHQUFHO0FBQUE7QUFBQSxHQUFHO0FBQUE7QUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxPQUFnQixPQUFPLEtBQWpCLFlBQTBC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QUs7QUFBQSxJQUFDLElBQUksSUFBRSxRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxNQUFDLElBQUcsQ0FBQyxFQUFFLElBQUk7QUFBQSxRQUFJLE9BQU07QUFBQSxNQUFHLElBQUksSUFBRSxFQUFFLElBQUksSUFBSSxHQUFHLE9BQU8sUUFBUSxDQUFDLEdBQUU7QUFBQSxRQUFDLE9BQU8sRUFBRTtBQUFBLE9BQUk7QUFBQSxNQUFFLElBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQyxHQUFFO0FBQUEsUUFBQyxPQUFNLENBQUMsRUFBRTtBQUFBLE9BQUk7QUFBQSxRQUFFLE9BQU0sQ0FBQyxLQUFHLEVBQUUsS0FBSyxNQUFLLEdBQUUsR0FBRSxDQUFDO0FBQUEsTUFBRSxJQUFJLElBQUUsRUFBRSxJQUFJLFVBQVE7QUFBQSxNQUFFLE9BQU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxHQUFFO0FBQUEsUUFBQyxJQUFHLEVBQUUsS0FBSTtBQUFBLFVBQUMsSUFBSSxJQUFFLEVBQUUsR0FBRztBQUFBLFVBQUcsRUFBRSxLQUFHLEVBQUUsS0FBSSxFQUFFLE1BQVMsV0FBRSxNQUFJLEVBQUUsR0FBRyxPQUFLLElBQUU7QUFBQSxRQUFHO0FBQUEsT0FBRSxHQUFFLEtBQUcsRUFBRSxLQUFLLE1BQUssR0FBRSxHQUFFLENBQUMsS0FBRztBQUFBO0FBQUEsSUFBRyxHQUFFLE1BQUk7QUFBQSxJQUFHLElBQUksSUFBRSxHQUFFLHVCQUFzQixJQUFFLEdBQUU7QUFBQSxJQUFvQixHQUFFLHNCQUFvQixRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxNQUFDLElBQUcsS0FBSyxLQUFJO0FBQUEsUUFBQyxJQUFJLElBQUU7QUFBQSxRQUFFLElBQU8sV0FBRSxFQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsSUFBRTtBQUFBLE1BQUM7QUFBQSxNQUFDLEtBQUcsRUFBRSxLQUFLLE1BQUssR0FBRSxHQUFFLENBQUM7QUFBQSxPQUFHLEdBQUUsd0JBQXNCO0FBQUEsRUFBQztBQUFBLEVBQUMsT0FBTyxFQUFFLE9BQUssRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLENBQUMsR0FBRSxPQUFLLEdBQUUsRUFBRSxLQUFJLENBQUMsTUFBSSxFQUFFLEtBQUcsR0FBRSxFQUFFLElBQUUsR0FBRSxHQUFFLElBQUksSUFBSSxLQUFLLENBQUM7QUFBQTtBQUFtRixTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTSxFQUFDLFNBQVEsRUFBQztBQUFBLEtBQUcsQ0FBQyxDQUFDO0FBQUE7QUFBdU4sU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLE9BQU8sR0FBRSxFQUFFLEtBQUksQ0FBQyxNQUFJLEVBQUUsS0FBRyxFQUFFLEdBQUUsRUFBRSxNQUFJLEdBQUUsRUFBRSxNQUFJLElBQUcsRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTztBQUFBLEtBQUcsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsUUFBUSxFQUFFLE1BQUssSUFBRSxHQUFFLE1BQUksQ0FBQztBQUFBLEVBQUUsT0FBTyxFQUFFLElBQUUsR0FBRSxLQUFTLEVBQUUsTUFBUixTQUFhLEVBQUUsS0FBRyxNQUFHLEVBQUUsSUFBSSxFQUFDLElBQUcsRUFBRSxNQUFNLFNBQU8sRUFBRTtBQUFBO0FBQWtPLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLEVBQUU7QUFBQSxFQUFFLElBQUcsQ0FBQyxFQUFFLElBQUc7QUFBQSxJQUFDLFNBQVEsSUFBRSxHQUFFLElBQVcsTUFBUCxRQUFVLENBQUMsRUFBRSxPQUFZLEVBQUUsT0FBVDtBQUFBLE1BQWEsSUFBRSxFQUFFO0FBQUEsSUFBRyxJQUFJLElBQUUsRUFBRSxRQUFNLEVBQUUsTUFBSSxDQUFDLEdBQUUsQ0FBQztBQUFBLElBQUcsRUFBRSxLQUFHLE1BQUksRUFBRSxLQUFHLE1BQUksRUFBRTtBQUFBLEVBQUk7QUFBQSxFQUFDLE9BQU8sRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsRUFBRSxJQUFFLEdBQUUsTUFBTSxLQUFHO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLElBQUksSUFBRyxFQUFFLE9BQUs7QUFBQSxNQUFFLElBQUc7QUFBQSxRQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxNQUFJLENBQUM7QUFBQSxRQUFFLE9BQU0sR0FBRTtBQUFBLFFBQUMsRUFBRSxNQUFJLENBQUMsR0FBRSxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFBLEVBQUU7QUFBQTtBQUFFLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsS0FBRSxNQUFLLE1BQUcsR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLEtBQUcsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsS0FBRyxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU0sRUFBRSxNQUFJLEVBQUUsSUFBSSxNQUFLLE1BQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUMsR0FBRSxLQUFFO0FBQUEsRUFBRSxJQUFJLEtBQUcsS0FBRSxFQUFFLEtBQUs7QUFBQSxFQUFJLE1BQUksT0FBSSxNQUFHLEVBQUUsTUFBSSxDQUFDLEdBQUUsR0FBRSxNQUFJLENBQUMsR0FBRSxFQUFFLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsRUFBRSxRQUFNLEVBQUUsS0FBRyxFQUFFLE1BQUssRUFBRSxJQUFFLEVBQUUsTUFBUztBQUFBLEdBQUUsTUFBSSxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxDQUFDLEdBQUUsS0FBRSxLQUFJLEtBQUU7QUFBQSxHQUFHLEdBQUUsU0FBTyxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUM7QUFBQSxFQUFFLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBSSxLQUFHLEVBQUUsUUFBTSxFQUFFLElBQUksSUFBSSxXQUFhLEdBQUUsS0FBSyxDQUFDLE1BQVosS0FBZSxPQUFJLEdBQUUsMkJBQXlCLEtBQUUsR0FBRSwwQkFBd0IsSUFBRyxFQUFDLElBQUcsRUFBRSxJQUFJLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsRUFBRSxNQUFJLEVBQUUsTUFBSSxFQUFFLElBQUcsRUFBRSxJQUFPO0FBQUEsR0FBRSxJQUFHLEtBQUUsS0FBRTtBQUFBLEdBQU0sR0FBRSxNQUFJLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBRztBQUFBLE1BQUMsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxFQUFFLElBQUksT0FBTyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsT0FBTSxDQUFDLEVBQUUsTUFBSSxHQUFFLENBQUM7QUFBQSxPQUFFO0FBQUEsTUFBRSxPQUFNLEdBQUU7QUFBQSxNQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsRUFBRSxRQUFNLEVBQUUsTUFBSSxDQUFDO0FBQUEsT0FBRyxHQUFFLElBQUUsQ0FBQyxHQUFFLEdBQUUsSUFBSSxHQUFFLEVBQUUsR0FBRztBQUFBO0FBQUEsR0FBRyxHQUFFLE1BQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsVUFBUSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUM7QUFBQSxFQUFFLElBQUksR0FBRSxJQUFFLEVBQUU7QUFBQSxFQUFJLEtBQUcsRUFBRSxRQUFNLEVBQUUsSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUc7QUFBQSxNQUFDLEdBQUUsQ0FBQztBQUFBLE1BQUUsT0FBTSxHQUFFO0FBQUEsTUFBQyxJQUFFO0FBQUE7QUFBQSxHQUFHLEdBQUUsRUFBRSxNQUFTLFdBQUUsS0FBRyxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFJLElBQUksS0FBYyxPQUFPLHlCQUFuQjtBQUF5QyxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLEdBQUUsSUFBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLGFBQWEsQ0FBQyxHQUFFLE1BQUcscUJBQXFCLENBQUMsR0FBRSxXQUFXLENBQUM7QUFBQSxLQUFHLElBQUUsV0FBVyxHQUFFLEVBQUU7QUFBQSxFQUFFLE9BQUksSUFBRSxzQkFBc0IsQ0FBQztBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLElBQUUsSUFBRSxFQUFFO0FBQUEsRUFBZ0IsT0FBTyxLQUFuQixlQUF1QixFQUFFLE1BQVMsV0FBRSxFQUFFLElBQUcsS0FBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFO0FBQUEsRUFBRSxFQUFFLE1BQUksRUFBRSxHQUFHLEdBQUUsS0FBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFNLENBQUMsS0FBRyxFQUFFLFdBQVMsRUFBRSxVQUFRLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsSUFBQyxPQUFPLE1BQUksRUFBRTtBQUFBLEdBQUc7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsT0FBa0IsT0FBTyxLQUFuQixhQUFxQixFQUFFLENBQUMsSUFBRTtBQUFBOzs7QUNBMTRHLElBQUksS0FBRSxPQUFPLElBQUksZ0JBQWdCO0FBQUUsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLElBQUcsRUFBRSxLQUFFLElBQUc7QUFBQSxJQUFDLElBQUksR0FBRSxJQUFFO0FBQUEsS0FBSSxRQUFRLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRTtBQUFBLE1BQUUsS0FBTztBQUFBLE1BQUUsT0FBZSxNQUFKLFdBQU07QUFBQSxRQUFDLElBQUcsRUFBRSxFQUFFLE1BQUksRUFBRTtBQUFBLFVBQUUsRUFBRSxFQUFFLElBQUUsRUFBRTtBQUFBLFFBQUUsSUFBRSxFQUFFO0FBQUEsTUFBQztBQUFBLE9BQUc7QUFBQSxJQUFFLE9BQWUsT0FBSixXQUFNO0FBQUEsTUFBQyxJQUFJLElBQUU7QUFBQSxNQUFFLEtBQU87QUFBQSxNQUFFO0FBQUEsTUFBSSxPQUFlLE1BQUosV0FBTTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxRQUFFLEVBQUUsSUFBTztBQUFBLFFBQUUsRUFBRSxLQUFHO0FBQUEsUUFBRyxJQUFHLEVBQUUsSUFBRSxFQUFFLE1BQUksR0FBRSxDQUFDO0FBQUEsVUFBRSxJQUFHO0FBQUEsWUFBQyxFQUFFLEVBQUU7QUFBQSxZQUFFLE9BQU0sR0FBRTtBQUFBLFlBQUMsSUFBRyxDQUFDLEdBQUU7QUFBQSxjQUFDLElBQUU7QUFBQSxjQUFFLElBQUU7QUFBQSxZQUFFO0FBQUE7QUFBQSxRQUFFLElBQUU7QUFBQSxNQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsS0FBRTtBQUFBLElBQUU7QUFBQSxJQUFJLElBQUc7QUFBQSxNQUFFLE1BQU07QUFBQSxFQUFDLEVBQU07QUFBQTtBQUFBO0FBQUksU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBRyxLQUFFO0FBQUEsSUFBRSxPQUFPLEVBQUU7QUFBQSxFQUFFLEtBQUUsRUFBRTtBQUFBLEVBQUU7QUFBQSxFQUFJLElBQUc7QUFBQSxJQUFDLE9BQU8sRUFBRTtBQUFBLFlBQUU7QUFBQSxJQUFRLEdBQUU7QUFBQTtBQUFBO0FBQUcsSUFBSSxLQUFP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LEVBQUUsSUFBRTtBQUFBLE1BQUUsRUFBRSxJQUFPO0FBQUEsSUFBQztBQUFBLElBQUMsSUFBRyxNQUFJLEtBQUssR0FBRTtBQUFBLE1BQUMsS0FBSyxJQUFFO0FBQUEsTUFBRSxJQUFZLE1BQUo7QUFBQSxRQUFNLEdBQUUsUUFBUSxHQUFFO0FBQUEsVUFBQyxJQUFJO0FBQUEsV0FBUyxJQUFFLEVBQUUsTUFBWCxRQUFlLEVBQUUsS0FBSyxDQUFDO0FBQUEsU0FBRTtBQUFBLElBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsWUFBVSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFO0FBQUEsRUFBSyxPQUFPLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRSxPQUFNLElBQUU7QUFBQSxJQUFFLEtBQU87QUFBQSxJQUFFLElBQUc7QUFBQSxNQUFDLEVBQUUsQ0FBQztBQUFBLGNBQUU7QUFBQSxNQUFRLEtBQUU7QUFBQTtBQUFBLEtBQUksRUFBQyxNQUFLLE1BQUssQ0FBQztBQUFBO0FBQUcsR0FBRSxVQUFVLFVBQVEsUUFBUSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUs7QUFBQTtBQUFPLEdBQUUsVUFBVSxXQUFTLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLLFFBQU07QUFBQTtBQUFJLEdBQUUsVUFBVSxTQUFPLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLO0FBQUE7QUFBTyxHQUFFLFVBQVUsT0FBSyxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUssT0FBTyxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTyxFQUFFO0FBQUEsR0FBTTtBQUFBO0FBQUcsT0FBTyxlQUFlLEdBQUUsV0FBVSxTQUFRLEVBQUMsS0FBSSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLElBQVksTUFBSjtBQUFBLElBQU0sRUFBRSxJQUFFLEtBQUs7QUFBQSxFQUFFLE9BQU8sS0FBSztBQUFBLEdBQUcsS0FBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBRyxNQUFJLEtBQUssR0FBRTtBQUFBLElBQUMsSUFBRyxLQUFFO0FBQUEsTUFBSSxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxLQUFHLFFBQVEsQ0FBQyxHQUFFO0FBQUEsTUFBQyxJQUFPLE9BQUosS0FBVyxPQUFKO0FBQUEsUUFBTSxJQUFHLEVBQUUsTUFBSSxJQUFFO0FBQUEsVUFBQyxFQUFFLElBQUU7QUFBQSxVQUFFLEtBQUUsRUFBQyxHQUFFLEdBQUUsR0FBRSxFQUFFLEdBQUUsR0FBRSxFQUFFLEdBQUUsR0FBRSxHQUFDO0FBQUEsUUFBQztBQUFBO0FBQUEsT0FBRyxJQUFJO0FBQUEsSUFBRSxLQUFLLElBQUU7QUFBQSxJQUFFLEtBQUs7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUksSUFBRztBQUFBLE1BQUMsU0FBUSxJQUFFLEtBQUssRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsUUFBRSxFQUFFLEVBQUUsRUFBRTtBQUFBLGNBQUU7QUFBQSxNQUFRLEdBQUU7QUFBQTtBQUFBLEVBQUU7QUFBQSxFQUFFLENBQUM7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLE9BQU8sSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsU0FBUSxJQUFFLEVBQUUsRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFHLEVBQUUsRUFBRSxNQUFJLEVBQUUsS0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUcsRUFBRSxFQUFFLE1BQUksRUFBRTtBQUFBLE1BQUUsT0FBTTtBQUFBLEVBQUcsT0FBTTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsU0FBUSxJQUFFLEVBQUUsRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxFQUFFLEVBQUU7QUFBQSxJQUFFLElBQVksTUFBSjtBQUFBLE1BQU0sRUFBRSxJQUFFO0FBQUEsSUFBRSxFQUFFLEVBQUUsSUFBRTtBQUFBLElBQUUsRUFBRSxJQUFFO0FBQUEsSUFBRyxJQUFZLEVBQUUsTUFBTixXQUFRO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFO0FBQUEsSUFBSztBQUFBLEVBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFLEdBQUUsSUFBTztBQUFBLEVBQUUsT0FBZSxNQUFKLFdBQU07QUFBQSxJQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFRLEVBQUUsTUFBUCxJQUFTO0FBQUEsTUFBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsTUFBRSxJQUFZLE1BQUo7QUFBQSxRQUFNLEVBQUUsSUFBRSxFQUFFO0FBQUEsTUFBRSxJQUFZLEVBQUUsTUFBTjtBQUFBLFFBQVEsRUFBRSxFQUFFLElBQUU7QUFBQSxJQUFDLEVBQU07QUFBQSxVQUFFO0FBQUEsSUFBRSxFQUFFLEVBQUUsSUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFZLEVBQUUsTUFBTjtBQUFBLE1BQVEsRUFBRSxJQUFPO0FBQUEsSUFBRSxJQUFFO0FBQUEsRUFBQztBQUFBLEVBQUMsRUFBRSxJQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEdBQUUsS0FBSyxNQUFVLFNBQUM7QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUUsS0FBRTtBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQVEsS0FBTixPQUFhLFlBQUUsRUFBRTtBQUFBLEVBQVEsS0FBSyxJQUFRLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQSxFQUFVLEtBQUssT0FBVyxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUE7QUFBSyxHQUFFLFlBQVUsSUFBSTtBQUFFLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsS0FBSyxLQUFHO0FBQUEsRUFBRyxJQUFHLElBQUUsS0FBSztBQUFBLElBQUUsT0FBTTtBQUFBLEVBQUcsS0FBUSxLQUFHLEtBQUssTUFBYjtBQUFBLElBQWdCLE9BQU07QUFBQSxFQUFHLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxLQUFLLE1BQUk7QUFBQSxJQUFFLE9BQU07QUFBQSxFQUFHLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRSxJQUFHLEtBQUssSUFBRSxLQUFHLENBQUMsR0FBRSxJQUFJLEdBQUU7QUFBQSxJQUFDLEtBQUssS0FBRztBQUFBLElBQUcsT0FBTTtBQUFBLEVBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUUsSUFBRztBQUFBLElBQUMsR0FBRSxJQUFJO0FBQUEsSUFBRSxLQUFFO0FBQUEsSUFBSyxJQUFJLElBQUUsS0FBSyxFQUFFO0FBQUEsSUFBRSxJQUFHLEtBQUcsS0FBSyxLQUFHLEtBQUssTUFBSSxLQUFPLEtBQUssTUFBVCxHQUFXO0FBQUEsTUFBQyxLQUFLLElBQUU7QUFBQSxNQUFFLEtBQUssS0FBRztBQUFBLE1BQUksS0FBSztBQUFBLElBQUc7QUFBQSxJQUFFLE9BQU0sR0FBRTtBQUFBLElBQUMsS0FBSyxJQUFFO0FBQUEsSUFBRSxLQUFLLEtBQUc7QUFBQSxJQUFHLEtBQUs7QUFBQTtBQUFBLEVBQUksS0FBRTtBQUFBLEVBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxLQUFLLEtBQUc7QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFJLEdBQUUsVUFBVSxJQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFHLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLE1BQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLEVBQUM7QUFBQSxFQUFDLEdBQUUsVUFBVSxFQUFFLEtBQUssTUFBSyxDQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBWSxLQUFLLE1BQVQsV0FBVztBQUFBLElBQUMsR0FBRSxVQUFVLEVBQUUsS0FBSyxNQUFLLENBQUM7QUFBQSxJQUFFLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxNQUFDLEtBQUssS0FBRztBQUFBLE1BQUksU0FBUSxJQUFFLEtBQUssRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsUUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsSUFBQztBQUFBLEVBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBRyxFQUFFLElBQUUsS0FBSyxJQUFHO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFFLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLE1BQUUsRUFBRSxFQUFFLEVBQUU7QUFBQSxFQUFDO0FBQUE7QUFBRyxPQUFPLGVBQWUsR0FBRSxXQUFVLFNBQVEsRUFBQyxLQUFJLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBRyxJQUFFLEtBQUs7QUFBQSxJQUFFLE1BQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUFBLEVBQUUsSUFBSSxJQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUUsS0FBSyxFQUFFO0FBQUEsRUFBRSxJQUFZLE1BQUo7QUFBQSxJQUFNLEVBQUUsSUFBRSxLQUFLO0FBQUEsRUFBRSxJQUFHLEtBQUcsS0FBSztBQUFBLElBQUUsTUFBTSxLQUFLO0FBQUEsRUFBRSxPQUFPLEtBQUs7QUFBQSxFQUFFLENBQUM7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLE9BQU8sSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxFQUFFLEVBQUUsSUFBTztBQUFBLEVBQUUsSUFBZSxPQUFPLEtBQW5CLFlBQXFCO0FBQUEsSUFBQztBQUFBLElBQUksSUFBSSxJQUFFO0FBQUEsSUFBRSxLQUFPO0FBQUEsSUFBRSxJQUFHO0FBQUEsTUFBQyxFQUFFO0FBQUEsTUFBRSxPQUFNLEdBQUU7QUFBQSxNQUFDLEVBQUUsS0FBRztBQUFBLE1BQUcsRUFBRSxLQUFHO0FBQUEsTUFBRSxHQUFFLENBQUM7QUFBQSxNQUFFLE1BQU07QUFBQSxjQUFFO0FBQUEsTUFBUSxLQUFFO0FBQUEsTUFBRSxHQUFFO0FBQUE7QUFBQSxFQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxTQUFRLElBQUUsRUFBRSxFQUFXLE1BQUosV0FBTSxJQUFFLEVBQUU7QUFBQSxJQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFBQSxFQUFFLEVBQUUsSUFBTztBQUFBLEVBQUUsRUFBRSxJQUFPO0FBQUEsRUFBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUcsT0FBSTtBQUFBLElBQUssTUFBTSxJQUFJLE1BQU0scUJBQXFCO0FBQUEsRUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLEtBQUU7QUFBQSxFQUFFLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxJQUFFLEtBQUs7QUFBQSxJQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUUsR0FBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQU87QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUcsS0FBSyxPQUFXLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQSxFQUFLLElBQUc7QUFBQSxJQUFFLEdBQUUsS0FBSyxJQUFJO0FBQUE7QUFBRSxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxLQUFLLEVBQUU7QUFBQSxFQUFFLElBQUc7QUFBQSxJQUFDLElBQUcsSUFBRSxLQUFLO0FBQUEsTUFBRTtBQUFBLElBQU8sSUFBWSxLQUFLLE1BQVQ7QUFBQSxNQUFXO0FBQUEsSUFBTyxJQUFJLElBQUUsS0FBSyxFQUFFO0FBQUEsSUFBRSxJQUFlLE9BQU8sS0FBbkI7QUFBQSxNQUFxQixLQUFLLElBQUU7QUFBQSxZQUFFO0FBQUEsSUFBUSxFQUFFO0FBQUE7QUFBQTtBQUFJLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBRyxJQUFFLEtBQUs7QUFBQSxJQUFFLE1BQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRSxLQUFLLEtBQUc7QUFBQSxFQUFHLEdBQUUsSUFBSTtBQUFBLEVBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRTtBQUFBLEVBQUksSUFBSSxJQUFFO0FBQUEsRUFBRSxLQUFFO0FBQUEsRUFBSyxPQUFPLEdBQUUsS0FBSyxNQUFLLENBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBRyxFQUFFLElBQUUsS0FBSyxJQUFHO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFFLEtBQUssSUFBRTtBQUFBLElBQUUsS0FBRTtBQUFBLEVBQUk7QUFBQTtBQUFHLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsS0FBSyxLQUFHO0FBQUEsRUFBRSxJQUFHLEVBQUUsSUFBRSxLQUFLO0FBQUEsSUFBRyxHQUFFLElBQUk7QUFBQTtBQUFHLEdBQUUsVUFBVSxVQUFRLFFBQVEsR0FBRTtBQUFBLEVBQUMsS0FBSyxFQUFFO0FBQUE7QUFBRyxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxJQUFJLEdBQUUsR0FBRSxDQUFDO0FBQUEsRUFBRSxJQUFHO0FBQUEsSUFBQyxFQUFFLEVBQUU7QUFBQSxJQUFFLE9BQU0sR0FBRTtBQUFBLElBQUMsRUFBRSxFQUFFO0FBQUEsSUFBRSxNQUFNO0FBQUE7QUFBQSxFQUFFLElBQUksSUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFBRSxFQUFFLE9BQU8sV0FBUztBQUFBLEVBQUUsT0FBTztBQUFBOzs7QUNBeDFJLElBQUk7QUFBSixJQUFNO0FBQU4sSUFBUTtBQUFSLElBQVUsS0FBZSxPQUFPLFVBQXBCLGVBQTRCLENBQUMsQ0FBQyxPQUFPO0FBQWpELElBQTZFLEtBQUUsQ0FBQztBQUFoRixJQUFrRixLQUFFLENBQUM7QUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsS0FBRSxLQUFLO0FBQUEsQ0FBRSxFQUFFO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxFQUFFLEtBQUcsRUFBRSxLQUFLLE1BQUssRUFBRSxNQUFJLFFBQVEsR0FBRSxFQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFHLElBQUU7QUFBQSxJQUFDLElBQUksSUFBRTtBQUFBLElBQUUsS0FBTztBQUFBLElBQUUsRUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEtBQUUsS0FBRyxFQUFFLEVBQUU7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxNQUFLLEtBQUUsRUFBRSxNQUFLLElBQUUsVUFBVSxFQUFDO0FBQUEsRUFBRSxFQUFFLFFBQU07QUFBQSxFQUFFLElBQUksSUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEdBQUUsS0FBRSxFQUFFO0FBQUEsSUFBSSxPQUFNLEtBQUUsR0FBRTtBQUFBLE1BQUcsSUFBRyxHQUFFLEtBQUk7QUFBQSxRQUFDLEdBQUUsSUFBSSxRQUFNO0FBQUEsUUFBRTtBQUFBLE1BQUs7QUFBQSxJQUFDLElBQUksSUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUUsTUFBTTtBQUFBLE1BQU0sT0FBVyxNQUFKLElBQU0sSUFBTyxNQUFMLE9BQU8sS0FBRyxLQUFHO0FBQUEsS0FBRyxHQUFFLElBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxNQUFDLE9BQU0sQ0FBQyxNQUFNLFFBQVEsRUFBRSxLQUFLLEtBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUFBLEtBQUUsR0FBRSxJQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxLQUFLLElBQUU7QUFBQSxNQUFFLElBQUcsRUFBRSxPQUFNO0FBQUEsUUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLFFBQU0sSUFBRyxFQUFFLE9BQUssRUFBRSxJQUFJLE9BQVMsRUFBRSxJQUFJLElBQUksYUFBZDtBQUFBLFVBQXVCLEVBQUUsSUFBSSxJQUFJLE9BQUs7QUFBQSxNQUFDO0FBQUEsS0FBRSxHQUFFLElBQUUsRUFBRSxLQUFLO0FBQUEsSUFBRSxFQUFFLEtBQUssSUFBRSxRQUFRLEdBQUU7QUFBQSxNQUFDLEVBQUU7QUFBQSxNQUFFLEVBQUUsS0FBSyxJQUFJO0FBQUE7QUFBQSxJQUFHLE9BQU0sQ0FBQyxHQUFFLENBQUM7QUFBQSxLQUFHLENBQUMsQ0FBQyxHQUFFLElBQUUsRUFBRSxJQUFHLElBQUUsRUFBRTtBQUFBLEVBQUcsT0FBTyxFQUFFLFFBQU0sRUFBRSxLQUFLLElBQUUsRUFBRTtBQUFBO0FBQU0sR0FBRSxjQUFZO0FBQW1CLE9BQU8saUJBQWlCLEdBQUUsV0FBVSxFQUFDLGFBQVksRUFBQyxjQUFhLE1BQUcsT0FBVyxVQUFDLEdBQUUsTUFBSyxFQUFDLGNBQWEsTUFBRyxPQUFNLEdBQUMsR0FBRSxPQUFNLEVBQUMsY0FBYSxNQUFHLEtBQUksUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFLLE9BQU0sRUFBQyxNQUFLLE1BQUssS0FBSyxHQUFFO0FBQUEsSUFBQyxPQUFPLEVBQUU7QUFBQSxJQUFNLEVBQUM7QUFBQSxFQUFFLEdBQUUsS0FBSSxFQUFDLGNBQWEsTUFBRyxPQUFNLEVBQUMsRUFBQyxDQUFDO0FBQUUsR0FBRSxPQUFNLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQWEsT0FBTyxFQUFFLFFBQW5CLFVBQXdCO0FBQUEsSUFBQyxJQUFJLEdBQUUsSUFBRSxFQUFFO0FBQUEsSUFBTSxTQUFRLEtBQUs7QUFBQSxNQUFFLElBQWdCLE1BQWIsWUFBZTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxRQUFHLElBQUcsYUFBYSxJQUFFO0FBQUEsVUFBQyxJQUFHLENBQUM7QUFBQSxZQUFFLEVBQUUsT0FBSyxJQUFFLENBQUM7QUFBQSxVQUFFLEVBQUUsS0FBRztBQUFBLFVBQUUsRUFBRSxLQUFHLEVBQUUsS0FBSztBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQUEsRUFBQztBQUFBLEVBQUMsRUFBRSxDQUFDO0FBQUEsQ0FBRTtBQUFFLEdBQUUsT0FBTSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxFQUFFLENBQUM7QUFBQSxFQUFFLElBQUcsRUFBRSxTQUFPLEdBQUU7QUFBQSxJQUFDLEdBQUU7QUFBQSxJQUFFLElBQUksR0FBRSxJQUFFLEVBQUU7QUFBQSxJQUFJLElBQUcsR0FBRTtBQUFBLE1BQUMsRUFBRSxRQUFNO0FBQUEsTUFBRyxLQUFhLElBQUUsRUFBRSxVQUFUO0FBQUEsUUFBZSxFQUFFLE9BQUssSUFBRSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsVUFBQyxJQUFJO0FBQUEsVUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLFlBQUMsSUFBRTtBQUFBLGFBQU0sRUFBQyxNQUFLLEVBQUMsQ0FBQztBQUFBLFVBQUUsRUFBRSxJQUFFO0FBQUEsVUFBRSxPQUFPO0FBQUEsVUFBRyxRQUFRLEdBQUU7QUFBQSxVQUFDLElBQUk7QUFBQSxVQUFFLElBQUc7QUFBQSxhQUFTLElBQUUsRUFBRSxNQUFYLFFBQWUsRUFBRSxLQUFLLENBQUM7QUFBQSxVQUFFLEVBQUUsUUFBTTtBQUFBLFVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUFBLFdBQWUsT0FBTyxFQUFFLFFBQXJCLGFBQTBCLEVBQUUsS0FBSyxlQUFhLEVBQUUsS0FBSyxPQUFLLEVBQUU7QUFBQSxJQUFDO0FBQUEsSUFBQyxLQUFFO0FBQUEsSUFBRSxHQUFFLENBQUM7QUFBQSxFQUFDO0FBQUEsQ0FBRTtBQUFFLEdBQUUsT0FBTSxRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsR0FBRTtBQUFBLEVBQUUsS0FBTztBQUFBLEVBQUUsRUFBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLENBQUU7QUFBRSxHQUFFLFVBQVMsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsR0FBRTtBQUFBLEVBQUUsS0FBTztBQUFBLEVBQUUsSUFBSTtBQUFBLEVBQUUsSUFBYSxPQUFPLEVBQUUsUUFBbkIsYUFBMEIsSUFBRSxFQUFFLE1BQUs7QUFBQSxJQUFDLE1BQVEsTUFBSixHQUFhLE9BQUosTUFBRTtBQUFBLElBQVEsSUFBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLE1BQUUsSUFBRztBQUFBLFFBQUUsU0FBUSxLQUFLLEdBQUU7QUFBQSxVQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsVUFBRyxJQUFZLE1BQUosYUFBTyxFQUFFLEtBQUssSUFBRztBQUFBLFlBQUMsRUFBRSxFQUFFO0FBQUEsWUFBRSxFQUFFLEtBQVE7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFBLE1BQUs7QUFBQSxRQUFDLElBQUUsQ0FBQztBQUFBLFFBQUUsRUFBRSxJQUFFO0FBQUE7QUFBQSxNQUFFLFNBQVEsS0FBSyxHQUFFO0FBQUEsUUFBQyxJQUFJLElBQUUsRUFBRSxJQUFHLElBQUUsRUFBRTtBQUFBLFFBQUcsSUFBWSxNQUFKLFdBQU07QUFBQSxVQUFDLElBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUUsRUFBRSxLQUFHO0FBQUEsUUFBQyxFQUFNO0FBQUEsWUFBRSxFQUFFLEdBQUUsQ0FBQztBQUFBLE1BQUM7QUFBQSxNQUFDLFNBQVEsS0FBSztBQUFBLFFBQUUsRUFBRSxLQUFHLEVBQUU7QUFBQSxJQUFFO0FBQUEsRUFBQztBQUFBLEVBQUMsRUFBRSxDQUFDO0FBQUEsQ0FBRTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxLQUFLLEtBQVks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QyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEVBQUU7QUFBQSxJQUFLLFNBQVEsR0FBRSxJQUFFLEVBQUUsSUFBRSxFQUFFO0FBQUEsTUFBSSxLQUFJLElBQUUsRUFBRSxRQUFNLEVBQUU7QUFBQSxRQUFJLE9BQWEsRUFBRSxPQUFSLFNBQWMsRUFBRSxNQUFJLEVBQUUsS0FBSSxFQUFFLE1BQUksRUFBRSxNQUFLLEVBQUUsSUFBSSxHQUFFLENBQUM7QUFBQTtBQUFBLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUE7QUFBRyxJQUFJLEtBQUUsRUFBRTtBQUFRLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxRQUFNLEVBQUUsSUFBSSxJQUFJLEdBQUcsUUFBUSxRQUFRLENBQUMsR0FBRTtBQUFBLElBQWEsT0FBTyxFQUFFLE9BQXJCLGNBQTBCLEVBQUUsSUFBSTtBQUFBLEdBQUUsR0FBRSxFQUFFLElBQUksTUFBSSxRQUFhLElBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFHLE9BQWxCLFNBQXdCLEVBQUUsSUFBSSxRQUFNLE1BQUksRUFBRSxJQUFJLE1BQUksSUFBRyxFQUFFLElBQUksTUFBSSxNQUFHLEVBQUUsTUFBSSxPQUFNLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU8sR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLEdBQUUsSUFBRztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBRyxNQUFJLEVBQUUsTUFBSSxNQUFLLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU8sR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLEdBQUUsR0FBRSxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU0sTUFBSSxFQUFFLE9BQUssRUFBRSxZQUFZLEVBQUUsR0FBRyxHQUFFLEVBQUUsSUFBSSxNQUFJLE1BQUcsRUFBRSxJQUFJLE1BQUksS0FBSTtBQUFBO0FBQUUsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUssTUFBSSxHQUFFLEtBQUssSUFBRSxNQUFLLEtBQUssTUFBSTtBQUFBO0FBQUssU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUUsTUFBSSxFQUFFLEdBQUc7QUFBQSxFQUFJLE9BQU8sS0FBRyxFQUFFLE9BQUssRUFBRSxJQUFJLENBQUM7QUFBQTtBQUFtTixTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsS0FBSyxJQUFFLE1BQUssS0FBSyxJQUFFO0FBQUE7QUFBSyxFQUFFLFVBQVEsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBSSxNQUFJLEVBQUUsTUFBSSxPQUFJLEtBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxHQUFFLEtBQUcsS0FBRyxFQUFFLFFBQU0sRUFBRSxPQUFLLE9BQU0sTUFBRyxHQUFFLENBQUM7QUFBQSxJQUFJLEdBQUUsWUFBVSxJQUFJLEdBQUcsTUFBSSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxLQUFJLElBQUU7QUFBQSxFQUFXLEVBQUUsS0FBUixTQUFZLEVBQUUsSUFBRSxDQUFDLElBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQUUsSUFBSSxJQUFFLEdBQUUsRUFBRSxHQUFHLEdBQUUsSUFBRSxPQUFHLElBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxLQUFHLEVBQUUsUUFBTSxJQUFFLE1BQUcsRUFBRSxNQUFJLE1BQUssSUFBRSxFQUFFLENBQUMsSUFBRSxFQUFFO0FBQUE7QUFBQSxFQUFJLEVBQUUsTUFBSTtBQUFBLEVBQUUsSUFBSSxLQUFFLEVBQUU7QUFBQSxFQUFJLEVBQUUsTUFBSTtBQUFBLEVBQUssSUFBSSxJQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBRyxDQUFDLEVBQUUsRUFBRSxLQUFJO0FBQUEsTUFBQyxJQUFHLEVBQUUsTUFBTSxLQUFJO0FBQUEsUUFBQyxJQUFJLElBQUUsRUFBRSxNQUFNO0FBQUEsUUFBSSxFQUFFLElBQUksSUFBSSxLQUFHLEdBQUUsR0FBRSxFQUFFLElBQUksS0FBSSxFQUFFLElBQUksR0FBRztBQUFBLE1BQUM7QUFBQSxNQUFDLElBQUk7QUFBQSxNQUFFLEtBQUksRUFBRSxTQUFTLEVBQUMsS0FBSSxFQUFFLE1BQUksS0FBSSxDQUFDLEVBQUUsSUFBRSxFQUFFLEVBQUUsSUFBSTtBQUFBLFFBQUcsRUFBRSxNQUFJLElBQUUsRUFBRSxZQUFZO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRyxFQUFFLFNBQU8sS0FBRyxFQUFFLE9BQUssRUFBRSxTQUFTLEVBQUMsS0FBSSxFQUFFLE1BQUksRUFBRSxJQUFJLElBQUksR0FBRSxDQUFDLEdBQUUsRUFBRSxLQUFLLEdBQUUsQ0FBQztBQUFBLEdBQUcsR0FBRSxVQUFVLHVCQUFxQixRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLFVBQVUsU0FBTyxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEtBQUssS0FBSTtBQUFBLElBQUMsSUFBRyxLQUFLLElBQUksS0FBSTtBQUFBLE1BQUMsSUFBSSxJQUFFLFNBQVMsY0FBYyxLQUFLLEdBQUUsSUFBRSxLQUFLLElBQUksSUFBSSxHQUFHO0FBQUEsTUFBSSxLQUFLLElBQUksSUFBSSxLQUFHLEdBQUUsS0FBSyxLQUFJLEdBQUUsRUFBRSxNQUFJLEVBQUUsR0FBRztBQUFBLElBQUM7QUFBQSxJQUFDLEtBQUssTUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFLE9BQUssRUFBRSxHQUFFLE1BQUssRUFBRSxRQUFRO0FBQUEsRUFBRSxPQUFPLE1BQUksRUFBRSxPQUFLLE1BQUssQ0FBQyxFQUFFLEdBQUUsTUFBSyxFQUFFLE1BQUksT0FBSyxFQUFFLFFBQVEsR0FBRSxDQUFDO0FBQUE7QUFBRyxJQUFJLEtBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEVBQUUsRUFBRSxPQUFLLEVBQUUsTUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUUsRUFBRSxNQUFNLGdCQUFvQixFQUFFLE1BQU0sWUFBWSxPQUExQixPQUE4QixDQUFDLEVBQUUsRUFBRTtBQUFBLElBQU0sS0FBSSxJQUFFLEVBQUUsRUFBRSxLQUFHO0FBQUEsTUFBQyxNQUFLLEVBQUUsU0FBTztBQUFBLFFBQUcsRUFBRSxJQUFJLEVBQUU7QUFBQSxNQUFFLElBQUcsRUFBRSxLQUFHLEVBQUU7QUFBQSxRQUFHO0FBQUEsTUFBTSxFQUFFLElBQUUsSUFBRSxFQUFFO0FBQUEsSUFBRTtBQUFBO0FBQUcsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLLGtCQUFnQixRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU8sRUFBRTtBQUFBLEtBQVMsRUFBRTtBQUFBO0FBQVMsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLE1BQUssSUFBRSxFQUFFO0FBQUEsRUFBRSxJQUFHLEVBQUUsdUJBQXFCLFFBQVEsR0FBRTtBQUFBLElBQUMsRUFBRSxNQUFLLEVBQUUsQ0FBQyxHQUFFLEVBQUUsSUFBRSxNQUFLLEVBQUUsSUFBRTtBQUFBLEtBQU0sRUFBRSxLQUFHLEVBQUUsTUFBSSxLQUFHLEVBQUUscUJBQXFCLEdBQUUsQ0FBQyxFQUFFLEdBQUU7QUFBQSxJQUFDLFNBQVEsSUFBRSxFQUFFLElBQVcsTUFBUCxRQUFVLENBQUMsRUFBRSxPQUFZLEVBQUUsT0FBVDtBQUFBLE1BQWEsSUFBRSxFQUFFO0FBQUEsSUFBRyxFQUFFLElBQUUsR0FBRSxFQUFFLElBQUUsRUFBQyxVQUFTLEdBQUUsWUFBVyxHQUFFLFlBQVcsQ0FBQyxHQUFFLEtBQUksRUFBQyxLQUFJLEVBQUUsSUFBRyxHQUFFLFVBQVMsUUFBUSxHQUFFO0FBQUEsTUFBQyxPQUFNO0FBQUEsT0FBSSxjQUFhLEVBQUUsY0FBYSxjQUFhLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxNQUFDLEtBQUssV0FBVyxLQUFLLENBQUMsR0FBRSxFQUFFLEVBQUUsYUFBYSxHQUFFLENBQUM7QUFBQSxPQUFHLGFBQVksUUFBUSxDQUFDLEdBQUU7QUFBQSxNQUFDLEtBQUssV0FBVyxPQUFPLEtBQUssV0FBVyxRQUFRLENBQUMsTUFBSSxHQUFFLENBQUMsR0FBRSxFQUFFLEVBQUUsWUFBWSxDQUFDO0FBQUEsTUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsRUFBRSxHQUFFLEVBQUMsU0FBUSxFQUFFLFFBQU8sR0FBRSxFQUFFLEdBQUcsR0FBRSxFQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUUsR0FBRSxFQUFDLEtBQUksR0FBRSxHQUFFLEVBQUMsQ0FBQztBQUFBLEVBQUUsT0FBTyxFQUFFLGdCQUFjLEdBQUU7QUFBQTtBQUFBLENBQUcsR0FBRSxZQUFVLElBQUksR0FBRyxNQUFJLFFBQVEsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsTUFBSyxJQUFFLEdBQUUsRUFBRSxHQUFHLEdBQUUsSUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDO0FBQUEsRUFBRSxPQUFPLEVBQUUsTUFBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsRUFBRSxNQUFNLGVBQWEsRUFBRSxLQUFLLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEtBQUcsRUFBRTtBQUFBO0FBQUEsSUFBRyxJQUFFLEVBQUUsQ0FBQyxJQUFFLEVBQUU7QUFBQTtBQUFBLEdBQUksR0FBRSxVQUFVLFNBQU8sUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRSxNQUFLLEtBQUssSUFBRSxJQUFJO0FBQUEsRUFBSSxJQUFJLElBQUUsRUFBRSxFQUFFLFFBQVE7QUFBQSxFQUFFLEVBQUUsZUFBbUIsRUFBRSxZQUFZ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LGtCQUNMLE1BQU0sTUFBTSxRQUFRLFlBQVk7QUFBQSxrQkFDaEMsZUFBWTtBQUFBLGtCQUNaLHFCQUFtQjtBQUFBLGtCQUNuQixPQUFPLFdBQVcsQ0FBQztBQUFBLG1CQUxkLEdBRFAsc0JBT0EsQ0FDRDtBQUFBO0FBQUEsZUFiSCxnQ0FjRTtBQUFBLGFBZkosaUNBZ0JFO0FBQUEsMEJBRUYsR0FZRSxPQVpGO0FBQUEsWUFBSyxjQUFXO0FBQUEsWUFBaEIsMEJBQ0UsR0FVRSxTQVZGO0FBQUEsY0FBUyxLQUFJO0FBQUEsY0FBYixVQUNHLGlCQUFpQixJQUFJLENBQUMsNEJBQ3JCLEdBQUMsUUFBRDtBQUFBLGdCQUVFLE1BQUs7QUFBQSxnQkFDTCxNQUFLO0FBQUEsZ0JBQ0wsTUFBTSxJQUFJLFFBQVE7QUFBQSxnQkFDbEIsT0FBTyxRQUFRO0FBQUEsaUJBSlYsUUFBUSxJQURmLHNCQU1BLENBQ0Q7QUFBQSxlQVRILGlDQVVFO0FBQUEsYUFYSixpQ0FZRTtBQUFBLDBCQUVGLEdBSUUsUUFKRjtBQUFBLFlBQVEsS0FBSTtBQUFBLFlBQVosVUFDRyxpQkFBaUIsSUFBSSxDQUFDLDRCQUNyQixHQUFDLFNBQUQ7QUFBQSxjQUEwQjtBQUFBLGVBQVosUUFBUSxJQUF0QixzQkFBNEMsQ0FDN0M7QUFBQSxhQUhILGlDQUlFO0FBQUE7QUFBQSxTQTlDSixnQ0ErQ0U7QUFBQSxzQkFHRixHQUFDLGFBQUQscUNBQWE7QUFBQSxzQkFDYixHQUFDLE1BQU0sVUFBUCxxQ0FBZ0I7QUFBQSxzQkFDaEIsR0FBQyxjQUFjLE1BQWYscUNBQW9CO0FBQUE7QUFBQSxLQTFEdEIsZ0NBMkRFO0FBQUE7OztBQ3ZHTixJQUFNLFNBQXdCLENBQUM7QUFDL0IsWUFBWSxXQUFXLE1BQU0sTUFBTTtBQUVuQyx1QkFBdUIsT0FBTyxhQUFhO0FBQUEsRUFDekMsTUFBTSxVQUFVLGdCQUFnQixTQUFTO0FBQUEsRUFDekMsSUFBSSxTQUFTO0FBQUEsSUFDWCxNQUFNLFFBQVE7QUFBQSxNQUNaO0FBQUEsTUFDQSxPQUFPLFNBQVM7QUFBQSxNQUNoQixTQUFTLFNBQVM7QUFBQSxNQUNsQixNQUFNLFNBQVM7QUFBQSxJQUNqQixDQUFDO0FBQUEsRUFDSDtBQUFBLENBQ0Q7QUFFRCxJQUFNLE9BQU8sU0FBUyxlQUFlLEtBQUssS0FBSyxTQUFTO0FBQ3hELGtCQUFPLEdBQUMsWUFBRCxxQ0FBWSxHQUFJLElBQUk7IiwKICAiZGVidWdJZCI6ICJFNUIyODhERTU1Qjk3NDAzNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
|
5500
|
+
//# debugId=0D2534F3978D9E0964756E2164756E21
|
|
5501
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9kaXN0L3ByZWFjdC5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9ob29rcy9kaXN0L2hvb2tzLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHMtY29yZUAxLjE0LjIvbm9kZV9tb2R1bGVzL0BwcmVhY3Qvc2lnbmFscy1jb3JlL2Rpc3Qvc2lnbmFscy1jb3JlLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHNAMi45LjArOGFkZTYwMmVkNmMzNjM2MC9ub2RlX21vZHVsZXMvQHByZWFjdC9zaWduYWxzL2Rpc3Qvc2lnbmFscy5tb2R1bGUuanMiLCAic3JjL2FjdGlvbnMvZXJyb3IudHMiLCAic3JjL2FjdGlvbnMvb3ZlcmxheS50cyIsICJzcmMvYWN0aW9ucy9ldmVudC1kZWxlZ2F0aW9uLnRzIiwgInNyYy9hY3Rpb25zL2Zvcm0udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwgInNyYy9hY3Rpb25zL3N0b3JlLnRzeCIsICJzcmMvcG9sbHktdWkvQWN0aW9uRm9ybS50c3giLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvcGFzc3Rocm91Z2gudHMiLCAic3JjL3BvbGx5LXVpL0FjdGlvbklucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvTGF5b3V0LnRzeCIsICJzcmMvcG9sbHktdWkvRHJvcGRvd24udHN4IiwgInNyYy9wb2xseS11aS9pbnRlcm5hbC9zZWxlY3QtdHJpZ2dlci50c3giLCAic3JjL3BvbGx5LXVpL0FjdGlvblNlbGVjdC50c3giLCAic3JjL3BvbGx5LXVpL0JhZGdlLnRzeCIsICJzcmMvcG9sbHktdWkvQnV0dG9uLnRzeCIsICJzcmMvcG9sbHktdWkvU3VyZmFjZS50c3giLCAic3JjL3BvbGx5LXVpL0NhcmQudHN4IiwgInNyYy9wb2xseS11aS9DaGVja2JveC50c3giLCAic3JjL3BvbGx5LXVpL0NsdXN0ZXIudHN4IiwgInNyYy9wb2xseS11aS9Db2RlLnRzeCIsICJzcmMvcG9sbHktdWkvQ29sbGFwc2libGUudHN4IiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3ByZWFjdEAxMC4yOS4xL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L2Rpc3QvY29tcGF0Lm1vZHVsZS5qcyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvZm9jdXMtdHJhcC50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHMiLCAic3JjL3BvbGx5LXVpL092ZXJsYXlSb290LnRzeCIsICJzcmMvcG9sbHktdWkvTW9kYWwudHN4IiwgInNyYy9wb2xseS11aS9Db25maXJtRGlhbG9nLnRzeCIsICJzcmMvcG9sbHktdWkvRmlsZUlucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvSHRtbC50c3giLCAic3JjL3BvbGx5LXVpL0xpbmsudHN4IiwgInNyYy9wb2xseS11aS9PdXRwdXQudHN4IiwgInNyYy9wb2xseS11aS9TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9Ta2VsZXRvbi50c3giLCAic3JjL3BvbGx5LXVpL1RhYnMudHN4IiwgInNyYy9wb2xseS11aS9UZXh0LnRzeCIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvaW5wdXQtYmFzZS50cyIsICJzcmMvcG9sbHktdWkvVGV4dElucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvVG9hc3QudHN4IiwgInNyYy9wb2xseS11aS9Ub2dnbGUudHN4IiwgInNyYy9zaGFyZWQvbGliL3N0YXRlLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3N0b3Jlcy50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9hY3Rpb25zLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3NwZWNpbWVucy50c3giLCAidG9vbHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS1hcHAudHN4IiwgInRvb2xzL2dhbGxlcnkvc3JjL2NsaWVudC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAidmFyIG4sbCx1LHQsaSxyLG8sZSxmLGMscyxhLGgscCx2LHksZD17fSx3PVtdLF89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxnPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gbShuLGwpe2Zvcih2YXIgdSBpbiBsKW5bdV09bFt1XTtyZXR1cm4gbn1mdW5jdGlvbiBiKG4pe24mJm4ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfWZ1bmN0aW9uIGsobCx1LHQpe3ZhciBpLHIsbyxlPXt9O2ZvcihvIGluIHUpXCJrZXlcIj09bz9pPXVbb106XCJyZWZcIj09bz9yPXVbb106ZVtvXT11W29dO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKGUuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP24uY2FsbChhcmd1bWVudHMsMik6dCksXCJmdW5jdGlvblwiPT10eXBlb2YgbCYmbnVsbCE9bC5kZWZhdWx0UHJvcHMpZm9yKG8gaW4gbC5kZWZhdWx0UHJvcHMpdm9pZCAwPT09ZVtvXSYmKGVbb109bC5kZWZhdWx0UHJvcHNbb10pO3JldHVybiB4KGwsZSxpLHIsbnVsbCl9ZnVuY3Rpb24geChuLHQsaSxyLG8pe3ZhciBlPXt0eXBlOm4scHJvcHM6dCxrZXk6aSxyZWY6cixfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6bnVsbD09bz8rK3U6byxfX2k6LTEsX191OjB9O3JldHVybiBudWxsPT1vJiZudWxsIT1sLnZub2RlJiZsLnZub2RlKGUpLGV9ZnVuY3Rpb24gTSgpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIFMobil7cmV0dXJuIG4uY2hpbGRyZW59ZnVuY3Rpb24gQyhuLGwpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9bH1mdW5jdGlvbiAkKG4sbCl7aWYobnVsbD09bClyZXR1cm4gbi5fXz8kKG4uX18sbi5fX2krMSk6bnVsbDtmb3IodmFyIHU7bDxuLl9fay5sZW5ndGg7bCsrKWlmKG51bGwhPSh1PW4uX19rW2xdKSYmbnVsbCE9dS5fX2UpcmV0dXJuIHUuX19lO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZT8kKG4pOm51bGx9ZnVuY3Rpb24gSShuKXtpZihuLl9fUCYmbi5fX2Qpe3ZhciB1PW4uX192LHQ9dS5fX2UsaT1bXSxyPVtdLG89bSh7fSx1KTtvLl9fdj11Ll9fdisxLGwudm5vZGUmJmwudm5vZGUobykscShuLl9fUCxvLHUsbi5fX24sbi5fX1AubmFtZXNwYWNlVVJJLDMyJnUuX191P1t0XTpudWxsLGksbnVsbD09dD8kKHUpOnQsISEoMzImdS5fX3UpLHIpLG8uX192PXUuX192LG8uX18uX19rW28uX19pXT1vLEQoaSxvLHIpLHUuX19lPXUuX189bnVsbCxvLl9fZSE9dCYmUChvKX19ZnVuY3Rpb24gUChuKXtpZihudWxsIT0obj1uLl9fKSYmbnVsbCE9bi5fX2MpcmV0dXJuIG4uX19lPW4uX19jLmJhc2U9bnVsbCxuLl9fay5zb21lKGZ1bmN0aW9uKGwpe2lmKG51bGwhPWwmJm51bGwhPWwuX19lKXJldHVybiBuLl9fZT1uLl9fYy5iYXNlPWwuX19lfSksUChuKX1mdW5jdGlvbiBBKG4peyghbi5fX2QmJihuLl9fZD0hMCkmJmkucHVzaChuKSYmIUguX19yKyt8fHIhPWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKHI9bC5kZWJvdW5jZVJlbmRlcmluZyl8fG8pKEgpfWZ1bmN0aW9uIEgoKXt0cnl7Zm9yKHZhciBuLGw9MTtpLmxlbmd0aDspaS5sZW5ndGg+bCYmaS5zb3J0KGUpLG49aS5zaGlmdCgpLGw9aS5sZW5ndGgsSShuKX1maW5hbGx5e2kubGVuZ3RoPUguX19yPTB9fWZ1bmN0aW9uIEwobixsLHUsdCxpLHIsbyxlLGYsYyxzKXt2YXIgYSxoLHAsdix5LF8sZyxtPXQmJnQuX19rfHx3LGI9bC5sZW5ndGg7Zm9yKGY9VCh1LGwsbSxmLGIpLGE9MDthPGI7YSsrKW51bGwhPShwPXUuX19rW2FdKSYmKGg9LTEhPXAuX19pJiZtW3AuX19pXXx8ZCxwLl9faT1hLF89cShuLHAsaCxpLHIsbyxlLGYsYyxzKSx2PXAuX19lLHAucmVmJiZoLnJlZiE9cC5yZWYmJihoLnJlZiYmSihoLnJlZixudWxsLHApLHMucHVzaChwLnJlZixwLl9fY3x8dixwKSksbnVsbD09eSYmbnVsbCE9diYmKHk9diksKGc9ISEoNCZwLl9fdSkpfHxoLl9faz09PXAuX19rPyhmPWoocCxmLG4sZyksZyYmaC5fX2UmJihoLl9fZT1udWxsKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgcC50eXBlJiZ2b2lkIDAhPT1fP2Y9Xzp2JiYoZj12Lm5leHRTaWJsaW5nKSxwLl9fdSY9LTcpO3JldHVybiB1Ll9fZT15LGZ9ZnVuY3Rpb24gVChuLGwsdSx0LGkpe3ZhciByLG8sZSxmLGMscz11Lmxlbmd0aCxhPXMsaD0wO2ZvcihuLl9faz1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspbnVsbCE9KG89bFtyXSkmJlwiYm9vbGVhblwiIT10eXBlb2YgbyYmXCJmdW5jdGlvblwiIT10eXBlb2Ygbz8oXCJzdHJpbmdcIj09dHlwZW9mIG98fFwibnVtYmVyXCI9PXR5cGVvZiBvfHxcImJpZ2ludFwiPT10eXBlb2Ygb3x8by5jb25zdHJ1Y3Rvcj09U3RyaW5nP289bi5fX2tbcl09eChudWxsLG8sbnVsbCxudWxsLG51bGwpOmcobyk/bz1uLl9fa1tyXT14KFMse2NoaWxkcmVuOm99LG51bGwsbnVsbCxudWxsKTp2b2lkIDA9PT1vLmNvbnN0cnVjdG9yJiZvLl9fYj4wP289bi5fX2tbcl09eChvLnR5cGUsby5wcm9wcyxvLmtleSxvLnJlZj9vLnJlZjpudWxsLG8uX192KTpuLl9fa1tyXT1vLGY9citoLG8uX189bixvLl9fYj1uLl9fYisxLGU9bnVsbCwtMSE9KGM9by5fX2k9TyhvLHUsZixhKSkmJihhLS0sKGU9dVtjXSkmJihlLl9fdXw9MikpLG51bGw9PWV8fG51bGw9PWUuX192PygtMT09YyYmKGk+cz9oLS06aTxzJiZoKyspLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG8udHlwZSYmKG8uX191fD00KSk6YyE9ZiYmKGM9PWYtMT9oLS06Yz09ZisxP2grKzooYz5mP2gtLTpoKyssby5fX3V8PTQpKSk6bi5fX2tbcl09bnVsbDtpZihhKWZvcihyPTA7cjxzO3IrKyludWxsIT0oZT11W3JdKSYmMD09KDImZS5fX3UpJiYoZS5fX2U9PXQmJih0PSQoZSkpLEsoZSxlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gaihuLGwsdSx0KXt2YXIgaSxyO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZSl7Zm9yKGk9bi5fX2sscj0wO2kmJnI8aS5sZW5ndGg7cisrKWlbcl0mJihpW3JdLl9fPW4sbD1qKGlbcl0sbCx1LHQpKTtyZXR1cm4gbH1uLl9fZSE9bCYmKHQmJihsJiZuLnR5cGUmJiFsLnBhcmVudE5vZGUmJihsPSQobikpLHUuaW5zZXJ0QmVmb3JlKG4uX19lLGx8fG51bGwpKSxsPW4uX19lKTtkb3tsPWwmJmwubmV4dFNpYmxpbmd9d2hpbGUobnVsbCE9bCYmOD09bC5ub2RlVHlwZSk7cmV0dXJuIGx9ZnVuY3Rpb24gRihuLGwpe3JldHVybiBsPWx8fFtdLG51bGw9PW58fFwiYm9vbGVhblwiPT10eXBlb2Ygbnx8KGcobik/bi5zb21lKGZ1bmN0aW9uKG4pe0YobixsKX0pOmwucHVzaChuKSksbH1mdW5jdGlvbiBPKG4sbCx1LHQpe3ZhciBpLHIsbyxlPW4ua2V5LGY9bi50eXBlLGM9bFt1XSxzPW51bGwhPWMmJjA9PSgyJmMuX191KTtpZihudWxsPT09YyYmbnVsbD09ZXx8cyYmZT09Yy5rZXkmJmY9PWMudHlwZSlyZXR1cm4gdTtpZih0PihzPzE6MCkpZm9yKGk9dS0xLHI9dSsxO2k+PTB8fHI8bC5sZW5ndGg7KWlmKG51bGwhPShjPWxbbz1pPj0wP2ktLTpyKytdKSYmMD09KDImYy5fX3UpJiZlPT1jLmtleSYmZj09Yy50eXBlKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIHoobixsLHUpe1wiLVwiPT1sWzBdP24uc2V0UHJvcGVydHkobCxudWxsPT11P1wiXCI6dSk6bltsXT1udWxsPT11P1wiXCI6XCJudW1iZXJcIiE9dHlwZW9mIHV8fF8udGVzdChsKT91OnUrXCJweFwifWZ1bmN0aW9uIE4obixsLHUsdCxpKXt2YXIgcixvO246aWYoXCJzdHlsZVwiPT1sKWlmKFwic3RyaW5nXCI9PXR5cGVvZiB1KW4uc3R5bGUuY3NzVGV4dD11O2Vsc2V7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJihuLnN0eWxlLmNzc1RleHQ9dD1cIlwiKSx0KWZvcihsIGluIHQpdSYmbCBpbiB1fHx6KG4uc3R5bGUsbCxcIlwiKTtpZih1KWZvcihsIGluIHUpdCYmdVtsXT09dFtsXXx8eihuLnN0eWxlLGwsdVtsXSl9ZWxzZSBpZihcIm9cIj09bFswXSYmXCJuXCI9PWxbMV0pcj1sIT0obD1sLnJlcGxhY2UoYSxcIiQxXCIpKSxvPWwudG9Mb3dlckNhc2UoKSxsPW8gaW4gbnx8XCJvbkZvY3VzT3V0XCI9PWx8fFwib25Gb2N1c0luXCI9PWw/by5zbGljZSgyKTpsLnNsaWNlKDIpLG4ubHx8KG4ubD17fSksbi5sW2wrcl09dSx1P3Q/dVtzXT10W3NdOih1W3NdPWgsbi5hZGRFdmVudExpc3RlbmVyKGwscj92OnAscikpOm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLHI/djpwLHIpO2Vsc2V7aWYoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT1pKWw9bC5yZXBsYWNlKC94bGluayhIfDpoKS8sXCJoXCIpLnJlcGxhY2UoL3NOYW1lJC8sXCJzXCIpO2Vsc2UgaWYoXCJ3aWR0aFwiIT1sJiZcImhlaWdodFwiIT1sJiZcImhyZWZcIiE9bCYmXCJsaXN0XCIhPWwmJlwiZm9ybVwiIT1sJiZcInRhYkluZGV4XCIhPWwmJlwiZG93bmxvYWRcIiE9bCYmXCJyb3dTcGFuXCIhPWwmJlwiY29sU3BhblwiIT1sJiZcInJvbGVcIiE9bCYmXCJwb3BvdmVyXCIhPWwmJmwgaW4gbil0cnl7bltsXT1udWxsPT11P1wiXCI6dTticmVhayBufWNhdGNoKG4pe31cImZ1bmN0aW9uXCI9PXR5cGVvZiB1fHwobnVsbD09dXx8ITE9PT11JiZcIi1cIiE9bFs0XT9uLnJlbW92ZUF0dHJpYnV0ZShsKTpuLnNldEF0dHJpYnV0ZShsLFwicG9wb3ZlclwiPT1sJiYxPT11P1wiXCI6dSkpfX1mdW5jdGlvbiBWKG4pe3JldHVybiBmdW5jdGlvbih1KXtpZih0aGlzLmwpe3ZhciB0PXRoaXMubFt1LnR5cGUrbl07aWYobnVsbD09dVtjXSl1W2NdPWgrKztlbHNlIGlmKHVbY108dFtzXSlyZXR1cm47cmV0dXJuIHQobC5ldmVudD9sLmV2ZW50KHUpOnUpfX19ZnVuY3Rpb24gcShuLHUsdCxpLHIsbyxlLGYsYyxzKXt2YXIgYSxoLHAsdix5LGQsXyxrLHgsTSwkLEksUCxBLEgsVD11LnR5cGU7aWYodm9pZCAwIT09dS5jb25zdHJ1Y3RvcilyZXR1cm4gbnVsbDsxMjgmdC5fX3UmJihjPSEhKDMyJnQuX191KSxvPVtmPXUuX19lPXQuX19lXSksKGE9bC5fX2IpJiZhKHUpO246aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgVCl0cnl7aWYoaz11LnByb3BzLHg9VC5wcm90b3R5cGUmJlQucHJvdG90eXBlLnJlbmRlcixNPShhPVQuY29udGV4dFR5cGUpJiZpW2EuX19jXSwkPWE/TT9NLnByb3BzLnZhbHVlOmEuX186aSx0Ll9fYz9fPShoPXUuX19jPXQuX19jKS5fXz1oLl9fRTooeD91Ll9fYz1oPW5ldyBUKGssJCk6KHUuX19jPWg9bmV3IEMoaywkKSxoLmNvbnN0cnVjdG9yPVQsaC5yZW5kZXI9USksTSYmTS5zdWIoaCksaC5zdGF0ZXx8KGguc3RhdGU9e30pLGguX19uPWkscD1oLl9fZD0hMCxoLl9faD1bXSxoLl9zYj1bXSkseCYmbnVsbD09aC5fX3MmJihoLl9fcz1oLnN0YXRlKSx4JiZudWxsIT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmKGguX19zPT1oLnN0YXRlJiYoaC5fX3M9bSh7fSxoLl9fcykpLG0oaC5fX3MsVC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoayxoLl9fcykpKSx2PWgucHJvcHMseT1oLnN0YXRlLGguX192PXUscCl4JiZudWxsPT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmbnVsbCE9aC5jb21wb25lbnRXaWxsTW91bnQmJmguY29tcG9uZW50V2lsbE1vdW50KCkseCYmbnVsbCE9aC5jb21wb25lbnREaWRNb3VudCYmaC5fX2gucHVzaChoLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKHgmJm51bGw9PVQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZrIT09diYmbnVsbCE9aC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZoLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoaywkKSx1Ll9fdj09dC5fX3Z8fCFoLl9fZSYmbnVsbCE9aC5zaG91bGRDb21wb25lbnRVcGRhdGUmJiExPT09aC5zaG91bGRDb21wb25lbnRVcGRhdGUoayxoLl9fcywkKSl7dS5fX3YhPXQuX192JiYoaC5wcm9wcz1rLGguc3RhdGU9aC5fX3MsaC5fX2Q9ITEpLHUuX19lPXQuX19lLHUuX19rPXQuX19rLHUuX19rLnNvbWUoZnVuY3Rpb24obil7biYmKG4uX189dSl9KSx3LnB1c2guYXBwbHkoaC5fX2gsaC5fc2IpLGguX3NiPVtdLGguX19oLmxlbmd0aCYmZS5wdXNoKGgpO2JyZWFrIG59bnVsbCE9aC5jb21wb25lbnRXaWxsVXBkYXRlJiZoLmNvbXBvbmVudFdpbGxVcGRhdGUoayxoLl9fcywkKSx4JiZudWxsIT1oLmNvbXBvbmVudERpZFVwZGF0ZSYmaC5fX2gucHVzaChmdW5jdGlvbigpe2guY29tcG9uZW50RGlkVXBkYXRlKHYseSxkKX0pfWlmKGguY29udGV4dD0kLGgucHJvcHM9ayxoLl9fUD1uLGguX19lPSExLEk9bC5fX3IsUD0wLHgpaC5zdGF0ZT1oLl9fcyxoLl9fZD0hMSxJJiZJKHUpLGE9aC5yZW5kZXIoaC5wcm9wcyxoLnN0YXRlLGguY29udGV4dCksdy5wdXNoLmFwcGx5KGguX19oLGguX3NiKSxoLl9zYj1bXTtlbHNlIGRve2guX19kPSExLEkmJkkodSksYT1oLnJlbmRlcihoLnByb3BzLGguc3RhdGUsaC5jb250ZXh0KSxoLnN0YXRlPWguX19zfXdoaWxlKGguX19kJiYrK1A8MjUpO2guc3RhdGU9aC5fX3MsbnVsbCE9aC5nZXRDaGlsZENvbnRleHQmJihpPW0obSh7fSxpKSxoLmdldENoaWxkQ29udGV4dCgpKSkseCYmIXAmJm51bGwhPWguZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUmJihkPWguZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUodix5KSksQT1udWxsIT1hJiZhLnR5cGU9PT1TJiZudWxsPT1hLmtleT9FKGEucHJvcHMuY2hpbGRyZW4pOmEsZj1MKG4sZyhBKT9BOltBXSx1LHQsaSxyLG8sZSxmLGMscyksaC5iYXNlPXUuX19lLHUuX191Jj0tMTYxLGguX19oLmxlbmd0aCYmZS5wdXNoKGgpLF8mJihoLl9fRT1oLl9fPW51bGwpfWNhdGNoKG4pe2lmKHUuX192PW51bGwsY3x8bnVsbCE9bylpZihuLnRoZW4pe2Zvcih1Ll9fdXw9Yz8xNjA6MTI4O2YmJjg9PWYubm9kZVR5cGUmJmYubmV4dFNpYmxpbmc7KWY9Zi5uZXh0U2libGluZztvW28uaW5kZXhPZihmKV09bnVsbCx1Ll9fZT1mfWVsc2V7Zm9yKEg9by5sZW5ndGg7SC0tOyliKG9bSF0pO0IodSl9ZWxzZSB1Ll9fZT10Ll9fZSx1Ll9faz10Ll9fayxuLnRoZW58fEIodSk7bC5fX2Uobix1LHQpfWVsc2UgbnVsbD09byYmdS5fX3Y9PXQuX192Pyh1Ll9faz10Ll9fayx1Ll9fZT10Ll9fZSk6Zj11Ll9fZT1HKHQuX19lLHUsdCxpLHIsbyxlLGMscyk7cmV0dXJuKGE9bC5kaWZmZWQpJiZhKHUpLDEyOCZ1Ll9fdT92b2lkIDA6Zn1mdW5jdGlvbiBCKG4pe24mJihuLl9fYyYmKG4uX19jLl9fZT0hMCksbi5fX2smJm4uX19rLnNvbWUoQikpfWZ1bmN0aW9uIEQobix1LHQpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKUoodFtpXSx0WysraV0sdFsrK2ldKTtsLl9fYyYmbC5fX2ModSxuKSxuLnNvbWUoZnVuY3Rpb24odSl7dHJ5e249dS5fX2gsdS5fX2g9W10sbi5zb21lKGZ1bmN0aW9uKG4pe24uY2FsbCh1KX0pfWNhdGNoKG4pe2wuX19lKG4sdS5fX3YpfX0pfWZ1bmN0aW9uIEUobil7cmV0dXJuXCJvYmplY3RcIiE9dHlwZW9mIG58fG51bGw9PW58fG4uX19iPjA/bjpnKG4pP24ubWFwKEUpOm0oe30sbil9ZnVuY3Rpb24gRyh1LHQsaSxyLG8sZSxmLGMscyl7dmFyIGEsaCxwLHYseSx3LF8sbT1pLnByb3BzfHxkLGs9dC5wcm9wcyx4PXQudHlwZTtpZihcInN2Z1wiPT14P289XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiOlwibWF0aFwiPT14P289XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI6b3x8KG89XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpLG51bGwhPWUpZm9yKGE9MDthPGUubGVuZ3RoO2ErKylpZigoeT1lW2FdKSYmXCJzZXRBdHRyaWJ1dGVcImluIHk9PSEheCYmKHg/eS5sb2NhbE5hbWU9PXg6Mz09eS5ub2RlVHlwZSkpe3U9eSxlW2FdPW51bGw7YnJlYWt9aWYobnVsbD09dSl7aWYobnVsbD09eClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoayk7dT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobyx4LGsuaXMmJmspLGMmJihsLl9fbSYmbC5fX20odCxlKSxjPSExKSxlPW51bGx9aWYobnVsbD09eCltPT09a3x8YyYmdS5kYXRhPT1rfHwodS5kYXRhPWspO2Vsc2V7aWYoZT1lJiZuLmNhbGwodS5jaGlsZE5vZGVzKSwhYyYmbnVsbCE9ZSlmb3IobT17fSxhPTA7YTx1LmF0dHJpYnV0ZXMubGVuZ3RoO2ErKyltWyh5PXUuYXR0cmlidXRlc1thXSkubmFtZV09eS52YWx1ZTtmb3IoYSBpbiBtKXk9bVthXSxcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PWE/cD15OlwiY2hpbGRyZW5cIj09YXx8YSBpbiBrfHxcInZhbHVlXCI9PWEmJlwiZGVmYXVsdFZhbHVlXCJpbiBrfHxcImNoZWNrZWRcIj09YSYmXCJkZWZhdWx0Q2hlY2tlZFwiaW4ga3x8Tih1LGEsbnVsbCx5LG8pO2ZvcihhIGluIGspeT1rW2FdLFwiY2hpbGRyZW5cIj09YT92PXk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hP2g9eTpcInZhbHVlXCI9PWE/dz15OlwiY2hlY2tlZFwiPT1hP189eTpjJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB5fHxtW2FdPT09eXx8Tih1LGEseSxtW2FdLG8pO2lmKGgpY3x8cCYmKGguX19odG1sPT1wLl9faHRtbHx8aC5fX2h0bWw9PXUuaW5uZXJIVE1MKXx8KHUuaW5uZXJIVE1MPWguX19odG1sKSx0Ll9faz1bXTtlbHNlIGlmKHAmJih1LmlubmVySFRNTD1cIlwiKSxMKFwidGVtcGxhdGVcIj09dC50eXBlP3UuY29udGVudDp1LGcodik/djpbdl0sdCxpLHIsXCJmb3JlaWduT2JqZWN0XCI9PXg/XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI6byxlLGYsZT9lWzBdOmkuX19rJiYkKGksMCksYyxzKSxudWxsIT1lKWZvcihhPWUubGVuZ3RoO2EtLTspYihlW2FdKTtjfHwoYT1cInZhbHVlXCIsXCJwcm9ncmVzc1wiPT14JiZudWxsPT13P3UucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIik6bnVsbCE9dyYmKHchPT11W2FdfHxcInByb2dyZXNzXCI9PXgmJiF3fHxcIm9wdGlvblwiPT14JiZ3IT1tW2FdKSYmTih1LGEsdyxtW2FdLG8pLGE9XCJjaGVja2VkXCIsbnVsbCE9XyYmXyE9dVthXSYmTih1LGEsXyxtW2FdLG8pKX1yZXR1cm4gdX1mdW5jdGlvbiBKKG4sdSx0KXt0cnl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fX3U7aSYmbi5fX3UoKSxpJiZudWxsPT11fHwobi5fX3U9bih1KSl9ZWxzZSBuLmN1cnJlbnQ9dX1jYXRjaChuKXtsLl9fZShuLHQpfX1mdW5jdGlvbiBLKG4sdSx0KXt2YXIgaSxyO2lmKGwudW5tb3VudCYmbC51bm1vdW50KG4pLChpPW4ucmVmKSYmKGkuY3VycmVudCYmaS5jdXJyZW50IT1uLl9fZXx8SihpLG51bGwsdSkpLG51bGwhPShpPW4uX19jKSl7aWYoaS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7aS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKG4pe2wuX19lKG4sdSl9aS5iYXNlPWkuX19QPW51bGx9aWYoaT1uLl9faylmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0mJksoaVtyXSx1LHR8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4udHlwZSk7dHx8YihuLl9fZSksbi5fX2M9bi5fXz1uLl9fZT12b2lkIDB9ZnVuY3Rpb24gUShuLGwsdSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3Iobix1KX1mdW5jdGlvbiBSKHUsdCxpKXt2YXIgcixvLGUsZjt0PT1kb2N1bWVudCYmKHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxsLl9fJiZsLl9fKHUsdCksbz0ocj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpKT9udWxsOmkmJmkuX19rfHx0Ll9fayxlPVtdLGY9W10scSh0LHU9KCFyJiZpfHx0KS5fX2s9ayhTLG51bGwsW3VdKSxvfHxkLGQsdC5uYW1lc3BhY2VVUkksIXImJmk/W2ldOm8/bnVsbDp0LmZpcnN0Q2hpbGQ/bi5jYWxsKHQuY2hpbGROb2Rlcyk6bnVsbCxlLCFyJiZpP2k6bz9vLl9fZTp0LmZpcnN0Q2hpbGQscixmKSxEKGUsdSxmKX1mdW5jdGlvbiBVKG4sbCl7UihuLGwsVSl9ZnVuY3Rpb24gVyhsLHUsdCl7dmFyIGkscixvLGUsZj1tKHt9LGwucHJvcHMpO2ZvcihvIGluIGwudHlwZSYmbC50eXBlLmRlZmF1bHRQcm9wcyYmKGU9bC50eXBlLmRlZmF1bHRQcm9wcyksdSlcImtleVwiPT1vP2k9dVtvXTpcInJlZlwiPT1vP3I9dVtvXTpmW29dPXZvaWQgMD09PXVbb10mJm51bGwhPWU/ZVtvXTp1W29dO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihmLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLHgobC50eXBlLGYsaXx8bC5rZXkscnx8bC5yZWYsbnVsbCl9ZnVuY3Rpb24gWChuKXtmdW5jdGlvbiBsKG4pe3ZhciB1LHQ7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwodT1uZXcgU2V0LCh0PXt9KVtsLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiB0fSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dT1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLnByb3BzLnZhbHVlIT1uLnZhbHVlJiZ1LmZvckVhY2goZnVuY3Rpb24obil7bi5fX2U9ITAsQShuKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihuKXt1LmFkZChuKTt2YXIgbD1uLmNvbXBvbmVudFdpbGxVbm1vdW50O24uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt1JiZ1LmRlbGV0ZShuKSxsJiZsLmNhbGwobil9fSksbi5jaGlsZHJlbn1yZXR1cm4gbC5fX2M9XCJfX2NDXCIreSsrLGwuX189bixsLlByb3ZpZGVyPWwuX19sPShsLkNvbnN1bWVyPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uY2hpbGRyZW4obCl9KS5jb250ZXh0VHlwZT1sLGx9bj13LnNsaWNlLGw9e19fZTpmdW5jdGlvbihuLGwsdSx0KXtmb3IodmFyIGkscixvO2w9bC5fXzspaWYoKGk9bC5fX2MpJiYhaS5fXyl0cnl7aWYoKHI9aS5jb25zdHJ1Y3RvcikmJm51bGwhPXIuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yJiYoaS5zZXRTdGF0ZShyLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihuKSksbz1pLl9fZCksbnVsbCE9aS5jb21wb25lbnREaWRDYXRjaCYmKGkuY29tcG9uZW50RGlkQ2F0Y2gobix0fHx7fSksbz1pLl9fZCksbylyZXR1cm4gaS5fX0U9aX1jYXRjaChsKXtuPWx9dGhyb3cgbn19LHU9MCx0PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZ2b2lkIDA9PT1uLmNvbnN0cnVjdG9yfSxDLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihuLGwpe3ZhciB1O3U9bnVsbCE9dGhpcy5fX3MmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPW0oe30sdGhpcy5zdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49bihtKHt9LHUpLHRoaXMucHJvcHMpKSxuJiZtKHUsbiksbnVsbCE9biYmdGhpcy5fX3YmJihsJiZ0aGlzLl9zYi5wdXNoKGwpLEEodGhpcykpfSxDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLG4mJnRoaXMuX19oLnB1c2gobiksQSh0aGlzKSl9LEMucHJvdG90eXBlLnJlbmRlcj1TLGk9W10sbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxlPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uX192Ll9fYi1sLl9fdi5fX2J9LEguX19yPTAsZj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLGM9XCJfX2RcIitmLHM9XCJfX2FcIitmLGE9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksaD0wLHA9VighMSksdj1WKCEwKSx5PTA7ZXhwb3J0e0MgYXMgQ29tcG9uZW50LFMgYXMgRnJhZ21lbnQsVyBhcyBjbG9uZUVsZW1lbnQsWCBhcyBjcmVhdGVDb250ZXh0LGsgYXMgY3JlYXRlRWxlbWVudCxNIGFzIGNyZWF0ZVJlZixrIGFzIGgsVSBhcyBoeWRyYXRlLHQgYXMgaXNWYWxpZEVsZW1lbnQsbCBhcyBvcHRpb25zLFIgYXMgcmVuZGVyLEYgYXMgdG9DaGlsZEFycmF5fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWFjdC5tb2R1bGUuanMubWFwXG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1uLGU9Yy5fX2IsYT1jLl9fcix2PWMuZGlmZmVkLGw9Yy5fX2MsbT1jLnVubW91bnQscz1jLl9fO2Z1bmN0aW9uIHAobix0KXtjLl9faCYmYy5fX2gocixuLG98fHQpLG89MDt2YXIgdT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gbj49dS5fXy5sZW5ndGgmJnUuX18ucHVzaCh7fSksdS5fX1tuXX1mdW5jdGlvbiBkKG4pe3JldHVybiBvPTEsaChELG4pfWZ1bmN0aW9uIGgobix1LGkpe3ZhciBvPXAodCsrLDIpO2lmKG8udD1uLCFvLl9fYyYmKG8uX189W2k/aSh1KTpEKHZvaWQgMCx1KSxmdW5jdGlvbihuKXt2YXIgdD1vLl9fTj9vLl9fTlswXTpvLl9fWzBdLHI9by50KHQsbik7dCE9PXImJihvLl9fTj1bcixvLl9fWzFdXSxvLl9fYy5zZXRTdGF0ZSh7fSkpfV0sby5fX2M9ciwhci5fX2YpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9fY30pO2lmKHUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIW4uX19OfSkpcmV0dXJuIWN8fGMuY2FsbCh0aGlzLG4sdCxyKTt2YXIgaT1vLl9fYy5wcm9wcyE9PW47cmV0dXJuIHUuc29tZShmdW5jdGlvbihuKXtpZihuLl9fTil7dmFyIHQ9bi5fX1swXTtuLl9fPW4uX19OLG4uX19OPXZvaWQgMCx0IT09bi5fX1swXSYmKGk9ITApfX0pLGMmJmMuY2FsbCh0aGlzLG4sdCxyKXx8aX07ci5fX2Y9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiB5KG4sdSl7dmFyIGk9cCh0KyssMyk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19ILl9faC5wdXNoKGkpKX1mdW5jdGlvbiBfKG4sdSl7dmFyIGk9cCh0KyssNCk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19oLnB1c2goaSkpfWZ1bmN0aW9uIEEobil7cmV0dXJuIG89NSxUKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBGKG4sdCxyKXtvPTYsXyhmdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciByPW4odCgpKTtyZXR1cm4gZnVuY3Rpb24oKXtuKG51bGwpLHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHImJnIoKX19aWYobilyZXR1cm4gbi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH19LG51bGw9PXI/cjpyLmNvbmNhdChuKSl9ZnVuY3Rpb24gVChuLHIpe3ZhciB1PXAodCsrLDcpO3JldHVybiBDKHUuX19ILHIpJiYodS5fXz1uKCksdS5fX0g9cix1Ll9faD1uKSx1Ll9ffWZ1bmN0aW9uIHEobix0KXtyZXR1cm4gbz04LFQoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24geChuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9cCh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIFAobix0KXtjLnVzZURlYnVnVmFsdWUmJmMudXNlRGVidWdWYWx1ZSh0P3Qobik6bil9ZnVuY3Rpb24gYihuKXt2YXIgdT1wKHQrKywxMCksaT1kKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBnKCl7dmFyIG49cCh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGooKXtmb3IodmFyIG47bj1mLnNoaWZ0KCk7KXt2YXIgdD1uLl9fSDtpZihuLl9fUCYmdCl0cnl7dC5fX2guc29tZSh6KSx0Ll9faC5zb21lKEIpLHQuX19oPVtdfWNhdGNoKHIpe3QuX19oPVtdLGMuX19lKHIsbi5fX3YpfX19Yy5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LGMuX189ZnVuY3Rpb24obix0KXtuJiZ0Ll9fayYmdC5fX2suX19tJiYobi5fX209dC5fX2suX19tKSxzJiZzKG4sdCl9LGMuX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLnNvbWUoZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLnU9bi5fX049dm9pZCAwfSkpOihpLl9faC5zb21lKHopLGkuX19oLnNvbWUoQiksaS5fX2g9W10sdD0wKSksdT1yfSxjLmRpZmZlZD1mdW5jdGlvbihuKXt2JiZ2KG4pO3ZhciB0PW4uX19jO3QmJnQuX19IJiYodC5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2godCkmJmk9PT1jLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPWMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8dykoaikpLHQuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7bi51JiYobi5fX0g9bi51KSxuLnU9dm9pZCAwfSkpLHU9cj1udWxsfSxjLl9fYz1mdW5jdGlvbihuLHQpe3Quc29tZShmdW5jdGlvbihuKXt0cnl7bi5fX2guc29tZSh6KSxuLl9faD1uLl9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fEIobil9KX1jYXRjaChyKXt0LnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSx0PVtdLGMuX19lKHIsbi5fX3YpfX0pLGwmJmwobix0KX0sYy51bm1vdW50PWZ1bmN0aW9uKG4pe20mJm0obik7dmFyIHQscj1uLl9fYztyJiZyLl9fSCYmKHIuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7dHJ5e3oobil9Y2F0Y2gobil7dD1ufX0pLHIuX19IPXZvaWQgMCx0JiZjLl9fZSh0LHIuX192KSl9O3ZhciBrPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiB3KG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksayYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMzUpO2smJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24geihuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiBCKG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiBDKG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEQobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7cSBhcyB1c2VDYWxsYmFjayx4IGFzIHVzZUNvbnRleHQsUCBhcyB1c2VEZWJ1Z1ZhbHVlLHkgYXMgdXNlRWZmZWN0LGIgYXMgdXNlRXJyb3JCb3VuZGFyeSxnIGFzIHVzZUlkLEYgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSxfIGFzIHVzZUxheW91dEVmZmVjdCxUIGFzIHVzZU1lbW8saCBhcyB1c2VSZWR1Y2VyLEEgYXMgdXNlUmVmLGQgYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwKICAgICJ2YXIgaT1TeW1ib2wuZm9yKFwicHJlYWN0LXNpZ25hbHNcIik7ZnVuY3Rpb24gdCgpe2lmKCEocz4xKSl7dmFyIGksdD0hMTshZnVuY3Rpb24oKXt2YXIgaT1jO2M9dm9pZCAwO3doaWxlKHZvaWQgMCE9PWkpe2lmKGkuUy52PT09aS52KWkuUy5pPWkuaTtpPWkub319KCk7d2hpbGUodm9pZCAwIT09aCl7dmFyIG49aDtoPXZvaWQgMDt2Kys7d2hpbGUodm9pZCAwIT09bil7dmFyIHI9bi51O24udT12b2lkIDA7bi5mJj0tMztpZighKDgmbi5mKSYmdyhuKSl0cnl7bi5jKCl9Y2F0Y2gobil7aWYoIXQpe2k9bjt0PSEwfX1uPXJ9fXY9MDtzLS07aWYodCl0aHJvdyBpfWVsc2Ugcy0tfWZ1bmN0aW9uIG4oaSl7aWYocz4wKXJldHVybiBpKCk7ZT0rK3U7cysrO3RyeXtyZXR1cm4gaSgpfWZpbmFsbHl7dCgpfX12YXIgcj12b2lkIDA7ZnVuY3Rpb24gbyhpKXt2YXIgdD1yO3I9dm9pZCAwO3RyeXtyZXR1cm4gaSgpfWZpbmFsbHl7cj10fX12YXIgZixoPXZvaWQgMCxzPTAsdj0wLHU9MCxlPTAsYz12b2lkIDAsZD0wO2Z1bmN0aW9uIGEoaSl7aWYodm9pZCAwIT09cil7dmFyIHQ9aS5uO2lmKHZvaWQgMD09PXR8fHQudCE9PXIpe3Q9e2k6MCxTOmkscDpyLnMsbjp2b2lkIDAsdDpyLGU6dm9pZCAwLHg6dm9pZCAwLHI6dH07aWYodm9pZCAwIT09ci5zKXIucy5uPXQ7ci5zPXQ7aS5uPXQ7aWYoMzImci5mKWkuUyh0KTtyZXR1cm4gdH1lbHNlIGlmKC0xPT09dC5pKXt0Lmk9MDtpZih2b2lkIDAhPT10Lm4pe3Qubi5wPXQucDtpZih2b2lkIDAhPT10LnApdC5wLm49dC5uO3QucD1yLnM7dC5uPXZvaWQgMDtyLnMubj10O3Iucz10fXJldHVybiB0fX19ZnVuY3Rpb24gbChpLHQpe3RoaXMudj1pO3RoaXMuaT0wO3RoaXMubj12b2lkIDA7dGhpcy50PXZvaWQgMDt0aGlzLmw9MDt0aGlzLlc9bnVsbD09dD92b2lkIDA6dC53YXRjaGVkO3RoaXMuWj1udWxsPT10P3ZvaWQgMDp0LnVud2F0Y2hlZDt0aGlzLm5hbWU9bnVsbD09dD92b2lkIDA6dC5uYW1lfWwucHJvdG90eXBlLmJyYW5kPWk7bC5wcm90b3R5cGUuaD1mdW5jdGlvbigpe3JldHVybiEwfTtsLnByb3RvdHlwZS5TPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXMsbj10aGlzLnQ7aWYobiE9PWkmJnZvaWQgMD09PWkuZSl7aS54PW47dGhpcy50PWk7aWYodm9pZCAwIT09biluLmU9aTtlbHNlIG8oZnVuY3Rpb24oKXt2YXIgaTtudWxsPT0oaT10LlcpfHxpLmNhbGwodCl9KX19O2wucHJvdG90eXBlLlU9ZnVuY3Rpb24oaSl7dmFyIHQ9dGhpcztpZih2b2lkIDAhPT10aGlzLnQpe3ZhciBuPWkuZSxyPWkueDtpZih2b2lkIDAhPT1uKXtuLng9cjtpLmU9dm9pZCAwfWlmKHZvaWQgMCE9PXIpe3IuZT1uO2kueD12b2lkIDB9aWYoaT09PXRoaXMudCl7dGhpcy50PXI7aWYodm9pZCAwPT09cilvKGZ1bmN0aW9uKCl7dmFyIGk7bnVsbD09KGk9dC5aKXx8aS5jYWxsKHQpfSl9fX07bC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXM7cmV0dXJuIGooZnVuY3Rpb24oKXt2YXIgbj10LnZhbHVlLG89cjtyPXZvaWQgMDt0cnl7aShuKX1maW5hbGx5e3I9b319LHtuYW1lOlwic3ViXCJ9KX07bC5wcm90b3R5cGUudmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTtsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlK1wiXCJ9O2wucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTtsLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcztyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBpLnZhbHVlfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3RvdHlwZSxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe3ZhciBpPWEodGhpcyk7aWYodm9pZCAwIT09aSlpLmk9dGhpcy5pO3JldHVybiB0aGlzLnZ9LHNldDpmdW5jdGlvbihpKXtpZihpIT09dGhpcy52KXtpZih2PjEwMCl0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZFwiKTshZnVuY3Rpb24oaSl7aWYoMCE9PXMmJjA9PT12KWlmKGkubCE9PWUpe2kubD1lO2M9e1M6aSx2OmkudixpOmkuaSxvOmN9fX0odGhpcyk7dGhpcy52PWk7dGhpcy5pKys7ZCsrO3MrKzt0cnl7Zm9yKHZhciBuPXRoaXMudDt2b2lkIDAhPT1uO249bi54KW4udC5OKCl9ZmluYWxseXt0KCl9fX19KTtmdW5jdGlvbiB5KGksdCl7cmV0dXJuIG5ldyBsKGksdCl9ZnVuY3Rpb24gdyhpKXtmb3IodmFyIHQ9aS5zO3ZvaWQgMCE9PXQ7dD10Lm4paWYodC5TLmkhPT10Lml8fCF0LlMuaCgpfHx0LlMuaSE9PXQuaSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfKGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubil7dmFyIG49dC5TLm47aWYodm9pZCAwIT09bil0LnI9bjt0LlMubj10O3QuaT0tMTtpZih2b2lkIDA9PT10Lm4pe2kucz10O2JyZWFrfX19ZnVuY3Rpb24gYihpKXt2YXIgdD1pLnMsbj12b2lkIDA7d2hpbGUodm9pZCAwIT09dCl7dmFyIHI9dC5wO2lmKC0xPT09dC5pKXt0LlMuVSh0KTtpZih2b2lkIDAhPT1yKXIubj10Lm47aWYodm9pZCAwIT09dC5uKXQubi5wPXJ9ZWxzZSBuPXQ7dC5TLm49dC5yO2lmKHZvaWQgMCE9PXQucil0LnI9dm9pZCAwO3Q9cn1pLnM9bn1mdW5jdGlvbiBwKGksdCl7bC5jYWxsKHRoaXMsdm9pZCAwKTt0aGlzLng9aTt0aGlzLnM9dm9pZCAwO3RoaXMuZz1kLTE7dGhpcy5mPTQ7dGhpcy5XPW51bGw9PXQ/dm9pZCAwOnQud2F0Y2hlZDt0aGlzLlo9bnVsbD09dD92b2lkIDA6dC51bndhdGNoZWQ7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZX1wLnByb3RvdHlwZT1uZXcgbDtwLnByb3RvdHlwZS5oPWZ1bmN0aW9uKCl7dGhpcy5mJj0tMztpZigxJnRoaXMuZilyZXR1cm4hMTtpZigzMj09KDM2JnRoaXMuZikpcmV0dXJuITA7dGhpcy5mJj0tNTtpZih0aGlzLmc9PT1kKXJldHVybiEwO3RoaXMuZz1kO3RoaXMuZnw9MTtpZih0aGlzLmk+MCYmIXcodGhpcykpe3RoaXMuZiY9LTI7cmV0dXJuITB9dmFyIGk9cjt0cnl7Xyh0aGlzKTtyPXRoaXM7dmFyIHQ9dGhpcy54KCk7aWYoMTYmdGhpcy5mfHx0aGlzLnYhPT10fHwwPT09dGhpcy5pKXt0aGlzLnY9dDt0aGlzLmYmPS0xNzt0aGlzLmkrK319Y2F0Y2goaSl7dGhpcy52PWk7dGhpcy5mfD0xNjt0aGlzLmkrK31yPWk7Yih0aGlzKTt0aGlzLmYmPS0yO3JldHVybiEwfTtwLnByb3RvdHlwZS5TPWZ1bmN0aW9uKGkpe2lmKHZvaWQgMD09PXRoaXMudCl7dGhpcy5mfD0zNjtmb3IodmFyIHQ9dGhpcy5zO3ZvaWQgMCE9PXQ7dD10Lm4pdC5TLlModCl9bC5wcm90b3R5cGUuUy5jYWxsKHRoaXMsaSl9O3AucHJvdG90eXBlLlU9ZnVuY3Rpb24oaSl7aWYodm9pZCAwIT09dGhpcy50KXtsLnByb3RvdHlwZS5VLmNhbGwodGhpcyxpKTtpZih2b2lkIDA9PT10aGlzLnQpe3RoaXMuZiY9LTMzO2Zvcih2YXIgdD10aGlzLnM7dm9pZCAwIT09dDt0PXQubil0LlMuVSh0KX19fTtwLnByb3RvdHlwZS5OPWZ1bmN0aW9uKCl7aWYoISgyJnRoaXMuZikpe3RoaXMuZnw9Njtmb3IodmFyIGk9dGhpcy50O3ZvaWQgMCE9PWk7aT1pLngpaS50Lk4oKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe2lmKDEmdGhpcy5mKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpO3ZhciBpPWEodGhpcyk7dGhpcy5oKCk7aWYodm9pZCAwIT09aSlpLmk9dGhpcy5pO2lmKDE2JnRoaXMuZil0aHJvdyB0aGlzLnY7cmV0dXJuIHRoaXMudn19KTtmdW5jdGlvbiBnKGksdCl7cmV0dXJuIG5ldyBwKGksdCl9ZnVuY3Rpb24gUyhpKXt2YXIgbj1pLm07aS5tPXZvaWQgMDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXtzKys7dmFyIG89cjtyPXZvaWQgMDt0cnl7bigpfWNhdGNoKHQpe2kuZiY9LTI7aS5mfD04O20oaSk7dGhyb3cgdH1maW5hbGx5e3I9bzt0KCl9fX1mdW5jdGlvbiBtKGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubil0LlMuVSh0KTtpLng9dm9pZCAwO2kucz12b2lkIDA7UyhpKX1mdW5jdGlvbiB4KGkpe2lmKHIhPT10aGlzKXRocm93IG5ldyBFcnJvcihcIk91dC1vZi1vcmRlciBlZmZlY3RcIik7Yih0aGlzKTtyPWk7dGhpcy5mJj0tMjtpZig4JnRoaXMuZiltKHRoaXMpO3QoKX1mdW5jdGlvbiBFKGksdCl7dGhpcy54PWk7dGhpcy5tPXZvaWQgMDt0aGlzLnM9dm9pZCAwO3RoaXMudT12b2lkIDA7dGhpcy5mPTMyO3RoaXMubmFtZT1udWxsPT10P3ZvaWQgMDp0Lm5hbWU7aWYoZilmLnB1c2godGhpcyl9RS5wcm90b3R5cGUuYz1mdW5jdGlvbigpe3ZhciBpPXRoaXMuUygpO3RyeXtpZig4JnRoaXMuZilyZXR1cm47aWYodm9pZCAwPT09dGhpcy54KXJldHVybjt2YXIgdD10aGlzLngoKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXRoaXMubT10fWZpbmFsbHl7aSgpfX07RS5wcm90b3R5cGUuUz1mdW5jdGlvbigpe2lmKDEmdGhpcy5mKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpO3RoaXMuZnw9MTt0aGlzLmYmPS05O1ModGhpcyk7Xyh0aGlzKTtzKys7dmFyIGk9cjtyPXRoaXM7cmV0dXJuIHguYmluZCh0aGlzLGkpfTtFLnByb3RvdHlwZS5OPWZ1bmN0aW9uKCl7aWYoISgyJnRoaXMuZikpe3RoaXMuZnw9Mjt0aGlzLnU9aDtoPXRoaXN9fTtFLnByb3RvdHlwZS5kPWZ1bmN0aW9uKCl7dGhpcy5mfD04O2lmKCEoMSZ0aGlzLmYpKW0odGhpcyl9O0UucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmQoKX07ZnVuY3Rpb24gaihpLHQpe3ZhciBuPW5ldyBFKGksdCk7dHJ5e24uYygpfWNhdGNoKGkpe24uZCgpO3Rocm93IGl9dmFyIHI9bi5kLmJpbmQobik7cltTeW1ib2wuZGlzcG9zZV09cjtyZXR1cm4gcn1mdW5jdGlvbiBDKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cyxyPXRoaXM7cmV0dXJuIG4oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHIsW10uc2xpY2UuY2FsbCh0KSl9KX0pfX1mdW5jdGlvbiBPKCl7dmFyIGk9ZjtmPVtdO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWY7aWYoZiYmaSlpPWkuY29uY2F0KGYpO2Y9aTtyZXR1cm4gdH19dmFyIGs9ZnVuY3Rpb24oaSl7Zm9yKHZhciB0IGluIGkpe3ZhciBuPWlbdF07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilpW3RdPUMobik7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4mJiEoXCJicmFuZFwiaW4gbikpayhuKX19O2Z1bmN0aW9uIFQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsbixyPU8oKTt0cnl7bj1pLmFwcGx5KHZvaWQgMCxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfWNhdGNoKGkpe2Y9dm9pZCAwO3Rocm93IGl9ZmluYWxseXt0PXIoKX1rKG4pO25bU3ltYm9sLmRpc3Bvc2VdPUMoZnVuY3Rpb24oKXtpZih0KWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV0uZGlzcG9zZSgpO3Q9dm9pZCAwfSk7cmV0dXJuIG59fWV4cG9ydHtwIGFzIENvbXB1dGVkLEUgYXMgRWZmZWN0LGwgYXMgU2lnbmFsLEMgYXMgYWN0aW9uLG4gYXMgYmF0Y2gsZyBhcyBjb21wdXRlZCxUIGFzIGNyZWF0ZU1vZGVsLGogYXMgZWZmZWN0LHkgYXMgc2lnbmFsLG8gYXMgdW50cmFja2VkfTsvLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYWxzLWNvcmUubW9kdWxlLmpzLm1hcFxuIiwKICAgICJpbXBvcnR7Q29tcG9uZW50IGFzIGksb3B0aW9ucyBhcyBuLGlzVmFsaWRFbGVtZW50IGFzIHIsRnJhZ21lbnQgYXMgdH1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlTWVtbyBhcyBvLHVzZVJlZiBhcyBlLHVzZUVmZmVjdCBhcyBmfWZyb21cInByZWFjdC9ob29rc1wiO2ltcG9ydHtlZmZlY3QgYXMgdSxTaWduYWwgYXMgYSxjb21wdXRlZCBhcyBjLHNpZ25hbCBhcyB2LGJhdGNoIGFzIHN9ZnJvbVwiQHByZWFjdC9zaWduYWxzLWNvcmVcIjtleHBvcnR7U2lnbmFsLGFjdGlvbixiYXRjaCxjb21wdXRlZCxjcmVhdGVNb2RlbCxlZmZlY3Qsc2lnbmFsLHVudHJhY2tlZH1mcm9tXCJAcHJlYWN0L3NpZ25hbHMtY29yZVwiO3ZhciBsLGQsaCxwPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJiEhd2luZG93Ll9fUFJFQUNUX1NJR05BTFNfREVWVE9PTFNfXyxtPVtdLF89W107dShmdW5jdGlvbigpe2w9dGhpcy5OfSkoKTtmdW5jdGlvbiBnKGkscil7bltpXT1yLmJpbmQobnVsbCxuW2ldfHxmdW5jdGlvbigpe30pfWZ1bmN0aW9uIGIoaSl7aWYoaCl7dmFyIG49aDtoPXZvaWQgMDtuKCl9aD1pJiZpLlMoKX1mdW5jdGlvbiB5KGkpe3ZhciBuPXRoaXMsdD1pLmRhdGEsZT11c2VTaWduYWwodCk7ZS52YWx1ZT10O3ZhciBmPW8oZnVuY3Rpb24oKXt2YXIgaT1uLHQ9bi5fX3Y7d2hpbGUodD10Ll9fKWlmKHQuX19jKXt0Ll9fYy5fXyRmfD00O2JyZWFrfXZhciBvPWMoZnVuY3Rpb24oKXt2YXIgaT1lLnZhbHVlLnZhbHVlO3JldHVybiAwPT09aT8wOiEwPT09aT9cIlwiOml8fFwiXCJ9KSxmPWMoZnVuY3Rpb24oKXtyZXR1cm4hQXJyYXkuaXNBcnJheShvLnZhbHVlKSYmIXIoby52YWx1ZSl9KSxhPXUoZnVuY3Rpb24oKXt0aGlzLk49RjtpZihmLnZhbHVlKXt2YXIgbj1vLnZhbHVlO2lmKGkuX192JiZpLl9fdi5fX2UmJjM9PT1pLl9fdi5fX2Uubm9kZVR5cGUpaS5fX3YuX19lLmRhdGE9bn19KSx2PW4uX18kdS5kO24uX18kdS5kPWZ1bmN0aW9uKCl7YSgpO3YuY2FsbCh0aGlzKX07cmV0dXJuW2Ysb119LFtdKSxhPWZbMF0sdj1mWzFdO3JldHVybiBhLnZhbHVlP3YucGVlaygpOnYudmFsdWV9eS5kaXNwbGF5TmFtZT1cIlJlYWN0aXZlVGV4dE5vZGVcIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp2b2lkIDB9LHR5cGU6e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp5fSxwcm9wczp7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBpPXRoaXM7cmV0dXJue2RhdGE6e2dldCB2YWx1ZSgpe3JldHVybiBpLnZhbHVlfX19fX0sX19iOntjb25maWd1cmFibGU6ITAsdmFsdWU6MX19KTtnKFwiX19iXCIsZnVuY3Rpb24oaSxuKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlKXt2YXIgcix0PW4ucHJvcHM7Zm9yKHZhciBvIGluIHQpaWYoXCJjaGlsZHJlblwiIT09byl7dmFyIGU9dFtvXTtpZihlIGluc3RhbmNlb2YgYSl7aWYoIXIpbi5fX25wPXI9e307cltvXT1lO3Rbb109ZS5wZWVrKCl9fX1pKG4pfSk7ZyhcIl9fclwiLGZ1bmN0aW9uKGksbil7aShuKTtpZihuLnR5cGUhPT10KXtiKCk7dmFyIHIsbz1uLl9fYztpZihvKXtvLl9fJGYmPS0yO2lmKHZvaWQgMD09PShyPW8uX18kdSkpby5fXyR1PXI9ZnVuY3Rpb24oaSxuKXt2YXIgcjt1KGZ1bmN0aW9uKCl7cj10aGlzfSx7bmFtZTpufSk7ci5jPWk7cmV0dXJuIHJ9KGZ1bmN0aW9uKCl7dmFyIGk7aWYocCludWxsPT0oaT1yLnkpfHxpLmNhbGwocik7by5fXyRmfD0xO28uc2V0U3RhdGUoe30pfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGU/bi50eXBlLmRpc3BsYXlOYW1lfHxuLnR5cGUubmFtZTpcIlwiKX1kPW87YihyKX19KTtnKFwiX19lXCIsZnVuY3Rpb24oaSxuLHIsdCl7YigpO2Q9dm9pZCAwO2kobixyLHQpfSk7ZyhcImRpZmZlZFwiLGZ1bmN0aW9uKGksbil7YigpO2Q9dm9pZCAwO3ZhciByO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUmJihyPW4uX19lKSl7dmFyIHQ9bi5fX25wLG89bi5wcm9wcztpZih0KXt2YXIgZT1yLlU7aWYoZSlmb3IodmFyIGYgaW4gZSl7dmFyIHU9ZVtmXTtpZih2b2lkIDAhPT11JiYhKGYgaW4gdCkpe3UuZCgpO2VbZl09dm9pZCAwfX1lbHNle2U9e307ci5VPWV9Zm9yKHZhciBhIGluIHQpe3ZhciBjPWVbYV0sdj10W2FdO2lmKHZvaWQgMD09PWMpe2M9dyhyLGEsdik7ZVthXT1jfWVsc2UgYy5vKHYsbyl9Zm9yKHZhciBzIGluIHQpb1tzXT10W3NdfX1pKG4pfSk7ZnVuY3Rpb24gdyhpLG4scix0KXt2YXIgbz1uIGluIGkmJnZvaWQgMD09PWkub3duZXJTVkdFbGVtZW50LGU9dihyKSxmPXIucGVlaygpO3JldHVybntvOmZ1bmN0aW9uKGksbil7ZS52YWx1ZT1pO2Y9aS5wZWVrKCl9LGQ6dShmdW5jdGlvbigpe3RoaXMuTj1GO3ZhciByPWUudmFsdWUudmFsdWU7aWYoZiE9PXIpe2Y9dm9pZCAwO2lmKG8paVtuXT1yO2Vsc2UgaWYobnVsbCE9ciYmKCExIT09cnx8XCItXCI9PT1uWzRdKSlpLnNldEF0dHJpYnV0ZShuLHIpO2Vsc2UgaS5yZW1vdmVBdHRyaWJ1dGUobil9ZWxzZSBmPXZvaWQgMH0pfX1nKFwidW5tb3VudFwiLGZ1bmN0aW9uKGksbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSl7dmFyIHI9bi5fX2U7aWYocil7dmFyIHQ9ci5VO2lmKHQpe3IuVT12b2lkIDA7Zm9yKHZhciBvIGluIHQpe3ZhciBlPXRbb107aWYoZSllLmQoKX19fW4uX19ucD12b2lkIDB9ZWxzZXt2YXIgZj1uLl9fYztpZihmKXt2YXIgdT1mLl9fJHU7aWYodSl7Zi5fXyR1PXZvaWQgMDt1LmQoKX19fWkobil9KTtnKFwiX19oXCIsZnVuY3Rpb24oaSxuLHIsdCl7aWYodDwzfHw5PT09dCluLl9fJGZ8PTI7aShuLHIsdCl9KTtpLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oaSxuKXtpZih0aGlzLl9fUilyZXR1cm4hMDt2YXIgcj10aGlzLl9fJHUsdD1yJiZ2b2lkIDAhPT1yLnM7Zm9yKHZhciBvIGluIG4pcmV0dXJuITA7aWYodGhpcy5fX2Z8fFwiYm9vbGVhblwiPT10eXBlb2YgdGhpcy51JiYhMD09PXRoaXMudSl7dmFyIGU9MiZ0aGlzLl9fJGY7aWYoISh0fHxlfHw0JnRoaXMuX18kZikpcmV0dXJuITA7aWYoMSZ0aGlzLl9fJGYpcmV0dXJuITB9ZWxzZXtpZighKHR8fDQmdGhpcy5fXyRmKSlyZXR1cm4hMDtpZigzJnRoaXMuX18kZilyZXR1cm4hMH1mb3IodmFyIGYgaW4gaSlpZihcIl9fc291cmNlXCIhPT1mJiZpW2ZdIT09dGhpcy5wcm9wc1tmXSlyZXR1cm4hMDtmb3IodmFyIHUgaW4gdGhpcy5wcm9wcylpZighKHUgaW4gaSkpcmV0dXJuITA7cmV0dXJuITF9O2Z1bmN0aW9uIHVzZVNpZ25hbChpLG4pe3JldHVybiBvKGZ1bmN0aW9uKCl7cmV0dXJuIHYoaSxuKX0sW10pfWZ1bmN0aW9uIHVzZUNvbXB1dGVkKGksbil7dmFyIHI9ZShpKTtyLmN1cnJlbnQ9aTtkLl9fJGZ8PTQ7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gYyhmdW5jdGlvbigpe3JldHVybiByLmN1cnJlbnQoKX0sbil9LFtdKX12YXIgaz1cInVuZGVmaW5lZFwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3NldFRpbWVvdXQ6ZnVuY3Rpb24oaSl7dmFyIG49ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocik7Y2FuY2VsQW5pbWF0aW9uRnJhbWUodCk7aSgpfSxyPXNldFRpbWVvdXQobiwzNSksdD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9LHE9ZnVuY3Rpb24oaSl7cXVldWVNaWNyb3Rhc2soZnVuY3Rpb24oKXtxdWV1ZU1pY3JvdGFzayhpKX0pfTtmdW5jdGlvbiBBKCl7cyhmdW5jdGlvbigpe3ZhciBpO3doaWxlKGk9bS5zaGlmdCgpKWwuY2FsbChpKX0pfWZ1bmN0aW9uIFQoKXtpZigxPT09bS5wdXNoKHRoaXMpKShuLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8aykoQSl9ZnVuY3Rpb24geCgpe3MoZnVuY3Rpb24oKXt2YXIgaTt3aGlsZShpPV8uc2hpZnQoKSlsLmNhbGwoaSl9KX1mdW5jdGlvbiBGKCl7aWYoMT09PV8ucHVzaCh0aGlzKSkobi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHEpKHgpfWZ1bmN0aW9uIHVzZVNpZ25hbEVmZmVjdChpLG4pe3ZhciByPWUoaSk7ci5jdXJyZW50PWk7ZihmdW5jdGlvbigpe3JldHVybiB1KGZ1bmN0aW9uKCl7dGhpcy5OPVQ7cmV0dXJuIHIuY3VycmVudCgpfSxuKX0sW10pfWZ1bmN0aW9uIE0oaSl7dmFyIG49byhmdW5jdGlvbigpe3JldHVybiBpKCl9LFtdKTtmKGZ1bmN0aW9uKCl7cmV0dXJuIG5bU3ltYm9sLmRpc3Bvc2VdfSxbbl0pO3JldHVybiBufWV4cG9ydHt1c2VDb21wdXRlZCxNIGFzIHVzZU1vZGVsLHVzZVNpZ25hbCx1c2VTaWduYWxFZmZlY3R9Oy8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpZ25hbHMubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEdsb2JhbCBlcnJvciBzdXJmYWNlIGZvciBhY3Rpb24gaGFuZGxlcnMuXG4gKlxuICogQWN0aW9ucyB0aGF0IGZhaWwgc2V0IHRoZSBlcnJvclN0YXRlIHNpZ25hbCB2aWEgYHN1Ym1pdEVycm9yYDsgYSBgPFRvYXN0PmBcbiAqIGNvbXBvbmVudCBjb25zdW1lcyB0aGF0IHNpZ25hbCBhbmQgcmVuZGVycyBhIGRpc21pc3NhYmxlIG1lc3NhZ2UuIEhhbmRsZXJzXG4gKiB0aGF0IGNhdGNoIGV4cGVjdGVkIGZhaWx1cmVzICh2YWxpZGF0aW9uLCBxdW90YSkgbWF5IGNhbGwgYHNldEVycm9yYCBkaXJlY3RseS5cbiAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5cbmV4cG9ydCB0eXBlIEVycm9yU2V2ZXJpdHkgPSBcImVycm9yXCIgfCBcIndhcm5pbmdcIiB8IFwiaW5mb1wiO1xuXG5leHBvcnQgdHlwZSBFcnJvckVudHJ5ID0ge1xuICBpZDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNldmVyaXR5OiBFcnJvclNldmVyaXR5O1xuICBhY3Rpb24/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGVycm9yU3RhdGUgPSBzaWduYWw8RXJyb3JFbnRyeVtdPihbXSk7XG5cbmxldCBuZXh0SWQgPSAwO1xuZnVuY3Rpb24gYWxsb2NJZCgpOiBzdHJpbmcge1xuICBuZXh0SWQgKz0gMTtcbiAgcmV0dXJuIGBwb2xseS1lcnItJHtuZXh0SWR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVycm9yKFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIG9wdHM6IHsgc2V2ZXJpdHk/OiBFcnJvclNldmVyaXR5OyBhY3Rpb24/OiBzdHJpbmcgfSA9IHt9XG4pOiBzdHJpbmcge1xuICBjb25zdCBlbnRyeTogRXJyb3JFbnRyeSA9IHtcbiAgICBpZDogYWxsb2NJZCgpLFxuICAgIG1lc3NhZ2UsXG4gICAgc2V2ZXJpdHk6IG9wdHMuc2V2ZXJpdHkgPz8gXCJlcnJvclwiLFxuICAgIGFjdGlvbjogb3B0cy5hY3Rpb24sXG4gICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICB9O1xuICBlcnJvclN0YXRlLnZhbHVlID0gWy4uLmVycm9yU3RhdGUudmFsdWUsIGVudHJ5XTtcbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFcnJvcihpZD86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9yU3RhdGUudmFsdWUgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cbiAgZXJyb3JTdGF0ZS52YWx1ZSA9IGVycm9yU3RhdGUudmFsdWUuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBpZCk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgYW4gYWN0aW9uJ3MgY2F0Y2ggYmxvY2suXG4gKiBMb2dzIHRoZSBhY3Rpb24gbmFtZSArIGVycm9yIGFuZCBzdXJmYWNlcyBhIHVzZXItdmlzaWJsZSBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VibWl0RXJyb3IoYWN0aW9uOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gIHJldHVybiBzZXRFcnJvcihtZXNzYWdlLCB7IGFjdGlvbiwgc2V2ZXJpdHk6IFwiZXJyb3JcIiB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdmVybGF5IHJlZ2lzdHJ5LlxuICpcbiAqIFRyYWNrcyB0aGUgc3RhY2sgb2Ygb3BlbiBvdmVybGF5cyAobW9kYWxzLCBwb3BvdmVycywgY29uZmlybSBkaWFsb2dzKSBzb1xuICogRXNjYXBlIGNhbiBjbG9zZSB0aGUgdG9wbW9zdCBhbmQgYGRhdGEtb3ZlcmxheS1pZGAtYmFzZWQgRE9NIHNjYW5zIGhhdmVcbiAqIGEgbWlycm9yIGluIG1lbW9yeS4gRWFjaCBlbnRyeSBzdG9yZXMgYW4gaWQgcGx1cyBhbiBvcHRpb25hbCBjbG9zZVxuICogY2FsbGJhY2s7IGBjbG9zZVRvcE92ZXJsYXlgIGludm9rZXMgdGhlIGNhbGxiYWNrIGFuZCBwb3BzIHRoZSBlbnRyeS5cbiAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlFbnRyeSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBzdGFjayA9IHNpZ25hbDxPdmVybGF5RW50cnlbXT4oW10pO1xuXG4vKiogQ3VycmVudCBvdmVybGF5IHN0YWNrIGFzIGEgcmVhZC1vbmx5IHNuYXBzaG90LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJsYXlTdGFjaygpOiByZWFkb25seSBPdmVybGF5RW50cnlbXSB7XG4gIHJldHVybiBzdGFjay52YWx1ZTtcbn1cblxuLyoqIElzIGFueSBvdmVybGF5IGN1cnJlbnRseSBvcGVuPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc09wZW5PdmVybGF5KCk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3RhY2sudmFsdWUubGVuZ3RoID4gMDtcbn1cblxuLyoqIFRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciB1bmRlZmluZWQgaWYgZW1wdHkuICovXG5leHBvcnQgZnVuY3Rpb24gdG9wT3ZlcmxheSgpOiBPdmVybGF5RW50cnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBzID0gc3RhY2sudmFsdWU7XG4gIHJldHVybiBzW3MubGVuZ3RoIC0gMV07XG59XG5cbi8qKiBQdXNoIGFuIG92ZXJsYXkgb250byB0aGUgc3RhY2suIFJldHVybnMgdGhlIHBvcHBlZCBlbnRyeSB3aGVuIGNsb3NlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXNoT3ZlcmxheShlbnRyeTogT3ZlcmxheUVudHJ5KTogdm9pZCB7XG4gIHN0YWNrLnZhbHVlID0gWy4uLnN0YWNrLnZhbHVlLCBlbnRyeV07XG59XG5cbi8qKiBQb3AgYSBzcGVjaWZpYyBvdmVybGF5IGJ5IGlkIChvciB0aGUgdG9wIGlmIG5vIGlkIGdpdmVuKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3BPdmVybGF5KGlkPzogc3RyaW5nKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHN0YWNrLnZhbHVlO1xuICBpZiAocy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdG9wID0gc1tzLmxlbmd0aCAtIDFdO1xuICAgIHN0YWNrLnZhbHVlID0gcy5zbGljZSgwLCAtMSk7XG4gICAgcmV0dXJuIHRvcDtcbiAgfVxuICBjb25zdCBpZHggPSBzLmZpbmRJbmRleCgoZSkgPT4gZS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZW50cnkgPSBzW2lkeF07XG4gIHN0YWNrLnZhbHVlID0gWy4uLnMuc2xpY2UoMCwgaWR4KSwgLi4ucy5zbGljZShpZHggKyAxKV07XG4gIHJldHVybiBlbnRyeTtcbn1cblxuLyoqIENsb3NlIHRoZSB0b3Agb3ZlcmxheSBieSBjYWxsaW5nIGl0cyBvbkNsb3NlIGFuZCBwb3BwaW5nIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlVG9wT3ZlcmxheSgpOiBPdmVybGF5RW50cnkgfCB1bmRlZmluZWQge1xuICBjb25zdCB0b3AgPSB0b3BPdmVybGF5KCk7XG4gIGlmICghdG9wKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0b3Aub25DbG9zZT8uKCk7XG4gIHJldHVybiBwb3BPdmVybGF5KHRvcC5pZCk7XG59XG5cbi8qKiBSZXNldCB0aGUgc3RhY2suIEludGVuZGVkIGZvciB0ZXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldE92ZXJsYXlTdGFjaygpOiB2b2lkIHtcbiAgc3RhY2sudmFsdWUgPSBbXTtcbn1cbiIsCiAgICAiLyoqXG4gKiBFdmVudCBkZWxlZ2F0aW9uIGNvcmUuXG4gKlxuICogT25lIGRvY3VtZW50IGxpc3RlbmVyIGRpc3BhdGNoZXMgYGRhdGEtYWN0aW9uYCBldmVudHMgdG8gdHlwZWQgaGFuZGxlcnMuXG4gKiBXYWxrcyB1cCB0aGUgRE9NIHdpdGggYGNsb3Nlc3QoJ1tkYXRhLWFjdGlvbl0nKWAsIHBhcnNlcyBgZGF0YS1hY3Rpb24tKmBcbiAqIGF0dHJpYnV0ZXMgaW50byBhIGNhbWVsQ2FzZSBvYmplY3QsIGFuZCBoYW5kcyB0aGUgZGlzcGF0Y2ggdG8gdGhlIGNhbGxlci5cbiAqXG4gKiBGb3JtcyBhcmUgc2tpcHBlZCBvbiBjbGljayDigJQgYSBgPGZvcm0gZGF0YS1hY3Rpb249XCIuLi5cIj5gIHJlc3BvbmRzIHRvXG4gKiBzdWJtaXQgb25seSwgc28gY2xpY2tzIG9uIGZvcm0gY2hpbGRyZW4gZG9uJ3QgYnViYmxlIGludG8gaXRzIGFjdGlvbi5cbiAqIEVzY2FwZSBjbG9zZXMgdGhlIHRvcG1vc3Qgb3ZlcmxheSBieSBjYWxsaW5nIHRoZSBvdmVybGF5IHJlZ2lzdHJ5LlxuICogRW50ZXIvU3BhY2Ugb24gbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzIHdpdGggYGRhdGEtYWN0aW9uYCBmaXJlIHRoZVxuICogYWN0aW9uIChTcGFjZSBpcyBwcmV2ZW50ZWQgdG8gc3RvcCBwYWdlIHNjcm9sbCkuIENsaWNrIG91dHNpZGUgYW55XG4gKiBgW2RhdGEtb3ZlcmxheS1pZF1gIGVsZW1lbnQgYWxzbyBwb3BzIHRoZSB0b3Agb3ZlcmxheS5cbiAqL1xuXG5pbXBvcnQgeyBjbG9zZVRvcE92ZXJsYXkgYXMgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkgfSBmcm9tIFwiLi9vdmVybGF5LnRzXCI7XG5cbi8qKiBFbGVtZW50cyB0aGF0IG5hdGl2ZWx5IGZpcmUgY2xpY2sgb24gRW50ZXIvU3BhY2UuICovXG5leHBvcnQgY29uc3QgSU5URVJBQ1RJVkVfVEFHUyA9IG5ldyBTZXQoW1wiQlVUVE9OXCIsIFwiQVwiLCBcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl0pO1xuXG4vKiogRXZlbnQgdHlwZXMgdGhhdCBtYXkgdHJpZ2dlciBhIGRhdGEtYWN0aW9uIGRpc3BhdGNoLiAqL1xuZXhwb3J0IGNvbnN0IEFDVElPTl9FVkVOVF9UWVBFUyA9IG5ldyBTZXQoW1wiY2xpY2tcIiwgXCJzdWJtaXRcIiwgXCJjaGFuZ2VcIiwgXCJpbnB1dFwiXSk7XG5cbi8qKiBQYXJzZWQgYWN0aW9uIGRpc3BhdGNoIOKAlCB3aGF0IHRoZSBydW50aW1lIHJlc29sdmVzIGJlZm9yZSBpbnZva2luZyBhIGhhbmRsZXIuICovXG5leHBvcnQgdHlwZSBBY3Rpb25EaXNwYXRjaCA9IHtcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBldmVudDogRXZlbnQ7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG4vKipcbiAqIFBhcnNlIGBkYXRhLWFjdGlvbi0qYCBhdHRyaWJ1dGVzIGludG8gY2FtZWxDYXNlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBgZGF0YS1hY3Rpb24tdGV4dC1zZXQtaWQ9XCI0MlwiYCBiZWNvbWVzIGB7IHRleHRTZXRJZDogXCI0MlwiIH1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBY3Rpb25EYXRhKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBhdHRyIG9mIEFycmF5LmZyb20oZWxlbWVudC5hdHRyaWJ1dGVzKSkge1xuICAgIGlmIChhdHRyLm5hbWUuc3RhcnRzV2l0aChcImRhdGEtYWN0aW9uLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXR0ci5uYW1lXG4gICAgICAgIC5yZXBsYWNlKFwiZGF0YS1hY3Rpb24tXCIsIFwiXCIpXG4gICAgICAgIC5yZXBsYWNlKC8tKFthLXpdKS9nLCAoX206IHN0cmluZywgbGV0dGVyOiBzdHJpbmcpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKTtcbiAgICAgIGRhdGFba2V5XSA9IGF0dHIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIENsb3NlIHRoZSB0b3Btb3N0IG92ZXJsYXkgYnkgZGlzcGF0Y2hpbmcgYG92ZXJsYXk6Y2xvc2VgIG9uIGl0cyBlbGVtZW50LlxuICogT3ZlcmxheXMgbWFyayB0aGVtc2VsdmVzIHdpdGggYGRhdGEtb3ZlcmxheS1pZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVRvcE92ZXJsYXkoKTogdm9pZCB7XG4gIGNvbnN0IG92ZXJsYXlzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICBcIltkYXRhLW92ZXJsYXktaWRdOnBvcG92ZXItb3BlbiwgZGlhbG9nW2RhdGEtb3ZlcmxheS1pZF1bb3Blbl1cIlxuICApO1xuICBpZiAob3ZlcmxheXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGNvbnN0IHRvcE92ZXJsYXkgPSBvdmVybGF5c1tvdmVybGF5cy5sZW5ndGggLSAxXTtcbiAgaWYgKCF0b3BPdmVybGF5KSByZXR1cm47XG4gIHRvcE92ZXJsYXkuZGlzcGF0Y2hFdmVudChcbiAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvdmVybGF5OmNsb3NlXCIsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBkZXRhaWw6IHsgaWQ6IHRvcE92ZXJsYXkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vdmVybGF5LWlkXCIpIH0sXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgRE9NIGV2ZW50IHRvIGFuIEFjdGlvbkRpc3BhdGNoLCBvciBudWxsIGlmIG5vIGRhdGEtYWN0aW9uIG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQWN0aW9uKGV2ZW50OiBFdmVudCk6IEFjdGlvbkRpc3BhdGNoIHwgbnVsbCB7XG4gIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiBudWxsO1xuICBjb25zdCBhY3Rpb25FbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1hY3Rpb25dXCIpO1xuICBpZiAoIShhY3Rpb25FbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gbnVsbDtcbiAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBhY3Rpb25FbGVtZW50LnRhZ05hbWUgPT09IFwiRk9STVwiKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYWN0aW9uID0gYWN0aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFjdGlvblwiKTtcbiAgaWYgKCFhY3Rpb24pIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIGFjdGlvbixcbiAgICBlbGVtZW50OiBhY3Rpb25FbGVtZW50LFxuICAgIGV2ZW50LFxuICAgIGRhdGE6IHBhcnNlQWN0aW9uRGF0YShhY3Rpb25FbGVtZW50KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIGRvY3VtZW50LWxldmVsIGxpc3RlbmVycyBmb3IgdGhlIGRlbGVnYXRpb24gc3lzdGVtLlxuICogUmV0dXJucyBhIGNsZWFudXAgZnVuY3Rpb24gdGhhdCByZW1vdmVzIGV2ZXJ5IGxpc3RlbmVyIGl0IGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxFdmVudERlbGVnYXRpb24oXG4gIG9uRGlzcGF0Y2g6IChkaXNwYXRjaDogQWN0aW9uRGlzcGF0Y2gpID0+IHZvaWQsXG4gIG9wdGlvbnM6IHsgb25Fc2NhcGU/OiAoKSA9PiB2b2lkOyBvbk91dHNpZGVPdmVybGF5Q2xpY2s/OiAoKSA9PiB2b2lkIH0gPSB7fVxuKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGhhbmRsZUFjdGlvbkV2ZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgIGNvbnN0IGRpc3BhdGNoID0gcmVzb2x2ZUFjdGlvbihldmVudCk7XG4gICAgaWYgKGRpc3BhdGNoKSBvbkRpc3BhdGNoKGRpc3BhdGNoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgaWYgKG9wdGlvbnMub25Fc2NhcGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkVzY2FwZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkoKTtcbiAgICAgICAgY2xvc2VUb3BPdmVybGF5KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiB8fCBldmVudC5rZXkgPT09IFwiIFwiKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuICAgICAgaWYgKElOVEVSQUNUSVZFX1RBR1MuaGFzKHRhcmdldC50YWdOYW1lKSkgcmV0dXJuO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSByZXNvbHZlQWN0aW9uKGV2ZW50KTtcbiAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvbkRpc3BhdGNoKGRpc3BhdGNoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCEoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICBjb25zdCBjbGlja2VkT3ZlcmxheSA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiW2RhdGEtb3ZlcmxheS1pZF1cIik7XG4gICAgaWYgKGNsaWNrZWRPdmVybGF5KSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiYnV0dG9uW3BvcG92ZXJ0YXJnZXRdXCIpKSByZXR1cm47XG4gICAgaWYgKG9wdGlvbnMub25PdXRzaWRlT3ZlcmxheUNsaWNrKSB7XG4gICAgICBvcHRpb25zLm9uT3V0c2lkZU92ZXJsYXlDbGljaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbG9zZVRvcFJlZ2lzdHJ5T3ZlcmxheSgpO1xuICAgICAgY2xvc2VUb3BPdmVybGF5KCk7XG4gICAgfVxuICB9O1xuXG4gIGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIEFDVElPTl9FVkVOVF9UWVBFUykge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVBY3Rpb25FdmVudCk7XG4gIH1cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgaGFuZGxlTW91c2VEb3duKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIEFDVElPTl9FVkVOVF9UWVBFUykge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZUFjdGlvbkV2ZW50KTtcbiAgICB9XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBoYW5kbGVNb3VzZURvd24pO1xuICB9O1xufVxuIiwKICAgICIvKipcbiAqIEZvcm0gcHJpbWl0aXZlLlxuICpcbiAqIGBjcmVhdGVGb3JtYCByZXR1cm5zIGEgdHlwZWQgZm9ybSBzdG9yZTogcGVyLWZpZWxkIHNpZ25hbHMsIGFuIGFnZ3JlZ2F0ZWRcbiAqIHZhbHVlcyBzaWduYWwsIG9wZW4vY2xvc2Uvc3VibWl0IG1ldGhvZHMsIGFuZCB0aHJlZSBhdXRvLXJlZ2lzdGVyZWQgYWN0aW9uXG4gKiBoYW5kbGVycyAoYHtuYW1lfTpvcGVuYCwgYHtuYW1lfTpjbG9zZWAsIGB7bmFtZX06c3VibWl0YCkgdGhhdCBjYWxsZXJzIHNwcmVhZFxuICogaW50byB0aGVpciBnbG9iYWwgYWN0aW9uIHJlZ2lzdHJ5LlxuICpcbiAqIExpZmVjeWNsZTpcbiAqICAgb3BlbiAg4oaSIHJlc2V0cyBmaWVsZHMgdG8gaW5pdGlhbFZhbHVlcywgYXBwbGllcyBvbk9wZW4gb3ZlcnJpZGVzLFxuICogICAgICAgICAgIHNldHMgaXNPcGVuID0gdHJ1ZSwgcmVjb3JkcyBkYXRhLWFjdGlvbi0qIGRhdGEgaW4gb3BlblBhcmFtc1xuICogICB0eXBpbmcg4oaSIHVuY29udHJvbGxlZCBpbnB1dHMga2VlcCB0aGVpciBvd24gc3RhdGU7IGNvbnRyb2xsZWQgaW5wdXRzXG4gKiAgICAgICAgICAgd3JpdGUgZmllbGRzLlgudmFsdWUgZGlyZWN0bHlcbiAqICAgc3VibWl0IOKGkiByZWFkcyBGb3JtRGF0YSBmcm9tIHRoZSBmb3JtIGVsZW1lbnQsIG1lcmdlcyBpbnRvIGZpZWxkcyxcbiAqICAgICAgICAgICBydW5zIG9wdGlvbmFsIHZhbGlkYXRlLCBjYWxscyB1c2VyIG9uU3VibWl0IHdpdGggZmluYWwgdmFsdWVzLFxuICogICAgICAgICAgIGNsb3NlcyBvbiBzdWNjZXNzLCBzZXRzIGVycm9yU3RhdGUgb24gZmFpbHVyZVxuICogICBjbG9zZSAg4oaSIHJlc2V0cyBhbmQgc2V0cyBpc09wZW4gPSBmYWxzZVxuICogICBndWFyZCAg4oaSIGF1dG9ub21vdXMgZWZmZWN0OyBpZiBndWFyZCgpIHJldHVybnMgZmFsc2Ugd2hpbGUgb3BlbiwgY2xvc2UoKVxuICovXG5cbmltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIHR5cGUgUmVhZG9ubHlTaWduYWwsIHR5cGUgU2lnbmFsLCBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgeyBzdWJtaXRFcnJvciB9IGZyb20gXCIuL2Vycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cnkudHNcIjtcblxuZnVuY3Rpb24gaXNGb3JtRWxlbWVudCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IHRhcmdldCBpcyBIVE1MRm9ybUVsZW1lbnQge1xuICBpZiAoIXRhcmdldCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIEhUTUxGb3JtRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQ7XG4gIH1cbiAgY29uc3QgdCA9IHRhcmdldCBhcyB1bmtub3duIGFzIHsgdGFnTmFtZT86IHVua25vd24gfTtcbiAgcmV0dXJuIHR5cGVvZiB0LnRhZ05hbWUgPT09IFwic3RyaW5nXCIgJiYgdC50YWdOYW1lID09PSBcIkZPUk1cIjtcbn1cblxuZXhwb3J0IHR5cGUgRm9ybU9wZW5Db250ZXh0PFRTdG9yZXM+ID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3VibWl0Q29udGV4dDxUVmFsdWVzLCBUU3RvcmVzPiA9IHtcbiAgdmFsdWVzOiBUVmFsdWVzO1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtQ29uZmlnPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPiA9IHtcbiAgLyoqIFVzZWQgYXMgYWN0aW9uIG5hbWVzcGFjZTogYHtuYW1lfTpvcGVuYCwgYHtuYW1lfTpjbG9zZWAsIGB7bmFtZX06c3VibWl0YC4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICBpbml0aWFsVmFsdWVzOiBUVmFsdWVzO1xuICBvblN1Ym1pdDogKGN0eDogRm9ybVN1Ym1pdENvbnRleHQ8VFZhbHVlcywgVFN0b3Jlcz4pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAvKiogSW52b2tlZCBvbiBvcGVuOyByZXR1cm4gcGFydGlhbCBvdmVycmlkZXMgdG8gcHJlLXBvcHVsYXRlIGZpZWxkcy4gKi9cbiAgb25PcGVuPzogKGN0eDogRm9ybU9wZW5Db250ZXh0PFRTdG9yZXM+KSA9PiBQYXJ0aWFsPFRWYWx1ZXM+IHwgdW5kZWZpbmVkO1xuICAvKiogUmV0dXJucyBmYWxzZSB3aGlsZSBvcGVuIOKGkiBmb3JtIGF1dG8tY2xvc2VzIChlbnRpdHktZGVsZXRpb24gZ3VhcmQpLiAqL1xuICBndWFyZD86IChjdHg6IHsgc3RvcmVzOiBUU3RvcmVzIH0pID0+IGJvb2xlYW47XG4gIC8qKiBTeW5jaHJvbm91cyB2YWxpZGF0aW9uLiBSZXR1cm5pbmcga2V5cyBibG9ja3Mgc3VibWl0LiAqL1xuICB2YWxpZGF0ZT86ICh2YWx1ZXM6IFRWYWx1ZXMpID0+IFBhcnRpYWw8UmVjb3JkPGtleW9mIFRWYWx1ZXMsIHN0cmluZz4+IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdG9yZTxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgaXNPcGVuOiBSZWFkb25seVNpZ25hbDxib29sZWFuPjtcbiAgcmVhZG9ubHkgdmFsdWVzOiBSZWFkb25seVNpZ25hbDxUVmFsdWVzPjtcbiAgcmVhZG9ubHkgZmllbGRzOiB7IFtLIGluIGtleW9mIFRWYWx1ZXNdOiBTaWduYWw8VFZhbHVlc1tLXT4gfTtcbiAgcmVhZG9ubHkgZXJyb3JzOiBSZWFkb25seVNpZ25hbDxQYXJ0aWFsPFJlY29yZDxrZXlvZiBUVmFsdWVzLCBzdHJpbmc+Pj47XG4gIHJlYWRvbmx5IGlzU3VibWl0dGluZzogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IG9wZW5QYXJhbXM6IFJlYWRvbmx5U2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICBvcGVuKG92ZXJyaWRlPzogUGFydGlhbDxUVmFsdWVzPiwgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQ7XG4gIGNsb3NlKCk6IHZvaWQ7XG4gIHN1Ym1pdChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIExhdGUtYmluZHMgc3RvcmVzOyByZXF1aXJlZCBiZWZvcmUgZ3VhcmQvb25PcGVuL29uU3VibWl0IGNhbiBhY2Nlc3Mgc3RvcmVzLiAqL1xuICBiaW5kU3RvcmVzKGdldFN0b3JlczogKCkgPT4gVFN0b3Jlcyk6IHZvaWQ7XG4gIC8qKiBBY3Rpb24gaGFuZGxlciBlbnRyaWVzLiBTcHJlYWQgaW50byB0aGUgdXNlcidzIEFjdGlvblJlZ2lzdHJ5LiAqL1xuICBhY3Rpb25zOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPihcbiAgY29uZmlnOiBGb3JtQ29uZmlnPFRWYWx1ZXMsIFRTdG9yZXM+XG4pOiBGb3JtU3RvcmU8VFZhbHVlcywgVFN0b3Jlcz4ge1xuICBjb25zdCBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhjb25maWcuaW5pdGlhbFZhbHVlcykgYXMgdW5rbm93biBhcyAoa2V5b2YgVFZhbHVlcylbXTtcblxuICBjb25zdCBmaWVsZHMgPSB7fSBhcyB1bmtub3duIGFzIHsgW0sgaW4ga2V5b2YgVFZhbHVlc106IFNpZ25hbDxUVmFsdWVzW0tdPiB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICBmaWVsZHNba2V5XSA9IHNpZ25hbChjb25maWcuaW5pdGlhbFZhbHVlc1trZXldKTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlcyA9IGNvbXB1dGVkPFRWYWx1ZXM+KCgpID0+IHtcbiAgICBjb25zdCB2ID0ge30gYXMgdW5rbm93biBhcyBUVmFsdWVzO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgdltrZXldID0gZmllbGRzW2tleV0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9KTtcblxuICBjb25zdCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBpc1N1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBlcnJvcnMgPSBzaWduYWw8UGFydGlhbDxSZWNvcmQ8a2V5b2YgVFZhbHVlcywgc3RyaW5nPj4+KHt9KTtcbiAgY29uc3Qgb3BlblBhcmFtcyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSk7XG5cbiAgbGV0IGdldFN0b3Jlc1JlZjogKCgpID0+IFRTdG9yZXMpIHwgbnVsbCA9IG51bGw7XG4gIGxldCBkaXNwb3NlR3VhcmRFZmZlY3Q6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGdldFN0b3Jlc09yVGhyb3coKTogVFN0b3JlcyB7XG4gICAgaWYgKCFnZXRTdG9yZXNSZWYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZvcm0gXCIke2NvbmZpZy5uYW1lfVwiIHVzZWQgYmVmb3JlIGJpbmRTdG9yZXMoKS4gQ2FsbCBmb3JtLmJpbmRTdG9yZXMoKCkgPT4geW91clN0b3JlcykgYXQgYXBwIGluaXQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldFN0b3Jlc1JlZigpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUb0luaXRpYWwoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRLZXlzKSB7XG4gICAgICBmaWVsZHNba2V5XS52YWx1ZSA9IGNvbmZpZy5pbml0aWFsVmFsdWVzW2tleV07XG4gICAgfVxuICAgIGVycm9ycy52YWx1ZSA9IHt9O1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IG9wZW4gYXBwbGllcyB0d28gbGF5ZXJzIG9mIG92ZXJyaWRlcyBwbHVzIG9wdGlvbmFsIG9uT3BlbiDigJQgYnJhbmNoeSBieSBkZXNpZ24uXG4gIGZ1bmN0aW9uIG9wZW4ob3ZlcnJpZGU/OiBQYXJ0aWFsPFRWYWx1ZXM+LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSk6IHZvaWQge1xuICAgIHJlc2V0VG9Jbml0aWFsKCk7XG4gICAgb3BlblBhcmFtcy52YWx1ZSA9IHBhcmFtcztcbiAgICBpZiAoY29uZmlnLm9uT3BlbiAmJiBnZXRTdG9yZXNSZWYpIHtcbiAgICAgIGNvbnN0IG9uT3Blbk92ZXJyaWRlID0gY29uZmlnLm9uT3Blbih7IGRhdGE6IHBhcmFtcywgc3RvcmVzOiBnZXRTdG9yZXNPclRocm93KCkgfSkgPz8ge307XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvbk9wZW5PdmVycmlkZSkpIHtcbiAgICAgICAgaWYgKGsgaW4gZmllbGRzKSB7XG4gICAgICAgICAgZmllbGRzW2sgYXMga2V5b2YgVFZhbHVlc10udmFsdWUgPSB2IGFzIFRWYWx1ZXNba2V5b2YgVFZhbHVlc107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZSkpIHtcbiAgICAgICAgaWYgKGsgaW4gZmllbGRzKSB7XG4gICAgICAgICAgZmllbGRzW2sgYXMga2V5b2YgVFZhbHVlc10udmFsdWUgPSB2IGFzIFRWYWx1ZXNba2V5b2YgVFZhbHVlc107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlKCk6IHZvaWQge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIHJlc2V0VG9Jbml0aWFsKCk7XG4gICAgb3BlblBhcmFtcy52YWx1ZSA9IHt9O1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IHN1Ym1pdCBmdW5uZWxzIEZvcm1EYXRhLCB2YWxpZGF0ZSwgb25TdWJtaXQsIGVycm9yU3RhdGUsIGFuZCBjbG9zZSDigJQgb25lLXBhdGgtcGVyLXN0YWdlIGJ5IGRlc2lnbi5cbiAgYXN5bmMgZnVuY3Rpb24gc3VibWl0KGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50ICYmIGlzRm9ybUVsZW1lbnQoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoZXZlbnQudGFyZ2V0KTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgICBjb25zdCByYXcgPSBmZC5nZXQoa2V5IGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgICAgICAgaWYgKHJhdyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpZWxkc1trZXldLnZhbHVlID0gU3RyaW5nKHJhdykgYXMgdW5rbm93biBhcyBUVmFsdWVzW3R5cGVvZiBrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnQgPSB2YWx1ZXMudmFsdWU7XG4gICAgY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IGNvbmZpZy52YWxpZGF0ZT8uKGN1cnJlbnQpO1xuICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzICYmIE9iamVjdC5rZXlzKHZhbGlkYXRpb25FcnJvcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGVycm9ycy52YWx1ZSA9IHZhbGlkYXRpb25FcnJvcnM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVycm9ycy52YWx1ZSA9IHt9O1xuICAgIGlzU3VibWl0dGluZy52YWx1ZSA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvbmZpZy5vblN1Ym1pdCh7XG4gICAgICAgIHZhbHVlczogY3VycmVudCxcbiAgICAgICAgc3RvcmVzOiBnZXRTdG9yZXNPclRocm93KCksXG4gICAgICB9KTtcbiAgICAgIGNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzdWJtaXRFcnJvcihgJHtjb25maWcubmFtZX06c3VibWl0YCwgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNTdWJtaXR0aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkIHtcbiAgICBnZXRTdG9yZXNSZWYgPSBnZXRTdG9yZXM7XG4gICAgZGlzcG9zZUd1YXJkRWZmZWN0Py4oKTtcbiAgICBjb25zdCBndWFyZEZuID0gY29uZmlnLmd1YXJkO1xuICAgIGlmIChndWFyZEZuKSB7XG4gICAgICBkaXNwb3NlR3VhcmRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzT3Blbi52YWx1ZSkgcmV0dXJuO1xuICAgICAgICBpZiAoIWd1YXJkRm4oeyBzdG9yZXM6IGdldFN0b3JlcygpIH0pKSBjbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz4gPSB7XG4gICAgW2Ake2NvbmZpZy5uYW1lfTpvcGVuYF06ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgb3Blbih1bmRlZmluZWQsIGRhdGEpO1xuICAgIH0sXG4gICAgW2Ake2NvbmZpZy5uYW1lfTpjbG9zZWBdOiAoKSA9PiB7XG4gICAgICBjbG9zZSgpO1xuICAgIH0sXG4gICAgW2Ake2NvbmZpZy5uYW1lfTpzdWJtaXRgXTogYXN5bmMgKHsgZXZlbnQgfSkgPT4ge1xuICAgICAgYXdhaXQgc3VibWl0KGV2ZW50KTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgaXNPcGVuLFxuICAgIHZhbHVlcyxcbiAgICBmaWVsZHMsXG4gICAgZXJyb3JzLFxuICAgIGlzU3VibWl0dGluZyxcbiAgICBvcGVuUGFyYW1zLFxuICAgIG9wZW4sXG4gICAgY2xvc2UsXG4gICAgc3VibWl0LFxuICAgIGJpbmRTdG9yZXMsXG4gICAgYWN0aW9ucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb21wb3NlIG1hbnkgZm9ybXMgaW50byBhIHNpbmdsZSBzZXQ6IG1lcmdlZCBhY3Rpb25zLCBjbG9zZUFsbCwgb3BlbkZvcm0gc2lnbmFsLlxuICovXG5leHBvcnQgdHlwZSBGb3JtU2V0PFRTdG9yZXM+ID0ge1xuICBhY3Rpb25zOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPjtcbiAgb3BlbkZvcm06IFJlYWRvbmx5U2lnbmFsPHN0cmluZyB8IG51bGw+O1xuICBjbG9zZUFsbCgpOiB2b2lkO1xuICBiaW5kU3RvcmVzKGdldFN0b3JlczogKCkgPT4gVFN0b3Jlcyk6IHZvaWQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybVNldDxUU3RvcmVzPihcbiAgZm9ybXM6IHJlYWRvbmx5IEZvcm1TdG9yZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPltdXG4pOiBGb3JtU2V0PFRTdG9yZXM+IHtcbiAgY29uc3QgbWVyZ2VkOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPiA9IHt9O1xuICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIHtcbiAgICBPYmplY3QuYXNzaWduKG1lcmdlZCwgZm9ybS5hY3Rpb25zKTtcbiAgfVxuXG4gIGNvbnN0IG9wZW5Gb3JtID0gY29tcHV0ZWQ8c3RyaW5nIHwgbnVsbD4oKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZm9ybSBvZiBmb3Jtcykge1xuICAgICAgaWYgKGZvcm0uaXNPcGVuLnZhbHVlKSByZXR1cm4gZm9ybS5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhY3Rpb25zOiBtZXJnZWQsXG4gICAgb3BlbkZvcm0sXG4gICAgY2xvc2VBbGwoKSB7XG4gICAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIGZvcm0uY2xvc2UoKTtcbiAgICB9LFxuICAgIGJpbmRTdG9yZXMoZ2V0U3RvcmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIGZvcm0uYmluZFN0b3JlcyhnZXRTdG9yZXMpO1xuICAgIH0sXG4gIH07XG59XG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIHIsRnJhZ21lbnQgYXMgZX1mcm9tXCJwcmVhY3RcIjtleHBvcnR7RnJhZ21lbnR9ZnJvbVwicHJlYWN0XCI7dmFyIHQ9L1tcIiY8XS87ZnVuY3Rpb24gbihyKXtpZigwPT09ci5sZW5ndGh8fCExPT09dC50ZXN0KHIpKXJldHVybiByO2Zvcih2YXIgZT0wLG49MCxvPVwiXCIsZj1cIlwiO248ci5sZW5ndGg7bisrKXtzd2l0Y2goci5jaGFyQ29kZUF0KG4pKXtjYXNlIDM0OmY9XCImcXVvdDtcIjticmVhaztjYXNlIDM4OmY9XCImYW1wO1wiO2JyZWFrO2Nhc2UgNjA6Zj1cIiZsdDtcIjticmVhaztkZWZhdWx0OmNvbnRpbnVlfW4hPT1lJiYobys9ci5zbGljZShlLG4pKSxvKz1mLGU9bisxfXJldHVybiBuIT09ZSYmKG8rPXIuc2xpY2UoZSxuKSksb312YXIgbz0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLGY9MCxpPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gdShlLHQsbixvLGksdSl7dHx8KHQ9e30pO3ZhciBhLGMscD10O2lmKFwicmVmXCJpbiBwKWZvcihjIGluIHA9e30sdClcInJlZlwiPT1jP2E9dFtjXTpwW2NdPXRbY107dmFyIGw9e3R5cGU6ZSxwcm9wczpwLGtleTpuLHJlZjphLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLWYsX19pOi0xLF9fdTowLF9fc291cmNlOmksX19zZWxmOnV9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihhPWUuZGVmYXVsdFByb3BzKSlmb3IoYyBpbiBhKXZvaWQgMD09PXBbY10mJihwW2NdPWFbY10pO3JldHVybiByLnZub2RlJiZyLnZub2RlKGwpLGx9ZnVuY3Rpb24gYShyKXt2YXIgdD11KGUse3RwbDpyLGV4cHJzOltdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpfSk7cmV0dXJuIHQua2V5PXQuX192LHR9dmFyIGM9e30scD0vW0EtWl0vZztmdW5jdGlvbiBsKGUsdCl7aWYoci5hdHRyKXt2YXIgZj1yLmF0dHIoZSx0KTtpZihcInN0cmluZ1wiPT10eXBlb2YgZilyZXR1cm4gZn1pZih0PWZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT09ciYmXCJvYmplY3RcIj09dHlwZW9mIHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHIudmFsdWVPZj9yLnZhbHVlT2YoKTpyfSh0KSxcInJlZlwiPT09ZXx8XCJrZXlcIj09PWUpcmV0dXJuXCJcIjtpZihcInN0eWxlXCI9PT1lJiZcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIGk9XCJcIjtmb3IodmFyIHUgaW4gdCl7dmFyIGE9dFt1XTtpZihudWxsIT1hJiZcIlwiIT09YSl7dmFyIGw9XCItXCI9PXVbMF0/dTpjW3VdfHwoY1t1XT11LnJlcGxhY2UocCxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpKSxzPVwiO1wiO1wibnVtYmVyXCIhPXR5cGVvZiBhfHxsLnN0YXJ0c1dpdGgoXCItLVwiKXx8by50ZXN0KGwpfHwocz1cInB4O1wiKSxpPWkrbCtcIjpcIithK3N9fXJldHVybiBlKyc9XCInK24oaSkrJ1wiJ31yZXR1cm4gbnVsbD09dHx8ITE9PT10fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fHxcIm9iamVjdFwiPT10eXBlb2YgdD9cIlwiOiEwPT09dD9lOmUrJz1cIicrbihcIlwiK3QpKydcIid9ZnVuY3Rpb24gcyhyKXtpZihudWxsPT1yfHxcImJvb2xlYW5cIj09dHlwZW9mIHJ8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIG51bGw7aWYoXCJvYmplY3RcIj09dHlwZW9mIHIpe2lmKHZvaWQgMD09PXIuY29uc3RydWN0b3IpcmV0dXJuIHI7aWYoaShyKSl7Zm9yKHZhciBlPTA7ZTxyLmxlbmd0aDtlKyspcltlXT1zKHJbZV0pO3JldHVybiByfX1yZXR1cm4gbihcIlwiK3IpfWV4cG9ydHt1IGFzIGpzeCxsIGFzIGpzeEF0dHIsdSBhcyBqc3hERVYscyBhcyBqc3hFc2NhcGUsYSBhcyBqc3hUZW1wbGF0ZSx1IGFzIGpzeHN9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anN4UnVudGltZS5tb2R1bGUuanMubWFwXG4iLAogICAgIi8qKlxuICogU3RvcmUgYmFzZSArIFByZWFjdCBjb250ZXh0LlxuICpcbiAqIGBjcmVhdGVTdG9yZWAgaXMgYSB0aGluIGNvbnZlbnRpb24tZW5mb3JjZXI6IGEgdHlwZWQgYmFnIG9mIHNpZ25hbHNcbiAqIHBsdXMgbWV0aG9kcy4gQXBwcyB1c2UgaXQgdG8gZGVmaW5lIGRvbWFpbiBzdG9yZXMgd2hvc2Ugb25seSBwdWJsaWNcbiAqIG11dGF0aW9uIHN1cmZhY2UgaXMgbmFtZWQgbWV0aG9kcyAoYWN0aW9ucyBjYWxsIHRoZW07IGNvbXBvbmVudHMgcmVhZFxuICogc2lnbmFscyBhbmQgZGlzcGF0Y2ggYWN0aW9ucykuIE5vIGNsZXZlcm5lc3Mg4oCUIGEgbmFtZWQgcGF0dGVybiBtb3JlXG4gKiB0aGFuIGEgbGlicmFyeS5cbiAqXG4gKiBgU3RvcmVQcm92aWRlcmAgKyBgdXNlU3RvcmVzYCB3aXJlIHRoZSBzdG9yZXMgYmFnIGludG8gUHJlYWN0IGNvbnRleHRcbiAqIHNvIGNvbXBvbmVudHMgYW5kIHRoZSBkZWxlZ2F0aW9uIHJ1bnRpbWUgY2FuIHJlYWNoIGl0IHZpYSBhIHNpbmdsZSBob29rLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4gfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcblxuLyoqXG4gKiBJZGVudGl0eSBoZWxwZXI7IGV4aXN0cyBzbyBkb21haW4gc3RvcmVzIGhhdmUgYSBjYW5vbmljYWwgY3JlYXRpb25cbiAqIGNhbGwgZXZlbiB0aG91Z2ggdGhlIGJhZyBpdHNlbGYgaXMgYSBwbGFpbiBvYmplY3QuIENlbnRyYWxpc2luZyBoZXJlXG4gKiBsZXRzIHVzIGhhbmcgYWRkaXRpb25hbCBiZWhhdmlvdXIgb2ZmIHRoZSBjYWxsIHNpdGUgbGF0ZXIgKGRlYnVnXG4gKiBpbnN0cnVtZW50YXRpb24sIGRldnRvb2xzKSB3aXRob3V0IGEgbWlncmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RvcmU8VCBleHRlbmRzIG9iamVjdD4oaW5pdDogVCk6IFQge1xuICByZXR1cm4gaW5pdDtcbn1cblxuY29uc3QgU3RvcmVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDx1bmtub3duPihudWxsKTtcblxuZXhwb3J0IHR5cGUgU3RvcmVQcm92aWRlclByb3BzPFRTdG9yZXM+ID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIHN0b3JlczogVFN0b3Jlcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBTdG9yZVByb3ZpZGVyPFRTdG9yZXM+KHsgY2hpbGRyZW4sIHN0b3JlcyB9OiBTdG9yZVByb3ZpZGVyUHJvcHM8VFN0b3Jlcz4pIHtcbiAgcmV0dXJuIDxTdG9yZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N0b3Jlc30+e2NoaWxkcmVufTwvU3RvcmVDb250ZXh0LlByb3ZpZGVyPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0b3JlczxUU3RvcmVzPigpOiBUU3RvcmVzIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChTdG9yZUNvbnRleHQpIGFzIHVua25vd24gYXMgVFN0b3JlcyB8IG51bGw7XG4gIGlmIChjdHggPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VTdG9yZXMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFN0b3JlUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGN0eDtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25Gb3JtIOKAlCB3cmFwcyBhIG5hdGl2ZSA8Zm9ybT4gd2l0aCB0aGUgYWN0aW9uIHBhdHRlcm4uXG4gKlxuICogUmVuZGVycyA8Zm9ybSBkYXRhLWFjdGlvbj1cIntmb3JtLm5hbWV9OnN1Ym1pdFwiPiBzbyB0aGUgaW5zdGFsbGVkXG4gKiBldmVudCBkZWxlZ2F0aW9uIGNhdGNoZXMgdGhlIHN1Ym1pdCBldmVudCBhbmQgZGlzcGF0Y2hlcyB0byB0aGVcbiAqIGZvcm0ncyBhdXRvLXJlZ2lzdGVyZWQgOnN1Ym1pdCBoYW5kbGVyLiBgYXJpYS1idXN5YCBtaXJyb3JzIHRoZVxuICogYGlzU3VibWl0dGluZ2Agc2lnbmFsIHNvIGNvbnN1bWVyIHN0eWxpbmcgY2FuIHJlc3BvbmQgd2l0aG91dCBleHRyYVxuICogd2lyaW5nLiBUaGUgZm9ybSBlbGVtZW50IGFsc28gZXhwb3NlcyBgZGF0YS1wb2xseS1hY3Rpb24tZm9ybWAgZm9yXG4gKiBzdGFibGUgc2VsZWN0b3IgaG9va3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtU3RvcmUgfSBmcm9tIFwiLi4vYWN0aW9ucy9mb3JtLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9BY3Rpb25Gb3JtLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uRm9ybVByb3BzPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPiA9IHtcbiAgZm9ybTogRm9ybVN0b3JlPFRWYWx1ZXMsIFRTdG9yZXM+O1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEFjdGlvbkZvcm08VFZhbHVlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIFRTdG9yZXM+KFxuICBwcm9wczogQWN0aW9uRm9ybVByb3BzPFRWYWx1ZXMsIFRTdG9yZXM+XG4pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgZm9ybSwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBjb21iaW5lZCA9IGNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJmb3JtXCJdfSAke2NsYXNzTmFtZX1gIDogY2xhc3Nlc1tcImZvcm1cIl07XG4gIHJldHVybiAoXG4gICAgPGZvcm1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtjb21iaW5lZH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktYWN0aW9uLWZvcm09e2Zvcm0ubmFtZX1cbiAgICAgIGRhdGEtYWN0aW9uPXtgJHtmb3JtLm5hbWV9OnN1Ym1pdGB9XG4gICAgICBhcmlhLWJ1c3k9e2Zvcm0uaXNTdWJtaXR0aW5nLnZhbHVlfVxuICAgICAgYXJpYS1sYWJlbD17cHJvcHNbXCJhcmlhLWxhYmVsXCJdfVxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtwcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXX1cbiAgICAgIG5vVmFsaWRhdGVcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9mb3JtPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEZpcmUgYSBuYW1lZCBhY3Rpb24gdGhyb3VnaCB0aGUgZ2xvYmFsIGV2ZW50LWRlbGVnYXRpb24gcmVnaXN0cnkuXG4gKlxuICogVGhlIEFjdGlvbiogcHJpbWl0aXZlcyAoPEFjdGlvbklucHV0PiwgPEFjdGlvblNlbGVjdD4pIGNvbW1pdCBieVxuICogY2xpY2tpbmcgYSBkZXRhY2hlZCBgPGJ1dHRvbiBkYXRhLWFjdGlvbj1cIuKAplwiPmAgY2FycnlpbmcgZGF0YS1hY3Rpb24tKlxuICogYXR0cmlidXRlczsgdGhlIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lciByb3V0ZXMgaXQgaW50byB0aGVcbiAqIGNvbnN1bWVyJ3MgYWN0aW9uIHJlZ2lzdHJ5IHdpdGggbm8gZXh0cmEgd2lyaW5nLiBDZW50cmFsaXNlZCBoZXJlIHNvXG4gKiBldmVyeSBBY3Rpb24qIHByaW1pdGl2ZSBkaXNwYXRjaGVzIGlkZW50aWNhbGx5LlxuICpcbiAqIEtleXMgaW4gYGRhdGFgIGFyZSBjYW1lbENhc2UgYW5kIGNvbnZlcnRlZCB0byBkYXNoLWNhc2UgYXR0cmlidXRlXG4gKiBuYW1lcyDigJQgYGFjdGlvbkRhdGE9e3sgdGFza0lkIH19YCBiZWNvbWVzIGBkYXRhLWFjdGlvbi10YXNrLWlkYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgY29uc3QgaGlkZGVuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgaGlkZGVuLnNldEF0dHJpYnV0ZShcImRhdGEtYWN0aW9uXCIsIGFjdGlvbik7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgY29uc3QgZGFzaEtleSA9IGtleS5yZXBsYWNlKC9bQS1aXS9nLCAobSkgPT4gYC0ke20udG9Mb3dlckNhc2UoKX1gKTtcbiAgICBoaWRkZW4uc2V0QXR0cmlidXRlKGBkYXRhLWFjdGlvbi0ke2Rhc2hLZXl9YCwgdmFsdWUpO1xuICB9XG4gIGhpZGRlbi5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgaGlkZGVuLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgaGlkZGVuLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgaGlkZGVuLnRhYkluZGV4ID0gLTE7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuKTtcbiAgdHJ5IHtcbiAgICBoaWRkZW4uY2xpY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBoaWRkZW4ucmVtb3ZlKCk7XG4gIH1cbn1cbiIsCiAgICAiLyoqXG4gKiBwb2xseSMxMjU6IGRhdGEtKiAvIGFyaWEtKiBhdHRyaWJ1dGUgcGFzc3Rocm91Z2ggZm9yIFVJIHByaW1pdGl2ZXMuXG4gKlxuICogUHJpbWl0aXZlcyBhY2NlcHQgYSBmaXhlZCBwcm9wIHNldC4gV2l0aG91dCBwYXNzdGhyb3VnaCwgYSBjb25zdW1lclxuICogdGhhdCBuZWVkcyBhIGBkYXRhLSpgIHRlc3QgaG9vayBvciBhbiBgYXJpYS0qYCBhdHRyaWJ1dGUgb24gdGhlXG4gKiBwcmltaXRpdmUncyBvd24gZWxlbWVudCBoYXMgdG8gd3JhcCBpdCBpbiBhbiBleHRyYSBET00gbm9kZSDigJQgYSBzbWVsbC5cbiAqXG4gKiB7QGxpbmsgUGFzc3Rocm91Z2hBdHRyc30gd2lkZW5zIGEgcHJpbWl0aXZlJ3MgcHJvcHMgdG8gYWNjZXB0IGFueVxuICogYGRhdGEtKmAgLyBgYXJpYS0qYCBrZXk7IHtAbGluayBjb2xsZWN0UGFzc3Rocm91Z2h9IGdhdGhlcnMgdGhlbSBmb3JcbiAqIHNwcmVhZGluZyBvbnRvIHRoZSByZW5kZXJlZCByb290IGVsZW1lbnQuIFNwcmVhZCB0aGUgcmVzdWx0ICpiZWZvcmUqXG4gKiB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgc28gYSBjb25zdW1lciBrZXkgY2FuIG5ldmVyIG92ZXJyaWRlXG4gKiBvbmUgdGhlIHByaW1pdGl2ZSBzZXRzIGl0c2VsZiAoYGRhdGEtcG9sbHktKmAsIGV0Yy4pLlxuICovXG5cbi8qKiBJbmRleCBzaWduYXR1cmVzIGxldHRpbmcgYSBwcmltaXRpdmUncyBwcm9wcyBhY2NlcHQgYXJiaXRyYXJ5XG4gKiAgYGRhdGEtKmAgYW5kIGBhcmlhLSpgIGF0dHJpYnV0ZXMsIHBsdXMgdGhlIHN0YW5kYXJkIGB0aXRsZWBcbiAqICBhdHRyaWJ1dGUg4oCUIGEgbmF0aXZlIHRvb2x0aXAgaXMgYSBET00gaG9vaywgbm90IHN0eWxpbmcsIHNvIGl0XG4gKiAgcmlkZXMgdGhlIHNhbWUgcGFzc3Rocm91Z2ggcGF0aCAocG9sbHkjMTM1KS4gKi9cbmV4cG9ydCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgPSB7XG4gIFtkYXRhQXR0cjogYGRhdGEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIFthcmlhQXR0cjogYGFyaWEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKiBOYXRpdmUgdG9vbHRpcCB0ZXh0LCBmb3J3YXJkZWQgdG8gdGhlIHJlbmRlcmVkIHJvb3QgZWxlbWVudC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG4vKiogS2V5cywgYmV5b25kIHRoZSBgZGF0YS0qYCAvIGBhcmlhLSpgIHByZWZpeGVzLCB0aGF0IHBhc3MgdGhyb3VnaC4gKi9cbmZ1bmN0aW9uIGlzUGFzc3Rocm91Z2hLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGtleS5zdGFydHNXaXRoKFwiZGF0YS1cIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJhcmlhLVwiKSB8fCBrZXkgPT09IFwidGl0bGVcIjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGBkYXRhLSpgIC8gYGFyaWEtKmAgLyBgdGl0bGVgIGF0dHJpYnV0ZXMgZnJvbSBhIHByb3BzIG9iamVjdFxuICogc28gdGhleSBjYW4gYmUgc3ByZWFkIG9udG8gYSBwcmltaXRpdmUncyByb290IGVsZW1lbnQuIGB1bmRlZmluZWRgXG4gKiB2YWx1ZXMgYW5kIG5vbi1hdHRyaWJ1dGUgdmFsdWUgdHlwZXMgKGZ1bmN0aW9ucywgb2JqZWN0cykgYXJlIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UGFzc3Rocm91Z2goXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4ge1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGlmICghaXNQYXNzdGhyb3VnaEtleShrZXkpKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BzW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgb3V0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25JbnB1dCDigJQgZHVhbC1tb2RlIHZpZXcvZWRpdCBpbnB1dCB3aXRoIGFjdGlvbiBkaXNwYXRjaCBvbiBjb21taXQuXG4gKlxuICogVmlldyBtb2RlIHJlbmRlcnMgdGhlIGN1cnJlbnQgdmFsdWUgYXMgdGV4dCAob3B0aW9uYWxseSB0aHJvdWdoIGFcbiAqIGNhbGxlci1zdXBwbGllZCBgcmVuZGVyVmlld2AgZm9yIG1hcmtkb3duLCByaWNoIGZvcm1hdHRpbmcsIGV0Yy4pLlxuICogQ2xpY2ssIEVudGVyLCBvciBTcGFjZSBlbnRlcnMgZWRpdCBtb2RlLiBFZGl0IG1vZGUgaXMgYSBuYXRpdmUgaW5wdXRcbiAqIG9yIHRleHRhcmVhOyBjb21taXQgZmlyZXMgdGhlIGNvbmZpZ3VyZWQgYWN0aW9uIHdpdGggYGRhdGEtYWN0aW9uLXZhbHVlYFxuICogYW5kIGBkYXRhLWFjdGlvbi1maWVsZGAgc2V0IGZyb20gRm9ybURhdGEtc2hhcGUgc2VtYW50aWNzLCBzbyB0aGVcbiAqIGV4aXN0aW5nIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlcyBpdCB3aXRoIG5vIGV4dHJhIHdpcmluZy5cbiAqXG4gKiBgc2F2ZU9uYCBwaWNrcyB0aGUgY29tbWl0IHRyaWdnZXI6XG4gKiAgIFwiYmx1clwiICAgICAgIGNvbW1pdCB3aGVuIHRoZSBmaWVsZCBsb3NlcyBmb2N1c1xuICogICBcImVudGVyXCIgICAgICBjb21taXQgb24gRW50ZXIgKHNpbmdsZS1saW5lKSBvciBDbWQvQ3RybCtFbnRlciAobXVsdGktbGluZSlcbiAqICAgXCJjbWQtZW50ZXJcIiAgY29tbWl0IG9ubHkgb24gQ21kL0N0cmwrRW50ZXJcbiAqICAgXCJleHBsaWNpdFwiICAgbmV2ZXIgYXV0by1jb21taXQg4oCUIGNhbGxlciB3aXJlcyBhIHNhdmUgYnV0dG9uIHdpdGggZGF0YS1hY3Rpb25cbiAqICAgXCJpbnB1dFwiICAgICAgY29tbWl0IG9uIGV2ZXJ5IGtleXN0cm9rZSDigJQgZm9yIGZpbHRlci1hcy15b3UtdHlwZSBmaWVsZHM7XG4gKiAgICAgICAgICAgICAgICB0aGUgZmllbGQgc3RheXMgaW4gZWRpdCBtb2RlIHJhdGhlciB0aGFuIHRvZ2dsaW5nIHRvIHZpZXdcbiAqXG4gKiBgaW5wdXRUeXBlYCBzZXRzIHRoZSBuYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQg4oCUXG4gKiBcInRleHRcIiAoZGVmYXVsdCksIFwiZGF0ZVwiLCBcInRpbWVcIiwgXCJudW1iZXJcIiwgYW5kIGZyaWVuZHMg4oCUIHNvIGEgZGF0ZVxuICogb3IgbnVtZXJpYyBmaWVsZCBjb21taXRzIHRocm91Z2ggdGhlIGFjdGlvbiBzeXN0ZW0gbGlrZSBhbnkgb3RoZXIuXG4gKlxuICogTGF5b3V0LXNoaWZ0LWZyZWU6IHZpZXcgYW5kIGVkaXQgbW9kZXMgc2hhcmUgcGFkZGluZywgYm9yZGVyIHdpZHRoLFxuICogZm9udCwgYW5kIGxpbmUtaGVpZ2h0IHNvIHRoZSB0b2dnbGUgY2F1c2VzIG5vIHJlZmxvdy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9BY3Rpb25JbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBkaXNwYXRjaEFjdGlvbiB9IGZyb20gXCIuL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50c1wiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFNhdmVPbiA9IFwiYmx1clwiIHwgXCJlbnRlclwiIHwgXCJjbWQtZW50ZXJcIiB8IFwiZXhwbGljaXRcIiB8IFwiaW5wdXRcIjtcbmV4cG9ydCB0eXBlIEFjdGlvbklucHV0VmFyaWFudCA9IFwic2luZ2xlXCIgfCBcIm11bHRpXCI7XG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFR5cGUgPVxuICB8IFwidGV4dFwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGV0aW1lLWxvY2FsXCJcbiAgfCBcInRpbWVcIlxuICB8IFwibW9udGhcIlxuICB8IFwid2Vla1wiXG4gIHwgXCJudW1iZXJcIlxuICB8IFwiZW1haWxcIlxuICB8IFwidXJsXCJcbiAgfCBcInRlbFwiO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgLyoqIEN1cnJlbnQgdmFsdWUgdG8gcmVuZGVyIGluIHZpZXcgbW9kZSBhbmQgc2VlZCB0aGUgZWRpdCBidWZmZXIuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBjb21taXQuIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxuZXcgdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIENvbW1pdCB0cmlnZ2VyLiBEZWZhdWx0OiBcImJsdXJcIi4gKi9cbiAgc2F2ZU9uPzogQWN0aW9uSW5wdXRTYXZlT247XG4gIHZhcmlhbnQ/OiBBY3Rpb25JbnB1dFZhcmlhbnQ7XG4gIC8qKiBOYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQuIERlZmF1bHQ6IFwidGV4dFwiLiAqL1xuICBpbnB1dFR5cGU/OiBBY3Rpb25JbnB1dFR5cGU7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBFeHRyYSBkYXRhLWFjdGlvbi0qIGF0dHJpYnV0ZXMgdG8gaW5jbHVkZSBhdCBjb21taXQgKGUuZy4gZW50aXR5IGlkKS4gKi9cbiAgYWN0aW9uRGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBDdXN0b20gdmlldyByZW5kZXJlciDigJQgcmVjZWl2ZXMgdmFsdWUsIHJldHVybnMgVk5vZGUuICovXG4gIHJlbmRlclZpZXc/OiAodmFsdWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnQgfCBzdHJpbmc7XG4gIC8qKiBMYWJlbCBhbm5vdW5jZWQgYnkgc2NyZWVuIHJlYWRlcnMgZm9yIHRoZSBlZGl0IGFmZm9yZGFuY2UuICovXG4gIGFyaWFMYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IHR3byByZW5kZXIgYnJhbmNoZXMgdGltZXMgdHdvIHZhcmlhbnRzIHRpbWVzIGZpdmUgc2F2ZU9uIHRyaWdnZXJzOyBicmFuY2hpbmcgaXMgaW5oZXJlbnQgdG8gdGhlIHByaW1pdGl2ZS5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25JbnB1dChwcm9wczogQWN0aW9uSW5wdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgdmFyaWFudCA9IHByb3BzLnZhcmlhbnQgPz8gXCJzaW5nbGVcIjtcbiAgY29uc3Qgc2F2ZU9uID0gcHJvcHMuc2F2ZU9uID8/IFwiYmx1clwiO1xuICAvLyBcImlucHV0XCIgbW9kZSBpcyBhIHBlcm1hbmVudGx5LWVkaXRhYmxlIGZpbHRlciBmaWVsZCDigJQgaXQgbmV2ZXIgaGFzIGFcbiAgLy8gdmlldyBtb2RlIHRvIHRvZ2dsZSBiYWNrIHRvLCBzbyBpdCBzdGFydHMgaW4gZWRpdC5cbiAgY29uc3QgbGl2ZSA9IHNhdmVPbiA9PT0gXCJpbnB1dFwiO1xuICBjb25zdCBbbW9kZSwgc2V0TW9kZV0gPSB1c2VTdGF0ZTxcInZpZXdcIiB8IFwiZWRpdFwiPihsaXZlID8gXCJlZGl0XCIgOiBcInZpZXdcIik7XG4gIGNvbnN0IFtkcmFmdCwgc2V0RHJhZnRdID0gdXNlU3RhdGUocHJvcHMudmFsdWUpO1xuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGUgPT09IFwidmlld1wiKSBzZXREcmFmdChwcm9wcy52YWx1ZSk7XG4gIH0sIFtwcm9wcy52YWx1ZSwgbW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRG9uJ3Qgc3RlYWwgZm9jdXMgb24gbW91bnQgZm9yIGEgbGl2ZSBmaWx0ZXIgZmllbGQ7IG9ubHkgcHVsbCBmb2N1c1xuICAgIC8vIHdoZW4gdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgdG9nZ2xlZCBhIHZpZXcgZmllbGQgaW50byBlZGl0IG1vZGUuXG4gICAgaWYgKG1vZGUgPT09IFwiZWRpdFwiICYmICFsaXZlICYmIGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuc2VsZWN0Py4oKTtcbiAgICB9XG4gIH0sIFttb2RlLCBsaXZlXSk7XG5cbiAgY29uc3QgZW50ZXJFZGl0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChwcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHNldERyYWZ0KHByb3BzLnZhbHVlKTtcbiAgICBzZXRNb2RlKFwiZWRpdFwiKTtcbiAgfSwgW3Byb3BzLmRpc2FibGVkLCBwcm9wcy52YWx1ZV0pO1xuXG4gIGNvbnN0IGNvbW1pdCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChuZXh0ICE9PSBwcm9wcy52YWx1ZSkge1xuICAgICAgICBkaXNwYXRjaEFjdGlvbihwcm9wcy5hY3Rpb24sIHsgLi4uKHByb3BzLmFjdGlvbkRhdGEgPz8ge30pLCB2YWx1ZTogbmV4dCB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEEgbGl2ZSBmaWx0ZXIgZmllbGQgc3RheXMgZWRpdGFibGU7IGV2ZXJ5IG90aGVyIHRyaWdnZXIgcmV0dXJuc1xuICAgICAgLy8gdG8gdmlldyBtb2RlIG9uY2UgdGhlIHZhbHVlIGlzIGNvbW1pdHRlZC5cbiAgICAgIGlmICghbGl2ZSkgc2V0TW9kZShcInZpZXdcIik7XG4gICAgfSxcbiAgICBbcHJvcHMuYWN0aW9uLCBwcm9wcy5hY3Rpb25EYXRhLCBwcm9wcy52YWx1ZSwgbGl2ZV1cbiAgKTtcblxuICBjb25zdCBjYW5jZWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RHJhZnQocHJvcHMudmFsdWUpO1xuICAgIGlmICghbGl2ZSkgc2V0TW9kZShcInZpZXdcIik7XG4gIH0sIFtwcm9wcy52YWx1ZSwgbGl2ZV0pO1xuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBrZXlib2FyZCBoYW5kbGVyIGVuY29kZXMgdGhlIHNhdmVPbiDDlyB2YXJpYW50IG1hdHJpeC5cbiAgY29uc3Qgb25LZXlEb3duID0gKGV2ZW50OiBKU1guVGFyZ2V0ZWRLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYW5jZWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBjb25zdCBjbWQgPSBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXk7XG4gICAgICBpZiAoc2F2ZU9uID09PSBcImVudGVyXCIgJiYgdmFyaWFudCA9PT0gXCJzaW5nbGVcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb21taXQoZHJhZnQpO1xuICAgICAgfSBlbHNlIGlmICgoc2F2ZU9uID09PSBcImVudGVyXCIgJiYgdmFyaWFudCA9PT0gXCJtdWx0aVwiICYmIGNtZCkgfHwgc2F2ZU9uID09PSBcImNtZC1lbnRlclwiKSB7XG4gICAgICAgIGlmIChjbWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbW1pdChkcmFmdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcInJvb3RcIl19ICR7cHJvcHMuY2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wicm9vdFwiXTtcblxuICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZvcndhcmRlZCBvbnRvIHdoaWNoZXZlciBlbGVtZW50IGlzIHRoZSByb290XG4gIC8vIGZvciB0aGUgY3VycmVudCBtb2RlOyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgd2luIG9uIGNvbGxpc2lvbi5cbiAgY29uc3QgcGFzc3Rocm91Z2ggPSBjb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpO1xuXG4gIGlmIChtb2RlID09PSBcInZpZXdcIikge1xuICAgIGNvbnN0IHJlbmRlcmVkID0gcHJvcHMucmVuZGVyVmlldyA/IHByb3BzLnJlbmRlclZpZXcocHJvcHMudmFsdWUpIDogcHJvcHMudmFsdWU7XG4gICAgY29uc3QgaXNFbXB0eSA9IHByb3BzLnZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gKFxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiA8YnV0dG9uPiB3b3VsZCBzd2FsbG93IHRleHQgc2VsZWN0aW9uIGFuZCBhZGQgZGVmYXVsdCBzdHlsaW5nOyBkaXYgd2l0aCByb2xlPWJ1dHRvbiBpcyB0aGUgaW5saW5lLWVkaXQgaWRpb20uXG4gICAgICA8ZGl2XG4gICAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgICAgY2xhc3M9e2Ake2NsYXNzTmFtZX0gJHtjbGFzc2VzW1widmlld1wiXX1gfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktYWN0aW9uLWlucHV0XG4gICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgZGF0YS1zdGF0ZT17aXNFbXB0eSA/IFwiZW1wdHlcIiA6IFwiZmlsbGVkXCJ9XG4gICAgICAgIGRhdGEtdmFyaWFudD17dmFyaWFudH1cbiAgICAgICAgdGFiSW5kZXg9e3Byb3BzLmRpc2FibGVkID8gLTEgOiAwfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17cHJvcHMuYXJpYUxhYmVsID8/IFwiRWRpdFwifVxuICAgICAgICBhcmlhLWRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZCA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkfVxuICAgICAgICBvbkNsaWNrPXtlbnRlckVkaXR9XG4gICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiB8fCBlLmtleSA9PT0gXCIgXCIpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGVudGVyRWRpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2lzRW1wdHkgJiYgcHJvcHMucGxhY2Vob2xkZXIgPyAoXG4gICAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJwbGFjZWhvbGRlclwiXX0+e3Byb3BzLnBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICByZW5kZXJlZFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1vbiA9IHtcbiAgICAuLi5wYXNzdGhyb3VnaCxcbiAgICBjbGFzczogYCR7Y2xhc3Nlc1tcImVkaXRcIl19ICR7Y2xhc3Nlc1tcInJvb3RcIl19YCxcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktYWN0aW9uLWlucHV0XCI6IHRydWUsXG4gICAgXCJkYXRhLXN0YXRlXCI6IFwiZWRpdGluZ1wiLFxuICAgIFwiZGF0YS12YXJpYW50XCI6IHZhcmlhbnQsXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIHZhbHVlOiBkcmFmdCxcbiAgICBvbklucHV0OiAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgc2V0RHJhZnQobmV4dCk7XG4gICAgICBpZiAobGl2ZSkgY29tbWl0KG5leHQpO1xuICAgIH0sXG4gICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICBpZiAoc2F2ZU9uID09PSBcImJsdXJcIikgY29tbWl0KGRyYWZ0KTtcbiAgICAgIGVsc2UgaWYgKCFsaXZlKSBjYW5jZWwoKTtcbiAgICB9LFxuICAgIG9uS2V5RG93bixcbiAgICBcImFyaWEtbGFiZWxcIjogcHJvcHMuYXJpYUxhYmVsID8/IFwiRWRpdFwiLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgfTtcblxuICBpZiAodmFyaWFudCA9PT0gXCJtdWx0aVwiKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICByZWY9eyhlbCkgPT4ge1xuICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQgPSBlbDtcbiAgICAgICAgfX1cbiAgICAgICAgey4uLihjb21tb24gYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTFRleHRBcmVhRWxlbWVudD4pfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICByZWY9eyhlbCkgPT4ge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50ID0gZWw7XG4gICAgICB9fVxuICAgICAgdHlwZT17cHJvcHMuaW5wdXRUeXBlID8/IFwidGV4dFwifVxuICAgICAgey4uLihjb21tb24gYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4pfVxuICAgIC8+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogTGF5b3V0IOKAlCB0aGUgb25lIHByaW1pdGl2ZSB0aGF0IG93bnMgbGF5b3V0aW5nIGNvbmNlcm5zLlxuICpcbiAqIEV2ZXJ5IG90aGVyIGNvbXBvbmVudCBpbiBAZmFpcmZveC9wb2xseS91aSAoYW5kIGV2ZXJ5IGNvbnN1bWVyIGFwcFxuICogdGhhdCBydW5zIGBwb2xseSBxdWFsaXR5IGNzcy1sYXlvdXRgKSByb3V0ZXMgZmxleC9ncmlkIGRlY2lzaW9uc1xuICogdGhyb3VnaCB0aGlzIGNvbXBvbmVudC4gUHJvcHMgbWFwIHRvIENTUyBjdXN0b20gcHJvcGVydGllcyBzbyB0aGVcbiAqIHN0eWxlc2hlZXQgY2FuIHJlYWQgdGhlbSB1bmlmb3JtbHkgYW5kIHNvIGNvbnN1bWVycyBjYW4gb3ZlcnJpZGVcbiAqIGFueSBvZiB0aGVtIGluIG1lZGlhIHF1ZXJpZXMgd2l0aG91dCB0b3VjaGluZyBzcGVjaWZpY2l0eS5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCwgdHlwZSBSZWYgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MYXlvdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBoZWFkZXIsIG5hdiwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDU1MgZ3JpZCBzdHJ1Y3R1cmUuICovXG4gIHJvd3M/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBzdHJpbmc7XG4gIGF1dG9GbG93Pzogc3RyaW5nO1xuICBhdXRvUm93cz86IHN0cmluZztcbiAgYXV0b0NvbHVtbnM/OiBzdHJpbmc7XG5cbiAgLyoqIGRpc3BsYXk6IGNvbnRlbnRzIOKAlCBsZXRzIGNoaWxkcmVuIHBhcnRpY2lwYXRlIGluIGFuIGFuY2VzdG9yIGdyaWQuICovXG4gIGNvbnRlbnRzPzogYm9vbGVhbjtcbiAgLyoqIEluaGVyaXQgcGFyZW50IGdyaWQgdHJhY2tzIHZpYSBDU1Mgc3ViZ3JpZC4gKi9cbiAgc3ViZ3JpZD86IGJvb2xlYW47XG5cbiAgLyoqIFNwYWNpbmcuICovXG4gIGdhcD86IHN0cmluZztcbiAgcGFkZGluZz86IHN0cmluZztcblxuICAvKiogU2l6aW5nLiAqL1xuICBoZWlnaHQ/OiBzdHJpbmc7XG4gIG1pbkhlaWdodD86IHN0cmluZztcbiAgLyoqXG4gICAqIENhcCB0aGUgaW5saW5lIHNpemUgYW5kIGNlbnRyZSB3aXRoaW4gdGhlIHBhcmVudC4gVHlwaWNhbCB2YWx1ZXMgdXNlIHRoZVxuICAgKiBgLS1wb2xseS1tZWFzdXJlLSpgIHRva2VucyAoZS5nLiBcInZhcigtLXBvbGx5LW1lYXN1cmUtcGFnZSlcIiBmb3IgYW4gYXBwXG4gICAqIHNoZWxsLCBcInZhcigtLXBvbGx5LW1lYXN1cmUtcHJvc2UpXCIgZm9yIGJvZHkgY29weSkuIEFueSBDU1MgbGVuZ3RoIHdvcmtzLlxuICAgKi9cbiAgbWF4SW5saW5lU2l6ZT86IHN0cmluZztcblxuICAvKiogQ29udGFpbmVyIGFsaWdubWVudC4gKi9cbiAganVzdGlmeUl0ZW1zPzogc3RyaW5nO1xuICBhbGlnbkl0ZW1zPzogc3RyaW5nO1xuICBqdXN0aWZ5Q29udGVudD86IHN0cmluZztcbiAgYWxpZ25Db250ZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBTZWxmIGFsaWdubWVudCAod2hlbiB0aGlzIExheW91dCBpcyBhbiBpdGVtIGluIGEgcGFyZW50IGdyaWQpLiAqL1xuICBqdXN0aWZ5U2VsZj86IHN0cmluZztcbiAgYWxpZ25TZWxmPzogc3RyaW5nO1xuXG4gIC8qKiBDb2xsYXBzZSB0byBhIHNpbmdsZSBjb2x1bW4gYXQg4omkNjQwcHguICovXG4gIHN0YWNrT25Nb2JpbGU/OiBib29sZWFuO1xuXG4gIC8qKiBSZW5kZXIgYXMgZGlzcGxheTogaW5saW5lLWdyaWQgc28gdGhlIExheW91dCBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0L2NvbnRyb2xzLiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5VXA/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICAvKiogUG9pbnRlci1lbnRlci9sZWF2ZSBvbiB0aGUgY29udGFpbmVyIGl0c2VsZiDigJQgYSBob3Zlci1zY29wZWQgYmVoYXZpb3VyXG4gICAqIHN1Y2ggYXMgcGF1c2luZyBhIHRpbWVyIHdoaWxlIHRoZSBwb2ludGVyIGlzIG92ZXIgYSBzdGFjay4gV2l0aG91dCB0aGVzZVxuICAgKiBhIGNvbXBvbmVudCB0aGF0IG5lZWRzIG9uZSBoYXMgdG8gcmVuZGVyIGl0cyBvd24gZWxlbWVudCBhbmQgd3JpdGUgaXRzXG4gICAqIG93biBncmlkLCB3aGljaCBpcyB0aGUgbG9vcGhvbGUgPExheW91dD4gZXhpc3RzIHRvIGNsb3NlLiAqL1xuICBvbk1vdXNlRW50ZXI/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbk1vdXNlTGVhdmU/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICAvKiogUmVmIHRvIHRoZSByZW5kZXJlZCBlbGVtZW50LiBTYW1lIHJlYXNvbiBhcyB0aGUgaGFuZGxlcnMgYWJvdmU6IGEgZm9jdXNcbiAgICogdHJhcCBvciBhIG1lYXN1cmVtZW50IG5lZWRzIHRoZSBub2RlLCBhbmQgcmVmdXNpbmcgaXQgZm9yY2VzIHJhdyBDU1MuXG4gICAqXG4gICAqIE5hbWVkIGBlbGVtZW50UmVmYCwgbm90IGByZWZgOiBQcmVhY3QgbGlmdHMgYSBgcmVmYCBwcm9wIG9mZiBhIGZ1bmN0aW9uXG4gICAqIGNvbXBvbmVudCBpbnRvIHRoZSB2bm9kZSBhbmQgbmV2ZXIgcGFzc2VzIGl0IHRocm91Z2ggcHJvcHMsIHNvIGEgcGxhaW5cbiAgICogYHJlZmAgaGVyZSB3b3VsZCBiZSBzaWxlbnRseSBkcm9wcGVkLiBDYXVnaHQgYnkgTW9kYWwncyBvdmVybGF5IHRlc3Qg4oCUXG4gICAqIHRoZSBzdGFjayBzdG9wcGVkIHBvcHBpbmcgYmVjYXVzZSB0aGUgY2FsbGJhY2sgbmV2ZXIgcmFuLiAqL1xuICBlbGVtZW50UmVmPzogUmVmPEhUTUxFbGVtZW50PjtcblxuICByb2xlPzogSlNYLkFyaWFSb2xlO1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgaWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xuICBcImFyaWEtZGVzY3JpYmVkYnlcIj86IHN0cmluZztcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBzaXh0ZWVuIG9wdGlvbmFsIHByb3AtdG8tY3VzdG9tLXByb3BlcnR5IG1hcHBpbmdzOyBmbGF0IGFuZCBsaW5lYXIuXG5leHBvcnQgZnVuY3Rpb24gTGF5b3V0KHByb3BzOiBMYXlvdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGFzID0gXCJkaXZcIixcbiAgICByb3dzLFxuICAgIGNvbHVtbnMsXG4gICAgY29udGVudHMsXG4gICAgc3ViZ3JpZCxcbiAgICBnYXAsXG4gICAgcGFkZGluZyxcbiAgICBoZWlnaHQsXG4gICAgbWluSGVpZ2h0LFxuICAgIG1heElubGluZVNpemUsXG4gICAganVzdGlmeUl0ZW1zLFxuICAgIGFsaWduSXRlbXMsXG4gICAganVzdGlmeUNvbnRlbnQsXG4gICAgYWxpZ25Db250ZW50LFxuICAgIGp1c3RpZnlTZWxmLFxuICAgIGFsaWduU2VsZixcbiAgICBhdXRvRmxvdyxcbiAgICBhdXRvUm93cyxcbiAgICBhdXRvQ29sdW1ucyxcbiAgICBzdGFja09uTW9iaWxlLFxuICAgIGlubGluZSxcbiAgICBjbGFzc05hbWUsXG4gICAgb25DbGljayxcbiAgICBvbktleURvd24sXG4gICAgb25LZXlVcCxcbiAgICBvbk1vdXNlRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlLFxuICAgIGVsZW1lbnRSZWYsXG4gICAgcm9sZSxcbiAgICB0YWJJbmRleCxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgaWYgKGNvbnRlbnRzKSB7XG4gICAgc3R5bGVbXCJkaXNwbGF5XCJdID0gXCJjb250ZW50c1wiO1xuICB9IGVsc2UgaWYgKHN1YmdyaWQpIHtcbiAgICBzdHlsZVtcIi0tbC1jb2xcIl0gPSBcIjEgLyAtMVwiO1xuICAgIHN0eWxlW1wiLS1sLWNvbHNcIl0gPSBcInN1YmdyaWRcIjtcbiAgICBpZiAocGFkZGluZykgc3R5bGVbXCItLWwtcFwiXSA9IHBhZGRpbmc7XG4gICAgaWYgKGFsaWduSXRlbXMpIHN0eWxlW1wiLS1sLWFpXCJdID0gYWxpZ25JdGVtcztcbiAgICBpZiAoZ2FwKSBzdHlsZVtcIi0tbC1nYXBcIl0gPSBnYXA7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1sLXBcIl0gPSBwYWRkaW5nO1xuICAgIGlmIChoZWlnaHQpIHN0eWxlW1wiLS1sLWhcIl0gPSBoZWlnaHQ7XG4gICAgaWYgKG1pbkhlaWdodCkgc3R5bGVbXCItLWwtbWhcIl0gPSBtaW5IZWlnaHQ7XG4gICAgaWYgKG1heElubGluZVNpemUpIHN0eWxlW1wiLS1sLW1pc1wiXSA9IG1heElubGluZVNpemU7XG4gICAgaWYgKHJvd3MpIHN0eWxlW1wiLS1sLXJvd3NcIl0gPSByb3dzO1xuICAgIGlmIChjb2x1bW5zKSBzdHlsZVtcIi0tbC1jb2xzXCJdID0gY29sdW1ucztcbiAgICBpZiAoZ2FwKSBzdHlsZVtcIi0tbC1nYXBcIl0gPSBnYXA7XG4gICAgaWYgKGp1c3RpZnlJdGVtcykgc3R5bGVbXCItLWwtamlcIl0gPSBqdXN0aWZ5SXRlbXM7XG4gICAgaWYgKGFsaWduSXRlbXMpIHN0eWxlW1wiLS1sLWFpXCJdID0gYWxpZ25JdGVtcztcbiAgICBpZiAoanVzdGlmeUNvbnRlbnQpIHN0eWxlW1wiLS1sLWpjXCJdID0ganVzdGlmeUNvbnRlbnQ7XG4gICAgaWYgKGFsaWduQ29udGVudCkgc3R5bGVbXCItLWwtYWNcIl0gPSBhbGlnbkNvbnRlbnQ7XG4gICAgaWYgKGF1dG9GbG93KSBzdHlsZVtcIi0tbC1mbG93XCJdID0gYXV0b0Zsb3c7XG4gICAgaWYgKGF1dG9Sb3dzKSBzdHlsZVtcIi0tbC1hcm93c1wiXSA9IGF1dG9Sb3dzO1xuICAgIGlmIChhdXRvQ29sdW1ucykgc3R5bGVbXCItLWwtYWNvbHNcIl0gPSBhdXRvQ29sdW1ucztcbiAgfVxuICBpZiAoanVzdGlmeVNlbGYpIHN0eWxlW1wiLS1sLWpzXCJdID0ganVzdGlmeVNlbGY7XG4gIGlmIChhbGlnblNlbGYpIHN0eWxlW1wiLS1sLWFzXCJdID0gYWxpZ25TZWxmO1xuXG4gIGNvbnN0IGJhc2VQYXJ0cyA9IFtjbGFzc2VzW1wibGF5b3V0XCJdXTtcbiAgaWYgKGlubGluZSkgYmFzZVBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIGlmIChzdGFja09uTW9iaWxlKSBiYXNlUGFydHMucHVzaChjbGFzc2VzW1wic3RhY2tPbk1vYmlsZVwiXSk7XG4gIGNvbnN0IGJhc2VDbGFzcyA9IGJhc2VQYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gIGNvbnN0IGNvbWJpbmVkID0gY29udGVudHMgPyBjbGFzc05hbWUgOiBjbGFzc05hbWUgPyBgJHtiYXNlQ2xhc3N9ICR7Y2xhc3NOYW1lfWAgOiBiYXNlQ2xhc3M7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKi90aXRsZSBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93blxuICAgICAgLy8gYXR0cmlidXRlcyBiZWxvdyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzTmFtZTogY29tYmluZWQsXG4gICAgICBzdHlsZSxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgb25Nb3VzZUVudGVyLFxuICAgICAgb25Nb3VzZUxlYXZlLFxuICAgICAgcmVmOiBlbGVtZW50UmVmLFxuICAgICAgcm9sZSxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1sYXlvdXRcIjogdHJ1ZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogRHJvcGRvd24g4oCUIHRyaWdnZXIgYnV0dG9uICsgcG9wb3ZlciBtZW51IHVzaW5nIHRoZSBuYXRpdmUgUG9wb3ZlciBBUEkuXG4gKlxuICogQSBzaG93biBwb3BvdmVyIGlzIHByb21vdGVkIHRvIHRoZSBicm93c2VyJ3MgdG9wIGxheWVyLCB3aGVyZSBDU1NcbiAqIHBvc2l0aW9uaW5nIHJlc29sdmVzIGFnYWluc3QgdGhlIHZpZXdwb3J0IHJhdGhlciB0aGFuIHRoZSBgLmRyb3Bkb3duYFxuICogd3JhcHBlciDigJQgc28gdGhlIG1lbnUgY2Fubm90IGJlIHBsYWNlZCB3aXRoIGBwb3NpdGlvbjogYWJzb2x1dGVgXG4gKiBhbG9uZS4gSW5zdGVhZCBpdCBpcyBwaW5uZWQgd2l0aCBgcG9zaXRpb246IGZpeGVkYCBhbmQgY29vcmRpbmF0ZXNcbiAqIG1lYXN1cmVkIGZyb20gdGhlIHRyaWdnZXI7IHNlZSBgcG9zaXRpb25NZW51YCBiZWxvdyAoaXNzdWUgIzEyOCkuXG4gKlxuICogVGhlIG1lbnUgZWxlbWVudCBnZXRzIGBwb3BvdmVyPVwiYXV0b1wiYCBhbmQgYSB1bmlxdWUgYGRhdGEtb3ZlcmxheS1pZGAuXG4gKiBgY2xvc2VUb3BPdmVybGF5KClgIGZyb20gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyBmaW5kcyB0aGUgdG9wbW9zdFxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFuZCBkaXNwYXRjaGVzIGBvdmVybGF5OmNsb3NlYCDigJQgdGhlXG4gKiBEcm9wZG93biBsaXN0ZW5zIGZvciB0aGF0IGV2ZW50IGFuZCBtaXJyb3JzIGl0IG9udG8gdGhlIGBpc09wZW5gXG4gKiBzaWduYWwuIEluIHNpbmdsZS1zZWxlY3QgbW9kZSwgY2xpY2tpbmcgdGhlIG1lbnUgY2xvc2VzIGl0OyBpblxuICogbXVsdGktc2VsZWN0IG1vZGUsIHRoZSBtZW51IHN0YXlzIG9wZW4gc28gdGhlIGNvbnN1bWVyIGNhbiBwaWNrXG4gKiBzZXZlcmFsIGl0ZW1zLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VTaWduYWxFZmZlY3QgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0Ryb3Bkb3duLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgRHJvcGRvd25Qcm9wcyA9IHtcbiAgaXNPcGVuOiBTaWduYWw8Ym9vbGVhbj47XG4gIHRyaWdnZXI6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgdHJpZ2dlciA8YnV0dG9uPiBpbiBwbGFjZSBvZiBEcm9wZG93bidzIG93blxuICAgKiBkZWZhdWx0LiBMZXRzIGEgY29tcG9zaW5nIGNvbXBvbmVudCAoU2VsZWN0LCBBY3Rpb25TZWxlY3QpIHN0eWxlXG4gICAqIHRoZSBzaW5nbGUgaW50ZXJhY3RpdmUgZWxlbWVudCBkaXJlY3RseSwgd2l0aCBubyBzdHlsZWQgbm9kZVxuICAgKiBuZXN0ZWQgaW5zaWRlIHRoZSBidXR0b24uIFRoZSB0cmlnZ2VyIGFsc28gY2FycmllcyBhXG4gICAqIGBkYXRhLW9wZW49XCJ0cnVlfGZhbHNlXCJgIGF0dHJpYnV0ZSBtaXJyb3JpbmcgYGlzT3BlbmAsIHNvIHRoZVxuICAgKiBjbGFzcyBjYW4gc3R5bGUgb3Blbi1zdGF0ZSBhZmZvcmRhbmNlcyAoZS5nLiBhIHJvdGF0aW5nIGNhcmV0KS5cbiAgICovXG4gIHRyaWdnZXJDbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlcyB0aGUgdHJpZ2dlciA8YnV0dG9uPi4gKi9cbiAgdHJpZ2dlckRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE5hdGl2ZSBob3ZlciB0b29sdGlwIG9uIHRoZSB0cmlnZ2VyIDxidXR0b24+LiBTZWxlY3QvQWN0aW9uU2VsZWN0XG4gICAqIHBhc3MgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHNvIGEgdHJ1bmNhdGVkIHRyaWdnZXIgc3RpbGwgcmV2ZWFscyBpdHNcbiAgICogZnVsbCB2YWx1ZSBvbiBob3Zlci5cbiAgICovXG4gIHRyaWdnZXJUaXRsZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5sZXQgZHJvcGRvd25Db3VudGVyID0gMDtcblxuLyoqIEdhcCBpbiBweCB0aGUgbWVudSBsZWF2ZXMgYmV0d2VlbiBpdHNlbGYgYW5kIHRoZSB0cmlnZ2VyLiAqL1xuY29uc3QgTUVOVV9HQVAgPSA0O1xuLyoqIE1pbmltdW0gZ2FwIGluIHB4IHRoZSBtZW51IGtlZXBzIGZyb20gZXZlcnkgdmlld3BvcnQgZWRnZS4gKi9cbmNvbnN0IFZJRVdQT1JUX1BBRERJTkcgPSA4O1xuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd24ocHJvcHM6IERyb3Bkb3duUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBpc09wZW4sXG4gICAgdHJpZ2dlcixcbiAgICBjaGlsZHJlbixcbiAgICBhbGlnbiA9IFwibGVmdFwiLFxuICAgIG11bHRpU2VsZWN0ID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIHRyaWdnZXJDbGFzc05hbWUsXG4gICAgdHJpZ2dlckRpc2FibGVkID0gZmFsc2UsXG4gICAgdHJpZ2dlclRpdGxlLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBpZFJlZiA9IHVzZVJlZihgcG9sbHktZHJvcGRvd24tJHsrK2Ryb3Bkb3duQ291bnRlcn1gKTtcbiAgY29uc3QgcG9wb3ZlcklkID0gaWRSZWYuY3VycmVudDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRyaWdnZXJSZWYuY3VycmVudD8uc2V0QXR0cmlidXRlKFwicG9wb3ZlcnRhcmdldFwiLCBwb3BvdmVySWQpO1xuICB9LCBbcG9wb3ZlcklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGNvbnN0IG9uT3ZlcmxheUNsb3NlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEN1c3RvbUV2ZW50ICYmIGUuZGV0YWlsPy5pZCA9PT0gcG9wb3ZlcklkKSB7XG4gICAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgbWVudS5hZGRFdmVudExpc3RlbmVyKFwib3ZlcmxheTpjbG9zZVwiLCBvbk92ZXJsYXlDbG9zZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm92ZXJsYXk6Y2xvc2VcIiwgb25PdmVybGF5Q2xvc2UpO1xuICAgIH07XG4gIH0sIFtwb3BvdmVySWQsIGlzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBjb25zdCB0cmlnZ2VyID0gdHJpZ2dlclJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSB8fCAhdHJpZ2dlcikgcmV0dXJuO1xuXG4gICAgLy8gUGluIHRoZSB0b3AtbGF5ZXIgbWVudSB0byBpdHMgdHJpZ2dlciB3aXRoIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICAgIC8vIFJ1biBmcm9tIGBiZWZvcmV0b2dnbGVgIHRoaXMgaGFwcGVucyBzeW5jaHJvbm91c2x5IGJlZm9yZSB0aGVcbiAgICAvLyBwb3BvdmVyIHBhaW50cywgc28gdGhlIG1lbnUgaXMgY29ycmVjdCBvbiBpdHMgZmlyc3QgZnJhbWUg4oCUIG5vXG4gICAgLy8gZmxhc2guIFJ1biBmcm9tIHNjcm9sbC9yZXNpemUgaXQga2VlcHMgdGhlIG1lbnUgcGlubmVkLlxuICAgIGNvbnN0IHBvc2l0aW9uTWVudSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHQgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAvLyBBIG5vdC15ZXQtc2hvd24gcG9wb3ZlciBpcyBgZGlzcGxheTogbm9uZWAgYW5kIGhhcyBubyBib3ggdG9cbiAgICAgIC8vIG1lYXN1cmUuIEZvcmNlIGxheW91dCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSAoc3luY2hyb25vdXMpXG4gICAgICAvLyByZWFkLCB0aGVuIHJlc3RvcmUg4oCUIG5vdGhpbmcgcGFpbnRzIGluIGJldHdlZW4uIENsZWFyaW5nIHRoZVxuICAgICAgLy8gaW5saW5lIG1heC1oZWlnaHQgZmlyc3QgbWVhc3VyZXMgdGhlIG1lbnUncyBuYXR1cmFsIHNpemUuXG4gICAgICBjb25zdCBwcmV2RGlzcGxheSA9IG1lbnUuc3R5bGUuZGlzcGxheTtcbiAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gXCJcIjtcbiAgICAgIG1lbnUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIGNvbnN0IG1lbnVXaWR0aCA9IG1lbnUub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBtZW51SGVpZ2h0ID0gbWVudS5vZmZzZXRIZWlnaHQ7XG4gICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSBwcmV2RGlzcGxheTtcblxuICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgLy8gSG9yaXpvbnRhbDogYWxpZ24gbGVmdCBlZGdlcyAocmlnaHQgZWRnZXMgd2hlbiBhbGlnbj1cInJpZ2h0XCIpLFxuICAgICAgLy8gdGhlbiBjbGFtcCBzbyB0aGUgbWVudSBuZXZlciBvdmVyZmxvd3MgYSB2aWV3cG9ydCBlZGdlLiBVbmRlclxuICAgICAgLy8gUlRMIHRoZSBcImxlZnRcIiBkZWZhdWx0IHJlYWRzIGFzIHRoZSBpbmxpbmUtc3RhcnQgZWRnZSwgd2hpY2hcbiAgICAgIC8vIGlzIHRoZSB0cmlnZ2VyJ3MgKnJpZ2h0KiBlZGdlIOKAlCBmbGlwIHRoZSBhbmNob3Igc28gdGhlIG1lbnVcbiAgICAgIC8vIGdyb3dzIHRvd2FyZCB0aGUgaW5saW5lLWVuZCBsaWtlIGl0cyBuYXRpdmUgY291bnRlcnBhcnQuXG4gICAgICBjb25zdCBpc1J0bCA9XG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUodHJpZ2dlcikuZGlyZWN0aW9uID09PSBcInJ0bFwiIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09IFwicnRsXCI7XG4gICAgICBjb25zdCBwaHlzaWNhbFJpZ2h0ID0gKGlzUnRsICYmIGFsaWduID09PSBcImxlZnRcIikgfHwgYWxpZ24gPT09IFwicmlnaHRcIjtcbiAgICAgIGxldCBsZWZ0ID0gcGh5c2ljYWxSaWdodCA/IHQucmlnaHQgLSBtZW51V2lkdGggOiB0LmxlZnQ7XG4gICAgICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgoVklFV1BPUlRfUEFERElORywgdmlld3BvcnRXaWR0aCAtIG1lbnVXaWR0aCAtIFZJRVdQT1JUX1BBRERJTkcpO1xuICAgICAgbGVmdCA9IE1hdGgubWluKE1hdGgubWF4KGxlZnQsIFZJRVdQT1JUX1BBRERJTkcpLCBtYXhMZWZ0KTtcblxuICAgICAgLy8gVmVydGljYWw6IGJlbG93IHRoZSB0cmlnZ2VyIGJ5IGRlZmF1bHQ7IGZsaXAgYWJvdmUgd2hlbiB0aGF0XG4gICAgICAvLyBsZWF2ZXMgbW9yZSByb29tLiBDYXAgdGhlIGhlaWdodCB0byB0aGUgc3BhY2UgYXZhaWxhYmxlIHNvIHRoZVxuICAgICAgLy8gbWVudSBhbHdheXMgc3RheXMgb24tc2NyZWVuLlxuICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHZpZXdwb3J0SGVpZ2h0IC0gdC5ib3R0b20gLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBjb25zdCBzcGFjZUFib3ZlID0gdC50b3AgLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgICBpZiAobWVudUhlaWdodCA8PSBzcGFjZUJlbG93IHx8IHNwYWNlQmVsb3cgPj0gc3BhY2VBYm92ZSkge1xuICAgICAgICB0b3AgPSB0LmJvdHRvbSArIE1FTlVfR0FQO1xuICAgICAgICBpZiAobWVudUhlaWdodCA+IHNwYWNlQmVsb3cpIHtcbiAgICAgICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KHNwYWNlQmVsb3csIDApfXB4YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gTWF0aC5tYXgoc3BhY2VBYm92ZSwgMCk7XG4gICAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gYCR7YXZhaWxhYmxlfXB4YDtcbiAgICAgICAgdG9wID0gdC50b3AgLSBNRU5VX0dBUCAtIE1hdGgubWluKG1lbnVIZWlnaHQsIGF2YWlsYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIG1lbnUuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICBtZW51LnN0eWxlLm1hcmdpbiA9IFwiMFwiO1xuICAgICAgbWVudS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICBtZW51LnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQmVmb3JlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoXCJuZXdTdGF0ZVwiIGluIGUgJiYgZS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcbiAgICAgICAgcG9zaXRpb25NZW51KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvblJlcG9zaXRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAobWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkgcG9zaXRpb25NZW51KCk7XG4gICAgfTtcblxuICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXRvZ2dsZVwiLCBvbkJlZm9yZVRvZ2dsZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlcG9zaXRpb24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV0b2dnbGVcIiwgb25CZWZvcmVUb2dnbGUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIG9uUmVwb3NpdGlvbik7XG4gICAgfTtcbiAgfSwgW2FsaWduXSk7XG5cbiAgdXNlU2lnbmFsRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGlmIChpc09wZW4udmFsdWUgJiYgIW1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHtcbiAgICAgIG1lbnUuc2hvd1BvcG92ZXIoKTtcbiAgICB9IGVsc2UgaWYgKCFpc09wZW4udmFsdWUgJiYgbWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkge1xuICAgICAgbWVudS5oaWRlUG9wb3ZlcigpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKFwibmV3U3RhdGVcIiBpbiBlKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSAoZSBhcyB1bmtub3duIGFzIHsgbmV3U3RhdGU6IHN0cmluZyB9KS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCI7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIW11bHRpU2VsZWN0KSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImRyb3Bkb3duXCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWRyb3Bkb3duPlxuICAgICAgPGJ1dHRvblxuICAgICAgICByZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz17dHJpZ2dlckNsYXNzTmFtZSA/PyBjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwifVxuICAgICAgICBkaXNhYmxlZD17dHJpZ2dlckRpc2FibGVkfVxuICAgICAgICB0aXRsZT17dHJpZ2dlclRpdGxlfVxuICAgICAgICBkYXRhLW9wZW49e2lzT3Blbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgPlxuICAgICAgICB7dHJpZ2dlcn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e21lbnVSZWZ9XG4gICAgICAgIGlkPXtwb3BvdmVySWR9XG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgYXJpYS1tdWx0aXNlbGVjdGFibGU9e211bHRpU2VsZWN0ID8gXCJ0cnVlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wibWVudVwiXSA/PyBcIlwifVxuICAgICAgICBkYXRhLWFsaWduPXthbGlnbn1cbiAgICAgICAgcG9wb3Zlcj1cImF1dG9cIlxuICAgICAgICBkYXRhLW92ZXJsYXktaWQ9e3BvcG92ZXJJZH1cbiAgICAgICAgb25Ub2dnbGU9e2hhbmRsZVRvZ2dsZX1cbiAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIDxMYXlvdXQgcm93cz1cImF1dG9cIiBnYXA9XCIwXCI+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNlbGVjdFRyaWdnZXIg4oCUIHRoZSBsYWJlbC9jYXJldCByb3cgaW5zaWRlIGEgc2VsZWN0IHRyaWdnZXIgYm94LlxuICpcbiAqIGAudHJpZ2dlcmAgaW4gU2VsZWN0Lm1vZHVsZS5jc3Mgc3R5bGVzIHRoZSAqYm94KjogYm9yZGVyLCBwYWRkaW5nLFxuICogYG1pbi1ibG9jay1zaXplYCwgYW5kIGBhbGlnbi1jb250ZW50OiBjZW50ZXJgIHRvIGNlbnRyZSBvbmUgY2hpbGQgaW5cbiAqIGl0LiBJdCBkZWxpYmVyYXRlbHkgZGVjbGFyZXMgbm8gZmxleCBvciBncmlkIG9mIGl0cyBvd24g4oCUIHBvbGx5LXVpXG4gKiByb3V0ZXMgZXZlcnkgbGF5b3V0IGRlY2lzaW9uIHRocm91Z2ggPExheW91dD4g4oCUIHNvIHRoZSBjb21wb25lbnRcbiAqIHRoYXQgYXBwbGllcyBgLnRyaWdnZXJgIG11c3Qgc3VwcGx5IHRoZSByb3cuXG4gKlxuICogcG9sbHkjMTgwOiB0aGF0IHJ1bGUgd2FzIGNoYW5nZWQgZm9yIG9uZSBvZiBpdHMgdHdvIGNvbnN1bWVycy5cbiAqIDxTZWxlY3Q+IGdhaW5lZCBhIDxMYXlvdXQ+OyA8QWN0aW9uU2VsZWN0Piwgd2hpY2ggYXBwbGllcyB0aGUgc2FtZVxuICogY2xhc3MgdGhyb3VnaCBEcm9wZG93bidzIGB0cmlnZ2VyQ2xhc3NOYW1lYCwga2VwdCByZW5kZXJpbmcgdHdvIGJhcmVcbiAqIGlubGluZSBzcGFucywgc28gaXRzIGNhcmV0IHdyYXBwZWQgb250byBhIHNlY29uZCBsaW5lLiBOb3RoaW5nIHRpZWRcbiAqIHRoZSBzdHlsZXNoZWV0J3MgY29udHJhY3QgdG8gdGhlIGNvbXBvbmVudHMgdGhhdCBoYWQgdG8gc2F0aXNmeSBpdC5cbiAqIFRoaXMgbW9kdWxlIGlzIHRoYXQgdGllOiBvbmUgcm93LCBvbmUgZGVmaW5pdGlvbiwgYm90aCBjb25zdW1lcnMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4uL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFRyaWdnZXJQcm9wcyA9IHtcbiAgLyoqIFRleHQgaW4gdGhlIHRyaWdnZXIg4oCUIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgb3IgdGhlIHBsYWNlaG9sZGVyLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKipcbiAgICogUmVuZGVyIHRoZSBkcm9wZG93biBjYXJldCBiZXNpZGUgdGhlIGxhYmVsLiBPZmYgZm9yIGEgZGlzYWJsZWRcbiAgICogPEFjdGlvblNlbGVjdD4sIHdoaWNoIGlzIHN0YXRpYyB0ZXh0IHdpdGggbm8gbWVudSB0byBvcGVuLlxuICAgKi9cbiAgY2FyZXQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRWxlbWVudCB0aGUgcm93IHJlbmRlcnMgYXMuIGBzcGFuYCB3aGVyZSB0aGUgdHJpZ2dlciBib3ggaXMgaXRzZWxmXG4gICAqIHBocmFzaW5nIGNvbnRlbnQg4oCUIGEgZGlzYWJsZWQgPEFjdGlvblNlbGVjdD4gcmVuZGVycyBpdHMgYm94IGFzIGFcbiAgICogPHNwYW4+LCB3aGljaCBtYXkgbm90IGNvbnRhaW4gYSA8ZGl2Pi5cbiAgICovXG4gIGFzPzogXCJkaXZcIiB8IFwic3BhblwiO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdFRyaWdnZXIocHJvcHM6IFNlbGVjdFRyaWdnZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBsYWJlbCwgY2FyZXQgPSB0cnVlLCBhcyA9IFwiZGl2XCIgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxMYXlvdXRcbiAgICAgIGFzPXthc31cbiAgICAgIGlubGluZVxuICAgICAgLy8gV2l0aG91dCBhIGNhcmV0IHRoZSBzZWNvbmQgdHJhY2sgd291bGQgc3RpbGwgY29udHJpYnV0ZSBpdHMgZ2FwLFxuICAgICAgLy8gcGFkZGluZyB0aGUgdHJpZ2dlciBieSA4cHggaXQgZG9lcyBub3QgbmVlZC5cbiAgICAgIGNvbHVtbnM9e2NhcmV0ID8gXCIxZnIgYXV0b1wiIDogXCIxZnJcIn1cbiAgICAgIHsuLi4oY2FyZXQgPyB7IGdhcDogXCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiB9IDoge30pfVxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBtYXhJbmxpbmVTaXplPVwiMTAwJVwiXG4gICAgPlxuICAgICAgey8qIFRoZSAxZnIgdHJhY2sgYmxvY2tpZmllcyB0aGlzIHNwYW4sIHdoaWNoIGlzIHdoYXQgbGV0c1xuICAgICAgICAgIGB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpc2AgYXBwbHkgdG8gYSBsb25nIGxhYmVsLiAqL31cbiAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1widHJpZ2dlckxhYmVsXCJdfSBkYXRhLXBvbGx5LXNlbGVjdC1sYWJlbD5cbiAgICAgICAge2xhYmVsfVxuICAgICAgPC9zcGFuPlxuICAgICAge2NhcmV0ICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wiY2FyZXRcIl19IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+fVxuICAgIDwvTGF5b3V0PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEFjdGlvblNlbGVjdCDigJQgc2luZ2xlLXNlbGVjdCBkcm9wZG93biB0aGF0IGNvbW1pdHMgdmlhIHRoZSBhY3Rpb24gc3lzdGVtLlxuICpcbiAqIFRoZSBhY3Rpb24tZGlzcGF0Y2hpbmcgc2libGluZyBvZiA8U2VsZWN0Pi4gV2hlcmUgPFNlbGVjdD4gYmluZHMgYVxuICogYFNpZ25hbDxTZXQ8VD4+YCBhbmQgaXMgYnVpbHQgZm9yIGluLW1lbW9yeSBmaWx0ZXIgVUlzLCBBY3Rpb25TZWxlY3RcbiAqIHRha2VzIHRoZSBjdXJyZW50IGB2YWx1ZWAgYXMgYSBwbGFpbiBzdHJpbmcgYW5kIGZpcmVzIGBhY3Rpb25gIHdpdGhcbiAqIGBkYXRhLWFjdGlvbi12YWx1ZWAgc2V0IHRvIHRoZSBjaG9zZW4gb3B0aW9uIOKAlCBzbyBlZGl0aW5nIGFcbiAqIHNlcnZlci1iYWNrZWQgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBzYW1lIGV2ZW50IGRlbGVnYXRpb24gYXNcbiAqIDxBY3Rpb25JbnB1dD4gYW5kIDxBY3Rpb25Gb3JtPiwgd2l0aCBubyBzeW50aGV0aWMgc2lnbmFsIG9yIGJyaWRnaW5nXG4gKiBgZWZmZWN0YCByZXF1aXJlZC5cbiAqXG4gKiBDb21wb3NlcyA8RHJvcGRvd24+IGZvciB0aGUgbWVudS4gVGhlIHRyaWdnZXIgc3R5bGluZyBpcyBhcHBsaWVkXG4gKiBkaXJlY3RseSB0byBEcm9wZG93bidzIG93biA8YnV0dG9uPiB2aWEgYHRyaWdnZXJDbGFzc05hbWVgLCBzbyB0aGVcbiAqIHZpc2libGUgYm94IGFuZCB0aGUgaW50ZXJhY3RpdmUgZWxlbWVudCBhcmUgb25lIGFuZCB0aGUgc2FtZSBub2RlIOKAlFxuICogbm8gc3R5bGVkIDxzcGFuPiBuZXN0ZWQgaW5zaWRlIGFuIHVuc3R5bGVkIDxidXR0b24+LiBBIGRpc2FibGVkXG4gKiBBY3Rpb25TZWxlY3QgcmVuZGVycyBhcyBzdGF0aWMgdGV4dCB3aXRob3V0IGEgY2FyZXQuXG4gKlxuICogQm90aCBicmFuY2hlcyByZW5kZXIgdGhlaXIgbGFiZWwvY2FyZXQgcm93IHRocm91Z2ggPFNlbGVjdFRyaWdnZXI+LFxuICogdGhlIHNhbWUgcm93IDxTZWxlY3Q+IHVzZXMg4oCUIGAudHJpZ2dlcmAgc3R5bGVzIHRoZSBib3ggYW5kIHN1cHBsaWVzXG4gKiBubyBsYXlvdXQsIHNvIHRoZSBjb21wb25lbnQgb3dlcyBpdCBvbmUgKHBvbGx5IzE4MCkuXG4gKi9cblxuaW1wb3J0IHsgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCB7IFNlbGVjdFRyaWdnZXIgfSBmcm9tIFwiLi9pbnRlcm5hbC9zZWxlY3QtdHJpZ2dlci50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiB9IGZyb20gXCIuL1NlbGVjdC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uU2VsZWN0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogQ3VycmVudCB2YWx1ZSDigJQgbWF0Y2hlZCBhZ2FpbnN0IGBvcHRpb25zYCB0byByZW5kZXIgdGhlIHRyaWdnZXIgbGFiZWwuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBTZWxlY3RhYmxlIG9wdGlvbnMuICovXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxzdHJpbmc+W107XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBzZWxlY3Rpb24uIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxvcHRpb24gdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIEV4dHJhIGRhdGEtYWN0aW9uLSogYXR0cmlidXRlcyB0byBpbmNsdWRlIG9uIGNvbW1pdCAoZS5nLiBlbnRpdHkgaWQpLiAqL1xuICBhY3Rpb25EYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFZpc2libGUgZmllbGQgbGFiZWwgcmVuZGVyZWQgYWJvdmUgdGhlIHRyaWdnZXIuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogVHJpZ2dlciB0ZXh0IHNob3duIHdoZW4gYHZhbHVlYCBtYXRjaGVzIG5vIG9wdGlvbi4gRGVmYXVsdDogXCJTZWxlY3TigKZcIi4gKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBsYWJlbEZvcihvcHRpb25zOiBTZWxlY3RPcHRpb248c3RyaW5nPltdLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChvcHQudmFsdWUgPT09IHZhbHVlKSByZXR1cm4gb3B0LmxhYmVsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25TZWxlY3QocHJvcHM6IEFjdGlvblNlbGVjdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgdmFsdWUsXG4gICAgb3B0aW9ucyxcbiAgICBhY3Rpb24sXG4gICAgYWN0aW9uRGF0YSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlciA9IFwiU2VsZWN04oCmXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICB3aWRlID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaXNPcGVuID0gdXNlU2lnbmFsKGZhbHNlKTtcblxuICBjb25zdCBjdXJyZW50ID0gbGFiZWxGb3Iob3B0aW9ucywgdmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY3VycmVudCA9PT0gdW5kZWZpbmVkO1xuICBjb25zdCBkaXNwbGF5VGV4dCA9IGN1cnJlbnQgPz8gcGxhY2Vob2xkZXI7XG5cbiAgY29uc3QgY29tbWl0ID0gKG5leHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIGlmIChuZXh0ID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIGRpc3BhdGNoQWN0aW9uKGFjdGlvbiwgeyAuLi4oYWN0aW9uRGF0YSA/PyB7fSksIHZhbHVlOiBuZXh0IH0pO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJQYXJ0cyA9IFtjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwiXTtcbiAgaWYgKGlzRW1wdHkpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJwbGFjZWhvbGRlclwiXSA/PyBcIlwiKTtcbiAgaWYgKHdpZGUpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJ0cmlnZ2VyV2lkZVwiXSA/PyBcIlwiKTtcbiAgY29uc3QgdHJpZ2dlckNsYXNzID0gdHJpZ2dlclBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wic2VsZWN0XCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1zZWxlY3RcbiAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgID5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAge2Rpc2FibGVkID8gKFxuICAgICAgICA8c3BhbiBjbGFzcz17dHJpZ2dlckNsYXNzfSBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiIHRpdGxlPXtkaXNwbGF5VGV4dH0+XG4gICAgICAgICAgPFNlbGVjdFRyaWdnZXIgYXM9XCJzcGFuXCIgY2FyZXQ9e2ZhbHNlfSBsYWJlbD17ZGlzcGxheVRleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxEcm9wZG93blxuICAgICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgICB0cmlnZ2VyVGl0bGU9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgIHRyaWdnZXI9ezxTZWxlY3RUcmlnZ2VyIGxhYmVsPXtkaXNwbGF5VGV4dH0gLz59XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IG9wdC52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcHRDbGFzcyA9IGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e29wdC52YWx1ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz17b3B0Q2xhc3N9XG4gICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvbW1pdChvcHQudmFsdWUpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e29wdC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQmFkZ2Ug4oCUIHNtYWxsIGlubGluZSBzdGF0dXMgY2hpcC5cbiAqXG4gKiBSZW5kZXJzIGFzIGEgcGFzc2l2ZSA8c3Bhbj4gd2l0aCB0aW50ZWQgYmFja2dyb3VuZCBhbmQgb24tdGludCB0ZXh0XG4gKiBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW4gZmFtaWx5LiBUaGUgZGVmYXVsdCB2YXJpYW50IHVzZXNcbiAqIHN1cmZhY2Utc3Vua2VuICsgbXV0ZWQgdGV4dCBmb3IgYSBuZXV0cmFsIHBpbGwuIENvbnN1bWVycyBzdHlsZVxuICogcGxhY2VtZW50IHZpYSBjbGFzc05hbWU7IHRoZSBwcmltaXRpdmUgb3ducyBzaXplLCBzaGFwZSwgYW5kIGNvbG91ci5cbiAqXG4gKiBBIGJhZGdlIGlzIG9mdGVuIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBzdGF0dXMgKFwiM1wiLCBcIuKXj1wiKTsgcGFzc1xuICogYHRpdGxlYCB0byBhdHRhY2ggYW4gZXhwbGFuYXRvcnkgaG92ZXIgdG9vbHRpcCAoXCIzIHBlZXJzIGNvbm5lY3RlZFwiKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEJhZGdlVmFyaWFudCA9IFwiZGVmYXVsdFwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIjtcblxuZXhwb3J0IHR5cGUgQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICB2YXJpYW50PzogQmFkZ2VWYXJpYW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogTmF0aXZlIGhvdmVyIHRvb2x0aXAg4oCUIGV4cGxhaW5zIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBiYWRnZS4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogQmFkZ2VWYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiaW5mb1wiKSByZXR1cm4gY2xhc3Nlc1tcImluZm9cIl07XG4gIGlmICh2YXJpYW50ID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIGNsYXNzZXNbXCJzdWNjZXNzXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJ3YXJuaW5nXCIpIHJldHVybiBjbGFzc2VzW1wid2FybmluZ1wiXTtcbiAgaWYgKHZhcmlhbnQgPT09IFwiZGFuZ2VyXCIpIHJldHVybiBjbGFzc2VzW1wiZGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQmFkZ2UocHJvcHM6IEJhZGdlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHZhcmlhbnQgPSBcImRlZmF1bHRcIiwgY2xhc3NOYW1lLCBpZCwgdGl0bGUgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYmFkZ2VcIl1dO1xuICBjb25zdCB2ID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodikgcGFydHMucHVzaCh2KTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGlkPXtpZH0gdGl0bGU9e3RpdGxlfSBjbGFzcz17cGFydHMuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1iYWRnZT17dmFyaWFudH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9zcGFuPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEJ1dHRvbiDigJQgaW50ZXJhY3RpdmUgY29udHJvbCB3aXRoIHRpZXIsIHNlbWFudGljIGNvbG91ciwgYW5kIHNpemUuXG4gKlxuICogUmVuZGVycyBhcyBhIDxidXR0b24+IGJ5IGRlZmF1bHQ7IHN3aXRjaGVzIHRvIGFuIDxhPiB3aGVuIGdpdmVuIGFuXG4gKiBgaHJlZmAuIFRpZXIgc2V0cyB2aXN1YWwgaW1wb3J0YW5jZSAocHJpbWFyeS9zZWNvbmRhcnkvdGVydGlhcnkpLFxuICogY29sb3Igb3ZlcmxheXMgc2VtYW50aWMgbWVhbmluZyAoaW5mby9zdWNjZXNzL3dhcm5pbmcvZGFuZ2VyKSxcbiAqIHNpemUgcGlja3MgdGhlIGhlaWdodCArIHBhZGRpbmcgKyBmb250IHNjYWxlIChzbWFsbC9ub3JtYWwvbGFyZ2UpLlxuICogVGhlIGJ1dHRvbiBpcyBhIGZsZXggY29udGFpbmVyLCBzbyBhbiBpY29uIGFuZCBhIGxhYmVsIGFyZSBpdHMgb3duXG4gKiBjaGlsZHJlbiB3aXRoIGEgYGdhcGAgYmV0d2VlbiB0aGVtLlxuICpcbiAqIEhlaWdodCBjb21lcyBmcm9tIC0tcG9sbHktY29udHJvbC1oZWlnaHQtKiwgbmV2ZXIgZnJvbSBwYWRkaW5nLCBzbyBhXG4gKiBCdXR0b24gaXMgZXhhY3RseSBhcyB0YWxsIGFzIGEgVGV4dElucHV0IG9yIGEgU2VsZWN0IGluIHRoZSBzYW1lIHJvdy5cbiAqXG4gKiBBIHRleHQgYGxhYmVsYCBpcyB0aGUgYWNjZXNzaWJsZSBuYW1lLiBBbiBpY29uLW9ubHkgYnV0dG9uIChpY29uLCBub1xuICogbGFiZWwpIGhhcyBub25lLCBzbyB0aGUgdHlwZSBSRVFVSVJFUyBgYXJpYS1sYWJlbGAgdGhlcmUg4oCUIGFuIHVubmFtZWRcbiAqIGljb24gYnV0dG9uIHdvbid0IGNvbXBpbGUuIE5vIGJ1aWxkLXRpbWUgbGludCBuZWVkZWQ7IHRoZSBjYWxsIHNpdGVcbiAqIGl0c2VsZiBpcyB0aGUgZ2F0ZS5cbiAqXG4gKiBBY3Rpb24gd2lyaW5nIGlzIGRlY2xhcmVkIHZpYSBkYXRhLSogYXR0cmlidXRlcyBjb25zdW1lZCBieSB0aGVcbiAqIGdsb2JhbCBldmVudCBkZWxlZ2F0b3IgaW4gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyDigJQgQnV0dG9uIGRvZXMgbm90XG4gKiBhY2NlcHQgYW4gb25DbGljayBwcm9wLlxuICpcbiAqIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIG5hdGl2ZSBob3ZlciB0b29sdGlwOiBhbiBleHBsaWNpdCBgdGl0bGVgXG4gKiB3aW5zLCBlbHNlIHRoZSB2aXNpYmxlIHRleHQgbGFiZWwsIGVsc2UgdGhlIGBhcmlhLWxhYmVsYCAoc28gYW5cbiAqIGljb24tb25seSBidXR0b24gc3RpbGwgZ2V0cyBvbmUpLiBQYXNzIGB0aXRsZT1cIlwiYCB0byBzdXBwcmVzcyBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1gsIFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQnV0dG9uVGllciA9IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IFwidGVydGlhcnlcIjtcbmV4cG9ydCB0eXBlIEJ1dHRvbkNvbG9yID0gXCJkZWZhdWx0XCIgfCBcImluZm9cIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiO1xuZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9IFwic21hbGxcIiB8IFwibm9ybWFsXCIgfCBcImxhcmdlXCI7XG5cbnR5cGUgQmFzZUJ1dHRvblByb3BzID0ge1xuICBpZD86IHN0cmluZztcbiAgdGllcj86IEJ1dHRvblRpZXI7XG4gIGNvbG9yPzogQnV0dG9uQ29sb3I7XG4gIHNpemU/OiBCdXR0b25TaXplO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGZ1bGxXaWR0aD86IGJvb2xlYW47XG4gIGNpcmNsZT86IGJvb2xlYW47XG4gIC8qKiBDYXAgdGhlIGJ1dHRvbiB3aWR0aCBhdCBgLS1wb2xseS1jb250cm9sLW1heC13aWR0aGAgYW5kIGVsbGlwc2lzLVxuICAgKiB0cnVuY2F0ZSB0aGUgbGFiZWwuIFVzZSBmb3IgdXNlci1zdXBwbGllZCBvciBvdGhlcndpc2UgdW5ib3VuZGVkXG4gICAqIGxhYmVscyBzbyBhIGxvbmcgc3RyaW5nIGRvZXNuJ3QgYmxvdyBvdXQgdGhlIHJvdy4gKi9cbiAgYm91bmRlZD86IGJvb2xlYW47XG4gIC8qKiBQdWxsIHRoZSBib3ggb3V0IGJ5IGl0cyBvd24gaW5saW5lIHBhZGRpbmcgc28gdGhlIExBQkVMIHNpdHMgb24gdGhlXG4gICAqIHRleHQgZWRnZSByYXRoZXIgdGhhbiB0aGUgYm94IGVkZ2UuIEZvciBhIGB0ZXJ0aWFyeWAgYnV0dG9uIGluIGEgdGV4dFxuICAgKiBjb2x1bW4sIHdoZXJlIHRoZSBpbnZpc2libGUgcGFkZGluZyBvdGhlcndpc2UgcmVhZHMgYXMgYW4gaW5kZW50XG4gICAqIGFnYWluc3QgdGhlIGNvcHkgYmVzaWRlIGl0LiBBIGJvcmRlcmVkIGJ1dHRvbiBzaG91bGQga2VlcCBpdHMgZGVmYXVsdFxuICAgKiBib3ggYWxpZ25tZW50IOKAlCB0aGUgYm9yZGVyIGlzIHdoYXQgbWFrZXMgdGhhdCBlZGdlIGxlZ2libGUuIFRoZSBoaXRcbiAgICogdGFyZ2V0IGlzIHVuY2hhbmdlZDsgb25seSB0aGUgYm94J3MgcG9zaXRpb24gaW4gdGhlIGxheW91dCBtb3Zlcy4gKi9cbiAgZmx1c2g/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBcImRhdGEtYWN0aW9uXCI/OiBzdHJpbmc7XG4gIC8qKiBBZGRpdGlvbmFsIGFjdGlvbi1wYXlsb2FkIGF0dHJpYnV0ZXMgdGhlIGV2ZW50IGRlbGVnYXRvciBwYXJzZXNcbiAgICogaW50byBgY3R4LmRhdGFgLiBgZGF0YS1hY3Rpb24tdGlkPVwidC0xN1wiYCBiZWNvbWVzIGB7IHRpZDogXCJ0LTE3XCIgfWAsXG4gICAqIGBkYXRhLWFjdGlvbi1pdGVtLWlkPVwi4oCmXCJgIGJlY29tZXMgYHsgaXRlbUlkOiBcIuKAplwiIH1gLCBhbmQgc28gb24uXG4gICAqIFR5cGVkIGFzIGFuIGluZGV4IHNpZ25hdHVyZSBzbyBldmVyeSBgZGF0YS1hY3Rpb24tKmAga2V5IHRoZVxuICAgKiBjb25zdW1lciBjYXJlcyBhYm91dCB0eXBlLWNoZWNrcyB3aXRob3V0IGEgQnV0dG9uLXNpZGUgZW51bWVyYXRpb24uICovXG4gIFthY3Rpb25EYXRhQXR0cjogYGRhdGEtYWN0aW9uLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENvbnRlbnQvYWNjZXNzaWJpbGl0eSBkaW1lbnNpb24uIEEgdmlzaWJsZSB0ZXh0IGBsYWJlbGAgaXMgdGhlXG4gKiBhY2Nlc3NpYmxlIG5hbWUsIHNvIGl0IG1ha2VzIGBhcmlhLWxhYmVsYCBvcHRpb25hbC4gQW4gaWNvbi1vbmx5XG4gKiBidXR0b24gaGFzIG5vIHRleHQgdG8gbmFtZSBpdCwgc28gYGFyaWEtbGFiZWxgIGlzIFJFUVVJUkVEIOKAlCB5b3VcbiAqIGNhbm5vdCBjb25zdHJ1Y3QgYW4gdW5uYW1lZCBpY29uIGJ1dHRvbi4gKEJ1dHRvbidzIGhvdmVyIHRpdGxlIHRoZW5cbiAqIGZhbGxzIGJhY2sgdG8gdGhhdCBhcmlhLWxhYmVsLCBzbyB0aGUgc2FtZSBwcm9wIGdpdmVzIGJvdGggdGhlXG4gKiBhY2Nlc3NpYmxlIG5hbWUgYW5kIHRoZSB0b29sdGlwLilcbiAqL1xudHlwZSBMYWJlbGxlZENvbnRlbnQgPSB7XG4gIGxhYmVsOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgaWNvbj86IFZOb2RlO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG50eXBlIEljb25Pbmx5Q29udGVudCA9IHtcbiAgaWNvbjogVk5vZGU7XG4gIGxhYmVsPzogbmV2ZXI7XG4gIFwiYXJpYS1sYWJlbFwiOiBzdHJpbmc7XG59O1xudHlwZSBCdXR0b25Db250ZW50ID0gTGFiZWxsZWRDb250ZW50IHwgSWNvbk9ubHlDb250ZW50O1xuXG50eXBlIEJ1dHRvbkVsZW1lbnQgPSB7XG4gIGhyZWY/OiBuZXZlcjtcbiAgdGFyZ2V0PzogbmV2ZXI7XG4gIHJlbD86IG5ldmVyO1xuICBkb3dubG9hZD86IG5ldmVyO1xuICB0eXBlPzogXCJidXR0b25cIiB8IFwic3VibWl0XCIgfCBcInJlc2V0XCI7XG59O1xuXG50eXBlIExpbmtFbGVtZW50ID0ge1xuICBocmVmOiBzdHJpbmc7XG4gIHRhcmdldD86IHN0cmluZztcbiAgcmVsPzogc3RyaW5nO1xuICAvKiogRm9yd2FyZGVkIHRvIHRoZSByZW5kZXJlZCA8YT4gc28gYSBCdXR0b24tYXMtbGluayBjYW4gb2ZmZXIgYSBmaWxlXG4gICAqIGRvd25sb2FkLiBBbiBlbXB0eSBzdHJpbmcgdXNlcyB0aGUgcmVzb3VyY2UncyBvd24gZmlsZW5hbWUuICovXG4gIGRvd25sb2FkPzogc3RyaW5nO1xuICB0eXBlPzogbmV2ZXI7XG59O1xuXG5leHBvcnQgdHlwZSBCdXR0b25Qcm9wcyA9IEJhc2VCdXR0b25Qcm9wcyAmIEJ1dHRvbkNvbnRlbnQgJiAoQnV0dG9uRWxlbWVudCB8IExpbmtFbGVtZW50KTtcblxuZnVuY3Rpb24gdGllckNsYXNzKHRpZXI6IEJ1dHRvblRpZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodGllciA9PT0gXCJwcmltYXJ5XCIpIHJldHVybiBjbGFzc2VzW1widGllclByaW1hcnlcIl07XG4gIGlmICh0aWVyID09PSBcInRlcnRpYXJ5XCIpIHJldHVybiBjbGFzc2VzW1widGllclRlcnRpYXJ5XCJdO1xuICByZXR1cm4gY2xhc3Nlc1tcInRpZXJTZWNvbmRhcnlcIl07XG59XG5cbmZ1bmN0aW9uIGNvbG9yQ2xhc3MoY29sb3I6IEJ1dHRvbkNvbG9yKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNvbG9yID09PSBcImluZm9cIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvckluZm9cIl07XG4gIGlmIChjb2xvciA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JTdWNjZXNzXCJdO1xuICBpZiAoY29sb3IgPT09IFwid2FybmluZ1wiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yV2FybmluZ1wiXTtcbiAgaWYgKGNvbG9yID09PSBcImRhbmdlclwiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yRGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzaXplQ2xhc3Moc2l6ZTogQnV0dG9uU2l6ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaXplID09PSBcInNtYWxsXCIpIHJldHVybiBjbGFzc2VzW1wiYnRuU21hbGxcIl07XG4gIGlmIChzaXplID09PSBcImxhcmdlXCIpIHJldHVybiBjbGFzc2VzW1wiYnRuTGFyZ2VcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBmbGF0IHByb3AtdG8tY2xhc3MgY29tcG9zaXRpb24gcGx1cyBvbmUgYW5jaG9yL2J1dHRvbiBicmFuY2g7IHNwbGl0dGluZyB3b3VsZCBqdXN0IGhpZGUgdGhlIG1hcHBpbmcuXG5leHBvcnQgZnVuY3Rpb24gQnV0dG9uKHByb3BzOiBCdXR0b25Qcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHRpZXIgPSBcInNlY29uZGFyeVwiLFxuICAgIGNvbG9yID0gXCJkZWZhdWx0XCIsXG4gICAgc2l6ZSA9IFwibm9ybWFsXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBjaXJjbGUgPSBmYWxzZSxcbiAgICBib3VuZGVkID0gZmFsc2UsXG4gICAgZmx1c2ggPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgdGl0bGUsXG4gICAgaWNvbixcbiAgICBsYWJlbCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJidG5cIl0gPz8gXCJcIl07XG4gIGNvbnN0IHRjID0gdGllckNsYXNzKHRpZXIpO1xuICBpZiAodGMpIHBhcnRzLnB1c2godGMpO1xuICBjb25zdCBjYyA9IGNvbG9yQ2xhc3MoY29sb3IpO1xuICBpZiAoY2MpIHBhcnRzLnB1c2goY2MpO1xuICBjb25zdCBzYyA9IHNpemVDbGFzcyhzaXplKTtcbiAgaWYgKHNjKSBwYXJ0cy5wdXNoKHNjKTtcbiAgaWYgKGNpcmNsZSkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuQ2lyY2xlXCJdID8/IFwiXCIpO1xuICBpZiAoZnVsbFdpZHRoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5GdWxsV2lkdGhcIl0gPz8gXCJcIik7XG4gIGlmIChib3VuZGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5Cb3VuZGVkXCJdID8/IFwiXCIpO1xuICBpZiAoZmx1c2gpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImJ0bkZsdXNoXCJdID8/IFwiXCIpO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIGNvbnN0IGJ1dHRvbkNsYXNzID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuXG4gIC8vIEFuIGljb24gYmVzaWRlIGEgbGFiZWwgaXMgYW4gYXJyYW5nZW1lbnQsIHNvIGl0IGdvZXMgdGhyb3VnaCA8TGF5b3V0Pi5cbiAgLy8gQSBsYWJlbCBvbiBpdHMgb3duIGlzIG5vdDogaXQgaXMgb25lIGlubGluZSBjaGlsZCB0aGF0IHRoZSBidXR0b24nc1xuICAvLyBhbGlnbi1jb250ZW50IGFuZCB0ZXh0LWFsaWduIGNlbnRyZSwgd2l0aCBubyBjb250YWluZXIgYXQgYWxsLlxuICBjb25zdCBjb250ZW50ID1cbiAgICBpY29uID09PSB1bmRlZmluZWQgPyAoXG4gICAgICBsYWJlbFxuICAgICkgOiAoXG4gICAgICA8TGF5b3V0IGlubGluZSBjb2x1bW5zPVwiYXV0byBhdXRvXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImljb25cIl19PntpY29ufTwvc3Bhbj5cbiAgICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgICA8L0xheW91dD5cbiAgICApO1xuXG4gIGNvbnN0IGRhdGFBY3Rpb24gPSBwcm9wc1tcImRhdGEtYWN0aW9uXCJdO1xuICBjb25zdCBhcmlhTGFiZWwgPSBwcm9wc1tcImFyaWEtbGFiZWxcIl07XG4gIC8vIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIGhvdmVyIHRvb2x0aXA6IGFuIGV4cGxpY2l0IHRpdGxlIHdpbnMsIGVsc2UgdGhlXG4gIC8vIHZpc2libGUgdGV4dCBsYWJlbCwgZWxzZSB0aGUgYWNjZXNzaWJsZSBuYW1lIOKAlCBzbyBhbiBpY29uLW9ubHkgYnV0dG9uXG4gIC8vICh3aGljaCBjYXJyaWVzIGFuIGFyaWEtbGFiZWwpIHN0aWxsIGdldHMgb25lLiBQYXNzIHRpdGxlPVwiXCIgdG8gb3B0IG91dC5cbiAgY29uc3QgcmVzb2x2ZWRUaXRsZSA9XG4gICAgdGl0bGUgPz9cbiAgICAodHlwZW9mIGxhYmVsID09PSBcInN0cmluZ1wiICYmIGxhYmVsLmxlbmd0aCA+IDBcbiAgICAgID8gbGFiZWxcbiAgICAgIDogdHlwZW9mIGFyaWFMYWJlbCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IGFyaWFMYWJlbFxuICAgICAgICA6IHVuZGVmaW5lZCk7XG4gIC8vIENvbGxlY3QgZXZlcnkgYGRhdGEtYWN0aW9uLSpgIGV4dHJhIHRoZSBjb25zdW1lciBwYXNzZWQgc28gdGhlXG4gIC8vIGV2ZW50IGRlbGVnYXRvciBjYW4gcmVhZCB0aGVtIG9mZiB0aGUgcmVuZGVyZWQgZWxlbWVudC4gV2l0aG91dFxuICAvLyB0aGlzLCBhbnl0aGluZyBiZXlvbmQgYGRhdGEtYWN0aW9uYCBpcyBzaWxlbnRseSBkcm9wcGVkIGFuZFxuICAvLyBoYW5kbGVycyBmaXJlIHdpdGggYW4gZW1wdHkgYGN0eC5kYXRhYC5cbiAgY29uc3QgYWN0aW9uRGF0YUF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcImRhdGEtYWN0aW9uLVwiKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSAocHJvcHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYWN0aW9uRGF0YUF0dHJzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoXCJocmVmXCIgaW4gcHJvcHMgJiYgcHJvcHMuaHJlZikge1xuICAgIHJldHVybiAoXG4gICAgICA8YVxuICAgICAgICBpZD17aWR9XG4gICAgICAgIGNsYXNzPXtidXR0b25DbGFzc31cbiAgICAgICAgdGl0bGU9e3Jlc29sdmVkVGl0bGV9XG4gICAgICAgIGhyZWY9e2Rpc2FibGVkID8gdW5kZWZpbmVkIDogcHJvcHMuaHJlZn1cbiAgICAgICAgdGFyZ2V0PXtcInRhcmdldFwiIGluIHByb3BzID8gcHJvcHMudGFyZ2V0IDogdW5kZWZpbmVkfVxuICAgICAgICByZWw9e1wicmVsXCIgaW4gcHJvcHMgPyBwcm9wcy5yZWwgOiB1bmRlZmluZWR9XG4gICAgICAgIGRvd25sb2FkPXtcImRvd25sb2FkXCIgaW4gcHJvcHMgPyBwcm9wcy5kb3dubG9hZCA6IHVuZGVmaW5lZH1cbiAgICAgICAgYXJpYS1kaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWJ1dHRvbj17dGllcn1cbiAgICAgICAgZGF0YS1hY3Rpb249e2RhdGFBY3Rpb259XG4gICAgICAgIHsuLi5hY3Rpb25EYXRhQXR0cnN9XG4gICAgICA+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9hPlxuICAgICk7XG4gIH1cblxuICBjb25zdCByZXNvbHZlZFR5cGU6IFwiYnV0dG9uXCIgfCBcInN1Ym1pdFwiIHwgXCJyZXNldFwiID1cbiAgICBcInR5cGVcIiBpbiBwcm9wcyAmJiBwcm9wcy50eXBlID8gcHJvcHMudHlwZSA6IFwiYnV0dG9uXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17YnV0dG9uQ2xhc3N9XG4gICAgICB0aXRsZT17cmVzb2x2ZWRUaXRsZX1cbiAgICAgIHR5cGU9e3Jlc29sdmVkVHlwZX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktYnV0dG9uPXt0aWVyfVxuICAgICAgZGF0YS1hY3Rpb249e2RhdGFBY3Rpb259XG4gICAgICB7Li4uYWN0aW9uRGF0YUF0dHJzfVxuICAgID5cbiAgICAgIHtjb250ZW50fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFN1cmZhY2Ug4oCUIHRoZSBvbmUgcHJpbWl0aXZlIHRoYXQgb3ducyB2aXN1YWwtc3VyZmFjZSBjb25jZXJucy5cbiAqXG4gKiBXaGVyZSBMYXlvdXQgZ292ZXJucyBzcGF0aWFsIGNvbmNlcm5zIChncmlkLCBmbGV4LCBnYXAsIGFsaWdubWVudCksXG4gKiBTdXJmYWNlIGdvdmVybnMgdGhlIGNocm9tZSB0aGF0IHNpdHMgb24gdG9wIG9mIGxheW91dDogcGFkZGluZyxcbiAqIGJhY2tncm91bmQsIGJvcmRlciwgcmFkaXVzLCBzaGFkb3csIGFuZCB0aGUgbmFycm93IHBvc2l0aW9uaW5nIGlkaW9tc1xuICogKHN0aWNreSBzdHJpcHMsIGZpeGVkIGZsb2F0aW5nIHBhbmVzKSB0aGF0IGNvbnN1bWVycyByZWFjaCBmb3IgaW5saW5lXG4gKiBzdHlsZXMgdG8gZXhwcmVzcy4gRXZlcnkgcHJvcCBtYXBzIHRvIGEgYC0tcG9sbHktKmAgdG9rZW4gdGhyb3VnaCBhXG4gKiBsb2NhbCBgLS1zLSpgIGN1c3RvbSBwcm9wZXJ0eSwgc28gY29uc3VtZXJzIGNhbiByZXRoZW1lIGFuIGluZGl2aWR1YWxcbiAqIFN1cmZhY2UgYnkgb3ZlcnJpZGluZyB0aGUgcG9sbHkgdG9rZW4gaW4gYHN0eWxlYCB3aXRob3V0IHRvdWNoaW5nIHRoZVxuICogcHJpbWl0aXZlJ3MgQ1NTLlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU3VyZmFjZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFN1cmZhY2VWYXJpYW50ID1cbiAgfCBcInBsYWluXCJcbiAgfCBcInJhaXNlZFwiXG4gIHwgXCJzdW5rZW5cIlxuICB8IFwiYnViYmxlXCJcbiAgfCBcImNoaXBcIlxuICB8IFwiY2FsbG91dFwiXG4gIHwgXCJmbG9hdGluZ1wiXG4gIHwgXCJzdGlja3ktYmFyXCI7XG5cbnR5cGUgQmFja2dyb3VuZCA9IFwicmFpc2VkXCIgfCBcInN1bmtlblwiIHwgXCJ0cmFuc3BhcmVudFwiIHwgKHN0cmluZyAmIHt9KTtcbnR5cGUgUmFkaXVzID0gXCJub25lXCIgfCBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgfCBcImZ1bGxcIjtcbnR5cGUgQm9yZGVyID0gXCJub25lXCIgfCBcImRlZmF1bHRcIiB8IFwic3Ryb25nXCI7XG50eXBlIEJvcmRlcldpZHRoID0gXCJub25lXCIgfCBcImRlZmF1bHRcIiB8IFwibWVkaXVtXCIgfCBcInRoaWNrXCI7XG50eXBlIEJvcmRlclNpZGVzID1cbiAgfCBcImFsbFwiXG4gIHwgXCJibG9jay1zdGFydFwiXG4gIHwgXCJibG9jay1lbmRcIlxuICB8IFwiaW5saW5lLXN0YXJ0XCJcbiAgfCBcImlubGluZS1lbmRcIlxuICB8IFwiYmxvY2tcIlxuICB8IFwiaW5saW5lXCI7XG50eXBlIFNoYWRvdyA9IFwibm9uZVwiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiO1xudHlwZSBQb3NpdGlvbiA9IFwic3RhdGljXCIgfCBcInJlbGF0aXZlXCIgfCBcImFic29sdXRlXCIgfCBcInN0aWNreVwiIHwgXCJmaXhlZFwiO1xudHlwZSBCb3JkZXJTdHlsZSA9IFwic29saWRcIiB8IFwiZGFzaGVkXCI7XG50eXBlIE92ZXJmbG93ID0gXCJ2aXNpYmxlXCIgfCBcImhpZGRlblwiIHwgXCJhdXRvXCIgfCBcInNjcm9sbFwiO1xudHlwZSBTY2hlbWUgPSBcImRhcmtcIiB8IFwibGlnaHRcIjtcblxuLyoqXG4gKiBBcmJpdHJhcnkgYGRhdGEtKmAsIGBhcmlhLSpgLCBhbmQgYHRpdGxlYCBhdHRyaWJ1dGVzIGZvcndhcmRlZCB0byB0aGVcbiAqIHJlbmRlcmVkIGVsZW1lbnQgc28gY29uc3VtZXJzIChNb2RhbCwgVG9hc3QsIENhcmQsIGV0Yy4pIGNhbiBjb21wb3NlXG4gKiBTdXJmYWNlIHdpdGhvdXQgbG9zaW5nIERPTSBob29rcywgQVJJQSBzZW1hbnRpY3MsIG9yIGEgbmF0aXZlIHRvb2x0aXAuXG4gKi9cbmV4cG9ydCB0eXBlIFN1cmZhY2VEYXRhQXR0cnMgPSB7XG4gIFtkYXRhQXR0cjogYGRhdGEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIFthcmlhQXR0cjogYGFyaWEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3VyZmFjZVByb3BzID0gU3VyZmFjZURhdGFBdHRycyAmIHtcbiAgY2hpbGRyZW4/OiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBhcnRpY2xlLCBhc2lkZSwgaGVhZGVyLCDigKYpLiBEZWZhdWx0cyB0byAnZGl2Jy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIE5hbWVkIHByZXNldCB0aGF0IHJlc29sdmVzIHRvIGEgZGVmYXVsdCBidW5kbGUgb2YgdGhlIHByb3BzIGJlbG93LiBFeHBsaWNpdCBwcm9wcyBvdmVycmlkZS4gKi9cbiAgdmFyaWFudD86IFN1cmZhY2VWYXJpYW50O1xuXG4gIC8qKiBBbnkgQ1NTIGxlbmd0aCwgdHlwaWNhbGx5IGB2YXIoLS1wb2xseS1zcGFjZS0qKWAuICovXG4gIHBhZGRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIE5hbWVkIHZhbHVlcyBtYXAgdG8gYHZhcigtLXBvbGx5LXN1cmZhY2UtKilgOyByYXcgc3RyaW5ncyBwYXNzIHRocm91Z2ggZm9yIG9uZS1vZmYgY29sb3Vycy4gKi9cbiAgYmFja2dyb3VuZD86IEJhY2tncm91bmQ7XG5cbiAgcmFkaXVzPzogUmFkaXVzO1xuICBib3JkZXI/OiBCb3JkZXI7XG4gIGJvcmRlcldpZHRoPzogQm9yZGVyV2lkdGg7XG4gIGJvcmRlclNpZGVzPzogQm9yZGVyU2lkZXM7XG4gIC8qKiBCb3JkZXIgbGluZSBzdHlsZS4gRGVmYXVsdDogYCdzb2xpZCdgLiAqL1xuICBib3JkZXJTdHlsZT86IEJvcmRlclN0eWxlO1xuICAvKiogQW55IENTUyBjb2xvdXIsIG92ZXJyaWRpbmcgdGhlIHRva2VuIHRoZSBgYm9yZGVyYCBwcm9wIHdvdWxkIHBpY2suXG4gICAqIEZvciBvbmUtb2ZmIHJpbmdzIChhIGN1dG91dCByaW5nLCBhIGZvY3VzIGhhbG8pIHRoYXQgbm8gc2VtYW50aWNcbiAgICogYm9yZGVyIHRva2VuIGV4cHJlc3Nlcy4gSW1wbGllcyBhIGJvcmRlciB3aWR0aCB3aGVuIG5vbmUgaXMgc2V0LiAqL1xuICBib3JkZXJDb2xvcj86IHN0cmluZztcbiAgc2hhZG93PzogU2hhZG93O1xuXG4gIC8qKlxuICAgKiBSZXRpbnQgdGhlIHRva2VuIHN1YnRyZWUgc28gZGVzY2VuZGFudCBgVGV4dGAvYEJ1dHRvbmAgcmVhZCB0aGVcbiAgICogcmlnaHQgY29udHJhc3Qgb24gYSBkYXJrIChvciBmb3JjZWQtbGlnaHQpIFN1cmZhY2Ug4oCUIGVycm9yXG4gICAqIGJhbm5lcnMsIGNhbWVyYSBvdmVybGF5cywgY2hhdCBidWJibGVzLiBTZXRzIGBkYXRhLXBvbGx5LXRoZW1lYCxcbiAgICogc28gZXZlcnkgYC0tcG9sbHktKmAgY29sb3VyIHRva2VuIGZsaXBzIGZvciB0aGUgc3VidHJlZTsgbm8gaW5saW5lXG4gICAqIGAtLXBvbGx5LXRleHRgIG92ZXJyaWRlIG5lZWRlZCAocG9sbHkjMTM1KS5cbiAgICovXG4gIHNjaGVtZT86IFNjaGVtZTtcblxuICAvKiogYCdub25lJ2AgbWFrZXMgYSBkZWNvcmF0aXZlIFN1cmZhY2UgKGEgc2Nhbi1mcmFtZSBvdmVybGF5KSBpZ25vcmVcbiAgICogdGhlIHBvaW50ZXIgc28gY2xpY2tzIGZhbGwgdGhyb3VnaCB0byB3aGF0IGlzIGJlaGluZCBpdC4gKi9cbiAgcG9pbnRlckV2ZW50cz86IFwibm9uZVwiIHwgXCJhdXRvXCI7XG5cbiAgLyoqIGRpc3BsYXk6IGlubGluZS1ibG9jayDigJQgU3VyZmFjZSBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0LiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuICB3aWR0aD86IHN0cmluZztcbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIGJsb2NrIHNpemUg4oCUIGEgU3VyZmFjZSB0aGF0IHNocmlua3MgdG8gY29udGVudCBidXQgaXMgY2FwcGVkLiAqL1xuICBtYXhIZWlnaHQ/OiBzdHJpbmc7XG4gIG1heElubGluZVNpemU/OiBzdHJpbmc7XG5cbiAgLyoqIE92ZXJmbG93IGJlaGF2aW91ci4gYCdhdXRvJ2AgbWFrZXMgYSBoZWlnaHQtY2FwcGVkIFN1cmZhY2Ugc2Nyb2xsLiAqL1xuICBvdmVyZmxvdz86IE92ZXJmbG93O1xuXG4gIHBvc2l0aW9uPzogUG9zaXRpb247XG4gIC8qKiBBbnkgQ1NTIGluc2V0IHZhbHVlIChgJzAnYCwgYCdhdXRvIGF1dG8gMXJlbSAxcmVtJ2AsIGAnMXJlbSdgLCDigKYpLiAqL1xuICBpbnNldD86IHN0cmluZztcbiAgLyoqIENTUyB0cmFuc2Zvcm0g4oCUIGUuZy4gYCd0cmFuc2xhdGVYKC01MCUpJ2AgdG8gY2VudHJlIGEgZml4ZWQgYmFubmVyXG4gICAqIHBhaXJlZCB3aXRoIGBpbnNldDogJ+KApiBhdXRvIOKApiA1MCUnYC4gVGhlIHNhbmN0aW9uZWQgdHJhbnNmb3JtIGVzY2FwZS4gKi9cbiAgdHJhbnNmb3JtPzogc3RyaW5nO1xuICB6SW5kZXg/OiBudW1iZXI7XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogUGVyLWluc3RhbmNlIG92ZXJyaWRlcy4gVGhlIHN1cHBvcnRlZCByZXRpbnQgcGF0aCBpcyB0byBzZXQgcG9sbHkgdG9rZW5zXG4gICAqIGhlcmUsIGUuZy4gYHN0eWxlPXt7IFwiLS1wb2xseS1zdXJmYWNlLXJhaXNlZFwiOiBcIiNmZWYzYzdcIiB9fWAuIFN1cmZhY2VcbiAgICogbWVyZ2VzIHRoaXMgaW50byBpdHMgb3duIGNvbXB1dGVkIHN0eWxlLlxuICAgKi9cbiAgc3R5bGU/OiBKU1guQ1NTUHJvcGVydGllcztcblxuICBpZD86IHN0cmluZztcbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xuICBcImFyaWEtZGVzY3JpYmVkYnlcIj86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG59O1xuXG50eXBlIFZhcmlhbnREZWZhdWx0cyA9IFBhcnRpYWw8XG4gIFBpY2s8XG4gICAgU3VyZmFjZVByb3BzLFxuICAgIHwgXCJwYWRkaW5nXCJcbiAgICB8IFwiYmFja2dyb3VuZFwiXG4gICAgfCBcInJhZGl1c1wiXG4gICAgfCBcImJvcmRlclwiXG4gICAgfCBcImJvcmRlcldpZHRoXCJcbiAgICB8IFwiYm9yZGVyU2lkZXNcIlxuICAgIHwgXCJzaGFkb3dcIlxuICAgIHwgXCJpbmxpbmVcIlxuICAgIHwgXCJ3aWR0aFwiXG4gICAgfCBcImhlaWdodFwiXG4gICAgfCBcIm1pbkhlaWdodFwiXG4gICAgfCBcIm1heElubGluZVNpemVcIlxuICAgIHwgXCJwb3NpdGlvblwiXG4gICAgfCBcImluc2V0XCJcbiAgICB8IFwiekluZGV4XCJcbiAgPlxuPjtcblxuY29uc3QgdmFyaWFudERlZmF1bHRzOiBSZWNvcmQ8U3VyZmFjZVZhcmlhbnQsIFZhcmlhbnREZWZhdWx0cz4gPSB7XG4gIHBsYWluOiB7fSxcbiAgcmFpc2VkOiB7XG4gICAgYmFja2dyb3VuZDogXCJyYWlzZWRcIixcbiAgICByYWRpdXM6IFwibWRcIixcbiAgICBzaGFkb3c6IFwibWRcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBzdW5rZW46IHtcbiAgICBiYWNrZ3JvdW5kOiBcInN1bmtlblwiLFxuICAgIHJhZGl1czogXCJtZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIGJ1YmJsZToge1xuICAgIGJhY2tncm91bmQ6IFwidmFyKC0tcG9sbHktc3VyZmFjZS1idWJibGUpXCIsXG4gICAgcmFkaXVzOiBcIm1kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXNtKSB2YXIoLS1wb2xseS1zcGFjZS1tZClcIixcbiAgfSxcbiAgY2hpcDoge1xuICAgIGlubGluZTogdHJ1ZSxcbiAgICByYWRpdXM6IFwiZnVsbFwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2UteHMpIHZhcigtLXBvbGx5LXNwYWNlLXNtKVwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIGNhbGxvdXQ6IHtcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICAgIHJhZGl1czogXCJzbVwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2Utc20pIHZhcigtLXBvbGx5LXNwYWNlLW1kKVwiLFxuICB9LFxuICBmbG9hdGluZzoge1xuICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgcmFkaXVzOiBcImxnXCIsXG4gICAgc2hhZG93OiBcImxnXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBiYWNrZ3JvdW5kOiBcInJhaXNlZFwiLFxuICAgIHpJbmRleDogOTk5OSxcbiAgfSxcbiAgXCJzdGlja3ktYmFyXCI6IHtcbiAgICBwb3NpdGlvbjogXCJzdGlja3lcIixcbiAgICBpbnNldDogXCIwIDAgYXV0byAwXCIsXG4gICAgYm9yZGVyU2lkZXM6IFwiYmxvY2stZW5kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGJnVmFsdWUoYjogQmFja2dyb3VuZCk6IHN0cmluZyB7XG4gIGlmIChiID09PSBcInJhaXNlZFwiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1zdXJmYWNlLXJhaXNlZClcIjtcbiAgaWYgKGIgPT09IFwic3Vua2VuXCIpIHJldHVybiBcInZhcigtLXBvbGx5LXN1cmZhY2Utc3Vua2VuKVwiO1xuICBpZiAoYiA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICByZXR1cm4gYjtcbn1cblxuZnVuY3Rpb24gcmFkaXVzVmFsdWUocjogUmFkaXVzKTogc3RyaW5nIHtcbiAgaWYgKHIgPT09IFwibm9uZVwiKSByZXR1cm4gXCIwXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktcmFkaXVzLSR7cn0pYDtcbn1cblxuZnVuY3Rpb24gYm9yZGVyQ29sb3JWYWx1ZShiOiBCb3JkZXIpOiBzdHJpbmcge1xuICBpZiAoYiA9PT0gXCJub25lXCIpIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gIGlmIChiID09PSBcInN0cm9uZ1wiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXItc3Ryb25nKVwiO1xuICByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXIpXCI7XG59XG5cbmZ1bmN0aW9uIGJvcmRlcldpZHRoVmFsdWUodzogQm9yZGVyV2lkdGgpOiBzdHJpbmcge1xuICBpZiAodyA9PT0gXCJub25lXCIpIHJldHVybiBcIjBcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1ib3JkZXItd2lkdGgtJHt3fSlgO1xufVxuXG5mdW5jdGlvbiBzaGFkb3dWYWx1ZShzOiBTaGFkb3cpOiBzdHJpbmcge1xuICBpZiAocyA9PT0gXCJub25lXCIpIHJldHVybiBcIm5vbmVcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1zaGFkb3ctJHtzfSlgO1xufVxuXG5mdW5jdGlvbiBib3JkZXJTaWRlc0NsYXNzKHNpZGVzOiBCb3JkZXJTaWRlcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaWRlcyA9PT0gXCJhbGxcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrLXN0YXJ0XCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2stc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJibG9jay1lbmRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1ibG9jay1lbmRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtc3RhcnRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmUtc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtZW5kXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lLWVuZFwiXTtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2tcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmVcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmVcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBwcm9wLXRvLWN1c3RvbS1wcm9wZXJ0eSBtYXBwaW5nOyBmbGF0IGFuZCBsaW5lYXIsIG1pcnJvcnMgTGF5b3V0LnRzeC5cbmV4cG9ydCBmdW5jdGlvbiBTdXJmYWNlKHByb3BzOiBTdXJmYWNlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwicGxhaW5cIiB9ID0gcHJvcHM7XG4gIGNvbnN0IHYgPSB2YXJpYW50RGVmYXVsdHNbdmFyaWFudF07XG5cbiAgY29uc3QgYXMgPSBwcm9wcy5hcyA/PyBcImRpdlwiO1xuICBjb25zdCBwYWRkaW5nID0gcHJvcHMucGFkZGluZyA/PyB2LnBhZGRpbmc7XG4gIGNvbnN0IGJhY2tncm91bmQgPSBwcm9wcy5iYWNrZ3JvdW5kID8/IHYuYmFja2dyb3VuZDtcbiAgY29uc3QgcmFkaXVzID0gcHJvcHMucmFkaXVzID8/IHYucmFkaXVzO1xuICBjb25zdCBib3JkZXIgPSBwcm9wcy5ib3JkZXIgPz8gdi5ib3JkZXI7XG4gIGNvbnN0IGJvcmRlclNpZGVzID0gcHJvcHMuYm9yZGVyU2lkZXMgPz8gdi5ib3JkZXJTaWRlcyA/PyBcImFsbFwiO1xuICBjb25zdCBzaGFkb3cgPSBwcm9wcy5zaGFkb3cgPz8gdi5zaGFkb3c7XG4gIGNvbnN0IGlubGluZSA9IHByb3BzLmlubGluZSA/PyB2LmlubGluZTtcbiAgY29uc3Qgd2lkdGggPSBwcm9wcy53aWR0aCA/PyB2LndpZHRoO1xuICBjb25zdCBoZWlnaHQgPSBwcm9wcy5oZWlnaHQgPz8gdi5oZWlnaHQ7XG4gIGNvbnN0IG1pbkhlaWdodCA9IHByb3BzLm1pbkhlaWdodCA/PyB2Lm1pbkhlaWdodDtcbiAgY29uc3QgbWF4SW5saW5lU2l6ZSA9IHByb3BzLm1heElubGluZVNpemUgPz8gdi5tYXhJbmxpbmVTaXplO1xuICBjb25zdCBwb3NpdGlvbiA9IHByb3BzLnBvc2l0aW9uID8/IHYucG9zaXRpb247XG4gIGNvbnN0IGluc2V0ID0gcHJvcHMuaW5zZXQgPz8gdi5pbnNldDtcbiAgY29uc3QgekluZGV4ID0gcHJvcHMuekluZGV4ID8/IHYuekluZGV4O1xuICAvLyBwb2xseSMxMjYvIzEzNTogbm8gdmFyaWFudCBzZXRzIHRoZXNlLCBzbyB0aGV5IHJlc29sdmUgc3RyYWlnaHQgZnJvbSBwcm9wcy5cbiAgY29uc3QgeyBtYXhIZWlnaHQsIG92ZXJmbG93LCBib3JkZXJTdHlsZSwgdHJhbnNmb3JtLCBib3JkZXJDb2xvciwgc2NoZW1lLCBwb2ludGVyRXZlbnRzIH0gPSBwcm9wcztcblxuICAvLyBBIGJvcmRlcmVkIHN1cmZhY2UgbmVlZHMgYSB3aWR0aC4gSWYgdGhlIGNvbnN1bWVyIGFza2VkIGZvciBhIGJvcmRlciDigJRcbiAgLy8gYnkgbmFtZSBvciBieSByYXcgY29sb3VyIOKAlCBidXQgZGlkbid0IHBpY2sgYSB3aWR0aCwgaW5mZXIgJ2RlZmF1bHQnXG4gIC8vIHNvIHRoZSBib3JkZXIgcmVuZGVycy5cbiAgY29uc3Qgd2FudHNCb3JkZXIgPSAoYm9yZGVyICE9PSB1bmRlZmluZWQgJiYgYm9yZGVyICE9PSBcIm5vbmVcIikgfHwgYm9yZGVyQ29sb3IgIT09IHVuZGVmaW5lZDtcbiAgY29uc3QgYm9yZGVyV2lkdGggPSBwcm9wcy5ib3JkZXJXaWR0aCA/PyB2LmJvcmRlcldpZHRoID8/ICh3YW50c0JvcmRlciA/IFwiZGVmYXVsdFwiIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLXMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChiYWNrZ3JvdW5kKSBzdHlsZVtcIi0tcy1iZ1wiXSA9IGJnVmFsdWUoYmFja2dyb3VuZCk7XG4gIGlmIChyYWRpdXMpIHN0eWxlW1wiLS1zLXJhZGl1c1wiXSA9IHJhZGl1c1ZhbHVlKHJhZGl1cyk7XG4gIGlmIChib3JkZXIpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yVmFsdWUoYm9yZGVyKTtcbiAgLy8gQSByYXcgYm9yZGVyQ29sb3Igd2lucyBvdmVyIHdoYXRldmVyIHRva2VuIGBib3JkZXJgIHJlc29sdmVkIHRvLlxuICBpZiAoYm9yZGVyQ29sb3IpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yO1xuICBpZiAoYm9yZGVyV2lkdGgpIHN0eWxlW1wiLS1zLWJvcmRlci13aWR0aFwiXSA9IGJvcmRlcldpZHRoVmFsdWUoYm9yZGVyV2lkdGgpO1xuICBpZiAoc2hhZG93KSBzdHlsZVtcIi0tcy1zaGFkb3dcIl0gPSBzaGFkb3dWYWx1ZShzaGFkb3cpO1xuICBpZiAoYm9yZGVyU3R5bGUpIHN0eWxlW1wiLS1zLWJvcmRlci1zdHlsZVwiXSA9IGJvcmRlclN0eWxlO1xuICBpZiAocG9pbnRlckV2ZW50cykgc3R5bGVbXCItLXMtcGVcIl0gPSBwb2ludGVyRXZlbnRzO1xuICBpZiAod2lkdGgpIHN0eWxlW1wiLS1zLXdcIl0gPSB3aWR0aDtcbiAgaWYgKGhlaWdodCkgc3R5bGVbXCItLXMtaFwiXSA9IGhlaWdodDtcbiAgaWYgKG1pbkhlaWdodCkgc3R5bGVbXCItLXMtbWhcIl0gPSBtaW5IZWlnaHQ7XG4gIGlmIChtYXhIZWlnaHQpIHN0eWxlW1wiLS1zLW1heGhcIl0gPSBtYXhIZWlnaHQ7XG4gIGlmIChtYXhJbmxpbmVTaXplKSBzdHlsZVtcIi0tcy1taXNcIl0gPSBtYXhJbmxpbmVTaXplO1xuICBpZiAob3ZlcmZsb3cpIHN0eWxlW1wiLS1zLW92ZXJmbG93XCJdID0gb3ZlcmZsb3c7XG4gIGlmIChwb3NpdGlvbikgc3R5bGVbXCItLXMtcG9zaXRpb25cIl0gPSBwb3NpdGlvbjtcbiAgaWYgKGluc2V0KSBzdHlsZVtcIi0tcy1pbnNldFwiXSA9IGluc2V0O1xuICBpZiAodHJhbnNmb3JtKSBzdHlsZVtcIi0tcy10cmFuc2Zvcm1cIl0gPSB0cmFuc2Zvcm07XG4gIGlmICh6SW5kZXggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCItLXMtelwiXSA9IFN0cmluZyh6SW5kZXgpO1xuXG4gIGlmIChwcm9wcy5zdHlsZSkge1xuICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHByb3BzLnN0eWxlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG4gIH1cblxuICBjb25zdCBwYXJ0czogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFtjbGFzc2VzW1wic3VyZmFjZVwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIHBhcnRzLnB1c2goYm9yZGVyU2lkZXNDbGFzcyhib3JkZXJTaWRlcykpO1xuICBpZiAocHJvcHMuY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKHByb3BzLmNsYXNzTmFtZSk7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXNzdGhyb3VnaDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocHJvcHMpKSB7XG4gICAgY29uc3QgaXNEYXRhID0ga2V5LnN0YXJ0c1dpdGgoXCJkYXRhLVwiKTtcbiAgICBjb25zdCBpc0FyaWEgPSBrZXkuc3RhcnRzV2l0aChcImFyaWEtXCIpO1xuICAgIGlmICghaXNEYXRhICYmICFpc0FyaWEgJiYga2V5ICE9PSBcInRpdGxlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiZGF0YS1wb2xseS1zdXJmYWNlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiYXJpYS1sYWJlbFwiIHx8IGtleSA9PT0gXCJhcmlhLWxhYmVsbGVkYnlcIiB8fCBrZXkgPT09IFwiYXJpYS1kZXNjcmliZWRieVwiKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IChwcm9wcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBwYXNzdGhyb3VnaFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgaWQ6IHByb3BzLmlkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgc3R5bGUsXG4gICAgICBvbkNsaWNrOiBwcm9wcy5vbkNsaWNrLFxuICAgICAgb25LZXlEb3duOiBwcm9wcy5vbktleURvd24sXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgdGFiSW5kZXg6IHByb3BzLnRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1zdXJmYWNlXCI6IHZhcmlhbnQsXG4gICAgICBcImRhdGEtcG9sbHktdGhlbWVcIjogc2NoZW1lLFxuICAgICAgLi4ucGFzc3Rocm91Z2gsXG4gICAgfSxcbiAgICBwcm9wcy5jaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENhcmQg4oCUIGNvbXBvdW5kIHByaW1pdGl2ZSB0aGF0IGNvbXBvc2VzIFN1cmZhY2UgZm9yIGVhY2ggbmFtZWQgc2xvdC5cbiAqXG4gKiBDYXJkIGlzIHRoZSBmaXJzdCBjb21wb3VuZCB0aGF0IGlzIHB1cmVseSBhIHJlLXNraW4gb2YgU3VyZmFjZSDigJQgbm9cbiAqIGJlaGF2aW91cmFsIGxheWVyLiBIZWFkZXIsIEJvZHksIGFuZCBGb290ZXIgYXJlIGVhY2ggU3VyZmFjZXMgd2l0aFxuICogc2Vuc2libGUgZGVmYXVsdHM7IFJvb3QgaXMgYSByYWlzZWQgU3VyZmFjZSB0aGF0IHdyYXBzIHRoZW0uIEV2ZXJ5XG4gKiBzbG90IGFjY2VwdHMgdGhlIGZ1bGwgU3VyZmFjZVByb3BzLCBzbyBjb25zdW1lcnMgcmV0aW50LCBvdmVycmlkZSwgb3JcbiAqIHJlYWNoIGZvciByYXcgcGFkZGluZyB3aXRob3V0IHJlYWNoaW5nIHBhc3QgdGhlIHByaW1pdGl2ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IFN1cmZhY2UsIHR5cGUgU3VyZmFjZVByb3BzIH0gZnJvbSBcIi4vU3VyZmFjZS50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ2FyZFByb3BzID0gU3VyZmFjZVByb3BzO1xuZXhwb3J0IHR5cGUgQ2FyZFNsb3RQcm9wcyA9IFN1cmZhY2VQcm9wcztcblxuZnVuY3Rpb24gUm9vdChwcm9wczogQ2FyZFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHZhcmlhbnQgPSBcInJhaXNlZFwiLCByYWRpdXMgPSBcIm1kXCIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHZhcmlhbnQ9e3ZhcmlhbnR9IHJhZGl1cz17cmFkaXVzfSBkYXRhLXBvbGx5LWNhcmQgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1lbmRcIixcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgcGFkZGluZz17cGFkZGluZ31cbiAgICAgIGJvcmRlcj17Ym9yZGVyfVxuICAgICAgYm9yZGVyU2lkZXM9e2JvcmRlclNpZGVzfVxuICAgICAgZGF0YS1wb2xseS1jYXJkLWhlYWRlclxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQm9keShwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBwYWRkaW5nID0gXCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIiwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2UgcGFkZGluZz17cGFkZGluZ30gZGF0YS1wb2xseS1jYXJkLWJvZHkgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRm9vdGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1zdGFydFwiLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICBwYWRkaW5nPXtwYWRkaW5nfVxuICAgICAgYm9yZGVyPXtib3JkZXJ9XG4gICAgICBib3JkZXJTaWRlcz17Ym9yZGVyU2lkZXN9XG4gICAgICBkYXRhLXBvbGx5LWNhcmQtZm9vdGVyXG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgQ2FyZCA9IHsgUm9vdCwgSGVhZGVyLCBCb2R5LCBGb290ZXIgfTtcbiIsCiAgICAiLyoqXG4gKiBDaGVja2JveCDigJQgbmF0aXZlIGNoZWNrYm94IHdyYXBwZWQgaW4gYSBsYWJlbC5cbiAqXG4gKiBQYXNzIGEgcGxhaW4gYm9vbGVhbiBmb3IgY29udHJvbGxlZCB1c2UgKGNhbGxlciBsaXN0ZW5zIGVsc2V3aGVyZSksXG4gKiBvciBhIFNpZ25hbDxib29sZWFuPiB0byBoYXZlIHRoZSBwcmltaXRpdmUgYmluZCBpdHMgb3duIGNoYW5nZVxuICogbGlzdGVuZXIgYW5kIG11dGF0ZSB0aGUgc2lnbmFsIGRpcmVjdGx5LiBUaGUgbGFiZWwgd3JhcHMgdGhlIGlucHV0XG4gKiBzbyBjbGlja3MgYW55d2hlcmUgaW4gdGhlIHRhcmdldCBhcmVhIHRvZ2dsZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuXG5leHBvcnQgdHlwZSBDaGVja2JveFByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbiB8IFNpZ25hbDxib29sZWFuPjtcbiAgZGVmYXVsdENoZWNrZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gaXNTaWduYWwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTaWduYWw8Ym9vbGVhbj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIFwidmFsdWVcIiBpbiB2YWx1ZSAmJiBcInBlZWtcIiBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrYm94KHByb3BzOiBDaGVja2JveFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQsIGRlZmF1bHRDaGVja2VkLCBuYW1lLCBkaXNhYmxlZCA9IGZhbHNlLCBsYWJlbCwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgaWYgKGlzU2lnbmFsKGNoZWNrZWQpKSB7XG4gICAgICBjaGVja2VkLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoZWNrZWRWYWx1ZSA9IGlzU2lnbmFsKGNoZWNrZWQpID8gY2hlY2tlZC52YWx1ZSA6IGNoZWNrZWQ7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNoZWNrYm94XCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSA/PyBcIlwiKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPExheW91dFxuICAgICAgYXM9XCJsYWJlbFwiXG4gICAgICBpbmxpbmVcbiAgICAgIGNvbHVtbnM9XCJhdXRvIGF1dG9cIlxuICAgICAgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCJcbiAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgY2xhc3NOYW1lPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNoZWNrYm94XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJpbnB1dFwiXX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZFZhbHVlfVxuICAgICAgICBkZWZhdWx0Q2hlY2tlZD17ZGVmYXVsdENoZWNrZWR9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIC8+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDbHVzdGVyIOKAlCB3cmFwcGluZyByb3cgb2YgdmFyaWFibGUtd2lkdGggaXRlbXMuXG4gKlxuICogVGhlIGZsZXgtd3JhcCBjb3VudGVycGFydCB0byA8TGF5b3V0Pi4gV2hlcmUgTGF5b3V0IG93bnMgQ1NTIGdyaWRcbiAqIHRyYWNrcywgQ2x1c3RlciBvd25zIGEgcm93IG9mIGl0ZW1zIHRoYXQgZGlmZmVyIGluIHdpZHRoIGFuZCBtdXN0XG4gKiByZWZsb3cgYXMgc3BhY2UgcnVucyBvdXQg4oCUIGZpbHRlciBjaGlwcywgdGFnIGFuZCBiYWRnZSBsaXN0cywgZ3JvdXBzXG4gKiBvZiBzbWFsbCBidXR0b25zLiBJdGVtcyBrZWVwIGV2ZW4gc3BhY2luZyBvbiBib3RoIGF4ZXMgdmlhIGBnYXBgOyB0aGVcbiAqIHJvdyB3cmFwcyBhdXRvbWF0aWNhbGx5IGF0IG5hcnJvdyB3aWR0aHMuIExpa2UgTGF5b3V0LCBwcm9wcyBtYXAgdG9cbiAqIENTUyBjdXN0b20gcHJvcGVydGllcyBzbyBjb25zdW1lcnMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGVtIGluIGFcbiAqIG1lZGlhIHF1ZXJ5IHdpdGhvdXQgdG91Y2hpbmcgc3BlY2lmaWNpdHkuXG4gKlxuICogVGhpcyBpcyB0aGUgc2Vjb25kIChhbmQgZmluYWwpIGxheW91dCBwcmltaXRpdmU6IGEgY29uc3VtZXIgbmV2ZXJcbiAqIHdyaXRlcyBgZGlzcGxheTogZmxleGAgb3IgYGRpc3BsYXk6IGdyaWRgIHRoZW1zZWx2ZXMg4oCUIGdyaWQgZ29lc1xuICogdGhyb3VnaCA8TGF5b3V0PiwgYSB3cmFwcGluZyBjbHVzdGVyIGdvZXMgdGhyb3VnaCA8Q2x1c3Rlcj4uXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9DbHVzdGVyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQ2x1c3RlclByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuXG4gIC8qKiBQb2x5bW9ycGhpYyBlbGVtZW50IChkaXYsIG5hdiwgdWwsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcblxuICAvKiogU3BhY2UgYmV0d2VlbiBpdGVtcywgYm90aCBheGVzLiBUeXBpY2FsbHkgYSBgLS1wb2xseS1zcGFjZS0qYCB0b2tlbi4gKi9cbiAgZ2FwPzogc3RyaW5nO1xuICBwYWRkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBNYWluLWF4aXMgZGlzdHJpYnV0aW9uIOKAlCBtYXBzIHRvIGp1c3RpZnktY29udGVudC4gRGVmYXVsdDogc3RhcnQuICovXG4gIGp1c3RpZnk/OiBzdHJpbmc7XG4gIC8qKiBDcm9zcy1heGlzIGFsaWdubWVudCB3aXRoaW4gYSB3cmFwcGVkIHJvdyDigJQgbWFwcyB0byBhbGlnbi1pdGVtcy4gRGVmYXVsdDogY2VudGVyLiAqL1xuICBhbGlnbj86IHN0cmluZztcblxuICAvKiogUmVuZGVyIGFzIGlubGluZS1mbGV4IHNvIHRoZSBjbHVzdGVyIGZsb3dzIGlubGluZSB3aXRoIHN1cnJvdW5kaW5nIHRleHQuICovXG4gIGlubGluZT86IGJvb2xlYW47XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2x1c3Rlcihwcm9wczogQ2x1c3RlclByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBhcyA9IFwiZGl2XCIsIGdhcCwgcGFkZGluZywganVzdGlmeSwgYWxpZ24sIGlubGluZSwgY2xhc3NOYW1lLCBpZCwgcm9sZSB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKGdhcCkgc3R5bGVbXCItLWMtZ2FwXCJdID0gZ2FwO1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLWMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChqdXN0aWZ5KSBzdHlsZVtcIi0tYy1qY1wiXSA9IGp1c3RpZnk7XG4gIGlmIChhbGlnbikgc3R5bGVbXCItLWMtYWlcIl0gPSBhbGlnbjtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY2x1c3RlclwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICBhcyxcbiAgICB7XG4gICAgICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZpcnN0OyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgd2luLlxuICAgICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICAgIGlkLFxuICAgICAgY2xhc3M6IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgIHN0eWxlLFxuICAgICAgcm9sZSxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS1wb2xseS1jbHVzdGVyXCI6IHRydWUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENvZGUg4oCUIGlubGluZSBtb25vc3BhY2UgY29kZSBzcGFuLlxuICpcbiAqIFJlbmRlcnMgYSBgPGNvZGU+YCB3aXRoIHRoZSBgLS1wb2xseS1mb250LW1vbm9gIHN0YWNrLCBhIGZhaW50IHN1bmtlblxuICogdGludCwgYW5kIHNudWcgcGFkZGluZyBzbyBhIGNvbnN1bWVyIG5ldmVyIGhhbmQtcm9sbHMgYSBgLm1vbm9gIGNsYXNzXG4gKiBmb3IgaW5saW5lIGNvZGUsIGlkZW50aWZpZXJzLCBvciBrZXlib2FyZCBoaW50cy4gRm9yIG11bHRpLWxpbmUgY29kZVxuICogYmxvY2tzLCBwYXNzIGBibG9ja2AsIHdoaWNoIHN3aXRjaGVzIHRvIGEgcHJlLXdyYXBwZWQgPHByZT48Y29kZT4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29kZS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIENvZGVQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFJlbmRlciBhcyBhIGJsb2NrICg8cHJlPjxjb2RlPikgaW5zdGVhZCBvZiBhbiBpbmxpbmUgc3Bhbi4gKi9cbiAgYmxvY2s/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENvZGUocHJvcHM6IENvZGVQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgYmxvY2ssIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSogc3ByZWFkIGZpcnN0OyB0aGUgZXhwbGljaXQgYXR0cmlidXRlcyBhZnRlclxuICAvLyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgY29uc3QgcGFzc3Rocm91Z2ggPSBjb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpO1xuXG4gIGlmIChibG9jaykge1xuICAgIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJibG9ja1wiXV07XG4gICAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8cHJlXG4gICAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktY29kZT1cImJsb2NrXCJcbiAgICAgID5cbiAgICAgICAgPGNvZGU+e2NoaWxkcmVufTwvY29kZT5cbiAgICAgIDwvcHJlPlxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY29kZVwiXV07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8Y29kZVxuICAgICAgey4uLnBhc3N0aHJvdWdofVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktY29kZT1cImlubGluZVwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvY29kZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDb2xsYXBzaWJsZSDigJQgbmF0aXZlIDxkZXRhaWxzPi88c3VtbWFyeT4gd3JhcHBlci5cbiAqXG4gKiBVc2VzIHRoZSBicm93c2VyJ3MgYnVpbHQtaW4gZGlzY2xvc3VyZSBzZW1hbnRpY3Mgc28ga2V5Ym9hcmQgYW5kXG4gKiBzY3JlZW4tcmVhZGVyIGJlaGF2aW91ciBjb21lIGZyZWUuIFRoZSBhcnJvdyBpcyBhIHJlYWwgZWxlbWVudCwgbm90IGFcbiAqIDo6YmVmb3JlOiB0aGUgc3VtbWFyeSBpcyBhIHR3by10cmFjayA8TGF5b3V0PiwgYW5kIG5vIGxheW91dCBjb250YWluZXIgY2FuXG4gKiBhcnJhbmdlIGEgcHNldWRvLWVsZW1lbnQuIEl0IHJvdGF0ZXMgb24gb3Blbi5cbiAqIENvbG9ycywgc3BhY2luZywgYW5kIG1vdGlvbiBjb21lIGZyb20gdG9rZW5zOyBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmBcbiAqIHplcm9lcyB0aGUgcm90YXRpb24gdmlhIHRoZSBtb3Rpb24gdG9rZW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29sbGFwc2libGUubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuXG5leHBvcnQgdHlwZSBDb2xsYXBzaWJsZVByb3BzID0ge1xuICAvKiogRGlzY2xvc3VyZSBoZWFkZXIuIEEgc3RyaW5nIGZvciB0aGUgY29tbW9uIGNhc2UsIG9yIGFueSBub2RlIOKAlFxuICAgKiBlLmcuIGEgbXV0ZWQsIHNtYWxsIDxUZXh0PiDigJQgd2hlbiB0aGUgaGVhZGVyIG5lZWRzIHN0eWxpbmcuICovXG4gIHN1bW1hcnk6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGRlZmF1bHRPcGVuPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbi8qKiBJbnB1dCB0eXBlcyB3aG9zZSBTcGFjZS9FbnRlciBpcyBhbiBhY3RpdmF0aW9uLCBub3QgdGV4dCBlbnRyeSDigJQgdGhlc2VcbiAqIGtlZXAgdGhlaXIgb3duIGtleWJvYXJkIGJlaGF2aW91ciBhbmQgbXVzdCBub3QgYmUgZ3VhcmRlZC4gKi9cbmNvbnN0IE5PTl9URVhUX0lOUFVUX1RZUEVTID0gbmV3IFNldChbXG4gIFwiY2hlY2tib3hcIixcbiAgXCJyYWRpb1wiLFxuICBcImJ1dHRvblwiLFxuICBcInN1Ym1pdFwiLFxuICBcInJlc2V0XCIsXG4gIFwiZmlsZVwiLFxuICBcImltYWdlXCIsXG4gIFwicmFuZ2VcIixcbiAgXCJjb2xvclwiLFxuXSk7XG5cbi8qKiBJcyB0aGUgZXZlbnQgdGFyZ2V0IGEgZmllbGQgd2hlcmUgU3BhY2UvRW50ZXIgaW5zZXJ0cy9lZGl0cyB0ZXh0PyAqL1xuZnVuY3Rpb24gaXNUZXh0RW50cnlUYXJnZXQodGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSkgcmV0dXJuIHRydWU7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgcmV0dXJuICFOT05fVEVYVF9JTlBVVF9UWVBFUy5oYXModGFyZ2V0LnR5cGUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaHJvbWl1bSB0b2dnbGVzIGEgPGRldGFpbHM+IG9uIHRoZSBTcGFjZS9FbnRlciAqa2V5dXAqIG9mIGl0cyA8c3VtbWFyeT4sXG4gKiBldmVuIHdoZW4gZm9jdXMgc2l0cyBpbiBhIG5lc3RlZCB0ZXh0IGZpZWxkIOKAlCBzbyBldmVyeSBzcGFjZSB0eXBlZCBpbiBhblxuICogZWRpdGFibGUgaGVhZGVyIHdvdWxkIGNvbGxhcHNlIHRoZSBkaXNjbG9zdXJlLiBzdG9wUHJvcGFnYXRpb24gY2FuJ3Qgc3RvcFxuICogaXQgKHRoZSB0b2dnbGUgaXMgdGhlIHN1bW1hcnkncyBvd24gYWN0aXZhdGlvbiBiZWhhdmlvdXIsIG5vdCBhIGJ1YmJsaW5nXG4gKiBsaXN0ZW5lcikgYW5kIHByZXZlbnREZWZhdWx0IG9uICprZXlkb3duKiB3b3VsZCBzd2FsbG93IHRoZSBjaGFyYWN0ZXIuIFRoZVxuICogY2hhcmFjdGVyIGlzIGFscmVhZHkgaW5zZXJ0ZWQgYnkgdGhlIHRpbWUga2V5dXAgZmlyZXMsIHNvIGNhbmNlbGxpbmcgdGhlXG4gKiBrZXl1cCBkZWZhdWx0IGZvciB0ZXh0LWVudHJ5IGZpZWxkcyBraWxscyB0aGUgdG9nZ2xlIHdoaWxlIGxlYXZpbmcgdHlwaW5nXG4gKiB1bnRvdWNoZWQuIEJ1dHRvbnMvY2hlY2tib3gvcmFkaW8gZmFsbCB0aHJvdWdoIGFuZCBrZWVwIHRoZWlyIG93blxuICogYWN0aXZhdGlvbjsgdGhlIHN1bW1hcnkgaXRzZWxmIChubyBuZXN0ZWQgZmllbGQpIGtlZXBzIG5vcm1hbCBrZXlib2FyZFxuICogZGlzY2xvc3VyZS5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeUtleVVwKGV2ZW50OiBKU1guVGFyZ2V0ZWRLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50Pik6IHZvaWQge1xuICBpZiAoZXZlbnQua2V5ICE9PSBcIiBcIiAmJiBldmVudC5rZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuO1xuICBpZiAoIWlzVGV4dEVudHJ5VGFyZ2V0KGV2ZW50LnRhcmdldCkpIHJldHVybjtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbGxhcHNpYmxlKHByb3BzOiBDb2xsYXBzaWJsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHN1bW1hcnksIGNoaWxkcmVuLCBkZWZhdWx0T3BlbiA9IGZhbHNlLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNvbGxhcHNpYmxlXCJdXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxkZXRhaWxzXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBvcGVuPXtkZWZhdWx0T3Blbn1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktY29sbGFwc2libGVcbiAgICA+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGFzPVwic3VtbWFyeVwiXG4gICAgICAgIGNvbHVtbnM9XCJhdXRvIDFmclwiXG4gICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJzdW1tYXJ5XCJdfVxuICAgICAgICBvbktleVVwPXtoYW5kbGVTdW1tYXJ5S2V5VXB9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibWFya2VyXCJdfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcInN1bW1hcnlDb250ZW50XCJdfT57c3VtbWFyeX08L3NwYW4+XG4gICAgICA8L0xheW91dD5cbiAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJjb250ZW50XCJdfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC9kZXRhaWxzPlxuICApO1xufVxuIiwKICAgICJpbXBvcnR7Q29tcG9uZW50IGFzIG4sY3JlYXRlRWxlbWVudCBhcyB0LG9wdGlvbnMgYXMgZSx0b0NoaWxkQXJyYXkgYXMgcixGcmFnbWVudCBhcyB1LHJlbmRlciBhcyBvLGh5ZHJhdGUgYXMgaSxjcmVhdGVDb250ZXh0IGFzIGwsY3JlYXRlUmVmIGFzIGMsY2xvbmVFbGVtZW50IGFzIGZ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0NvbXBvbmVudCxGcmFnbWVudCxGcmFnbWVudCBhcyBTdHJpY3RNb2RlLGNyZWF0ZUNvbnRleHQsY3JlYXRlRWxlbWVudCxjcmVhdGVSZWZ9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlTGF5b3V0RWZmZWN0IGFzIHMsdXNlRWZmZWN0IGFzIGgsdXNlQ2FsbGJhY2sgYXMgdix1c2VDb250ZXh0IGFzIGQsdXNlRGVidWdWYWx1ZSBhcyBtLHVzZUlkIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyB5LHVzZU1lbW8gYXMgXyx1c2VSZWR1Y2VyIGFzIGIsdXNlUmVmIGFzIFN9ZnJvbVwicHJlYWN0L2hvb2tzXCI7ZXhwb3J0KmZyb21cInByZWFjdC9ob29rc1wiO2Z1bmN0aW9uIGcobix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV07cmV0dXJuIG59ZnVuY3Rpb24gRShuLHQpe2Zvcih2YXIgZSBpbiBuKWlmKFwiX19zb3VyY2VcIiE9PWUmJiEoZSBpbiB0KSlyZXR1cm4hMDtmb3IodmFyIHIgaW4gdClpZihcIl9fc291cmNlXCIhPT1yJiZuW3JdIT09dFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBDKG4sdCl7dmFyIGU9dCgpLHI9YSh7dDp7X186ZSx1OnR9fSksdT1yWzBdLnQsbz1yWzFdO3JldHVybiBzKGZ1bmN0aW9uKCl7dS5fXz1lLHUudT10LFIodSkmJm8oe3Q6dX0pfSxbbixlLHRdKSxoKGZ1bmN0aW9uKCl7cmV0dXJuIFIodSkmJm8oe3Q6dX0pLG4oZnVuY3Rpb24oKXtSKHUpJiZvKHt0OnV9KX0pfSxbbl0pLGV9ZnVuY3Rpb24gUihuKXt0cnl7cmV0dXJuISgodD1uLl9fKT09PShlPW4udSgpKSYmKDAhPT10fHwxL3Q9PTEvZSl8fHQhPXQmJmUhPWUpfWNhdGNoKG4pe3JldHVybiEwfXZhciB0LGV9ZnVuY3Rpb24geChuKXtuKCl9ZnVuY3Rpb24gdyhuKXtyZXR1cm4gbn1mdW5jdGlvbiBrKCl7cmV0dXJuWyExLHhdfXZhciBJPXM7ZnVuY3Rpb24gTShuLHQpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9dH1mdW5jdGlvbiBOKG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZjtyZXR1cm4gdCE9bi5yZWYmJnQmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8dCE9bi5yZWY6RSh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1Ll9fZj11LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUudHlwZT1uLHV9KE0ucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxNLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gRSh0aGlzLnByb3BzLG4pfHxFKHRoaXMuc3RhdGUsdCl9O3ZhciBUPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxUJiZUKG4pfTt2YXIgQT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gRChuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPUEsdC5yZW5kZXI9bix0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEY9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxMPXttYXA6Rixmb3JFYWNoOkYsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LE89ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO08obix0LGUscil9O3ZhciBVPWUudW5tb3VudDtmdW5jdGlvbiBWKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jLl9fZT0hMCxuLl9fYz1udWxsKSxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBWKG4sdCxlKX0pKSxufWZ1bmN0aW9uIFcobix0LGUpe3JldHVybiBuJiZlJiYobi5fX3Y9bnVsbCxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBXKG4sdCxlKX0pLG4uX19jJiZuLl9fYy5fX1A9PT10JiYobi5fX2UmJmUuYXBwZW5kQ2hpbGQobi5fX2UpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gUCgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBqKG4pe3ZhciB0PW4uX18mJm4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24geihuKXt2YXIgZSxyLHUsbz1udWxsO2Z1bmN0aW9uIGkoaSl7aWYoZXx8KGU9bigpKS50aGVuKGZ1bmN0aW9uKG4pe24mJihvPW4uZGVmYXVsdHx8biksdT0hMH0sZnVuY3Rpb24obil7cj1uLHU9ITB9KSxyKXRocm93IHI7aWYoIXUpdGhyb3cgZTtyZXR1cm4gbz90KG8saSk6bnVsbH1yZXR1cm4gaS5kaXNwbGF5TmFtZT1cIkxhenlcIixpLl9fZj0hMCxpfWZ1bmN0aW9uIEIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmKHQuX196PSEwKSx0JiZ0Ll9fUiYmdC5fX1IoKSx0JiYzMiZuLl9fdSYmKG4udHlwZT1udWxsKSxVJiZVKG4pfSwoUC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLm8mJihyLm89W10pLHIuby5wdXNoKGUpO3ZhciB1PWooci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fHIuX196fHwobz0hMCxlLl9fUj1udWxsLHU/dShjKTpjKCkpfTtlLl9fUj1pO3ZhciBsPWUuX19QO2UuX19QPW51bGw7dmFyIGM9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1XKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLm8ucG9wKCk7KXQuX19QPWwsdC5mb3JjZVVwZGF0ZSgpfX07ci5fX3UrK3x8MzImdC5fX3V8fHIuc2V0U3RhdGUoe19fYTpyLl9fYj1yLl9fdi5fX2tbMF19KSxuLnRoZW4oaSxpKX0sUC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LFAucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuLGUpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbz10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1WKHRoaXMuX19iLHIsby5fX089by5fX1ApfXRoaXMuX19iPW51bGx9dmFyIGk9ZS5fX2EmJnQodSxudWxsLG4uZmFsbGJhY2spO3JldHVybiBpJiYoaS5fX3UmPS0zMyksW3QodSxudWxsLGUuX19hP251bGw6bi5jaGlsZHJlbiksaV19O3ZhciBIPWZ1bmN0aW9uKG4sdCxlKXtpZigrK2VbMV09PT1lWzBdJiZuLmwuZGVsZXRlKHQpLG4ucHJvcHMucmV2ZWFsT3JkZXImJihcInRcIiE9PW4ucHJvcHMucmV2ZWFsT3JkZXJbMF18fCFuLmwuc2l6ZSkpZm9yKGU9bi5pO2U7KXtmb3IoO2UubGVuZ3RoPjM7KWUucG9wKCkoKTtpZihlWzFdPGVbMF0pYnJlYWs7bi5pPWU9ZVsyXX19O2Z1bmN0aW9uIFoobil7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uY29udGV4dH0sbi5jaGlsZHJlbn1mdW5jdGlvbiBZKG4pe3ZhciBlPXRoaXMscj1uLmg7aWYoZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe28obnVsbCxlLnYpLGUudj1udWxsLGUuaD1udWxsfSxlLmgmJmUuaCE9PXImJmUuY29tcG9uZW50V2lsbFVubW91bnQoKSwhZS52KXtmb3IodmFyIHU9ZS5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXztlLmg9cixlLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sX19rOntfX206dS5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpyLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmguaW5zZXJ0QmVmb3JlKG4sdCl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaC5yZW1vdmVDaGlsZChuKX19fW8odChaLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUudil9ZnVuY3Rpb24gJChuLGUpe3ZhciByPXQoWSx7X192Om4saDplfSk7cmV0dXJuIHIuY29udGFpbmVySW5mbz1lLHJ9KEIucHJvdG90eXBlPW5ldyBuKS5fX2E9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxlPWoodC5fX3YpLHI9dC5sLmdldChuKTtyZXR1cm4gclswXSsrLGZ1bmN0aW9uKHUpe3ZhciBvPWZ1bmN0aW9uKCl7dC5wcm9wcy5yZXZlYWxPcmRlcj8oci5wdXNoKHUpLEgodCxuLHIpKTp1KCl9O2U/ZShvKTpvKCl9fSxCLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obil7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIHQ9cihuLmNoaWxkcmVuKTtuLnJldmVhbE9yZGVyJiZcImJcIj09PW4ucmV2ZWFsT3JkZXJbMF0mJnQucmV2ZXJzZSgpO2Zvcih2YXIgZT10Lmxlbmd0aDtlLS07KXRoaXMubC5zZXQodFtlXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gbi5jaGlsZHJlbn0sQi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPUIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbih0LGUpe0gobixlLHQpfSl9O3ZhciBxPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpfHw2MDEwMyxHPS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxKPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sSz0vW0EtWjAtOV0vZyxRPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxYPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIG5uKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIHRuKG4sdCxlKXtyZXR1cm4gaShuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9bi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbXCJjb21wb25lbnRXaWxsTW91bnRcIixcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIixcImNvbXBvbmVudFdpbGxVcGRhdGVcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1wiVU5TQUZFX1wiK3RdfSxzZXQ6ZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm59KX19KX0pO3ZhciBlbj1lLmV2ZW50O2UuZXZlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGVuJiYobj1lbihuKSksbi5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxuLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxuLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LG4ubmF0aXZlRXZlbnQ9bn07dmFyIHJuLHVuPXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxvbj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9LG89LTE9PWUuaW5kZXhPZihcIi1cIik7Zm9yKHZhciBpIGluIHQpe3ZhciBsPXRbaV07aWYoIShcInZhbHVlXCI9PT1pJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09bHx8USYmXCJjaGlsZHJlblwiPT09aSYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09aXx8XCJjbGFzc05hbWVcIj09PWkpKXt2YXIgYz1pLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PWkmJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/aT1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09aSYmITA9PT1sP2w9XCJcIjpcInRyYW5zbGF0ZVwiPT09YyYmXCJub1wiPT09bD9sPSExOlwib1wiPT09Y1swXSYmXCJuXCI9PT1jWzFdP1wib25kb3VibGVjbGlja1wiPT09Yz9pPVwib25kYmxjbGlja1wiOlwib25jaGFuZ2VcIiE9PWN8fFwiaW5wdXRcIiE9PWUmJlwidGV4dGFyZWFcIiE9PWV8fFgodC50eXBlKT9cIm9uZm9jdXNcIj09PWM/aT1cIm9uZm9jdXNpblwiOlwib25ibHVyXCI9PT1jP2k9XCJvbmZvY3Vzb3V0XCI6Si50ZXN0KGkpJiYoaT1jKTpjPWk9XCJvbmlucHV0XCI6byYmRy50ZXN0KGkpP2k9aS5yZXBsYWNlKEssXCItJCZcIikudG9Mb3dlckNhc2UoKTpudWxsPT09bCYmKGw9dm9pZCAwKSxcIm9uaW5wdXRcIj09PWMmJnVbaT1jXSYmKGk9XCJvbmlucHV0Q2FwdHVyZVwiKSx1W2ldPWx9fVwic2VsZWN0XCI9PWUmJih1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLG51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpKSx0LmNsYXNzJiYhdC5jbGFzc05hbWU/KHUuY2xhc3M9dC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImNsYXNzTmFtZVwiLHVuKSk6dC5jbGFzc05hbWUmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9cSxvbiYmb24obil9O3ZhciBsbj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXtsbiYmbG4obikscm49bi5fX2N9O3ZhciBjbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtjbiYmY24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSxybj1udWxsfTt2YXIgZm49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBybi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazp2LHVzZUNvbnRleHQ6ZCx1c2VEZWJ1Z1ZhbHVlOm0sdXNlRGVmZXJyZWRWYWx1ZTp3LHVzZUVmZmVjdDpoLHVzZUlkOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTp5LHVzZUluc2VydGlvbkVmZmVjdDpJLHVzZUxheW91dEVmZmVjdDpzLHVzZU1lbW86Xyx1c2VSZWR1Y2VyOmIsdXNlUmVmOlMsdXNlU3RhdGU6YSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHVzZVRyYW5zaXRpb246a319fSxhbj1cIjE4LjMuMVwiO2Z1bmN0aW9uIHNuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBobihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1xfWZ1bmN0aW9uIHZuKG4pe3JldHVybiBobihuKSYmbi50eXBlPT09dX1mdW5jdGlvbiBkbihuKXtyZXR1cm4hIW4mJlwic3RyaW5nXCI9PXR5cGVvZiBuLmRpc3BsYXlOYW1lJiYwPT1uLmRpc3BsYXlOYW1lLmluZGV4T2YoXCJNZW1vKFwiKX1mdW5jdGlvbiBtbihuKXtyZXR1cm4gaG4obik/Zi5hcHBseShudWxsLGFyZ3VtZW50cyk6bn1mdW5jdGlvbiBwbihuKXtyZXR1cm4hIW4uX19rJiYobyhudWxsLG4pLCEwKX1mdW5jdGlvbiB5bihuKXtyZXR1cm4gbiYmKG4uYmFzZXx8MT09PW4ubm9kZVR5cGUmJm4pfHxudWxsfXZhciBfbj1mdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSxibj1mdW5jdGlvbihuLHQpe3ZhciByPWUuZGVib3VuY2VSZW5kZXJpbmc7ZS5kZWJvdW5jZVJlbmRlcmluZz1mdW5jdGlvbihuKXtyZXR1cm4gbigpfTt2YXIgdT1uKHQpO3JldHVybiBlLmRlYm91bmNlUmVuZGVyaW5nPXIsdX0sU249aG4sZ249e3VzZVN0YXRlOmEsdXNlSWQ6cCx1c2VSZWR1Y2VyOmIsdXNlRWZmZWN0OmgsdXNlTGF5b3V0RWZmZWN0OnMsdXNlSW5zZXJ0aW9uRWZmZWN0OkksdXNlVHJhbnNpdGlvbjprLHVzZURlZmVycmVkVmFsdWU6dyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHN0YXJ0VHJhbnNpdGlvbjp4LHVzZVJlZjpTLHVzZUltcGVyYXRpdmVIYW5kbGU6eSx1c2VNZW1vOl8sdXNlQ2FsbGJhY2s6dix1c2VDb250ZXh0OmQsdXNlRGVidWdWYWx1ZTptLHZlcnNpb246XCIxOC4zLjFcIixDaGlsZHJlbjpMLHJlbmRlcjpubixoeWRyYXRlOnRuLHVubW91bnRDb21wb25lbnRBdE5vZGU6cG4sY3JlYXRlUG9ydGFsOiQsY3JlYXRlRWxlbWVudDp0LGNyZWF0ZUNvbnRleHQ6bCxjcmVhdGVGYWN0b3J5OnNuLGNsb25lRWxlbWVudDptbixjcmVhdGVSZWY6YyxGcmFnbWVudDp1LGlzVmFsaWRFbGVtZW50OmhuLGlzRWxlbWVudDpTbixpc0ZyYWdtZW50OnZuLGlzTWVtbzpkbixmaW5kRE9NTm9kZTp5bixDb21wb25lbnQ6bixQdXJlQ29tcG9uZW50Ok0sbWVtbzpOLGZvcndhcmRSZWY6RCxmbHVzaFN5bmM6Ym4sdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6X24sU3RyaWN0TW9kZTp1LFN1c3BlbnNlOlAsU3VzcGVuc2VMaXN0OkIsbGF6eTp6LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmZufTtleHBvcnR7TCBhcyBDaGlsZHJlbixNIGFzIFB1cmVDb21wb25lbnQsUCBhcyBTdXNwZW5zZSxCIGFzIFN1c3BlbnNlTGlzdCxmbiBhcyBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxtbiBhcyBjbG9uZUVsZW1lbnQsc24gYXMgY3JlYXRlRmFjdG9yeSwkIGFzIGNyZWF0ZVBvcnRhbCxnbiBhcyBkZWZhdWx0LHluIGFzIGZpbmRET01Ob2RlLGJuIGFzIGZsdXNoU3luYyxEIGFzIGZvcndhcmRSZWYsdG4gYXMgaHlkcmF0ZSxTbiBhcyBpc0VsZW1lbnQsdm4gYXMgaXNGcmFnbWVudCxkbiBhcyBpc01lbW8saG4gYXMgaXNWYWxpZEVsZW1lbnQseiBhcyBsYXp5LE4gYXMgbWVtbyxubiBhcyByZW5kZXIseCBhcyBzdGFydFRyYW5zaXRpb24scG4gYXMgdW5tb3VudENvbXBvbmVudEF0Tm9kZSxfbiBhcyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyx3IGFzIHVzZURlZmVycmVkVmFsdWUsSSBhcyB1c2VJbnNlcnRpb25FZmZlY3QsQyBhcyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxrIGFzIHVzZVRyYW5zaXRpb24sYW4gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEZvY3VzIHRyYXAuXG4gKlxuICogS2VlcHMgVGFiIC8gU2hpZnQrVGFiIGluc2lkZSBhIHJvb3QgZWxlbWVudC4gUmV0dXJucyBhIGNsZWFudXAgdGhhdFxuICogcmVzdG9yZXMgZm9jdXMgdG8gdGhlIGVsZW1lbnQgdGhhdCB3YXMgYWN0aXZlIGJlZm9yZSB0aGUgdHJhcCBtb3VudGVkLlxuICogU2ltcGxlIGFuZCBzeW5jaHJvbm91cyDigJQgYXNzdW1lcyBhIHNpbmdsZSBhY3RpdmUgdHJhcCBwZXIgT3ZlcmxheVJvb3RcbiAqIGFuZCBsZXRzIHRoZSBvdmVybGF5IHJlZ2lzdHJ5IGluIGBAZmFpcmZveC9wb2xseS9hY3Rpb25zYCBlbmZvcmNlIHRoYXRcbiAqIGF0IHRoZSBzdGFjayBsZXZlbC5cbiAqL1xuXG5jb25zdCBGT0NVU0FCTEVfU0VMRUNUT1IgPSBbXG4gIFwiYVtocmVmXVwiLFxuICBcImFyZWFbaHJlZl1cIixcbiAgXCJidXR0b246bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pOm5vdChbdHlwZT1oaWRkZW5dKVwiLFxuICBcInNlbGVjdDpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJpZnJhbWVcIixcbiAgXCJvYmplY3RcIixcbiAgXCJlbWJlZFwiLFxuICAnW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJyxcbiAgXCJbY29udGVudGVkaXRhYmxlXVwiLFxuXS5qb2luKFwiLFwiKTtcblxuZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlKHJvb3Q6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShyb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KEZPQ1VTQUJMRV9TRUxFQ1RPUikpO1xuICByZXR1cm4gbm9kZXMuZmlsdGVyKFxuICAgIChlbCkgPT4gIWVsLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpICYmIGVsLmdldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEZvY3VzVHJhcChyb290OiBIVE1MRWxlbWVudCk6ICgpID0+IHZvaWQge1xuICBjb25zdCBwcmV2aW91c0FjdGl2ZSA9IChcbiAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IDogbnVsbFxuICApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvLyBNb3ZlIGZvY3VzIGludG8gdGhlIHJvb3QgaWYgaXQncyBub3QgYWxyZWFkeS5cbiAgY29uc3QgZm9jdXNhYmxlID0gZ2V0Rm9jdXNhYmxlKHJvb3QpO1xuICBjb25zdCBmaXJzdCA9IGZvY3VzYWJsZVswXSA/PyByb290O1xuICBpZiAoIXJvb3QuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICBmaXJzdC5mb2N1cygpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgIT09IFwiVGFiXCIpIHJldHVybjtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZvY3VzYWJsZShyb290KTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdEl0ZW0gPSBpdGVtc1swXTtcbiAgICBjb25zdCBsYXN0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgIGlmICghZmlyc3RJdGVtIHx8ICFsYXN0SXRlbSkgcmV0dXJuO1xuICAgIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBpZiAoYWN0aXZlID09PSBmaXJzdEl0ZW0gfHwgIXJvb3QuY29udGFpbnMoYWN0aXZlKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsYXN0SXRlbS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWN0aXZlID09PSBsYXN0SXRlbSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGZpcnN0SXRlbS5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgaWYgKHByZXZpb3VzQWN0aXZlICYmIGRvY3VtZW50LmNvbnRhaW5zKHByZXZpb3VzQWN0aXZlKSkge1xuICAgICAgcHJldmlvdXNBY3RpdmUuZm9jdXMoKTtcbiAgICB9XG4gIH07XG59XG4iLAogICAgIi8qKlxuICogU2Nyb2xsIGxvY2suXG4gKlxuICogUmVmZXJlbmNlLWNvdW50ZWQuIE11bHRpcGxlIG92ZXJsYXlzIGNhbiByZXF1ZXN0IGEgbG9jazsgdGhlIGJvZHlcbiAqIHN0YXlzIGxvY2tlZCB1bnRpbCBldmVyeSByZXF1ZXN0IHJlbGVhc2VzLiBBIHNjcm9sbGJhci1ndXR0ZXIgdG9rZW5cbiAqIGlzIHdyaXR0ZW4gYXQgYWNxdWlyZSB0aW1lIHNvIGNvbnRlbnQgYmVoaW5kIHRoZSBvdmVybGF5IGRvZXNuJ3RcbiAqIHJlZmxvdyB3aGVuIHRoZSBiYXIgZGlzYXBwZWFycy5cbiAqL1xuXG5sZXQgY291bnQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNxdWlyZVNjcm9sbExvY2soKTogKCkgPT4gdm9pZCB7XG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3QgZ3V0dGVyID0gd2luZG93LmlubmVyV2lkdGggLSBodG1sLmNsaWVudFdpZHRoO1xuICAgIGh0bWwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvbGx5LXNjcm9sbGJhci1ndXR0ZXJcIiwgYCR7Z3V0dGVyfXB4YCk7XG4gICAgaHRtbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIiwgXCJ0cnVlXCIpO1xuICB9XG4gIGNvdW50ICs9IDE7XG4gIGxldCByZWxlYXNlZCA9IGZhbHNlO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChyZWxlYXNlZCkgcmV0dXJuO1xuICAgIHJlbGVhc2VkID0gdHJ1ZTtcbiAgICBjb3VudCAtPSAxO1xuICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaHRtbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIik7XG4gICAgICBodG1sLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiLS1wb2xseS1zY3JvbGxiYXItZ3V0dGVyXCIpO1xuICAgIH1cbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdmVybGF5Um9vdCDigJQgcG9ydGFsIHRhcmdldCBmb3Igc3RhY2tlZCBvdmVybGF5cy5cbiAqXG4gKiBBcHBzIHJlbmRlciA8T3ZlcmxheVJvb3QgLz4gb25jZSwgdHlwaWNhbGx5IGFzIHRoZSBsYXN0IGNoaWxkIG9mIHRoZVxuICogYXBwIHJvb3QuIE1vZGFsLCBDb25maXJtRGlhbG9nLCBhbmQgVG9hc3QgcG9ydGFsIGludG8gdGhpcyBlbGVtZW50O1xuICogdGhlIHNjcm9sbCBsb2NrIHRvZ2dsZXMgYmFzZWQgb24gdGhlIG92ZXJsYXkgcmVnaXN0cnkgY291bnQuXG4gKi9cblxuaW1wb3J0IHsgZWZmZWN0IH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBoYXNPcGVuT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGFjcXVpcmVTY3JvbGxMb2NrIH0gZnJvbSBcIi4vaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL092ZXJsYXlSb290Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIE92ZXJsYXlSb290KCkge1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IHJlbGVhc2U6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGhhc09wZW5PdmVybGF5KCkpIHtcbiAgICAgICAgaWYgKCFyZWxlYXNlKSByZWxlYXNlID0gYWNxdWlyZVNjcm9sbExvY2soKTtcbiAgICAgIH0gZWxzZSBpZiAocmVsZWFzZSkge1xuICAgICAgICByZWxlYXNlKCk7XG4gICAgICAgIHJlbGVhc2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkaXNwb3NlKCk7XG4gICAgICByZWxlYXNlPy4oKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIDxkaXYgcmVmPXtyZWZ9IGNsYXNzPXtjbGFzc2VzW1wicm9vdFwiXX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LW92ZXJsYXktcm9vdCAvPjtcbn1cblxuLyoqIEdldCB0aGUgbW91bnQgbm9kZSBmb3IgcG9ydGFsZWQgb3ZlcmxheXMuIFJldHVybnMgbnVsbCBiZWZvcmUgbW91bnQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3ZlcmxheVJvb3ROb2RlKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIltkYXRhLXBvbGx5LW92ZXJsYXktcm9vdF1cIik7XG59XG4iLAogICAgIi8qKlxuICogTW9kYWwg4oCUIGNvbXBvdW5kIGRpYWxvZyB3aXRoIGZvY3VzIHRyYXAsIEVzY2FwZSBoYW5kbGluZywgcG9ydGFsLFxuICogYW5kIG92ZXJsYXktc3RhY2sgaW50ZWdyYXRpb24uXG4gKlxuICogUm9vdCB0YWtlcyBhIGB3aGVuYCBzaWduYWwgKG9yIGJvb2xlYW4pLiBXaGVuIHRydXRoeSB0aGUgY29udGVudCBtb3VudHNcbiAqIGludG8gdGhlIE92ZXJsYXlSb290IHBvcnRhbCwgZm9jdXMgbW92ZXMgaW5zaWRlLCBUYWIgaXMgdHJhcHBlZCwgRXNjYXBlXG4gKiBmaXJlcyBgZGF0YS1hY3Rpb249XCJtb2RhbDpjbG9zZVwiYCAob3IgdGhlIG92ZXJsYXkgcmVnaXN0cnkncyBvbkNsb3NlXG4gKiBjYWxsYmFjayksIGFuZCB0aGUgYm9keSBzY3JvbGwgbG9ja3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWFkb25seVNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUNvbnRleHQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlSWQsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBwb3BPdmVybGF5LCBwdXNoT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGluc3RhbGxGb2N1c1RyYXAgfSBmcm9tIFwiLi9pbnRlcm5hbC9mb2N1cy10cmFwLnRzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuXG50eXBlIE1vZGFsQ29udGV4dCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGVJZDogc3RyaW5nO1xuICBkZXNjSWQ6IHN0cmluZztcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBDdHggPSBjcmVhdGVDb250ZXh0PE1vZGFsQ29udGV4dCB8IG51bGw+KG51bGwpO1xuXG5mdW5jdGlvbiB1c2VNb2RhbCgpOiBNb2RhbENvbnRleHQge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KEN0eCk7XG4gIGlmICghY3R4KSB0aHJvdyBuZXcgRXJyb3IoXCJNb2RhbCBzdWItY29tcG9uZW50cyBtdXN0IHJlbmRlciBpbnNpZGUgPE1vZGFsLlJvb3Q+XCIpO1xuICByZXR1cm4gY3R4O1xufVxuXG50eXBlIFJvb3RQcm9wcyA9IHtcbiAgd2hlbjogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj4gfCBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogQWNjZXNzaWJsZSBsYWJlbCBzb3VyY2U6IFwidGl0bGVcIiB1c2VzIHRoZSA8TW9kYWwuVGl0bGU+IGlkLCBvciBwYXNzIGFuIGV4cGxpY2l0IGxhYmVsLiAqL1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFJvb3QoeyB3aGVuLCBvbkNsb3NlLCBjaGlsZHJlbiwgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB9OiBSb290UHJvcHMpIHtcbiAgY29uc3QgaWQgPSB1c2VJZCgpO1xuICBjb25zdCB0aXRsZUlkID0gYCR7aWR9LXRpdGxlYDtcbiAgY29uc3QgZGVzY0lkID0gYCR7aWR9LWRlc2NgO1xuICBjb25zdCBtb3VudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHR5cGVvZiB3aGVuID09PSBcImJvb2xlYW5cIiA/IHdoZW4gOiB3aGVuLnZhbHVlO1xuXG4gIC8vIENvbnN1bWVycyBhbG1vc3QgYWx3YXlzIHBhc3MgYW4gaW5saW5lIGNsb3N1cmUgZm9yIGBvbkNsb3NlYCwgc28gdGhlIHByb3BcbiAgLy8gaGFzIGEgbmV3IGlkZW50aXR5IG9uIGV2ZXJ5IHJlbmRlci4gS2VlcGluZyBpdCBpbiB0aGUgb3ZlcmxheSBlZmZlY3Qnc1xuICAvLyBkZXBlbmRlbmN5IGFycmF5IG1hZGUgdGhhdCBlZmZlY3QgdGVhciBkb3duIGFuZCByZS1pbnN0YWxsIHBlciByZW5kZXI6XG4gIC8vIGVhY2ggcnVuIHdyb3RlIHRoZSBgc3RhY2tgIHNpZ25hbCB0d2ljZSBhbmQgbW92ZWQgZm9jdXMgdHdpY2UsIGFuZCB0aGVcbiAgLy8gc2lnbmFsIHdyaXRlIHJlLXJlbmRlcmVkIHRoZSBzdWJzY3JpYmVyIHRoYXQgcHJvZHVjZWQgdGhlIG5leHQgY2xvc3VyZS5cbiAgLy8gVGhlIHJlc3VsdCB3YXMgYW4gdW5ib3VuZGVkIHJlbmRlciBsb29wIHRoYXQgcGlubmVkIHRoZSBtYWluIHRocmVhZFxuICAvLyAocG9sbHkjMTc3KS4gVGhlIGVmZmVjdCBub3cgcmVhZHMgdGhlIGxhdGVzdCBjYWxsYmFjayB0aHJvdWdoIGEgcmVmLCBzb1xuICAvLyBpdHMgZGVwZW5kZW5jaWVzIGFyZSBvbmx5IHRoZSB2YWx1ZXMgdGhhdCBnZW51aW5lbHkgcmUtb3BlbiB0aGUgb3ZlcmxheS5cbiAgY29uc3Qgb25DbG9zZVJlZiA9IHVzZVJlZihvbkNsb3NlKTtcbiAgb25DbG9zZVJlZi5jdXJyZW50ID0gb25DbG9zZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICBzZXRQb3J0YWxOb2RlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRQb3J0YWxOb2RlKGdldE92ZXJsYXlSb290Tm9kZSgpKTtcbiAgfSwgW2lzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4gfHwgIXBvcnRhbE5vZGUpIHJldHVybjtcbiAgICBjb25zdCBlbnRyeSA9IHsgaWQsIG9uQ2xvc2U6ICgpID0+IG9uQ2xvc2VSZWYuY3VycmVudD8uKCkgfTtcbiAgICBwdXNoT3ZlcmxheShlbnRyeSk7XG4gICAgY29uc3QgZWwgPSBtb3VudFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGNsZWFudXAgPSBlbFxuICAgICAgPyBpbnN0YWxsRm9jdXNUcmFwKGVsKVxuICAgICAgOiAoKSA9PiB7XG4gICAgICAgICAgLyogbm8gcmVmIHlldCAqL1xuICAgICAgICB9O1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBwb3BPdmVybGF5KGlkKTtcbiAgICB9O1xuICB9LCBbaXNPcGVuLCBwb3J0YWxOb2RlLCBpZF0pO1xuXG4gIGlmICghaXNPcGVuIHx8ICFwb3J0YWxOb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBvbkNsb3NlPy4oKTtcbiAgfTtcblxuICBjb25zdCBjdHg6IE1vZGFsQ29udGV4dCA9IHsgaWQsIHRpdGxlSWQsIGRlc2NJZCwgY2xvc2UgfTtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDxDdHguUHJvdmlkZXIgdmFsdWU9e2N0eH0+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGVsZW1lbnRSZWY9e21vdW50UmVmfVxuICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAganVzdGlmeUl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc1tcImNvbnRhaW5lclwiXX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNvbnRlbnRcbiAgICAgICAgZGF0YS1vdmVybGF5LWlkPXtpZH1cbiAgICAgICAgZGF0YS1zdGF0ZT1cIm9wZW5cIlxuICAgICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2FyaWFMYWJlbCA/IHVuZGVmaW5lZCA6IHRpdGxlSWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17ZGVzY0lkfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0xheW91dD5cbiAgICA8L0N0eC5Qcm92aWRlcj5cbiAgKTtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNvbnRlbnQsIHBvcnRhbE5vZGUpO1xufVxuXG5mdW5jdGlvbiBCYWNrZHJvcCgpIHtcbiAgY29uc3QgeyBjbG9zZSB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiYmFja2Ryb3BcIl19IGRhdGEtcG9sbHktbW9kYWwtYmFja2Ryb3Agb25DbGljaz17Y2xvc2V9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICk7XG59XG5cbnR5cGUgQ29udGVudFByb3BzID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBKU1guQ1NTUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIENvbnRlbnQoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBzdHlsZSB9OiBDb250ZW50UHJvcHMpIHtcbiAgY29uc3QgY2xzID0gY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcInN1cmZhY2VcIl19ICR7Y2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wic3VyZmFjZVwiXTtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICByYWRpdXM9XCJsZ1wiXG4gICAgICBzaGFkb3c9XCJsZ1wiXG4gICAgICBwb3NpdGlvbj1cInJlbGF0aXZlXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xzfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgZGF0YS1wb2xseS1tb2RhbC1zdXJmYWNlXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxoZWFkZXIgY2xhc3M9e2NsYXNzZXNbXCJoZWFkZXJcIl19IGRhdGEtcG9sbHktbW9kYWwtaGVhZGVyPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvaGVhZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBUaXRsZSh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgY29uc3QgeyB0aXRsZUlkIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxoMiBpZD17dGl0bGVJZH0gY2xhc3M9e2NsYXNzZXNbXCJ0aXRsZVwiXX0gZGF0YS1wb2xseS1tb2RhbC10aXRsZT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2gyPlxuICApO1xufVxuXG5mdW5jdGlvbiBCb2R5KHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICBjb25zdCB7IGRlc2NJZCB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtkZXNjSWR9IGNsYXNzPXtjbGFzc2VzW1wiYm9keVwiXX0gZGF0YS1wb2xseS1tb2RhbC1ib2R5PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBGb290ZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGZvb3RlciBjbGFzcz17Y2xhc3Nlc1tcImZvb3RlclwiXX0gZGF0YS1wb2xseS1tb2RhbC1mb290ZXI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9mb290ZXI+XG4gICk7XG59XG5cbnR5cGUgQ2xvc2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogRmlyZSBhIHJlZ2lzdGVyZWQgZGF0YS1hY3Rpb24gaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBvbkNsb3NlIGNhbGxiYWNrLiAqL1xuICBhY3Rpb24/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBDbG9zZSh7IGNoaWxkcmVuLCBhY3Rpb24gfTogQ2xvc2VQcm9wcykge1xuICBjb25zdCB7IGNsb3NlIH0gPSB1c2VNb2RhbCgpO1xuICBpZiAoYWN0aW9uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICAgIGRhdGEtYWN0aW9uPXthY3Rpb259XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICBvbkNsaWNrPXtjbG9zZX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBNb2RhbCA9IHtcbiAgUm9vdCxcbiAgQmFja2Ryb3AsXG4gIENvbnRlbnQsXG4gIEhlYWRlcixcbiAgVGl0bGUsXG4gIEJvZHksXG4gIEZvb3RlcixcbiAgQ2xvc2UsXG59O1xuIiwKICAgICIvKipcbiAqIENvbmZpcm1EaWFsb2cg4oCUIFByb21pc2UtcmV0dXJuaW5nIGNvbmZpcm1hdGlvbiBwcmltaXRpdmUuXG4gKlxuICogYGNvbmZpcm0oeyB0aXRsZSwgYm9keSwgZGFuZ2VyIH0pYCByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4uIE9wZW5zIHRoZVxuICogcmVuZGVyZWQgYDxDb25maXJtRGlhbG9nLkhvc3QgLz5gIG1vZGFsICh3aGljaCBtdXN0IGJlIG1vdW50ZWQgb25jZSBhdFxuICogdGhlIGFwcCByb290KS4gVXNlciBwaWNraW5nIGNvbmZpcm0gb3IgY2FuY2VsIHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogRXNjYXBlLCBiYWNrZHJvcCBjbGljaywgYW5kIGV4cGxpY2l0IGAuZGlzbWlzcygpYCByZXNvbHZlIGZhbHNlLlxuICovXG5cbmltcG9ydCB7IHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29uZmlybURpYWxvZy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuL01vZGFsLnRzeFwiO1xuXG50eXBlIENvbmZpcm1SZXF1ZXN0ID0ge1xuICBpZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xuICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBwZW5kaW5nID0gc2lnbmFsPENvbmZpcm1SZXF1ZXN0IHwgbnVsbD4obnVsbCk7XG5jb25zdCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xubGV0IG5leHRJZCA9IDA7XG5cbmV4cG9ydCB0eXBlIENvbmZpcm1PcHRpb25zID0ge1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpcm0ob3B0aW9uczogQ29uZmlybU9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgbmV4dElkICs9IDE7XG4gICAgcGVuZGluZy52YWx1ZSA9IHtcbiAgICAgIGlkOiBuZXh0SWQsXG4gICAgICB0aXRsZTogb3B0aW9ucy50aXRsZSxcbiAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgIGRhbmdlcjogb3B0aW9ucy5kYW5nZXIsXG4gICAgICBjb25maXJtTGFiZWw6IG9wdGlvbnMuY29uZmlybUxhYmVsLFxuICAgICAgY2FuY2VsTGFiZWw6IG9wdGlvbnMuY2FuY2VsTGFiZWwsXG4gICAgICByZXNvbHZlLFxuICAgIH07XG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlKHJlc3VsdDogYm9vbGVhbik6IHZvaWQge1xuICBjb25zdCBjdXJyZW50ID0gcGVuZGluZy52YWx1ZTtcbiAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICBwZW5kaW5nLnZhbHVlID0gbnVsbDtcbiAgY3VycmVudC5yZXNvbHZlKHJlc3VsdCk7XG59XG5cbi8qKiBSZW5kZXJzIHRoZSBhY3RpdmUgY29uZmlybSBkaWFsb2cuIE1vdW50IG9uY2UgbmVhciB0aGUgYXBwIHJvb3QuICovXG5mdW5jdGlvbiBIb3N0KCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGN1cnJlbnQgPSBwZW5kaW5nLnZhbHVlO1xuICBpZiAoIWN1cnJlbnQpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxNb2RhbC5Sb290IHdoZW49e2lzT3Blbn0gb25DbG9zZT17KCkgPT4gY2xvc2UoZmFsc2UpfT5cbiAgICAgIDxNb2RhbC5CYWNrZHJvcCAvPlxuICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgIDxNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgPE1vZGFsLlRpdGxlPntjdXJyZW50LnRpdGxlfTwvTW9kYWwuVGl0bGU+XG4gICAgICAgIDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICB7Y3VycmVudC5ib2R5ID8gPE1vZGFsLkJvZHk+e2N1cnJlbnQuYm9keX08L01vZGFsLkJvZHk+IDogbnVsbH1cbiAgICAgICAgPE1vZGFsLkZvb3Rlcj5cbiAgICAgICAgICA8TGF5b3V0XG4gICAgICAgICAgICBjb2x1bW5zPVwiYXV0byBhdXRvXCJcbiAgICAgICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImVuZFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfVxuICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLWFjdGlvbnNcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImNhbmNlbFwiXX1cbiAgICAgICAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktY29uZmlybS1jYW5jZWxcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2UoZmFsc2UpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jYW5jZWxMYWJlbCA/PyBcIkNhbmNlbFwifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y3VycmVudC5kYW5nZXIgPyBjbGFzc2VzW1wiY29uZmlybURhbmdlclwiXSA6IGNsYXNzZXNbXCJjb25maXJtXCJdfVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLW9rXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsb3NlKHRydWUpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jb25maXJtTGFiZWwgPz8gXCJPS1wifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvTW9kYWwuRm9vdGVyPlxuICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgIDwvTW9kYWwuUm9vdD5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IENvbmZpcm1EaWFsb2cgPSB7IEhvc3QsIGNvbmZpcm0gfTtcbiIsCiAgICAiLyoqXG4gKiBGaWxlSW5wdXQg4oCUIGEgc3R5bGVkIHRyaWdnZXIgZm9yIHRoZSBuYXRpdmUgZmlsZSBwaWNrZXIuXG4gKlxuICogQSBmaWxlIGlzIGEgYmluYXJ5IG9iamVjdDogaXQgY2Fubm90IHJpZGUgYSBgZGF0YS1hY3Rpb25gIGF0dHJpYnV0ZVxuICogdGhlIHdheSBhIHN0cmluZyB2YWx1ZSBkb2VzLCBzbyBGaWxlSW5wdXQgaXMgdGhlIG9uZSBpbnB1dCBwcmltaXRpdmVcbiAqIHRoYXQgdGFrZXMgYSBjYWxsYmFjay4gYG9uRmlsZXNgIGZpcmVzIHdpdGggdGhlIGNob3NlbiBGaWxlTGlzdC4gVGhlXG4gKiBuYXRpdmUgPGlucHV0IHR5cGU9XCJmaWxlXCI+IHN0YXlzIGluIHRoZSBET00g4oCUIHZpc3VhbGx5IGhpZGRlbiBpbnNpZGVcbiAqIHRoZSA8bGFiZWw+IOKAlCBzbyB0aGUgd2hvbGUgY29udHJvbCBvcGVucyB0aGUgcGlja2VyIGFuZCByZW1haW5zXG4gKiBrZXlib2FyZC1hY2Nlc3NpYmxlIChwb2xseSMxMzUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgRmlsZUlucHV0UHJvcHMgPSB7XG4gIC8qKiBGaXJlZCB3aXRoIHRoZSBjaG9zZW4gZmlsZXMgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuICBvbkZpbGVzOiAoZmlsZXM6IEZpbGVMaXN0KSA9PiB2b2lkO1xuICAvKiogVmlzaWJsZSB0cmlnZ2VyIHRleHQuIERlZmF1bHQ6ICdDaG9vc2UgZmlsZScuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogYGFjY2VwdGAgZmlsdGVyIGZvcndhcmRlZCB0byB0aGUgbmF0aXZlIGlucHV0IChlLmcuICdpbWFnZS8qJykuICovXG4gIGFjY2VwdD86IHN0cmluZztcbiAgLyoqIEFsbG93IHNlbGVjdGluZyBtb3JlIHRoYW4gb25lIGZpbGUuICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEZpbGVJbnB1dChwcm9wczogRmlsZUlucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgb25GaWxlcywgbGFiZWwgPSBcIkNob29zZSBmaWxlXCIsIGFjY2VwdCwgbXVsdGlwbGUsIGRpc2FibGVkLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIG9uRmlsZXMoZmlsZXMpO1xuICB9O1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJmaWxlSW5wdXRcIl1dO1xuICBpZiAoZGlzYWJsZWQpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImRpc2FibGVkXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWZpbGUtaW5wdXQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm5hdGl2ZVwiXX1cbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBIdG1sIOKAlCByZW5kZXIgdHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgcmF3IG1hcmt1cC5cbiAqXG4gKiBUaGUgZGVsaWJlcmF0ZSBlc2NhcGUgaGF0Y2ggZm9yIHRoZSByYXJlIHRoaW5nIHBvbGx5LXVpIGNhbm5vdFxuICogZXhwcmVzczogYSBsb2NhbGx5IGdlbmVyYXRlZCwgYWxyZWFkeS1zYWZlIFNWRyAoYSBRUiBjb2RlKSwgYVxuICogcHJlLXJlbmRlcmVkIGRpYWdyYW0uIFRoZSBjYWxsZXIgb3ducyBzYWZldHkg4oCUIGBodG1sYCBnb2VzIHN0cmFpZ2h0XG4gKiBpbnRvIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAsIHNvIGl0IE1VU1QgYmUgdHJ1c3RlZCBvciBzYW5pdGlzZWRcbiAqIGZpcnN0LiBGb3IgdW50cnVzdGVkIG1hcmtkb3duIHVzZSBgcmVuZGVyTWFya2Rvd25gLCB3aGljaCBzYW5pdGlzZXM7XG4gKiBmb3IgYW55dGhpbmcgYSBwcmltaXRpdmUgYWxyZWFkeSBjb3ZlcnMsIHVzZSB0aGUgcHJpbWl0aXZlLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBIdG1sUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogVHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgSFRNTC4gVGhlIGNhbGxlciBvd25zIGl0cyBzYWZldHkuICovXG4gIGh0bWw6IHN0cmluZztcbiAgLyoqIFBvbHltb3JwaGljIHdyYXBwZXIgZWxlbWVudCAoZGl2LCBzcGFuLCBmaWd1cmUsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBIdG1sKHByb3BzOiBIdG1sUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgaHRtbCwgYXMgPSBcImRpdlwiLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChhcywge1xuICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSovdGl0bGUgZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd25cbiAgICAvLyBhdHRyaWJ1dGVzIGJlbG93IHdpbiBvbiBhbnkgY29sbGlzaW9uLlxuICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgaWQsXG4gICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktaHRtbFwiOiB0cnVlLFxuICAgIC8vIG5vc2VtZ3JlcDogdHlwZXNjcmlwdC5yZWFjdC5zZWN1cml0eS5hdWRpdC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbCDigJQgdGhpcyBwcmltaXRpdmUgSVMgdGhlIGRvY3VtZW50ZWQgdHJ1c3RlZC1tYXJrdXAgZXNjYXBlIGhhdGNoOyB0aGUgY2FsbGVyIG93bnMgc2FuaXRpc2F0aW9uIChzZWUgbW9kdWxlIGRvY3MpLlxuICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7IF9faHRtbDogaHRtbCB9LFxuICB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBMaW5rIOKAlCB0b2tlbi1zdHlsZWQgbmF2aWdhdGlvbmFsIGFuY2hvci5cbiAqXG4gKiBUaGUgcHJpbWl0aXZlIGZvciBwbGFpbiBoeXBlcmxpbmtzOiBodWIgYXBwLWdyaWQgY2FyZHMsIGEgZmlsZVxuICogZG93bmxvYWQsIGFuIGV4dGVybmFsIHJlZmVyZW5jZS4gPEJ1dHRvbiBocmVmPiBpcyBmb3IgbGluay1zaGFwZWRcbiAqIEJVVFRPTlMg4oCUIGEgY2FsbCB0byBhY3Rpb24gd2VhcmluZyBidXR0b24gY2hyb21lOyA8TGluaz4gaXMgZm9yXG4gKiBpbmxpbmUsIHRleHR1YWwgbGlua3MgdGhhdCByZWFkIGFzIGxpbmtzLiBgZXh0ZXJuYWxgIG9wZW5zIGEgbmV3IHRhYlxuICogd2l0aCBgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiYDsgYGRvd25sb2FkYCBvZmZlcnMgdGhlIHRhcmdldCBhcyBhXG4gKiBmaWxlIChhbiBlbXB0eSBzdHJpbmcga2VlcHMgdGhlIHJlc291cmNlJ3Mgb3duIGZpbGVuYW1lKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MaW5rLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTGlua1Byb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBocmVmOiBzdHJpbmc7XG4gIC8qKiBPcGVuIGluIGEgbmV3IHRhYiB3aXRoIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIi4gKi9cbiAgZXh0ZXJuYWw/OiBib29sZWFuO1xuICAvKiogT2ZmZXIgdGhlIGhyZWYgYXMgYSBkb3dubG9hZDsgYW4gZW1wdHkgc3RyaW5nIGtlZXBzIGl0cyBmaWxlbmFtZS4gKi9cbiAgZG93bmxvYWQ/OiBzdHJpbmc7XG4gIC8qKiBEcm9wIHRoZSB1bmRlcmxpbmUgdW50aWwgaG92ZXIg4oCUIGZvciBsaW5rIGdyaWRzIGFuZCBjYXJkIGxpbmtzLiAqL1xuICBzdWJ0bGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIExpbmsocHJvcHM6IExpbmtQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgaHJlZiwgZXh0ZXJuYWwsIGRvd25sb2FkLCBzdWJ0bGUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJsaW5rXCJdXTtcbiAgaWYgKHN1YnRsZSkgcGFydHMucHVzaChjbGFzc2VzW1wic3VidGxlXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHsuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpfVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGhyZWY9e2hyZWZ9XG4gICAgICB0YXJnZXQ9e2V4dGVybmFsID8gXCJfYmxhbmtcIiA6IHVuZGVmaW5lZH1cbiAgICAgIHJlbD17ZXh0ZXJuYWwgPyBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiA6IHVuZGVmaW5lZH1cbiAgICAgIGRvd25sb2FkPXtkb3dubG9hZH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktbGlua1xuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2E+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogT3V0cHV0IOKAlCByZWFkLW9ubHksIG11bHRpLWxpbmUgZGlhZ25vc3RpYyB0ZXh0LlxuICpcbiAqIEZvciBwcm9ncmFtIG91dHB1dCBhIGNvbnN1bWVyIG11c3QgU0hPVyBidXQgbm90IGVkaXQ6IGEgbWVzaC1zdGF0ZVxuICogc25hcHNob3QsIGEgcGVyLXBlZXIgc3luYyB0YWJsZSwgYSByZWNvdmVyeSBibG9iLiA8VGV4dElucHV0PiBhbmRcbiAqIDxBY3Rpb25JbnB1dD4gYXJlIHNpbmdsZS1saW5lIGFuZCBlZGl0YWJsZTsgPENvZGU+IGlzIGZvciBjb2RlXG4gKiBzYW1wbGVzIGFuZCBuZXZlciB3cmFwcy4gPE91dHB1dD4gcmVuZGVycyBhIG1vbm9zcGFjZSA8cHJlPiB0aGF0XG4gKiB3cmFwcyBsb25nIGxpbmVzIGJ5IGRlZmF1bHQg4oCUIGEgZGlhZ25vc3RpYyBkdW1wIHNob3VsZCBzdGF5IG9uXG4gKiBzY3JlZW4g4oCUIHdpdGggYHNjcm9sbGAgdG8gc3dpdGNoIHRvIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgaW5zdGVhZC5cbiAqXG4gKiBJdCBjYXJyaWVzIHRoZSBwb2xseSMxMjUgcGFzc3Rocm91Z2ggc3VyZmFjZSwgc28gYSBgZGF0YS1hY3Rpb25gXG4gKiBmb3IgYSB0YXAtdG8tc2VsZWN0LWFsbCBnZXN0dXJlIHJpZGVzIHN0cmFpZ2h0IG9udG8gdGhlIDxwcmU+XG4gKiAocG9sbHkjMTM1KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9PdXRwdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBPdXRwdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFNjcm9sbCBsb25nIHVuYnJlYWthYmxlIGxpbmVzIGhvcml6b250YWxseSBpbnN0ZWFkIG9mIHdyYXBwaW5nLiAqL1xuICBzY3JvbGw/OiBib29sZWFuO1xuICAvKiogTWFrZSB0aGUgYmxvY2sgZm9jdXNhYmxlIOKAlCBwYWlyIHdpdGggYSBgZGF0YS1hY3Rpb25gIHRhcCBnZXN0dXJlLiAqL1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBPdXRwdXQocHJvcHM6IE91dHB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBzY3JvbGwsIHRhYkluZGV4LCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wib3V0cHV0XCJdXTtcbiAgaWYgKHNjcm9sbCkgcGFydHMucHVzaChjbGFzc2VzW1wic2Nyb2xsXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPHByZVxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgdGFiSW5kZXg9e3RhYkluZGV4fVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1vdXRwdXRcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9wcmU+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2VsZWN0IOKAlCBkcm9wZG93biBvZiBvcHRpb25zIHdpdGggc2luZ2xlLSBvciBtdWx0aS1zZWxlY3Qgc2VtYW50aWNzLlxuICpcbiAqIENvbXBvc2VzIERyb3Bkb3duIGZvciB0aGUgbWVudSBhbmQgYSBuYXRpdmUgY2hlY2tib3ggaW4gZWFjaCBvcHRpb25cbiAqIHJvdyBmb3IgbXVsdGktc2VsZWN0LiBUaGUgYHNlbGVjdGVkYCBzdGF0ZSBpcyBhIFNpZ25hbDxTZXQ8VD4+O1xuICogc2luZ2xlLXNlbGVjdCByZXBsYWNlcyB0aGUgc2V0LCBtdWx0aS1zZWxlY3QgdG9nZ2xlcyBtZW1iZXJzaGlwLlxuICogTXVsdGktc2VsZWN0IG1vZGUgYWxzbyBzaG93cyBTZWxlY3QgQWxsIC8gQ2xlYXIgYWN0aW9uIGJ1dHRvbnMgYXRcbiAqIHRoZSB0b3Agb2YgdGhlIG1lbnUuIFNpbmdsZS1zZWxlY3QgbW9kZSBjYW4gb3B0IGludG8gYGNsZWFyYWJsZWAsXG4gKiB3aGljaCBwcmVwZW5kcyBhIHBsYWNlaG9sZGVyLWxhYmVsbGVkIG9wdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gKiBzZWxlY3Rpb24gdG8gZW1wdHkg4oCUIGZvciBcIkFueSDigKZcIiBmaWx0ZXIgc2VtYW50aWNzLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VDb21wdXRlZCwgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgU2VsZWN0VHJpZ2dlciB9IGZyb20gXCIuL2ludGVybmFsL3NlbGVjdC10cmlnZ2VyLnRzeFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU2VsZWN0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9uPFQgPSBzdHJpbmc+ID0geyB2YWx1ZTogVDsgbGFiZWw6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RQcm9wczxUID0gc3RyaW5nPiA9IHtcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uPFQ+W107XG4gIHNlbGVjdGVkOiBTaWduYWw8U2V0PFQ+PjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaW5nbGUtc2VsZWN0IG9ubHk6IHByZXBlbmQgYW4gb3B0aW9uIGxhYmVsbGVkIHdpdGggdGhlIHBsYWNlaG9sZGVyXG4gICAqIHRoYXQgcmV0dXJucyB0aGUgc2VsZWN0aW9uIHRvIGVtcHR5LiBXaXRob3V0IGl0LCBwaWNraW5nIGFuIG9wdGlvblxuICAgKiBpcyBhIHRyYXAg4oCUIG5vdGhpbmcgaW4gdGhlIGxpc3QgbGVhZHMgYmFjayB0byBcImFueVwiLiBVc2UgaXQgZm9yXG4gICAqIG9wdGlvbmFsIGZpbHRlcnMgKFwiQW55IHN0YWdlXCIpLCBub3QgcmVxdWlyZWQgZm9ybSBmaWVsZHNcbiAgICogKFwiU2VsZWN0IGEgdGVhbVwiKS4gSWdub3JlZCBpbiBtdWx0aS1zZWxlY3QsIHdoaWNoIGhhcyBDbGVhci5cbiAgICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBNVUxUSV9TRUxFQ1RfTEFCRUxfVEhSRVNIT0xEID0gMjtcblxuZnVuY3Rpb24gZm9ybWF0U2VsZWN0ZWQ8VD4oXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxUPltdLFxuICBzZWxlY3RlZDogU2V0PFQ+LFxuICBtdWx0aVNlbGVjdDogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgaWYgKHNlbGVjdGVkLnNpemUgPT09IDApIHJldHVybiBcIlwiO1xuICBpZiAobXVsdGlTZWxlY3QgJiYgc2VsZWN0ZWQuc2l6ZSA+IE1VTFRJX1NFTEVDVF9MQUJFTF9USFJFU0hPTEQpIHtcbiAgICByZXR1cm4gYCR7c2VsZWN0ZWQuc2l6ZX0gc2VsZWN0ZWRgO1xuICB9XG4gIGNvbnN0IGxhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChzZWxlY3RlZC5oYXMob3B0LnZhbHVlKSkgbGFiZWxzLnB1c2gob3B0LmxhYmVsKTtcbiAgfVxuICByZXR1cm4gbGFiZWxzLmpvaW4oXCIsIFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdDxUID0gc3RyaW5nPihwcm9wczogU2VsZWN0UHJvcHM8VD4pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBvcHRpb25zLFxuICAgIHNlbGVjdGVkLFxuICAgIGxhYmVsLFxuICAgIHBsYWNlaG9sZGVyID0gXCJTZWxlY3RcXHUyMDI2XCIsXG4gICAgbXVsdGlTZWxlY3QgPSBmYWxzZSxcbiAgICBjbGVhcmFibGUgPSBmYWxzZSxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIHdpZGUgPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBpc09wZW4gPSB1c2VTaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlQ29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSBmb3JtYXRTZWxlY3RlZChvcHRpb25zLCBzZWxlY3RlZC52YWx1ZSwgbXVsdGlTZWxlY3QpO1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IDAgPyB0ZXh0IDogcGxhY2Vob2xkZXI7XG4gIH0pO1xuXG4gIGNvbnN0IGlzRW1wdHkgPSB1c2VDb21wdXRlZCgoKSA9PiBzZWxlY3RlZC52YWx1ZS5zaXplID09PSAwKTtcblxuICBjb25zdCBoYW5kbGVPcHRpb25DbGljayA9ICh2YWx1ZTogVCk6IHZvaWQgPT4ge1xuICAgIGlmIChtdWx0aVNlbGVjdCkge1xuICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQoc2VsZWN0ZWQudmFsdWUpO1xuICAgICAgaWYgKG5leHQuaGFzKHZhbHVlKSkgbmV4dC5kZWxldGUodmFsdWUpO1xuICAgICAgZWxzZSBuZXh0LmFkZCh2YWx1ZSk7XG4gICAgICBzZWxlY3RlZC52YWx1ZSA9IG5leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkLnZhbHVlID0gbmV3IFNldChbdmFsdWVdKTtcbiAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KG9wdGlvbnMubWFwKChvKSA9PiBvLnZhbHVlKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXIgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gIH07XG5cbiAgLy8gVGhlIGNsZWFyIG9wdGlvbiBiZWhhdmVzIGxpa2UgYSBub3JtYWwgc2VsZWN0aW9uOiBwaWNrIGl0LCBtZW51IGNsb3Nlcy5cbiAgY29uc3QgaGFuZGxlQ2xlYXJPcHRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgdHJpZ2dlclBhcnRzID0gW2NsYXNzZXNbXCJ0cmlnZ2VyXCJdID8/IFwiXCJdO1xuICBpZiAoaXNFbXB0eS52YWx1ZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInBsYWNlaG9sZGVyXCJdID8/IFwiXCIpO1xuICBpZiAod2lkZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInRyaWdnZXJXaWRlXCJdID8/IFwiXCIpO1xuICBjb25zdCB0cmlnZ2VyQ2xhc3MgPSB0cmlnZ2VyUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICBjb25zdCB0cmlnZ2VyQ29udGVudCA9IDxTZWxlY3RUcmlnZ2VyIGxhYmVsPXtkaXNwbGF5VGV4dC52YWx1ZX0gLz47XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInNlbGVjdFwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD17aWR9IGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1zZWxlY3Q+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICAgIDxEcm9wZG93blxuICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgdHJpZ2dlcj17dHJpZ2dlckNvbnRlbnR9XG4gICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgdHJpZ2dlckRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgdHJpZ2dlclRpdGxlPXtkaXNwbGF5VGV4dC52YWx1ZX1cbiAgICAgICAgbXVsdGlTZWxlY3Q9e211bHRpU2VsZWN0fVxuICAgICAgPlxuICAgICAgICB7bXVsdGlTZWxlY3QgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfT5cbiAgICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZVNlbGVjdEFsbH0+XG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZUNsZWFyfT5cbiAgICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7IW11bHRpU2VsZWN0ICYmIGNsZWFyYWJsZSAmJiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzRW1wdHkudmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgIGNsYXNzPXtcbiAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZVxuICAgICAgICAgICAgICAgID8gYCR7Y2xhc3Nlc1tcIm9wdGlvblwiXX0gJHtjbGFzc2VzW1wib3B0aW9uU2VsZWN0ZWRcIl19YFxuICAgICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS1wb2xseS1zZWxlY3QtY2xlYXJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsZWFyT3B0aW9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPntwbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIHtvcHRpb25zLm1hcCgob3B0KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkLnZhbHVlLmhhcyhvcHQudmFsdWUpO1xuICAgICAgICAgIGNvbnN0IG9wdENsYXNzID0gaXNTZWxlY3RlZFxuICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICA6IGNsYXNzZXNbXCJvcHRpb25cIl07XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXtTdHJpbmcob3B0LnZhbHVlKX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPXtpc1NlbGVjdGVkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgICAgIGNsYXNzPXtvcHRDbGFzc31cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlT3B0aW9uQ2xpY2sob3B0LnZhbHVlKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge211bHRpU2VsZWN0ICYmIChcbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm9wdGlvbkNoZWNrXCJdfVxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNTZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgICAgICAgIHJlYWRPbmx5PXt0cnVlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxzcGFuPntvcHQubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L0Ryb3Bkb3duPlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNrZWxldG9uIOKAlCBzaGltbWVyaW5nIHBsYWNlaG9sZGVyIGZvciBsb2FkaW5nIHN0YXRlcy5cbiAqXG4gKiBUaHJlZSB2YXJpYW50czogdGV4dCAoZnVsbC13aWR0aCwgMWVtIHRhbGwpLCByZWN0IChmdWxsLXdpZHRoLCAxMDBweFxuICogdGFsbCksIGNpcmNsZSAoNDB4NDApLiBBIENTUyBncmFkaWVudCBhbmltYXRlcyBsZWZ0LXRvLXJpZ2h0IG92ZXJcbiAqIDEuNXMuIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYCB6ZXJvZXMgdGhlIGFuaW1hdGlvbiB2aWEgdGhlIHRva2VuXG4gKiBzeXN0ZW0uIENvbnN1bWVycyBzaXplIHZpYSB3aWR0aC9oZWlnaHQgcHJvcHMgKHB4IG51bWJlcnMgb3IgQ1NTXG4gKiBzdHJpbmdzKTsgZGVmYXVsdCBzaXppbmcgY29tZXMgZnJvbSB0aGUgdmFyaWFudC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NrZWxldG9uLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2tlbGV0b25WYXJpYW50ID0gXCJ0ZXh0XCIgfCBcInJlY3RcIiB8IFwiY2lyY2xlXCI7XG5cbmV4cG9ydCB0eXBlIFNrZWxldG9uUHJvcHMgPSB7XG4gIHZhcmlhbnQ/OiBTa2VsZXRvblZhcmlhbnQ7XG4gIHdpZHRoPzogc3RyaW5nIHwgbnVtYmVyO1xuICBoZWlnaHQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIHJlc29sdmVTaXplKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGAke3ZhbHVlfXB4YDtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogU2tlbGV0b25WYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiY2lyY2xlXCIpIHJldHVybiBjbGFzc2VzW1wiY2lyY2xlXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJyZWN0XCIpIHJldHVybiBjbGFzc2VzW1wicmVjdFwiXTtcbiAgcmV0dXJuIGNsYXNzZXNbXCJ0ZXh0XCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2tlbGV0b24ocHJvcHM6IFNrZWxldG9uUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwidGV4dFwiLCB3aWR0aCwgaGVpZ2h0LCBjbGFzc05hbWUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvbnN0IHcgPSByZXNvbHZlU2l6ZSh3aWR0aCk7XG4gIGNvbnN0IGggPSByZXNvbHZlU2l6ZShoZWlnaHQpO1xuICBpZiAodyAhPT0gdW5kZWZpbmVkKSBzdHlsZVtcIndpZHRoXCJdID0gdztcbiAgaWYgKGggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCJoZWlnaHRcIl0gPSBoO1xuXG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBiYXNlID0gY2xhc3Nlc1tcInNrZWxldG9uXCJdO1xuICBpZiAoYmFzZSkgcGFydHMucHVzaChiYXNlKTtcbiAgY29uc3QgdkNsYXNzID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodkNsYXNzKSBwYXJ0cy5wdXNoKHZDbGFzcyk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzcz17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXNrZWxldG9uPXt2YXJpYW50fVxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAvPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRhYnMg4oCUIGhvcml6b250YWwgbmF2IHdpdGggYWN0aXZlLXRhYiBhY2NlbnQuXG4gKlxuICogRWFjaCBidXR0b24gY2FycmllcyBgZGF0YS1hY3Rpb25gICh0aGUgY29uc3VtZXItcHJvdmlkZWQgYWN0aW9uIG5hbWUpXG4gKiBhbmQgYGRhdGEtYWN0aW9uLWlkPXt0YWIuaWR9YCBzbyB0aGUgZXZlbnQgZGVsZWdhdG9yIHJlc29sdmVzIHRoZVxuICogYWN0aXZhdGVkIHRhYi4gVGhlIGFjdGl2ZSB0YWIgZ2V0cyBgYXJpYS1jdXJyZW50PVwicGFnZVwiYCBhbmQgYVxuICogYm90dG9tLWJvcmRlciBhY2NlbnQuIFRoZSBuYXYgc2Nyb2xscyBob3Jpem9udGFsbHkgd2l0aCBhIGhpZGRlblxuICogc2Nyb2xsYmFyIGZvciBvdmVyZmxvdy4gSW50ZXJuYWwgYXJyYW5nZW1lbnQgdXNlcyA8TGF5b3V0PiwgcGFja2VkIHRvXG4gKiB0aGUgaW5saW5lIHN0YXJ0OiB0aGUgZ3JpZCBpcyAxMDAlIHdpZGUsIHNvIHdpdGhvdXQganVzdGlmeUNvbnRlbnQgdGhlXG4gKiBgYXV0b2AgdHJhY2tzIHN0cmV0Y2ggYW5kIGZvdXIgdGFicyBzcHJlYWQgYWNyb3NzIHRoZSB3aG9sZSBjb250YWluZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9UYWJzLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVGFiID0geyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyBkaXNhYmxlZD86IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgVGFic1Byb3BzID0ge1xuICB0YWJzOiBUYWJbXTtcbiAgYWN0aXZlVGFiOiBzdHJpbmc7XG4gIGFjdGlvbj86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gVGFicyhwcm9wczogVGFic1Byb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHRhYnMsIGFjdGl2ZVRhYiwgYWN0aW9uLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInRhYnNcIl0gPz8gXCJcIl07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8bmF2XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgYXJpYS1sYWJlbD17cHJvcHNbXCJhcmlhLWxhYmVsXCJdfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10YWJzXG4gICAgPlxuICAgICAgPExheW91dFxuICAgICAgICBjb2x1bW5zPXtgcmVwZWF0KCR7dGFicy5sZW5ndGh9LCBhdXRvKWB9XG4gICAgICAgIGdhcD1cIjBcIlxuICAgICAgICBhbGlnbkl0ZW1zPVwiZW5kXCJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJzdGFydFwiXG4gICAgICA+XG4gICAgICAgIHt0YWJzLm1hcCgodGFiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVUYWIgPT09IHRhYi5pZDtcbiAgICAgICAgICBjb25zdCB0YWJDbGFzcyA9IGlzQWN0aXZlID8gYCR7Y2xhc3Nlc1tcInRhYlwiXX0gJHtjbGFzc2VzW1wiYWN0aXZlXCJdfWAgOiBjbGFzc2VzW1widGFiXCJdO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9e3RhYkNsYXNzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGFiLmRpc2FibGVkfVxuICAgICAgICAgICAgICBhcmlhLWN1cnJlbnQ9e2lzQWN0aXZlID8gXCJwYWdlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGRhdGEtYWN0aW9uPXthY3Rpb259XG4gICAgICAgICAgICAgIGRhdGEtYWN0aW9uLWlkPXt0YWIuaWR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0YWIubGFiZWx9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvbmF2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRleHQg4oCUIHR5cG9ncmFwaGljIHByaW1pdGl2ZSBmb3Igc2Vjb25kYXJ5LCBzaXplZCwgYW5kIHN0YXR1cyBjb3B5LlxuICpcbiAqIFJlbmRlcnMgc3VidGl0bGVzLCBjYXB0aW9ucywgZmllbGQgbGFiZWxzLCBlbXB0eS1zdGF0ZSBjb3B5LCBhbmRcbiAqIGVycm9yL3dhcm5pbmcgbWVzc2FnZXMgd2l0aG91dCB0aGUgY29uc3VtZXIgcmVhY2hpbmcgZm9yIGEgYHN0eWxlYFxuICogYXR0cmlidXRlIG9yIGEgaGFuZC1yb2xsZWQgY2xhc3MuIGB0b25lYCBtYXBzIHRvIHRoZSBzZW1hbnRpY1xuICogYC0tcG9sbHktdGV4dC0qYCBhbmQgYC0tcG9sbHktc3RhdHVzLSpgIHRva2VuIGZhbWlsaWVzOyBgc2l6ZWAsXG4gKiBgd2VpZ2h0YCwgYGl0YWxpY2AsIGFuZCBgbGVhZGluZ2AgY292ZXIgdGhlIHJlbWFpbmluZyB0eXBvZ3JhcGhpY1xuICogYXhlcy4gYGFzYCBrZWVwcyB0aGUgZWxlbWVudCBwb2x5bW9ycGhpYyBzbyB0aGUgc2FtZSBwcmltaXRpdmUgYmFja3MgYVxuICogPHNwYW4+LCA8cD4sIDxsYWJlbD4sIG9yIDxmaWdjYXB0aW9uPi4gQSBuby1wcm9wIDxUZXh0PiBpcyBhbiBvcmRpbmFyeVxuICogPHNwYW4+IGF0IGJvZHkgc2l6ZSBhbmQgZGVmYXVsdCBjb2xvdXIuXG4gKlxuICogcG9sbHkjMTI1OiBhcmJpdHJhcnkgYGRhdGEtKmAgLyBgYXJpYS0qYCBhdHRyaWJ1dGVzIGFyZSBmb3J3YXJkZWQgdG9cbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50LCBzbyBhIFRleHQgdGhhdCBhbHNvIG5lZWRzIGEgdGVzdCBob29rIG9yIGFuXG4gKiBhMTF5IGF0dHJpYnV0ZSBzdGF5cyBhIHNpbmdsZSBlbGVtZW50LlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVGV4dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRUb25lID0gXCJkZWZhdWx0XCIgfCBcIm11dGVkXCIgfCBcImRhbmdlclwiIHwgXCJ3YXJuaW5nXCIgfCBcInN1Y2Nlc3NcIjtcbmV4cG9ydCB0eXBlIFRleHRTaXplID0gXCJ4c1wiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiIHwgXCJ4bFwiO1xuZXhwb3J0IHR5cGUgVGV4dFdlaWdodCA9IFwibm9ybWFsXCIgfCBcIm1lZGl1bVwiIHwgXCJib2xkXCI7XG5leHBvcnQgdHlwZSBUZXh0TGVhZGluZyA9IFwidGlnaHRcIiB8IFwiYmFzZVwiIHwgXCJsb29zZVwiO1xuXG5leHBvcnQgdHlwZSBUZXh0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKHNwYW4sIHAsIGxhYmVsLCBmaWdjYXB0aW9uLCDigKYpLiBEZWZhdWx0cyB0byAnc3BhbicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDb2xvdXIgcm9sZS4gJ211dGVkJyBkZS1lbXBoYXNpc2VzOyAnZGFuZ2VyJy8nd2FybmluZycvJ3N1Y2Nlc3MnXG4gICAqIHJlbmRlciBzdGF0dXMgY29weSBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW5zLiBEZWZhdWx0OiAnZGVmYXVsdCcuICovXG4gIHRvbmU/OiBUZXh0VG9uZTtcblxuICAvKiogVG9rZW4tYmFja2VkIGZvbnQgc2l6ZS4gRGVmYXVsdDogaW5oZXJpdCBmcm9tIGNvbnRleHQuICovXG4gIHNpemU/OiBUZXh0U2l6ZTtcblxuICAvKiogVG9rZW4tYmFja2VkIGZvbnQgd2VpZ2h0LiBEZWZhdWx0OiBpbmhlcml0IGZyb20gY29udGV4dC4gKi9cbiAgd2VpZ2h0PzogVGV4dFdlaWdodDtcblxuICAvKiogSXRhbGljIGVtcGhhc2lzIOKAlCBmb3IgaGludHMgYW5kIGFzaWRlcyDigJQgd2l0aG91dCBhbiBpbmxpbmUgc3R5bGUuICovXG4gIGl0YWxpYz86IGJvb2xlYW47XG5cbiAgLyoqIExpbmUtdGhyb3VnaCDigJQgZm9yIGNvbXBsZXRlZCB0b2RvIGl0ZW1zIGFuZCBzdXBlcnNlZGVkIGNvcHkuICovXG4gIHN0cmlrZXRocm91Z2g/OiBib29sZWFuO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgbGluZSBoZWlnaHQuICdsb29zZScgc3VpdHMgbXVsdGktbGluZSBib2R5IGNvcHkuICovXG4gIGxlYWRpbmc/OiBUZXh0TGVhZGluZztcblxuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogRm9yd2FyZGVkIHNvIDxUZXh0IGFzPVwibGFiZWxcIj4gY2FuIHBvaW50IGF0IGEgY29udHJvbC4gKi9cbiAgaHRtbEZvcj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXh0KHByb3BzOiBUZXh0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBhcyA9IFwic3BhblwiLFxuICAgIHRvbmUgPSBcImRlZmF1bHRcIixcbiAgICBzaXplLFxuICAgIHdlaWdodCxcbiAgICBpdGFsaWMsXG4gICAgc3RyaWtldGhyb3VnaCxcbiAgICBsZWFkaW5nLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJ0ZXh0XCJdXTtcbiAgaWYgKHRvbmUgIT09IFwiZGVmYXVsdFwiKSBwYXJ0cy5wdXNoKGNsYXNzZXNbdG9uZV0pO1xuICBpZiAoc2l6ZSkgcGFydHMucHVzaChjbGFzc2VzW3NpemVdKTtcbiAgaWYgKHdlaWdodCkgcGFydHMucHVzaChjbGFzc2VzW3dlaWdodF0pO1xuICBpZiAoaXRhbGljKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJpdGFsaWNcIl0pO1xuICBpZiAoc3RyaWtldGhyb3VnaCkgcGFydHMucHVzaChjbGFzc2VzW1wic3RyaWtldGhyb3VnaFwiXSk7XG4gIGlmIChsZWFkaW5nKSBwYXJ0cy5wdXNoKGNsYXNzZXNbbGVhZGluZ10pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzXG4gICAgICAvLyBiZWxvdyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzOiBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksXG4gICAgICBmb3I6IHByb3BzLmh0bWxGb3IsXG4gICAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS1wb2xseS10ZXh0XCI6IHRvbmUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNoYXJlZCBpbnB1dCBhMTF5IHdpcmluZy5cbiAqXG4gKiBSZXR1cm5zIGEgY29tbW9uIHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgVGV4dElucHV0LCBBY3Rpb25JbnB1dCwgYW5kXG4gKiBhbnkgY29uc3VtZXItYnVpbHQgaW5wdXQgY2FuIHNwbGF0IG9udG8gaXRzIG5hdGl2ZSBlbGVtZW50LiBLZWVwc1xuICogYXJpYS0qIGFuZCBkYXRhLXBvbGx5LSogbmFtZXMgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhbWlseS5cbiAqL1xuXG5leHBvcnQgdHlwZSBJbnB1dEExMXlQcm9wcyA9IHtcbiAgbmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgaW52YWxpZD86IGJvb2xlYW47XG4gIGRlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbnB1dEExMXkocHJvcHM6IElucHV0QTExeVByb3BzKSB7XG4gIGNvbnN0IGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktaW5wdXRcIjogdHJ1ZSxcbiAgICBcImFyaWEtaW52YWxpZFwiOiBwcm9wcy5pbnZhbGlkID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQsXG4gICAgXCJhcmlhLXJlcXVpcmVkXCI6IHByb3BzLnJlcXVpcmVkID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQsXG4gICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzLmRlc2NyaWJlZEJ5LFxuICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgaWQ6IHByb3BzLmlkLFxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gICAgcmVhZE9ubHk6IHByb3BzLnJlYWRPbmx5LFxuICB9O1xuICBpZiAocHJvcHMuaW52YWxpZCkgYXR0cnNbXCJkYXRhLXN0YXRlXCJdID0gXCJpbnZhbGlkXCI7XG4gIHJldHVybiBhdHRycztcbn1cbiIsCiAgICAiLyoqXG4gKiBUZXh0SW5wdXQg4oCUIHBhc3NpdmUsIHNpZ25hbC1mcmllbmRseSBuYXRpdmUgaW5wdXQgd3JhcHBlci5cbiAqXG4gKiBEZXNpZ25lZCB0byBsaXZlIGluc2lkZSA8QWN0aW9uRm9ybT4uIFBhc3MgYSBwbGFpbiBzdHJpbmcgZm9yXG4gKiB1bmNvbnRyb2xsZWQgbW9kZSAoRm9ybURhdGEtb24tc3VibWl0IHBpY2tzIHVwIHRoZSB2YWx1ZSkgb3IgYVxuICogU2lnbmFsPHN0cmluZz4gZm9yIGNvbnRyb2xsZWQgbW9kZS4gRWl0aGVyIHdheSwgYTExeSBhdHRyaWJ1dGVzIGFyZVxuICogd2lyZWQgYnkgdGhlIHNoYXJlZCBpbnB1dC1iYXNlLCB0aGUgc3RhYmxlIGBbZGF0YS1wb2xseS1pbnB1dF1gIGhvb2tcbiAqIGlzIGFwcGxpZWQgZm9yIHN0eWxpbmcsIGFuZCBgaW52YWxpZGAgZmxpcHMgYGFyaWEtaW52YWxpZGAgYW5kXG4gKiBgZGF0YS1zdGF0ZT1cImludmFsaWRcImAgZm9yIGNvbnN1bWVyIHNlbGVjdG9ycy5cbiAqXG4gKiBgaW5wdXRUeXBlYCBzZXRzIHRoZSBuYXRpdmUgc2luZ2xlLWxpbmUgaW5wdXQgdHlwZSDigJQgXCJ0ZXh0XCIgKGRlZmF1bHQpLFxuICogXCJlbWFpbFwiLCBcIm51bWJlclwiLCBcImRhdGVcIiwgYW5kIGZyaWVuZHMg4oCUIHNvIHRoZSBicm93c2VyIHN1cHBsaWVzIHRoZVxuICogcmlnaHQga2V5Ym9hcmQgYW5kIHZhbGlkYXRpb24uIGBtaW5gL2BtYXhgL2BzdGVwYCBhcHBseSB0byB0aGVcbiAqIHNpbmdsZS1saW5lIHZhcmlhbnQgKGUuZy4gbnVtZXJpYyBvciBkYXRlIGJvdW5kcykgYW5kIGtlZXAgZmlsdGVyXG4gKiBmaWVsZHMgZnJvbSBiZWluZyB1bnZhbGlkYXRlZCBmcmVlIHRleHQuXG4gKlxuICogYGVycm9yYCwgd2hlbiBzdXBwbGllZCwgcmVuZGVycyBhIG1lc3NhZ2UgYmVuZWF0aCB0aGUgZmllbGQsIHdyYXBzIHRoZVxuICogY29udHJvbCBpbiBhIGxhYmVsbGVkIGdyb3VwLCBhbmQgYXV0by13aXJlcyBgYXJpYS1kZXNjcmliZWRieWAgcGx1cyB0aGVcbiAqIGludmFsaWQgc3RhdGUg4oCUIG5vIG1hbnVhbCBpZCBqdWdnbGluZy4gV2l0aG91dCBgZXJyb3JgIHRoZSBwcmltaXRpdmVcbiAqIHN0YXlzIGEgYmFyZSBuYXRpdmUgZWxlbWVudCwgZXhhY3RseSBhcyBiZWZvcmUsIHNvIGNvbnN1bWVycyB0aGF0IG93blxuICogdGhlaXIgb3duIHN1cnJvdW5kaW5nIHN0cnVjdHVyZSBhcmUgdW5hZmZlY3RlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBidWlsZElucHV0QTExeSB9IGZyb20gXCIuL2ludGVybmFsL2lucHV0LWJhc2UudHNcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVmFyaWFudCA9IFwic2luZ2xlXCIgfCBcIm11bHRpXCI7XG5cbi8qKiBOYXRpdmUgc2luZ2xlLWxpbmUgaW5wdXQgdHlwZXMgcG9sbHkncyBmaWx0ZXIvZm9ybSBmaWVsZHMgdXNlLiAqL1xuZXhwb3J0IHR5cGUgVGV4dElucHV0VHlwZSA9XG4gIHwgXCJ0ZXh0XCJcbiAgfCBcImVtYWlsXCJcbiAgfCBcInVybFwiXG4gIHwgXCJ0ZWxcIlxuICB8IFwic2VhcmNoXCJcbiAgfCBcInBhc3N3b3JkXCJcbiAgfCBcIm51bWJlclwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGV0aW1lLWxvY2FsXCJcbiAgfCBcInRpbWVcIlxuICB8IFwibW9udGhcIlxuICB8IFwid2Vla1wiO1xuXG5leHBvcnQgdHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogU2lnbmFsPHN0cmluZz4gZm9yIGNvbnRyb2xsZWQsIHN0cmluZyBmb3IgdW5jb250cm9sbGVkIGRlZmF1bHQuICovXG4gIHZhbHVlPzogU2lnbmFsPHN0cmluZz4gfCBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBWYXJpYW50O1xuICAvKiogTmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50LiBEZWZhdWx0OiBcInRleHRcIi4gKi9cbiAgaW5wdXRUeXBlPzogVGV4dElucHV0VHlwZTtcbiAgLyoqIExvd2VyIGJvdW5kIGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBtaW4/OiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBVcHBlciBib3VuZCBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQgKG51bWJlci9kYXRlIHR5cGVzKS4gKi9cbiAgbWF4PzogbnVtYmVyIHwgc3RyaW5nO1xuICAvKiogU3RlcCBncmFudWxhcml0eSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQgKG51bWJlci9kYXRlIHR5cGVzKS4gKi9cbiAgc3RlcD86IG51bWJlciB8IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBOYXRpdmUgaG92ZXIgdG9vbHRpcCDigJQgYSBoaW50IGJleW9uZCB0aGUgcGxhY2Vob2xkZXIvbGFiZWwuICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICBpbnZhbGlkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFZhbGlkYXRpb24gbWVzc2FnZSByZW5kZXJlZCBiZW5lYXRoIHRoZSBmaWVsZC4gV2hlbiBwcmVzZW50IHRoZVxuICAgKiBwcmltaXRpdmUgd3JhcHMgdGhlIGNvbnRyb2wsIGxpbmtzIHRoZSBtZXNzYWdlIHZpYSBhcmlhLWRlc2NyaWJlZGJ5LFxuICAgKiBhbmQgbWFya3MgdGhlIGZpZWxkIGludmFsaWQuIE9taXQgaXQgdG8ga2VlcCBhIGJhcmUgbmF0aXZlIGVsZW1lbnQuXG4gICAqL1xuICBlcnJvcj86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgaWQ/OiBzdHJpbmc7XG4gIGRlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICByb3dzPzogbnVtYmVyO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBpc1NpZ25hbDxUPih2OiBTaWduYWw8VD4gfCBUIHwgdW5kZWZpbmVkKTogdiBpcyBTaWduYWw8VD4ge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiBcInZhbHVlXCIgaW4gdiAmJiBcInBlZWtcIiBpbiAodiBhcyB1bmtub3duIGFzIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXh0SW5wdXQocHJvcHM6IFRleHRJbnB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB2YXJpYW50ID0gcHJvcHMudmFyaWFudCA/PyBcInNpbmdsZVwiO1xuICAvLyBBbHdheXMgY2FsbGVkIHNvIGhvb2sgb3JkZXIgaXMgc3RhYmxlOyBvbmx5IHVzZWQgd2hlbiBgZXJyb3JgIGlzIHNldC5cbiAgY29uc3QgZXJyb3JJZCA9IHVzZUlkKCk7XG4gIGNvbnN0IGhhc0Vycm9yID0gcHJvcHMuZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5lcnJvciAhPT0gXCJcIjtcblxuICBjb25zdCBkZXNjcmliZWRCeSA9XG4gICAgW3Byb3BzLmRlc2NyaWJlZEJ5LCBoYXNFcnJvciA/IGVycm9ySWQgOiB1bmRlZmluZWRdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSB8fCB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYTExeSA9IGJ1aWxkSW5wdXRBMTF5KHtcbiAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgIGlkOiBwcm9wcy5pZCxcbiAgICByZXF1aXJlZDogcHJvcHMucmVxdWlyZWQsXG4gICAgLy8gQW4gZXJyb3IgbWVzc2FnZSBpbXBsaWVzIHRoZSBmaWVsZCBpcyBpbnZhbGlkLlxuICAgIGludmFsaWQ6IHByb3BzLmludmFsaWQgfHwgaGFzRXJyb3IsXG4gICAgZGVzY3JpYmVkQnksXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICByZWFkT25seTogcHJvcHMucmVhZE9ubHksXG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRyb2xsZWQgPSBpc1NpZ25hbChwcm9wcy52YWx1ZSk7XG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gY29udHJvbGxlZCA/IChwcm9wcy52YWx1ZSBhcyB1bmtub3duIGFzIFNpZ25hbDxzdHJpbmc+KS52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gY29udHJvbGxlZFxuICAgID8gdW5kZWZpbmVkXG4gICAgOiAoKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyBcIlwiKTtcblxuICBjb25zdCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wiaW5wdXRcIl19ICR7cHJvcHMuY2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wiaW5wdXRcIl07XG5cbiAgY29uc3Qgb25JbnB1dCA9IChlOiBKU1guVGFyZ2V0ZWRFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBpZiAoY29udHJvbGxlZCkge1xuICAgICAgKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgU2lnbmFsPHN0cmluZz4pLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjb250cm9sID1cbiAgICB2YXJpYW50ID09PSBcIm11bHRpXCIgPyAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgey4uLihhMTF5IGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KX1cbiAgICAgICAgY2xhc3M9e2NsYXNzTmFtZX1cbiAgICAgICAgdGl0bGU9e3Byb3BzLnRpdGxlfVxuICAgICAgICBkYXRhLXBvbGx5LWlucHV0LXZhcmlhbnQ9XCJtdWx0aVwiXG4gICAgICAgIHJvd3M9e3Byb3BzLnJvd3N9XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9BdXRvZm9jdXM6IG9wdC1pbiBwcm9wIOKAlCBjYWxsZXIgcmVxdWVzdHMgYXV0b2ZvY3VzIGV4cGxpY2l0bHkgKGUuZy4gZm9ybSBvcGVucyB0byB0aGlzIGZpZWxkKS5cbiAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XG4gICAgICAgIHZhbHVlPXtzdHJpbmdWYWx1ZX1cbiAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICAgIG9uSW5wdXQ9e29uSW5wdXR9XG4gICAgICAvPlxuICAgICkgOiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgey4uLihhMTF5IGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+KX1cbiAgICAgICAgdHlwZT17cHJvcHMuaW5wdXRUeXBlID8/IFwidGV4dFwifVxuICAgICAgICBjbGFzcz17Y2xhc3NOYW1lfVxuICAgICAgICB0aXRsZT17cHJvcHMudGl0bGV9XG4gICAgICAgIGRhdGEtcG9sbHktaW5wdXQtdmFyaWFudD1cInNpbmdsZVwiXG4gICAgICAgIG1pbj17cHJvcHMubWlufVxuICAgICAgICBtYXg9e3Byb3BzLm1heH1cbiAgICAgICAgc3RlcD17cHJvcHMuc3RlcH1cbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub0F1dG9mb2N1czogb3B0LWluIHByb3Ag4oCUIGNhbGxlciByZXF1ZXN0cyBhdXRvZm9jdXMgZXhwbGljaXRseSAoZS5nLiBmb3JtIG9wZW5zIHRvIHRoaXMgZmllbGQpLlxuICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cbiAgICAgICAgdmFsdWU9e3N0cmluZ1ZhbHVlfVxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgIC8+XG4gICAgKTtcblxuICBpZiAoIWhhc0Vycm9yKSByZXR1cm4gY29udHJvbDtcblxuICByZXR1cm4gKFxuICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCIgY2xhc3NOYW1lPXtjbGFzc2VzW1wiZmllbGRcIl19IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1maWVsZD5cbiAgICAgIHtjb250cm9sfVxuICAgICAgPHNwYW4gaWQ9e2Vycm9ySWR9IHJvbGU9XCJhbGVydFwiIGNsYXNzPXtjbGFzc2VzW1wiZXJyb3JcIl19PlxuICAgICAgICB7cHJvcHMuZXJyb3J9XG4gICAgICA8L3NwYW4+XG4gICAgPC9MYXlvdXQ+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVG9hc3Qg4oCUIGNvbnN1bWVyLWZhY2luZyBzdXJmYWNlIGZvciB0aGUgZ2xvYmFsIGVycm9yU3RhdGUuXG4gKlxuICogUmVuZGVycyBldmVyeSBlbnRyeSBvZiB0aGUgYGVycm9yU3RhdGVgIHNpZ25hbCBpbnRvIGEgdmlld3BvcnQgbW91bnRlZFxuICogaW5zaWRlIE92ZXJsYXlSb290LiBgYXJpYS1saXZlYCBpcyBwb2xpdGUgZm9yIGluZm8vd2FybmluZyBhbmRcbiAqIGFzc2VydGl2ZSBmb3IgZXJyb3Igc2V2ZXJpdHkuIEVhY2ggaXRlbSBhdXRvLWRpc21pc3NlcyBhZnRlclxuICogYGF1dG9EaXNtaXNzTXNgIHVubGVzcyB0aGUgdXNlciBob3ZlcnMgdGhlIHZpZXdwb3J0LiBDbGlja2luZyBhXG4gKiB0b2FzdCBvciBpdHMgY2xvc2UgYnV0dG9uIHJlbW92ZXMgdGhhdCBzaW5nbGUgZW50cnkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGNsZWFyRXJyb3IsIHR5cGUgRXJyb3JFbnRyeSwgZXJyb3JTdGF0ZSB9IGZyb20gXCIuLi9hY3Rpb25zL2Vycm9yLnRzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUb2FzdFZpZXdwb3J0UHJvcHMgPSB7XG4gIGF1dG9EaXNtaXNzTXM/OiBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZXdwb3J0KHByb3BzOiBUb2FzdFZpZXdwb3J0UHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBhdXRvRGlzbWlzc01zID0gcHJvcHMuYXV0b0Rpc21pc3NNcyA/PyA1MDAwO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcGF1c2VkLCBzZXRQYXVzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBlbnRyaWVzID0gZXJyb3JTdGF0ZS52YWx1ZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBvcnRhbE5vZGUoZ2V0T3ZlcmxheVJvb3ROb2RlKCkpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGF1c2VkIHx8IGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgaGVhZCA9IGVudHJpZXNbMF07XG4gICAgaWYgKCFoZWFkKSByZXR1cm47XG4gICAgY29uc3QgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhckVycm9yKGhlYWQuaWQpO1xuICAgIH0sIGF1dG9EaXNtaXNzTXMpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfSwgW3BhdXNlZCwgZW50cmllcywgYXV0b0Rpc21pc3NNc10pO1xuXG4gIGlmICghcG9ydGFsTm9kZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY29udGVudCA9IChcbiAgICA8TGF5b3V0XG4gICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc2VzW1widmlld3BvcnRcIl19ICR7cHJvcHMuY2xhc3NOYW1lID8/IFwiXCJ9YC50cmltKCl9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRvYXN0LXZpZXdwb3J0XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldFBhdXNlZCh0cnVlKX1cbiAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0UGF1c2VkKGZhbHNlKX1cbiAgICA+XG4gICAgICB7ZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoXG4gICAgICAgIDxUb2FzdEl0ZW0ga2V5PXtlbnRyeS5pZH0gZW50cnk9e2VudHJ5fSAvPlxuICAgICAgKSl9XG4gICAgPC9MYXlvdXQ+XG4gICk7XG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY29udGVudCwgcG9ydGFsTm9kZSk7XG59XG5cbmZ1bmN0aW9uIFRvYXN0SXRlbSh7IGVudHJ5IH06IHsgZW50cnk6IEVycm9yRW50cnkgfSk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgbGl2ZW5lc3MgPSBlbnRyeS5zZXZlcml0eSA9PT0gXCJlcnJvclwiID8gXCJhc3NlcnRpdmVcIiA6IFwicG9saXRlXCI7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKSB2YXIoLS1wb2xseS1zcGFjZS1sZylcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzW1wiaXRlbVwiXX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktdG9hc3QtaXRlbVxuICAgICAgZGF0YS1zZXZlcml0eT17ZW50cnkuc2V2ZXJpdHl9XG4gICAgICByb2xlPXtlbnRyeS5zZXZlcml0eSA9PT0gXCJlcnJvclwiID8gXCJhbGVydFwiIDogXCJzdGF0dXNcIn1cbiAgICAgIGFyaWEtbGl2ZT17bGl2ZW5lc3N9XG4gICAgPlxuICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIGF1dG9cIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibWVzc2FnZVwiXX0+e2VudHJ5Lm1lc3NhZ2V9PC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICAgIGRhdGEtcG9sbHktdG9hc3QtY2xvc2VcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbGVhckVycm9yKGVudHJ5LmlkKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRGlzbWlzc1wiXG4gICAgICAgID5cbiAgICAgICAgICDDl1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IFRvYXN0ID0geyBWaWV3cG9ydCB9O1xuIiwKICAgICIvKipcbiAqIFRvZ2dsZSDigJQgc3dpdGNoLXJvbGUgY2hlY2tib3guXG4gKlxuICogQSB2aXN1YWxseS1oaWRkZW4gPGlucHV0IHJvbGU9XCJzd2l0Y2hcIj4gcGFpcmVkIHdpdGggYSBzdHlsZWQgdHJhY2tcbiAqIGFuZCB0aHVtYiBpbnNpZGUgYSA8bGFiZWw+LiBQYXNzaXZlOiB0aGUgY2FsbGVyIGRyaXZlcyBgY2hlY2tlZGAgYW5kXG4gKiBoYW5kbGVzIHN0YXRlIGNoYW5nZXMgdmlhIHRoZSBhY3Rpb24gcmVnaXN0cnkgKHdyYXAgdGhlIFRvZ2dsZSBpbiBhXG4gKiA8bGFiZWwgZGF0YS1hY3Rpb249XCIuLi5cIj4gb3IgYmluZCBhIHBhcmVudCBmb3JtJ3Mgc3VibWl0KS4gYTExeVxuICogYXR0cmlidXRlcyBjb21lIGZyb20gdGhlIG5hdGl2ZSBpbnB1dDsgdGhlIGxhYmVsIHdyYXBzIHNvIGNsaWNrc1xuICogYW55d2hlcmUgaW4gdGhlIGNvbnRyb2wgdG9nZ2xlIHRoZSBpbnB1dC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RvZ2dsZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZVByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUb2dnbGUocHJvcHM6IFRvZ2dsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQgPSBmYWxzZSwgZGlzYWJsZWQgPSBmYWxzZSwgbGFiZWwsIG5hbWUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1widG9nZ2xlXCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8TGF5b3V0XG4gICAgICBhcz1cImxhYmVsXCJcbiAgICAgIGlubGluZVxuICAgICAgY29sdW1ucz1cImF1dG8gYXV0b1wiXG4gICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBjbGFzc05hbWU9e3BhcnRzLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10b2dnbGVcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICByb2xlPVwic3dpdGNoXCJcbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgYXJpYS1jaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImlucHV0XCJdfVxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9e2NoZWNrZWQgPyBgJHtjbGFzc2VzW1widHJhY2tcIl19ICR7Y2xhc3Nlc1tcInRyYWNrQ2hlY2tlZFwiXX1gIDogY2xhc3Nlc1tcInRyYWNrXCJdfT5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz17Y2hlY2tlZCA/IGAke2NsYXNzZXNbXCJ0aHVtYlwiXX0gJHtjbGFzc2VzW1widGh1bWJDaGVja2VkXCJdfWAgOiBjbGFzc2VzW1widGh1bWJcIl19XG4gICAgICAgIC8+XG4gICAgICA8L3NwYW4+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLy8gU3RhdGUgcHJpbWl0aXZlcyB3aXRoIG9wdGlvbmFsIHN5bmMgYW5kIHBlcnNpc3RlbmNlXG5cbmltcG9ydCB7IGVmZmVjdCwgdHlwZSBTaWduYWwsIHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZUJ1cyB9IGZyb20gXCIuL21lc3NhZ2UtYnVzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdG9yYWdlQWRhcHRlciwgdHlwZSBTdG9yYWdlQWRhcHRlciB9IGZyb20gXCIuL3N0b3JhZ2UtYWRhcHRlclwiO1xuaW1wb3J0IHsgY3JlYXRlU3luY0FkYXB0ZXIsIHR5cGUgU3luY0FkYXB0ZXIgfSBmcm9tIFwiLi9zeW5jLWFkYXB0ZXJcIjtcblxuLyoqXG4gKiBTaWduYWwgZXh0ZW5kZWQgd2l0aCAubG9hZGVkIHByb21pc2UgZm9yIGh5ZHJhdGlvbiBjb250cm9sXG4gKi9cbnR5cGUgU2lnbmFsV2l0aExvYWRlZDxUPiA9IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH07XG5cbi8qKlxuICogU2lnbmFsIGV4dGVuZGVkIHdpdGggLmxvYWRlZCBhbmQgLnZlcmlmeSBwcm9wZXJ0aWVzIGZvciB2ZXJpZmljYXRpb24gdHJhY2tpbmdcbiAqL1xudHlwZSBTaWduYWxXaXRoVmVyaWZ5PFQ+ID0gU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD47IHZlcmlmeTogVCB9O1xuXG50eXBlIFN0YXRlRW50cnk8VD4gPSB7XG4gIHNpZ25hbDogU2lnbmFsPFQ+O1xuICBjbG9jazogbnVtYmVyOyAvLyBMYW1wb3J0IGNsb2NrIGZvciBjYXVzYWwgb3JkZXJpbmdcbiAgbG9hZGVkOiBQcm9taXNlPHZvaWQ+O1xuICB1cGRhdGluZzogYm9vbGVhbjtcbn07XG5cbnR5cGUgU3RhdGVPcHRpb25zPFQgPSB1bmtub3duPiA9IHtcbiAgLy8gTGVnYWN5IE1lc3NhZ2VCdXMgc3VwcG9ydCAoZGVwcmVjYXRlZCwgd2lsbCBiZSByZW1vdmVkIGluIHYyLjApXG4gIGJ1cz86IE1lc3NhZ2VCdXM7XG5cbiAgLy8gTmV3IGFkYXB0ZXIgc3lzdGVtIChyZWNvbW1lbmRlZClcbiAgc3RvcmFnZT86IFN0b3JhZ2VBZGFwdGVyOyAvLyBDdXN0b20gc3RvcmFnZSBhZGFwdGVyXG4gIHN5bmM/OiBTeW5jQWRhcHRlcjsgLy8gQ3VzdG9tIHN5bmMgYWRhcHRlclxuXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgZGVib3VuY2VNcz86IG51bWJlcjsgLy8gRGVib3VuY2Ugc3RvcmFnZSB3cml0ZXNcbiAgdmFsaWRhdG9yPzogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUOyAvLyBSdW50aW1lIHR5cGUgdmFsaWRhdGlvblxuICB2ZXJpZnk/OiBib29sZWFuOyAvLyBFbmFibGUgdmVyaWZpY2F0aW9uIHRyYWNraW5nIChjcmVhdGVzIHBsYWluIG9iamVjdCBtaXJyb3IpXG59O1xuXG5jb25zdCBzdGF0ZVJlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIFN0YXRlRW50cnk8dW5rbm93bj4+KCk7XG5cbi8qKlxuICogU2hhcmVkIHN0YXRlOiBzeW5jZWQgYWNyb3NzIGFsbCBjb250ZXh0cyBBTkQgcGVyc2lzdGVkIHRvIHN0b3JhZ2VcbiAqXG4gKiBVc2VzIExhbXBvcnQgY2xvY2sgZm9yIGNvbmZsaWN0IHJlc29sdXRpb24uIFN0YXRlIGlzIGF1dG9tYXRpY2FsbHk6XG4gKiAtIExvYWRlZCBmcm9tIGNocm9tZS5zdG9yYWdlIG9uIGluaXRpYWxpemF0aW9uXG4gKiAtIFN5bmNlZCB0byBvdGhlciBjb250ZXh0cyB2aWEgYnJvYWRjYXN0IG1lc3NhZ2VzXG4gKiAtIFBlcnNpc3RlZCB0byBjaHJvbWUuc3RvcmFnZSBvbiBldmVyeSBjaGFuZ2VcbiAqXG4gKiBBdmFpbGFibGUgaW46IGJhY2tncm91bmQsIHBvcHVwLCBvcHRpb25zLCBkZXZ0b29scywgY29udGVudCBzY3JpcHRzXG4gKiDimqDvuI8gTk9UIGF2YWlsYWJsZSBpbiBwYWdlIHNjcmlwdHMgKHVzZSBjb250ZW50IHNjcmlwdCBzdGF0ZSBpbnN0ZWFkKVxuICpcbiAqIEBwYXJhbSBrZXkgLSBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzdGF0ZSAoZS5nLiwgXCJhcHAtc2V0dGluZ3NcIilcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlIGlmIG5vdGhpbmcgaXMgaW4gc3RvcmFnZVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIChidXMsIGRlYm91bmNlTXMpXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgdGhhdCBzdGF5cyBpbiBzeW5jIGFjcm9zcyBhbGwgY29udGV4dHNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRGVmaW5lIG9uY2UsIHVzZSBldmVyeXdoZXJlXG4gKiBjb25zdCBzZXR0aW5ncyA9ICRzaGFyZWRTdGF0ZShcInNldHRpbmdzXCIsIHsgdGhlbWU6IFwiZGFya1wiIH0pXG4gKlxuICogLy8gQ2hhbmdlcyBhdXRvbWF0aWNhbGx5IHN5bmNcbiAqIHNldHRpbmdzLnZhbHVlID0geyB0aGVtZTogXCJsaWdodFwiIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHNoYXJlZFN0YXRlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgaW5pdGlhbFZhbHVlOiBULFxuICBvcHRpb25zOiBTdGF0ZU9wdGlvbnM8VD4gPSB7fVxuKTogU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD47IHZlcmlmeT86IFQgfSB7XG4gIGNvbnN0IHNpZyA9IGNyZWF0ZVN0YXRlKGtleSwgaW5pdGlhbFZhbHVlLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmFibGVTeW5jOiB0cnVlLFxuICAgIGVuYWJsZVBlcnNpc3Q6IHRydWUsXG4gIH0pO1xuXG4gIC8vIEV4cG9zZSBsb2FkZWQgcHJvbWlzZSBmb3IgYXdhaXRpbmcgaHlkcmF0aW9uXG4gIGNvbnN0IGVudHJ5ID0gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgaWYgKGVudHJ5KSB7XG4gICAgKHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhMb2FkZWQ8VD4pLmxvYWRlZCA9IGVudHJ5LmxvYWRlZDtcbiAgfVxuXG4gIHJldHVybiBzaWcgYXMgdW5rbm93biBhcyBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9O1xufVxuXG4vKipcbiAqIFN5bmNlZCBzdGF0ZTogc3luY2VkIGFjcm9zcyBhbGwgY29udGV4dHMgYnV0IE5PVCBwZXJzaXN0ZWRcbiAqXG4gKiBTdGF0ZSBpcyBicm9hZGNhc3QgdG8gYWxsIGNvbnRleHRzIGluIHJlYWwtdGltZSBidXQgcmVzZXRzIG9uIGV4dGVuc2lvbiByZWxvYWQuXG4gKlxuICogQXZhaWxhYmxlIGluOiBiYWNrZ3JvdW5kLCBwb3B1cCwgb3B0aW9ucywgZGV2dG9vbHMsIGNvbnRlbnQgc2NyaXB0c1xuICog4pqg77iPIE5PVCBhdmFpbGFibGUgaW4gcGFnZSBzY3JpcHRzXG4gKlxuICogQHBhcmFtIGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHN0YXRlXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgc3luY2VkIGFjcm9zcyBjb250ZXh0cyAoYnV0IG5vdCBwZXJzaXN0ZWQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFRlbXBvcmFyeSBzaGFyZWQgc3RhdGVcbiAqIGNvbnN0IGFjdGl2ZVRhYklkID0gJHN5bmNlZFN0YXRlKFwiYWN0aXZlLXRhYlwiLCBudWxsKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc3luY2VkU3RhdGU8VD4oXG4gIGtleTogc3RyaW5nLFxuICBpbml0aWFsVmFsdWU6IFQsXG4gIG9wdGlvbnM6IFN0YXRlT3B0aW9uczxUPiA9IHt9XG4pOiBTaWduYWw8VD4ge1xuICByZXR1cm4gY3JlYXRlU3RhdGUoa2V5LCBpbml0aWFsVmFsdWUsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuYWJsZVN5bmM6IHRydWUsXG4gICAgZW5hYmxlUGVyc2lzdDogZmFsc2UsXG4gIH0pO1xufVxuXG4vKipcbiAqIFBlcnNpc3RlZCBzdGF0ZTogcGVyc2lzdGVkIHRvIHN0b3JhZ2UgYnV0IE5PVCBzeW5jZWQgYWNyb3NzIGNvbnRleHRzXG4gKlxuICogRWFjaCBjb250ZXh0IGhhcyBpdHMgb3duIGNvcHkgb2YgdGhlIHN0YXRlLCBwZXJzaXN0ZWQgaW5kZXBlbmRlbnRseS5cbiAqXG4gKiBBdmFpbGFibGUgaW46IGJhY2tncm91bmQsIHBvcHVwLCBvcHRpb25zLCBkZXZ0b29scywgY29udGVudCBzY3JpcHRzXG4gKiDimqDvuI8gTk9UIGF2YWlsYWJsZSBpbiBwYWdlIHNjcmlwdHNcbiAqXG4gKiBAcGFyYW0ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgKHVzZSBwcmVmaXggbGlrZSBcInBvcHVwOnN0YXRlXCIgdG8gYXZvaWQgY29sbGlzaW9ucylcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCBwZXJzaXN0ZWQgdG8gc3RvcmFnZSAoYnV0IG5vdCBzeW5jZWQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEVhY2ggY29udGV4dCBoYXMgaXRzIG93biBwZXJzaXN0ZWQgc3RhdGVcbiAqIGNvbnN0IHBvcHVwU3RhdGUgPSAkcGVyc2lzdGVkU3RhdGUoXCJwb3B1cDpsYXN0LXBhbmVsXCIsIFwiaG9tZVwiKVxuICogY29uc3QgZGV2dG9vbHNTdGF0ZSA9ICRwZXJzaXN0ZWRTdGF0ZShcImRldnRvb2xzOmV4cGFuZGVkXCIsIHRydWUpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRwZXJzaXN0ZWRTdGF0ZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIGluaXRpYWxWYWx1ZTogVCxcbiAgb3B0aW9uczogU3RhdGVPcHRpb25zPFQ+ID0ge31cbik6IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH0ge1xuICBjb25zdCBzaWcgPSBjcmVhdGVTdGF0ZShrZXksIGluaXRpYWxWYWx1ZSwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5hYmxlU3luYzogZmFsc2UsXG4gICAgZW5hYmxlUGVyc2lzdDogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gRXhwb3NlIGxvYWRlZCBwcm9taXNlIGZvciBhd2FpdGluZyBoeWRyYXRpb25cbiAgY29uc3QgZW50cnkgPSBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICBpZiAoZW50cnkpIHtcbiAgICAoc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aExvYWRlZDxUPikubG9hZGVkID0gZW50cnkubG9hZGVkO1xuICB9XG5cbiAgcmV0dXJuIHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH07XG59XG5cbi8qKlxuICogTG9jYWwgc3RhdGU6IG5vdCBzeW5jZWQsIG5vdCBwZXJzaXN0ZWQgKGxpa2UgcmVndWxhciBQcmVhY3Qgc2lnbmFsKVxuICpcbiAqIFNpbXBsZSByZWFjdGl2ZSBzdGF0ZSB0aGF0IGxpdmVzIG9ubHkgaW4gdGhlIGN1cnJlbnQgY29udGV4dC5cbiAqIFJlc2V0cyBvbiByZWxvYWQgb3IgY29udGV4dCByZXN0YXJ0LlxuICpcbiAqIEF2YWlsYWJsZSBpbjogYWxsIGNvbnRleHRzIChpbmNsdWRpbmcgcGFnZSBzY3JpcHRzKVxuICpcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgKGxvY2FsIG9ubHkpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIExvY2FsIFVJIHN0YXRlXG4gKiBjb25zdCBpc0xvYWRpbmcgPSAkc3RhdGUoZmFsc2UpXG4gKiBjb25zdCBlcnJvciA9ICRzdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc3RhdGU8VD4oaW5pdGlhbFZhbHVlOiBUKTogU2lnbmFsPFQ+IHtcbiAgcmV0dXJuIHNpZ25hbChpbml0aWFsVmFsdWUpO1xufVxuXG4vKiogU2VydmVyLXNpZGUgYXV0aG9yaXRhdGl2ZSBzdGF0ZSwga2V5ZWQgZm9yIHN0YWJsZSBpZGVudGl0eSBhY3Jvc3MgdGhlXG4gKiAgcHJvY2Vzcy4gVW5saWtlIHRoZSBicm93c2VyIHByaW1pdGl2ZXMgaXQgZG9lcyBOT1Qgc3luYyBhY3Jvc3MgY29udGV4dHMgb3JcbiAqICBwZXJzaXN0IHRvIGNocm9tZS5zdG9yYWdlIOKAlCB0aGUgc2VydmVyIGhvbGRzIHRoZSBjYW5vbmljYWwgcmVwbGljYSBhbmQgaXNcbiAqICB0aGUgYWx3YXlzLW9uIHBlZXI7IGNvbm5lY3RlZCBjbGllbnRzIHJlY2VpdmUgZGVyaXZlZCB1cGRhdGVzIHRocm91Z2ggdGhlXG4gKiAgRWx5c2lhIGBwb2xseSgpYCBwbHVnaW4ncyBlZmZlY3QvYnJvYWRjYXN0IGxheWVyIHJhdGhlciB0aGFuIHRocm91Z2ggdGhpc1xuICogIHNpZ25hbCBkaXJlY3RseS4gVXNlZCBpbnNpZGUgYHBvbGx5KHsgc3RhdGU6IHsgc2VydmVyOiB7IC4uLiB9IH0gfSlgIGFuZFxuICogIHJlYWQgb24gdGhlIHJlcXVlc3QgY29udGV4dCBhcyBgcG9sbHlTdGF0ZS5zZXJ2ZXIuPGtleT4udmFsdWVgLiAqL1xuY29uc3Qgc2VydmVyU3RhdGVSZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+KCk7XG5cbi8qKlxuICogUmVhY3RpdmUgc2VydmVyLW9ubHkgc3RhdGUuIFRoZSBmaXJzdCBjYWxsIGZvciBhIGBrZXlgIGNyZWF0ZXMgdGhlIHNpZ25hbDtcbiAqIGxhdGVyIGNhbGxzIHdpdGggdGhlIHNhbWUgYGtleWAgcmV0dXJuIHRoYXQgc2FtZSBzaWduYWwsIHNvIGEgbW9kdWxlIHRoYXRcbiAqIGRlY2xhcmVzIGl0cyBzZXJ2ZXIgc3RhdGUgb25jZSBnZXRzIGEgc3RhYmxlIHJlZmVyZW5jZSBldmVyeXdoZXJlIGl0IGlzXG4gKiByZWFkLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBTdGFibGUgaWRlbnRpZmllciBmb3IgdGhpcyBzZXJ2ZXIgc3RhdGUgKGUuZy4gXCJkYlwiKVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIFZhbHVlIGhlbGQgdW50aWwgdGhlIHNlcnZlciBtdXRhdGVzIGl0XG4gKiBAcmV0dXJucyBBIHJlYWN0aXZlIHNpZ25hbCBob2xkaW5nIHRoZSBhdXRob3JpdGF0aXZlIHNlcnZlciB2YWx1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyAkc2VydmVyU3RhdGUgfSBmcm9tIFwiQGZhaXJmb3gvcG9sbHlcIjtcbiAqXG4gKiBjb25zdCBkYiA9IHsgdG9kb3M6IHNpZ25hbChbXSksIG5leHRJZDogMSB9O1xuICogcG9sbHkoeyBzdGF0ZTogeyBzZXJ2ZXI6IHsgZGI6ICRzZXJ2ZXJTdGF0ZShcImRiXCIsIGRiKSB9IH0gfSk7XG4gKiAvLyBpbiBhIGhhbmRsZXI6IGN0eC5wb2xseVN0YXRlLnNlcnZlci5kYi52YWx1ZS50b2Rvcy52YWx1ZSA9IFsuLi5dXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzZXJ2ZXJTdGF0ZTxUPihrZXk6IHN0cmluZywgaW5pdGlhbFZhbHVlOiBUKTogU2lnbmFsPFQ+IHtcbiAgY29uc3QgZXhpc3RpbmcgPSBzZXJ2ZXJTdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICAvLyBUaGUgcmVnaXN0cnkgZXJhc2VzIFQgKGl0IHN0b3JlcyBTaWduYWw8dW5rbm93bj4pOyB0aGUga2V5IGlzIHRoZVxuICAvLyBjYWxsZXIncyBjb250cmFjdCB0aGF0IHRoZSBzdG9yZWQgc2lnbmFsIGNhcnJpZXMgdGhlaXIgVC5cbiAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3RpbmcgYXMgdW5rbm93biBhcyBTaWduYWw8VD47XG4gIGNvbnN0IHNpZyA9IHNpZ25hbChpbml0aWFsVmFsdWUpO1xuICBzZXJ2ZXJTdGF0ZVJlZ2lzdHJ5LnNldChrZXksIHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbDx1bmtub3duPik7XG4gIHJldHVybiBzaWc7XG59XG5cbnR5cGUgSW50ZXJuYWxTdGF0ZU9wdGlvbnM8VCA9IHVua25vd24+ID0gU3RhdGVPcHRpb25zPFQ+ICYge1xuICBlbmFibGVTeW5jOiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGVuYWJsZSBzeW5jIChhdm9pZCBjb2xsaXNpb24gd2l0aCBzeW5jPzogU3luY0FkYXB0ZXIpXG4gIGVuYWJsZVBlcnNpc3Q6IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gZW5hYmxlIHBlcnNpc3RlbmNlXG59O1xuXG4vLyBEZWVwIGVxdWFsaXR5IGNoZWNrIHRvIHByZXZlbnQgcmVkdW5kYW50IHVwZGF0ZXNcbmV4cG9ydCBmdW5jdGlvbiBkZWVwRXF1YWwoYTogdW5rbm93biwgYjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgYSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMoYik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcbiAgICBpZiAoIWtleXNCLmluY2x1ZGVzKGtleSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoXG4gICAgICAhZGVlcEVxdWFsKFxuICAgICAgICAoYSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldLFxuICAgICAgICAoYiBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldXG4gICAgICApXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBzdG9yYWdlIGFuZCBzeW5jIGFkYXB0ZXJzIHdpdGggdGhyZWUtdGllciBwcmlvcml0eTpcbiAqIDEuIEV4cGxpY2l0IGFkYXB0ZXJzIGZyb20gb3B0aW9ucyAoaGlnaGVzdCBwcmlvcml0eSlcbiAqIDIuIE1lc3NhZ2VCdXMgYWRhcHRlcnMgKGxlZ2FjeSwgZGVwcmVjYXRlZClcbiAqIDMuIEF1dG8tZGV0ZWN0ZWQgYWRhcHRlcnMgKGRlZmF1bHQgYmVoYXZpb3IpXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBZGFwdGVycyhvcHRpb25zOiBJbnRlcm5hbFN0YXRlT3B0aW9ucyk6IHtcbiAgc3RvcmFnZTogU3RvcmFnZUFkYXB0ZXIgfCBudWxsO1xuICBzeW5jOiBTeW5jQWRhcHRlciB8IG51bGw7XG59IHtcbiAgLy8gUHJpb3JpdHkgMTogRXhwbGljaXQgYWRhcHRlcnMgKHBhcnRpYWwgb3IgZnVsbClcbiAgaWYgKG9wdGlvbnMuc3RvcmFnZSB8fCBvcHRpb25zLnN5bmMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmFnZTogb3B0aW9ucy5zdG9yYWdlIHx8IChvcHRpb25zLmVuYWJsZVBlcnNpc3QgPyBjcmVhdGVTdG9yYWdlQWRhcHRlcigpIDogbnVsbCksXG4gICAgICBzeW5jOiBvcHRpb25zLnN5bmMgfHwgKG9wdGlvbnMuZW5hYmxlU3luYyA/IGNyZWF0ZVN5bmNBZGFwdGVyKCkgOiBudWxsKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHJpb3JpdHkgMjogTWVzc2FnZUJ1cyAobGVnYWN5IHN1cHBvcnQpXG4gIC8vIE1lc3NhZ2VCdXMgZG9lc24ndCBwcm92aWRlIHN5bmMgYWRhcHRlciwgb25seSBDaHJvbWUgc3RvcmFnZVxuICBpZiAob3B0aW9ucy5idXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmFnZTogb3B0aW9ucy5idXMuYWRhcHRlcnMuc3RvcmFnZSxcbiAgICAgIHN5bmM6IG9wdGlvbnMuZW5hYmxlU3luYyA/IGNyZWF0ZVN5bmNBZGFwdGVyKCkgOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBQcmlvcml0eSAzOiBBdXRvLWRldGVjdCBiYXNlZCBvbiBlbmFibGVTeW5jIGFuZCBlbmFibGVQZXJzaXN0IGZsYWdzXG4gIHJldHVybiB7XG4gICAgc3RvcmFnZTogb3B0aW9ucy5lbmFibGVQZXJzaXN0ID8gY3JlYXRlU3RvcmFnZUFkYXB0ZXIoKSA6IG51bGwsXG4gICAgc3luYzogb3B0aW9ucy5lbmFibGVTeW5jID8gY3JlYXRlU3luY0FkYXB0ZXIoKSA6IG51bGwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlPFQ+KGtleTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IFQsIG9wdGlvbnM6IEludGVybmFsU3RhdGVPcHRpb25zPFQ+KTogU2lnbmFsPFQ+IHtcbiAgLy8gUmV0dXJuIGV4aXN0aW5nIHNpZ25hbCBpZiBhbHJlYWR5IHJlZ2lzdGVyZWRcbiAgaWYgKHN0YXRlUmVnaXN0cnkuaGFzKGtleSkpIHtcbiAgICByZXR1cm4gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KT8uc2lnbmFsIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+O1xuICB9XG5cbiAgY29uc3Qgc2lnID0gc2lnbmFsKGluaXRpYWxWYWx1ZSk7XG5cbiAgLy8gQ3JlYXRlIHZlcmlmaWNhdGlvbiBtaXJyb3IgaWYgcmVxdWVzdGVkXG4gIGlmIChvcHRpb25zLnZlcmlmeSkge1xuICAgIC8vIENyZWF0ZSBwbGFpbiBvYmplY3QgbWlycm9yIGZvciB2ZXJpZmljYXRpb25cbiAgICBjb25zdCBtaXJyb3IgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGluaXRpYWxWYWx1ZSkpIGFzIHVua25vd24gYXMgVDtcbiAgICAoc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aFZlcmlmeTxUPikudmVyaWZ5ID0gbWlycm9yO1xuICB9XG5cbiAgY29uc3QgZW50cnk6IFN0YXRlRW50cnk8VD4gPSB7XG4gICAgc2lnbmFsOiBzaWcsXG4gICAgY2xvY2s6IDAsXG4gICAgbG9hZGVkOiBQcm9taXNlLnJlc29sdmUoKSxcbiAgICB1cGRhdGluZzogZmFsc2UsXG4gIH07XG5cbiAgLy8gUmVzb2x2ZSBhZGFwdGVycyAoZXhwbGljaXQsIE1lc3NhZ2VCdXMsIG9yIGF1dG8tZGV0ZWN0KVxuICBjb25zdCBhZGFwdGVycyA9IHJlc29sdmVBZGFwdGVycyhvcHRpb25zKTtcblxuICAvLyBMb2FkIGZyb20gc3RvcmFnZSBpZiBwZXJzaXN0IGlzIGVuYWJsZWRcbiAgaWYgKG9wdGlvbnMuZW5hYmxlUGVyc2lzdCAmJiBhZGFwdGVycy5zdG9yYWdlKSB7XG4gICAgZW50cnkubG9hZGVkID0gbG9hZEZyb21TdG9yYWdlKGtleSwgc2lnLCBlbnRyeSwgYWRhcHRlcnMuc3RvcmFnZSwgb3B0aW9ucy52YWxpZGF0b3IpO1xuICB9XG5cbiAgLy8gV2F0Y2ggZm9yIGNoYW5nZXMgYWZ0ZXIgaW5pdGlhbCBsb2FkXG4gIGVudHJ5LmxvYWRlZC50aGVuKCgpID0+IHtcbiAgICBsZXQgZGVib3VuY2VUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgcHJldmlvdXNWYWx1ZSA9IHNpZy52YWx1ZTtcbiAgICBsZXQgaXNGaXJzdFJ1biA9IHRydWU7XG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogU3luYyBlZmZlY3QgcmVxdWlyZXMgY29vcmRpbmF0aW9uIG9mIG11bHRpcGxlIHN0YXRlIGNoYW5nZSBzY2VuYXJpb3NcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gUmVhZCB0aGUgc2lnbmFsIEZJUlNULCBiZWZvcmUgYW55IGVhcmx5IHJldHVybiBjYW4gaGFwcGVuLlxuICAgICAgLy9cbiAgICAgIC8vIFByZWFjdCByZS1jb2xsZWN0cyBhbiBlZmZlY3QncyBkZXBlbmRlbmNpZXMgb24gZXZlcnkgcnVuLCBzbyBhIHJ1biB0aGF0XG4gICAgICAvLyByZXR1cm5zIHdpdGhvdXQgdG91Y2hpbmcgYHNpZy52YWx1ZWAgdW5zdWJzY3JpYmVzIHRoZSBlZmZlY3QgZm9yIGdvb2QuXG4gICAgICAvLyBUaGUgcnVuIGFuIGluY29taW5nIHN5bmMgbWVzc2FnZSB0cmlnZ2VycyBpcyBleGFjdGx5IHN1Y2ggYSBydW4uXG4gICAgICBjb25zdCB2YWx1ZSA9IHNpZy52YWx1ZTtcblxuICAgICAgLy8gU2tpcCBmaXJzdCBydW4gKGVmZmVjdCBmaXJlcyBpbW1lZGlhdGVseSBvbiByZWdpc3RyYXRpb24pXG4gICAgICBpZiAoaXNGaXJzdFJ1bikge1xuICAgICAgICBpc0ZpcnN0UnVuID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQW4gaW5jb21pbmcgbWVzc2FnZSBpcyBiZWluZyBhcHBsaWVkLiBBZG9wdCBpdCBhcyB0aGUgYmFzZWxpbmUg4oCUIHRoaXNcbiAgICAgIC8vIGNvbnRleHQgbm93IGhvbGRzIGl0LCBzbyB0aGUgbmV4dCBsb2NhbCBjaGFuZ2UgaXMgYSBjaGFuZ2UgYWdhaW5zdCBpdCDigJRcbiAgICAgIC8vIGFuZCBkbyBub3QgYnJvYWRjYXN0LCB3aGljaCB3b3VsZCBlY2hvIGl0IGJhY2sgdG8gdGhlIHNlbmRlci5cbiAgICAgIGlmIChlbnRyeS51cGRhdGluZykge1xuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBpZiB2YWx1ZSBoYXNuJ3QgY2hhbmdlZCAoZGVlcCBlcXVhbGl0eSBjaGVjaylcbiAgICAgIGlmIChkZWVwRXF1YWwodmFsdWUsIHByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAvLyBVcGRhdGUgdmVyaWZpY2F0aW9uIG1pcnJvciBpZiBlbmFibGVkXG4gICAgICBpZiAob3B0aW9ucy52ZXJpZnkpIHtcbiAgICAgICAgY29uc3QgdmVyaWZ5U2lnbmFsID0gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aFZlcmlmeTxUPjtcbiAgICAgICAgaWYgKHZlcmlmeVNpZ25hbC52ZXJpZnkpIHtcbiAgICAgICAgICAvLyBub3NlbWdyZXA6IGphdmFzY3JpcHQubGFuZy5zZWN1cml0eS5pbnNlY3VyZS1vYmplY3QtYXNzaWduLmluc2VjdXJlLW9iamVjdC1hc3NpZ24g4oCUIGludGVybmFsIG1pcnJvcjsgdmFsdWUgaXMgYSBkZWVwIEpTT04gY2xvbmUsIG5vdCBhcmJpdHJhcnkgZXh0ZXJuYWwgaW5wdXQuXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih2ZXJpZnlTaWduYWwudmVyaWZ5LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluY3JlbWVudCBjbG9jayBtb25vdG9uaWNhbGx5XG4gICAgICBlbnRyeS5jbG9jaysrO1xuXG4gICAgICBjb25zdCBkb1VwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgLy8gUGVyc2lzdCB0byBzdG9yYWdlXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZVBlcnNpc3QgJiYgYWRhcHRlcnMuc3RvcmFnZSkge1xuICAgICAgICAgIHBlcnNpc3RUb1N0b3JhZ2Uoa2V5LCB2YWx1ZSwgZW50cnkuY2xvY2ssIGFkYXB0ZXJzLnN0b3JhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG90aGVyIGNvbnRleHRzXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZVN5bmMgJiYgYWRhcHRlcnMuc3luYykge1xuICAgICAgICAgIGJyb2FkY2FzdFVwZGF0ZShrZXksIHZhbHVlLCBlbnRyeS5jbG9jaywgYWRhcHRlcnMuc3luYyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIERlYm91bmNlIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKG9wdGlvbnMuZGVib3VuY2VNcykge1xuICAgICAgICBpZiAoZGVib3VuY2VUaW1lcikgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpO1xuICAgICAgICBkZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChkb1VwZGF0ZSwgb3B0aW9ucy5kZWJvdW5jZU1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExpc3RlbiBmb3IgdXBkYXRlcyBmcm9tIG90aGVyIGNvbnRleHRzIChvbmx5IGlmIHN5bmMgZW5hYmxlZClcbiAgaWYgKG9wdGlvbnMuZW5hYmxlU3luYyAmJiBhZGFwdGVycy5zeW5jKSB7XG4gICAgLy8gQ29ubmVjdCBpZiBuZWVkZWQgKHNvbWUgYWRhcHRlcnMgcmVxdWlyZSBleHBsaWNpdCBjb25uZWN0aW9uKVxuICAgIGlmIChhZGFwdGVycy5zeW5jLmNvbm5lY3QpIHtcbiAgICAgIGFkYXB0ZXJzLnN5bmMuY29ubmVjdCgpO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIHN5bmMgbWVzc2FnZSBsaXN0ZW5lclxuICAgIGFkYXB0ZXJzLnN5bmMub25NZXNzYWdlPFQ+KChtZXNzYWdlKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZS5rZXkgIT09IGtleSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBvbGRDbG9jayA9IGVudHJ5LmNsb2NrO1xuXG4gICAgICAvLyBMYW1wb3J0IGNsb2NrIHJ1bGU6IEFsd2F5cyB1cGRhdGUgdG8gbWF4KGxvY2FsLCByZWNlaXZlZClcbiAgICAgIC8vIFRoaXMgbWFpbnRhaW5zIGNhdXNhbCBvcmRlcmluZyBldmVuIHdoZW4gcmVqZWN0aW5nIHVwZGF0ZXNcbiAgICAgIGVudHJ5LmNsb2NrID0gTWF0aC5tYXgoZW50cnkuY2xvY2ssIG1lc3NhZ2UuY2xvY2spO1xuXG4gICAgICAvLyBPbmx5IGFjY2VwdCB2YWx1ZSB1cGRhdGVzIGlmIHJlY2VpdmVkIGNsb2NrIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBvbGQgbG9jYWwgY2xvY2tcbiAgICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBvbmx5IGFwcGx5IGNhdXNhbGx5IG5ld2VyIHVwZGF0ZXNcbiAgICAgIGlmIChtZXNzYWdlLmNsb2NrID4gb2xkQ2xvY2spIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgaW5jb21pbmcgdmFsdWUgaWYgdmFsaWRhdG9yIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zLnZhbGlkYXRvciAmJiAhb3B0aW9ucy52YWxpZGF0b3IobWVzc2FnZS52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW1BvbGx5XSBTdGF0ZSBcIiR7a2V5fVwiOiBSZWNlaXZlZCBpbnZhbGlkIHZhbHVlIGZyb20gc3luYyAoY2xvY2s6ICR7bWVzc2FnZS5jbG9ja30pYCxcbiAgICAgICAgICAgIG1lc3NhZ2UudmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNraXAgcmVkdW5kYW50IHVwZGF0ZXMgKGRlZXAgZXF1YWxpdHkgY2hlY2spXG4gICAgICAgIGlmIChkZWVwRXF1YWwoZW50cnkuc2lnbmFsLnZhbHVlLCBtZXNzYWdlLnZhbHVlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGx5VXBkYXRlKGVudHJ5LCBtZXNzYWdlLnZhbHVlIGFzIHVua25vd24gYXMgVCwgbWVzc2FnZS5jbG9jayk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0ZVJlZ2lzdHJ5LnNldChrZXksIGVudHJ5IGFzIHVua25vd24gYXMgU3RhdGVFbnRyeTx1bmtub3duPik7XG4gIHJldHVybiBzaWc7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vKipcbiAqIEJhY2tmaWxsIGtleXMgYWRkZWQgdG8gdGhlIHN0YXRlIHNoYXBlIHNpbmNlIGEgdmFsdWUgd2FzIHBlcnNpc3RlZC5cbiAqXG4gKiBTdG9yZWQgcGxhaW4gb2JqZWN0cyBhcmUgc2hhbGxvdy1tZXJnZWQgb3ZlciB0aGUgY3VycmVudCBkZWZhdWx0cyBzbyB0aGF0IGFcbiAqIGZpZWxkIGFkZGVkIGluIGEgbGF0ZXIgcmVsZWFzZSByZWh5ZHJhdGVzIHRvIGl0cyBkZWZhdWx0IHJhdGhlciB0aGFuXG4gKiBgdW5kZWZpbmVkYC4gUHJpbWl0aXZlcyBhbmQgYXJyYXlzIGFyZSByZXBsYWNlZCB3aG9sZXNhbGUg4oCUIG1lcmdpbmcgdGhvc2VcbiAqIHdvdWxkIGNvcnJ1cHQgdGhlbS5cbiAqL1xuZnVuY3Rpb24gcmVjb25jaWxlV2l0aERlZmF1bHRzPFQ+KGRlZmF1bHRzOiBULCBzdG9yZWQ6IHVua25vd24pOiBUIHtcbiAgLy8gUGVyc2lzdGVkIHZhbHVlcyBhcmUgdHJ1c3RlZCB0byBiZSB0aGUgVCB0aGlzIGtleSB3YXMgcmVnaXN0ZXJlZCB3aXRoO1xuICAvLyBzY2hlbWEgZHJpZnQgaXMgaGFuZGxlZCBieSB0aGUgbWVyZ2UsIG5vdCBieSBydW50aW1lIHZhbGlkYXRpb24uXG4gIGlmIChpc1BsYWluT2JqZWN0KGRlZmF1bHRzKSAmJiBpc1BsYWluT2JqZWN0KHN0b3JlZCkpIHtcbiAgICByZXR1cm4geyAuLi5kZWZhdWx0cywgLi4uc3RvcmVkIH0gYXMgdW5rbm93biBhcyBUO1xuICB9XG4gIHJldHVybiBzdG9yZWQgYXMgdW5rbm93biBhcyBUO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkRnJvbVN0b3JhZ2U8VD4oXG4gIGtleTogc3RyaW5nLFxuICBzaWc6IFNpZ25hbDxUPixcbiAgZW50cnk6IFN0YXRlRW50cnk8VD4sXG4gIHN0b3JhZ2U6IFN0b3JhZ2VBZGFwdGVyLFxuICB2YWxpZGF0b3I/OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFRcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0b3JhZ2UuZ2V0KFtrZXksIGAke2tleX06Y2xvY2tgXSk7XG5cbiAgICBpZiAocmVzdWx0W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2lnIHN0aWxsIGhvbGRzIHRoZSBpbml0aWFsIHZhbHVlIGhlcmUsIHNvIGl0IGlzIHRoZSBkZWZhdWx0IGJhc2VcbiAgICAgIC8vIGZvciBiYWNrZmlsbGluZyBrZXlzIHRoZSBwZXJzaXN0ZWQgYmxvYiBwcmVkYXRlcy5cbiAgICAgIGNvbnN0IHN0b3JlZFZhbHVlID0gcmVjb25jaWxlV2l0aERlZmF1bHRzKHNpZy5wZWVrKCksIHJlc3VsdFtrZXldKTtcblxuICAgICAgLy8gVmFsaWRhdGUgc3RvcmVkIHZhbHVlIGlmIHZhbGlkYXRvciBwcm92aWRlZFxuICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICBpZiAodmFsaWRhdG9yKHN0b3JlZFZhbHVlKSkge1xuICAgICAgICAgIHNpZy52YWx1ZSA9IHN0b3JlZFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBbUG9sbHldIFN0YXRlIFwiJHtrZXl9XCI6IFN0b3JlZCB2YWx1ZSBmYWlsZWQgdmFsaWRhdGlvbiwgdXNpbmcgaW5pdGlhbCB2YWx1ZWAsXG4gICAgICAgICAgICBzdG9yZWRWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZy52YWx1ZSA9IHN0b3JlZFZhbHVlIGFzIHVua25vd24gYXMgVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0W2Ake2tleX06Y2xvY2tgXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnRyeS5jbG9jayA9IHJlc3VsdFtgJHtrZXl9OmNsb2NrYF0gYXMgdW5rbm93biBhcyBudW1iZXI7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihgW1BvbGx5XSBGYWlsZWQgdG8gbG9hZCBzdGF0ZSBmcm9tIHN0b3JhZ2U6ICR7a2V5fWAsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJzaXN0VG9TdG9yYWdlPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCwgY2xvY2s6IG51bWJlciwgc3RvcmFnZTogU3RvcmFnZUFkYXB0ZXIpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBzdG9yYWdlLnNldCh7XG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgICBbYCR7a2V5fTpjbG9ja2BdOiBjbG9jayxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYFtQb2xseV0gRmFpbGVkIHRvIHBlcnNpc3Qgc3RhdGUgdG8gc3RvcmFnZTogJHtrZXl9YCwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJyb2FkY2FzdFVwZGF0ZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQsIGNsb2NrOiBudW1iZXIsIHN5bmM6IFN5bmNBZGFwdGVyKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgc3luYy5icm9hZGNhc3Qoe1xuICAgICAga2V5LFxuICAgICAgdmFsdWUsXG4gICAgICBjbG9jayxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYFtQb2xseV0gRmFpbGVkIHRvIGJyb2FkY2FzdCBzdGF0ZSB1cGRhdGU6ICR7a2V5fWAsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVVwZGF0ZTxUPihlbnRyeTogU3RhdGVFbnRyeTxUPiwgdmFsdWU6IFQsIGNsb2NrOiBudW1iZXIpOiB2b2lkIHtcbiAgZW50cnkudXBkYXRpbmcgPSB0cnVlO1xuICBlbnRyeS5zaWduYWwudmFsdWUgPSB2YWx1ZTtcbiAgZW50cnkuY2xvY2sgPSBjbG9jaztcbiAgZW50cnkudXBkYXRpbmcgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgc3RhdGUgYnkga2V5ICh1c2VmdWwgZm9yIHJldHJpZXZpbmcgc3RhdGUgd2l0aG91dCByZS1jcmVhdGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRlQnlLZXk8VD4oa2V5OiBzdHJpbmcpOiBTaWduYWw8VD4gfCB1bmRlZmluZWQge1xuICBjb25zdCBlbnRyeSA9IHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIHJldHVybiBlbnRyeT8uc2lnbmFsIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+IHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENsZWFyIHN0YXRlIHJlZ2lzdHJ5ICh1c2VmdWwgZm9yIHRlc3RpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclN0YXRlUmVnaXN0cnkoKTogdm9pZCB7XG4gIHN0YXRlUmVnaXN0cnkuY2xlYXIoKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTdGF0ZSBvd25lZCBieSB0aGUgY29tcG9uZW50IGdhbGxlcnkuXG4gKlxuICogVGhlIGdhbGxlcnkgaXMgYSBzdGFuZGFsb25lIGRldiBzdXJmYWNlIHdpdGggbm8gc2VydmVyIHN0YXRlLCBzbyB0aGVzZVxuICogc2lnbmFscyBzdGF5IG1vZHVsZS1sb2NhbCDigJQgdGhleSBuZXZlciBqb2luIGEgc3luY2VkIHN0b3JlIGJ1bmRsZS4gQWN0aW9uXG4gKiBoYW5kbGVycyAoYWN0aW9ucy50cykgcmVhY2ggdGhlbSBieSBpbXBvcnQsIHRoZSB3YXkgZWFsJ3Mgc2hvd2Nhc2UgZG9lcy5cbiAqIGByZXNldEdhbGxlcnlTdG9yZXMoKWAgZXhpc3RzIHNvIHRoZSBicm93c2VyL3Zpc3VhbCB0ZXN0IGNhbiBpc29sYXRlIHJ1bnMuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlRm9ybSwgc2V0RXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7ICRzdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9zdGF0ZS50c1wiO1xuXG5leHBvcnQgdHlwZSBHYWxsZXJ5VGhlbWUgPSBcInN5c3RlbVwiIHwgXCJsaWdodFwiIHwgXCJkYXJrXCI7XG5cbi8qKiBUaGUgZ2FsbGVyeSdzIEFjdGlvbkZvcm0gYmluZHMgdG8gYW4gZW1wdHkgYnVuZGxlIOKAlCBubyBzdG9yZSBpcyB0b3VjaGVkLiAqL1xuZXhwb3J0IHR5cGUgR2FsbGVyeVN0b3JlcyA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcblxuLyoqIFRoZW1lIG92ZXJyaWRlLCBhcHBsaWVkIHRvIHRoZSBwYW5lbCBhcyBgZGF0YS1wb2xseS10aGVtZWAuIGBzeXN0ZW1gIG9taXRzXG4gKiAgdGhlIGF0dHJpYnV0ZSBhbmQgbGV0cyBgcHJlZmVycy1jb2xvci1zY2hlbWVgIGRlY2lkZS4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVRoZW1lID0gJHN0YXRlPEdhbGxlcnlUaGVtZT4oXCJzeXN0ZW1cIik7XG4vKiogRHJpdmVzIHRoZSBsaXZlIDxNb2RhbD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlNb2RhbE9wZW4gPSAkc3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuLyoqIERyaXZlcyB0aGUgbGl2ZSA8RHJvcGRvd24+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5RHJvcGRvd25PcGVuID0gJHN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBzaW5nbGUtc2VsZWN0IDxTZWxlY3Q+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0U2luZ2xlID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KFtcImNvbWV0XCJdKSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgbXVsdGktc2VsZWN0IDxTZWxlY3Q+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0TXVsdGkgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoW1wiY29tZXRcIiwgXCJuZWJ1bGFcIl0pKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBjbGVhcmFibGUgc2luZ2xlLXNlbGVjdCA8U2VsZWN0PiBzcGVjaW1lbi4gU3RhcnRzIGVtcHR5XG4gKiAgc28gdGhlIFwiQW55IOKAplwiIGNsZWFyIG9wdGlvbiBpcyB0aGUgYWN0aXZlIHJvdy4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdENsZWFyYWJsZSA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBsb25nLWxhYmVsIDxTZWxlY3Q+IHNwZWNpbWVuIChwb2xseSMxODApLiBUaGUgbGFiZWwgaXNcbiAqICB3aWRlciB0aGFuIGAtLXBvbGx5LWNvbnRyb2wtbWF4LXdpZHRoYCwgc28gdGhlIHRyaWdnZXIgbXVzdCB0cnVuY2F0ZSBpdFxuICogIHJhdGhlciB0aGFuIHdyYXAgdGhlIGNhcmV0IG9udG8gYSBzZWNvbmQgbGluZS4gRXZlcnkgc2hvcnQtbGFiZWwgc3BlY2ltZW5cbiAqICBwYXNzZWQgdGhyb3VnaG91dCB0aGF0IHJlZ3Jlc3Npb24uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RMb25nID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KFtcImxvbmdcIl0pKTtcbi8qKiBUaGUgbGl2ZSwgc2lnbmFsLWJvdW5kIDxDaGVja2JveD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlDaGVja2VkID0gJHN0YXRlPGJvb2xlYW4+KHRydWUpO1xuLyoqIFRoZSBjb250cm9sbGVkIDxUZXh0SW5wdXQ+IHNwZWNpbWVuIHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5VGV4dCA9ICRzdGF0ZTxzdHJpbmc+KFwiQ29udHJvbGxlZCB2YWx1ZVwiKTtcbi8qKiBMYXN0IHZhbHVlIGNvbW1pdHRlZCBieSB0aGUgPEFjdGlvbklucHV0PiAvIDxBY3Rpb25TZWxlY3Q+IHNwZWNpbWVucy4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeUNvbW1pdHRlZCA9ICRzdGF0ZTxzdHJpbmc+KFwi4oCUXCIpO1xuLyoqIEFjdGl2ZSB0YWIgaWQgZm9yIHRoZSA8VGFicz4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlUYWIgPSAkc3RhdGU8c3RyaW5nPihcIm92ZXJ2aWV3XCIpO1xuLyoqIE5hbWUgb2YgdGhlIGxhc3QgZmlsZSBwaWNrZWQgYnkgdGhlIDxGaWxlSW5wdXQ+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5RmlsZU5hbWUgPSAkc3RhdGU8c3RyaW5nPihcIuKAlFwiKTtcblxuLyoqXG4gKiBUaGUgZm9ybSBiZWhpbmQgdGhlIDxBY3Rpb25Gb3JtPiBzcGVjaW1lbi4gYGNyZWF0ZUZvcm1gIHJlcXVpcmVzIGBiaW5kU3RvcmVzYFxuICogYmVmb3JlIGEgc3VibWl0IGNhbiBydW47IGNsaWVudC50c3ggYmluZHMgaXQgdG8gdGhlIGVtcHR5IGdhbGxlcnkgYnVuZGxlIGF0XG4gKiBib290LiBJdHMgYC5hY3Rpb25zYCBhcmUgc3ByZWFkIGludG8gdGhlIHJlZ2lzdHJ5IChzZWUgYWN0aW9ucy50cykuXG4gKi9cbmV4cG9ydCBjb25zdCBnYWxsZXJ5Rm9ybSA9IGNyZWF0ZUZvcm08eyBmdWxsTmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH0sIEdhbGxlcnlTdG9yZXM+KHtcbiAgbmFtZTogXCJnYWxsZXJ5LWZvcm1cIixcbiAgaW5pdGlhbFZhbHVlczogeyBmdWxsTmFtZTogXCJcIiwgZW1haWw6IFwiXCIgfSxcbiAgb25TdWJtaXQ6ICh7IHZhbHVlcyB9KSA9PiB7XG4gICAgc2V0RXJyb3IoXG4gICAgICBgQWN0aW9uRm9ybSBzdWJtaXR0ZWQg4oCUIG5hbWUgXCIke3ZhbHVlcy5mdWxsTmFtZSB8fCBcIihlbXB0eSlcIn1cIiwgYCArXG4gICAgICAgIGBlbWFpbCBcIiR7dmFsdWVzLmVtYWlsIHx8IFwiKGVtcHR5KVwifVwiLmAsXG4gICAgICB7IHNldmVyaXR5OiBcImluZm9cIiB9XG4gICAgKTtcbiAgfSxcbn0pO1xuXG4vKiogUmVzZXQgZXZlcnkgZ2FsbGVyeSBzaWduYWwgdG8gaXRzIGluaXRpYWwgdmFsdWUg4oCUIGZvciB0ZXN0IGlzb2xhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEdhbGxlcnlTdG9yZXMoKTogdm9pZCB7XG4gICRnYWxsZXJ5VGhlbWUudmFsdWUgPSBcInN5c3RlbVwiO1xuICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAkZ2FsbGVyeURyb3Bkb3duT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAkZ2FsbGVyeVNlbGVjdFNpbmdsZS52YWx1ZSA9IG5ldyBTZXQoW1wiY29tZXRcIl0pO1xuICAkZ2FsbGVyeVNlbGVjdE11bHRpLnZhbHVlID0gbmV3IFNldChbXCJjb21ldFwiLCBcIm5lYnVsYVwiXSk7XG4gICRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlLnZhbHVlID0gbmV3IFNldCgpO1xuICAkZ2FsbGVyeVNlbGVjdExvbmcudmFsdWUgPSBuZXcgU2V0KFtcImxvbmdcIl0pO1xuICAkZ2FsbGVyeUNoZWNrZWQudmFsdWUgPSB0cnVlO1xuICAkZ2FsbGVyeVRleHQudmFsdWUgPSBcIkNvbnRyb2xsZWQgdmFsdWVcIjtcbiAgJGdhbGxlcnlDb21taXR0ZWQudmFsdWUgPSBcIuKAlFwiO1xuICAkZ2FsbGVyeVRhYi52YWx1ZSA9IFwib3ZlcnZpZXdcIjtcbiAgJGdhbGxlcnlGaWxlTmFtZS52YWx1ZSA9IFwi4oCUXCI7XG4gIGdhbGxlcnlGb3JtLmNsb3NlKCk7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9ucyBmb3IgdGhlIGdhbGxlcnkncyBpbnRlcmFjdGl2ZSBzcGVjaW1lbnMuIEV2ZXJ5IGhhbmRsZXIgZHJpdmVzIGFcbiAqIG1vZHVsZS1sb2NhbCBzaWduYWwgKHN0b3Jlcy50cykgb3IgYSBwb2xseSBvdmVybGF5IHByaW1pdGl2ZSDigJQgbm9uZSB0b3VjaGVzIGFcbiAqIHN0b3JlIGJ1bmRsZSwgc28gdGhlIGdhbGxlcnkgc3RheXMgYSBzZWxmLWNvbnRhaW5lZCBkZXYgc3VyZmFjZS4gU3ByZWFkaW5nXG4gKiBgZ2FsbGVyeUZvcm0uYWN0aW9uc2AgYWRkcyB0aGUgYXV0by1yZWdpc3RlcmVkIGBnYWxsZXJ5LWZvcm06e29wZW4sY2xvc2UsXG4gKiBzdWJtaXR9YCBoYW5kbGVycy4gY2xpZW50LnRzeCB3aXJlcyB0aGlzIHJlZ2lzdHJ5IGludG8gdGhlIGRvY3VtZW50IHZpYVxuICogYGluc3RhbGxFdmVudERlbGVnYXRpb25gLCBleGFjdGx5IGFzIGEgcmVhbCBjb25zdW1lciBhcHAgd291bGQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWdpc3RyeSwgRXJyb3JTZXZlcml0eSB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgc2V0RXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tIFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpXCI7XG5pbXBvcnQge1xuICAkZ2FsbGVyeUNvbW1pdHRlZCxcbiAgJGdhbGxlcnlNb2RhbE9wZW4sXG4gICRnYWxsZXJ5VGFiLFxuICAkZ2FsbGVyeVRoZW1lLFxuICB0eXBlIEdhbGxlcnlTdG9yZXMsXG4gIHR5cGUgR2FsbGVyeVRoZW1lLFxuICBnYWxsZXJ5Rm9ybSxcbn0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5cbmNvbnN0IFRIRU1FUzogcmVhZG9ubHkgR2FsbGVyeVRoZW1lW10gPSBbXCJzeXN0ZW1cIiwgXCJsaWdodFwiLCBcImRhcmtcIl07XG5jb25zdCBTRVZFUklUSUVTOiByZWFkb25seSBFcnJvclNldmVyaXR5W10gPSBbXCJpbmZvXCIsIFwid2FybmluZ1wiLCBcImVycm9yXCJdO1xuXG5leHBvcnQgY29uc3QgR0FMTEVSWV9BQ1RJT05TOiBBY3Rpb25SZWdpc3RyeTxHYWxsZXJ5U3RvcmVzPiA9IHtcbiAgLi4uZ2FsbGVyeUZvcm0uYWN0aW9ucyxcblxuICBcImdhbGxlcnk6c2V0LXRoZW1lXCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gZGF0YVtcInRoZW1lXCJdO1xuICAgIGlmICh0aGVtZSA9PT0gXCJzeXN0ZW1cIiB8fCB0aGVtZSA9PT0gXCJsaWdodFwiIHx8IHRoZW1lID09PSBcImRhcmtcIikge1xuICAgICAgJGdhbGxlcnlUaGVtZS52YWx1ZSA9IHRoZW1lO1xuICAgIH1cbiAgfSxcblxuICBcImdhbGxlcnk6c2V0LXRhYlwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBpZCA9IGRhdGFbXCJpZFwiXTtcbiAgICBpZiAodHlwZW9mIGlkID09PSBcInN0cmluZ1wiKSAkZ2FsbGVyeVRhYi52YWx1ZSA9IGlkO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTptb2RhbC1vcGVuXCI6ICgpID0+IHtcbiAgICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IHRydWU7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OmNvbW1pdFwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFbXCJ2YWx1ZVwiXTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSAkZ2FsbGVyeUNvbW1pdHRlZC52YWx1ZSA9IHZhbHVlO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTp0b2FzdFwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBzZXZlcml0eSA9IFNFVkVSSVRJRVMuZmluZCgocykgPT4gcyA9PT0gZGF0YVtcInNldmVyaXR5XCJdKSA/PyBcImluZm9cIjtcbiAgICBzZXRFcnJvcihgVGhpcyBpcyBhICR7c2V2ZXJpdHl9IHRvYXN0IOKAlCBjbGljayBpdCBvciB3YWl0IGZvciBpdCB0byBkaXNtaXNzLmAsIHtcbiAgICAgIHNldmVyaXR5LFxuICAgIH0pO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTpjb25maXJtXCI6IGFzeW5jICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IGRhbmdlciA9IGRhdGFbXCJkYW5nZXJcIl0gPT09IFwidHJ1ZVwiO1xuICAgIGNvbnN0IG9rID0gYXdhaXQgY29uZmlybSh7XG4gICAgICB0aXRsZTogZGFuZ2VyID8gXCJEZWxldGUgdGhpcyBpdGVtP1wiIDogXCJTYXZlIHlvdXIgY2hhbmdlcz9cIixcbiAgICAgIGJvZHk6IGRhbmdlclxuICAgICAgICA/IFwiVGhpcyBjYW5ub3QgYmUgdW5kb25lLiBUaGUgaXRlbSB3aWxsIGJlIHBlcm1hbmVudGx5IHJlbW92ZWQuXCJcbiAgICAgICAgOiBcIllvdXIgY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuXCIsXG4gICAgICBkYW5nZXIsXG4gICAgICBjb25maXJtTGFiZWw6IGRhbmdlciA/IFwiRGVsZXRlXCIgOiBcIlNhdmVcIixcbiAgICB9KTtcbiAgICBzZXRFcnJvcihgQ29uZmlybURpYWxvZyByZXNvbHZlZCAke1N0cmluZyhvayl9LmAsIHsgc2V2ZXJpdHk6IG9rID8gXCJpbmZvXCIgOiBcIndhcm5pbmdcIiB9KTtcbiAgfSxcbn07XG5cbi8qKiBUaGUgdGhlbWUgY3ljbGUsIGV4cG9zZWQgc28gdGhlIHBhbmVsIGNhbiByZW5kZXIgb25lIGJ1dHRvbiBwZXIgb3B0aW9uLiAqL1xuZXhwb3J0IHsgVEhFTUVTIH07XG4iLAogICAgIi8qKlxuICogVGhlIGdhbGxlcnkgY2F0YWxvZ3VlIOKAlCBvbmUgc2VjdGlvbiBwZXIgcG9sbHktdWkgcHJpbWl0aXZlLCBlYWNoIHJlbmRlcmluZ1xuICogdGhlIGNvbmZpZ3VyYXRpb25zIHdvcnRoIHNlZWluZy4gQWRhcHRlZCBmcm9tIGVhbCdzIHNob3djYXNlICh3aGljaCBjb25zdW1lc1xuICogdGhpcyB2ZXJ5IGxpYnJhcnkpLCByZXBvaW50ZWQgYXQgdGhlIGxvY2FsIHNvdXJjZSBzbyB0aGUgZ2FsbGVyeSByZW5kZXJzIHRoZVxuICogcHJpbWl0aXZlcyBleGFjdGx5IGFzIHRoZXkgc2hpcC5cbiAqXG4gKiBFdmVyeSBzZWN0aW9uIGNhcnJpZXMgYSBgY29tcG9uZW50YCBuYW1pbmcgdGhlIHBvbGx5LXVpIGV4cG9ydCBpdCBjb3ZlcnM7XG4gKiByZWdpc3RyeS1jb3ZlcmFnZS50cyBhc3NlcnRzIHRoYXQgZXZlcnkgY29tcG9uZW50IGluIHJlZ2lzdHJ5LmdlbmVyYXRlZC50c1xuICogaGFzIGEgc2VjdGlvbiBoZXJlLCBzbyBhIG5ldyBwcmltaXRpdmUgY2FuJ3QgbGFuZCB3aXRob3V0IGEgc3BlY2ltZW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uRm9ybSxcbiAgQWN0aW9uSW5wdXQsXG4gIEFjdGlvblNlbGVjdCxcbiAgQmFkZ2UsXG4gIEJ1dHRvbixcbiAgQ2FyZCxcbiAgQ2hlY2tib3gsXG4gIENsdXN0ZXIsXG4gIENvZGUsXG4gIENvbGxhcHNpYmxlLFxuICBEcm9wZG93bixcbiAgRmlsZUlucHV0LFxuICBIdG1sLFxuICBMYXlvdXQsXG4gIExpbmssXG4gIE1vZGFsLFxuICBPdXRwdXQsXG4gIFNlbGVjdCxcbiAgU2tlbGV0b24sXG4gIFN1cmZhY2UsXG4gIFRhYnMsXG4gIFRleHQsXG4gIFRleHRJbnB1dCxcbiAgVG9nZ2xlLFxufSBmcm9tIFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpXCI7XG5pbXBvcnQge1xuICAkZ2FsbGVyeUNoZWNrZWQsXG4gICRnYWxsZXJ5Q29tbWl0dGVkLFxuICAkZ2FsbGVyeURyb3Bkb3duT3BlbixcbiAgJGdhbGxlcnlGaWxlTmFtZSxcbiAgJGdhbGxlcnlNb2RhbE9wZW4sXG4gICRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlLFxuICAkZ2FsbGVyeVNlbGVjdExvbmcsXG4gICRnYWxsZXJ5U2VsZWN0TXVsdGksXG4gICRnYWxsZXJ5U2VsZWN0U2luZ2xlLFxuICAkZ2FsbGVyeVRhYixcbiAgJGdhbGxlcnlUZXh0LFxuICBnYWxsZXJ5Rm9ybSxcbn0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5cbi8qKlxuICogT25lIGNhdGFsb2d1ZWQgZXhhbXBsZTogYSBzdGFnZSBob2xkaW5nIGxpdmUgY29tcG9uZW50KHMpIGFuZCBhIGNhcHRpb25cbiAqIG5hbWluZyB0aGUgY29uZmlndXJhdGlvbiBvbiBzaG93LiBgd2lkZWAgc3BhbnMgZXZlcnkgZ3JpZCBjb2x1bW4gZm9yXG4gKiBzcGVjaW1lbnMgdGhhdCBuZWVkIHRoZSByb29tIChsYXlvdXRzLCBmb3JtcywgY2FyZHMpLlxuICovXG5mdW5jdGlvbiBTcGVjaW1lbihwcm9wczogeyBjYXB0aW9uOiBzdHJpbmc7IHdpZGU/OiBib29sZWFuOyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwic3Vua2VuXCJcbiAgICAgIHJhZGl1cz1cIm1kXCJcbiAgICAgIGJvcmRlcj1cImRlZmF1bHRcIlxuICAgICAgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiXG4gICAgICBjbGFzc05hbWU9e3Byb3BzLndpZGUgPyBcImdhbGxlcnktc3BlY2ltZW4gZ2FsbGVyeS1zcGVjaW1lbi0td2lkZVwiIDogXCJnYWxsZXJ5LXNwZWNpbWVuXCJ9XG4gICAgPlxuICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdhbGxlcnktc3RhZ2VcIj57cHJvcHMuY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiIHRvbmU9XCJtdXRlZFwiIGNsYXNzTmFtZT1cImdhbGxlcnktY29kZVwiPlxuICAgICAgICAgIHtwcm9wcy5jYXB0aW9ufVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0xheW91dD5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbi8qKiBBIG5ldXRyYWwgZmlsbGVyIGJsb2NrIGZvciB0aGUgbGF5b3V0IHNwZWNpbWVucy4gKi9cbmZ1bmN0aW9uIEJveChwcm9wczogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHZhcmlhbnQ9XCJyYWlzZWRcIiByYWRpdXM9XCJzbVwiIGJvcmRlcj1cImRlZmF1bHRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICA8VGV4dCBzaXplPVwic21cIj57cHJvcHMuY2hpbGRyZW59PC9UZXh0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuY29uc3QgU1RBUjogSlNYLkVsZW1lbnQgPSAoXG4gIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZ2FsbGVyeS1pY29uXCI+XG4gICAg4piFXG4gIDwvc3Bhbj5cbik7XG5cbi8qKlxuICogcG9sbHkjMTgwOiBhIGxhYmVsIHdpZGVyIHRoYW4gYC0tcG9sbHktY29udHJvbC1tYXgtd2lkdGhgLCBzaGFyZWQgYnkgdGhlXG4gKiA8U2VsZWN0PiBhbmQgPEFjdGlvblNlbGVjdD4gbG9uZy1sYWJlbCBzcGVjaW1lbnMgc28gdGhlIHR3byB0cmlnZ2VycyBtdXN0XG4gKiBtZWFzdXJlIHRoZSBzYW1lIGJveC4gRXZlcnkgY2F0YWxvZ3VlZCBTZWxlY3QgdXNlZCBhIHNob3J0IGxhYmVsLCB3aGljaCBpc1xuICogd2h5IGEgdHJpZ2dlciB0aGF0IGhhZCBsb3N0IGl0cyBsYXlvdXQgcm93IHN0aWxsIG1lYXN1cmVkIDQwcHggYW5kIHRoZVxuICogY2FyZXQgb25seSB3cmFwcGVkIGluIGEgY29uc3VtZXIgYXBwLlxuICovXG5jb25zdCBMT05HX1NFTEVDVF9MQUJFTCA9IFwiQSBkZWxpYmVyYXRlbHkgbG9uZyBvcHRpb24gbGFiZWwgdGhhdCBvdmVyZmxvd3MgdGhlIGNvbnRyb2wgbWF4IHdpZHRoXCI7XG5cbmNvbnN0IExPTkdfU0VMRUNUX09QVElPTlMgPSBbXG4gIHsgdmFsdWU6IFwibG9uZ1wiLCBsYWJlbDogTE9OR19TRUxFQ1RfTEFCRUwgfSxcbiAgeyB2YWx1ZTogXCJzaG9ydFwiLCBsYWJlbDogXCJTaG9ydFwiIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdhbGxlcnlTZWN0aW9uIHtcbiAgLyoqIEFuY2hvciBpZCBmb3IgdGhlIGluLXBhZ2UgbmF2LiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogRGlzcGxheSBoZWFkaW5nLiAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKiogVGhlIHBvbGx5LXVpIGV4cG9ydCB0aGlzIHNlY3Rpb24gY292ZXJzIChtYXRjaGVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5KS4gKi9cbiAgY29tcG9uZW50OiBzdHJpbmc7XG4gIC8qKiBPbmUtbGluZSBkZXNjcmlwdGlvbi4gKi9cbiAgc3VtbWFyeTogc3RyaW5nO1xuICByZW5kZXI6ICgpID0+IEpTWC5FbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgR0FMTEVSWV9TRUNUSU9OUzogcmVhZG9ubHkgR2FsbGVyeVNlY3Rpb25bXSA9IFtcbiAge1xuICAgIGlkOiBcImJhZGdlXCIsXG4gICAgdGl0bGU6IFwiQmFkZ2VcIixcbiAgICBjb21wb25lbnQ6IFwiQmFkZ2VcIixcbiAgICBzdW1tYXJ5OiBcIlNtYWxsIGlubGluZSBzdGF0dXMgY2hpcC4gT25lIHZhcmlhbnQgcGVyIHNlbWFudGljIHRvbmUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICB7KFtcImRlZmF1bHRcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8QmFkZ2UgdmFyaWFudD17dn0+e3Z9PC9CYWRnZT5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJidXR0b25cIixcbiAgICB0aXRsZTogXCJCdXR0b25cIixcbiAgICBjb21wb25lbnQ6IFwiQnV0dG9uXCIsXG4gICAgc3VtbWFyeTogXCJJbnRlcmFjdGl2ZSBjb250cm9sLiBUaWVyIHNldHMgaW1wb3J0YW5jZSwgY29sb3Igb3ZlcmxheXMgbWVhbmluZywgc2l6ZSBzZXRzIHNjYWxlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ0aWVyOiBwcmltYXJ5IC8gc2Vjb25kYXJ5IC8gdGVydGlhcnlcIj5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJQcmltYXJ5XCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJzZWNvbmRhcnlcIiBsYWJlbD1cIlNlY29uZGFyeVwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwidGVydGlhcnlcIiBsYWJlbD1cIlRlcnRpYXJ5XCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb2xvcjogZGVmYXVsdCAvIGluZm8gLyBzdWNjZXNzIC8gd2FybmluZyAvIGRhbmdlclwiPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJkZWZhdWx0XCIgbGFiZWw9XCJEZWZhdWx0XCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiaW5mb1wiIGxhYmVsPVwiSW5mb1wiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInN1Y2Nlc3NcIiBsYWJlbD1cIlN1Y2Nlc3NcIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJ3YXJuaW5nXCIgbGFiZWw9XCJXYXJuaW5nXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiZGFuZ2VyXCIgbGFiZWw9XCJEYW5nZXJcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpemU6IHNtYWxsIC8gbm9ybWFsIC8gbGFyZ2VcIj5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIGxhYmVsPVwiU21hbGxcIiAvPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cIm5vcm1hbFwiIGxhYmVsPVwiTm9ybWFsXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJsYXJnZVwiIGxhYmVsPVwiTGFyZ2VcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPEJ1dHRvbiBsYWJlbD1cIkRpc2FibGVkXCIgZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpY29uICsgbGFiZWxcIj5cbiAgICAgICAgICA8QnV0dG9uIGljb249e1NUQVJ9IGxhYmVsPVwiV2l0aCBpY29uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjaXJjbGUgKGljb24tb25seSBuZWVkcyBhcmlhLWxhYmVsKVwiPlxuICAgICAgICAgIDxCdXR0b24gY2lyY2xlIGFyaWEtbGFiZWw9XCJTdGFyXCIgbGFiZWw9e1NUQVJ9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaHJlZiDigJQgcmVuZGVycyBhbiA8YT5cIj5cbiAgICAgICAgICA8QnV0dG9uIGhyZWY9XCIjYnV0dG9uXCIgdGllcj1cInNlY29uZGFyeVwiIGxhYmVsPVwiTGluayBidXR0b25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImZ1bGxXaWR0aFwiIHdpZGU+XG4gICAgICAgICAgPEJ1dHRvbiBmdWxsV2lkdGggdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIkZ1bGwtd2lkdGggYnV0dG9uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgey8qIFRoZSB0d28gcm93cyBzaGFyZSBhIGxlZnQgZWRnZSwgc28gdGhlIG9mZnNldCBpcyB0aGUgd2hvbGUgcG9pbnQ6XG4gICAgICAgICAgICB0aGUgZGVmYXVsdCBidXR0b24gYWxpZ25zIGl0cyBCT1ggdG8gdGhhdCBlZGdlIGFuZCBpdHMgbGFiZWwgc2l0c1xuICAgICAgICAgICAgYW4gaW5saW5lLXBhZGRpbmcgZnVydGhlciBpbjsgdGhlIGZsdXNoIG9uZSBwdXRzIHRoZSBMQUJFTCB0aGVyZS4gKi99XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZmx1c2gg4oCUIGxhYmVsIG9uIHRoZSB0ZXh0IGVkZ2UsIGZvciBhIHRlcnRpYXJ5IGJ1dHRvbiBiZXNpZGUgY29weVwiIHdpZGU+XG4gICAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgICBBIGxpbmUgb2YgYm9keSBjb3B5IGZvciB0aGUgbGVmdCBlZGdlLlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPENsdXN0ZXI+XG4gICAgICAgICAgICAgIDxCdXR0b24gdGllcj1cInRlcnRpYXJ5XCIgbGFiZWw9XCJEZWZhdWx0IOKAlCBib3ggYWxpZ25zXCIgLz5cbiAgICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgICAgIDxDbHVzdGVyPlxuICAgICAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJ0ZXJ0aWFyeVwiIGZsdXNoIGxhYmVsPVwiRmx1c2gg4oCUIGxhYmVsIGFsaWduc1wiIC8+XG4gICAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidGV4dFwiLFxuICAgIHRpdGxlOiBcIlRleHRcIixcbiAgICBjb21wb25lbnQ6IFwiVGV4dFwiLFxuICAgIHN1bW1hcnk6IFwiVHlwb2dyYXBoaWMgcHJpbWl0aXZlIOKAlCB0b25lLCBzaXplLCB3ZWlnaHQsIGl0YWxpYywgc3RyaWtldGhyb3VnaCwgYW5kIGxlYWRpbmcuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInRvbmU6IGRlZmF1bHQgLyBtdXRlZCAvIGRhbmdlciAvIHdhcm5pbmcgLyBzdWNjZXNzXCI+XG4gICAgICAgICAgPFRleHQgdG9uZT1cImRlZmF1bHRcIj5EZWZhdWx0PC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPk11dGVkPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJkYW5nZXJcIj5EYW5nZXI8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIndhcm5pbmdcIj5XYXJuaW5nPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJzdWNjZXNzXCI+U3VjY2VzczwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaXplOiB4cyAvIHNtIC8gbWQgLyBsZyAvIHhsXCI+XG4gICAgICAgICAgeyhbXCJ4c1wiLCBcInNtXCIsIFwibWRcIiwgXCJsZ1wiLCBcInhsXCJdIGFzIGNvbnN0KS5tYXAoKHMpID0+IChcbiAgICAgICAgICAgIDxUZXh0IGtleT17c30gc2l6ZT17c30+XG4gICAgICAgICAgICAgIHtzfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIndlaWdodDogbm9ybWFsIC8gbWVkaXVtIC8gYm9sZFwiPlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cIm5vcm1hbFwiPk5vcm1hbDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJtZWRpdW1cIj5NZWRpdW08L1RleHQ+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwiYm9sZFwiPkJvbGQ8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaXRhbGljIC8gc3RyaWtldGhyb3VnaFwiPlxuICAgICAgICAgIDxUZXh0IGl0YWxpYz5JdGFsaWMgZW1waGFzaXM8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3RyaWtldGhyb3VnaD5TdHJ1Y2sgdGhyb3VnaDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2xlYWRpbmc9XCJsb29zZVwiIOKAlCBtdWx0aS1saW5lIGJvZHkgY29weScgd2lkZT5cbiAgICAgICAgICA8VGV4dCBhcz1cInBcIiBsZWFkaW5nPVwibG9vc2VcIj5cbiAgICAgICAgICAgIEEgcGFyYWdyYXBoIHJlbmRlcmVkIHdpdGggbG9vc2UgbGVhZGluZy4gUG9sbHkncyBUZXh0IHByaW1pdGl2ZSBiYWNrcyBldmVyeSBzcGFuLFxuICAgICAgICAgICAgcGFyYWdyYXBoLCBsYWJlbCwgYW5kIGNhcHRpb24gc28gY29uc3VtZXJzIG5ldmVyIHJlYWNoIGZvciBhIHJhdyBzdHlsZSBhdHRyaWJ1dGUgdG8gc2V0XG4gICAgICAgICAgICB0b25lLCBzaXplLCB3ZWlnaHQsIG9yIGxpbmUgaGVpZ2h0LlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb2RlXCIsXG4gICAgdGl0bGU6IFwiQ29kZVwiLFxuICAgIGNvbXBvbmVudDogXCJDb2RlXCIsXG4gICAgc3VtbWFyeTogXCJNb25vc3BhY2UgY29kZSDigJQgaW5saW5lIGJ5IGRlZmF1bHQsIG9yIGEgd3JhcHBlZCBibG9jay5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaW5saW5lXCI+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBSdW4gPENvZGU+cG9sbHkgZ2FsbGVyeTwvQ29kZT4gdG8gb3BlbiB0aGlzIHBhZ2UuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImJsb2NrXCIgd2lkZT5cbiAgICAgICAgICA8Q29kZSBibG9jaz57J2NvbnN0IGdhbGxlcnkgPSB7XFxuICBzZXJ2ZWQ6IFwiYnkgcG9sbHlcIixcXG59Oyd9PC9Db2RlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImxpbmtcIixcbiAgICB0aXRsZTogXCJMaW5rXCIsXG4gICAgY29tcG9uZW50OiBcIkxpbmtcIixcbiAgICBzdW1tYXJ5OiBcIkFuY2hvciBwcmltaXRpdmUg4oCUIHVuZGVybGluZSBieSBkZWZhdWx0LCB3aXRoIGV4dGVybmFsLCBzdWJ0bGUsIGFuZCBkb3dubG9hZCBtb2Rlcy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGVmYXVsdFwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCIjbGlua1wiPkluLXBhZ2UgbGluazwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJleHRlcm5hbCDigJQgbmV3IHRhYiwgcmVsPW5vb3BlbmVyXCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cImh0dHBzOi8vZXhhbXBsZS5jb21cIiBleHRlcm5hbD5cbiAgICAgICAgICAgIEV4dGVybmFsIGxpbmtcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic3VidGxlIOKAlCB1bmRlcmxpbmUgb24gaG92ZXIgb25seVwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCIjbGlua1wiIHN1YnRsZT5cbiAgICAgICAgICAgIFN1YnRsZSBsaW5rXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRvd25sb2FkXCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cImRhdGE6dGV4dC9wbGFpbixnYWxsZXJ5XCIgZG93bmxvYWQ9XCJnYWxsZXJ5LnR4dFwiPlxuICAgICAgICAgICAgRG93bmxvYWQgbGlua1xuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzdXJmYWNlXCIsXG4gICAgdGl0bGU6IFwiU3VyZmFjZVwiLFxuICAgIGNvbXBvbmVudDogXCJTdXJmYWNlXCIsXG4gICAgc3VtbWFyeTogXCJPd25zIHZpc3VhbCBjaHJvbWUg4oCUIGJhY2tncm91bmQsIGJvcmRlciwgcmFkaXVzLCBzaGFkb3csIHBvc2l0aW9uaW5nLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgeyhbXCJwbGFpblwiLCBcInJhaXNlZFwiLCBcInN1bmtlblwiLCBcImJ1YmJsZVwiLCBcImNoaXBcIiwgXCJjYWxsb3V0XCJdIGFzIGNvbnN0KS5tYXAoKHYpID0+IChcbiAgICAgICAgICA8U3BlY2ltZW4ga2V5PXt2fSBjYXB0aW9uPXtgdmFyaWFudD1cIiR7dn1cImB9PlxuICAgICAgICAgICAgPFN1cmZhY2UgdmFyaWFudD17dn0gcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21cIj57dn08L1RleHQ+XG4gICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50OiBcImZsb2F0aW5nXCIgLyBcInN0aWNreS1iYXJcIiBwaW4gdG8gdGhlIHZpZXdwb3J0IOKAlCBvbWl0dGVkIGhlcmUnPlxuICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgUG9zaXRpb25hbCB2YXJpYW50cyBhcmUgcHJldmlld2VkIGluIGNvbnRleHQsIG5vdCBpbiBhIGdyaWQgY2VsbC5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIHsvKiBFcXVhbCBzcXVhcmUgYm94ZXMuIFRoZSBsYWJlbCB1c2VkIHRvIHNpemUgZWFjaCBvbmUsIHNvIHRoZSBsYWRkZXJcbiAgICAgICAgICAgIHdhcyBjb21wYXJlZCBhY3Jvc3MgZml2ZSBkaWZmZXJlbnQgd2lkdGhzICg0Ni8zNS8zNi8yOC8zNSBweCkgYW5kXG4gICAgICAgICAgICBgZnVsbGAgcmVuZGVyZWQgYXMgYSBzdGFkaXVtIHRhbGxlciB0aGFuIGl0IHdhcyB3aWRlIHJhdGhlciB0aGFuIGFcbiAgICAgICAgICAgIGNpcmNsZS4gQSBzcXVhcmUgYm94IG1ha2VzIDk5OTlweCByZWFkIGFzIHRoZSBjaXJjbGUgaXQgaXMuICovfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInJhZGl1czogbm9uZSAvIHNtIC8gbWQgLyBsZyAvIGZ1bGxcIj5cbiAgICAgICAgICB7KFtcIm5vbmVcIiwgXCJzbVwiLCBcIm1kXCIsIFwibGdcIiwgXCJmdWxsXCJdIGFzIGNvbnN0KS5tYXAoKHIpID0+IChcbiAgICAgICAgICAgIDxTdXJmYWNlXG4gICAgICAgICAgICAgIGtleT17cn1cbiAgICAgICAgICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICAgICAgICAgIGJvcmRlcj1cImRlZmF1bHRcIlxuICAgICAgICAgICAgICByYWRpdXM9e3J9XG4gICAgICAgICAgICAgIHdpZHRoPVwiNTZweFwiXG4gICAgICAgICAgICAgIGhlaWdodD1cIjU2cHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TGF5b3V0IGhlaWdodD1cIjEwMCVcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCIganVzdGlmeUl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCI+e3J9PC9UZXh0PlxuICAgICAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJib3JkZXI6IG5vbmUgLyBkZWZhdWx0IC8gc3Ryb25nXCI+XG4gICAgICAgICAgeyhbXCJub25lXCIsIFwiZGVmYXVsdFwiLCBcInN0cm9uZ1wiXSBhcyBjb25zdCkubWFwKChiKSA9PiAoXG4gICAgICAgICAgICA8U3VyZmFjZSBrZXk9e2J9IGJvcmRlcj17Yn0gcmFkaXVzPVwibWRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiPntifTwvVGV4dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgey8qIE9uIHRoZSBzdW5rZW4gY2FyZCBldmVyeSBzcGVjaW1lbiBzaXRzIG9uLCBhIHNvZnQgc2hhZG93IGxhbmRzIGdyZXlcbiAgICAgICAgICAgIG9uIGdyZXkgYW5kIG5vbmUgb2YgdGhlIHRocmVlIHN0ZXBzIHJlYWQuIFRoZXkgYXJlIGNhc3Qgb24gYSBwbGFpblxuICAgICAgICAgICAgc3VyZmFjZSBoZXJlLCBhbmQgZWFjaCBib3ggaXMgc3F1YXJlIGFuZCBlcXVhbCBzbyB0aGUgb25seSB0aGluZ1xuICAgICAgICAgICAgdGhhdCBkaWZmZXJzIGJldHdlZW4gdGhlbSBpcyB0aGUgc2hhZG93LiAqL31cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaGFkb3c6IHNtIC8gbWQgLyBsZ1wiPlxuICAgICAgICAgIDxTdXJmYWNlIGJhY2tncm91bmQ9XCJ2YXIoLS1wb2xseS1zdXJmYWNlKVwiIHJhZGl1cz1cIm1kXCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLWxnKVwiPlxuICAgICAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteGwpXCI+XG4gICAgICAgICAgICAgIHsoW1wic21cIiwgXCJtZFwiLCBcImxnXCJdIGFzIGNvbnN0KS5tYXAoKHMpID0+IChcbiAgICAgICAgICAgICAgICA8U3VyZmFjZSBrZXk9e3N9IHZhcmlhbnQ9XCJyYWlzZWRcIiBzaGFkb3c9e3N9IHJhZGl1cz1cIm1kXCIgd2lkdGg9XCI1NnB4XCIgaGVpZ2h0PVwiNTZweFwiPlxuICAgICAgICAgICAgICAgICAgPExheW91dCBoZWlnaHQ9XCIxMDAlXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiIGp1c3RpZnlJdGVtcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwieHNcIj57c308L1RleHQ+XG4gICAgICAgICAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjYXJkXCIsXG4gICAgdGl0bGU6IFwiQ2FyZFwiLFxuICAgIGNvbXBvbmVudDogXCJDYXJkXCIsXG4gICAgc3VtbWFyeTogXCJDb21wb3VuZCBvZiBTdXJmYWNlcyDigJQgYSByYWlzZWQgUm9vdCB3cmFwcGluZyBIZWFkZXIsIEJvZHksIGFuZCBGb290ZXIgc2xvdHMuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIkNhcmQuUm9vdCA+IEhlYWRlciAvIEJvZHkgLyBGb290ZXJcIiB3aWRlPlxuICAgICAgICA8Q2FyZC5Sb290IHBhZGRpbmc9XCIwXCI+XG4gICAgICAgICAgPENhcmQuSGVhZGVyIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cImJvbGRcIj5DYXJkIGhlYWRlcjwvVGV4dD5cbiAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgIDxDYXJkLkJvZHkgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIFRoZSBib2R5IHNsb3QgY2FycmllcyB0aGUgbWFpbiBjb250ZW50LiBFYWNoIHNsb3QgYWNjZXB0cyB0aGUgZnVsbCBTdXJmYWNlUHJvcHMsIHNvIGl0XG4gICAgICAgICAgICAgIGNhbiBiZSByZXRpbnRlZCBvciByZXBhZGRlZCB3aXRob3V0IHJlYWNoaW5nIHBhc3QgdGhlIHByaW1pdGl2ZS5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L0NhcmQuQm9keT5cbiAgICAgICAgICA8Q2FyZC5Gb290ZXIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiRm9vdGVyIGFjdGlvblwiIC8+XG4gICAgICAgICAgPC9DYXJkLkZvb3Rlcj5cbiAgICAgICAgPC9DYXJkLlJvb3Q+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJza2VsZXRvblwiLFxuICAgIHRpdGxlOiBcIlNrZWxldG9uXCIsXG4gICAgY29tcG9uZW50OiBcIlNrZWxldG9uXCIsXG4gICAgc3VtbWFyeTogXCJTaGltbWVyaW5nIHBsYWNlaG9sZGVyIGZvciBsb2FkaW5nIHN0YXRlcy4gQW5pbWF0aW9uIGhvbm91cnMgcmVkdWNlZC1tb3Rpb24uXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICB7KFtcInRleHRcIiwgXCJyZWN0XCIsIFwiY2lyY2xlXCJdIGFzIGNvbnN0KS5tYXAoKHYpID0+IChcbiAgICAgICAgICA8U3BlY2ltZW4ga2V5PXt2fSBjYXB0aW9uPXtgdmFyaWFudD1cIiR7dn1cImB9PlxuICAgICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9e3Z9IC8+XG4gICAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY3VzdG9tIHdpZHRoICsgaGVpZ2h0XCI+XG4gICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJyZWN0XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PXs2NH0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJvdXRwdXRcIixcbiAgICB0aXRsZTogXCJPdXRwdXRcIixcbiAgICBjb21wb25lbnQ6IFwiT3V0cHV0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiTW9ub3NwYWNlIG91dHB1dCByZWdpb24gZm9yIGNvbW1hbmQgcmVzdWx0cyBvciBsb2dzIOKAlCB3cmFwcywgb3Igc2Nyb2xscyBob3Jpem9udGFsbHkuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRlZmF1bHQg4oCUIHdyYXBzXCIgd2lkZT5cbiAgICAgICAgICA8T3V0cHV0PnBvbGx5IGdhbGxlcnkg4oaSIHNlcnZpbmcgYXQgaHR0cDovL2xvY2FsaG9zdDo0MzIxPC9PdXRwdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2Nyb2xsIOKAlCBzaW5nbGUgbG9uZyBsaW5lIHNjcm9sbHMgaW5zdGVhZCBvZiB3cmFwcGluZ1wiIHdpZGU+XG4gICAgICAgICAgPE91dHB1dCBzY3JvbGw+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJCBwb2xseSBnYWxsZXJ5IC0tYnVpbGQgLi9kaXN0L2dhbGxlcnkgICAjIG9uZSBsb25nIGxpbmUgdGhhdCBzY3JvbGxzIGhvcml6b250YWxseSByYXRoZXIgdGhhbiB3cmFwcGluZyBvbnRvIHRoZSBuZXh0IHJvd1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9PdXRwdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiaHRtbFwiLFxuICAgIHRpdGxlOiBcIkh0bWxcIixcbiAgICBjb21wb25lbnQ6IFwiSHRtbFwiLFxuICAgIHN1bW1hcnk6IFwiUmVuZGVycyBhIHRydXN0ZWQgSFRNTCBzdHJpbmcuIFRoZSBjYWxsZXIgb3ducyBzYW5pdGlzYXRpb24g4oCUIG5ldmVyIHBhc3MgdXNlciBpbnB1dC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaHRtbD17dHJ1c3RlZCBzdHJpbmd9XCIgd2lkZT5cbiAgICAgICAgPEh0bWwgaHRtbD1cIjxzdHJvbmc+Qm9sZDwvc3Ryb25nPiwgPGVtPml0YWxpYzwvZW0+LCBhbmQgYSA8Y29kZT5jb2RlIHNwYW48L2NvZGU+IGZyb20gYSB0cnVzdGVkIG1hcmt1cCBzdHJpbmcuXCIgLz5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNvbGxhcHNpYmxlXCIsXG4gICAgdGl0bGU6IFwiQ29sbGFwc2libGVcIixcbiAgICBjb21wb25lbnQ6IFwiQ29sbGFwc2libGVcIixcbiAgICBzdW1tYXJ5OiBcIk5hdGl2ZSA8ZGV0YWlscz4vPHN1bW1hcnk+IGRpc2Nsb3N1cmUg4oCUIGtleWJvYXJkIGFuZCBzY3JlZW4tcmVhZGVyIGJlaGF2aW91ciBmcmVlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjbG9zZWQgYnkgZGVmYXVsdFwiIHdpZGU+XG4gICAgICAgICAgPENvbGxhcHNpYmxlIHN1bW1hcnk9XCJTaG93IG1vcmUgZGV0YWlsXCI+XG4gICAgICAgICAgICA8VGV4dD5UaGlzIGNvbnRlbnQgaXMgcmV2ZWFsZWQgd2hlbiB0aGUgZGlzY2xvc3VyZSBpcyBvcGVuZWQuPC9UZXh0PlxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGVmYXVsdE9wZW5cIiB3aWRlPlxuICAgICAgICAgIDxDb2xsYXBzaWJsZSBzdW1tYXJ5PVwiT3BlbiBmcm9tIHRoZSBzdGFydFwiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgPFRleHQ+VGhpcyBjb2xsYXBzaWJsZSByZW5kZXJzIGV4cGFuZGVkIG9uIGZpcnN0IHBhaW50LjwvVGV4dD5cbiAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImVkaXRhYmxlIGZpZWxkIGluIHRoZSBzdW1tYXJ5IOKAlCBTcGFjZS9FbnRlciBubyBsb25nZXIgY29sbGFwc2UgaXRcIiB3aWRlPlxuICAgICAgICAgIDxDb2xsYXBzaWJsZVxuICAgICAgICAgICAgc3VtbWFyeT17XG4gICAgICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImdhbGxlcnktY29sbGFwc2libGUtc3VtbWFyeVwiIHBsYWNlaG9sZGVyPVwiVHlwZSBhIHNwYWNlIGhlcmXigKZcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0PlRoZSBoZWFkZXIgZ3VhcmQgY2FuY2VscyB0aGUgZGlzY2xvc3VyZSB0b2dnbGUgZm9yIHRleHQtZW50cnkgZmllbGRzLjwvVGV4dD5cbiAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImxheW91dFwiLFxuICAgIHRpdGxlOiBcIkxheW91dFwiLFxuICAgIGNvbXBvbmVudDogXCJMYXlvdXRcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJUaGUgZ3JpZCBwcmltaXRpdmUuIFByb3BzIG1hcCB0byBDU1MgY3VzdG9tIHByb3BlcnRpZXMg4oCUIG5vIGhhbmQtd3JpdHRlbiBmbGV4IG9yIGdyaWQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nY29sdW1ucz1cIjFmciAxZnIgMWZyXCInIHdpZGU+XG4gICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIDFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2NvbHVtbnM9XCJhdXRvIDFmciBhdXRvXCInIHdpZGU+XG4gICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiYXV0byAxZnIgYXV0b1wiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxCb3g+YXV0bzwvQm94PlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICAgIDxCb3g+YXV0bzwvQm94PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInN0YWNrT25Nb2JpbGUg4oCUIGNvbGxhcHNlcyB0byBvbmUgY29sdW1uIOKJpDY0MHB4XCIgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCIxZnIgMWZyXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgc3RhY2tPbk1vYmlsZT5cbiAgICAgICAgICAgIDxCb3g+U2lkZSBieSBzaWRlLCB0aGVuIHN0YWNrZWQ8L0JveD5cbiAgICAgICAgICAgIDxCb3g+U2lkZSBieSBzaWRlLCB0aGVuIHN0YWNrZWQ8L0JveD5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjbHVzdGVyXCIsXG4gICAgdGl0bGU6IFwiQ2x1c3RlclwiLFxuICAgIGNvbXBvbmVudDogXCJDbHVzdGVyXCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiV3JhcHBpbmcgcm93IG9mIHZhcmlhYmxlLXdpZHRoIGl0ZW1zIOKAlCBjaGlwcywgdGFncywgYnV0dG9uIGdyb3Vwcy4gUmVmbG93cyBhcyBzcGFjZSBydW5zIG91dC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZ2FwIOKAlCBpdGVtcyB3cmFwIG9udG8gbmV3IHJvd3NcIiB3aWRlPlxuICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICB7W1wiR3JvY2VyaWVzXCIsIFwiRXJyYW5kc1wiLCBcIkhvbWVcIiwgXCJHYXJkZW5cIiwgXCJGaW5hbmNlXCIsIFwiVHJhdmVsXCIsIFwiSGVhbHRoXCIsIFwiQWRtaW5cIl0ubWFwKFxuICAgICAgICAgICAgKHRhZykgPT4gKFxuICAgICAgICAgICAgICA8QmFkZ2Uga2V5PXt0YWd9IHZhcmlhbnQ9XCJpbmZvXCI+XG4gICAgICAgICAgICAgICAge3RhZ31cbiAgICAgICAgICAgICAgPC9CYWRnZT5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApfVxuICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0YWJzXCIsXG4gICAgdGl0bGU6IFwiVGFic1wiLFxuICAgIGNvbXBvbmVudDogXCJUYWJzXCIsXG4gICAgc3VtbWFyeTogXCJIb3Jpem9udGFsIG5hdiB3aXRoIGFuIGFjdGl2ZS10YWIgYWNjZW50LiBEaXNwYXRjaGVzIGFuIGFjdGlvbiBwZXIgdGFiLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpbnRlcmFjdGl2ZSDigJQgb25lIHRhYiBkaXNhYmxlZFwiIHdpZGU+XG4gICAgICAgIDxUYWJzXG4gICAgICAgICAgdGFicz17W1xuICAgICAgICAgICAgeyBpZDogXCJvdmVydmlld1wiLCBsYWJlbDogXCJPdmVydmlld1wiIH0sXG4gICAgICAgICAgICB7IGlkOiBcImFjdGl2aXR5XCIsIGxhYmVsOiBcIkFjdGl2aXR5XCIgfSxcbiAgICAgICAgICAgIHsgaWQ6IFwic2V0dGluZ3NcIiwgbGFiZWw6IFwiU2V0dGluZ3NcIiB9LFxuICAgICAgICAgICAgeyBpZDogXCJhcmNoaXZlZFwiLCBsYWJlbDogXCJBcmNoaXZlZFwiLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgIF19XG4gICAgICAgICAgYWN0aXZlVGFiPXskZ2FsbGVyeVRhYi52YWx1ZX1cbiAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OnNldC10YWJcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJHYWxsZXJ5IHRhYnNcIlxuICAgICAgICAvPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY2hlY2tib3hcIixcbiAgICB0aXRsZTogXCJDaGVja2JveFwiLFxuICAgIGNvbXBvbmVudDogXCJDaGVja2JveFwiLFxuICAgIHN1bW1hcnk6IFwiTmF0aXZlIGNoZWNrYm94IGluIGEgbGFiZWwuIEEgcGxhaW4gYm9vbGVhbiBpcyBjb250cm9sbGVkOyBhIFNpZ25hbCBiaW5kcyBpdHNlbGYuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInVuY2hlY2tlZFwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIlVuY2hlY2tlZFwiIGNoZWNrZWQ9e2ZhbHNlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNoZWNrZWRcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJDaGVja2VkXCIgY2hlY2tlZD17dHJ1ZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIkRpc2FibGVkXCIgY2hlY2tlZD17dHJ1ZX0gZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjaGVja2VkPXtzaWduYWx9IOKAlCBjbGljayB0byB0b2dnbGVcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJCb3VuZCB0byBhIHNpZ25hbFwiIGNoZWNrZWQ9eyRnYWxsZXJ5Q2hlY2tlZH0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0b2dnbGVcIixcbiAgICB0aXRsZTogXCJUb2dnbGVcIixcbiAgICBjb21wb25lbnQ6IFwiVG9nZ2xlXCIsXG4gICAgc3VtbWFyeTogXCJTd2l0Y2gtcm9sZSBjaGVja2JveC4gUGFzc2l2ZSDigJQgdGhlIGNhbGxlciBkcml2ZXMgdGhlIGNoZWNrZWQgc3RhdGUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9mZlwiPlxuICAgICAgICAgIDxUb2dnbGUgbGFiZWw9XCJPZmZcIiBjaGVja2VkPXtmYWxzZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvblwiPlxuICAgICAgICAgIDxUb2dnbGUgbGFiZWw9XCJPblwiIGNoZWNrZWQ9e3RydWV9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8VG9nZ2xlIGxhYmVsPVwiRGlzYWJsZWRcIiBjaGVja2VkPXt0cnVlfSBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRleHQtaW5wdXRcIixcbiAgICB0aXRsZTogXCJUZXh0SW5wdXRcIixcbiAgICBjb21wb25lbnQ6IFwiVGV4dElucHV0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiU2lnbmFsLWZyaWVuZGx5IG5hdGl2ZSBpbnB1dC4gQSBwbGFpbiBzdHJpbmcgaXMgdW5jb250cm9sbGVkOyBhIFNpZ25hbCBpcyBjb250cm9sbGVkLiBcIiArXG4gICAgICBcImlucHV0VHlwZSBwaWNrcyB0aGUgbmF0aXZlIGtleWJvYXJkIGFuZCB2YWxpZGF0aW9uOyBlcnJvciByZW5kZXJzIGEgbGlua2VkIG1lc3NhZ2UuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudD1cInNpbmdsZVwiIHdpdGggcGxhY2Vob2xkZXInPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tc2luZ2xlXCIgcGxhY2Vob2xkZXI9XCJUeXBlIGhlcmXigKZcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudD1cIm11bHRpXCInPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tbXVsdGlcIiB2YXJpYW50PVwibXVsdGlcIiByb3dzPXszfSBwbGFjZWhvbGRlcj1cIk11bHRpcGxlIGxpbmVz4oCmXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2lucHV0VHlwZT1cImVtYWlsXCInPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tZW1haWxcIiBpbnB1dFR5cGU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiYWRhQGV4YW1wbGUuY29tXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2lucHV0VHlwZT1cIm51bWJlclwiIHdpdGggbWluL21heC9zdGVwJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLW51bWJlclwiIGlucHV0VHlwZT1cIm51bWJlclwiIG1pbj17MH0gbWF4PXsxMH0gc3RlcD17MX0gdmFsdWU9XCI1XCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJlcnJvciDigJQgbGlua2VkIG1lc3NhZ2UsIG1hcmtzIGludmFsaWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWVycm9yXCIgdmFsdWU9XCJub3QtYW4tZW1haWxcIiBlcnJvcj1cIkVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy5cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImludmFsaWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWludmFsaWRcIiB2YWx1ZT1cIm5vdC1hbi1lbWFpbFwiIGludmFsaWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tZGlzYWJsZWRcIiB2YWx1ZT1cIkRpc2FibGVkXCIgZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJyZWFkT25seVwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tcmVhZG9ubHlcIiB2YWx1ZT1cIlJlYWQgb25seVwiIHJlYWRPbmx5IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidmFsdWU9e3NpZ25hbH0g4oCUIGNvbnRyb2xsZWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWNvbnRyb2xsZWRcIiB2YWx1ZT17JGdhbGxlcnlUZXh0fSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInNlbGVjdFwiLFxuICAgIHRpdGxlOiBcIlNlbGVjdFwiLFxuICAgIGNvbXBvbmVudDogXCJTZWxlY3RcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJEcm9wZG93biBvZiBvcHRpb25zIGJvdW5kIHRvIGEgU2lnbmFsPFNldD4uIFNpbmdsZSByZXBsYWNlcywgbXVsdGkgdG9nZ2xlcy4gXCIgK1xuICAgICAgJ2NsZWFyYWJsZSBwcmVwZW5kcyBhbiBcIkFueSDigKZcIiByb3cgc28gYW4gb3B0aW9uYWwgZmlsdGVyIGhhcyBhIHBhdGggYmFjayB0byB1bnNldC4nLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaW5nbGUtc2VsZWN0XCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQaWNrIG9uZVwiXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiY29tZXRcIiwgbGFiZWw6IFwiQ29tZXRcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm5lYnVsYVwiLCBsYWJlbDogXCJOZWJ1bGFcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcInF1YXNhclwiLCBsYWJlbDogXCJRdWFzYXJcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdFNpbmdsZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNsZWFyYWJsZSDigJQgc2luZ2xlLXNlbGVjdCB3aXRoIGFuIOKAnEFueSDigKbigJ0gcm93XCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJGaWx0ZXIgYnlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBbnkgb2JqZWN0XCJcbiAgICAgICAgICAgIGNsZWFyYWJsZVxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImNvbWV0XCIsIGxhYmVsOiBcIkNvbWV0XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJuZWJ1bGFcIiwgbGFiZWw6IFwiTmVidWxhXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJxdWFzYXJcIiwgbGFiZWw6IFwiUXVhc2FyXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBzZWxlY3RlZD17JGdhbGxlcnlTZWxlY3RDbGVhcmFibGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJtdWx0aVNlbGVjdFwiPlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUGljayBzZXZlcmFsXCJcbiAgICAgICAgICAgIG11bHRpU2VsZWN0XG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiY29tZXRcIiwgbGFiZWw6IFwiQ29tZXRcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm5lYnVsYVwiLCBsYWJlbDogXCJOZWJ1bGFcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcInF1YXNhclwiLCBsYWJlbDogXCJRdWFzYXJcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdE11bHRpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibG9uZyBsYWJlbCDigJQgdHJ1bmNhdGVzLCBjYXJldCBzdGF5cyBvbiB0aGUgcm93IChwb2xseSMxODApXCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LXNlbGVjdC1sb25nXCJcbiAgICAgICAgICAgIGxhYmVsPVwiTG9uZyBsYWJlbFwiXG4gICAgICAgICAgICBvcHRpb25zPXtMT05HX1NFTEVDVF9PUFRJT05TfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0TG9uZ31cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImZpbGUtaW5wdXRcIixcbiAgICB0aXRsZTogXCJGaWxlSW5wdXRcIixcbiAgICBjb21wb25lbnQ6IFwiRmlsZUlucHV0XCIsXG4gICAgc3VtbWFyeTogXCJTdHlsZWQgd3JhcHBlciBvdmVyIGEgbmF0aXZlIGZpbGUgcGlja2VyLiBIYW5kcyB0aGUgY2hvc2VuIEZpbGVMaXN0IHRvIG9uRmlsZXMuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9uRmlsZXMg4oCUIHBpY2sgYSBmaWxlXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJDaG9vc2UgZmlsZVwiXG4gICAgICAgICAgICBvbkZpbGVzPXsoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgJGdhbGxlcnlGaWxlTmFtZS52YWx1ZSA9IGZpbGVzWzBdPy5uYW1lID8/IFwi4oCUXCI7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiYWNjZXB0ICsgbXVsdGlwbGVcIj5cbiAgICAgICAgICA8RmlsZUlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkNob29zZSBpbWFnZXNcIlxuICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgb25GaWxlcz17KGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICRnYWxsZXJ5RmlsZU5hbWUudmFsdWUgPSBmaWxlc1swXT8ubmFtZSA/PyBcIuKAlFwiO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJEaXNhYmxlZFwiXG4gICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgb25GaWxlcz17KCkgPT4ge1xuICAgICAgICAgICAgICAvKiBkaXNhYmxlZCDigJQgbmV2ZXIgaW52b2tlZCAqL1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxhc3QgcGlja2VkIGZpbGVcIiB3aWRlPlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgTGFzdCBwaWNrZWQ6IDxDb2RlPnskZ2FsbGVyeUZpbGVOYW1lLnZhbHVlfTwvQ29kZT5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiZHJvcGRvd25cIixcbiAgICB0aXRsZTogXCJEcm9wZG93blwiLFxuICAgIGNvbXBvbmVudDogXCJEcm9wZG93blwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkxvdy1sZXZlbCB0cmlnZ2VyICsgcG9wb3ZlciBwbHVtYmluZy4gVGhlIHByaW1pdGl2ZSBpdHNlbGYgaGFzIG5vIGNocm9tZSDigJQgXCIgK1xuICAgICAgXCJjb25zdW1lcnMgKFNlbGVjdCwgQWN0aW9uU2VsZWN0KSB3cmFwIGl0IHdpdGggdGhlIHN0eWxlZCB0cmlnZ2VyIGFuZCBjYXJldC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidHJpZ2dlciBkcmVzc2VkIHZpYSB0cmlnZ2VyQ2xhc3NOYW1lICsgZGF0YS1vcGVuXCI+XG4gICAgICAgIDxEcm9wZG93blxuICAgICAgICAgIGlzT3Blbj17JGdhbGxlcnlEcm9wZG93bk9wZW59XG4gICAgICAgICAgdHJpZ2dlckNsYXNzTmFtZT1cImdhbGxlcnktZHJvcGRvd24tdHJpZ2dlclwiXG4gICAgICAgICAgdHJpZ2dlcj17XG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8c3Bhbj5PcGVuIG1lbnU8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2FsbGVyeS1kcm9wZG93bi1jYXJldFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgIDxUZXh0PkZpcnN0IGl0ZW08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD5TZWNvbmQgaXRlbTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0PlRoaXJkIGl0ZW08L1RleHQ+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvRHJvcGRvd24+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJhY3Rpb24taW5wdXRcIixcbiAgICB0aXRsZTogXCJBY3Rpb25JbnB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25JbnB1dFwiLFxuICAgIHN1bW1hcnk6IFwiRHVhbC1tb2RlIHZpZXcvZWRpdCBmaWVsZC4gQ2xpY2sgdG8gZWRpdDsgY29tbWl0IGRpc3BhdGNoZXMgYW4gYWN0aW9uLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3NhdmVPbj1cImJsdXJcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkNsaWNrIHRvIGVkaXQsIGNvbW1pdHMgb24gYmx1clwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBzYXZlT249XCJibHVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIkJsdXItY29tbWl0IGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdzYXZlT249XCJlbnRlclwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiRWRpdCBhbmQgcHJlc3MgRW50ZXJcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiZW50ZXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiRW50ZXItY29tbWl0IGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdpbnB1dFR5cGU9XCJkYXRlXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCIyMDI2LTA1LTIyXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIGlucHV0VHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJEYXRlIGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwibXVsdGlcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkEgbG9uZ2VyLCBtdWx0aS1saW5lIHZhbHVlXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJtdWx0aVwiXG4gICAgICAgICAgICBzYXZlT249XCJibHVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIk11bHRpLWxpbmUgZGVtb1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsYXN0IGNvbW1pdHRlZCB2YWx1ZVwiIHdpZGU+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBMYXN0IGNvbW1pdHRlZDogPENvZGU+eyRnYWxsZXJ5Q29tbWl0dGVkLnZhbHVlfTwvQ29kZT5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYWN0aW9uLXNlbGVjdFwiLFxuICAgIHRpdGxlOiBcIkFjdGlvblNlbGVjdFwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25TZWxlY3RcIixcbiAgICBzdW1tYXJ5OiBcIlNpbmdsZS1zZWxlY3QgdGhhdCBjb21taXRzIGEgcGxhaW4gc3RyaW5nIHZhbHVlIHRocm91Z2ggdGhlIGFjdGlvbiBzeXN0ZW0uXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbW1pdHMgdmlhIGFjdGlvblwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUHJpb3JpdHlcIlxuICAgICAgICAgICAgdmFsdWU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImxvd1wiLCBsYWJlbDogXCJMb3dcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm1lZGl1bVwiLCBsYWJlbDogXCJNZWRpdW1cIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcImhpZ2hcIiwgbGFiZWw6IFwiSGlnaFwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWQg4oCUIHJlbmRlcnMgYXMgc3RhdGljIHRleHRcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlByaW9yaXR5XCJcbiAgICAgICAgICAgIHZhbHVlPVwiaGlnaFwiXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibG93XCIsIGxhYmVsOiBcIkxvd1wiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibWVkaXVtXCIsIGxhYmVsOiBcIk1lZGl1bVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiaGlnaFwiLCBsYWJlbDogXCJIaWdoXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibG9uZyBsYWJlbCDigJQgdHJ1bmNhdGVzLCBjYXJldCBzdGF5cyBvbiB0aGUgcm93IChwb2xseSMxODApXCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LWFjdGlvbi1zZWxlY3QtbG9uZ1wiXG4gICAgICAgICAgICBsYWJlbD1cIkxvbmcgbGFiZWxcIlxuICAgICAgICAgICAgdmFsdWU9XCJsb25nXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsb25nIGxhYmVsLCBkaXNhYmxlZCDigJQgb25lIHJvdyBhdCB0aGUgY29udHJvbCBoZWlnaHRcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktYWN0aW9uLXNlbGVjdC1sb25nLWRpc2FibGVkXCJcbiAgICAgICAgICAgIGxhYmVsPVwiTG9uZyBsYWJlbFwiXG4gICAgICAgICAgICB2YWx1ZT1cImxvbmdcIlxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJlbXB0eSDigJQgdGhlIHBsYWNlaG9sZGVyIGlzIHRoZSBzYW1lIGJveCBhcyBhIHZhbHVlXCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LWFjdGlvbi1zZWxlY3QtbG9uZy1lbXB0eVwiXG4gICAgICAgICAgICBsYWJlbD1cIkxvbmcgcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgdmFsdWU9XCJcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e0xPTkdfU0VMRUNUX0xBQkVMfVxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIndpZGUg4oCUIHNob3J0IGxhYmVsLCBzdGlsbCBvbmUgY2VudHJlZCByb3dcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktYWN0aW9uLXNlbGVjdC13aWRlXCJcbiAgICAgICAgICAgIGxhYmVsPVwiV2lkZVwiXG4gICAgICAgICAgICB2YWx1ZT1cInNob3J0XCJcbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICB3aWRlXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJhY3Rpb24tZm9ybVwiLFxuICAgIHRpdGxlOiBcIkFjdGlvbkZvcm1cIixcbiAgICBjb21wb25lbnQ6IFwiQWN0aW9uRm9ybVwiLFxuICAgIHN1bW1hcnk6IFwiV3JhcHMgYSBuYXRpdmUgZm9ybSB3aXRoIHRoZSBhY3Rpb24gcGF0dGVybiDigJQgc3VibWl0IGRpc3BhdGNoZXMgdGhlIGZvcm0gaGFuZGxlci5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZm9ybSB3aXRoIFRleHRJbnB1dCBmaWVsZHMgKyBhIHN1Ym1pdCBCdXR0b25cIiB3aWRlPlxuICAgICAgICA8QWN0aW9uRm9ybSBmb3JtPXtnYWxsZXJ5Rm9ybX0gYXJpYS1sYWJlbD1cIkdhbGxlcnkgZGVtbyBmb3JtXCI+XG4gICAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICAgIDxUZXh0IGFzPVwibGFiZWxcIiBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIiBodG1sRm9yPVwiZ2FsbGVyeS1mb3JtLW5hbWVcIj5cbiAgICAgICAgICAgICAgRnVsbCBuYW1lXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dElucHV0IGlkPVwiZ2FsbGVyeS1mb3JtLW5hbWVcIiBuYW1lPVwiZnVsbE5hbWVcIiBwbGFjZWhvbGRlcj1cIkFkYSBMb3ZlbGFjZVwiIC8+XG4gICAgICAgICAgICA8VGV4dCBhcz1cImxhYmVsXCIgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCIgaHRtbEZvcj1cImdhbGxlcnktZm9ybS1lbWFpbFwiPlxuICAgICAgICAgICAgICBFbWFpbFxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHRJbnB1dCBpZD1cImdhbGxlcnktZm9ybS1lbWFpbFwiIG5hbWU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiYWRhQGV4YW1wbGUuY29tXCIgLz5cbiAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIHRpZXI9XCJwcmltYXJ5XCIgY29sb3I9XCJpbmZvXCIgbGFiZWw9XCJTdWJtaXRcIiAvPlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L0FjdGlvbkZvcm0+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJtb2RhbFwiLFxuICAgIHRpdGxlOiBcIk1vZGFsXCIsXG4gICAgY29tcG9uZW50OiBcIk1vZGFsXCIsXG4gICAgc3VtbWFyeTogXCJDb21wb3VuZCBkaWFsb2cg4oCUIGZvY3VzIHRyYXAsIEVzY2FwZSBoYW5kbGluZywgcG9ydGFsLCBzY3JvbGwgbG9jay5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib3BlbnMgYSBwb3J0YWxsZWQgZGlhbG9nXCI+XG4gICAgICAgIDxCdXR0b24gdGllcj1cInByaW1hcnlcIiBkYXRhLWFjdGlvbj1cImdhbGxlcnk6bW9kYWwtb3BlblwiIGxhYmVsPVwiT3BlbiBtb2RhbFwiIC8+XG4gICAgICAgIDxNb2RhbC5Sb290XG4gICAgICAgICAgd2hlbj17JGdhbGxlcnlNb2RhbE9wZW59XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgJGdhbGxlcnlNb2RhbE9wZW4udmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZW1vIG1vZGFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxNb2RhbC5CYWNrZHJvcCAvPlxuICAgICAgICAgIDxNb2RhbC5Db250ZW50PlxuICAgICAgICAgICAgPE1vZGFsLkhlYWRlcj5cbiAgICAgICAgICAgICAgPE1vZGFsLlRpdGxlPk1vZGFsIHRpdGxlPC9Nb2RhbC5UaXRsZT5cbiAgICAgICAgICAgIDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgPE1vZGFsLkJvZHk+XG4gICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgIEZvY3VzIGlzIHRyYXBwZWQgaW5zaWRlIHRoZSBkaWFsb2csIEVzY2FwZSBjbG9zZXMgaXQsIHRoZSBiYWNrZHJvcCBjbGljayBjbG9zZXMgaXQsXG4gICAgICAgICAgICAgICAgYW5kIHRoZSBib2R5IHNjcm9sbCBpcyBsb2NrZWQgd2hpbGUgaXQgaXMgb3Blbi5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Nb2RhbC5Cb2R5PlxuICAgICAgICAgICAgPE1vZGFsLkZvb3Rlcj5cbiAgICAgICAgICAgICAgPE1vZGFsLkNsb3NlPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIkRvbmVcIiAvPlxuICAgICAgICAgICAgICA8L01vZGFsLkNsb3NlPlxuICAgICAgICAgICAgPC9Nb2RhbC5Gb290ZXI+XG4gICAgICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgICA8L01vZGFsLlJvb3Q+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb25maXJtLWRpYWxvZ1wiLFxuICAgIHRpdGxlOiBcIkNvbmZpcm1EaWFsb2dcIixcbiAgICBjb21wb25lbnQ6IFwiQ29uZmlybURpYWxvZ1wiLFxuICAgIHN1bW1hcnk6IFwiUHJvbWlzZS1yZXR1cm5pbmcgY29uZmlybWF0aW9uLiBjb25maXJtKCkgcmVzb2x2ZXMgdHJ1ZSBvciBmYWxzZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY29uZmlybSgpIOKAlCBzdGFuZGFyZFwiPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInNlY29uZGFyeVwiIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTpjb25maXJtXCIgbGFiZWw9XCJDb25maXJtIGFuIGFjdGlvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY29uZmlybSh7IGRhbmdlcjogdHJ1ZSB9KVwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OmNvbmZpcm1cIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tZGFuZ2VyPVwidHJ1ZVwiXG4gICAgICAgICAgICBsYWJlbD1cIkNvbmZpcm0gYSBkZWxldGlvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0b2FzdFwiLFxuICAgIHRpdGxlOiBcIlRvYXN0XCIsXG4gICAgY29tcG9uZW50OiBcIlRvYXN0XCIsXG4gICAgc3VtbWFyeTogXCJSZW5kZXJzIHRoZSBnbG9iYWwgZXJyb3JTdGF0ZSBzaWduYWwuIFNldmVyaXR5IHNldHMgdGhlIGFyaWEtbGl2ZSBwb2xpdGVuZXNzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJwdXNoIGEgdG9hc3QgYXQgZWFjaCBzZXZlcml0eVwiIHdpZGU+XG4gICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJpbmZvXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTp0b2FzdFwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1zZXZlcml0eT1cImluZm9cIlxuICAgICAgICAgICAgbGFiZWw9XCJJbmZvIHRvYXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuaW5nXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTp0b2FzdFwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1zZXZlcml0eT1cIndhcm5pbmdcIlxuICAgICAgICAgICAgbGFiZWw9XCJXYXJuaW5nIHRvYXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnRvYXN0XCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLXNldmVyaXR5PVwiZXJyb3JcIlxuICAgICAgICAgICAgbGFiZWw9XCJFcnJvciB0b2FzdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwib3ZlcmxheS1yb290XCIsXG4gICAgdGl0bGU6IFwiT3ZlcmxheVJvb3RcIixcbiAgICBjb21wb25lbnQ6IFwiT3ZlcmxheVJvb3RcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJJbmZyYXN0cnVjdHVyZSwgbm90IGEgdmlzdWFsIGNvbnRyb2wuIE1vdW50IGl0IG9uY2UgbmVhciB0aGUgYXBwIHJvb3Q7IE1vZGFsLCBUb2FzdCwgYW5kIFwiICtcbiAgICAgIFwiQ29uZmlybURpYWxvZyBwb3J0YWwgaW50byBpdC4gVGhlIGdhbGxlcnkgc2hlbGwgYWxyZWFkeSBtb3VudHMgb25lIOKAlCB0aGlzIHNlY3Rpb24gZG9jdW1lbnRzIGl0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJtb3VudGVkIG9uY2UgYXQgdGhlIGFwcCByb290XCIgd2lkZT5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgPENvZGU+e1wiPE92ZXJsYXlSb290IC8+XCJ9PC9Db2RlPiByZW5kZXJzIHRoZSBwb3J0YWwgdGFyZ2V0IHRoZSBvdmVybGF5IHByaW1pdGl2ZXMgbmVlZC5cbiAgICAgICAgICBXaXRob3V0IGl0LCB0aGUgTW9kYWwgLyBUb2FzdCAvIENvbmZpcm1EaWFsb2cgc3BlY2ltZW5zIGFib3ZlIHdvdWxkIGhhdmUgbm93aGVyZSB0b1xuICAgICAgICAgIHJlbmRlci4gSXQgZHJhd3Mgbm90aGluZyBpdHNlbGY7IHRoZSBnYWxsZXJ5IHNoZWxsIG1vdW50cyB0aGUgc2luZ2xlIGxpdmUgaW5zdGFuY2UuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbl07XG4iLAogICAgIi8qKlxuICogVGhlIGdhbGxlcnkgYXBwIHJvb3Qg4oCUIGEgc2luZ2xlIHNjcm9sbGFibGUgcGFnZSBjYXRhbG9ndWluZyBldmVyeSBwb2xseS11aVxuICogcHJpbWl0aXZlIGluIGl0cyBjb25maWd1cmF0aW9ucy4gQW4gaW4tcGFnZSBuYXYganVtcHMgYmV0d2VlbiBzZWN0aW9uczsgYVxuICogdGhlbWUgdG9nZ2xlIGZvcmNlcyBsaWdodC9kYXJrIG9uIHRoZSBwYW5lbCBzdWJ0cmVlIHZpYSBgZGF0YS1wb2xseS10aGVtZWBcbiAqIHNvIGJvdGggcGFsZXR0ZXMgY2FuIGJlIGluc3BlY3RlZCB3aXRob3V0IGNoYW5naW5nIHRoZSBPUyBzZXR0aW5nLlxuICpcbiAqIFRoZSBvdmVybGF5IGhvc3RzIChPdmVybGF5Um9vdCAvIFRvYXN0LlZpZXdwb3J0IC8gQ29uZmlybURpYWxvZy5Ib3N0KSBhcmVcbiAqIG1vdW50ZWQgaGVyZSBvbmNlLCBzbyB0aGUgTW9kYWwsIFRvYXN0LCBhbmQgQ29uZmlybURpYWxvZyBzcGVjaW1lbnMgaGF2ZSBhXG4gKiBwb3J0YWwgdGFyZ2V0IOKAlCB0aGUgc2FtZSB3aXJpbmcgYSByZWFsIGNvbnN1bWVyIGFwcCBkb2VzIGF0IGl0cyByb290LlxuICovXG5cbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2x1c3RlcixcbiAgQ29uZmlybURpYWxvZyxcbiAgTGF5b3V0LFxuICBPdmVybGF5Um9vdCxcbiAgU3VyZmFjZSxcbiAgVGV4dCxcbiAgVG9hc3QsXG59IGZyb20gXCIuLi8uLi8uLi9zcmMvcG9sbHktdWlcIjtcbmltcG9ydCB7IFRIRU1FUyB9IGZyb20gXCIuL2FjdGlvbnMudHNcIjtcbmltcG9ydCB7IEdBTExFUllfU0VDVElPTlMsIHR5cGUgR2FsbGVyeVNlY3Rpb24gfSBmcm9tIFwiLi9zcGVjaW1lbnMudHN4XCI7XG5pbXBvcnQgeyAkZ2FsbGVyeVRoZW1lIH0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5cbi8qKiBBIGNhcGl0YWxpc2VkIGxhYmVsIGZvciBhIHRoZW1lIG9wdGlvbi4gKi9cbmZ1bmN0aW9uIHRoZW1lTGFiZWwodGhlbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0aGVtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRoZW1lLnNsaWNlKDEpO1xufVxuXG4vKiogT25lIGNhdGFsb2d1ZWQgY29tcG9uZW50OiBhIGxhYmVsbGVkIGxhbmRtYXJrIHdpdGggYSBncmlkIG9mIHNwZWNpbWVucy4gKi9cbmZ1bmN0aW9uIFNlY3Rpb24ocHJvcHM6IHsgc2VjdGlvbjogR2FsbGVyeVNlY3Rpb24gfSkge1xuICBjb25zdCB7IHNlY3Rpb24gfSA9IHByb3BzO1xuICBjb25zdCBoZWFkaW5nSWQgPSBgJHtzZWN0aW9uLmlkfS1oZWFkaW5nYDtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgYXM9XCJzZWN0aW9uXCJcbiAgICAgIGlkPXtzZWN0aW9uLmlkfVxuICAgICAgdmFyaWFudD1cInBsYWluXCJcbiAgICAgIGNsYXNzTmFtZT1cImdhbGxlcnktc2VjdGlvblwiXG4gICAgICBhcmlhLWxhYmVsbGVkYnk9e2hlYWRpbmdJZH1cbiAgICA+XG4gICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICA8aDIgaWQ9e2hlYWRpbmdJZH0gY2xhc3M9XCJnYWxsZXJ5LXNlY3Rpb24tdGl0bGVcIj5cbiAgICAgICAgICB7c2VjdGlvbi50aXRsZX1cbiAgICAgICAgPC9oMj5cbiAgICAgICAgPFRleHQgYXM9XCJwXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAge3NlY3Rpb24uc3VtbWFyeX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8TGF5b3V0XG4gICAgICAgICAgY29sdW1ucz1cInJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgMTRyZW0pLCAxZnIpKVwiXG4gICAgICAgICAgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtzZWN0aW9uLnJlbmRlcigpfVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEdhbGxlcnlBcHAoKSB7XG4gIGNvbnN0IHRoZW1lID0gJGdhbGxlcnlUaGVtZS52YWx1ZTtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICBwYWRkaW5nPVwiY2xhbXAodmFyKC0tcG9sbHktc3BhY2Utc20pLCAzdncsIHZhcigtLXBvbGx5LXNwYWNlLXhsKSlcIlxuICAgICAgZGF0YS1nYWxsZXJ5LXBhbmVsPVwidHJ1ZVwiXG4gICAgICBkYXRhLXBvbGx5LXRoZW1lPXt0aGVtZSA9PT0gXCJzeXN0ZW1cIiA/IHVuZGVmaW5lZCA6IHRoZW1lfVxuICAgID5cbiAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UtbGcpXCI+XG4gICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwiZ2FsbGVyeS10aXRsZVwiPlBvbGx5IFVJIGdhbGxlcnk8L2gxPlxuICAgICAgICAgIDxUZXh0IGFzPVwicFwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgRXZlcnkgPFRleHQgd2VpZ2h0PVwibWVkaXVtXCI+QGZhaXJmb3gvcG9sbHkvdWk8L1RleHQ+IHByaW1pdGl2ZSwgaW4gaXRzIGNvbmZpZ3VyYXRpb25zIOKAlFxuICAgICAgICAgICAgYSByZWZlcmVuY2UgZm9yIGJ1aWxkaW5nIHBvbGx5IGFwcHMsIGFuZCBhIHNpbmdsZSBzdXJmYWNlIGZvciBhY2Nlc3NpYmlsaXR5IGFuZFxuICAgICAgICAgICAgdmlzdWFsLXJlZ3Jlc3Npb24gY2hlY2tzLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9MYXlvdXQ+XG5cbiAgICAgICAgPFN1cmZhY2UgdmFyaWFudD1cImNhbGxvdXRcIiByYWRpdXM9XCJtZFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiBhbGlnbj1cImNlbnRlclwiPlxuICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICAgIFRoZW1lXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICB7VEhFTUVTLm1hcCgodCkgPT4gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXt0fVxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgdGllcj17dCA9PT0gdGhlbWUgPyBcInByaW1hcnlcIiA6IFwidGVydGlhcnlcIn1cbiAgICAgICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6c2V0LXRoZW1lXCJcbiAgICAgICAgICAgICAgICBkYXRhLWFjdGlvbi10aGVtZT17dH1cbiAgICAgICAgICAgICAgICBsYWJlbD17dGhlbWVMYWJlbCh0KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgPC9TdXJmYWNlPlxuXG4gICAgICAgIDxuYXYgYXJpYS1sYWJlbD1cIkNvbXBvbmVudHNcIj5cbiAgICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgIHtHQUxMRVJZX1NFQ1RJT05TLm1hcCgoc2VjdGlvbikgPT4gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXtzZWN0aW9uLmlkfVxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgdGllcj1cInRlcnRpYXJ5XCJcbiAgICAgICAgICAgICAgICBocmVmPXtgIyR7c2VjdGlvbi5pZH1gfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtzZWN0aW9uLnRpdGxlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICA8L25hdj5cblxuICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhsKVwiPlxuICAgICAgICAgIHtHQUxMRVJZX1NFQ1RJT05TLm1hcCgoc2VjdGlvbikgPT4gKFxuICAgICAgICAgICAgPFNlY3Rpb24ga2V5PXtzZWN0aW9uLmlkfSBzZWN0aW9uPXtzZWN0aW9ufSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvTGF5b3V0PlxuXG4gICAgICB7LyogTW91bnRlZCBvbmNlIHNvIHRoZSBvdmVybGF5IHNwZWNpbWVucyBoYXZlIGEgcG9ydGFsIHRhcmdldC4gKi99XG4gICAgICA8T3ZlcmxheVJvb3QgLz5cbiAgICAgIDxUb2FzdC5WaWV3cG9ydCAvPlxuICAgICAgPENvbmZpcm1EaWFsb2cuSG9zdCAvPlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBUaGUgZ2FsbGVyeSdzIGJyb3dzZXIgZW50cnkgcG9pbnQuIEJ1bmRsZWQgYnkgc2VydmVyLnRzIChvbmUgQnVuLmJ1aWxkIHBhc3MpXG4gKiDigJQgaXRzIHRyYW5zaXRpdmUgYC5tb2R1bGUuY3NzYCBpbXBvcnRzIHBsdXMgdGhlIGdsb2JhbCBzdHlsZXNoZWV0cyBiZWxvdyBjb21lXG4gKiBvdXQgYXMgYSBzaW5nbGUgQ1NTIGFydGlmYWN0IHRoZSBzZXJ2ZXIgc2VydmVzIGFsb25nc2lkZSB0aGlzIHNjcmlwdC5cbiAqXG4gKiBCb290IG1pcnJvcnMgYSByZWFsIGNvbnN1bWVyIGFwcDogYmluZCB0aGUgZGVtbyBmb3JtLCBpbnN0YWxsIHRoZSBkb2N1bWVudFxuICogZXZlbnQgZGVsZWdhdGlvbiB0aGF0IHJvdXRlcyBgZGF0YS1hY3Rpb25gIGNsaWNrcy9zdWJtaXRzIGludG8gdGhlIGdhbGxlcnknc1xuICogYWN0aW9uIHJlZ2lzdHJ5LCB0aGVuIHJlbmRlci4gVGhlIG92ZXJsYXkgaG9zdHMgbGl2ZSBpbnNpZGUgPEdhbGxlcnlBcHAgLz4uXG4gKi9cblxuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgaW5zdGFsbEV2ZW50RGVsZWdhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgR0FMTEVSWV9BQ1RJT05TIH0gZnJvbSBcIi4vYWN0aW9ucy50c1wiO1xuaW1wb3J0IHsgR2FsbGVyeUFwcCB9IGZyb20gXCIuL2dhbGxlcnktYXBwLnRzeFwiO1xuaW1wb3J0IHsgdHlwZSBHYWxsZXJ5U3RvcmVzLCBnYWxsZXJ5Rm9ybSB9IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuaW1wb3J0IFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpL3RoZW1lLmNzc1wiO1xuaW1wb3J0IFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpL3N0eWxlcy5jc3NcIjtcbmltcG9ydCBcIi4vZ2FsbGVyeS5jc3NcIjtcblxuY29uc3Qgc3RvcmVzOiBHYWxsZXJ5U3RvcmVzID0ge307XG5nYWxsZXJ5Rm9ybS5iaW5kU3RvcmVzKCgpID0+IHN0b3Jlcyk7XG5cbmluc3RhbGxFdmVudERlbGVnYXRpb24oYXN5bmMgKGRpc3BhdGNoKSA9PiB7XG4gIGNvbnN0IGhhbmRsZXIgPSBHQUxMRVJZX0FDVElPTlNbZGlzcGF0Y2guYWN0aW9uXTtcbiAgaWYgKGhhbmRsZXIpIHtcbiAgICBhd2FpdCBoYW5kbGVyKHtcbiAgICAgIHN0b3JlcyxcbiAgICAgIGV2ZW50OiBkaXNwYXRjaC5ldmVudCxcbiAgICAgIGVsZW1lbnQ6IGRpc3BhdGNoLmVsZW1lbnQsXG4gICAgICBkYXRhOiBkaXNwYXRjaC5kYXRhLFxuICAgIH0pO1xuICB9XG59KTtcblxuY29uc3Qgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBw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LEVBQUUsTUFBTSxRQUFRLElBQUUsR0FBRSxJQUFFLEVBQUUsR0FBRSxFQUFFLENBQUMsSUFBRSxJQUFFLENBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsRUFBRSxPQUFLLEVBQUUsS0FBSSxFQUFFLE9BQUssTUFBSyxFQUFFLElBQUksVUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFJLEVBQUUsS0FBRztBQUFBLFFBQU0sT0FBTSxHQUFFO0FBQUEsUUFBQyxJQUFHLEVBQUUsTUFBSSxNQUFLLEtBQVMsS0FBTjtBQUFBLFVBQVEsSUFBRyxFQUFFLE1BQUs7QUFBQSxZQUFDLEtBQUksRUFBRSxPQUFLLElBQUUsTUFBSSxJQUFJLEtBQU0sRUFBRSxZQUFMLEtBQWUsRUFBRTtBQUFBLGNBQWEsSUFBRSxFQUFFO0FBQUEsWUFBWSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUcsTUFBSyxFQUFFLE1BQUk7QUFBQSxVQUFDLEVBQUs7QUFBQSxZQUFDLEtBQUksSUFBRSxFQUFFLE9BQU87QUFBQSxjQUFLLEVBQUUsRUFBRSxFQUFFO0FBQUEsWUFBRSxFQUFFLENBQUM7QUFBQTtBQUFBLFFBQU87QUFBQSxZQUFFLE1BQUksRUFBRSxLQUFJLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxRQUFNLEVBQUUsQ0FBQztBQUFBLFFBQUUsRUFBRSxJQUFJLEdBQUUsR0FBRSxDQUFDO0FBQUE7QUFBQSxJQUFPO0FBQUEsTUFBTSxLQUFOLFFBQVMsRUFBRSxPQUFLLEVBQUUsT0FBSyxFQUFFLE1BQUksRUFBRSxLQUFJLEVBQUUsTUFBSSxFQUFFLE9BQUssSUFBRSxFQUFFLE1BQUksRUFBRSxFQUFFLEtBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsRUFBRSxRQUFPLElBQUUsRUFBRSxXQUFTLEVBQUUsQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFTLFlBQUU7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFD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LE9BQU8sS0FBRyxFQUFFLEdBQUcsVUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBRSxHQUFFLEdBQUUsSUFBRSxDQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxJQUFHLEVBQUUsSUFBRSxHQUFFLENBQUMsRUFBRSxRQUFNLEVBQUUsS0FBRyxDQUFDLElBQUUsRUFBRSxDQUFDLElBQUUsR0FBTyxXQUFFLENBQUMsR0FBRSxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUUsTUFBSSxFQUFFLElBQUksS0FBRyxFQUFFLEdBQUcsSUFBRyxJQUFFLEVBQUUsRUFBRSxHQUFFLENBQUM7QUFBQSxJQUFFLE1BQUksTUFBSSxFQUFFLE1BQUksQ0FBQyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUUsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0FBQUEsR0FBRyxHQUFFLEVBQUUsTUFBSSxJQUFFLENBQUMsR0FBRSxNQUFLO0FBQUEsSUFBQyxJQUFJLElBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsTUFBQyxJQUFHLENBQUMsRUFBRSxJQUFJO0FBQUEsUUFBSSxPQUFNO0FBQUEsTUFBRyxJQUFJLElBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxPQUFPLFFBQVEsQ0FBQyxHQUFFO0FBQUEsUUFBQyxPQUFPLEVBQUU7QUFBQSxPQUFJO0FBQUEsTUFBRSxJQUFHLEVBQUUsTUFBTSxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsT0FBTSxDQUFDLEVBQUU7QUFBQSxPQUFJO0FBQUEsUUFBRSxPQUFNLENBQUMsS0FBRyxFQUFFLEtBQUssTUFBSyxHQUFFLEdBQUUsQ0FBQztBQUFBLE1BQUUsSUFBSSxJQUFFLEVBQUUsSUFBSSxVQUFRO0FBQUEsTUFBRSxPQUFPLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRyxFQUFFLEtBQUk7QUFBQSxVQUFDLElBQUksSUFBRSxFQUFFLEdBQUc7QUFBQSxVQUFHLEVBQUUsS0FBRyxFQUFFLEtBQUksRUFBRSxNQUFTLFdBQUUsTUFBSSxFQUFFLEdBQUcsT0FBSyxJQUFFO0FBQUEsUUFBRztBQUFBLE9BQUUsR0FBRSxLQUFHLEVBQUUsS0FBSyxNQUFLLEdBQUUsR0FBRSxDQUFDLEtBQUc7QUFBQTtBQUFBLElBQUcsR0FBRSxNQUFJO0FBQUEsSUFBRyxJQUFJLElBQUUsR0FBRSx1QkFBc0IsSUFBRSxHQUFFO0FBQUEsSUFBb0IsR0FBRSxzQkFBb0IsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsTUFBQyxJQUFHLEtBQUssS0FBSTtBQUFBLFFBQUMsSUFBSSxJQUFFO0FBQUEsUUFBRSxJQUFPLFdBQUUsRUFBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLElBQUU7QUFBQSxNQUFDO0FBQUEsTUFBQyxLQUFHLEVBQUUsS0FBSyxNQUFLLEdBQUUsR0FBRSxDQUFDO0FBQUEsT0FBRyxHQUFFLHdCQUFzQjtBQUFBLEVBQUM7QUFBQSxFQUFDLE9BQU8sRUFBRSxPQUFLLEVBQUU7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxDQUFDLEdBQUUsT0FBSyxHQUFFLEVBQUUsS0FBSSxDQUFDLE1BQUksRUFBRSxLQUFHLEdBQUUsRUFBRSxJQUFFLEdBQUUsR0FBRSxJQUFJLElBQUksS0FBSyxDQUFDO0FBQUE7QUFBbUYsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFFLEdBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU0sRUFBQyxTQUFRLEVBQUM7QUFBQSxLQUFHLENBQUMsQ0FBQztBQUFBO0FBQXVOLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxPQUFPLEdBQUUsRUFBRSxLQUFJLENBQUMsTUFBSSxFQUFFLEtBQUcsRUFBRSxHQUFFLEVBQUUsTUFBSSxHQUFFLEVBQUUsTUFBSSxJQUFHLEVBQUU7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFFLEdBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU87QUFBQSxLQUFHLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxHQUFFLFFBQVEsRUFBRSxNQUFLLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLE9BQU8sRUFBRSxJQUFFLEdBQUUsS0FBUyxFQUFFLE1BQVIsU0FBYSxFQUFFLEtBQUcsTUFBRyxFQUFFLElBQUksRUFBQyxJQUFHLEVBQUUsTUFBTSxTQUFPLEVBQUU7QUFBQTtBQUFrTyxTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxFQUFFO0FBQUEsRUFBRSxJQUFHLENBQUMsRUFBRSxJQUFHO0FBQUEsSUFBQyxTQUFRLElBQUUsR0FBRSxJQUFXLE1BQVAsUUFBVSxDQUFDLEVBQUUsT0FBWSxFQUFFLE9BQVQ7QUFBQSxNQUFhLElBQUUsRUFBRTtBQUFBLElBQUcsSUFBSSxJQUFFLEVBQUUsUUFBTSxFQUFFLE1BQUksQ0FBQyxHQUFFLENBQUM7QUFBQSxJQUFHLEVBQUUsS0FBRyxNQUFJLEVBQUUsS0FBRyxNQUFJLEVBQUU7QUFBQSxFQUFJO0FBQUEsRUFBQyxPQUFPLEVBQUU7QUFBQTtBQUFHLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxTQUFRLEVBQUUsSUFBRSxHQUFFLE1BQU0sS0FBRztBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxJQUFJLElBQUcsRUFBRSxPQUFLO0FBQUEsTUFBRSxJQUFHO0FBQUEsUUFBQyxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxDQUFDO0FBQUEsUUFBRSxPQUFNLEdBQUU7QUFBQSxRQUFDLEVBQUUsTUFBSSxDQUFDLEdBQUUsR0FBRSxJQUFJLEdBQUUsRUFBRSxHQUFHO0FBQUE7QUFBQSxFQUFFO0FBQUE7QUFBRSxHQUFFLE1BQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUUsTUFBSyxNQUFHLEdBQUUsQ0FBQztBQUFBLEdBQUcsR0FBRSxLQUFHLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEtBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxRQUFNLEVBQUUsTUFBSSxFQUFFLElBQUksTUFBSyxNQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLE1BQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLE1BQUcsR0FBRSxDQUFDLEdBQUUsS0FBRTtBQUFBLEVBQUUsSUFBSSxLQUFHLEtBQUUsRUFBRSxLQUFLO0FBQUEsRUFBSSxNQUFJLE9BQUksTUFBRyxFQUFFLE1BQUksQ0FBQyxHQUFFLEdBQUUsTUFBSSxDQUFDLEdBQUUsRUFBRSxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLEVBQUUsUUFBTSxFQUFFLEtBQUcsRUFBRSxNQUFLLEVBQUUsSUFBRSxFQUFFLE1BQVM7QUFBQSxHQUFFLE1BQUksRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxFQUFFLE1BQUksQ0FBQyxHQUFFLEtBQUUsS0FBSSxLQUFFO0FBQUEsR0FBRyxHQUFFLFNBQU8sUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLE1BQUcsR0FBRSxDQUFDO0FBQUEsRUFBRSxJQUFJLElBQUUsRUFBRTtBQUFBLEVBQUksS0FBRyxFQUFFLFFBQU0sRUFBRSxJQUFJLElBQUksV0FBYSxHQUFFLEtBQUssQ0FBQyxNQUFaLEtBQWUsT0FBSSxHQUFFLDJCQUF5QixLQUFFLEdBQUUsMEJBQXdCLElBQUcsRUFBQyxJQUFHLEVBQUUsSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLEVBQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxJQUFHLEVBQUUsSUFBTztBQUFBLEdBQUUsSUFBRyxLQUFFLEtBQUU7QUFBQSxHQUFNLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUc7QUFBQSxNQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxFQUFFLE1BQUksRUFBRSxJQUFJLE9BQU8sUUFBUSxDQUFDLEdBQUU7QUFBQSxRQUFDLE9BQU0sQ0FBQyxFQUFFLE1BQUksR0FBRSxDQUFDO0FBQUEsT0FBRTtBQUFBLE1BQUUsT0FBTSxHQUFFO0FBQUEsTUFBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxRQUFDLEVBQUUsUUFBTSxFQUFFLE1BQUksQ0FBQztBQUFBLE9BQUcsR0FBRSxJQUFFLENBQUMsR0FBRSxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFBLEdBQUcsR0FBRSxNQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLFVBQVEsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLE1BQUcsR0FBRSxDQUFDO0FBQUEsRUFBRSxJQUFJLEdBQUUsSUFBRSxFQUFFO0FBQUEsRUFBSSxLQUFHLEVBQUUsUUFBTSxFQUFFLElBQUksR0FBRyxLQUFLLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFHO0FBQUEsTUFBQyxHQUFFLENBQUM7QUFBQSxNQUFFLE9BQU0sR0FBRTtBQUFBLE1BQUMsSUFBRTtBQUFBO0FBQUEsR0FBRyxHQUFFLEVBQUUsTUFBUyxXQUFFLEtBQUcsR0FBRSxJQUFJLEdBQUUsRUFBRSxHQUFHO0FBQUE7QUFBSSxJQUFJLEtBQWMsT0FBTyx5QkFBbkI7QUFBeUMsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxHQUFFLElBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxhQUFhLENBQUMsR0FBRSxNQUFHLHFCQUFxQixDQUFDLEdBQUUs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QUFJLElBQUU7QUFBQSxNQUFDLElBQUUsRUFBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQU8sV0FBRSxHQUFFLElBQUUsR0FBTyxXQUFFLEdBQU8sV0FBRSxHQUFFLEVBQUM7QUFBQSxNQUFFLElBQVksR0FBRSxNQUFOO0FBQUEsUUFBUSxHQUFFLEVBQUUsSUFBRTtBQUFBLE1BQUUsR0FBRSxJQUFFO0FBQUEsTUFBRSxFQUFFLElBQUU7QUFBQSxNQUFFLElBQUcsS0FBRyxHQUFFO0FBQUEsUUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLE1BQUUsT0FBTztBQUFBLElBQUMsRUFBTSxTQUFRLEVBQUUsTUFBUCxJQUFTO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLElBQVksRUFBRSxNQUFOLFdBQVE7QUFBQSxRQUFDLEVBQUUsRUFBRSxJQUFFLEVBQUU7QUFBQSxRQUFFLElBQVksRUFBRSxNQUFOO0FBQUEsVUFBUSxFQUFFLEVBQUUsSUFBRSxFQUFFO0FBQUEsUUFBRSxFQUFFLElBQUUsR0FBRTtBQUFBLFFBQUUsRUFBRSxJQUFPO0FBQUEsUUFBRSxHQUFFLEVBQUUsSUFBRTtBQUFBLFFBQUUsR0FBRSxJQUFFO0FBQUEsTUFBQztBQUFBLE1BQUMsT0FBTztBQUFBLElBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQU87QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQVEsS0FBTixPQUFhLFlBQUUsRUFBRTtBQUFBLEVBQVEsS0FBSyxJQUFRLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQSxFQUFVLEtBQUssT0FBVyxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUE7QUFBSyxHQUFFLFVBQVUsUUFBTTtBQUFFLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTTtBQUFBO0FBQUksR0FBRSxVQUFVLElBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxNQUFLLElBQUUsS0FBSztBQUFBLEVBQUUsSUFBRyxNQUFJLEtBQVksRUFBRSxNQUFOLFdBQVE7QUFBQSxJQUFDLEVBQUUsSUFBRTtBQUFBLElBQUUsS0FBSyxJQUFFO0FBQUEsSUFBRSxJQUFZLE1BQUo7QUFBQSxNQUFNLEVBQUUsSUFBRTtBQUFBLElBQU87QUFBQSxTQUFFLFFBQVEsR0FBRTtBQUFBLFFBQUMsSUFBSTtBQUFBLFNBQVMsSUFBRSxFQUFFLE1BQVgsUUFBZSxFQUFFLEtBQUssQ0FBQztBQUFBLE9BQUU7QUFBQSxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFO0FBQUEsRUFBSyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxNQUFRLEdBQUosR0FBVSxHQUFKLE1BQUU7QUFBQSxJQUFJLElBQVksTUFBSixXQUFNO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLEVBQUUsSUFBTztBQUFBLElBQUM7QUFBQSxJQUFDLElBQVksTUFBSixXQUFNO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLEVBQUUsSUFBTztBQUFBLElBQUM7QUFBQSxJQUFDLElBQUcsTUFBSSxLQUFLLEdBQUU7QUFBQSxNQUFDLEtBQUssSUFBRTtBQUFBLE1BQUUsSUFBWSxNQUFKO0FBQUEsUUFBTSxHQUFFLFFBQVEsR0FBRTtBQUFBLFVBQUMsSUFBSTtBQUFBLFdBQVMsSUFBRSxFQUFFLE1BQVgsUUFBZSxFQUFFLEtBQUssQ0FBQztBQUFBLFNBQUU7QUFBQSxJQUFDO0FBQUEsRUFBQztBQUFBO0FBQUcsR0FBRSxVQUFVLFlBQVUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUssT0FBTyxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUUsT0FBTSxJQUFFO0FBQUEsSUFBRSxLQUFPO0FBQUEsSUFBRSxJQUFHO0FBQUEsTUFBQyxFQUFFLENBQUM7QUFBQSxjQUFFO0FBQUEsTUFBUSxLQUFFO0FBQUE7QUFBQSxLQUFJLEVBQUMsTUFBSyxNQUFLLENBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxVQUFRLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLO0FBQUE7QUFBTyxHQUFFLFVBQVUsV0FBUyxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSyxRQUFNO0FBQUE7QUFBSSxHQUFFLFVBQVUsU0FBTyxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSztBQUFBO0FBQU8sR0FBRSxVQUFVLE9BQUssUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFLLE9BQU8sR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU8sRUFBRTtBQUFBLEdBQU07QUFBQTtBQUFHLE9BQU8sZUFBZSxHQUFFLFdBQVUsU0FBUSxFQUFDLEtBQUksUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxJQUFZLE1BQUo7QUFBQSxJQUFNLEVBQUUsSUFBRSxLQUFLO0FBQUEsRUFBRSxPQUFPLEtBQUs7QUFBQSxHQUFHLEtBQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUcsTUFBSSxLQUFLLEdBQUU7QUFBQSxJQUFDLElBQUcsS0FBRTtBQUFBLE1BQUksTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsS0FBRyxRQUFRLENBQUMsR0FBRTtBQUFBLE1BQUMsSUFBTyxPQUFKLEtBQVcsT0FBSjtBQUFBLFFBQU0sSUFBRyxFQUFFLE1BQUksSUFBRTtBQUFBLFVBQUMsRUFBRSxJQUFFO0FBQUEsVUFBRSxLQUFFLEVBQUMsR0FBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsR0FBQztBQUFBLFFBQUM7QUFBQTtBQUFBLE9BQUcsSUFBSTtBQUFBLElBQUUsS0FBSyxJQUFFO0FBQUEsSUFBRSxLQUFLO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJLElBQUc7QUFBQSxNQUFDLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLFFBQUUsRUFBRSxFQUFFLEVBQUU7QUFBQSxjQUFFO0FBQUEsTUFBUSxHQUFFO0FBQUE7QUFBQSxFQUFFO0FBQUEsRUFBRSxDQUFDO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLElBQUksR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBRyxFQUFFLEVBQUUsTUFBSSxFQUFFLEtBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFHLEVBQUUsRUFBRSxNQUFJLEVBQUU7QUFBQSxNQUFFLE9BQU07QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFZLE1BQUo7QUFBQSxNQUFNLEVBQUUsSUFBRTtBQUFBLElBQUUsRUFBRSxFQUFFLElBQUU7QUFBQSxJQUFFLEVBQUUsSUFBRTtBQUFBLElBQUcsSUFBWSxFQUFFLE1BQU4sV0FBUTtBQUFBLE1BQUMsRUFBRSxJQUFFO0FBQUEsTUFBRTtBQUFBLElBQUs7QUFBQSxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxHQUFFLElBQU87QUFBQSxFQUFFLE9BQWUsTUFBSixXQUFNO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBUSxFQUFFLE1BQVAsSUFBUztBQUFBLE1BQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLE1BQUUsSUFBWSxNQUFKO0FBQUEsUUFBTSxFQUFFLElBQUUsRUFBRTtBQUFBLE1BQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxRQUFRLEVBQUUsRUFBRSxJQUFFO0FBQUEsSUFBQyxFQUFNO0FBQUEsVUFBRTtBQUFBLElBQUUsRUFBRSxFQUFFLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxNQUFRLEVBQUUsSUFBTztBQUFBLElBQUUsSUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsSUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxHQUFFLEtBQUssTUFBVSxTQUFDO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFFLEtBQUU7QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFRLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQSxFQUFRLEtBQUssSUFBUSxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUEsRUFBVSxLQUFLLE9BQVcsS0FBTixPQUFhLFlBQUUsRUFBRTtBQUFBO0FBQUssR0FBRSxZQUFVLElBQUk7QUFBRSxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxJQUFFLEtBQUs7QUFBQSxJQUFFLE9BQU07QUFBQSxFQUFHLEtBQVEsS0FBRyxLQUFLLE1BQWI7QUFBQSxJQUFnQixPQUFNO0FBQUEsRUFBRyxLQUFLLEtBQUc7QUFBQSxFQUFHLElBQUcsS0FBSyxNQUFJO0FBQUEsSUFBRSxPQUFNO0FBQUEsRUFBRyxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssS0FBRztBQUFBLEVBQUUsSUFBRyxLQUFLLElBQUUsS0FBRyxDQUFDLEdBQUUsSUFBSSxHQUFFO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFHLE9BQU07QUFBQSxFQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFFLElBQUc7QUFBQSxJQUFDLEdBQUUsSUFBSTtBQUFBLElBQUUsS0FBRTtBQUFBLElBQUssSUFBSSxJQUFFLEtBQUssRUFBRTtBQUFBLElBQUUsSUFBRyxLQUFHLEtBQUssS0FBRyxLQUFLLE1BQUksS0FBTyxLQUFLLE1BQVQsR0FBVztBQUFBLE1BQUMsS0FBSyxJQUFFO0FBQUEsTUFBRSxLQUFLLEtBQUc7QUFBQSxNQUFJLEtBQUs7QUFBQSxJQUFHO0FBQUEsSUFBRSxPQUFNLEdBQUU7QUFBQSxJQUFDLEtBQUssSUFBRTtBQUFBLElBQUUsS0FBSyxLQUFHO0FBQUEsSUFBRyxLQUFLO0FBQUE7QUFBQSxFQUFJLEtBQUU7QUFBQSxFQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRyxPQUFNO0FBQUE7QUFBSSxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBWSxLQUFLLE1BQVQsV0FBVztBQUFBLElBQUMsS0FBSyxLQUFHO0FBQUEsSUFBRyxTQUFRLElBQUUsS0FBSyxFQUFXLE1BQUosV0FBTSxJQUFFLEVBQUU7QUFBQSxNQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFBQSxFQUFDO0FBQUEsRUFBQyxHQUFFLFVBQVUsRUFBRSxLQUFLLE1BQUssQ0FBQztBQUFBO0FBQUcsR0FBRSxVQUFVLElBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxJQUFDLEdBQUUsVUFBVSxFQUFFLEtBQUssTUFBSyxDQUFDO0FBQUEsSUFBRSxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsTUFBQyxLQUFLLEtBQUc7QUFBQSxNQUFJLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLFFBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLElBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsRUFBRSxJQUFFLEtBQUssSUFBRztBQUFBLElBQUMsS0FBSyxLQUFHO0FBQUEsSUFBRSxTQUFRLElBQUUsS0FBSyxFQUFXLE1BQUosV0FBTSxJQUFFLEVBQUU7QUFBQSxNQUFFLEVBQUUsRUFBRSxFQUFFO0FBQUEsRUFBQztBQUFBO0FBQUcsT0FBTyxlQUFlLEdBQUUsV0FBVSxTQUFRLEVBQUMsS0FBSSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsSUFBRSxLQUFLO0FBQUEsSUFBRSxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxFQUFFLElBQUksSUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQUUsSUFBWSxNQUFKO0FBQUEsSUFBTSxFQUFFLElBQUUsS0FBSztBQUFBLEVBQUUsSUFBRyxLQUFHLEtBQUs7QUFBQSxJQUFFLE1BQU0sS0FBSztBQUFBLEVBQUUsT0FBTyxLQUFLO0FBQUEsRUFBRSxDQUFDO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLElBQUksR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBRSxFQUFFLElBQU87QUFBQSxFQUFFLElBQWUsT0FBTyxLQUFuQixZQUFxQjtBQUFBLElBQUM7QUFBQSxJQUFJLElBQUksSUFBRTtBQUFBLElBQUUsS0FBTztBQUFBLElBQUUsSUFBRztBQUFBLE1BQUMsRUFBRTtBQUFBLE1BQUUsT0FBTSxHQUFFO0FBQUEsTUFBQyxFQUFFLEtBQUc7QUFBQSxNQUFHLEVBQUUsS0FBRztBQUFBLE1BQUUsR0FBRSxDQUFDO0FBQUEsTUFBRSxNQUFNO0FBQUEsY0FBRTtBQUFBLE1BQVEsS0FBRTtBQUFBLE1BQUUsR0FBRTtBQUFBO0FBQUEsRUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsU0FBUSxJQUFFLEVBQUUsRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsSUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsRUFBRSxFQUFFLElBQU87QUFBQSxFQUFFLEVBQUUsSUFBTztBQUFBLEVBQUUsR0FBRSxDQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFHLE9BQUk7QUFBQSxJQUFLLE1BQU0sSUFBSSxNQUFNLHFCQUFxQjtBQUFBLEVBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxLQUFFO0FBQUEsRUFBRSxLQUFLLEtBQUc7QUFBQSxFQUFHLElBQUcsSUFBRSxLQUFLO0FBQUEsSUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLEdBQUU7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQU87QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFHLEtBQUssT0FBVyxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUEsRUFBSyxJQUFHO0FBQUEsSUFBRSxHQUFFLEtBQUssSUFBSTtBQUFBO0FBQUUsR0FBRSxVQUFVLElBQUUsUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsS0FBSyxFQUFFO0FBQUEsRUFBRSxJQUFHO0FBQUEsSUFBQyxJQUFHLElBQUUsS0FBSztBQUFBLE1BQUU7QUFBQSxJQUFPLElBQVksS0FBSyxNQUFUO0FBQUEsTUFBVztBQUFBLElBQU8sSUFBSSxJQUFFLEtBQUssRUFBRTtBQUFBLElBQUUsSUFBZSxPQUFPLEtBQW5CO0FBQUEsTUFBcUIsS0FBSyxJQUFFO0FBQUEsWUFBRTtBQUFBLElBQVEsRUFBRTtBQUFBO0FBQUE7QUFBSSxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsSUFBRSxLQUFLO0FBQUEsSUFBRSxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxFQUFFLEtBQUssS0FBRztBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRyxHQUFFLElBQUk7QUFBQSxFQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUU7QUFBQSxFQUFJLElBQUksSUFBRTtBQUFBLEVBQUUsS0FBRTtBQUFBLEVBQUssT0FBTyxHQUFFLEtBQUssTUFBSyxDQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsRUFBRSxJQUFFLEtBQUssSUFBRztBQUFBLElBQUMsS0FBSyxLQUFHO0FBQUEsSUFBRSxLQUFLLElBQUU7QUFBQSxJQUFFLEtBQUU7QUFBQSxFQUFJO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssS0FBRztBQUFBLEVBQUUsSUFBRyxFQUFFLElBQUUsS0FBSztBQUFBLElBQUcsR0FBRSxJQUFJO0FBQUE7QUFBRyxHQUFFLFVBQVUsVUFBUSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFBLEVBQUUsSUFBRztBQUFBLElBQUMsRUFBRSxFQUFFO0FBQUEsSUFBRSxPQUFNLEdBQUU7QUFBQSxJQUFDLEVBQUUsRUFBRTtBQUFBLElBQUUsTUFBTTtBQUFBO0FBQUEsRUFBRSxJQUFJLElBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQUUsRUFBRSxPQUFPLFdBQVM7QUFBQSxFQUFFLE9BQU87QUFBQTs7O0FDQXgxSSxJQUFJO0FBQUosSUFBTTtBQUFOLElBQVE7QUFBUixJQUFVLEtBQWUsT0FBTyxVQUFwQixlQUE0QixDQUFDLENBQUMsT0FBTztBQUFqRCxJQUE2RSxLQUFFLENBQUM7QUFBaEYsSUFBa0YsS0FBRSxDQUFDO0FBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUUsS0FBSztBQUFBLENBQUUsRUFBRTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsRUFBRSxLQUFHLEVBQUUsS0FBSyxNQUFLLEVBQUUsTUFBSSxRQUFRLEdBQUUsRUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBRyxJQUFFO0FBQUEsSUFBQyxJQUFJLElBQUU7QUFBQSxJQUFFLEtBQU87QUFBQSxJQUFFLEVBQUU7QUFBQSxFQUFDO0FBQUEsRUFBQyxLQUFFLEtBQUcsRUFBRSxFQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsTUFBSyxLQUFFLEVBQUUsTUFBSyxJQUFFLFVBQVUsRUFBQztBQUFBLEVBQUUsRUFBRSxRQUFNO0FBQUEsRUFBRSxJQUFJLElBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxHQUFFLEtBQUUsRUFBRTtBQUFBLElBQUksT0FBTSxLQUFFLEdBQUU7QUFBQSxNQUFHLElBQUcsR0FBRSxLQUFJO0FBQUEsUUFBQyxHQUFFLElBQUksUUFBTTtBQUFBLFFBQUU7QUFBQSxNQUFLO0FBQUEsSUFBQyxJQUFJLElBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxFQUFFLE1BQU07QUFBQSxNQUFNLE9BQVcsTUFBSixJQUFNLElBQU8sTUFBTCxPQUFPLEtBQUcsS0FBRztBQUFBLEtBQUcsR0FBRSxJQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxPQUFNLENBQUMsTUFBTSxRQUFRLEVBQUUsS0FBSyxLQUFHLENBQUMsRUFBRSxFQUFFLEtBQUs7QUFBQSxLQUFFLEdBQUUsSUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsS0FBSyxJQUFFO0FBQUEsTUFBRSxJQUFHLEVBQUUsT0FBTTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxRQUFNLElBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxPQUFTLEVBQUUsSUFBSSxJQUFJLGFBQWQ7QUFBQSxVQUF1QixFQUFFLElBQUksSUFBSSxPQUFLO0FBQUEsTUFBQztBQUFBLEtBQUUsR0FBRSxJQUFFLEVBQUUsS0FBSztBQUFBLElBQUUsRUFBRSxLQUFLLElBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxFQUFFO0FBQUEsTUFBRSxFQUFFLEtBQUssSUFBSTtBQUFBO0FBQUEsSUFBRyxPQUFNLENBQUMsR0FBRSxDQUFDO0FBQUEsS0FBRyxDQUFDLENBQUMsR0FBRSxJQUFFLEVBQUUsSUFBRyxJQUFFLEVBQUU7QUFBQSxFQUFHLE9BQU8sRUFBRSxRQUFNLEVBQUUsS0FBSyxJQUFFLEVBQUU7QUFBQTtBQUFNLEdBQUUsY0FBWTtBQUFtQixPQUFPLGlCQUFpQixHQUFFLFdBQVUsRUFBQyxhQUFZLEVBQUMsY0FBYSxNQUFHLE9BQVcsVUFBQyxHQUFFLE1BQUssRUFBQyxjQUFhLE1BQUcsT0FBTSxHQUFDLEdBQUUsT0FBTSxFQUFDLGNBQWEsTUFBRyxLQUFJLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFO0FBQUEsRUFBSyxPQUFNLEVBQUMsTUFBSyxNQUFLLEtBQUssR0FBRTtBQUFBLElBQUMsT0FBTyxFQUFFO0FBQUEsSUFBTSxFQUFDO0FBQUEsRUFBRSxHQUFFLEtBQUksRUFBQyxjQUFhLE1BQUcsT0FBTSxFQUFDLEVBQUMsQ0FBQztBQUFFLEdBQUUsT0FBTSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFhLE9BQU8sRUFBRSxRQUFuQixVQUF3QjtBQUFBLElBQUMsSUFBSSxHQUFFLElBQUUsRUFBRTtBQUFBLElBQU0sU0FBUSxLQUFLO0FBQUEsTUFBRSxJQUFnQixNQUFiLFlBQWU7QUFBQSxRQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsUUFBRyxJQUFHLGFBQWEsSUFBRTtBQUFBLFVBQUMsSUFBRyxDQUFDO0FBQUEsWUFBRSxFQUFFLE9BQUssSUFBRSxDQUFDO0FBQUEsVUFBRSxFQUFFLEtBQUc7QUFBQSxVQUFFLEVBQUUsS0FBRyxFQUFFLEtBQUs7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsQ0FBQztBQUFBLENBQUU7QUFBRSxHQUFFLE9BQU0sUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsRUFBRSxDQUFDO0FBQUEsRUFBRSxJQUFHLEVBQUUsU0FBTyxHQUFFO0FBQUEsSUFBQyxHQUFFO0FBQUEsSUFBRSxJQUFJLEdBQUUsSUFBRSxFQUFFO0FBQUEsSUFBSSxJQUFHLEdBQUU7QUFBQSxNQUFDLEVBQUUsUUFBTTtBQUFBLE1BQUcsS0FBYSxJQUFFLEVBQUUsVUFBVDtBQUFBLFFBQWUsRUFBRSxPQUFLLElBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLFVBQUMsSUFBSTtBQUFBLFVBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxZQUFDLElBQUU7QUFBQSxhQUFNLEVBQUMsTUFBSyxFQUFDLENBQUM7QUFBQSxVQUFFLEVBQUUsSUFBRTtBQUFBLFVBQUUsT0FBTztBQUFBLFVBQUcsUUFBUSxHQUFFO0FBQUEsVUFBQyxJQUFJO0FBQUEsVUFBRSxJQUFHO0FBQUEsYUFBUyxJQUFFLEVBQUUsTUFBWCxRQUFlLEVBQUUsS0FBSyxDQUFDO0FBQUEsVUFBRSxFQUFFLFFBQU07QUFBQSxVQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFBQSxXQUFlLE9BQU8sRUFBRSxRQUFyQixhQUEwQixFQUFFLEtBQUssZUFBYSxFQUFFLEtBQUssT0FBSyxFQUFFO0FBQUEsSUFBQztBQUFBLElBQUMsS0FBRTtBQUFBLElBQUUsR0FBRSxDQUFDO0FBQUEsRUFBQztBQUFBLENBQUU7QUFBRSxHQUFFLE9BQU0sUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLEdBQUU7QUFBQSxFQUFFLEtBQU87QUFBQSxFQUFFLEVBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxDQUFFO0FBQUUsR0FBRSxVQUFTLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEdBQUU7QUFBQSxFQUFFLEtBQU87QUFBQSxFQUFFLElBQUk7QUFBQSxFQUFFLElBQWEsT0FBTyxFQUFFLFFBQW5CLGFBQTBCLElBQUUsRUFBRSxNQUFLO0FBQUEsSUFBQyxNQUFRLE1BQUosR0FBYSxPQUFKLE1BQUU7QUFBQSxJQUFRLElBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxNQUFFLElBQUc7QUFBQSxRQUFFLFNBQVEsS0FBSyxHQUFFO0FBQUEsVUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLFVBQUcsSUFBWSxNQUFKLGFBQU8sRUFBRSxLQUFLLElBQUc7QUFBQSxZQUFDLEVBQUUsRUFBRTtBQUFBLFlBQUUsRUFBRSxLQUFRO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQSxNQUFLO0FBQUEsUUFBQyxJQUFFLENBQUM7QUFBQSxRQUFFLEVBQUUsSUFBRTtBQUFBO0FBQUEsTUFBRSxTQUFRLEtBQUssR0FBRTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUUsSUFBRyxJQUFFLEVBQUU7QUFBQSxRQUFHLElBQVksTUFBSixXQUFNO0FBQUEsVUFBQyxJQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFFLEVBQUUsS0FBRztBQUFBLFFBQUMsRUFBTTtBQUFBLFlBQUUsRUFBRSxHQUFFLENBQUM7QUFBQSxNQUFDO0FBQUEsTUFBQyxTQUFRLEtBQUs7QUFBQSxRQUFFLEVBQUUsS0FBRyxFQUFFO0FBQUEsSUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsQ0FBQztBQUFBLENBQUU7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsS0FBSyxLQUFZLEVBQUUsb0JBQU4sV0FBc0IsSUFBRSxHQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsS0FBSztBQUFBLEVBQUUsT0FBTSxFQUFDLEdBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLElBQUMsRUFBRSxRQUFNO0FBQUEsSUFBRSxJQUFFLEVBQUUsS0FBSztBQUFBLEtBQUcsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsS0FBSyxJQUFFO0FBQUEsSUFBRSxJQUFJLElBQUUsRUFBRSxNQUFNO0FBQUEsSUFBTSxJQUFHLE1BQUksR0FBRTtBQUFBLE1BQUMsSUFBTztBQUFBLE1BQUUsSUFBRztBQUFBLFFBQUUsRUFBRSxLQUFHO0FBQUEsTUFBTyxTQUFTLEtBQU4sU0FBZSxNQUFMLFNBQWMsRUFBRSxPQUFSO0FBQUEsUUFBWSxFQUFFLGFBQWEsR0FBRSxDQUFDO0FBQUEsTUFBTztBQUFBLFVBQUUsZ0JBQWdCLENBQUM7QUFBQSxJQUFDLEVBQU07QUFBQSxVQUFPO0FBQUEsR0FBRSxFQUFDO0FBQUE7QUFBRSxHQUFFLFdBQVUsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBYSxPQUFPLEVBQUUsUUFBbkIsVUFBd0I7QUFBQSxJQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsSUFBSSxJQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsTUFBRSxJQUFHLEdBQUU7QUFBQSxRQUFDLEVBQUUsSUFBTztBQUFBLFFBQUUsU0FBUSxLQUFLLEdBQUU7QUFBQSxVQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsVUFBRyxJQUFHO0FBQUEsWUFBRSxFQUFFLEVBQUU7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUFBLElBQUM7QUFBQSxJQUFDLEVBQUUsT0FBVTtBQUFBLEVBQUMsRUFBSztBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxJQUFJLElBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxNQUFLLElBQUcsR0FBRTtBQUFBLFFBQUMsRUFBRSxPQUFVO0FBQUEsUUFBRSxFQUFFLEVBQUU7QUFBQSxNQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRSxFQUFFLENBQUM7QUFBQSxDQUFFO0FBQUUsR0FBRSxPQUFNLFFBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLElBQUUsS0FBTyxNQUFKO0FBQUEsSUFBTSxFQUFFLFFBQU07QUFBQSxFQUFFLEVBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxDQUFFO0FBQUUsRUFBRSxVQUFVLHdCQUFzQixRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEtBQUs7QUFBQSxJQUFJLE9BQU07QUFBQSxFQUFHLElBQUksSUFBRSxLQUFLLE1BQUssSUFBRSxLQUFZLEVBQUUsTUFBTjtBQUFBLEVBQVEsU0FBUSxLQUFLO0FBQUEsSUFBRSxPQUFN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SUFBRSxFQUFFLElBQUUsRUFBRTtBQUFBLE1BQUksS0FBSSxJQUFFLEVBQUUsUUFBTSxFQUFFO0FBQUEsUUFBSSxPQUFhLEVBQUUsT0FBUixTQUFjLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxNQUFJLEVBQUUsTUFBSyxFQUFFLElBQUksR0FBRSxDQUFDO0FBQUE7QUFBQSxFQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQUcsSUFBSSxLQUFFLEVBQUU7QUFBUSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsT0FBTyxNQUFJLEVBQUUsT0FBSyxFQUFFLElBQUksUUFBTSxFQUFFLElBQUksSUFBSSxHQUFHLFFBQVEsUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFhLE9BQU8sRUFBRSxPQUFyQixjQUEwQixFQUFFLElBQUk7QUFBQSxHQUFFLEdBQUUsRUFBRSxJQUFJLE1BQUksUUFBYSxJQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRyxPQUFsQixTQUF3QixFQUFFLElBQUksUUFBTSxNQUFJLEVBQUUsSUFBSSxNQUFJLElBQUcsRUFBRSxJQUFJLE1BQUksTUFBRyxFQUFFLE1BQUksT0FBTSxFQUFFLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxPQUFPLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFFLElBQUc7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUcsTUFBSSxFQUFFLE1BQUksTUFBSyxFQUFFLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxPQUFPLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFFLEdBQUUsRUFBRSxPQUFLLEVBQUUsSUFBSSxRQUFNLE1BQUksRUFBRSxPQUFLLEVBQUUsWUFBWSxFQUFFLEdBQUcsR0FBRSxFQUFFLElBQUksTUFBSSxNQUFHLEVBQUUsSUFBSSxNQUFJLEtBQUk7QUFBQTtBQUFFLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxLQUFLLE1BQUksR0FBRSxLQUFLLElBQUUsTUFBSyxLQUFLLE1BQUk7QUFBQTtBQUFLLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFLE1BQUksRUFBRSxHQUFHO0FBQUEsRUFBSSxPQUFPLEtBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxDQUFDO0FBQUE7QUFBbU4sU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRSxNQUFLLEtBQUssSUFBRTtBQUFBO0FBQUssRUFBRSxVQUFRLFFBQVEsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLEVBQUksTUFBSSxFQUFFLE1BQUksT0FBSSxLQUFHLEVBQUUsT0FBSyxFQUFFLElBQUksR0FBRSxLQUFHLEtBQUcsRUFBRSxRQUFNLEVBQUUsT0FBSyxPQUFNLE1BQUcsR0FBRSxDQUFDO0FBQUEsSUFBSSxHQUFFLFlBQVUsSUFBSSxHQUFHLE1BQUksUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUUsS0FBSSxJQUFFO0FBQUEsRUFBVyxFQUFFLEtBQVIsU0FBWSxFQUFFLElBQUUsQ0FBQyxJQUFHLEVBQUUsRUFBRSxLQUFLLENBQUM7QUFBQSxFQUFFLElBQUksSUFBRSxHQUFFLEVBQUUsR0FBRyxHQUFFLElBQUUsT0FBRyxJQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsS0FBRyxFQUFFLFFBQU0sSUFBRSxNQUFHLEVBQUUsTUFBSSxNQUFLLElBQUUsRUFBRSxDQUFDLElBQUUsRUFBRTtBQUFBO0FBQUEsRUFBSSxFQUFFLE1BQUk7QUFBQSxFQUFFLElBQUksS0FBRSxFQUFFO0FBQUEsRUFBSSxFQUFFLE1BQUk7QUFBQSxFQUFLLElBQUksSUFBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLElBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSTtBQUFBLE1BQUMsSUFBRyxFQUFFLE1BQU0sS0FBSTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUUsTUFBTTtBQUFBLFFBQUksRUFBRSxJQUFJLElBQUksS0FBRyxHQUFFLEdBQUUsRUFBRSxJQUFJLEtBQUksRUFBRSxJQUFJLEdBQUc7QUFBQSxNQUFDO0FBQUEsTUFBQyxJQUFJO0FBQUEsTUFBRSxLQUFJLEVBQUUsU0FBUyxFQUFDLEtBQUksRUFBRSxNQUFJLEtBQUksQ0FBQyxFQUFFLElBQUUsRUFBRSxFQUFFLElBQUk7QUFBQSxRQUFHLEVBQUUsTUFBSSxJQUFFLEVBQUUsWUFBWTtBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUcsRUFBRSxTQUFPLEtBQUcsRUFBRSxPQUFLLEVBQUUsU0FBUyxFQUFDLEtBQUksRUFBRSxNQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUUsQ0FBQyxHQUFFLEVBQUUsS0FBSyxHQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsVUFBVSx1QkFBcUIsUUFBUSxHQUFFO0FBQUEsRUFBQyxLQUFLLElBQUUsQ0FBQztBQUFBLEdBQUcsR0FBRSxVQUFVLFNBQU8sUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBRyxLQUFLLEtBQUk7QUFBQSxJQUFDLElBQUcsS0FBSyxJQUFJLEtBQUk7QUFBQSxNQUFDLElBQUksSUFBRSxTQUFTLGNBQWMsS0FBSyxHQUFFLElBQUUsS0FBSyxJQUFJLElBQUksR0FBRztBQUFBLE1BQUksS0FBSyxJQUFJLElBQUksS0FBRyxHQUFFLEtBQUssS0FBSSxHQUFFLEVBQUUsTUFBSSxFQUFFLEdBQUc7QUFBQSxJQUFDO0FBQUEsSUFBQyxLQUFLLE1BQUk7QUFBQSxFQUFJO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxPQUFLLEVBQUUsR0FBRSxNQUFLLEVBQUUsUUFBUTtBQUFBLEVBQUUsT0FBTyxNQUFJLEVBQUUsT0FBSyxNQUFLLENBQUMsRUFBRSxHQUFFLE1BQUssRUFBRSxNQUFJLE9BQUssRUFBRSxRQUFRLEdBQUUsQ0FBQztBQUFBO0FBQUcsSUFBSSxLQUFFLFFBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFB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
|