@sapui5/sap.fe.macros 1.108.33 → 1.108.35
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/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/messagebundle_de.properties +1 -1
- package/src/sap/fe/macros/messagebundle_es.properties +2 -2
- package/src/sap/fe/macros/messagebundle_id.properties +3 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +1 -1
- package/src/sap/fe/macros/messagebundle_kk.properties +2 -2
- package/src/sap/fe/macros/messagebundle_ko.properties +1 -1
- package/src/sap/fe/macros/messagebundle_vi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +4 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +3 -0
package/package.json
CHANGED
|
@@ -29,7 +29,7 @@ sap.ui.define(["sap/fe/core/library", "sap/fe/macros/filter/type/MultiValue", "s
|
|
|
29
29
|
controls: [],
|
|
30
30
|
elements: [],
|
|
31
31
|
// eslint-disable-next-line no-template-curly-in-string
|
|
32
|
-
version: "1.108.
|
|
32
|
+
version: "1.108.35",
|
|
33
33
|
noLibraryCSS: true
|
|
34
34
|
});
|
|
35
35
|
thisLib.NavigationType = {
|
|
@@ -72,7 +72,7 @@ T_COMMON_OBJECT_PAGE_SHOW_FORM_CONTAINER_DETAILS=Details einblenden
|
|
|
72
72
|
T_COMMON_OBJECT_PAGE_HIDE_FORM_CONTAINER_DETAILS=Details ausblenden
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
M_KEYBOARD_SHORTCUT_CREATE_WIN=
|
|
75
|
+
M_KEYBOARD_SHORTCUT_CREATE_WIN=Strg+Enter
|
|
76
76
|
|
|
77
77
|
M_KEYBOARD_SHORTCUT_CREATE_MAC=CMD+Enter
|
|
78
78
|
|
|
@@ -23,7 +23,7 @@ C_DRAFT_EDIT_STATE_DRAFT_UNCHANGED_FILTER=Sin modificar
|
|
|
23
23
|
|
|
24
24
|
C_DRAFT_EDIT_STATE_DRAFT_OWN_DRAFT_FILTER=Borrador propio
|
|
25
25
|
|
|
26
|
-
C_DRAFT_EDIT_STATE_DRAFT_LOCKED_FILTER=
|
|
26
|
+
C_DRAFT_EDIT_STATE_DRAFT_LOCKED_FILTER=Bloqueada por otro usuario
|
|
27
27
|
|
|
28
28
|
C_DRAFT_EDIT_STATE_DRAFT_UNSAVED_CHANGES_FILTER=Modificaciones sin guardar de otro usuario
|
|
29
29
|
|
|
@@ -47,7 +47,7 @@ T_COMMON_PROGRESS_INDICATOR_DISPLAY_VALUE_WITH_UOM={0} de {1} {2}
|
|
|
47
47
|
|
|
48
48
|
M_COMMON_TABLE_CREATE=Crear
|
|
49
49
|
|
|
50
|
-
M_COMMON_TABLE_DELETE=
|
|
50
|
+
M_COMMON_TABLE_DELETE=Borrar
|
|
51
51
|
|
|
52
52
|
M_COMMON_TABLE_MASSEDIT=Editar
|
|
53
53
|
|
|
@@ -3,13 +3,13 @@ M_COMMON_DRAFT_LOCKED_OBJECT=Dikunci
|
|
|
3
3
|
|
|
4
4
|
M_COMMON_DRAFT_OBJECT=Konsep
|
|
5
5
|
|
|
6
|
-
M_DRAFT_POPOVER_ADMIN_UNSAVED_OBJECT=Perubahan Belum
|
|
6
|
+
M_DRAFT_POPOVER_ADMIN_UNSAVED_OBJECT=Perubahan Belum Disimpan
|
|
7
7
|
|
|
8
8
|
M_FIELD_RUNTIME_DRAFT_POPOVER_NO_DATA_TEXT=Tidak tersedia informasi rinci.
|
|
9
9
|
|
|
10
10
|
M_DRAFT_POPOVER_ADMIN_LAST_CHANGE_TEXT=Terakhir diubah pada {0}.
|
|
11
11
|
|
|
12
|
-
M_FIELD_RUNTIME_DRAFT_POPOVER_UNSAVED_CHANGES_BY_KNOWN=Objek ini memiliki perubahan belum
|
|
12
|
+
M_FIELD_RUNTIME_DRAFT_POPOVER_UNSAVED_CHANGES_BY_KNOWN=Objek ini memiliki perubahan yang belum disimpan yang dibuat oleh {0}.
|
|
13
13
|
|
|
14
14
|
M_FIELD_RUNTIME_DRAFT_POPOVER_UNSAVED_CHANGES_BY_UNKNOWN=Ada perubahan belum tersimpan oleh pengguna lain di objek ini.
|
|
15
15
|
|
|
@@ -142,7 +142,7 @@ M_FIELD_FILEUPLOADER_WRONG_MIMETYPE_DETAILS_ALLOWED=Format file yang diizinkan\:
|
|
|
142
142
|
|
|
143
143
|
M_FIELD_FILEUPLOADER_FILE_TOO_BIG=File terlalu besar. Ukuran maksimum yang diizinkan adalah {0} MB.
|
|
144
144
|
|
|
145
|
-
M_FILEWRAPPER_BUSY_DIALOG_TITLE=
|
|
145
|
+
M_FILEWRAPPER_BUSY_DIALOG_TITLE=Pengunggahan File
|
|
146
146
|
|
|
147
147
|
|
|
148
148
|
M_PAGINATOR_CONTROL_PAGINATOR_TOOLTIP_UP=Item Sebelumnya
|
|
@@ -106,7 +106,7 @@ M_VISUAL_FILTERS_ERROR_DATA_TEXT=\u6280\u8853\u7684\u306A\u554F\u984C\u3067\u30C
|
|
|
106
106
|
|
|
107
107
|
M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_SINGLEVF={0} \u306E\u30D5\u30A3\u30EB\u30BF\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044
|
|
108
108
|
|
|
109
|
-
M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_MULTIPLEVF=\u3059\u3079\u3066\u306E\u5FC5\u9808\
|
|
109
|
+
M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_MULTIPLEVF=\u3059\u3079\u3066\u306E\u5FC5\u9808\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u30D5\u30A3\u30EB\u30BF\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
110
110
|
|
|
111
111
|
M_VISUAL_FILTERS_MULTIPLE_CURRENCY=\u3053\u306E\u30C1\u30E3\u30FC\u30C8\u3092\u8868\u793A\u3059\u308B\u306B\u306F\u30011 \u3064\u306E\u901A\u8CA8\u3060\u3051\u3092 {0} \u306B\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
112
112
|
|
|
@@ -5,7 +5,7 @@ M_COMMON_DRAFT_OBJECT=\u041D\u043E\u0431\u0430\u0439
|
|
|
5
5
|
|
|
6
6
|
M_DRAFT_POPOVER_ADMIN_UNSAVED_OBJECT=\u0421\u0430\u049B\u0442\u0430\u043B\u043C\u0430\u0493\u0430\u043D \u04E9\u0437\u0433\u0435\u0440\u0456\u0441\u0442\u0435\u0440
|
|
7
7
|
|
|
8
|
-
M_FIELD_RUNTIME_DRAFT_POPOVER_NO_DATA_TEXT=\u0422\u043E\u043B\u044B\u049B \
|
|
8
|
+
M_FIELD_RUNTIME_DRAFT_POPOVER_NO_DATA_TEXT=\u0422\u043E\u043B\u044B\u049B \u0430\u049B\u043F\u0430\u0440\u0430\u0442 \u0436\u043E\u049B.
|
|
9
9
|
|
|
10
10
|
M_DRAFT_POPOVER_ADMIN_LAST_CHANGE_TEXT=\u0421\u043E\u04A3\u0493\u044B \u04E9\u0437\u0433\u0435\u0440\u0442\u0456\u043B\u0433\u0435\u043D \u043A\u04AF\u043D\u0456\: {0}.
|
|
11
11
|
|
|
@@ -69,7 +69,7 @@ T_COMMON_HEADERDP_TITLE_LINK_INPAGE_ARIA=\u0410\u0493\u044B\u043C\u0434\u0430\u0
|
|
|
69
69
|
|
|
70
70
|
T_COMMON_OBJECT_PAGE_SHOW_FORM_CONTAINER_DETAILS=\u041C\u04D9\u043B\u0456\u043C\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u043A\u04E9\u0440\u0441\u0435\u0442\u0443
|
|
71
71
|
|
|
72
|
-
T_COMMON_OBJECT_PAGE_HIDE_FORM_CONTAINER_DETAILS=\
|
|
72
|
+
T_COMMON_OBJECT_PAGE_HIDE_FORM_CONTAINER_DETAILS=\u041C\u04D9\u043B\u0456\u043C\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u0436\u0430\u0441\u044B\u0440\u0443
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
M_KEYBOARD_SHORTCUT_CREATE_WIN=CTRL+Enter
|
|
@@ -21,7 +21,7 @@ C_DRAFT_EDIT_STATE_DRAFT_ALL_FILTER=T\u00E2\u0301t ca\u0309
|
|
|
21
21
|
|
|
22
22
|
C_DRAFT_EDIT_STATE_DRAFT_UNCHANGED_FILTER=Kh\u00F4ng thay \u0111\u00F4\u0309i
|
|
23
23
|
|
|
24
|
-
C_DRAFT_EDIT_STATE_DRAFT_OWN_DRAFT_FILTER=Ba\u0309n
|
|
24
|
+
C_DRAFT_EDIT_STATE_DRAFT_OWN_DRAFT_FILTER=Ba\u0309n tha\u0309o ri\u00EAng
|
|
25
25
|
|
|
26
26
|
C_DRAFT_EDIT_STATE_DRAFT_LOCKED_FILTER=Bi\u0323 kho\u0301a b\u01A1\u0309i ng\u01B0\u01A1\u0300i du\u0300ng kha\u0301c
|
|
27
27
|
|
|
@@ -100,7 +100,7 @@ M_INTERACTIVE_CHART_HELPER_VISUALFILTER_MEASURE_DIMENSION_TITLE={0} (\u6309 {1})
|
|
|
100
100
|
|
|
101
101
|
M_INTERACTIVE_CHART_HELPER_VISUALFILTER_TOOLTIP_SEPERATOR=\u5728
|
|
102
102
|
|
|
103
|
-
M_TABLE_GROUP_HEADER_TITLE={0}
|
|
103
|
+
M_TABLE_GROUP_HEADER_TITLE={0}\uFF1A{1}
|
|
104
104
|
|
|
105
105
|
M_VISUAL_FILTERS_ERROR_DATA_TEXT=\u7531\u65BC\u6280\u8853\u554F\u984C\uFF0C\u56E0\u6B64\u7121\u6CD5\u8F09\u5165\u8CC7\u6599\u3002
|
|
106
106
|
|
|
@@ -279,6 +279,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/deepEqu
|
|
|
279
279
|
if (oExportSettings.template) {
|
|
280
280
|
oExportSettings.template = oColumnInfo.exportSettings.template;
|
|
281
281
|
}
|
|
282
|
+
if (oExportSettings.timezoneProperty || oExportSettings.type === "DateTime" && !(oExportSettings !== null && oExportSettings !== void 0 && oExportSettings.timezone)) {
|
|
283
|
+
oExportSettings.utc = false;
|
|
284
|
+
}
|
|
282
285
|
}
|
|
283
286
|
var oPropertyInfo = {
|
|
284
287
|
name: oColumnInfo.name,
|
|
@@ -1121,4 +1124,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/deepEqu
|
|
|
1121
1124
|
}
|
|
1122
1125
|
});
|
|
1123
1126
|
}, false);
|
|
1124
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIkZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWSIsIlNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIkNvbW1vblV0aWxzIiwiU0VBUkNIX0hBU19CRUVOX0ZJUkVEIiwiQ09MVU1OX0hBU19CRUVOX0FEREVEIiwiUFJFVklPVVNfU09SVEVSUyIsIl9zZXRDYWNoZWRQcm9wZXJ0aWVzIiwib1RhYmxlIiwiYUZldGNoZWRQcm9wZXJ0aWVzIiwiYlVzZUFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwid2luZG93IiwiRWxlbWVudCIsImtleSIsIkRlbGVnYXRlVXRpbCIsInNldEN1c3RvbURhdGEiLCJfZ2V0Q2FjaGVkUHJvcGVydGllcyIsImdldEN1c3RvbURhdGEiLCJPYmplY3QiLCJhc3NpZ24iLCJUYWJsZURlbGVnYXRlQmFzZSIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwIiwib1Byb3BlcnR5IiwiYVByb3BlcnRpZXMiLCJuYW1lIiwiaW5kZXhPZiIsIm9Db2x1bW4iLCJnZXRDb2x1bW5zIiwiZmluZCIsIm9Db2wiLCJnZXREYXRhUHJvcGVydHkiLCJiU2hvd0RhdGFGaWVsZHNMYWJlbCIsImRhdGEiLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibWV0YWRhdGFQYXRoIiwicmVwbGFjZSIsIm9EYXRhRmllbGQiLCJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiRBbm5vdGF0aW9uUGF0aCIsImFGaWVsZFdpZHRoIiwiRGF0YSIsImZvckVhY2giLCJvRGF0YSIsIm9EYXRhRmllbGRXaWR0aCIsIiRUeXBlIiwiVGFibGVTaXplSGVscGVyIiwiZ2V0V2lkdGhGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiZ2V0V2lkdGhGb3JEYXRhRmllbGQiLCJsYWJlbFdpZHRoIiwicHJvcGVydHlXaWR0aCIsImdldEJ1dHRvbldpZHRoIiwiTGFiZWwiLCJwdXNoIiwibldpZGVzdCIsInJlZHVjZSIsImFjYyIsInZhbHVlIiwiTWF0aCIsIm1heCIsInZpc3VhbFNldHRpbmdzIiwiZGVlcEV4dGVuZCIsIndpZHRoQ2FsY3VsYXRpb24iLCJ2ZXJ0aWNhbEFycmFuZ2VtZW50IiwibWluV2lkdGgiLCJjZWlsIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFZhbHVlSGVscCIsIm9UYWJsZUFQSSIsImdldFBhcmVudCIsInByb3BlcnR5SW5mb3MiLCJ1bmRlZmluZWQiLCJFcnJvciIsImdhcCIsImdldFJlYWRPbmx5IiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFVuaXQiLCJvVW5pdCIsIm9Vbml0VGV4dCIsIm9UaW1lem9uZVRleHQiLCJzVW5pdFRleHQiLCJfY29tcHV0ZUxhYmVsIiwicHJvcGVydHkiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJsZW5ndGgiLCJwYXRoIiwiaW5jbHVkZXMiLCJhZGRpdGlvbmFsTGFiZWxzIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJ0YWJsZSIsInByb3BlcnRpZXMiLCJwMTNuTW9kZSIsImdldFAxM25Nb2RlIiwic29ydGFibGUiLCJmaWx0ZXJhYmxlIiwiZ3JvdXBhYmxlIiwiY29uY2F0IiwidHlwZUNvbmZpZyIsImdldENvbHVtbnNGb3IiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb2x1bW5zIiwiX2dldEFnZ3JlZ2F0ZWRQcm9wZXJ0eU1hcCIsImFnZ3JlZ2F0ZXMiLCJmZXRjaEV4cG9ydENhcGFiaWxpdGllcyIsIm9DYXBhYmlsaXRpZXMiLCJvTW9kZWwiLCJmZXRjaE1vZGVsIiwibW9kZWwiLCJhU3VwcG9ydGVkRm9ybWF0cyIsImFMb3dlckZvcm1hdHMiLCJtYXAiLCJlbGVtZW50IiwidG9Mb3dlckNhc2UiLCJvQW5ub3RhdGlvbiIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5IiwiY29sdW1uSW5mbyIsIm1ldGFNb2RlbCIsInRhYmxlTWV0YVBhdGgiLCJ0YWJsZURhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRDb250ZXh0IiwiY29sdW1uTmF2aWdhdGlvblByb3BlcnRpZXMiLCJhbm5vdGF0aW9uUGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFibGVUYXJnZXRFbnRpdHlJbmRleCIsImZpbmRJbmRleCIsInByb3AiLCJ0YXJnZXRUeXBlIiwidGFyZ2V0RW50aXR5VHlwZSIsInJlbGF0aXZlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJzbGljZSIsInJlbGF0aXZlUGF0aCIsImlzUGFydE9mTGluZUl0ZW0iLCJzb21lIiwibmF2aWdhdGlvblByb3BlcnR5IiwiX3R5cGUiLCJpc0NvbGxlY3Rpb24iLCJfZmV0Y2hQcm9wZXJ0eUluZm8iLCJvQ29sdW1uSW5mbyIsIm9BcHBDb21wb25lbnQiLCJzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCIsIm9OYXZpZ2F0aW9uQ29udGV4dCIsIm9UeXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiaXNUeXBlRmlsdGVyYWJsZSIsIlR5cGVVdGlsIiwiZ2V0VHlwZUNvbmZpZyIsIm9Gb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiYkZpbHRlcmFibGUiLCJDb21tb25IZWxwZXIiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsImNvbnRleHQiLCJiQ29tcGxleFR5cGUiLCJiSXNBbmFseXRpY2FsVGFibGUiLCJhQWdncmVnYXRlZFByb3BlcnR5TWFwVW5maWx0ZXJhYmxlIiwib0V4cG9ydFNldHRpbmdzIiwiZXhwb3J0U2V0dGluZ3MiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0Iiwic0xhYmVsIiwiaXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHkiLCJSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsImdldExvY2FsaXplZFRleHQiLCJ0aW1lem9uZVByb3BlcnR5IiwiZm9ybWF0IiwidGVtcGxhdGUiLCJvUHJvcGVydHlJbmZvIiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwidG9vbHRpcCIsInZpc2libGUiLCJhdmFpbGFiaWxpdHkiLCJ1bml0Iiwia2V5cyIsIndyYXAiLCJhZGRpdGlvbmFsUHJvcGVydHlJbmZvcyIsImlzS2V5IiwiaXNHcm91cGFibGUiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJvRGVzY3JpcHRpb25Db2x1bW4iLCJ0ZXh0UHJvcGVydHkiLCJtb2RlIiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJ0ZXh0IiwiY2FzZVNlbnNpdGl2ZSIsInVuaXRUZXh0IiwidGltZXpvbmVUZXh0IiwiX2ZldGNoQ3VzdG9tUHJvcGVydHlJbmZvIiwiaGVhZGVyIiwidHlwZSIsIl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3IiLCJmb3JtYXRPcHRpb25zIiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJfdXBkYXRlRHJhZnRJbmRpY2F0b3JNb2RlbCIsIl9vVGFibGUiLCJfb0NvbHVtbkluZm8iLCJhVmlzaWJsZUNvbHVtbnMiLCJvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic0ludGVybmFsUGF0aCIsImdldFBhdGgiLCJpbmRleCIsImdldFByb3BlcnR5Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5Iiwic0VudGl0eVR5cGVQYXRoIiwic0JpbmRpbmdQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwib0ZSIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiYU5vbkZpbHRlcmFibGVQcm9wcyIsIk5PTl9GSUxURVJBQkxFX1BST1BFUlRJRVMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFDb2x1bW5zIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZSIsIl9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eSIsImFTdWJGZXRjaGVkUHJvcGVydGllcyIsIl9zZXRUYWJsZU5vRGF0YVRleHQiLCJvQmluZGluZ0luZm8iLCJzTm9EYXRhS2V5Iiwib1RhYmxlRmlsdGVySW5mbyIsIlRhYmxlVXRpbHMiLCJnZXRBbGxGaWx0ZXJJbmZvIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdGFydHNXaXRoIiwic3Vic3RyIiwiX2dldE5vRGF0YVRleHRXaXRoRmlsdGVycyIsInNGaWx0ZXJBc3NvY2lhdGlvbiIsImdldEZpbHRlciIsInRlc3QiLCJzZWFyY2giLCJmaWx0ZXJzIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJvUmVzb3VyY2VCdW5kbGUiLCJzZXROb0RhdGEiLCJnZXRUcmFuc2xhdGVkVGV4dCIsImhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkIiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwib0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiYkRhdGFSZWNlaXZlZEF0dGFjaGVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwiVGFibGVIZWxwZXIiLCJoYW5kbGVUYWJsZURlbGV0ZUVuYWJsZW1lbnRGb3JTaWRlRWZmZWN0cyIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJKU09OIiwicGFyc2UiLCJwYXJzZUN1c3RvbURhdGEiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsInNldFVwRW1wdHlSb3dzIiwicmViaW5kIiwiYklzU3VzcGVuZGVkIiwiY2xlYXJTZWxlY3Rpb24iLCJhcHBseSIsIm9uVGFibGVCb3VuZCIsIndoZW5Cb3VuZCIsIm9FcnJvciIsImZldGNoUHJvcGVydGllcyIsInByZUluaXQiLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwiZmlsdGVyQmFyIiwiQ29yZSIsImJ5SWQiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiYXR0YWNoRXZlbnQiLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwidXBkYXRlQmluZGluZ0luZm8iLCJfaW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbyIsImV2ZW50cyIsImRhdGFSZWNlaXZlZCIsIm9uSW50ZXJuYWxEYXRhUmVjZWl2ZWQiLCJkYXRhUmVxdWVzdGVkIiwib25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQiLCJfbWFuYWdlU2VtYW50aWNUYXJnZXRzIiwib01EQ1RhYmxlIiwib1Jvd0JpbmRpbmciLCJhdHRhY2hFdmVudE9uY2UiLCJzZXRUaW1lb3V0IiwiX29WaWV3IiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVRhYmxlIiwiZ2V0Q29udHJvbGxlciIsInVwZGF0ZUJpbmRpbmciLCJiaW5kaW5nSW5mbyIsImJpbmRpbmciLCJuZWVkTWFudWFsUmVmcmVzaCIsIm1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5IiwicGVuZGluZ01hbnVhbFVwZGF0ZSIsIm5ld1NvcnRlcnMiLCJzdHJpbmdpZnkiLCJzb3J0ZXIiLCJvbGRGaWx0ZXJzIiwiZ2V0RmlsdGVycyIsInByZXZpb3VzU29ydGVycyIsImZpbHRlck5vdENoYW5nZWQiLCJkZWVwRXF1YWwiLCJnZXRRdWVyeU9wdGlvbnNGcm9tUGFyYW1ldGVycyIsIiRzZWFyY2giLCJwYXJhbWV0ZXJzIiwiTFJNdWx0aVZpZXdFbmFibGVkIiwidmlld3MiLCJmaXJlRXZlbnQiLCJyZXF1ZXN0UmVmcmVzaCIsImdldEdyb3VwSWQiLCJmaW5hbGx5IiwiX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZSIsInJvd0JpbmRpbmdJbmZvIiwiZGVlcENsb25lIiwiJCRnZXRLZWVwQWxpdmVDb250ZXh0IiwiY29sbGVjdGlvblBhdGgiLCJpbnRlcm5hbE1vZGVsIiwia2VwdEFsaXZlTGlzdHMiLCJnZXRJZCIsInN1c3BlbmRlZCIsIm9GaWx0ZXIiLCJvRmlsdGVySW5mbyIsIkZpbHRlciIsImFuZCIsImJpbmRpbmdQYXRoIiwib0RhdGFTdGF0ZUluZGljYXRvciIsImdldERhdGFTdGF0ZUluZGljYXRvciIsImlzRmlsdGVyaW5nIiwiX3RlbXBsYXRlQ3VzdG9tQ29sdW1uRnJhZ21lbnQiLCJvVmlldyIsIm9Nb2RpZmllciIsInNUYWJsZUlkIiwib0NvbHVtbk1vZGVsIiwiSlNPTk1vZGVsIiwib1RoaXMiLCJpZCIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsImJpbmRpbmdDb250ZXh0cyIsIm1vZGVscyIsInRlbXBsYXRlQ29udHJvbEZyYWdtZW50Iiwib0l0ZW0iLCJkZXN0cm95IiwiX3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50IiwiaXNYTUwiLCJzbG90Q29sdW1uc1hNTCIsInNsb3RYTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm1kY1RhYmxlVGVtcGxhdGVYTUwiLCJyZW1vdmVDaGlsZCIsIm9UZW1wbGF0ZSIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImFwcGVuZENoaWxkIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJ0YXJnZXRzIiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsImRhdGFUeXBlIiwiRXhjZWxGb3JtYXQiLCJnZXRFeGNlbERhdGVmcm9tSlNEYXRlIiwiZ2V0RXhjZWxEYXRlVGltZWZyb21KU0RhdGVUaW1lIiwiZ2V0RXhjZWxUaW1lZnJvbUpTVGltZSIsIl9nZXRWSFJlbGV2YW50RmllbGRzIiwic01ldGFkYXRhUGF0aCIsImFGaWVsZHMiLCJvRGF0YUZpZWxkRGF0YSIsIiRraW5kIiwib1ZhbHVlIiwiaUluZGV4Iiwic3Vic3RyaW5nIiwiZ2V0TmF2aWdhdGlvblBhdGgiLCJfc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW4iLCJhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvciIsImZpbHRlciIsInNBZGRWaXNpYmxlQ29sdW1uTmFtZSIsInNWaXNpYmxlQ29sdW1uTmFtZSIsImJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQiLCJzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvciIsImkiLCJqIiwicmVtb3ZlSXRlbSIsIm9Qcm9wZXJ0eUluZm9OYW1lIiwibVByb3BlcnR5QmFnIiwiZG9SZW1vdmVJdGVtIiwibW9kaWZpZXIiLCJzRGF0YVByb3BlcnR5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJpc0EiLCJfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMiLCJfZ2V0TWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiX2dldEdyb3VwSWQiLCJzUmV0cmlldmVkR3JvdXBJZCIsIl9nZXREZXBlbmRlbnQiLCJvRGVwZW5kZW50Iiwic1Byb3BlcnR5SW5mb05hbWUiLCJfZm5UZW1wbGF0ZVZhbHVlSGVscCIsImZuVGVtcGxhdGVWYWx1ZUhlbHAiLCJiVmFsdWVIZWxwUmVxdWlyZWQiLCJiVmFsdWVIZWxwRXhpc3RzIiwiX2dldERpc3BsYXlNb2RlIiwiYkRpc3BsYXlNb2RlIiwiY29sdW1uRWRpdE1vZGUiLCJkaXNwbGF5bW9kZSIsIl9pbnNlcnRBZ2dyZWdhdGlvbiIsIm9WYWx1ZUhlbHAiLCJhZGRJdGVtIiwic1BhdGgiLCJzR3JvdXBJZCIsIm9UYWJsZUNvbnRleHQiLCJvSW5mbyIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJhVkhQcm9wZXJ0aWVzIiwib1BhcmFtZXRlcnMiLCJzVmFsdWVIZWxwVHlwZSIsIm9Db250cm9sIiwic0ZyYWdtZW50TmFtZSIsInJlcXVlc3RHcm91cElkIiwibWVzc2FnZSIsImZuVGVtcGxhdGVGcmFnbWVudCIsIm9JblByb3BlcnR5SW5mbyIsInNUYWJsZVR5cGVDdXN0b21EYXRhIiwic09uQ2hhbmdlQ3VzdG9tRGF0YSIsInNDcmVhdGlvbk1vZGVDdXN0b21EYXRhIiwiYWxsIiwiYUN1c3RvbURhdGEiLCJvRGlzcGxheU1vZGVzIiwicmVhZE9ubHkiLCJ0YWJsZVR5cGUiLCJvbkNoYW5nZSIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJjb2xsZWN0aW9uIiwiY3JlYXRpb25Nb2RlIiwic1Byb3BlcnR5TmFtZSIsIm1QYXJhbWV0ZXJzIiwiaXNWYWx1ZUhlbHBSZXF1aXJlZCIsImRvZXNWYWx1ZUhlbHBFeGlzdCIsImFSZXN1bHRzIiwiZ2V0Q3VycmVudFBhZ2VWaWV3IiwiZ2V0RmlsdGVyRGVsZWdhdGUiLCJGaWx0ZXJCYXJEZWxlZ2F0ZSIsIm9QYXJlbnRDb250cm9sIiwiZ2V0VHlwZVV0aWwiLCJmb3JtYXRHcm91cEhlYWRlciIsInNQcm9wZXJ0eSIsIm1Gb3JtYXRJbmZvcyIsIm9Gb3JtYXRJbmZvIiwib2JqIiwiYkV4dGVybmFsRm9ybWF0IiwiYmFzZVR5cGUiLCJzVmFsdWUiLCJWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFdpdGhCcmFja2V0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEV4dGVuZFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBDdXN0b21CYXNlZFRhYmxlQ29sdW1uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFZhbHVlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgRXhjZWxGb3JtYXQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRXhjZWxGb3JtYXRIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciwgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgVHlwZVV0aWwgZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvVHlwZVV0aWxcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsLCB7IFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlckJhckRlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJEZWxlZ2F0ZVwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgVGFibGVTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlU2l6ZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCBUYWJsZURlbGVnYXRlQmFzZSBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDVGFibGUsIGRlZmF1bHQgYXMgVGFibGUgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwiLi4vVGFibGVBUElcIjtcblxuY29uc3QgRkVUQ0hFRF9QUk9QRVJUSUVTX0RBVEFfS0VZID0gXCJzYXBfZmVfVGFibGVEZWxlZ2F0ZV9wcm9wZXJ0eUluZm9NYXBcIjtcbnR5cGUgQmluZGluZ0luZm8gPSB7XG5cdHN1c3BlbmRlZD86IGJvb2xlYW47XG5cdHBhdGg/OiBzdHJpbmc7XG5cdGZpbHRlcnM/OiBGaWx0ZXI7XG5cdHNlYXJjaD86IHN0cmluZztcblx0cGFyYW1ldGVyczoge1xuXHRcdCRzZWFyY2g6IHN0cmluZztcblx0fTtcblx0c29ydGVyPzogU29ydGVyW107XG59O1xuY29uc3QgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SID0gXCIvc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiO1xuY29uc3QgRmlsdGVyUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuY29uc3QgU0VBUkNIX0hBU19CRUVOX0ZJUkVEID0gXCJzZWFyY2hGaXJlZFwiO1xuY29uc3QgQ09MVU1OX0hBU19CRUVOX0FEREVEID0gXCJjb2x1bW5BZGRlZFwiO1xuY29uc3QgUFJFVklPVVNfU09SVEVSUyA9IFwicHJldmlvdXNTb3J0ZXJzXCI7XG5cbmZ1bmN0aW9uIF9zZXRDYWNoZWRQcm9wZXJ0aWVzKG9UYWJsZTogYW55LCBhRmV0Y2hlZFByb3BlcnRpZXM6IGFueSwgYlVzZUFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBhbnkpIHtcblx0Ly8gZG8gbm90IGNhY2hlIGR1cmluZyB0ZW1wbGF0aW5nLCBlbHNlIGl0IGJlY29tZXMgcGFydCBvZiB0aGUgY2FjaGVkIHZpZXdcblx0aWYgKG9UYWJsZSBpbnN0YW5jZW9mIHdpbmRvdy5FbGVtZW50KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IGtleSA9IGJVc2VBZGRpdGlvbmFsUHJvcGVydGllcyA/IGAke0ZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWX1fYWRkYCA6IEZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWTtcblx0RGVsZWdhdGVVdGlsLnNldEN1c3RvbURhdGEob1RhYmxlLCBrZXksIGFGZXRjaGVkUHJvcGVydGllcyk7XG59XG5mdW5jdGlvbiBfZ2V0Q2FjaGVkUHJvcGVydGllcyhvVGFibGU6IGFueSwgYlVzZUFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBhbnkpIHtcblx0Ly8gcHJvcGVydGllcyBhcmUgbm90IGNhY2hlZCBkdXJpbmcgdGVtcGxhdGluZ1xuXHRpZiAob1RhYmxlIGluc3RhbmNlb2Ygd2luZG93LkVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRjb25zdCBrZXkgPSBiVXNlQWRkaXRpb25hbFByb3BlcnRpZXMgPyBgJHtGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVl9X2FkZGAgOiBGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVk7XG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIGtleSk7XG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBzYXAudWkubWRjLlRhYmxlLlxuICogPGgzPjxiPk5vdGU6PC9iPjwvaDM+XG4gKiBUaGUgY2xhc3MgaXMgZXhwZXJpbWVudGFsIGFuZCB0aGUgQVBJIGFuZCB0aGUgYmVoYXZpb3IgYXJlIG5vdCBmaW5hbGl6ZWQuIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIGZvciBwcm9kdWN0aXZlIHVzYWdlLlxuICpcbiAqIEBhdXRob3IgU0FQIFNFXG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbFxuICogQHNpbmNlIDEuNjlcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlRGVsZWdhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgT2JqZWN0LmFzc2lnbih7fSwgVGFibGVEZWxlZ2F0ZUJhc2UsIHtcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgYSBGaWVsZEdyb3VwIGNvbHVtbi5cblx0ICogVGhlIHdpZHRoIG9mIHRoZSBGaWVsZEdyb3VwIGlzIHRoZSB3aWR0aCBvZiB0aGUgd2lkZXN0IHByb3BlcnR5IGNvbnRhaW5lZCBpbiB0aGUgRmllbGRHcm91cCAoaW5jbHVkaW5nIHRoZSBsYWJlbCBpZiBzaG93RGF0YUZpZWxkc0xhYmVsIGlzIHRydWUpXG5cdCAqIFRoZSByZXN1bHQgb2YgdGhpcyBjYWxjdWxhdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24ubWluV2lkdGggcHJvcGVydHksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIE1EQ3RhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRoZSBNREN0YWJsZVxuXHQgKiBAcGFyYW0gb1Byb3BlcnR5IEN1cnJlbnQgcHJvcGVydHlcblx0ICogQHBhcmFtIGFQcm9wZXJ0aWVzIEFycmF5IG9mIHByb3BlcnRpZXNcblx0ICogQHByaXZhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVEZWxlZ2F0ZVxuXHQgKi9cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXA6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvUHJvcGVydHk6IGFueSwgYVByb3BlcnRpZXM6IGFueVtdKSB7XG5cdFx0aWYgKG9Qcm9wZXJ0eS5uYW1lLmluZGV4T2YoXCJEYXRhRmllbGRGb3JBbm5vdGF0aW9uOjpGaWVsZEdyb3VwOjpcIikgPT09IDApIHtcblx0XHRcdGNvbnN0IG9Db2x1bW4gPSBvVGFibGUuZ2V0Q29sdW1ucygpLmZpbmQoZnVuY3Rpb24gKG9Db2w6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbC5nZXREYXRhUHJvcGVydHkoKSA9PT0gb1Byb3BlcnR5Lm5hbWU7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJTaG93RGF0YUZpZWxkc0xhYmVsID0gb0NvbHVtbiA/IG9Db2x1bW4uZGF0YShcInNob3dEYXRhRmllbGRzTGFiZWxcIikgPT09IFwidHJ1ZVwiIDogZmFsc2U7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gKG9UYWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG9Qcm9wZXJ0eS5tZXRhZGF0YVBhdGgucmVwbGFjZSgvQC4qLywgXCJcIikpIGFzIENvbnRleHQ7XG5cdFx0XHRjb25zdCBvRGF0YUZpZWxkID0gb01ldGFNb2RlbC5nZXRPYmplY3Qob1Byb3BlcnR5Lm1ldGFkYXRhUGF0aCk7XG5cdFx0XHRjb25zdCBvRmllbGRHcm91cDogYW55ID0gb0RhdGFGaWVsZC5UYXJnZXQgPyBvQ29udGV4dC5nZXRPYmplY3Qob0RhdGFGaWVsZC5UYXJnZXQuJEFubm90YXRpb25QYXRoKSA6IG51bGw7XG5cdFx0XHRjb25zdCBhRmllbGRXaWR0aDogYW55ID0gW107XG5cdFx0XHRvRmllbGRHcm91cC5EYXRhLmZvckVhY2goZnVuY3Rpb24gKG9EYXRhOiBhbnkpIHtcblx0XHRcdFx0bGV0IG9EYXRhRmllbGRXaWR0aDogYW55O1xuXHRcdFx0XHRzd2l0Y2ggKG9EYXRhLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdG9EYXRhLFxuXHRcdFx0XHRcdFx0XHRiU2hvd0RhdGFGaWVsZHNMYWJlbCxcblx0XHRcdFx0XHRcdFx0YVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0XHRcdG9Db250ZXh0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0XHRcdFx0aWYgKGJTaG93RGF0YUZpZWxkc0xhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZChvRGF0YSwgYlNob3dEYXRhRmllbGRzTGFiZWwsIGFQcm9wZXJ0aWVzLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsV2lkdGg6IDAsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5V2lkdGg6IFRhYmxlU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChvRGF0YS5MYWJlbClcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkV2lkdGgpIHtcblx0XHRcdFx0XHRhRmllbGRXaWR0aC5wdXNoKG9EYXRhRmllbGRXaWR0aC5sYWJlbFdpZHRoICsgb0RhdGFGaWVsZFdpZHRoLnByb3BlcnR5V2lkdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IG5XaWRlc3QgPSBhRmllbGRXaWR0aC5yZWR1Y2UoZnVuY3Rpb24gKGFjYzogYW55LCB2YWx1ZTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBNYXRoLm1heChhY2MsIHZhbHVlKTtcblx0XHRcdH0sIDApO1xuXHRcdFx0b1Byb3BlcnR5LnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChvUHJvcGVydHkudmlzdWFsU2V0dGluZ3MsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdHZlcnRpY2FsQXJyYW5nZW1lbnQ6IHRydWUsXG5cdFx0XHRcdFx0bWluV2lkdGg6IE1hdGguY2VpbChuV2lkZXN0KVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFZhbHVlSGVscDogZnVuY3Rpb24gKG9UYWJsZTogYW55LCBvUHJvcGVydHk6IGFueSkge1xuXHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZSA/IG9UYWJsZS5nZXRQYXJlbnQoKSA6IG51bGw7XG5cdFx0aWYgKCFvUHJvcGVydHkucHJvcGVydHlJbmZvcykge1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9UYWJsZS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eS5tZXRhZGF0YVBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJhIGBtZXRhZGF0YVBhdGhgIHByb3BlcnR5IGlzIGV4cGVjdGVkIHdoZW4gY29tcHV0aW5nIFZpc3VhbFNldHRpbmdzIGZvciBwcm9wZXJ0eSB3aXRoIFZhbHVlSGVscFwiKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9EYXRhRmllbGQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtvUHJvcGVydHkubWV0YWRhdGFQYXRofUBgKTtcblx0XHRcdGlmIChvRGF0YUZpZWxkICYmIG9EYXRhRmllbGRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXSkge1xuXHRcdFx0XHRvUHJvcGVydHkudmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKG9Qcm9wZXJ0eS52aXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHRcdGdhcDogb1RhYmxlQVBJICYmIG9UYWJsZUFQSS5nZXRSZWFkT25seSgpID8gMCA6IDRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdDogZnVuY3Rpb24gKFxuXHRcdG9UYWJsZTogYW55LFxuXHRcdG9Qcm9wZXJ0eTogYW55LFxuXHRcdG9Vbml0OiBzdHJpbmcsXG5cdFx0b1VuaXRUZXh0OiBzdHJpbmcsXG5cdFx0b1RpbWV6b25lVGV4dDogc3RyaW5nXG5cdCkge1xuXHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZSA/IG9UYWJsZS5nZXRQYXJlbnQoKSA6IG51bGw7XG5cdFx0Ly8gdXBkYXRlIGdhcCBmb3IgcHJvcGVydGllcyB3aXRoIHN0cmluZyB1bml0XG5cdFx0Y29uc3Qgc1VuaXRUZXh0ID0gb1VuaXRUZXh0IHx8IG9UaW1lem9uZVRleHQ7XG5cdFx0aWYgKHNVbml0VGV4dCkge1xuXHRcdFx0b1Byb3BlcnR5LnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChvUHJvcGVydHkudmlzdWFsU2V0dGluZ3MsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdGdhcDogTWF0aC5jZWlsKFRhYmxlU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChzVW5pdFRleHQpKVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9Vbml0KSB7XG5cdFx0XHRvUHJvcGVydHkudmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKG9Qcm9wZXJ0eS52aXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Ly8gRm9yIHByb3BlcnRpZXMgd2l0aCB1bml0LCBhIGdhcCBuZWVkcyB0byBiZSBhZGRlZCB0byBwcm9wZXJseSByZW5kZXIgdGhlIGNvbHVtbiB3aWR0aCBvbiBlZGl0IG1vZGVcblx0XHRcdFx0XHRnYXA6IG9UYWJsZUFQSSAmJiBvVGFibGVBUEkuZ2V0UmVhZE9ubHkoKSA/IDAgOiA2XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZUxhYmVsOiBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5SW5mbywgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBQcm9wZXJ0eUluZm9bXSB9KSB7XG5cdFx0aWYgKHByb3BlcnR5LmxhYmVsKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzV2l0aFNhbWVMYWJlbCA9IGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXTtcblx0XHRcdGlmIChwcm9wZXJ0aWVzV2l0aFNhbWVMYWJlbD8ubGVuZ3RoID4gMSAmJiBwcm9wZXJ0eS5wYXRoPy5pbmNsdWRlcyhcIi9cIikgJiYgcHJvcGVydHkuYWRkaXRpb25hbExhYmVscykge1xuXHRcdFx0XHRwcm9wZXJ0eS5sYWJlbCA9IHByb3BlcnR5LmxhYmVsICsgXCIgKFwiICsgcHJvcGVydHkuYWRkaXRpb25hbExhYmVscy5qb2luKFwiIC8gXCIpICsgXCIpXCI7XG5cdFx0XHR9XG5cdFx0XHRkZWxldGUgcHJvcGVydHkuYWRkaXRpb25hbExhYmVscztcblx0XHR9XG5cdH0sXG5cdC8vVXBkYXRlIFZpc3VhbFNldHRpbmcgZm9yIGNvbHVtbldpZHRoIGNhbGN1bGF0aW9uIGFuZCBsYWJlbHMgb24gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdF91cGRhdGVQcm9wZXJ0eUluZm86IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIHByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdKSB7XG5cdFx0Y29uc3QgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBQcm9wZXJ0eUluZm9bXSB9ID0ge307XG5cdFx0Ly8gQ2hlY2sgYXZhaWxhYmxlIHAxM24gbW9kZXNcblx0XHRjb25zdCBwMTNuTW9kZSA9IHRhYmxlLmdldFAxM25Nb2RlKCk7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHlJbmZvKSA9PiB7XG5cdFx0XHRpZiAoIXByb3BlcnR5LnByb3BlcnR5SW5mb3MgJiYgcHJvcGVydHkubGFiZWwpIHtcblx0XHRcdFx0Ly8gT25seSBmb3Igbm9uLWNvbXBsZXggcHJvcGVydGllc1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmRleE9mKFwiU29ydFwiKSA+IC0xICYmIHByb3BlcnR5LnNvcnRhYmxlKSB8fFxuXHRcdFx0XHRcdChwMTNuTW9kZT8uaW5kZXhPZihcIkZpbHRlclwiKSA+IC0xICYmIHByb3BlcnR5LmZpbHRlcmFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmRleE9mKFwiR3JvdXBcIikgPiAtMSAmJiBwcm9wZXJ0eS5ncm91cGFibGUpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSA9XG5cdFx0XHRcdFx0XHRsYWJlbE1hcFtwcm9wZXJ0eS5sYWJlbF0gIT09IHVuZGVmaW5lZCA/IGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXS5jb25jYXQoW3Byb3BlcnR5XSkgOiBbcHJvcGVydHldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogYW55KSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdC8vIGJjcDogMjI3MDAwMzU3N1xuXHRcdFx0Ly8gU29tZSBjb2x1bW5zIChlZzogY3VzdG9tIGNvbHVtbnMpIGhhdmUgbm8gdHlwZUNvbmZpZyBwcm9wZXJ0eS5cblx0XHRcdC8vIGluaXRpYWxpemluZyBpdCBwcmV2ZW50cyBhbiBleGNlcHRpb24gdGhyb3dcblx0XHRcdHByb3BlcnR5LnR5cGVDb25maWcgPSBkZWVwRXh0ZW5kKHByb3BlcnR5LnR5cGVDb25maWcsIHt9KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdGdldENvbHVtbnNGb3I6IGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdHJldHVybiBvVGFibGUuZ2V0UGFyZW50KCkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucztcblx0fSxcblxuXHRfZ2V0QWdncmVnYXRlZFByb3BlcnR5TWFwOiBmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRyZXR1cm4gb1RhYmxlLmdldFBhcmVudCgpLmdldFRhYmxlRGVmaW5pdGlvbigpLmFnZ3JlZ2F0ZXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgZm9yIHRoZSBnaXZlbiBzYXAudWkubWRjLlRhYmxlIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRoZSB0YWJsZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlcHJlc2VudGluZyB0aGUgZXhwb3J0IGNhcGFiaWxpdGllcyBvZiB0aGUgdGFibGUgaW5zdGFuY2Vcblx0ICovXG5cdGZldGNoRXhwb3J0Q2FwYWJpbGl0aWVzOiBmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRjb25zdCBvQ2FwYWJpbGl0aWVzOiBhbnkgPSB7IFwiWExTWFwiOiB7fSB9O1xuXHRcdGxldCBvTW9kZWwhOiBhbnk7XG5cdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKG9UYWJsZSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChtb2RlbDogYW55KSB7XG5cdFx0XHRcdG9Nb2RlbCA9IG1vZGVsO1xuXHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU3VwcG9ydGVkRm9ybWF0c1wiKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGFMb3dlckZvcm1hdHMgPSAoYVN1cHBvcnRlZEZvcm1hdHMgfHwgW10pLm1hcCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYUxvd2VyRm9ybWF0cy5pbmRleE9mKFwiYXBwbGljYXRpb24vcGRmXCIpID4gLTEpIHtcblx0XHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBERi52MS5GZWF0dXJlc1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvQW5ub3RhdGlvbjogYW55KSB7XG5cdFx0XHRcdGlmIChvQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNbXCJQREZcIl0gPSBPYmplY3QuYXNzaWduKHt9LCBvQW5ub3RhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyBleHBvcnQgY2FwYWJpbGl0aWVzOiAke2Vycn1gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBvQ2FwYWJpbGl0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZpbHRlcmluZyBvbiAxOm4gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFuZCBuYXZpZ2F0aW9uXG5cdCAqIHByb3BlcnRpZXMgbm90IHBhcnQgb2YgdGhlIExpbmVJdGVtIGFubm90YXRpb24gaXMgZm9yYmlkZGVuLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mb1xuXHQgKiBAcGFyYW0gbWV0YU1vZGVsXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZmlsdGVyaW5nIGlzIGFsbG93ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eTogZnVuY3Rpb24gKGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbiwgbWV0YU1vZGVsOiBhbnksIHRhYmxlOiBUYWJsZSkge1xuXHRcdGNvbnN0IHRhYmxlTWV0YVBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YSh0YWJsZSwgXCJtZXRhUGF0aFwiKTtcblx0XHRpZiAoIXRhYmxlTWV0YVBhdGgpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gZ2V0IHRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIGZvciB0aGUgdGFibGVcblx0XHRjb25zdCB0YWJsZURhdGFNb2RlbE9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQodGFibGVNZXRhUGF0aCkpLFxuXHRcdFx0Ly8gZ2V0IGFsbCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgbGVhZGluZyB0byB0aGUgY29sdW1uXG5cdFx0XHRjb2x1bW5OYXZpZ2F0aW9uUHJvcGVydGllcyA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChjb2x1bW5JbmZvLmFubm90YXRpb25QYXRoKSkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHQvLyB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIG5hdmlnYXRpb24gcHJvcGVydGllcyByZWxhdGl2ZSB0byB0aGUgdGFibGUsIHNvIGFsbCBiZWZvcmUgYW5kIGluY2x1ZGluZyB0aGUgdGFibGVzIHRhcmdldFR5cGUgY2FuIGJlIGZpbHRlcmVkXG5cdFx0XHR0YWJsZVRhcmdldEVudGl0eUluZGV4ID0gY29sdW1uTmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KFxuXHRcdFx0XHQocHJvcCkgPT4gcHJvcC50YXJnZXRUeXBlPy5uYW1lID09PSB0YWJsZURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5uYW1lXG5cdFx0XHQpLFxuXHRcdFx0cmVsYXRpdmVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IGNvbHVtbk5hdmlnYXRpb25Qcm9wZXJ0aWVzLnNsaWNlKHRhYmxlVGFyZ2V0RW50aXR5SW5kZXggPiAwID8gdGFibGVUYXJnZXRFbnRpdHlJbmRleCA6IDApO1xuXHRcdHJldHVybiAoXG5cdFx0XHQhY29sdW1uSW5mby5yZWxhdGl2ZVBhdGguaW5jbHVkZXMoXCIvXCIpIHx8XG5cdFx0XHQoY29sdW1uSW5mby5pc1BhcnRPZkxpbmVJdGVtID09PSB0cnVlICYmXG5cdFx0XHRcdCFyZWxhdGl2ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzLnNvbWUoXG5cdFx0XHRcdFx0KG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4gbmF2aWdhdGlvblByb3BlcnR5Ll90eXBlID09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgbmF2aWdhdGlvblByb3BlcnR5LmlzQ29sbGVjdGlvblxuXHRcdFx0XHQpKVxuXHRcdCk7XG5cdH0sXG5cblx0X2ZldGNoUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAob01ldGFNb2RlbDogYW55LCBvQ29sdW1uSW5mbzogYW55LCBvVGFibGU6IGFueSwgb0FwcENvbXBvbmVudDogYW55LCBiVXNlQWRkaXRpb25hbFByb3BlcnRpZXM6IGFueSkge1xuXHRcdGNvbnN0IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoID0gb0NvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRvRGF0YUZpZWxkID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0Fic29sdXRlTmF2aWdhdGlvblBhdGgpLFxuXHRcdFx0b05hdmlnYXRpb25Db250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCksXG5cdFx0XHRvVHlwZUNvbmZpZyA9XG5cdFx0XHRcdG9Db2x1bW5JbmZvLnR5cGVDb25maWcgJiZcblx0XHRcdFx0b0NvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUgJiZcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmlzVHlwZUZpbHRlcmFibGUob0NvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUpXG5cdFx0XHRcdFx0PyBUeXBlVXRpbC5nZXRUeXBlQ29uZmlnKFxuXHRcdFx0XHRcdFx0XHRvQ29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSxcblx0XHRcdFx0XHRcdFx0b0NvbHVtbkluZm8udHlwZUNvbmZpZy5vRm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0XHRcdFx0b0NvbHVtbkluZm8udHlwZUNvbmZpZy5vQ29uc3RyYWludHNcblx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHQ6IHt9LFxuXHRcdFx0YkZpbHRlcmFibGUgPSBDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUob0NvbHVtbkluZm8ucmVsYXRpdmVQYXRoLCB7IGNvbnRleHQ6IG9OYXZpZ2F0aW9uQ29udGV4dCB9LCBvRGF0YUZpZWxkKSxcblx0XHRcdGJDb21wbGV4VHlwZSA9IG9Db2x1bW5JbmZvLnR5cGVDb25maWcgJiYgb0NvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUuaW5kZXhPZihcIkVkbS5cIikgIT09IDAsXG5cdFx0XHRiSXNBbmFseXRpY2FsVGFibGUgPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwiZW5hYmxlQW5hbHl0aWNzXCIpID09PSBcInRydWVcIixcblx0XHRcdGFBZ2dyZWdhdGVkUHJvcGVydHlNYXBVbmZpbHRlcmFibGUgPSBiSXNBbmFseXRpY2FsVGFibGUgPyB0aGlzLl9nZXRBZ2dyZWdhdGVkUHJvcGVydHlNYXAob1RhYmxlKSA6IHt9LFxuXHRcdFx0b0V4cG9ydFNldHRpbmdzID0gb0NvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MgfHwgbnVsbCxcblx0XHRcdGV4cG9ydEZvcm1hdCA9XG5cdFx0XHRcdG9Db2x1bW5JbmZvLnR5cGVDb25maWcgJiYgb0NvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWVcblx0XHRcdFx0XHQ/IHRoaXMuX2dldEV4cG9ydEZvcm1hdChvQ29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSlcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBzTGFiZWwgPSBvQ29sdW1uSW5mby5pc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eVxuXHRcdFx0PyBSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUYXJnZXRWYWx1ZVwiKVxuXHRcdFx0OiBEZWxlZ2F0ZVV0aWwuZ2V0TG9jYWxpemVkVGV4dChvQ29sdW1uSW5mby5sYWJlbCwgb0FwcENvbXBvbmVudCB8fCBvVGFibGUpO1xuXG5cdFx0aWYgKG9FeHBvcnRTZXR0aW5ncykge1xuXHRcdFx0aWYgKGV4cG9ydEZvcm1hdCAmJiAhb0V4cG9ydFNldHRpbmdzLnRpbWV6b25lUHJvcGVydHkpIHtcblx0XHRcdFx0b0V4cG9ydFNldHRpbmdzLmZvcm1hdCA9IGV4cG9ydEZvcm1hdDtcblx0XHRcdH1cblx0XHRcdC8vIFNldCB0aGUgZXhwb3J0U2V0dGluZ3MgdGVtcGxhdGUgb25seSBpZiBpdCBleGlzdHMuXG5cdFx0XHRpZiAob0V4cG9ydFNldHRpbmdzLnRlbXBsYXRlKSB7XG5cdFx0XHRcdG9FeHBvcnRTZXR0aW5ncy50ZW1wbGF0ZSA9IG9Db2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnRlbXBsYXRlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm86IGFueSA9IHtcblx0XHRcdG5hbWU6IG9Db2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRtZXRhZGF0YVBhdGg6IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoLFxuXHRcdFx0Z3JvdXBMYWJlbDogb0NvbHVtbkluZm8uZ3JvdXBMYWJlbCxcblx0XHRcdGdyb3VwOiBvQ29sdW1uSW5mby5ncm91cCxcblx0XHRcdGxhYmVsOiBzTGFiZWwsXG5cdFx0XHR0b29sdGlwOiBvQ29sdW1uSW5mby50b29sdGlwLFxuXHRcdFx0dHlwZUNvbmZpZzogb1R5cGVDb25maWcsXG5cdFx0XHR2aXNpYmxlOiBvQ29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIgJiYgIWJDb21wbGV4VHlwZSxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBvRXhwb3J0U2V0dGluZ3MsXG5cdFx0XHR1bml0OiBvQ29sdW1uSW5mby51bml0XG5cdFx0fTtcblxuXHRcdC8vIFNldCB2aXN1YWxTZXR0aW5ncyBvbmx5IGlmIGl0IGV4aXN0c1xuXHRcdGlmIChvQ29sdW1uSW5mby52aXN1YWxTZXR0aW5ncyAmJiBPYmplY3Qua2V5cyhvQ29sdW1uSW5mby52aXN1YWxTZXR0aW5ncykubGVuZ3RoID4gMCkge1xuXHRcdFx0b1Byb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IG9Db2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzO1xuXHRcdH1cblx0XHRpZiAoZXhwb3J0Rm9ybWF0KSB7XG5cdFx0XHRjb25zdCBvVGFibGVBUEkgPSBvVGFibGUgPyBvVGFibGUuZ2V0UGFyZW50KCkgOiBudWxsO1xuXHRcdFx0Ly8gRm9yIHByb3BlcnRpZXMgd2l0aCBkYXRlL3RpbWUvZGF0ZVRpbWUgZGF0YSB0eXBlcywgYSBnYXAgbmVlZHMgdG8gYmUgYWRkZWQgdG8gcHJvcGVybHkgcmVuZGVyIHRoZSBjb2x1bW4gd2lkdGggb24gZWRpdCBtb2RlXG5cdFx0XHRvUHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0ge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Ly8gYSBnYXAgb2YgMSBpcyBzdGlsbCBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgcGFkZGluZyBvZiB0aGUgY2VsbFxuXHRcdFx0XHRcdC8vIEJDUDogMjE4MDQxMzQzMVxuXHRcdFx0XHRcdGdhcDogb1RhYmxlQVBJICYmIG9UYWJsZUFQSS5nZXRSZWFkT25seSgpID8gMSA6IDEuNVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIE1EQyBleHBlY3RzICAncHJvcGVydHlJbmZvcycgb25seSBmb3IgY29tcGxleCBwcm9wZXJ0aWVzLlxuXHRcdC8vIEFuIGVtcHR5IGFycmF5IHRocm93cyB2YWxpZGF0aW9uIGVycm9yIGFuZCB1bmRlZmluZWQgdmFsdWUgaXMgdW5oYW5kbGVkLlxuXHRcdGlmIChvQ29sdW1uSW5mby5wcm9wZXJ0eUluZm9zICYmIG9Db2x1bW5JbmZvLnByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHRvUHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBvQ29sdW1uSW5mby5wcm9wZXJ0eUluZm9zO1xuXHRcdFx0Ly9vbmx5IGluIGNhc2Ugb2YgY29tcGxleCBwcm9wZXJ0aWVzLCB3cmFwIHRoZSBjZWxsIGNvbnRlbnRcdG9uIHRoZSBleGNlbCBleHBvcnRlZCBmaWxlXG5cdFx0XHRpZiAob0NvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3M/LndyYXApIHtcblx0XHRcdFx0b1Byb3BlcnR5SW5mby5leHBvcnRTZXR0aW5ncy53cmFwID0gb0NvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3Mud3JhcDtcblx0XHRcdH1cblx0XHRcdGlmIChiVXNlQWRkaXRpb25hbFByb3BlcnRpZXMgJiYgb0NvbHVtbkluZm8uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgJiYgb0NvbHVtbkluZm8uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHRcdG9Qcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IG9Qcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcy5jb25jYXQob0NvbHVtbkluZm8uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydGllcyB3aGljaCBhcmUgc3VwcG9ydGVkIG9ubHkgYnkgc2ltcGxlIFByb3BlcnR5SW5mb3MuXG5cdFx0XHRvUHJvcGVydHlJbmZvLnBhdGggPSBvQ29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHQvLyBUT0RPIHdpdGggdGhlIG5ldyBjb21wbGV4IHByb3BlcnR5IGluZm8sIGEgbG90IG9mIFwiRGVzY3JpcHRpb25cIiBmaWVsZHMgYXJlIGFkZGVkIGFzIGZpbHRlci9zb3J0IGZpZWxkc1xuXHRcdFx0b1Byb3BlcnR5SW5mby5zb3J0YWJsZSA9IG9Db2x1bW5JbmZvLnNvcnRhYmxlO1xuXHRcdFx0b1Byb3BlcnR5SW5mby5maWx0ZXJhYmxlID1cblx0XHRcdFx0IW9Db2x1bW5JbmZvLmlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5ICYmXG5cdFx0XHRcdCEhYkZpbHRlcmFibGUgJiZcblx0XHRcdFx0dGhpcy5faXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5KG9Db2x1bW5JbmZvLCBvTWV0YU1vZGVsLCBvVGFibGUpICYmXG5cdFx0XHRcdC8vIFRPRE8gaWdub3JpbmcgYWxsIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGFsc28gYXZhaWxhYmxlIGZvciBhZGFwdGF0aW9uIGZvciBub3csIGJ1dCBwcm9wZXIgY29uY2VwdCByZXF1aXJlZFxuXHRcdFx0XHQoIWJJc0FuYWx5dGljYWxUYWJsZSB8fCAhYUFnZ3JlZ2F0ZWRQcm9wZXJ0eU1hcFVuZmlsdGVyYWJsZVtvUHJvcGVydHlJbmZvLm5hbWVdKTtcblx0XHRcdG9Qcm9wZXJ0eUluZm8ua2V5ID0gb0NvbHVtbkluZm8uaXNLZXk7XG5cdFx0XHRvUHJvcGVydHlJbmZvLmdyb3VwYWJsZSA9IG9Db2x1bW5JbmZvLmlzR3JvdXBhYmxlO1xuXHRcdFx0aWYgKG9Db2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0XHRjb25zdCBvRGVzY3JpcHRpb25Db2x1bW4gPSB0aGlzLmdldENvbHVtbnNGb3Iob1RhYmxlKS5maW5kKGZ1bmN0aW9uIChvQ29sOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbC5uYW1lID09PSBvQ29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQudGV4dFByb3BlcnR5O1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKG9EZXNjcmlwdGlvbkNvbHVtbikge1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8ubW9kZSA9IG9Db2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudC5tb2RlO1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA9IG9Db2x1bW5JbmZvLnJlbGF0aXZlUGF0aDtcblx0XHRcdFx0XHRvUHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPSBvRGVzY3JpcHRpb25Db2x1bW4ucmVsYXRpdmVQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvUHJvcGVydHlJbmZvLnRleHQgPSBvQ29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQgJiYgb0NvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50LnRleHRQcm9wZXJ0eTtcblx0XHRcdG9Qcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IG9Db2x1bW5JbmZvLmNhc2VTZW5zaXRpdmU7XG5cdFx0XHRpZiAob0NvbHVtbkluZm8uYWRkaXRpb25hbExhYmVscykge1xuXHRcdFx0XHRvUHJvcGVydHlJbmZvLmFkZGl0aW9uYWxMYWJlbHMgPSBvQ29sdW1uSW5mby5hZGRpdGlvbmFsTGFiZWxzLm1hcCgobGFiZWw6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZ2V0TG9jYWxpemVkVGV4dChsYWJlbCwgb0FwcENvbXBvbmVudCB8fCBvVGFibGUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhVbml0KFxuXHRcdFx0b1RhYmxlLFxuXHRcdFx0b1Byb3BlcnR5SW5mbyxcblx0XHRcdG9Db2x1bW5JbmZvLnVuaXQsXG5cdFx0XHRvQ29sdW1uSW5mby51bml0VGV4dCxcblx0XHRcdG9Db2x1bW5JbmZvLnRpbWV6b25lVGV4dFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcblx0fSxcblxuXHRfZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChvQ29sdW1uSW5mbzogYW55LCBvVGFibGU6IGFueSwgb0FwcENvbXBvbmVudDogYW55KSB7XG5cdFx0Y29uc3Qgc0xhYmVsID0gRGVsZWdhdGVVdGlsLmdldExvY2FsaXplZFRleHQob0NvbHVtbkluZm8uaGVhZGVyLCBvQXBwQ29tcG9uZW50IHx8IG9UYWJsZSk7IC8vIFRvZG86IFRvIGJlIHJlbW92ZWQgb25jZSBNREMgcHJvdmlkZXMgdHJhbnNsYXRpb24gc3VwcG9ydFxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm86IGFueSA9IHtcblx0XHRcdG5hbWU6IG9Db2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRncm91cExhYmVsOiBudWxsLFxuXHRcdFx0Z3JvdXA6IG51bGwsXG5cdFx0XHRsYWJlbDogc0xhYmVsLFxuXHRcdFx0dHlwZTogXCJFZG0uU3RyaW5nXCIsIC8vIFRCRFxuXHRcdFx0dmlzaWJsZTogb0NvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IG9Db2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0dmlzdWFsU2V0dGluZ3M6IG9Db2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzXG5cdFx0fTtcblxuXHRcdC8vIE1EQyBleHBlY3RzICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKG9Db2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgJiYgb0NvbHVtbkluZm8ucHJvcGVydHlJbmZvcy5sZW5ndGgpIHtcblx0XHRcdG9Qcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IG9Db2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0XHQvL29ubHkgaW4gY2FzZSBvZiBjb21wbGV4IHByb3BlcnRpZXMsIHdyYXAgdGhlIGNlbGwgY29udGVudCBvbiB0aGUgZXhjZWwgZXhwb3J0ZWQgZmlsZVxuXHRcdFx0b1Byb3BlcnR5SW5mby5leHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdFx0d3JhcDogb0NvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3Mud3JhcCxcblx0XHRcdFx0dGVtcGxhdGU6IG9Db2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnRlbXBsYXRlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydGllcyB3aGljaCBhcmUgc3VwcG9ydGVkIG9ubHkgYnkgc2ltcGxlIFByb3BlcnR5SW5mb3MuXG5cdFx0XHRvUHJvcGVydHlJbmZvLnBhdGggPSBvQ29sdW1uSW5mby5uYW1lO1xuXHRcdFx0b1Byb3BlcnR5SW5mby5zb3J0YWJsZSA9IGZhbHNlO1xuXHRcdFx0b1Byb3BlcnR5SW5mby5maWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9LFxuXHRfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yOiBmdW5jdGlvbiAob0NvbHVtbkluZm86IGFueSkge1xuXHRcdHJldHVybiAhIShcblx0XHRcdChvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zICYmIG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMuaGFzRHJhZnRJbmRpY2F0b3IpIHx8XG5cdFx0XHQob0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyAmJiBvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zLmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aClcblx0XHQpO1xuXHR9LFxuXHRfdXBkYXRlRHJhZnRJbmRpY2F0b3JNb2RlbDogZnVuY3Rpb24gKF9vVGFibGU6IGFueSwgX29Db2x1bW5JbmZvOiBhbnkpIHtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBfb1RhYmxlLmdldENvbHVtbnMoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IF9vVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGlmIChhVmlzaWJsZUNvbHVtbnMgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGZvciAoY29uc3QgaW5kZXggaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0aGlzLl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3IoX29Db2x1bW5JbmZvKSAmJlxuXHRcdFx0XHRcdF9vQ29sdW1uSW5mby5uYW1lID09PSBhVmlzaWJsZUNvbHVtbnNbaW5kZXhdLmdldERhdGFQcm9wZXJ0eSgpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlmIChvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBfb0NvbHVtbkluZm8ubmFtZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdF9mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IGZ1bmN0aW9uIChcblx0XHRvVGFibGU6IGFueSxcblx0XHRzRW50aXR5VHlwZVBhdGg6IGFueSxcblx0XHRvTWV0YU1vZGVsOiBhbnksXG5cdFx0b0FwcENvbXBvbmVudDogYW55LFxuXHRcdGJVc2VBZGRpdGlvbmFsUHJvcGVydGllczogYW55XG5cdCkge1xuXHRcdC8vIHdoZW4gZmV0Y2hpbmcgcHJvcGVydGllcywgdGhpcyBiaW5kaW5nIGNvbnRleHQgaXMgbmVlZGVkIC0gc28gbGV0cyBjcmVhdGUgaXQgb25seSBvbmNlIGFuZCB1c2UgaWYgZm9yIGFsbCBwcm9wZXJ0aWVzL2RhdGEtZmllbGRzL2xpbmUtaXRlbXNcblx0XHRjb25zdCBzQmluZGluZ1BhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNFbnRpdHlUeXBlUGF0aCk7XG5cdFx0bGV0IGFGZXRjaGVkUHJvcGVydGllczogYW55W10gPSBbXTtcblx0XHRjb25zdCBvRlIgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc0JpbmRpbmdQYXRoLCBvTWV0YU1vZGVsKTtcblx0XHRjb25zdCBhTm9uRmlsdGVyYWJsZVByb3BzID0gb0ZSW0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZ2V0Q29sdW1uc0ZvcihvVGFibGUpKVxuXHRcdFx0LnRoZW4oKGFDb2x1bW5zOiBhbnkpID0+IHtcblx0XHRcdFx0Ly8gRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgZG9lcyBub3Qgd29yayB2aWEgJ2VudGl0eVNldC8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YSdcblx0XHRcdFx0aWYgKGFDb2x1bW5zKSB7XG5cdFx0XHRcdFx0bGV0IG9Qcm9wZXJ0eUluZm87XG5cdFx0XHRcdFx0YUNvbHVtbnMuZm9yRWFjaCgob0NvbHVtbkluZm86IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlRHJhZnRJbmRpY2F0b3JNb2RlbChvVGFibGUsIG9Db2x1bW5JbmZvKTtcblx0XHRcdFx0XHRcdHN3aXRjaCAob0NvbHVtbkluZm8udHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaFByb3BlcnR5SW5mbyhcblx0XHRcdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0XHRvQ29sdW1uSW5mbyxcblx0XHRcdFx0XHRcdFx0XHRcdG9UYWJsZSxcblx0XHRcdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdFx0XHRiVXNlQWRkaXRpb25hbFByb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvUHJvcGVydHlJbmZvICYmIGFOb25GaWx0ZXJhYmxlUHJvcHMuaW5kZXhPZihvUHJvcGVydHlJbmZvLm5hbWUpID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1Byb3BlcnR5SW5mby5tYXhDb25kaXRpb25zID0gRGVsZWdhdGVVdGlsLmlzTXVsdGlWYWx1ZShvUHJvcGVydHlJbmZvKSA/IC0xIDogMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJTbG90XCI6XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRcdFx0b1Byb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoQ3VzdG9tUHJvcGVydHlJbmZvKG9Db2x1bW5JbmZvLCBvVGFibGUsIG9BcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5oYW5kbGVkIHN3aXRjaCBjYXNlICR7b0NvbHVtbkluZm8udHlwZX1gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9Qcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMgPSB0aGlzLl91cGRhdGVQcm9wZXJ0eUluZm8ob1RhYmxlLCBhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgdXBkYXRpbmcgZmV0Y2hlZCBwcm9wZXJ0aWVzOiAke2Vycn1gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBhRmV0Y2hlZFByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IGZ1bmN0aW9uIChcblx0XHRvVGFibGU6IGFueSxcblx0XHRzRW50aXR5VHlwZVBhdGg6IGFueSxcblx0XHRvTWV0YU1vZGVsOiBhbnksXG5cdFx0b0FwcENvbXBvbmVudD86IGFueSxcblx0XHRiVXNlQWRkaXRpb25hbFByb3BlcnRpZXM/OiBhbnlcblx0KSB7XG5cdFx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzID0gX2dldENhY2hlZFByb3BlcnRpZXMob1RhYmxlLCBiVXNlQWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXG5cdFx0aWYgKGFGZXRjaGVkUHJvcGVydGllcykge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KG9UYWJsZSwgc0VudGl0eVR5cGVQYXRoLCBvTWV0YU1vZGVsLCBvQXBwQ29tcG9uZW50LCBiVXNlQWRkaXRpb25hbFByb3BlcnRpZXMpLnRoZW4oZnVuY3Rpb24gKFxuXHRcdFx0YVN1YkZldGNoZWRQcm9wZXJ0aWVzOiBhbnlbXVxuXHRcdCkge1xuXHRcdFx0X3NldENhY2hlZFByb3BlcnRpZXMob1RhYmxlLCBhU3ViRmV0Y2hlZFByb3BlcnRpZXMsIGJVc2VBZGRpdGlvbmFsUHJvcGVydGllcyk7XG5cdFx0XHRyZXR1cm4gYVN1YkZldGNoZWRQcm9wZXJ0aWVzO1xuXHRcdH0pO1xuXHR9LFxuXG5cdF9zZXRUYWJsZU5vRGF0YVRleHQ6IGZ1bmN0aW9uIChvVGFibGU6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnkpIHtcblx0XHRsZXQgc05vRGF0YUtleSA9IFwiXCI7XG5cdFx0Y29uc3Qgb1RhYmxlRmlsdGVySW5mbyA9IFRhYmxlVXRpbHMuZ2V0QWxsRmlsdGVySW5mbyhvVGFibGUpLFxuXHRcdFx0c3VmZml4UmVzb3VyY2VLZXkgPSBvQmluZGluZ0luZm8ucGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IG9CaW5kaW5nSW5mby5wYXRoLnN1YnN0cigxKSA6IG9CaW5kaW5nSW5mby5wYXRoO1xuXG5cdFx0Y29uc3QgX2dldE5vRGF0YVRleHRXaXRoRmlsdGVycyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChvVGFibGUuZGF0YShcImhpZGRlbkZpbHRlcnNcIikgfHwgb1RhYmxlLmRhdGEoXCJxdWlja0ZpbHRlcktleVwiKSkge1xuXHRcdFx0XHRyZXR1cm4gXCJNX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRfTVVMVElfVklFV1wiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX1dJVEhfRklMVEVSXCI7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBzRmlsdGVyQXNzb2NpYXRpb24gPSBvVGFibGUuZ2V0RmlsdGVyKCk7XG5cblx0XHRpZiAoc0ZpbHRlckFzc29jaWF0aW9uICYmICEvQmFzaWNTZWFyY2gkLy50ZXN0KHNGaWx0ZXJBc3NvY2lhdGlvbikpIHtcblx0XHRcdC8vIGNoZWNrIGlmIGEgRmlsdGVyQmFyIGlzIGFzc29jaWF0ZWQgdG8gdGhlIFRhYmxlIChiYXNpYyBzZWFyY2ggb24gdG9vbEJhciBpcyBleGNsdWRlZClcblx0XHRcdGlmIChvVGFibGVGaWx0ZXJJbmZvLnNlYXJjaCB8fCAob1RhYmxlRmlsdGVySW5mby5maWx0ZXJzICYmIG9UYWJsZUZpbHRlckluZm8uZmlsdGVycy5sZW5ndGgpKSB7XG5cdFx0XHRcdC8vIGNoZWNrIGlmIHRhYmxlIGhhcyBhbnkgRmlsdGVyYmFyIGZpbHRlcnMgb3IgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRcdFx0c05vRGF0YUtleSA9IF9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNOb0RhdGFLZXkgPSBcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVFwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAob1RhYmxlRmlsdGVySW5mby5zZWFyY2ggfHwgKG9UYWJsZUZpbHRlckluZm8uZmlsdGVycyAmJiBvVGFibGVGaWx0ZXJJbmZvLmZpbHRlcnMubGVuZ3RoKSkge1xuXHRcdFx0Ly9jaGVjayBpZiB0YWJsZSBoYXMgYW55IHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRzTm9EYXRhS2V5ID0gX2dldE5vRGF0YVRleHRXaXRoRmlsdGVycygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzTm9EYXRhS2V5ID0gXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gb1RhYmxlXG5cdFx0XHQuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0LmdldFJlc291cmNlQnVuZGxlKClcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGU6IGFueSkge1xuXHRcdFx0XHRvVGFibGUuc2V0Tm9EYXRhKENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KHNOb0RhdGFLZXksIG9SZXNvdXJjZUJ1bmRsZSwgbnVsbCwgc3VmZml4UmVzb3VyY2VLZXkpKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yKTtcblx0XHRcdH0pO1xuXHR9LFxuXG5cdGhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkOiBmdW5jdGlvbiAob1RhYmxlOiBhbnksIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKSxcblx0XHRcdGJEYXRhUmVjZWl2ZWRBdHRhY2hlZCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiKTtcblxuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIWJEYXRhUmVjZWl2ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0VGFibGVIZWxwZXIuaGFuZGxlVGFibGVEZWxldGVFbmFibGVtZW50Rm9yU2lkZUVmZmVjdHMob1RhYmxlLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHQvLyBSZWZyZXNoIHRoZSBzZWxlY3RlZCBjb250ZXh0cyB0byB0cmlnZ2VyIHJlLWNhbGN1bGF0aW9uIG9mIGVuYWJsZWQgc3RhdGUgb2YgYWN0aW9ucy5cblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBbXSk7XG5cdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgpO1xuXHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIGFTZWxlY3RlZENvbnRleHRzLCBcInRhYmxlXCIpO1xuXHRcdFx0XHRjb25zdCBvVGFibGVBUEkgPSBvVGFibGUgPyBvVGFibGUuZ2V0UGFyZW50KCkgOiBudWxsO1xuXHRcdFx0XHRpZiAob1RhYmxlQVBJKSB7XG5cdFx0XHRcdFx0b1RhYmxlQVBJLnNldFVwRW1wdHlSb3dzKG9UYWJsZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkQXR0YWNoZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9LFxuXG5cdHJlYmluZDogZnVuY3Rpb24gKG9UYWJsZTogYW55LCBvQmluZGluZ0luZm86IGFueSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGJJc1N1c3BlbmRlZCA9IG9UYWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdG9UYWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0XHRpZiAoIWJJc1N1c3BlbmRlZCkge1xuXHRcdFx0VGFibGVVdGlscy5jbGVhclNlbGVjdGlvbihvVGFibGUpO1xuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UucmViaW5kLmFwcGx5KHRoaXMsIFtvVGFibGUsIG9CaW5kaW5nSW5mb10pO1xuXHRcdFx0VGFibGVVdGlscy5vblRhYmxlQm91bmQob1RhYmxlKTtcblx0XHRcdHRoaXMuX3NldFRhYmxlTm9EYXRhVGV4dChvVGFibGUsIG9CaW5kaW5nSW5mbyk7XG5cdFx0XHRyZXR1cm4gVGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHQudGhlbih0aGlzLmhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkKG9UYWJsZSwgb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikpKVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIHJlbGV2YW50IG1ldGFkYXRhIGZvciB0aGUgdGFibGUgYW5kIHJldHVybnMgcHJvcGVydHkgaW5mbyBhcnJheS5cblx0ICpcblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcHJvcGVydHkgaW5mb1xuXHQgKi9cblx0ZmV0Y2hQcm9wZXJ0aWVzOiBmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwob1RhYmxlKS50aGVuKChvTW9kZWw6IGFueSkgPT4ge1xuXHRcdFx0aWYgKCFvTW9kZWwpIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoXG5cdFx0XHRcdG9UYWJsZSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdG9Nb2RlbC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0KTtcblx0XHR9KTtcblx0fSxcblxuXHRwcmVJbml0OiBmdW5jdGlvbiAodGFibGU6IFRhYmxlKSB7XG5cdFx0cmV0dXJuIFRhYmxlRGVsZWdhdGVCYXNlLnByZUluaXQuYXBwbHkodGhpcywgW3RhYmxlXSkudGhlbigoKSA9PiB7XG5cdFx0XHQvKipcblx0XHRcdCAqIFNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93IHRvIGF2b2lkIGl0IGluaGVyaXRpbmdcblx0XHRcdCAqIHRoZSB3cm9uZyBjb250ZXh0IGFuZCByZXF1ZXN0aW5nIHRoZSB0YWJsZSBjb2x1bW5zIG9uIHRoZSBwYXJlbnQgZW50aXR5XG5cdFx0XHQgKiBTZXQgdGhlIGNvcnJlY3QgYmluZGluZyBjb250ZXh0IGluIE9iamVjdFBhZ2VDb250cm9sbGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdygpXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGZhc3RDcmVhdGlvblJvdyA9IHRhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAoZmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdGZhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsIGFzIHVua25vd24gYXMgQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSBDb3JlLmJ5SWQodGFibGUuZ2V0RmlsdGVyKCkpIGFzIENvbnRyb2wgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSk7XG5cdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAodmlld0RhdGE/LmNvbnZlcnRlclR5cGUgPT09IFwiTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRcdGZpbHRlckJhcj8uZ2V0UGFyZW50KCk/LmF0dGFjaEV2ZW50KFwic2VhcmNoXCIsICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShTRUFSQ0hfSEFTX0JFRU5fRklSRUQsIHRydWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGVCaW5kaW5nSW5mbzogZnVuY3Rpb24gKG9UYWJsZTogYW55LCBvQmluZGluZ0luZm86IGFueSkge1xuXHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmdJbmZvLmFwcGx5KHRoaXMsIFtvVGFibGUsIG9CaW5kaW5nSW5mb10pO1xuXHRcdHRoaXMuX2ludGVybmFsVXBkYXRlQmluZGluZ0luZm8ob1RhYmxlLCBvQmluZGluZ0luZm8pO1xuXHRcdG9CaW5kaW5nSW5mby5ldmVudHMuZGF0YVJlY2VpdmVkID0gb1RhYmxlLmdldFBhcmVudCgpLm9uSW50ZXJuYWxEYXRhUmVjZWl2ZWQuYmluZChvVGFibGUuZ2V0UGFyZW50KCkpO1xuXHRcdG9CaW5kaW5nSW5mby5ldmVudHMuZGF0YVJlcXVlc3RlZCA9IG9UYWJsZS5nZXRQYXJlbnQoKS5vbkludGVybmFsRGF0YVJlcXVlc3RlZC5iaW5kKG9UYWJsZS5nZXRQYXJlbnQoKSk7XG5cdFx0dGhpcy5fc2V0VGFibGVOb0RhdGFUZXh0KG9UYWJsZSwgb0JpbmRpbmdJbmZvKTtcblx0fSxcblxuXHRfbWFuYWdlU2VtYW50aWNUYXJnZXRzOiBmdW5jdGlvbiAob01EQ1RhYmxlOiBhbnkpIHtcblx0XHRjb25zdCBvUm93QmluZGluZyA9IG9NRENUYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0XHRvUm93QmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVxdWVzdGVkXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Y29uc3QgX29WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvTURDVGFibGUpO1xuXHRcdFx0XHRcdGlmIChfb1ZpZXcpIHtcblx0XHRcdFx0XHRcdFRhYmxlVXRpbHMuZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVRhYmxlKF9vVmlldy5nZXRDb250cm9sbGVyKCksIG9NRENUYWJsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHR1cGRhdGVCaW5kaW5nOiBmdW5jdGlvbiAodGFibGU6IE1EQ1RhYmxlLCBiaW5kaW5nSW5mbzogQmluZGluZ0luZm8sIGJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nKSB7XG5cdFx0Y29uc3Qgb1RhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgYklzU3VzcGVuZGVkID0gb1RhYmxlQVBJPy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIik7XG5cdFx0aWYgKCFiSXNTdXNwZW5kZWQpIHtcblx0XHRcdGxldCBuZWVkTWFudWFsUmVmcmVzaCA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSA9IFwicGVuZGluZ01hbnVhbEJpbmRpbmdVcGRhdGVcIjtcblx0XHRcdGNvbnN0IHBlbmRpbmdNYW51YWxVcGRhdGUgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSkgYXMgYm9vbGVhbjtcblx0XHRcdGNvbnN0IG5ld1NvcnRlcnMgPSBKU09OLnN0cmluZ2lmeShiaW5kaW5nSW5mby5zb3J0ZXIgPz8gW10pO1xuXG5cdFx0XHRpZiAoYmluZGluZykge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTWFudWFsIHJlZnJlc2ggaWYgZmlsdGVycyBhcmUgbm90IGNoYW5nZWQgYnkgYmluZGluZy5yZWZyZXNoKCkgc2luY2UgdXBkYXRpbmcgdGhlIGJpbmRpbmdJbmZvXG5cdFx0XHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0XHRcdCAqIFJlbW92aW5nIGNvbHVtbnMgY3JlYXRlcyBvbmUgYmF0Y2ggcmVxdWVzdCB0aGF0IHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG9sZEZpbHRlcnMgPSBiaW5kaW5nLmdldEZpbHRlcnMoXCJBcHBsaWNhdGlvblwiKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNTb3J0ZXJzID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUykgPz8gXCJbXVwiO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJOb3RDaGFuZ2VkID1cblx0XHRcdFx0XHRkZWVwRXF1YWwoYmluZGluZ0luZm8uZmlsdGVycywgb2xkRmlsdGVyc1swXSkgJiZcblx0XHRcdFx0XHRuZXdTb3J0ZXJzID09PSBwcmV2aW91c1NvcnRlcnMgJiZcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoID09PSBiaW5kaW5nLmdldFBhdGgoKSAmJiAvLyBUaGUgcGF0aCBjYW4gYmUgY2hhbmdlZCBpbiBjYXNlIG9mIGEgcGFyYW1ldHJpemVkIGVudGl0eVxuXHRcdFx0XHRcdGJpbmRpbmcuZ2V0UXVlcnlPcHRpb25zRnJvbVBhcmFtZXRlcnMoKS4kc2VhcmNoID09PSBiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2g7XG5cdFx0XHRcdGNvbnN0IExSTXVsdGlWaWV3RW5hYmxlZCA9ICEhdmlld0RhdGE/LnZpZXdzO1xuXG5cdFx0XHRcdG5lZWRNYW51YWxSZWZyZXNoID1cblx0XHRcdFx0XHRmaWx0ZXJOb3RDaGFuZ2VkICYmXG5cdFx0XHRcdFx0KGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCkgfHwgLy8gY2hlY2sgaWYgdGhlIHNlYXJjaCBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCkgfHwgLy8gY2hlY2sgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYWRkZWRcblx0XHRcdFx0XHRcdExSTXVsdGlWaWV3RW5hYmxlZCkgJiYgLy8gaWYgdGhlIG11bHRpIHZpZXcgaXMgZW5hYmxlZCB0aGUgcmVxdWVzdCBzaG91bGQgYmUgcmVmcmVzaGVkIGFzIHdlIGRvbid0IGtub3duIGlmIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZSBpcyBvdXRkYXRlZCBkdWUgdG8gYW4gYWN0aW9uIG9uIGFub3RoZXIgdGFibGVcblx0XHRcdFx0XHQhcGVuZGluZ01hbnVhbFVwZGF0ZSAmJlxuXHRcdFx0XHRcdHZpZXdEYXRhPy5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIjtcblx0XHRcdH1cblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcuYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mbywgYmluZGluZ10pO1xuXHRcdFx0dGFibGUuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG5cdFx0XHRpZiAobmVlZE1hbnVhbFJlZnJlc2ggJiYgdGFibGUuZ2V0RmlsdGVyKCkgJiYgYmluZGluZykge1xuXHRcdFx0XHRiaW5kaW5nXG5cdFx0XHRcdFx0LnJlcXVlc3RSZWZyZXNoKGJpbmRpbmcuZ2V0R3JvdXBJZCgpKVxuXHRcdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIHRoZSB0YWJsZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShTRUFSQ0hfSEFTX0JFRU5fRklSRUQsIGZhbHNlKTtcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUywgbmV3U29ydGVycyk7XG5cdFx0XHR0aGlzLl9tYW5hZ2VTZW1hbnRpY1RhcmdldHModGFibGUpO1xuXHRcdH1cblx0XHRvVGFibGVBUEk/LnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGJJc1N1c3BlbmRlZCk7XG5cdH0sXG5cblx0X2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZTogZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0Ly8gV2UgbmVlZCB0byBkZWVwQ2xvbmUgdGhlIGluZm8gd2UgZ2V0IGZyb20gdGhlIGN1c3RvbSBkYXRhLCBvdGhlcndpc2Ugc29tZSBvZiBpdHMgc3Vib2JqZWN0cyAoZS5nLiBwYXJhbWV0ZXJzKSB3aWxsXG5cdFx0Ly8gYmUgc2hhcmVkIHdpdGggb0JpbmRpbmdJbmZvIGFuZCBtb2RpZmllZCBsYXRlciAoT2JqZWN0LmFzc2lnbiBvbmx5IGRvZXMgYSBzaGFsbG93IGNsb25lKVxuXHRcdGNvbnN0IHJvd0JpbmRpbmdJbmZvID0gZGVlcENsb25lKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJyb3dzQmluZGluZ0luZm9cIikpO1xuXHRcdC8vIGlmIHRoZSByb3dCaW5kaW5nSW5mbyBoYXMgYSAkJGdldEtlZXBBbGl2ZUNvbnRleHQgcGFyYW1ldGVyIHdlIG5lZWQgdG8gY2hlY2sgaXQgaXMgdGhlIG9ubHkgVGFibGUgd2l0aCBzdWNoIGFcblx0XHQvLyBwYXJhbWV0ZXIgZm9yIHRoZSBjb2xsZWN0aW9uTWV0YVBhdGhcblx0XHRpZiAocm93QmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGdldEtlZXBBbGl2ZUNvbnRleHQpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IG9UYWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdFx0Y29uc3Qga2VwdEFsaXZlTGlzdHMgPSBpbnRlcm5hbE1vZGVsLmdldE9iamVjdChcIi9rZXB0QWxpdmVMaXN0c1wiKSB8fCB7fTtcblx0XHRcdGlmICgha2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdKSB7XG5cdFx0XHRcdGtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSA9IG9UYWJsZS5nZXRJZCgpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL2tlcHRBbGl2ZUxpc3RzXCIsIGtlcHRBbGl2ZUxpc3RzKTtcblx0XHRcdH0gZWxzZSBpZiAoa2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdICE9PSBvVGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRkZWxldGUgcm93QmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGdldEtlZXBBbGl2ZUNvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByb3dCaW5kaW5nSW5mbztcblx0fSxcblx0X2ludGVybmFsVXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uIChvVGFibGU6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnkpIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRPYmplY3QuYXNzaWduKG9CaW5kaW5nSW5mbywgdGhpcy5fY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlKG9UYWJsZSkpO1xuXHRcdC8qKlxuXHRcdCAqIEJpbmRpbmcgaW5mbyBtaWdodCBiZSBzdXNwZW5kZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZSBmaXJzdCBiaW5kUm93cyBpcyBjYWxsZWQ6XG5cdFx0ICogVG8gYXZvaWQgZHVwbGljYXRlIHJlcXVlc3RzIGJ1dCBzdGlsbCBoYXZlIGEgYmluZGluZyB0byBjcmVhdGUgbmV3IGVudHJpZXMuXHRcdFx0XHQgKlxuXHRcdCAqIEFmdGVyIHRoZSBpbml0aWFsIGJpbmRpbmcgc3RlcCwgZm9sbG93IHVwIGJpbmRpbmdzIHNob3VsZCBub3QgbG9uZ2VyIGJlIHN1c3BlbmRlZC5cblx0XHQgKi9cblx0XHRpZiAob1RhYmxlLmdldFJvd0JpbmRpbmcoKSkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnN1c3BlbmRlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHQvLyBUaGUgcHJldmlvdXNseSBhZGRlZCBoYW5kbGVyIGZvciB0aGUgZXZlbnQgJ2RhdGFSZWNlaXZlZCcgaXMgbm90IGFueW1vcmUgdGhlcmVcblx0XHQvLyBzaW5jZSB0aGUgYmluZGluZ0luZm8gaXMgcmVjcmVhdGVkIGZyb20gc2NyYXRjaCBzbyB3ZSBuZWVkIHRvIHNldCB0aGUgZmxhZyB0byBmYWxzZSBpbiBvcmRlclxuXHRcdC8vIHRvIGFnYWluIGFkZCB0aGUgaGFuZGxlciBvbiB0aGlzIGV2ZW50IGlmIG5lZWRlZFxuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIsIGZhbHNlKTtcblx0XHR9XG5cblx0XHRsZXQgb0ZpbHRlcjtcblx0XHRjb25zdCBvRmlsdGVySW5mbyA9IFRhYmxlVXRpbHMuZ2V0QWxsRmlsdGVySW5mbyhvVGFibGUpO1xuXHRcdC8vIFByZXBhcmUgYmluZGluZyBpbmZvIHdpdGggZmlsdGVyL3NlYXJjaCBwYXJhbWV0ZXJzXG5cdFx0aWYgKG9GaWx0ZXJJbmZvLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b0ZpbHRlciA9IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiBvRmlsdGVySW5mby5maWx0ZXJzLCBhbmQ6IHRydWUgfSk7XG5cdFx0fVxuXHRcdGlmIChvRmlsdGVySW5mby5iaW5kaW5nUGF0aCkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBvRmlsdGVySW5mby5iaW5kaW5nUGF0aDtcblx0XHR9XG5cblx0XHRjb25zdCBvRGF0YVN0YXRlSW5kaWNhdG9yID0gb1RhYmxlLmdldERhdGFTdGF0ZUluZGljYXRvcigpO1xuXHRcdGlmIChvRGF0YVN0YXRlSW5kaWNhdG9yICYmIG9EYXRhU3RhdGVJbmRpY2F0b3IuaXNGaWx0ZXJpbmcoKSkge1xuXHRcdFx0Ly8gSW5jbHVkZSBmaWx0ZXJzIG9uIG1lc3NhZ2VTdHJpcFxuXHRcdFx0aWYgKG9CaW5kaW5nSW5mby5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ZpbHRlciA9IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiBvQmluZGluZ0luZm8uZmlsdGVycy5jb25jYXQob0ZpbHRlckluZm8uZmlsdGVycyksIGFuZDogdHJ1ZSB9KTtcblx0XHRcdFx0VGFibGVVdGlscy51cGRhdGVCaW5kaW5nSW5mbyhvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0VGFibGVVdGlscy51cGRhdGVCaW5kaW5nSW5mbyhvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHR9XG5cdH0sXG5cblx0X3RlbXBsYXRlQ3VzdG9tQ29sdW1uRnJhZ21lbnQ6IGZ1bmN0aW9uIChcblx0XHRvQ29sdW1uSW5mbzogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPixcblx0XHRvVmlldzogYW55LFxuXHRcdG9Nb2RpZmllcjogYW55LFxuXHRcdHNUYWJsZUlkOiBhbnlcblx0KSB7XG5cdFx0Y29uc3Qgb0NvbHVtbk1vZGVsID0gbmV3IEpTT05Nb2RlbChvQ29sdW1uSW5mbyksXG5cdFx0XHRvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0XHRpZDogc1RhYmxlSWRcblx0XHRcdH0pLFxuXHRcdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcInRoaXNcIjogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRcdFwiY29sdW1uXCI6IG9Db2x1bW5Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XCJ0aGlzXCI6IG9UaGlzLFxuXHRcdFx0XHRcdFwiY29sdW1uXCI6IG9Db2x1bW5Nb2RlbFxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRcdFwic2FwLmZlLm1hY3Jvcy50YWJsZS5DdXN0b21Db2x1bW5cIixcblx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdHsgdmlldzogb1ZpZXcgfSxcblx0XHRcdG9Nb2RpZmllclxuXHRcdCkudGhlbihmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdFx0b0NvbHVtbk1vZGVsLmRlc3Ryb3koKTtcblx0XHRcdHJldHVybiBvSXRlbTtcblx0XHR9KTtcblx0fSxcblxuXHRfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvQ29sdW1uSW5mbzogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPixcblx0XHRvVmlldzogYW55LFxuXHRcdG9Nb2RpZmllcjogYW55LFxuXHRcdHNUYWJsZUlkOiBhbnlcblx0KSB7XG5cdFx0Y29uc3Qgb0NvbHVtbk1vZGVsID0gbmV3IEpTT05Nb2RlbChvQ29sdW1uSW5mbyksXG5cdFx0XHRvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0XHRpZDogc1RhYmxlSWRcblx0XHRcdH0pLFxuXHRcdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcInRoaXNcIjogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRcdFwiY29sdW1uXCI6IG9Db2x1bW5Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XCJ0aGlzXCI6IG9UaGlzLFxuXHRcdFx0XHRcdFwiY29sdW1uXCI6IG9Db2x1bW5Nb2RlbFxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdGNvbnN0IHNsb3RDb2x1bW5zWE1MID0gYXdhaXQgRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5TbG90Q29sdW1uXCIsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywge1xuXHRcdFx0aXNYTUw6IHRydWVcblx0XHR9KTtcblx0XHRpZiAoIXNsb3RDb2x1bW5zWE1MKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBzbG90WE1MID0gc2xvdENvbHVtbnNYTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzbG90XCIpWzBdLFxuXHRcdFx0bWRjVGFibGVUZW1wbGF0ZVhNTCA9IHNsb3RDb2x1bW5zWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwibWRjVGFibGU6dGVtcGxhdGVcIilbMF07XG5cdFx0bWRjVGFibGVUZW1wbGF0ZVhNTC5yZW1vdmVDaGlsZChzbG90WE1MKTtcblx0XHRpZiAob0NvbHVtbkluZm8udGVtcGxhdGUpIHtcblx0XHRcdGNvbnN0IG9UZW1wbGF0ZSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcob0NvbHVtbkluZm8udGVtcGxhdGUsIFwidGV4dC94bWxcIik7XG5cdFx0XHRtZGNUYWJsZVRlbXBsYXRlWE1MLmFwcGVuZENoaWxkKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5lcnJvcihgUGxlYXNlIHByb3ZpZGUgY29udGVudCBpbnNpZGUgdGhpcyBCdWlsZGluZyBCbG9jayBDb2x1bW46ICR7b0NvbHVtbkluZm8uaGVhZGVyfWApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0aWYgKG9Nb2RpZmllci50YXJnZXRzICE9PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0cmV0dXJuIHNsb3RDb2x1bW5zWE1MO1xuXHRcdH1cblx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0ZGVmaW5pdGlvbjogc2xvdENvbHVtbnNYTUxcblx0XHR9KTtcblx0fSxcblxuXHRfZ2V0RXhwb3J0Rm9ybWF0OiBmdW5jdGlvbiAoZGF0YVR5cGU6IGFueSkge1xuXHRcdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxEYXRlZnJvbUpTRGF0ZSgpO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxEYXRlVGltZWZyb21KU0RhdGVUaW1lKCk7XG5cdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxUaW1lZnJvbUpTVGltZSgpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0X2dldFZIUmVsZXZhbnRGaWVsZHM6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBhbnksIHNNZXRhZGF0YVBhdGg6IGFueSwgc0JpbmRpbmdQYXRoPzogYW55KSB7XG5cdFx0bGV0IGFGaWVsZHM6IGFueVtdID0gW10sXG5cdFx0XHRvRGF0YUZpZWxkRGF0YSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNZXRhZGF0YVBhdGgpO1xuXG5cdFx0aWYgKG9EYXRhRmllbGREYXRhLiRraW5kICYmIG9EYXRhRmllbGREYXRhLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGApO1xuXHRcdFx0c01ldGFkYXRhUGF0aCA9IGAke3NNZXRhZGF0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgO1xuXHRcdH1cblx0XHRzd2l0Y2ggKG9EYXRhRmllbGREYXRhLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aGApLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiKSkge1xuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YWApLmZvckVhY2goKG9WYWx1ZTogYW55LCBpSW5kZXg6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0YUZpZWxkcyA9IGFGaWVsZHMuY29uY2F0KFxuXHRcdFx0XHRcdFx0XHR0aGlzLl9nZXRWSFJlbGV2YW50RmllbGRzKG9NZXRhTW9kZWwsIGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YS8ke2lJbmRleH1gKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoVXJsXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb25cIjpcblx0XHRcdFx0YUZpZWxkcy5wdXNoKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1ZhbHVlLyRQYXRoYCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBwcm9wZXJ0eVxuXHRcdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBtYWtlIHN1cmUgVkggcmVsZXZhbnQgZmllbGQgcGF0aCBkbyBub3QgY29udGFpbiB0aGUgYmluZGluZ3BhdGhcblx0XHRcdFx0aWYgKHNNZXRhZGF0YVBhdGguaW5kZXhPZihzQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRcdFx0YUZpZWxkcy5wdXNoKHNNZXRhZGF0YVBhdGguc3Vic3RyaW5nKHNCaW5kaW5nUGF0aC5sZW5ndGggKyAxKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0YUZpZWxkcy5wdXNoKENvbW1vbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChzTWV0YWRhdGFQYXRoLCB0cnVlKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYUZpZWxkcztcblx0fSxcblx0X3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uOiBmdW5jdGlvbiAob1RhYmxlOiBhbnksIGFDb2x1bW5zOiBhbnksIG9Db2x1bW5JbmZvOiBhbnkpIHtcblx0XHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGlmICghb0ludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc0ludGVybmFsUGF0aCA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvciA9IGFDb2x1bW5zLmZpbHRlcigob0NvbHVtbjogYW55KSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yKG9Db2x1bW4pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IG9UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0bGV0IHNBZGRWaXNpYmxlQ29sdW1uTmFtZSwgc1Zpc2libGVDb2x1bW5OYW1lLCBiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0LCBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcjtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRzVmlzaWJsZUNvbHVtbk5hbWUgPSBhVmlzaWJsZUNvbHVtbnNbaV0uZ2V0RGF0YVByb3BlcnR5KCk7XG5cdFx0XHRmb3IgKGNvbnN0IGogaW4gYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0c0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcltqXS5uYW1lO1xuXHRcdFx0XHRpZiAoc1Zpc2libGVDb2x1bW5OYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvQ29sdW1uSW5mbyAmJiBvQ29sdW1uSW5mby5uYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdHNBZGRWaXNpYmxlQ29sdW1uTmFtZSA9IG9Db2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgJiYgc0FkZFZpc2libGVDb2x1bW5OYW1lKSB7XG5cdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpO1xuXHRcdH1cblx0fSxcblx0cmVtb3ZlSXRlbTogZnVuY3Rpb24gKG9Qcm9wZXJ0eUluZm9OYW1lOiBhbnksIG9UYWJsZTogYW55LCBtUHJvcGVydHlCYWc6IGFueSkge1xuXHRcdGxldCBkb1JlbW92ZUl0ZW0gPSB0cnVlO1xuXHRcdGNvbnN0IG9Nb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcjtcblx0XHRjb25zdCBzRGF0YVByb3BlcnR5ID0gb1Byb3BlcnR5SW5mb05hbWUgJiYgb01vZGlmaWVyLmdldFByb3BlcnR5KG9Qcm9wZXJ0eUluZm9OYW1lLCBcImRhdGFQcm9wZXJ0eVwiKTtcblx0XHRpZiAoc0RhdGFQcm9wZXJ0eSAmJiBzRGF0YVByb3BlcnR5LmluZGV4T2YgJiYgc0RhdGFQcm9wZXJ0eS5pbmRleE9mKFwiSW5saW5lWE1MXCIpICE9PSAtMSkge1xuXHRcdFx0b01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9UYWJsZSwgXCJkZXBlbmRlbnRzXCIsIG9Qcm9wZXJ0eUluZm9OYW1lKTtcblx0XHRcdGRvUmVtb3ZlSXRlbSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAob1RhYmxlLmlzQSAmJiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgb1RhYmxlLCB0aGlzLmdldENvbHVtbnNGb3Iob1RhYmxlKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0fSxcblx0X2dldE1ldGFNb2RlbDogZnVuY3Rpb24gKG1Qcm9wZXJ0eUJhZzogYW55KSB7XG5cdFx0cmV0dXJuIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXM6IGZ1bmN0aW9uIChvTW9kaWZpZXI6IGFueSwgb1RhYmxlOiBhbnksIGFDb2x1bW5zOiBhbnksIG9Db2x1bW5JbmZvPzogYW55KSB7XG5cdFx0aWYgKG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW4ob1RhYmxlLCBhQ29sdW1ucywgb0NvbHVtbkluZm8pO1xuXHRcdH1cblx0fSxcblx0X2dldEdyb3VwSWQ6IGZ1bmN0aW9uIChzUmV0cmlldmVkR3JvdXBJZDogYW55KSB7XG5cdFx0cmV0dXJuIHNSZXRyaWV2ZWRHcm91cElkIHx8IHVuZGVmaW5lZDtcblx0fSxcblx0X2dldERlcGVuZGVudDogZnVuY3Rpb24gKG9EZXBlbmRlbnQ6IGFueSwgc1Byb3BlcnR5SW5mb05hbWU6IGFueSwgc0RhdGFQcm9wZXJ0eTogYW55KSB7XG5cdFx0aWYgKHNQcm9wZXJ0eUluZm9OYW1lID09PSBzRGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gb0RlcGVuZGVudDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblx0X2ZuVGVtcGxhdGVWYWx1ZUhlbHA6IGZ1bmN0aW9uIChmblRlbXBsYXRlVmFsdWVIZWxwOiBhbnksIGJWYWx1ZUhlbHBSZXF1aXJlZDogYW55LCBiVmFsdWVIZWxwRXhpc3RzOiBhbnkpIHtcblx0XHRpZiAoYlZhbHVlSGVscFJlcXVpcmVkICYmICFiVmFsdWVIZWxwRXhpc3RzKSB7XG5cdFx0XHRyZXR1cm4gZm5UZW1wbGF0ZVZhbHVlSGVscChcInNhcC5mZS5tYWNyb3MudGFibGUuVmFsdWVIZWxwXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH0sXG5cdF9nZXREaXNwbGF5TW9kZTogZnVuY3Rpb24gKGJEaXNwbGF5TW9kZTogYW55KSB7XG5cdFx0bGV0IGNvbHVtbkVkaXRNb2RlO1xuXHRcdGlmIChiRGlzcGxheU1vZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YkRpc3BsYXlNb2RlID0gdHlwZW9mIGJEaXNwbGF5TW9kZSA9PT0gXCJib29sZWFuXCIgPyBiRGlzcGxheU1vZGUgOiBiRGlzcGxheU1vZGUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0Y29sdW1uRWRpdE1vZGUgPSBiRGlzcGxheU1vZGUgPyBcIkRpc3BsYXlcIiA6IFwiRWRpdGFibGVcIjtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRpc3BsYXltb2RlOiBiRGlzcGxheU1vZGUsXG5cdFx0XHRcdGNvbHVtbkVkaXRNb2RlOiBjb2x1bW5FZGl0TW9kZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGRpc3BsYXltb2RlOiB1bmRlZmluZWQsXG5cdFx0XHRjb2x1bW5FZGl0TW9kZTogdW5kZWZpbmVkXG5cdFx0fTtcblx0fSxcblx0X2luc2VydEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAob1ZhbHVlSGVscDogYW55LCBvTW9kaWZpZXI6IGFueSwgb1RhYmxlOiBhbnkpIHtcblx0XHRpZiAob1ZhbHVlSGVscCkge1xuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvVGFibGUsIFwiZGVwZW5kZW50c1wiLCBvVmFsdWVIZWxwLCAwKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblx0LyoqXG5cdCAqIEludm9rZWQgd2hlbiBhIGNvbHVtbiBpcyBhZGRlZCB1c2luZyB0aGUgdGFibGUgcGVyc29uYWxpemF0aW9uIGRpYWxvZy5cblx0ICpcblx0ICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGFkZGVkXG5cdCAqIEBwYXJhbSBvVGFibGUgSW5zdGFuY2Ugb2YgdGFibGUgY29udHJvbFxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHByb3BlcnR5IGJhZyBmcm9tIHRoZSBmbGV4aWJpbGl0eSBBUElcblx0ICogQHJldHVybnMgT25jZSByZXNvbHZlZCwgYSB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbiBpcyByZXR1cm5lZFxuXHQgKi9cblx0YWRkSXRlbTogYXN5bmMgZnVuY3Rpb24gKHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsIG9UYWJsZTogYW55LCBtUHJvcGVydHlCYWc6IGFueSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLl9nZXRNZXRhTW9kZWwobVByb3BlcnR5QmFnKSxcblx0XHRcdG9Nb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcixcblx0XHRcdHNUYWJsZUlkID0gb01vZGlmaWVyLmdldElkKG9UYWJsZSksXG5cdFx0XHRhQ29sdW1ucyA9IG9UYWJsZS5pc0EgPyB0aGlzLmdldENvbHVtbnNGb3Iob1RhYmxlKSA6IG51bGw7XG5cdFx0aWYgKCFhQ29sdW1ucykge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRjb25zdCBvQ29sdW1uSW5mbyA9IGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0cmV0dXJuIG9Db2x1bW4ubmFtZSA9PT0gc1Byb3BlcnR5SW5mb05hbWU7XG5cdFx0fSk7XG5cdFx0aWYgKCFvQ29sdW1uSW5mbykge1xuXHRcdFx0TG9nLmVycm9yKGAke3NQcm9wZXJ0eUluZm9OYW1lfSBub3QgZm91bmQgd2hpbGUgYWRkaW5nIGNvbHVtbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgdHJ1ZSk7XG5cdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCBvVGFibGUsIGFDb2x1bW5zLCBvQ29sdW1uSW5mbyk7XG5cdFx0Ly8gcmVuZGVyIGN1c3RvbSBjb2x1bW5cblx0XHRpZiAob0NvbHVtbkluZm8udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZW1wbGF0ZUN1c3RvbUNvbHVtbkZyYWdtZW50KG9Db2x1bW5JbmZvLCBtUHJvcGVydHlCYWcudmlldywgb01vZGlmaWVyLCBzVGFibGVJZCk7XG5cdFx0fVxuXG5cdFx0aWYgKG9Db2x1bW5JbmZvLnR5cGUgPT09IFwiU2xvdFwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQob0NvbHVtbkluZm8sIG1Qcm9wZXJ0eUJhZy52aWV3LCBvTW9kaWZpZXIsIHNUYWJsZUlkKTtcblx0XHR9XG5cdFx0Ly8gZmFsbC1iYWNrXG5cdFx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNQYXRoOiBzdHJpbmcgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwibWV0YVBhdGhcIiwgb01vZGlmaWVyKTtcblx0XHRjb25zdCBzRW50aXR5VHlwZVBhdGg6IHN0cmluZyA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJlbnRpdHlUeXBlXCIsIG9Nb2RpZmllcik7XG5cdFx0Y29uc3Qgc1JldHJpZXZlZEdyb3VwSWQgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwicmVxdWVzdEdyb3VwSWRcIiwgb01vZGlmaWVyKTtcblx0XHRjb25zdCBzR3JvdXBJZDogc3RyaW5nID0gdGhpcy5fZ2V0R3JvdXBJZChzUmV0cmlldmVkR3JvdXBJZCk7XG5cdFx0Y29uc3Qgb1RhYmxlQ29udGV4dDogQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGgpO1xuXHRcdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllcyA9IGF3YWl0IHRoaXMuX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KFxuXHRcdFx0b1RhYmxlLFxuXHRcdFx0c0VudGl0eVR5cGVQYXRoLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnRcblx0XHQpO1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBhRmV0Y2hlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob0luZm86IGFueSkge1xuXHRcdFx0cmV0dXJuIG9JbmZvLm5hbWUgPT09IHNQcm9wZXJ0eUluZm9OYW1lO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgb1Byb3BlcnR5Q29udGV4dDogQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQob1Byb3BlcnR5SW5mby5tZXRhZGF0YVBhdGgpO1xuXHRcdGNvbnN0IGFWSFByb3BlcnRpZXMgPSB0aGlzLl9nZXRWSFJlbGV2YW50RmllbGRzKG9NZXRhTW9kZWwsIG9Qcm9wZXJ0eUluZm8ubWV0YWRhdGFQYXRoLCBzUGF0aCk7XG5cdFx0Y29uc3Qgb1BhcmFtZXRlcnMgPSB7XG5cdFx0XHRzQmluZGluZ1BhdGg6IHNQYXRoLFxuXHRcdFx0c1ZhbHVlSGVscFR5cGU6IFwiVGFibGVWYWx1ZUhlbHBcIixcblx0XHRcdG9Db250cm9sOiBvVGFibGUsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0b01vZGlmaWVyLFxuXHRcdFx0b1Byb3BlcnR5SW5mb1xuXHRcdH07XG5cblx0XHRjb25zdCBmblRlbXBsYXRlVmFsdWVIZWxwID0gYXN5bmMgKHNGcmFnbWVudE5hbWU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdFx0XHRpZDogc1RhYmxlSWQsXG5cdFx0XHRcdFx0cmVxdWVzdEdyb3VwSWQ6IHNHcm91cElkXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcInRoaXNcIjogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRcdFx0XCJkYXRhRmllbGRcIjogb1Byb3BlcnR5Q29udGV4dFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcInRoaXNcIjogb1RoaXMsXG5cdFx0XHRcdFx0XHRcImRhdGFGaWVsZFwiOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBvVmFsdWVIZWxwID0gYXdhaXQgRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywge30sIG9Nb2RpZmllcik7XG5cdFx0XHRcdHJldHVybiBhd2FpdCB0aGlzLl9pbnNlcnRBZ2dyZWdhdGlvbihvVmFsdWVIZWxwLCBvTW9kaWZpZXIsIG9UYWJsZSk7XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHQvL1dlIGFsd2F5cyByZXNvbHZlIHRoZSBwcm9taXNlIHRvIGVuc3VyZSB0aGF0IHRoZSBhcHAgZG9lcyBub3QgY3Jhc2hcblx0XHRcdFx0TG9nLmVycm9yKGBWYWx1ZUhlbHAgbm90IGxvYWRlZCA6ICR7b0Vycm9yLm1lc3NhZ2V9YCk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0b1RoaXMuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBmblRlbXBsYXRlRnJhZ21lbnQgPSAob0luUHJvcGVydHlJbmZvOiBhbnksIG9WaWV3OiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IHNGcmFnbWVudE5hbWUgPSBcInNhcC5mZS5tYWNyb3MudGFibGUuQ29sdW1uXCI7XG5cblx0XHRcdGxldCBiRGlzcGxheU1vZGU7XG5cdFx0XHRsZXQgc1RhYmxlVHlwZUN1c3RvbURhdGE7XG5cdFx0XHRsZXQgc09uQ2hhbmdlQ3VzdG9tRGF0YTtcblx0XHRcdGxldCBzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YTtcblxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIsIG9Nb2RpZmllciksXG5cdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJ0YWJsZVR5cGVcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcIm9uQ2hhbmdlXCIsIG9Nb2RpZmllciksXG5cdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJjcmVhdGlvbk1vZGVcIiwgb01vZGlmaWVyKVxuXHRcdFx0XSkudGhlbigoYUN1c3RvbURhdGE6IGFueVtdKSA9PiB7XG5cdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGFDdXN0b21EYXRhWzBdO1xuXHRcdFx0XHRzVGFibGVUeXBlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzFdO1xuXHRcdFx0XHRzT25DaGFuZ2VDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMl07XG5cdFx0XHRcdHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbM107XG5cdFx0XHRcdC8vIFJlYWQgT25seSBhbmQgQ29sdW1uIEVkaXQgTW9kZSBjYW4gYm90aCBoYXZlIHRocmVlIHN0YXRlXG5cdFx0XHRcdC8vIFVuZGVmaW5lZCBtZWFucyB0aGF0IHRoZSBmcmFtZXdvcmsgZGVjaWRlcyB3aGF0IHRvIGRvXG5cdFx0XHRcdC8vIFRydWUgLyBEaXNwbGF5IG1lYW5zIGFsd2F5cyByZWFkIG9ubHlcblx0XHRcdFx0Ly8gRmFsc2UgLyBFZGl0YWJsZSBtZWFucyBlZGl0YWJsZSBidXQgd2hpbGUgc3RpbGwgcmVzcGVjdGluZyB0aGUgbG93IGxldmVsIHByaW5jaXBsZSAoaW1tdXRhYmxlIHByb3BlcnR5IHdpbGwgbm90IGJlIGVkaXRhYmxlKVxuXHRcdFx0XHRjb25zdCBvRGlzcGxheU1vZGVzID0gdGhpcy5fZ2V0RGlzcGxheU1vZGUoYkRpc3BsYXlNb2RlKTtcblx0XHRcdFx0YkRpc3BsYXlNb2RlID0gb0Rpc3BsYXlNb2Rlcy5kaXNwbGF5bW9kZTtcblx0XHRcdFx0Y29uc3QgY29sdW1uRWRpdE1vZGUgPSBvRGlzcGxheU1vZGVzLmNvbHVtbkVkaXRNb2RlO1xuXG5cdFx0XHRcdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0XHRyZWFkT25seTogYkRpc3BsYXlNb2RlLFxuXHRcdFx0XHRcdFx0Y29sdW1uRWRpdE1vZGU6IGNvbHVtbkVkaXRNb2RlLFxuXHRcdFx0XHRcdFx0dGFibGVUeXBlOiBzVGFibGVUeXBlQ3VzdG9tRGF0YSxcblx0XHRcdFx0XHRcdG9uQ2hhbmdlOiBzT25DaGFuZ2VDdXN0b21EYXRhLFxuXHRcdFx0XHRcdFx0aWQ6IHNUYWJsZUlkLFxuXHRcdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aDogc1Byb3BlcnR5SW5mb05hbWUsXG5cdFx0XHRcdFx0XHRjb2x1bW5JbmZvOiBvQ29sdW1uSW5mbyxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IHtcblx0XHRcdFx0XHRcdFx0c1BhdGg6IHNQYXRoLFxuXHRcdFx0XHRcdFx0XHRvTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGU6IHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcdFwiZW50aXR5U2V0XCI6IG9UYWJsZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFwiY29sbGVjdGlvblwiOiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcImRhdGFGaWVsZFwiOiBvUHJvcGVydHlDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcInRoaXNcIjogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRcdFx0XHRcImNvbHVtblwiOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9jb2x1bW5JbmZvXCIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdFwidGhpc1wiOiBvVGhpcyxcblx0XHRcdFx0XHRcdFx0XCJlbnRpdHlTZXRcIjogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0XCJjb2xsZWN0aW9uXCI6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFwiZGF0YUZpZWxkXCI6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0XCJjb2x1bW5cIjogb1RoaXNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZSwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCB7IHZpZXc6IG9WaWV3IH0sIG9Nb2RpZmllcikuZmluYWxseShcblx0XHRcdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRvVGhpcy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0YVZIUHJvcGVydGllcy5tYXAoYXN5bmMgKHNQcm9wZXJ0eU5hbWU6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBtUGFyYW1ldGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9QYXJhbWV0ZXJzLCB7IHNQcm9wZXJ0eU5hbWU6IHNQcm9wZXJ0eU5hbWUgfSk7XG5cblx0XHRcdFx0Y29uc3QgYVJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFx0RGVsZWdhdGVVdGlsLmlzVmFsdWVIZWxwUmVxdWlyZWQobVBhcmFtZXRlcnMpLFxuXHRcdFx0XHRcdERlbGVnYXRlVXRpbC5kb2VzVmFsdWVIZWxwRXhpc3QobVBhcmFtZXRlcnMpXG5cdFx0XHRcdF0pO1xuXG5cdFx0XHRcdGNvbnN0IGJWYWx1ZUhlbHBSZXF1aXJlZCA9IGFSZXN1bHRzWzBdLFxuXHRcdFx0XHRcdGJWYWx1ZUhlbHBFeGlzdHMgPSBhUmVzdWx0c1sxXTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2ZuVGVtcGxhdGVWYWx1ZUhlbHAoZm5UZW1wbGF0ZVZhbHVlSGVscCwgYlZhbHVlSGVscFJlcXVpcmVkLCBiVmFsdWVIZWxwRXhpc3RzKTtcblx0XHRcdH0pXG5cdFx0KTtcblx0XHQvLyBJZiB2aWV3IGlzIG5vdCBwcm92aWRlZCB0cnkgdG8gZ2V0IGl0IGJ5IGFjY2Vzc2luZyB0byB0aGUgcGFyZW50YWwgaGllcmFyY2h5XG5cdFx0Ly8gSWYgaXQgZG9lc24ndCB3b3JrICh0YWJsZSBpbnRvIGFuIHVuYXR0YWNoZWQgT1Agc2VjdGlvbikgZ2V0IHRoZSB2aWV3IHZpYSB0aGUgQXBwQ29tcG9uZW50XG5cdFx0Y29uc3QgdmlldyA9XG5cdFx0XHRtUHJvcGVydHlCYWcudmlldyB8fFxuXHRcdFx0Q29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvVGFibGUpIHx8XG5cdFx0XHQobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCA/IENvbW1vblV0aWxzLmdldEN1cnJlbnRQYWdlVmlldyhtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50KSA6IHVuZGVmaW5lZCk7XG5cdFx0cmV0dXJuIGZuVGVtcGxhdGVGcmFnbWVudChvUHJvcGVydHlJbmZvLCB2aWV3KTtcblx0fSxcblxuXHQvKipcblx0ICogUHJvdmlkZSB0aGUgVGFibGUncyBmaWx0ZXIgZGVsZWdhdGUgdG8gcHJvdmlkZSBiYXNpYyBmaWx0ZXIgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGFkZGluZyBGaWx0ZXJGaWVsZHMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIE9iamVjdCBmb3IgdGhlIFRhYmxlcyBmaWx0ZXIgcGVyc29uYWxpemF0aW9uLlxuXHQgKi9cblx0Z2V0RmlsdGVyRGVsZWdhdGU6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgRmlsdGVyQmFyRGVsZWdhdGUsIHtcblx0XHRcdGFkZEl0ZW06IGZ1bmN0aW9uIChzUHJvcGVydHlJbmZvTmFtZTogYW55LCBvUGFyZW50Q29udHJvbDogYW55KSB7XG5cdFx0XHRcdGlmIChzUHJvcGVydHlJbmZvTmFtZS5pbmRleE9mKFwiUHJvcGVydHk6OlwiKSA9PT0gMCkge1xuXHRcdFx0XHRcdC8vIENvcnJlY3QgdGhlIG5hbWUgb2YgY29tcGxleCBwcm9wZXJ0eSBpbmZvIHJlZmVyZW5jZXMuXG5cdFx0XHRcdFx0c1Byb3BlcnR5SW5mb05hbWUgPSBzUHJvcGVydHlJbmZvTmFtZS5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gRmlsdGVyQmFyRGVsZWdhdGUuYWRkSXRlbShzUHJvcGVydHlJbmZvTmFtZSwgb1BhcmVudENvbnRyb2wpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBUeXBlVXRpbCBhdHRhY2hlZCB0byB0aGlzIGRlbGVnYXRlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBBbnkgaW5zdGFuY2Ugb2YgVHlwZVV0aWxcblx0ICovXG5cdGdldFR5cGVVdGlsOiBmdW5jdGlvbiAoLypvUGF5bG9hZDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gVHlwZVV0aWw7XG5cdH0sXG5cblx0Zm9ybWF0R3JvdXBIZWFkZXIob1RhYmxlOiBhbnksIG9Db250ZXh0OiBhbnksIHNQcm9wZXJ0eTogYW55KSB7XG5cdFx0Y29uc3QgbUZvcm1hdEluZm9zID0gX2dldENhY2hlZFByb3BlcnRpZXMob1RhYmxlLCBudWxsKSxcblx0XHRcdG9Gb3JtYXRJbmZvID1cblx0XHRcdFx0bUZvcm1hdEluZm9zICYmXG5cdFx0XHRcdG1Gb3JtYXRJbmZvcy5maWx0ZXIoKG9iajogYW55KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iai5uYW1lID09PSBzUHJvcGVydHk7XG5cdFx0XHRcdH0pWzBdLFxuXHRcdFx0LypGb3IgYSBEYXRlIG9yIERhdGVUaW1lIHByb3BlcnR5LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgaW4gZXh0ZXJuYWwgZm9ybWF0IHVzaW5nIGEgVUk1IHR5cGUgZm9yIHRoZVxuXHQgICAgICAgIGdpdmVuIHByb3BlcnR5IHBhdGggdGhhdCBmb3JtYXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5J3MgRURNIHR5cGUgYW5kIGNvbnN0cmFpbnRzKi9cblx0XHRcdGJFeHRlcm5hbEZvcm1hdCA9IG9Gb3JtYXRJbmZvPy50eXBlQ29uZmlnPy5iYXNlVHlwZSA9PT0gXCJEYXRlVGltZVwiIHx8IG9Gb3JtYXRJbmZvPy50eXBlQ29uZmlnPy5iYXNlVHlwZSA9PT0gXCJEYXRlXCI7XG5cdFx0bGV0IHNWYWx1ZTtcblx0XHRpZiAob0Zvcm1hdEluZm8gJiYgb0Zvcm1hdEluZm8ubW9kZSkge1xuXHRcdFx0c3dpdGNoIChvRm9ybWF0SW5mby5tb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHNWYWx1ZSA9IG9Db250ZXh0LmdldFByb3BlcnR5KG9Gb3JtYXRJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGJFeHRlcm5hbEZvcm1hdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHRzVmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShvRm9ybWF0SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBiRXh0ZXJuYWxGb3JtYXQpLFxuXHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkob0Zvcm1hdEluZm8udmFsdWVQcm9wZXJ0eSwgYkV4dGVybmFsRm9ybWF0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRzVmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShvRm9ybWF0SW5mby52YWx1ZVByb3BlcnR5LCBiRXh0ZXJuYWxGb3JtYXQpLFxuXHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkob0Zvcm1hdEluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSwgYkV4dGVybmFsRm9ybWF0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNWYWx1ZSA9IG9Db250ZXh0LmdldFByb3BlcnR5KG9Gb3JtYXRJbmZvLnBhdGgsIGJFeHRlcm5hbEZvcm1hdCk7XG5cdFx0fVxuXHRcdHJldHVybiBSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRVwiLCBbb0Zvcm1hdEluZm8ubGFiZWwsIHNWYWx1ZV0pO1xuXHR9XG59KTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7RUFrakJPLGdCQUFnQkEsSUFBSSxFQUFFQyxPQUFPLEVBQUU7SUFDckMsSUFBSTtNQUNILElBQUlDLE1BQU0sR0FBR0YsSUFBSSxFQUFFO0lBQ3BCLENBQUMsQ0FBQyxPQUFNRyxDQUFDLEVBQUU7TUFDVixPQUFPRixPQUFPLENBQUNFLENBQUMsQ0FBQztJQUNsQjtJQUNBLElBQUlELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFJLEVBQUU7TUFDMUIsT0FBT0YsTUFBTSxDQUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUVILE9BQU8sQ0FBQztJQUNwQztJQUNBLE9BQU9DLE1BQU07RUFDZDtFQUdPLDBCQUEwQkYsSUFBSSxFQUFFSyxTQUFTLEVBQUU7SUFDakQsSUFBSTtNQUNILElBQUlILE1BQU0sR0FBR0YsSUFBSSxFQUFFO0lBQ3BCLENBQUMsQ0FBQyxPQUFPRyxDQUFDLEVBQUU7TUFDWCxPQUFPRSxTQUFTLENBQUMsSUFBSSxFQUFFRixDQUFDLENBQUM7SUFDMUI7SUFDQSxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBSSxFQUFFO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDQyxTQUFTLENBQUNDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUVELFNBQVMsQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RTtJQUNBLE9BQU9ELFNBQVMsQ0FBQyxLQUFLLEVBQUVILE1BQU0sQ0FBQztFQUNoQztFQXZpQkEsSUFBTUssMkJBQTJCLEdBQUcsc0NBQXNDO0VBVzFFLElBQU1DLDhCQUE4QixHQUFHLCtCQUErQjtFQUN0RSxJQUFNQyxrQkFBa0IsR0FBR0MsV0FBVyxDQUFDRCxrQkFBa0I7RUFDekQsSUFBTUUscUJBQXFC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
|
|
1127
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIkZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWSIsIlNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIkNvbW1vblV0aWxzIiwiU0VBUkNIX0hBU19CRUVOX0ZJUkVEIiwiQ09MVU1OX0hBU19CRUVOX0FEREVEIiwiUFJFVklPVVNfU09SVEVSUyIsIl9zZXRDYWNoZWRQcm9wZXJ0aWVzIiwib1RhYmxlIiwiYUZldGNoZWRQcm9wZXJ0aWVzIiwiYlVzZUFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwid2luZG93IiwiRWxlbWVudCIsImtleSIsIkRlbGVnYXRlVXRpbCIsInNldEN1c3RvbURhdGEiLCJfZ2V0Q2FjaGVkUHJvcGVydGllcyIsImdldEN1c3RvbURhdGEiLCJPYmplY3QiLCJhc3NpZ24iLCJUYWJsZURlbGVnYXRlQmFzZSIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwIiwib1Byb3BlcnR5IiwiYVByb3BlcnRpZXMiLCJuYW1lIiwiaW5kZXhPZiIsIm9Db2x1bW4iLCJnZXRDb2x1bW5zIiwiZmluZCIsIm9Db2wiLCJnZXREYXRhUHJvcGVydHkiLCJiU2hvd0RhdGFGaWVsZHNMYWJlbCIsImRhdGEiLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibWV0YWRhdGFQYXRoIiwicmVwbGFjZSIsIm9EYXRhRmllbGQiLCJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiRBbm5vdGF0aW9uUGF0aCIsImFGaWVsZFdpZHRoIiwiRGF0YSIsImZvckVhY2giLCJvRGF0YSIsIm9EYXRhRmllbGRXaWR0aCIsIiRUeXBlIiwiVGFibGVTaXplSGVscGVyIiwiZ2V0V2lkdGhGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiZ2V0V2lkdGhGb3JEYXRhRmllbGQiLCJsYWJlbFdpZHRoIiwicHJvcGVydHlXaWR0aCIsImdldEJ1dHRvbldpZHRoIiwiTGFiZWwiLCJwdXNoIiwibldpZGVzdCIsInJlZHVjZSIsImFjYyIsInZhbHVlIiwiTWF0aCIsIm1heCIsInZpc3VhbFNldHRpbmdzIiwiZGVlcEV4dGVuZCIsIndpZHRoQ2FsY3VsYXRpb24iLCJ2ZXJ0aWNhbEFycmFuZ2VtZW50IiwibWluV2lkdGgiLCJjZWlsIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFZhbHVlSGVscCIsIm9UYWJsZUFQSSIsImdldFBhcmVudCIsInByb3BlcnR5SW5mb3MiLCJ1bmRlZmluZWQiLCJFcnJvciIsImdhcCIsImdldFJlYWRPbmx5IiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFVuaXQiLCJvVW5pdCIsIm9Vbml0VGV4dCIsIm9UaW1lem9uZVRleHQiLCJzVW5pdFRleHQiLCJfY29tcHV0ZUxhYmVsIiwicHJvcGVydHkiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJsZW5ndGgiLCJwYXRoIiwiaW5jbHVkZXMiLCJhZGRpdGlvbmFsTGFiZWxzIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJ0YWJsZSIsInByb3BlcnRpZXMiLCJwMTNuTW9kZSIsImdldFAxM25Nb2RlIiwic29ydGFibGUiLCJmaWx0ZXJhYmxlIiwiZ3JvdXBhYmxlIiwiY29uY2F0IiwidHlwZUNvbmZpZyIsImdldENvbHVtbnNGb3IiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb2x1bW5zIiwiX2dldEFnZ3JlZ2F0ZWRQcm9wZXJ0eU1hcCIsImFnZ3JlZ2F0ZXMiLCJmZXRjaEV4cG9ydENhcGFiaWxpdGllcyIsIm9DYXBhYmlsaXRpZXMiLCJvTW9kZWwiLCJmZXRjaE1vZGVsIiwibW9kZWwiLCJhU3VwcG9ydGVkRm9ybWF0cyIsImFMb3dlckZvcm1hdHMiLCJtYXAiLCJlbGVtZW50IiwidG9Mb3dlckNhc2UiLCJvQW5ub3RhdGlvbiIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5IiwiY29sdW1uSW5mbyIsIm1ldGFNb2RlbCIsInRhYmxlTWV0YVBhdGgiLCJ0YWJsZURhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRDb250ZXh0IiwiY29sdW1uTmF2aWdhdGlvblByb3BlcnRpZXMiLCJhbm5vdGF0aW9uUGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFibGVUYXJnZXRFbnRpdHlJbmRleCIsImZpbmRJbmRleCIsInByb3AiLCJ0YXJnZXRUeXBlIiwidGFyZ2V0RW50aXR5VHlwZSIsInJlbGF0aXZlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJzbGljZSIsInJlbGF0aXZlUGF0aCIsImlzUGFydE9mTGluZUl0ZW0iLCJzb21lIiwibmF2aWdhdGlvblByb3BlcnR5IiwiX3R5cGUiLCJpc0NvbGxlY3Rpb24iLCJfZmV0Y2hQcm9wZXJ0eUluZm8iLCJvQ29sdW1uSW5mbyIsIm9BcHBDb21wb25lbnQiLCJzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCIsIm9OYXZpZ2F0aW9uQ29udGV4dCIsIm9UeXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiaXNUeXBlRmlsdGVyYWJsZSIsIlR5cGVVdGlsIiwiZ2V0VHlwZUNvbmZpZyIsIm9Gb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiYkZpbHRlcmFibGUiLCJDb21tb25IZWxwZXIiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsImNvbnRleHQiLCJiQ29tcGxleFR5cGUiLCJiSXNBbmFseXRpY2FsVGFibGUiLCJhQWdncmVnYXRlZFByb3BlcnR5TWFwVW5maWx0ZXJhYmxlIiwib0V4cG9ydFNldHRpbmdzIiwiZXhwb3J0U2V0dGluZ3MiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0Iiwic0xhYmVsIiwiaXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHkiLCJSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsImdldExvY2FsaXplZFRleHQiLCJ0aW1lem9uZVByb3BlcnR5IiwiZm9ybWF0IiwidGVtcGxhdGUiLCJ0eXBlIiwidGltZXpvbmUiLCJ1dGMiLCJvUHJvcGVydHlJbmZvIiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwidG9vbHRpcCIsInZpc2libGUiLCJhdmFpbGFiaWxpdHkiLCJ1bml0Iiwia2V5cyIsIndyYXAiLCJhZGRpdGlvbmFsUHJvcGVydHlJbmZvcyIsImlzS2V5IiwiaXNHcm91cGFibGUiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJvRGVzY3JpcHRpb25Db2x1bW4iLCJ0ZXh0UHJvcGVydHkiLCJtb2RlIiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJ0ZXh0IiwiY2FzZVNlbnNpdGl2ZSIsInVuaXRUZXh0IiwidGltZXpvbmVUZXh0IiwiX2ZldGNoQ3VzdG9tUHJvcGVydHlJbmZvIiwiaGVhZGVyIiwiX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvciIsImZvcm1hdE9wdGlvbnMiLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4IiwiZ2V0UHJvcGVydHkiLCJzZXRQcm9wZXJ0eSIsIl9mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJzRW50aXR5VHlwZVBhdGgiLCJzQmluZGluZ1BhdGgiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJvRlIiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJhTm9uRmlsdGVyYWJsZVByb3BzIiwiTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUyIsIlByb21pc2UiLCJyZXNvbHZlIiwiYUNvbHVtbnMiLCJtYXhDb25kaXRpb25zIiwiaXNNdWx0aVZhbHVlIiwiX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiYVN1YkZldGNoZWRQcm9wZXJ0aWVzIiwiX3NldFRhYmxlTm9EYXRhVGV4dCIsIm9CaW5kaW5nSW5mbyIsInNOb0RhdGFLZXkiLCJvVGFibGVGaWx0ZXJJbmZvIiwiVGFibGVVdGlscyIsImdldEFsbEZpbHRlckluZm8iLCJzdWZmaXhSZXNvdXJjZUtleSIsInN0YXJ0c1dpdGgiLCJzdWJzdHIiLCJfZ2V0Tm9EYXRhVGV4dFdpdGhGaWx0ZXJzIiwic0ZpbHRlckFzc29jaWF0aW9uIiwiZ2V0RmlsdGVyIiwidGVzdCIsInNlYXJjaCIsImZpbHRlcnMiLCJnZXRSZXNvdXJjZUJ1bmRsZSIsIm9SZXNvdXJjZUJ1bmRsZSIsInNldE5vRGF0YSIsImdldFRyYW5zbGF0ZWRUZXh0IiwiaGFuZGxlVGFibGVEYXRhUmVjZWl2ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJvQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJiRGF0YVJlY2VpdmVkQXR0YWNoZWQiLCJhdHRhY2hEYXRhUmVjZWl2ZWQiLCJUYWJsZUhlbHBlciIsImhhbmRsZVRhYmxlRGVsZXRlRW5hYmxlbWVudEZvclNpZGVFZmZlY3RzIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsInBhcnNlQ3VzdG9tRGF0YSIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50Iiwic2V0VXBFbXB0eVJvd3MiLCJyZWJpbmQiLCJiSXNTdXNwZW5kZWQiLCJjbGVhclNlbGVjdGlvbiIsImFwcGx5Iiwib25UYWJsZUJvdW5kIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiZmV0Y2hQcm9wZXJ0aWVzIiwicHJlSW5pdCIsImZhc3RDcmVhdGlvblJvdyIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmaWx0ZXJCYXIiLCJDb3JlIiwiYnlJZCIsInZpZXciLCJnZXRUYXJnZXRWaWV3Iiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsImNvbnZlcnRlclR5cGUiLCJhdHRhY2hFdmVudCIsImludGVybmFsQmluZGluZ0NvbnRleHQiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsIl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvIiwiZXZlbnRzIiwiZGF0YVJlY2VpdmVkIiwib25JbnRlcm5hbERhdGFSZWNlaXZlZCIsImRhdGFSZXF1ZXN0ZWQiLCJvbkludGVybmFsRGF0YVJlcXVlc3RlZCIsIl9tYW5hZ2VTZW1hbnRpY1RhcmdldHMiLCJvTURDVGFibGUiLCJvUm93QmluZGluZyIsImF0dGFjaEV2ZW50T25jZSIsInNldFRpbWVvdXQiLCJfb1ZpZXciLCJnZXRTZW1hbnRpY1RhcmdldHNGcm9tVGFibGUiLCJnZXRDb250cm9sbGVyIiwidXBkYXRlQmluZGluZyIsImJpbmRpbmdJbmZvIiwiYmluZGluZyIsIm5lZWRNYW51YWxSZWZyZXNoIiwibWFudWFsVXBkYXRlUHJvcGVydHlLZXkiLCJwZW5kaW5nTWFudWFsVXBkYXRlIiwibmV3U29ydGVycyIsInN0cmluZ2lmeSIsInNvcnRlciIsIm9sZEZpbHRlcnMiLCJnZXRGaWx0ZXJzIiwicHJldmlvdXNTb3J0ZXJzIiwiZmlsdGVyTm90Q2hhbmdlZCIsImRlZXBFcXVhbCIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInBhcmFtZXRlcnMiLCJMUk11bHRpVmlld0VuYWJsZWQiLCJ2aWV3cyIsImZpcmVFdmVudCIsInJlcXVlc3RSZWZyZXNoIiwiZ2V0R3JvdXBJZCIsImZpbmFsbHkiLCJfY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlIiwicm93QmluZGluZ0luZm8iLCJkZWVwQ2xvbmUiLCIkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJjb2xsZWN0aW9uUGF0aCIsImludGVybmFsTW9kZWwiLCJrZXB0QWxpdmVMaXN0cyIsImdldElkIiwic3VzcGVuZGVkIiwib0ZpbHRlciIsIm9GaWx0ZXJJbmZvIiwiRmlsdGVyIiwiYW5kIiwiYmluZGluZ1BhdGgiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJfdGVtcGxhdGVDdXN0b21Db2x1bW5GcmFnbWVudCIsIm9WaWV3Iiwib01vZGlmaWVyIiwic1RhYmxlSWQiLCJvQ29sdW1uTW9kZWwiLCJKU09OTW9kZWwiLCJvVGhpcyIsImlkIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwibW9kZWxzIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJvSXRlbSIsImRlc3Ryb3kiLCJfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQiLCJpc1hNTCIsInNsb3RDb2x1bW5zWE1MIiwic2xvdFhNTCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibWRjVGFibGVUZW1wbGF0ZVhNTCIsInJlbW92ZUNoaWxkIiwib1RlbXBsYXRlIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiYXBwZW5kQ2hpbGQiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInRhcmdldHMiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiZGF0YVR5cGUiLCJFeGNlbEZvcm1hdCIsImdldEV4Y2VsRGF0ZWZyb21KU0RhdGUiLCJnZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwiX2dldFZIUmVsZXZhbnRGaWVsZHMiLCJzTWV0YWRhdGFQYXRoIiwiYUZpZWxkcyIsIm9EYXRhRmllbGREYXRhIiwiJGtpbmQiLCJvVmFsdWUiLCJpSW5kZXgiLCJzdWJzdHJpbmciLCJnZXROYXZpZ2F0aW9uUGF0aCIsIl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbiIsImFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yIiwiZmlsdGVyIiwic0FkZFZpc2libGVDb2x1bW5OYW1lIiwic1Zpc2libGVDb2x1bW5OYW1lIiwiYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCIsInNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yIiwiaSIsImoiLCJyZW1vdmVJdGVtIiwib1Byb3BlcnR5SW5mb05hbWUiLCJtUHJvcGVydHlCYWciLCJkb1JlbW92ZUl0ZW0iLCJtb2RpZmllciIsInNEYXRhUHJvcGVydHkiLCJpbnNlcnRBZ2dyZWdhdGlvbiIsImlzQSIsIl9zZXREcmFmdEluZGljYXRvclN0YXR1cyIsIl9nZXRNZXRhTW9kZWwiLCJhcHBDb21wb25lbnQiLCJfZ2V0R3JvdXBJZCIsInNSZXRyaWV2ZWRHcm91cElkIiwiX2dldERlcGVuZGVudCIsIm9EZXBlbmRlbnQiLCJzUHJvcGVydHlJbmZvTmFtZSIsIl9mblRlbXBsYXRlVmFsdWVIZWxwIiwiZm5UZW1wbGF0ZVZhbHVlSGVscCIsImJWYWx1ZUhlbHBSZXF1aXJlZCIsImJWYWx1ZUhlbHBFeGlzdHMiLCJfZ2V0RGlzcGxheU1vZGUiLCJiRGlzcGxheU1vZGUiLCJjb2x1bW5FZGl0TW9kZSIsImRpc3BsYXltb2RlIiwiX2luc2VydEFnZ3JlZ2F0aW9uIiwib1ZhbHVlSGVscCIsImFkZEl0ZW0iLCJzUGF0aCIsInNHcm91cElkIiwib1RhYmxlQ29udGV4dCIsIm9JbmZvIiwib1Byb3BlcnR5Q29udGV4dCIsImFWSFByb3BlcnRpZXMiLCJvUGFyYW1ldGVycyIsInNWYWx1ZUhlbHBUeXBlIiwib0NvbnRyb2wiLCJzRnJhZ21lbnROYW1lIiwicmVxdWVzdEdyb3VwSWQiLCJtZXNzYWdlIiwiZm5UZW1wbGF0ZUZyYWdtZW50Iiwib0luUHJvcGVydHlJbmZvIiwic1RhYmxlVHlwZUN1c3RvbURhdGEiLCJzT25DaGFuZ2VDdXN0b21EYXRhIiwic0NyZWF0aW9uTW9kZUN1c3RvbURhdGEiLCJhbGwiLCJhQ3VzdG9tRGF0YSIsIm9EaXNwbGF5TW9kZXMiLCJyZWFkT25seSIsInRhYmxlVHlwZSIsIm9uQ2hhbmdlIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImNvbGxlY3Rpb24iLCJjcmVhdGlvbk1vZGUiLCJzUHJvcGVydHlOYW1lIiwibVBhcmFtZXRlcnMiLCJpc1ZhbHVlSGVscFJlcXVpcmVkIiwiZG9lc1ZhbHVlSGVscEV4aXN0IiwiYVJlc3VsdHMiLCJnZXRDdXJyZW50UGFnZVZpZXciLCJnZXRGaWx0ZXJEZWxlZ2F0ZSIsIkZpbHRlckJhckRlbGVnYXRlIiwib1BhcmVudENvbnRyb2wiLCJnZXRUeXBlVXRpbCIsImZvcm1hdEdyb3VwSGVhZGVyIiwic1Byb3BlcnR5IiwibUZvcm1hdEluZm9zIiwib0Zvcm1hdEluZm8iLCJvYmoiLCJiRXh0ZXJuYWxGb3JtYXQiLCJiYXNlVHlwZSIsInNWYWx1ZSIsIlZhbHVlRm9ybWF0dGVyIiwiZm9ybWF0V2l0aEJyYWNrZXRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZURlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgZGVlcEV4dGVuZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXh0ZW5kXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgVmFsdWVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBFeGNlbEZvcm1hdCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FeGNlbEZvcm1hdEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyLCB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBUeXBlVXRpbCBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9UeXBlVXRpbFwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwsIHsgUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgRmlsdGVyQmFyRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgVGFibGVVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IFRhYmxlRGVsZWdhdGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENUYWJsZSwgZGVmYXVsdCBhcyBUYWJsZSB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuXG5jb25zdCBGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVkgPSBcInNhcF9mZV9UYWJsZURlbGVnYXRlX3Byb3BlcnR5SW5mb01hcFwiO1xudHlwZSBCaW5kaW5nSW5mbyA9IHtcblx0c3VzcGVuZGVkPzogYm9vbGVhbjtcblx0cGF0aD86IHN0cmluZztcblx0ZmlsdGVycz86IEZpbHRlcjtcblx0c2VhcmNoPzogc3RyaW5nO1xuXHRwYXJhbWV0ZXJzOiB7XG5cdFx0JHNlYXJjaDogc3RyaW5nO1xuXHR9O1xuXHRzb3J0ZXI/OiBTb3J0ZXJbXTtcbn07XG5jb25zdCBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IgPSBcIi9zZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yXCI7XG5jb25zdCBGaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5GaWx0ZXJSZXN0cmljdGlvbnM7XG5jb25zdCBTRUFSQ0hfSEFTX0JFRU5fRklSRUQgPSBcInNlYXJjaEZpcmVkXCI7XG5jb25zdCBDT0xVTU5fSEFTX0JFRU5fQURERUQgPSBcImNvbHVtbkFkZGVkXCI7XG5jb25zdCBQUkVWSU9VU19TT1JURVJTID0gXCJwcmV2aW91c1NvcnRlcnNcIjtcblxuZnVuY3Rpb24gX3NldENhY2hlZFByb3BlcnRpZXMob1RhYmxlOiBhbnksIGFGZXRjaGVkUHJvcGVydGllczogYW55LCBiVXNlQWRkaXRpb25hbFByb3BlcnRpZXM6IGFueSkge1xuXHQvLyBkbyBub3QgY2FjaGUgZHVyaW5nIHRlbXBsYXRpbmcsIGVsc2UgaXQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjYWNoZWQgdmlld1xuXHRpZiAob1RhYmxlIGluc3RhbmNlb2Ygd2luZG93LkVsZW1lbnQpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0Y29uc3Qga2V5ID0gYlVzZUFkZGl0aW9uYWxQcm9wZXJ0aWVzID8gYCR7RkVUQ0hFRF9QUk9QRVJUSUVTX0RBVEFfS0VZfV9hZGRgIDogRkVUQ0hFRF9QUk9QRVJUSUVTX0RBVEFfS0VZO1xuXHREZWxlZ2F0ZVV0aWwuc2V0Q3VzdG9tRGF0YShvVGFibGUsIGtleSwgYUZldGNoZWRQcm9wZXJ0aWVzKTtcbn1cbmZ1bmN0aW9uIF9nZXRDYWNoZWRQcm9wZXJ0aWVzKG9UYWJsZTogYW55LCBiVXNlQWRkaXRpb25hbFByb3BlcnRpZXM6IGFueSkge1xuXHQvLyBwcm9wZXJ0aWVzIGFyZSBub3QgY2FjaGVkIGR1cmluZyB0ZW1wbGF0aW5nXG5cdGlmIChvVGFibGUgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IGtleSA9IGJVc2VBZGRpdGlvbmFsUHJvcGVydGllcyA/IGAke0ZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWX1fYWRkYCA6IEZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWTtcblx0cmV0dXJuIERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwga2V5KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHNhcC51aS5tZGMuVGFibGUuXG4gKiA8aDM+PGI+Tm90ZTo8L2I+PC9oMz5cbiAqIFRoZSBjbGFzcyBpcyBleHBlcmltZW50YWwgYW5kIHRoZSBBUEkgYW5kIHRoZSBiZWhhdmlvciBhcmUgbm90IGZpbmFsaXplZC4gVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgZm9yIHByb2R1Y3RpdmUgdXNhZ2UuXG4gKlxuICogQGF1dGhvciBTQVAgU0VcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAc2luY2UgMS42OVxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVEZWxlZ2F0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuYXNzaWduKHt9LCBUYWJsZURlbGVnYXRlQmFzZSwge1xuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiBhIEZpZWxkR3JvdXAgY29sdW1uLlxuXHQgKiBUaGUgd2lkdGggb2YgdGhlIEZpZWxkR3JvdXAgaXMgdGhlIHdpZHRoIG9mIHRoZSB3aWRlc3QgcHJvcGVydHkgY29udGFpbmVkIGluIHRoZSBGaWVsZEdyb3VwIChpbmNsdWRpbmcgdGhlIGxhYmVsIGlmIHNob3dEYXRhRmllbGRzTGFiZWwgaXMgdHJ1ZSlcblx0ICogVGhlIHJlc3VsdCBvZiB0aGlzIGNhbGN1bGF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgdmlzdWFsU2V0dGluZ3Mud2lkdGhDYWxjdWxhdGlvbi5taW5XaWR0aCBwcm9wZXJ0eSwgd2hpY2ggaXMgdXNlZCBieSB0aGUgTURDdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvVGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEBwYXJhbSBvUHJvcGVydHkgQ3VycmVudCBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gYVByb3BlcnRpZXMgQXJyYXkgb2YgcHJvcGVydGllc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG5cdCAqL1xuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yRmllbGRHcm91cDogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9Qcm9wZXJ0eTogYW55LCBhUHJvcGVydGllczogYW55W10pIHtcblx0XHRpZiAob1Byb3BlcnR5Lm5hbWUuaW5kZXhPZihcIkRhdGFGaWVsZEZvckFubm90YXRpb246OkZpZWxkR3JvdXA6OlwiKSA9PT0gMCkge1xuXHRcdFx0Y29uc3Qgb0NvbHVtbiA9IG9UYWJsZS5nZXRDb2x1bW5zKCkuZmluZChmdW5jdGlvbiAob0NvbDogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvQ29sLmdldERhdGFQcm9wZXJ0eSgpID09PSBvUHJvcGVydHkubmFtZTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYlNob3dEYXRhRmllbGRzTGFiZWwgPSBvQ29sdW1uID8gb0NvbHVtbi5kYXRhKFwic2hvd0RhdGFGaWVsZHNMYWJlbFwiKSA9PT0gXCJ0cnVlXCIgOiBmYWxzZTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAob1RhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQob1Byb3BlcnR5Lm1ldGFkYXRhUGF0aC5yZXBsYWNlKC9ALiovLCBcIlwiKSkgYXMgQ29udGV4dDtcblx0XHRcdGNvbnN0IG9EYXRhRmllbGQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChvUHJvcGVydHkubWV0YWRhdGFQYXRoKTtcblx0XHRcdGNvbnN0IG9GaWVsZEdyb3VwOiBhbnkgPSBvRGF0YUZpZWxkLlRhcmdldCA/IG9Db250ZXh0LmdldE9iamVjdChvRGF0YUZpZWxkLlRhcmdldC4kQW5ub3RhdGlvblBhdGgpIDogbnVsbDtcblx0XHRcdGNvbnN0IGFGaWVsZFdpZHRoOiBhbnkgPSBbXTtcblx0XHRcdG9GaWVsZEdyb3VwLkRhdGEuZm9yRWFjaChmdW5jdGlvbiAob0RhdGE6IGFueSkge1xuXHRcdFx0XHRsZXQgb0RhdGFGaWVsZFdpZHRoOiBhbnk7XG5cdFx0XHRcdHN3aXRjaCAob0RhdGEuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdGJTaG93RGF0YUZpZWxkc0xhYmVsLFxuXHRcdFx0XHRcdFx0XHRhUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdFx0b0NvbnRleHRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRcdFx0XHRpZiAoYlNob3dEYXRhRmllbGRzTGFiZWwpIHtcblx0XHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkKG9EYXRhLCBiU2hvd0RhdGFGaWVsZHNMYWJlbCwgYVByb3BlcnRpZXMsIG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IHtcblx0XHRcdFx0XHRcdFx0bGFiZWxXaWR0aDogMCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlXaWR0aDogVGFibGVTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKG9EYXRhLkxhYmVsKVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9EYXRhRmllbGRXaWR0aCkge1xuXHRcdFx0XHRcdGFGaWVsZFdpZHRoLnB1c2gob0RhdGFGaWVsZFdpZHRoLmxhYmVsV2lkdGggKyBvRGF0YUZpZWxkV2lkdGgucHJvcGVydHlXaWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbldpZGVzdCA9IGFGaWVsZFdpZHRoLnJlZHVjZShmdW5jdGlvbiAoYWNjOiBhbnksIHZhbHVlOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KGFjYywgdmFsdWUpO1xuXHRcdFx0fSwgMCk7XG5cdFx0XHRvUHJvcGVydHkudmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKG9Qcm9wZXJ0eS52aXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBcnJhbmdlbWVudDogdHJ1ZSxcblx0XHRcdFx0XHRtaW5XaWR0aDogTWF0aC5jZWlsKG5XaWRlc3QpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwOiBmdW5jdGlvbiAob1RhYmxlOiBhbnksIG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0Y29uc3Qgb1RhYmxlQVBJID0gb1RhYmxlID8gb1RhYmxlLmdldFBhcmVudCgpIDogbnVsbDtcblx0XHRpZiAoIW9Qcm9wZXJ0eS5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1RhYmxlLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRpZiAob1Byb3BlcnR5Lm1ldGFkYXRhUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImEgYG1ldGFkYXRhUGF0aGAgcHJvcGVydHkgaXMgZXhwZWN0ZWQgd2hlbiBjb21wdXRpbmcgVmlzdWFsU2V0dGluZ3MgZm9yIHByb3BlcnR5IHdpdGggVmFsdWVIZWxwXCIpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb0RhdGFGaWVsZCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29Qcm9wZXJ0eS5tZXRhZGF0YVBhdGh9QGApO1xuXHRcdFx0aWYgKG9EYXRhRmllbGQgJiYgb0RhdGFGaWVsZFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0XCJdKSB7XG5cdFx0XHRcdG9Qcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQob1Byb3BlcnR5LnZpc3VhbFNldHRpbmdzLCB7XG5cdFx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdFx0Z2FwOiBvVGFibGVBUEkgJiYgb1RhYmxlQVBJLmdldFJlYWRPbmx5KCkgPyAwIDogNFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdF9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhVbml0OiBmdW5jdGlvbiAoXG5cdFx0b1RhYmxlOiBhbnksXG5cdFx0b1Byb3BlcnR5OiBhbnksXG5cdFx0b1VuaXQ6IHN0cmluZyxcblx0XHRvVW5pdFRleHQ6IHN0cmluZyxcblx0XHRvVGltZXpvbmVUZXh0OiBzdHJpbmdcblx0KSB7XG5cdFx0Y29uc3Qgb1RhYmxlQVBJID0gb1RhYmxlID8gb1RhYmxlLmdldFBhcmVudCgpIDogbnVsbDtcblx0XHQvLyB1cGRhdGUgZ2FwIGZvciBwcm9wZXJ0aWVzIHdpdGggc3RyaW5nIHVuaXRcblx0XHRjb25zdCBzVW5pdFRleHQgPSBvVW5pdFRleHQgfHwgb1RpbWV6b25lVGV4dDtcblx0XHRpZiAoc1VuaXRUZXh0KSB7XG5cdFx0XHRvUHJvcGVydHkudmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKG9Qcm9wZXJ0eS52aXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Z2FwOiBNYXRoLmNlaWwoVGFibGVTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKHNVbml0VGV4dCkpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob1VuaXQpIHtcblx0XHRcdG9Qcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQob1Byb3BlcnR5LnZpc3VhbFNldHRpbmdzLCB7XG5cdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHQvLyBGb3IgcHJvcGVydGllcyB3aXRoIHVuaXQsIGEgZ2FwIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHByb3Blcmx5IHJlbmRlciB0aGUgY29sdW1uIHdpZHRoIG9uIGVkaXQgbW9kZVxuXHRcdFx0XHRcdGdhcDogb1RhYmxlQVBJICYmIG9UYWJsZUFQSS5nZXRSZWFkT25seSgpID8gMCA6IDZcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdF9jb21wdXRlTGFiZWw6IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHlJbmZvLCBsYWJlbE1hcDogeyBbbGFiZWw6IHN0cmluZ106IFByb3BlcnR5SW5mb1tdIH0pIHtcblx0XHRpZiAocHJvcGVydHkubGFiZWwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsID0gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdO1xuXHRcdFx0aWYgKHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5sZW5ndGggPiAxICYmIHByb3BlcnR5LnBhdGg/LmluY2x1ZGVzKFwiL1wiKSAmJiBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzKSB7XG5cdFx0XHRcdHByb3BlcnR5LmxhYmVsID0gcHJvcGVydHkubGFiZWwgKyBcIiAoXCIgKyBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzLmpvaW4oXCIgLyBcIikgKyBcIilcIjtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzO1xuXHRcdH1cblx0fSxcblx0Ly9VcGRhdGUgVmlzdWFsU2V0dGluZyBmb3IgY29sdW1uV2lkdGggY2FsY3VsYXRpb24gYW5kIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0X3VwZGF0ZVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogUHJvcGVydHlJbmZvW10pIHtcblx0XHRjb25zdCBsYWJlbE1hcDogeyBbbGFiZWw6IHN0cmluZ106IFByb3BlcnR5SW5mb1tdIH0gPSB7fTtcblx0XHQvLyBDaGVjayBhdmFpbGFibGUgcDEzbiBtb2Rlc1xuXHRcdGNvbnN0IHAxM25Nb2RlID0gdGFibGUuZ2V0UDEzbk1vZGUoKTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eUluZm8pID0+IHtcblx0XHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0XHQvLyBPbmx5IGZvciBub24tY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluZGV4T2YoXCJTb3J0XCIpID4gLTEgJiYgcHJvcGVydHkuc29ydGFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmRleE9mKFwiRmlsdGVyXCIpID4gLTEgJiYgcHJvcGVydHkuZmlsdGVyYWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluZGV4T2YoXCJHcm91cFwiKSA+IC0xICYmIHByb3BlcnR5Lmdyb3VwYWJsZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdID1cblx0XHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSAhPT0gdW5kZWZpbmVkID8gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdLmNvbmNhdChbcHJvcGVydHldKSA6IFtwcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBhbnkpID0+IHtcblx0XHRcdHRoaXMuX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAodGFibGUsIHByb3BlcnR5LCBwcm9wZXJ0aWVzKTtcblx0XHRcdHRoaXMuX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFZhbHVlSGVscCh0YWJsZSwgcHJvcGVydHkpO1xuXHRcdFx0Ly8gYmNwOiAyMjcwMDAzNTc3XG5cdFx0XHQvLyBTb21lIGNvbHVtbnMgKGVnOiBjdXN0b20gY29sdW1ucykgaGF2ZSBubyB0eXBlQ29uZmlnIHByb3BlcnR5LlxuXHRcdFx0Ly8gaW5pdGlhbGl6aW5nIGl0IHByZXZlbnRzIGFuIGV4Y2VwdGlvbiB0aHJvd1xuXHRcdFx0cHJvcGVydHkudHlwZUNvbmZpZyA9IGRlZXBFeHRlbmQocHJvcGVydHkudHlwZUNvbmZpZywge30pO1xuXHRcdFx0dGhpcy5fY29tcHV0ZUxhYmVsKHByb3BlcnR5LCBsYWJlbE1hcCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdH0sXG5cblx0Z2V0Q29sdW1uc0ZvcjogZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0cmV0dXJuIG9UYWJsZS5nZXRQYXJlbnQoKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHR9LFxuXG5cdF9nZXRBZ2dyZWdhdGVkUHJvcGVydHlNYXA6IGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdHJldHVybiBvVGFibGUuZ2V0UGFyZW50KCkuZ2V0VGFibGVEZWZpbml0aW9uKCkuYWdncmVnYXRlcztcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZXhwb3J0IGNhcGFiaWxpdGllcyBmb3IgdGhlIGdpdmVuIHNhcC51aS5tZGMuVGFibGUgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBvVGFibGUgSW5zdGFuY2Ugb2YgdGhlIHRhYmxlXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBleHBvcnQgY2FwYWJpbGl0aWVzIG9mIHRoZSB0YWJsZSBpbnN0YW5jZVxuXHQgKi9cblx0ZmV0Y2hFeHBvcnRDYXBhYmlsaXRpZXM6IGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdGNvbnN0IG9DYXBhYmlsaXRpZXM6IGFueSA9IHsgXCJYTFNYXCI6IHt9IH07XG5cdFx0bGV0IG9Nb2RlbCE6IGFueTtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwob1RhYmxlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBhbnkpIHtcblx0XHRcdFx0b01vZGVsID0gbW9kZWw7XG5cdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TdXBwb3J0ZWRGb3JtYXRzXCIpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChhU3VwcG9ydGVkRm9ybWF0czogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3QgYUxvd2VyRm9ybWF0cyA9IChhU3VwcG9ydGVkRm9ybWF0cyB8fCBbXSkubWFwKChlbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChhTG93ZXJGb3JtYXRzLmluZGV4T2YoXCJhcHBsaWNhdGlvbi9wZGZcIikgPiAtMSkge1xuXHRcdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAY29tLnNhcC52b2NhYnVsYXJpZXMuUERGLnYxLkZlYXR1cmVzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9Bbm5vdGF0aW9uOiBhbnkpIHtcblx0XHRcdFx0aWYgKG9Bbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1tcIlBERlwiXSA9IE9iamVjdC5hc3NpZ24oe30sIG9Bbm5vdGF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgY29tcHV0aW5nIGV4cG9ydCBjYXBhYmlsaXRpZXM6ICR7ZXJyfWApO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIG9DYXBhYmlsaXRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogRmlsdGVyaW5nIG9uIDE6biBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgYW5kIG5hdmlnYXRpb25cblx0ICogcHJvcGVydGllcyBub3QgcGFydCBvZiB0aGUgTGluZUl0ZW0gYW5ub3RhdGlvbiBpcyBmb3JiaWRkZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWxcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBmaWx0ZXJpbmcgaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5OiBmdW5jdGlvbiAoY29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBtZXRhTW9kZWw6IGFueSwgdGFibGU6IFRhYmxlKSB7XG5cdFx0Y29uc3QgdGFibGVNZXRhUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcIm1ldGFQYXRoXCIpO1xuXHRcdGlmICghdGFibGVNZXRhUGF0aCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHQvLyBnZXQgdGhlIERhdGFNb2RlbE9iamVjdFBhdGggZm9yIHRoZSB0YWJsZVxuXHRcdGNvbnN0IHRhYmxlRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dCh0YWJsZU1ldGFQYXRoKSksXG5cdFx0XHQvLyBnZXQgYWxsIG5hdmlnYXRpb24gcHJvcGVydGllcyBsZWFkaW5nIHRvIHRoZSBjb2x1bW5cblx0XHRcdGNvbHVtbk5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGNvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgpKS5uYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRcdC8vIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHJlbGF0aXZlIHRvIHRoZSB0YWJsZSwgc28gYWxsIGJlZm9yZSBhbmQgaW5jbHVkaW5nIHRoZSB0YWJsZXMgdGFyZ2V0VHlwZSBjYW4gYmUgZmlsdGVyZWRcblx0XHRcdHRhYmxlVGFyZ2V0RW50aXR5SW5kZXggPSBjb2x1bW5OYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoXG5cdFx0XHRcdChwcm9wKSA9PiBwcm9wLnRhcmdldFR5cGU/Lm5hbWUgPT09IHRhYmxlRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLm5hbWVcblx0XHRcdCksXG5cdFx0XHRyZWxhdGl2ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gY29sdW1uTmF2aWdhdGlvblByb3BlcnRpZXMuc2xpY2UodGFibGVUYXJnZXRFbnRpdHlJbmRleCA+IDAgPyB0YWJsZVRhcmdldEVudGl0eUluZGV4IDogMCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdCFjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHxcblx0XHRcdChjb2x1bW5JbmZvLmlzUGFydE9mTGluZUl0ZW0gPT09IHRydWUgJiZcblx0XHRcdFx0IXJlbGF0aXZlTmF2aWdhdGlvblByb3BlcnRpZXMuc29tZShcblx0XHRcdFx0XHQobmF2aWdhdGlvblByb3BlcnR5KSA9PiBuYXZpZ2F0aW9uUHJvcGVydHkuX3R5cGUgPT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiBuYXZpZ2F0aW9uUHJvcGVydHkuaXNDb2xsZWN0aW9uXG5cdFx0XHRcdCkpXG5cdFx0KTtcblx0fSxcblxuXHRfZmV0Y2hQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBhbnksIG9Db2x1bW5JbmZvOiBhbnksIG9UYWJsZTogYW55LCBvQXBwQ29tcG9uZW50OiBhbnksIGJVc2VBZGRpdGlvbmFsUHJvcGVydGllczogYW55KSB7XG5cdFx0Y29uc3Qgc0Fic29sdXRlTmF2aWdhdGlvblBhdGggPSBvQ29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdG9EYXRhRmllbGQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCksXG5cdFx0XHRvTmF2aWdhdGlvbkNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoKSxcblx0XHRcdG9UeXBlQ29uZmlnID1cblx0XHRcdFx0b0NvbHVtbkluZm8udHlwZUNvbmZpZyAmJlxuXHRcdFx0XHRvQ29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSAmJlxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuaXNUeXBlRmlsdGVyYWJsZShvQ29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSlcblx0XHRcdFx0XHQ/IFR5cGVVdGlsLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdFx0XHRcdG9Db2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lLFxuXHRcdFx0XHRcdFx0XHRvQ29sdW1uSW5mby50eXBlQ29uZmlnLm9Gb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdFx0XHRvQ29sdW1uSW5mby50eXBlQ29uZmlnLm9Db25zdHJhaW50c1xuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDoge30sXG5cdFx0XHRiRmlsdGVyYWJsZSA9IENvbW1vbkhlbHBlci5pc1Byb3BlcnR5RmlsdGVyYWJsZShvQ29sdW1uSW5mby5yZWxhdGl2ZVBhdGgsIHsgY29udGV4dDogb05hdmlnYXRpb25Db250ZXh0IH0sIG9EYXRhRmllbGQpLFxuXHRcdFx0YkNvbXBsZXhUeXBlID0gb0NvbHVtbkluZm8udHlwZUNvbmZpZyAmJiBvQ29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZS5pbmRleE9mKFwiRWRtLlwiKSAhPT0gMCxcblx0XHRcdGJJc0FuYWx5dGljYWxUYWJsZSA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJlbmFibGVBbmFseXRpY3NcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0YUFnZ3JlZ2F0ZWRQcm9wZXJ0eU1hcFVuZmlsdGVyYWJsZSA9IGJJc0FuYWx5dGljYWxUYWJsZSA/IHRoaXMuX2dldEFnZ3JlZ2F0ZWRQcm9wZXJ0eU1hcChvVGFibGUpIDoge30sXG5cdFx0XHRvRXhwb3J0U2V0dGluZ3MgPSBvQ29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyB8fCBudWxsLFxuXHRcdFx0ZXhwb3J0Rm9ybWF0ID1cblx0XHRcdFx0b0NvbHVtbkluZm8udHlwZUNvbmZpZyAmJiBvQ29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZVxuXHRcdFx0XHRcdD8gdGhpcy5fZ2V0RXhwb3J0Rm9ybWF0KG9Db2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHNMYWJlbCA9IG9Db2x1bW5JbmZvLmlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5XG5cdFx0XHQ/IFJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRhcmdldFZhbHVlXCIpXG5cdFx0XHQ6IERlbGVnYXRlVXRpbC5nZXRMb2NhbGl6ZWRUZXh0KG9Db2x1bW5JbmZvLmxhYmVsLCBvQXBwQ29tcG9uZW50IHx8IG9UYWJsZSk7XG5cblx0XHRpZiAob0V4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHRpZiAoZXhwb3J0Rm9ybWF0ICYmICFvRXhwb3J0U2V0dGluZ3MudGltZXpvbmVQcm9wZXJ0eSkge1xuXHRcdFx0XHRvRXhwb3J0U2V0dGluZ3MuZm9ybWF0ID0gZXhwb3J0Rm9ybWF0O1xuXHRcdFx0fVxuXHRcdFx0Ly8gU2V0IHRoZSBleHBvcnRTZXR0aW5ncyB0ZW1wbGF0ZSBvbmx5IGlmIGl0IGV4aXN0cy5cblx0XHRcdGlmIChvRXhwb3J0U2V0dGluZ3MudGVtcGxhdGUpIHtcblx0XHRcdFx0b0V4cG9ydFNldHRpbmdzLnRlbXBsYXRlID0gb0NvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0V4cG9ydFNldHRpbmdzLnRpbWV6b25lUHJvcGVydHkgfHwgKG9FeHBvcnRTZXR0aW5ncy50eXBlID09PSBcIkRhdGVUaW1lXCIgJiYgIW9FeHBvcnRTZXR0aW5ncz8udGltZXpvbmUpKSB7XG5cdFx0XHRcdG9FeHBvcnRTZXR0aW5ncy51dGMgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBvUHJvcGVydHlJbmZvOiBhbnkgPSB7XG5cdFx0XHRuYW1lOiBvQ29sdW1uSW5mby5uYW1lLFxuXHRcdFx0bWV0YWRhdGFQYXRoOiBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdGdyb3VwTGFiZWw6IG9Db2x1bW5JbmZvLmdyb3VwTGFiZWwsXG5cdFx0XHRncm91cDogb0NvbHVtbkluZm8uZ3JvdXAsXG5cdFx0XHRsYWJlbDogc0xhYmVsLFxuXHRcdFx0dG9vbHRpcDogb0NvbHVtbkluZm8udG9vbHRpcCxcblx0XHRcdHR5cGVDb25maWc6IG9UeXBlQ29uZmlnLFxuXHRcdFx0dmlzaWJsZTogb0NvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiICYmICFiQ29tcGxleFR5cGUsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogb0V4cG9ydFNldHRpbmdzLFxuXHRcdFx0dW5pdDogb0NvbHVtbkluZm8udW5pdFxuXHRcdH07XG5cblx0XHQvLyBTZXQgdmlzdWFsU2V0dGluZ3Mgb25seSBpZiBpdCBleGlzdHNcblx0XHRpZiAob0NvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MgJiYgT2JqZWN0LmtleXMob0NvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdG9Qcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBvQ29sdW1uSW5mby52aXN1YWxTZXR0aW5ncztcblx0XHR9XG5cdFx0aWYgKGV4cG9ydEZvcm1hdCkge1xuXHRcdFx0Y29uc3Qgb1RhYmxlQVBJID0gb1RhYmxlID8gb1RhYmxlLmdldFBhcmVudCgpIDogbnVsbDtcblx0XHRcdC8vIEZvciBwcm9wZXJ0aWVzIHdpdGggZGF0ZS90aW1lL2RhdGVUaW1lIGRhdGEgdHlwZXMsIGEgZ2FwIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHByb3Blcmx5IHJlbmRlciB0aGUgY29sdW1uIHdpZHRoIG9uIGVkaXQgbW9kZVxuXHRcdFx0b1Byb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdC8vIGEgZ2FwIG9mIDEgaXMgc3RpbGwgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIHBhZGRpbmcgb2YgdGhlIGNlbGxcblx0XHRcdFx0XHQvLyBCQ1A6IDIxODA0MTM0MzFcblx0XHRcdFx0XHRnYXA6IG9UYWJsZUFQSSAmJiBvVGFibGVBUEkuZ2V0UmVhZE9ubHkoKSA/IDEgOiAxLjVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBNREMgZXhwZWN0cyAgJ3Byb3BlcnR5SW5mb3MnIG9ubHkgZm9yIGNvbXBsZXggcHJvcGVydGllcy5cblx0XHQvLyBBbiBlbXB0eSBhcnJheSB0aHJvd3MgdmFsaWRhdGlvbiBlcnJvciBhbmQgdW5kZWZpbmVkIHZhbHVlIGlzIHVuaGFuZGxlZC5cblx0XHRpZiAob0NvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAmJiBvQ29sdW1uSW5mby5wcm9wZXJ0eUluZm9zLmxlbmd0aCkge1xuXHRcdFx0b1Byb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gb0NvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHRcdC8vb25seSBpbiBjYXNlIG9mIGNvbXBsZXggcHJvcGVydGllcywgd3JhcCB0aGUgY2VsbCBjb250ZW50XHRvbiB0aGUgZXhjZWwgZXhwb3J0ZWQgZmlsZVxuXHRcdFx0aWYgKG9Db2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzPy53cmFwKSB7XG5cdFx0XHRcdG9Qcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3Mud3JhcCA9IG9Db2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLndyYXA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoYlVzZUFkZGl0aW9uYWxQcm9wZXJ0aWVzICYmIG9Db2x1bW5JbmZvLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zICYmIG9Db2x1bW5JbmZvLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zLmxlbmd0aCkge1xuXHRcdFx0XHRvUHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBvUHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MuY29uY2F0KG9Db2x1bW5JbmZvLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXHRcdFx0b1Byb3BlcnR5SW5mby5wYXRoID0gb0NvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0Ly8gVE9ETyB3aXRoIHRoZSBuZXcgY29tcGxleCBwcm9wZXJ0eSBpbmZvLCBhIGxvdCBvZiBcIkRlc2NyaXB0aW9uXCIgZmllbGRzIGFyZSBhZGRlZCBhcyBmaWx0ZXIvc29ydCBmaWVsZHNcblx0XHRcdG9Qcm9wZXJ0eUluZm8uc29ydGFibGUgPSBvQ29sdW1uSW5mby5zb3J0YWJsZTtcblx0XHRcdG9Qcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9XG5cdFx0XHRcdCFvQ29sdW1uSW5mby5pc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eSAmJlxuXHRcdFx0XHQhIWJGaWx0ZXJhYmxlICYmXG5cdFx0XHRcdHRoaXMuX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShvQ29sdW1uSW5mbywgb01ldGFNb2RlbCwgb1RhYmxlKSAmJlxuXHRcdFx0XHQvLyBUT0RPIGlnbm9yaW5nIGFsbCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBhbHNvIGF2YWlsYWJsZSBmb3IgYWRhcHRhdGlvbiBmb3Igbm93LCBidXQgcHJvcGVyIGNvbmNlcHQgcmVxdWlyZWRcblx0XHRcdFx0KCFiSXNBbmFseXRpY2FsVGFibGUgfHwgIWFBZ2dyZWdhdGVkUHJvcGVydHlNYXBVbmZpbHRlcmFibGVbb1Byb3BlcnR5SW5mby5uYW1lXSk7XG5cdFx0XHRvUHJvcGVydHlJbmZvLmtleSA9IG9Db2x1bW5JbmZvLmlzS2V5O1xuXHRcdFx0b1Byb3BlcnR5SW5mby5ncm91cGFibGUgPSBvQ29sdW1uSW5mby5pc0dyb3VwYWJsZTtcblx0XHRcdGlmIChvQ29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0Y29uc3Qgb0Rlc2NyaXB0aW9uQ29sdW1uID0gdGhpcy5nZXRDb2x1bW5zRm9yKG9UYWJsZSkuZmluZChmdW5jdGlvbiAob0NvbDogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db2wubmFtZSA9PT0gb0NvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50LnRleHRQcm9wZXJ0eTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChvRGVzY3JpcHRpb25Db2x1bW4pIHtcblx0XHRcdFx0XHRvUHJvcGVydHlJbmZvLm1vZGUgPSBvQ29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQubW9kZTtcblx0XHRcdFx0XHRvUHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHkgPSBvQ29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHRcdFx0b1Byb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5ID0gb0Rlc2NyaXB0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b1Byb3BlcnR5SW5mby50ZXh0ID0gb0NvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50ICYmIG9Db2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudC50ZXh0UHJvcGVydHk7XG5cdFx0XHRvUHJvcGVydHlJbmZvLmNhc2VTZW5zaXRpdmUgPSBvQ29sdW1uSW5mby5jYXNlU2Vuc2l0aXZlO1xuXHRcdFx0aWYgKG9Db2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMpIHtcblx0XHRcdFx0b1Byb3BlcnR5SW5mby5hZGRpdGlvbmFsTGFiZWxzID0gb0NvbHVtbkluZm8uYWRkaXRpb25hbExhYmVscy5tYXAoKGxhYmVsOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmdldExvY2FsaXplZFRleHQobGFiZWwsIG9BcHBDb21wb25lbnQgfHwgb1RhYmxlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdChcblx0XHRcdG9UYWJsZSxcblx0XHRcdG9Qcm9wZXJ0eUluZm8sXG5cdFx0XHRvQ29sdW1uSW5mby51bml0LFxuXHRcdFx0b0NvbHVtbkluZm8udW5pdFRleHQsXG5cdFx0XHRvQ29sdW1uSW5mby50aW1lem9uZVRleHRcblx0XHQpO1xuXG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG5cdH0sXG5cblx0X2ZldGNoQ3VzdG9tUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAob0NvbHVtbkluZm86IGFueSwgb1RhYmxlOiBhbnksIG9BcHBDb21wb25lbnQ6IGFueSkge1xuXHRcdGNvbnN0IHNMYWJlbCA9IERlbGVnYXRlVXRpbC5nZXRMb2NhbGl6ZWRUZXh0KG9Db2x1bW5JbmZvLmhlYWRlciwgb0FwcENvbXBvbmVudCB8fCBvVGFibGUpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRjb25zdCBvUHJvcGVydHlJbmZvOiBhbnkgPSB7XG5cdFx0XHRuYW1lOiBvQ29sdW1uSW5mby5uYW1lLFxuXHRcdFx0Z3JvdXBMYWJlbDogbnVsbCxcblx0XHRcdGdyb3VwOiBudWxsLFxuXHRcdFx0bGFiZWw6IHNMYWJlbCxcblx0XHRcdHR5cGU6IFwiRWRtLlN0cmluZ1wiLCAvLyBUQkRcblx0XHRcdHZpc2libGU6IG9Db2x1bW5JbmZvLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIixcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBvQ29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdHZpc3VhbFNldHRpbmdzOiBvQ29sdW1uSW5mby52aXN1YWxTZXR0aW5nc1xuXHRcdH07XG5cblx0XHQvLyBNREMgZXhwZWN0cyAncHJvcGVydHlJbmZvcycgb25seSBmb3IgY29tcGxleCBwcm9wZXJ0aWVzLlxuXHRcdC8vIEFuIGVtcHR5IGFycmF5IHRocm93cyB2YWxpZGF0aW9uIGVycm9yIGFuZCB1bmRlZmluZWQgdmFsdWUgaXMgdW5oYW5kbGVkLlxuXHRcdGlmIChvQ29sdW1uSW5mby5wcm9wZXJ0eUluZm9zICYmIG9Db2x1bW5JbmZvLnByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHRvUHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBvQ29sdW1uSW5mby5wcm9wZXJ0eUluZm9zO1xuXHRcdFx0Ly9vbmx5IGluIGNhc2Ugb2YgY29tcGxleCBwcm9wZXJ0aWVzLCB3cmFwIHRoZSBjZWxsIGNvbnRlbnQgb24gdGhlIGV4Y2VsIGV4cG9ydGVkIGZpbGVcblx0XHRcdG9Qcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0XHRcdHdyYXA6IG9Db2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLndyYXAsXG5cdFx0XHRcdHRlbXBsYXRlOiBvQ29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy50ZW1wbGF0ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXHRcdFx0b1Byb3BlcnR5SW5mby5wYXRoID0gb0NvbHVtbkluZm8ubmFtZTtcblx0XHRcdG9Qcm9wZXJ0eUluZm8uc29ydGFibGUgPSBmYWxzZTtcblx0XHRcdG9Qcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcblx0fSxcblx0X2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcjogZnVuY3Rpb24gKG9Db2x1bW5JbmZvOiBhbnkpIHtcblx0XHRyZXR1cm4gISEoXG5cdFx0XHQob0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyAmJiBvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zLmhhc0RyYWZ0SW5kaWNhdG9yKSB8fFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgpXG5cdFx0KTtcblx0fSxcblx0X3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWw6IGZ1bmN0aW9uIChfb1RhYmxlOiBhbnksIF9vQ29sdW1uSW5mbzogYW55KSB7XG5cdFx0Y29uc3QgYVZpc2libGVDb2x1bW5zID0gX29UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBfb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0Y29uc3Qgc0ludGVybmFsUGF0aCA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ICYmIG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAoYVZpc2libGVDb2x1bW5zICYmIG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGluZGV4IGluIGFWaXNpYmxlQ29sdW1ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dGhpcy5fYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yKF9vQ29sdW1uSW5mbykgJiZcblx0XHRcdFx0XHRfb0NvbHVtbkluZm8ubmFtZSA9PT0gYVZpc2libGVDb2x1bW5zW2luZGV4XS5nZXREYXRhUHJvcGVydHkoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAob0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUikgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgX29Db2x1bW5JbmZvLm5hbWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBmdW5jdGlvbiAoXG5cdFx0b1RhYmxlOiBhbnksXG5cdFx0c0VudGl0eVR5cGVQYXRoOiBhbnksXG5cdFx0b01ldGFNb2RlbDogYW55LFxuXHRcdG9BcHBDb21wb25lbnQ6IGFueSxcblx0XHRiVXNlQWRkaXRpb25hbFByb3BlcnRpZXM6IGFueVxuXHQpIHtcblx0XHQvLyB3aGVuIGZldGNoaW5nIHByb3BlcnRpZXMsIHRoaXMgYmluZGluZyBjb250ZXh0IGlzIG5lZWRlZCAtIHNvIGxldHMgY3JlYXRlIGl0IG9ubHkgb25jZSBhbmQgdXNlIGlmIGZvciBhbGwgcHJvcGVydGllcy9kYXRhLWZpZWxkcy9saW5lLWl0ZW1zXG5cdFx0Y29uc3Qgc0JpbmRpbmdQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChzRW50aXR5VHlwZVBhdGgpO1xuXHRcdGxldCBhRmV0Y2hlZFByb3BlcnRpZXM6IGFueVtdID0gW107XG5cdFx0Y29uc3Qgb0ZSID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKHNCaW5kaW5nUGF0aCwgb01ldGFNb2RlbCk7XG5cdFx0Y29uc3QgYU5vbkZpbHRlcmFibGVQcm9wcyA9IG9GUltGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFU107XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmdldENvbHVtbnNGb3Iob1RhYmxlKSlcblx0XHRcdC50aGVuKChhQ29sdW1uczogYW55KSA9PiB7XG5cdFx0XHRcdC8vIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIGRvZXMgbm90IHdvcmsgdmlhICdlbnRpdHlTZXQvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEnXG5cdFx0XHRcdGlmIChhQ29sdW1ucykge1xuXHRcdFx0XHRcdGxldCBvUHJvcGVydHlJbmZvO1xuXHRcdFx0XHRcdGFDb2x1bW5zLmZvckVhY2goKG9Db2x1bW5JbmZvOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWwob1RhYmxlLCBvQ29sdW1uSW5mbyk7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKG9Db2x1bW5JbmZvLnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdFx0XHRvUHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hQcm9wZXJ0eUluZm8oXG5cdFx0XHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdFx0b0NvbHVtbkluZm8sXG5cdFx0XHRcdFx0XHRcdFx0XHRvVGFibGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0YlVzZUFkZGl0aW9uYWxQcm9wZXJ0aWVzXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAob1Byb3BlcnR5SW5mbyAmJiBhTm9uRmlsdGVyYWJsZVByb3BzLmluZGV4T2Yob1Byb3BlcnR5SW5mby5uYW1lKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8ubWF4Q29uZGl0aW9ucyA9IERlbGVnYXRlVXRpbC5pc011bHRpVmFsdWUob1Byb3BlcnR5SW5mbykgPyAtMSA6IDE7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiU2xvdFwiOlxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiRGVmYXVsdFwiOlxuXHRcdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyhvQ29sdW1uSW5mbywgb1RhYmxlLCBvQXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBzd2l0Y2ggY2FzZSAke29Db2x1bW5JbmZvLnR5cGV9YCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChvUHJvcGVydHlJbmZvKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzID0gdGhpcy5fdXBkYXRlUHJvcGVydHlJbmZvKG9UYWJsZSwgYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHVwZGF0aW5nIGZldGNoZWQgcHJvcGVydGllczogJHtlcnJ9YCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0X2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBmdW5jdGlvbiAoXG5cdFx0b1RhYmxlOiBhbnksXG5cdFx0c0VudGl0eVR5cGVQYXRoOiBhbnksXG5cdFx0b01ldGFNb2RlbDogYW55LFxuXHRcdG9BcHBDb21wb25lbnQ/OiBhbnksXG5cdFx0YlVzZUFkZGl0aW9uYWxQcm9wZXJ0aWVzPzogYW55XG5cdCkge1xuXHRcdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllcyA9IF9nZXRDYWNoZWRQcm9wZXJ0aWVzKG9UYWJsZSwgYlVzZUFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcblxuXHRcdGlmIChhRmV0Y2hlZFByb3BlcnRpZXMpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2ZldGNoUHJvcGVydGllc0ZvckVudGl0eShvVGFibGUsIHNFbnRpdHlUeXBlUGF0aCwgb01ldGFNb2RlbCwgb0FwcENvbXBvbmVudCwgYlVzZUFkZGl0aW9uYWxQcm9wZXJ0aWVzKS50aGVuKGZ1bmN0aW9uIChcblx0XHRcdGFTdWJGZXRjaGVkUHJvcGVydGllczogYW55W11cblx0XHQpIHtcblx0XHRcdF9zZXRDYWNoZWRQcm9wZXJ0aWVzKG9UYWJsZSwgYVN1YkZldGNoZWRQcm9wZXJ0aWVzLCBiVXNlQWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0cmV0dXJuIGFTdWJGZXRjaGVkUHJvcGVydGllcztcblx0XHR9KTtcblx0fSxcblxuXHRfc2V0VGFibGVOb0RhdGFUZXh0OiBmdW5jdGlvbiAob1RhYmxlOiBhbnksIG9CaW5kaW5nSW5mbzogYW55KSB7XG5cdFx0bGV0IHNOb0RhdGFLZXkgPSBcIlwiO1xuXHRcdGNvbnN0IG9UYWJsZUZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8ob1RhYmxlKSxcblx0XHRcdHN1ZmZpeFJlc291cmNlS2V5ID0gb0JpbmRpbmdJbmZvLnBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBvQmluZGluZ0luZm8ucGF0aC5zdWJzdHIoMSkgOiBvQmluZGluZ0luZm8ucGF0aDtcblxuXHRcdGNvbnN0IF9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAob1RhYmxlLmRhdGEoXCJoaWRkZW5GaWx0ZXJzXCIpIHx8IG9UYWJsZS5kYXRhKFwicXVpY2tGaWx0ZXJLZXlcIikpIHtcblx0XHRcdFx0cmV0dXJuIFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX01VTFRJX1ZJRVdcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3Qgc0ZpbHRlckFzc29jaWF0aW9uID0gb1RhYmxlLmdldEZpbHRlcigpO1xuXG5cdFx0aWYgKHNGaWx0ZXJBc3NvY2lhdGlvbiAmJiAhL0Jhc2ljU2VhcmNoJC8udGVzdChzRmlsdGVyQXNzb2NpYXRpb24pKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBhIEZpbHRlckJhciBpcyBhc3NvY2lhdGVkIHRvIHRoZSBUYWJsZSAoYmFzaWMgc2VhcmNoIG9uIHRvb2xCYXIgaXMgZXhjbHVkZWQpXG5cdFx0XHRpZiAob1RhYmxlRmlsdGVySW5mby5zZWFyY2ggfHwgKG9UYWJsZUZpbHRlckluZm8uZmlsdGVycyAmJiBvVGFibGVGaWx0ZXJJbmZvLmZpbHRlcnMubGVuZ3RoKSkge1xuXHRcdFx0XHQvLyBjaGVjayBpZiB0YWJsZSBoYXMgYW55IEZpbHRlcmJhciBmaWx0ZXJzIG9yIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRcdHNOb0RhdGFLZXkgPSBfZ2V0Tm9EYXRhVGV4dFdpdGhGaWx0ZXJzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzTm9EYXRhS2V5ID0gXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG9UYWJsZUZpbHRlckluZm8uc2VhcmNoIHx8IChvVGFibGVGaWx0ZXJJbmZvLmZpbHRlcnMgJiYgb1RhYmxlRmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCkpIHtcblx0XHRcdC8vY2hlY2sgaWYgdGFibGUgaGFzIGFueSBwZXJzb25hbGl6YXRpb24gZmlsdGVyc1xuXHRcdFx0c05vRGF0YUtleSA9IF9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c05vRGF0YUtleSA9IFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fRklMVEVSU19OT19EQVRBX1RFWFRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIG9UYWJsZVxuXHRcdFx0LmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIilcblx0XHRcdC5nZXRSZXNvdXJjZUJ1bmRsZSgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlOiBhbnkpIHtcblx0XHRcdFx0b1RhYmxlLnNldE5vRGF0YShDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChzTm9EYXRhS2V5LCBvUmVzb3VyY2VCdW5kbGUsIG51bGwsIHN1ZmZpeFJlc291cmNlS2V5KSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvcik7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRoYW5kbGVUYWJsZURhdGFSZWNlaXZlZDogZnVuY3Rpb24gKG9UYWJsZTogYW55LCBvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9CaW5kaW5nID0gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0XHRiRGF0YVJlY2VpdmVkQXR0YWNoZWQgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkQXR0YWNoZWRcIik7XG5cblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0ICYmICFiRGF0YVJlY2VpdmVkQXR0YWNoZWQpIHtcblx0XHRcdG9CaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFRhYmxlSGVscGVyLmhhbmRsZVRhYmxlRGVsZXRlRW5hYmxlbWVudEZvclNpZGVFZmZlY3RzKG9UYWJsZSwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0Ly8gUmVmcmVzaCB0aGUgc2VsZWN0ZWQgY29udGV4dHMgdG8gdHJpZ2dlciByZS1jYWxjdWxhdGlvbiBvZiBlbmFibGVkIHN0YXRlIG9mIGFjdGlvbnMuXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0XHRjb25zdCBhU2VsZWN0ZWRDb250ZXh0cyA9IG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UoXG5cdFx0XHRcdFx0Q29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdFx0Y29uc3Qgb1RhYmxlQVBJID0gb1RhYmxlID8gb1RhYmxlLmdldFBhcmVudCgpIDogbnVsbDtcblx0XHRcdFx0aWYgKG9UYWJsZUFQSSkge1xuXHRcdFx0XHRcdG9UYWJsZUFQSS5zZXRVcEVtcHR5Um93cyhvVGFibGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIsIHRydWUpO1xuXHRcdH1cblx0fSxcblxuXHRyZWJpbmQ6IGZ1bmN0aW9uIChvVGFibGU6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSBvVGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHRvVGFibGVBUEk/LnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGJJc1N1c3BlbmRlZCk7XG5cdFx0aWYgKCFiSXNTdXNwZW5kZWQpIHtcblx0XHRcdFRhYmxlVXRpbHMuY2xlYXJTZWxlY3Rpb24ob1RhYmxlKTtcblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnJlYmluZC5hcHBseSh0aGlzLCBbb1RhYmxlLCBvQmluZGluZ0luZm9dKTtcblx0XHRcdFRhYmxlVXRpbHMub25UYWJsZUJvdW5kKG9UYWJsZSk7XG5cdFx0XHR0aGlzLl9zZXRUYWJsZU5vRGF0YVRleHQob1RhYmxlLCBvQmluZGluZ0luZm8pO1xuXHRcdFx0cmV0dXJuIFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0LnRoZW4odGhpcy5oYW5kbGVUYWJsZURhdGFSZWNlaXZlZChvVGFibGUsIG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpKSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSByZWxldmFudCBtZXRhZGF0YSBmb3IgdGhlIHRhYmxlIGFuZCByZXR1cm5zIHByb3BlcnR5IGluZm8gYXJyYXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBvVGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHByb3BlcnR5IGluZm9cblx0ICovXG5cdGZldGNoUHJvcGVydGllczogZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKG9UYWJsZSkudGhlbigob01vZGVsOiBhbnkpID0+IHtcblx0XHRcdGlmICghb01vZGVsKSB7XG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KFxuXHRcdFx0XHRvVGFibGUsXG5cdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJlbnRpdHlUeXBlXCIpLFxuXHRcdFx0XHRvTW9kZWwuZ2V0TWV0YU1vZGVsKClcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0cHJlSW5pdDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSkge1xuXHRcdHJldHVybiBUYWJsZURlbGVnYXRlQmFzZS5wcmVJbml0LmFwcGx5KHRoaXMsIFt0YWJsZV0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBTZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvdyB0byBhdm9pZCBpdCBpbmhlcml0aW5nXG5cdFx0XHQgKiB0aGUgd3JvbmcgY29udGV4dCBhbmQgcmVxdWVzdGluZyB0aGUgdGFibGUgY29sdW1ucyBvbiB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogU2V0IHRoZSBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBmYXN0Q3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKGZhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRmYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyB1bmtub3duIGFzIENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gQ29yZS5ieUlkKHRhYmxlLmdldEZpbHRlcigpKSBhcyBDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3Py5nZXRWaWV3RGF0YSgpIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHZpZXdEYXRhPy5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRmaWx0ZXJCYXI/LmdldFBhcmVudCgpPy5hdHRhY2hFdmVudChcInNlYXJjaFwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVELCB0cnVlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9KTtcblx0fSxcblx0dXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uIChvVGFibGU6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnkpIHtcblx0XHRUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nSW5mby5hcHBseSh0aGlzLCBbb1RhYmxlLCBvQmluZGluZ0luZm9dKTtcblx0XHR0aGlzLl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvKG9UYWJsZSwgb0JpbmRpbmdJbmZvKTtcblx0XHRvQmluZGluZ0luZm8uZXZlbnRzLmRhdGFSZWNlaXZlZCA9IG9UYWJsZS5nZXRQYXJlbnQoKS5vbkludGVybmFsRGF0YVJlY2VpdmVkLmJpbmQob1RhYmxlLmdldFBhcmVudCgpKTtcblx0XHRvQmluZGluZ0luZm8uZXZlbnRzLmRhdGFSZXF1ZXN0ZWQgPSBvVGFibGUuZ2V0UGFyZW50KCkub25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQuYmluZChvVGFibGUuZ2V0UGFyZW50KCkpO1xuXHRcdHRoaXMuX3NldFRhYmxlTm9EYXRhVGV4dChvVGFibGUsIG9CaW5kaW5nSW5mbyk7XG5cdH0sXG5cblx0X21hbmFnZVNlbWFudGljVGFyZ2V0czogZnVuY3Rpb24gKG9NRENUYWJsZTogYW55KSB7XG5cdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvTURDVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGlmIChvUm93QmluZGluZykge1xuXHRcdFx0b1Jvd0JpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlcXVlc3RlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGNvbnN0IF9vVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob01EQ1RhYmxlKTtcblx0XHRcdFx0XHRpZiAoX29WaWV3KSB7XG5cdFx0XHRcdFx0XHRUYWJsZVV0aWxzLmdldFNlbWFudGljVGFyZ2V0c0Zyb21UYWJsZShfb1ZpZXcuZ2V0Q29udHJvbGxlcigpLCBvTURDVGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlQmluZGluZzogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSwgYmluZGluZ0luZm86IEJpbmRpbmdJbmZvLCBiaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZykge1xuXHRcdGNvbnN0IG9UYWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGJJc1N1c3BlbmRlZCA9IG9UYWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHRsZXQgbmVlZE1hbnVhbFJlZnJlc2ggPSBmYWxzZTtcblx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKTtcblx0XHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3QgbWFudWFsVXBkYXRlUHJvcGVydHlLZXkgPSBcInBlbmRpbmdNYW51YWxCaW5kaW5nVXBkYXRlXCI7XG5cdFx0XHRjb25zdCBwZW5kaW5nTWFudWFsVXBkYXRlID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkobWFudWFsVXBkYXRlUHJvcGVydHlLZXkpIGFzIGJvb2xlYW47XG5cdFx0XHRjb25zdCBuZXdTb3J0ZXJzID0gSlNPTi5zdHJpbmdpZnkoYmluZGluZ0luZm8uc29ydGVyID8/IFtdKTtcblxuXHRcdFx0aWYgKGJpbmRpbmcpIHtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIE1hbnVhbCByZWZyZXNoIGlmIGZpbHRlcnMgYXJlIG5vdCBjaGFuZ2VkIGJ5IGJpbmRpbmcucmVmcmVzaCgpIHNpbmNlIHVwZGF0aW5nIHRoZSBiaW5kaW5nSW5mb1xuXHRcdFx0XHQgKiBpcyBub3QgZW5vdWdoIHRvIHRyaWdnZXIgYSBiYXRjaCByZXF1ZXN0LlxuXHRcdFx0XHQgKiBSZW1vdmluZyBjb2x1bW5zIGNyZWF0ZXMgb25lIGJhdGNoIHJlcXVlc3QgdGhhdCB3YXMgbm90IGV4ZWN1dGVkIGJlZm9yZVxuXHRcdFx0XHQgKi9cblx0XHRcdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3Py5nZXRWaWV3RGF0YSgpIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBvbGRGaWx0ZXJzID0gYmluZGluZy5nZXRGaWx0ZXJzKFwiQXBwbGljYXRpb25cIik7XG5cdFx0XHRcdGNvbnN0IHByZXZpb3VzU29ydGVycyA9IGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KFBSRVZJT1VTX1NPUlRFUlMpID8/IFwiW11cIjtcblx0XHRcdFx0Y29uc3QgZmlsdGVyTm90Q2hhbmdlZCA9XG5cdFx0XHRcdFx0ZGVlcEVxdWFsKGJpbmRpbmdJbmZvLmZpbHRlcnMsIG9sZEZpbHRlcnNbMF0pICYmXG5cdFx0XHRcdFx0bmV3U29ydGVycyA9PT0gcHJldmlvdXNTb3J0ZXJzICYmXG5cdFx0XHRcdFx0YmluZGluZ0luZm8ucGF0aCA9PT0gYmluZGluZy5nZXRQYXRoKCkgJiYgLy8gVGhlIHBhdGggY2FuIGJlIGNoYW5nZWQgaW4gY2FzZSBvZiBhIHBhcmFtZXRyaXplZCBlbnRpdHlcblx0XHRcdFx0XHRiaW5kaW5nLmdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzKCkuJHNlYXJjaCA9PT0gYmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXHRcdFx0XHRjb25zdCBMUk11bHRpVmlld0VuYWJsZWQgPSAhIXZpZXdEYXRhPy52aWV3cztcblxuXHRcdFx0XHRuZWVkTWFudWFsUmVmcmVzaCA9XG5cdFx0XHRcdFx0ZmlsdGVyTm90Q2hhbmdlZCAmJlxuXHRcdFx0XHRcdChpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShTRUFSQ0hfSEFTX0JFRU5fRklSRUQpIHx8IC8vIGNoZWNrIGlmIHRoZSBzZWFyY2ggaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdFx0XHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQpIHx8IC8vIGNoZWNrIGlmIGEgY29sdW1uIGhhcyBiZWVuIGFkZGVkXG5cdFx0XHRcdFx0XHRMUk11bHRpVmlld0VuYWJsZWQpICYmIC8vIGlmIHRoZSBtdWx0aSB2aWV3IGlzIGVuYWJsZWQgdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIHJlZnJlc2hlZCBhcyB3ZSBkb24ndCBrbm93biBpZiB0aGUgY29udGVudCBvZiB0aGUgdGFibGUgaXMgb3V0ZGF0ZWQgZHVlIHRvIGFuIGFjdGlvbiBvbiBhbm90aGVyIHRhYmxlXG5cdFx0XHRcdFx0IXBlbmRpbmdNYW51YWxVcGRhdGUgJiZcblx0XHRcdFx0XHR2aWV3RGF0YT8uY29udmVydGVyVHlwZSA9PT0gXCJMaXN0UmVwb3J0XCI7XG5cdFx0XHR9XG5cdFx0XHRUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nLmFwcGx5KHRoaXMsIFt0YWJsZSwgYmluZGluZ0luZm8sIGJpbmRpbmddKTtcblx0XHRcdHRhYmxlLmZpcmVFdmVudChcImJpbmRpbmdVcGRhdGVkXCIpO1xuXHRcdFx0aWYgKG5lZWRNYW51YWxSZWZyZXNoICYmIHRhYmxlLmdldEZpbHRlcigpICYmIGJpbmRpbmcpIHtcblx0XHRcdFx0YmluZGluZ1xuXHRcdFx0XHRcdC5yZXF1ZXN0UmVmcmVzaChiaW5kaW5nLmdldEdyb3VwSWQoKSlcblx0XHRcdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdGFibGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkobWFudWFsVXBkYXRlUHJvcGVydHlLZXksIHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQsIGZhbHNlKTtcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFBSRVZJT1VTX1NPUlRFUlMsIG5ld1NvcnRlcnMpO1xuXHRcdFx0dGhpcy5fbWFuYWdlU2VtYW50aWNUYXJnZXRzKHRhYmxlKTtcblx0XHR9XG5cdFx0b1RhYmxlQVBJPy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBiSXNTdXNwZW5kZWQpO1xuXHR9LFxuXG5cdF9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGU6IGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdC8vIFdlIG5lZWQgdG8gZGVlcENsb25lIHRoZSBpbmZvIHdlIGdldCBmcm9tIHRoZSBjdXN0b20gZGF0YSwgb3RoZXJ3aXNlIHNvbWUgb2YgaXRzIHN1Ym9iamVjdHMgKGUuZy4gcGFyYW1ldGVycykgd2lsbFxuXHRcdC8vIGJlIHNoYXJlZCB3aXRoIG9CaW5kaW5nSW5mbyBhbmQgbW9kaWZpZWQgbGF0ZXIgKE9iamVjdC5hc3NpZ24gb25seSBkb2VzIGEgc2hhbGxvdyBjbG9uZSlcblx0XHRjb25zdCByb3dCaW5kaW5nSW5mbyA9IGRlZXBDbG9uZShEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwicm93c0JpbmRpbmdJbmZvXCIpKTtcblx0XHQvLyBpZiB0aGUgcm93QmluZGluZ0luZm8gaGFzIGEgJCRnZXRLZWVwQWxpdmVDb250ZXh0IHBhcmFtZXRlciB3ZSBuZWVkIHRvIGNoZWNrIGl0IGlzIHRoZSBvbmx5IFRhYmxlIHdpdGggc3VjaCBhXG5cdFx0Ly8gcGFyYW1ldGVyIGZvciB0aGUgY29sbGVjdGlvbk1ldGFQYXRoXG5cdFx0aWYgKHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKTtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBvVGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IGtlcHRBbGl2ZUxpc3RzID0gaW50ZXJuYWxNb2RlbC5nZXRPYmplY3QoXCIva2VwdEFsaXZlTGlzdHNcIikgfHwge307XG5cdFx0XHRpZiAoIWtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSkge1xuXHRcdFx0XHRrZXB0QWxpdmVMaXN0c1tjb2xsZWN0aW9uUGF0aF0gPSBvVGFibGUuZ2V0SWQoKTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9rZXB0QWxpdmVMaXN0c1wiLCBrZXB0QWxpdmVMaXN0cyk7XG5cdFx0XHR9IGVsc2UgaWYgKGtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSAhPT0gb1RhYmxlLmdldElkKCkpIHtcblx0XHRcdFx0ZGVsZXRlIHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcm93QmluZGluZ0luZm87XG5cdH0sXG5cdF9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvOiBmdW5jdGlvbiAob1RhYmxlOiBhbnksIG9CaW5kaW5nSW5mbzogYW55KSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0T2JqZWN0LmFzc2lnbihvQmluZGluZ0luZm8sIHRoaXMuX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZShvVGFibGUpKTtcblx0XHQvKipcblx0XHQgKiBCaW5kaW5nIGluZm8gbWlnaHQgYmUgc3VzcGVuZGVkIGF0IHRoZSBiZWdpbm5pbmcgd2hlbiB0aGUgZmlyc3QgYmluZFJvd3MgaXMgY2FsbGVkOlxuXHRcdCAqIFRvIGF2b2lkIGR1cGxpY2F0ZSByZXF1ZXN0cyBidXQgc3RpbGwgaGF2ZSBhIGJpbmRpbmcgdG8gY3JlYXRlIG5ldyBlbnRyaWVzLlx0XHRcdFx0ICpcblx0XHQgKiBBZnRlciB0aGUgaW5pdGlhbCBiaW5kaW5nIHN0ZXAsIGZvbGxvdyB1cCBiaW5kaW5ncyBzaG91bGQgbm90IGxvbmdlciBiZSBzdXNwZW5kZWQuXG5cdFx0ICovXG5cdFx0aWYgKG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5zdXNwZW5kZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gVGhlIHByZXZpb3VzbHkgYWRkZWQgaGFuZGxlciBmb3IgdGhlIGV2ZW50ICdkYXRhUmVjZWl2ZWQnIGlzIG5vdCBhbnltb3JlIHRoZXJlXG5cdFx0Ly8gc2luY2UgdGhlIGJpbmRpbmdJbmZvIGlzIHJlY3JlYXRlZCBmcm9tIHNjcmF0Y2ggc28gd2UgbmVlZCB0byBzZXQgdGhlIGZsYWcgdG8gZmFsc2UgaW4gb3JkZXJcblx0XHQvLyB0byBhZ2FpbiBhZGQgdGhlIGhhbmRsZXIgb24gdGhpcyBldmVudCBpZiBuZWVkZWRcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0bGV0IG9GaWx0ZXI7XG5cdFx0Y29uc3Qgb0ZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8ob1RhYmxlKTtcblx0XHQvLyBQcmVwYXJlIGJpbmRpbmcgaW5mbyB3aXRoIGZpbHRlci9zZWFyY2ggcGFyYW1ldGVyc1xuXHRcdGlmIChvRmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogb0ZpbHRlckluZm8uZmlsdGVycywgYW5kOiB0cnVlIH0pO1xuXHRcdH1cblx0XHRpZiAob0ZpbHRlckluZm8uYmluZGluZ1BhdGgpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5wYXRoID0gb0ZpbHRlckluZm8uYmluZGluZ1BhdGg7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0RhdGFTdGF0ZUluZGljYXRvciA9IG9UYWJsZS5nZXREYXRhU3RhdGVJbmRpY2F0b3IoKTtcblx0XHRpZiAob0RhdGFTdGF0ZUluZGljYXRvciAmJiBvRGF0YVN0YXRlSW5kaWNhdG9yLmlzRmlsdGVyaW5nKCkpIHtcblx0XHRcdC8vIEluY2x1ZGUgZmlsdGVycyBvbiBtZXNzYWdlU3RyaXBcblx0XHRcdGlmIChvQmluZGluZ0luZm8uZmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogb0JpbmRpbmdJbmZvLmZpbHRlcnMuY29uY2F0KG9GaWx0ZXJJbmZvLmZpbHRlcnMpLCBhbmQ6IHRydWUgfSk7XG5cdFx0XHRcdFRhYmxlVXRpbHMudXBkYXRlQmluZGluZ0luZm8ob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdFRhYmxlVXRpbHMudXBkYXRlQmluZGluZ0luZm8ob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0fVxuXHR9LFxuXG5cdF90ZW1wbGF0ZUN1c3RvbUNvbHVtbkZyYWdtZW50OiBmdW5jdGlvbiAoXG5cdFx0b0NvbHVtbkluZm86IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sXG5cdFx0b1ZpZXc6IGFueSxcblx0XHRvTW9kaWZpZXI6IGFueSxcblx0XHRzVGFibGVJZDogYW55XG5cdCkge1xuXHRcdGNvbnN0IG9Db2x1bW5Nb2RlbCA9IG5ldyBKU09OTW9kZWwob0NvbHVtbkluZm8pLFxuXHRcdFx0b1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdFx0aWQ6IHNUYWJsZUlkXG5cdFx0XHR9KSxcblx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XCJ0aGlzXCI6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcImNvbHVtblwiOiBvQ29sdW1uTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFwidGhpc1wiOiBvVGhpcyxcblx0XHRcdFx0XHRcImNvbHVtblwiOiBvQ29sdW1uTW9kZWxcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXG5cdFx0XHRcInNhcC5mZS5tYWNyb3MudGFibGUuQ3VzdG9tQ29sdW1uXCIsXG5cdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0XHR7IHZpZXc6IG9WaWV3IH0sXG5cdFx0XHRvTW9kaWZpZXJcblx0XHQpLnRoZW4oZnVuY3Rpb24gKG9JdGVtOiBhbnkpIHtcblx0XHRcdG9Db2x1bW5Nb2RlbC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gb0l0ZW07XG5cdFx0fSk7XG5cdH0sXG5cblx0X3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b0NvbHVtbkluZm86IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sXG5cdFx0b1ZpZXc6IGFueSxcblx0XHRvTW9kaWZpZXI6IGFueSxcblx0XHRzVGFibGVJZDogYW55XG5cdCkge1xuXHRcdGNvbnN0IG9Db2x1bW5Nb2RlbCA9IG5ldyBKU09OTW9kZWwob0NvbHVtbkluZm8pLFxuXHRcdFx0b1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdFx0aWQ6IHNUYWJsZUlkXG5cdFx0XHR9KSxcblx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XCJ0aGlzXCI6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcImNvbHVtblwiOiBvQ29sdW1uTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFwidGhpc1wiOiBvVGhpcyxcblx0XHRcdFx0XHRcImNvbHVtblwiOiBvQ29sdW1uTW9kZWxcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRjb25zdCBzbG90Q29sdW1uc1hNTCA9IGF3YWl0IERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcInNhcC5mZS5tYWNyb3MudGFibGUuU2xvdENvbHVtblwiLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIHtcblx0XHRcdGlzWE1MOiB0cnVlXG5cdFx0fSk7XG5cdFx0aWYgKCFzbG90Q29sdW1uc1hNTCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2xvdFhNTCA9IHNsb3RDb2x1bW5zWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2xvdFwiKVswXSxcblx0XHRcdG1kY1RhYmxlVGVtcGxhdGVYTUwgPSBzbG90Q29sdW1uc1hNTC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIm1kY1RhYmxlOnRlbXBsYXRlXCIpWzBdO1xuXHRcdG1kY1RhYmxlVGVtcGxhdGVYTUwucmVtb3ZlQ2hpbGQoc2xvdFhNTCk7XG5cdFx0aWYgKG9Db2x1bW5JbmZvLnRlbXBsYXRlKSB7XG5cdFx0XHRjb25zdCBvVGVtcGxhdGUgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKG9Db2x1bW5JbmZvLnRlbXBsYXRlLCBcInRleHQveG1sXCIpO1xuXHRcdFx0bWRjVGFibGVUZW1wbGF0ZVhNTC5hcHBlbmRDaGlsZChvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoYFBsZWFzZSBwcm92aWRlIGNvbnRlbnQgaW5zaWRlIHRoaXMgQnVpbGRpbmcgQmxvY2sgQ29sdW1uOiAke29Db2x1bW5JbmZvLmhlYWRlcn1gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGlmIChvTW9kaWZpZXIudGFyZ2V0cyAhPT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHJldHVybiBzbG90Q29sdW1uc1hNTDtcblx0XHR9XG5cdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0dHlwZTogXCJYTUxcIixcblx0XHRcdGRlZmluaXRpb246IHNsb3RDb2x1bW5zWE1MXG5cdFx0fSk7XG5cdH0sXG5cblx0X2dldEV4cG9ydEZvcm1hdDogZnVuY3Rpb24gKGRhdGFUeXBlOiBhbnkpIHtcblx0XHRzd2l0Y2ggKGRhdGFUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZWZyb21KU0RhdGUoKTtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZVRpbWVmcm9tSlNEYXRlVGltZSgpO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsVGltZWZyb21KU1RpbWUoKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRWSFJlbGV2YW50RmllbGRzOiBmdW5jdGlvbiAob01ldGFNb2RlbDogYW55LCBzTWV0YWRhdGFQYXRoOiBhbnksIHNCaW5kaW5nUGF0aD86IGFueSkge1xuXHRcdGxldCBhRmllbGRzOiBhbnlbXSA9IFtdLFxuXHRcdFx0b0RhdGFGaWVsZERhdGEgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzTWV0YWRhdGFQYXRoKTtcblxuXHRcdGlmIChvRGF0YUZpZWxkRGF0YS4ka2luZCAmJiBvRGF0YUZpZWxkRGF0YS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0XHRvRGF0YUZpZWxkRGF0YSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgKTtcblx0XHRcdHNNZXRhZGF0YVBhdGggPSBgJHtzTWV0YWRhdGFQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0YDtcblx0XHR9XG5cdFx0c3dpdGNoIChvRGF0YUZpZWxkRGF0YS4kVHlwZSkge1xuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIjpcblx0XHRcdFx0aWYgKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGhgKS5pbmNsdWRlcyhcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBcIikpIHtcblx0XHRcdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFgKS5mb3JFYWNoKChvVmFsdWU6IGFueSwgaUluZGV4OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGFGaWVsZHMgPSBhRmllbGRzLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0VkhSZWxldmFudEZpZWxkcyhvTWV0YU1vZGVsLCBgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvJHtpSW5kZXh9YClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCI6XG5cdFx0XHRcdGFGaWVsZHMucHVzaChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9WYWx1ZS8kUGF0aGApKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gcHJvcGVydHlcblx0XHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgdG8gbWFrZSBzdXJlIFZIIHJlbGV2YW50IGZpZWxkIHBhdGggZG8gbm90IGNvbnRhaW4gdGhlIGJpbmRpbmdwYXRoXG5cdFx0XHRcdGlmIChzTWV0YWRhdGFQYXRoLmluZGV4T2Yoc0JpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0XHRcdGFGaWVsZHMucHVzaChzTWV0YWRhdGFQYXRoLnN1YnN0cmluZyhzQmluZGluZ1BhdGgubGVuZ3RoICsgMSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFGaWVsZHMucHVzaChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgoc01ldGFkYXRhUGF0aCwgdHJ1ZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGFGaWVsZHM7XG5cdH0sXG5cdF9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbjogZnVuY3Rpb24gKG9UYWJsZTogYW55LCBhQ29sdW1uczogYW55LCBvQ29sdW1uSW5mbzogYW55KSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoIW9JbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1ucy5maWx0ZXIoKG9Db2x1bW46IGFueSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihvQ29sdW1uKTtcblx0XHR9KTtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBvVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGxldCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUsIHNWaXNpYmxlQ29sdW1uTmFtZSwgYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCwgc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3I7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFWaXNpYmxlQ29sdW1ucykge1xuXHRcdFx0c1Zpc2libGVDb2x1bW5OYW1lID0gYVZpc2libGVDb2x1bW5zW2ldLmdldERhdGFQcm9wZXJ0eSgpO1xuXHRcdFx0Zm9yIChjb25zdCBqIGluIGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yID0gYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3Jbal0ubmFtZTtcblx0XHRcdFx0aWYgKHNWaXNpYmxlQ29sdW1uTmFtZSA9PT0gc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0XHRiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0ID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0NvbHVtbkluZm8gJiYgb0NvbHVtbkluZm8ubmFtZSA9PT0gc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0XHRzQWRkVmlzaWJsZUNvbHVtbk5hbWUgPSBvQ29sdW1uSW5mby5uYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCkge1xuXHRcdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBzVmlzaWJsZUNvbHVtbk5hbWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0ICYmIHNBZGRWaXNpYmxlQ29sdW1uTmFtZSkge1xuXHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgc0FkZFZpc2libGVDb2x1bW5OYW1lKTtcblx0XHR9XG5cdH0sXG5cdHJlbW92ZUl0ZW06IGZ1bmN0aW9uIChvUHJvcGVydHlJbmZvTmFtZTogYW55LCBvVGFibGU6IGFueSwgbVByb3BlcnR5QmFnOiBhbnkpIHtcblx0XHRsZXQgZG9SZW1vdmVJdGVtID0gdHJ1ZTtcblx0XHRjb25zdCBvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eSA9IG9Qcm9wZXJ0eUluZm9OYW1lICYmIG9Nb2RpZmllci5nZXRQcm9wZXJ0eShvUHJvcGVydHlJbmZvTmFtZSwgXCJkYXRhUHJvcGVydHlcIik7XG5cdFx0aWYgKHNEYXRhUHJvcGVydHkgJiYgc0RhdGFQcm9wZXJ0eS5pbmRleE9mICYmIHNEYXRhUHJvcGVydHkuaW5kZXhPZihcIklubGluZVhNTFwiKSAhPT0gLTEpIHtcblx0XHRcdG9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvVGFibGUsIFwiZGVwZW5kZW50c1wiLCBvUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0XHRkb1JlbW92ZUl0ZW0gPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKG9UYWJsZS5pc0EgJiYgb01vZGlmaWVyLnRhcmdldHMgPT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHR0aGlzLl9zZXREcmFmdEluZGljYXRvclN0YXR1cyhvTW9kaWZpZXIsIG9UYWJsZSwgdGhpcy5nZXRDb2x1bW5zRm9yKG9UYWJsZSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvUmVtb3ZlSXRlbSk7XG5cdH0sXG5cdF9nZXRNZXRhTW9kZWw6IGZ1bmN0aW9uIChtUHJvcGVydHlCYWc6IGFueSkge1xuXHRcdHJldHVybiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0fSxcblx0X3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzOiBmdW5jdGlvbiAob01vZGlmaWVyOiBhbnksIG9UYWJsZTogYW55LCBhQ29sdW1uczogYW55LCBvQ29sdW1uSW5mbz86IGFueSkge1xuXHRcdGlmIChvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uKG9UYWJsZSwgYUNvbHVtbnMsIG9Db2x1bW5JbmZvKTtcblx0XHR9XG5cdH0sXG5cdF9nZXRHcm91cElkOiBmdW5jdGlvbiAoc1JldHJpZXZlZEdyb3VwSWQ6IGFueSkge1xuXHRcdHJldHVybiBzUmV0cmlldmVkR3JvdXBJZCB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdF9nZXREZXBlbmRlbnQ6IGZ1bmN0aW9uIChvRGVwZW5kZW50OiBhbnksIHNQcm9wZXJ0eUluZm9OYW1lOiBhbnksIHNEYXRhUHJvcGVydHk6IGFueSkge1xuXHRcdGlmIChzUHJvcGVydHlJbmZvTmFtZSA9PT0gc0RhdGFQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIG9EZXBlbmRlbnQ7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdF9mblRlbXBsYXRlVmFsdWVIZWxwOiBmdW5jdGlvbiAoZm5UZW1wbGF0ZVZhbHVlSGVscDogYW55LCBiVmFsdWVIZWxwUmVxdWlyZWQ6IGFueSwgYlZhbHVlSGVscEV4aXN0czogYW55KSB7XG5cdFx0aWYgKGJWYWx1ZUhlbHBSZXF1aXJlZCAmJiAhYlZhbHVlSGVscEV4aXN0cykge1xuXHRcdFx0cmV0dXJuIGZuVGVtcGxhdGVWYWx1ZUhlbHAoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlZhbHVlSGVscFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9LFxuXHRfZ2V0RGlzcGxheU1vZGU6IGZ1bmN0aW9uIChiRGlzcGxheU1vZGU6IGFueSkge1xuXHRcdGxldCBjb2x1bW5FZGl0TW9kZTtcblx0XHRpZiAoYkRpc3BsYXlNb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGJEaXNwbGF5TW9kZSA9IHR5cGVvZiBiRGlzcGxheU1vZGUgPT09IFwiYm9vbGVhblwiID8gYkRpc3BsYXlNb2RlIDogYkRpc3BsYXlNb2RlID09PSBcInRydWVcIjtcblx0XHRcdGNvbHVtbkVkaXRNb2RlID0gYkRpc3BsYXlNb2RlID8gXCJEaXNwbGF5XCIgOiBcIkVkaXRhYmxlXCI7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkaXNwbGF5bW9kZTogYkRpc3BsYXlNb2RlLFxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZTogY29sdW1uRWRpdE1vZGVcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRkaXNwbGF5bW9kZTogdW5kZWZpbmVkLFxuXHRcdFx0Y29sdW1uRWRpdE1vZGU6IHVuZGVmaW5lZFxuXHRcdH07XG5cdH0sXG5cdF9pbnNlcnRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKG9WYWx1ZUhlbHA6IGFueSwgb01vZGlmaWVyOiBhbnksIG9UYWJsZTogYW55KSB7XG5cdFx0aWYgKG9WYWx1ZUhlbHApIHtcblx0XHRcdHJldHVybiBvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1ZhbHVlSGVscCwgMCk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBJbnZva2VkIHdoZW4gYSBjb2x1bW4gaXMgYWRkZWQgdXNpbmcgdGhlIHRhYmxlIHBlcnNvbmFsaXphdGlvbiBkaWFsb2cuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlJbmZvTmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGNvbHVtbiBpcyBhZGRlZFxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiBwcm9wZXJ0eSBiYWcgZnJvbSB0aGUgZmxleGliaWxpdHkgQVBJXG5cdCAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgdGFibGUgY29sdW1uIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcblx0ICovXG5cdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLCBvVGFibGU6IGFueSwgbVByb3BlcnR5QmFnOiBhbnkpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fZ2V0TWV0YU1vZGVsKG1Qcm9wZXJ0eUJhZyksXG5cdFx0XHRvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXIsXG5cdFx0XHRzVGFibGVJZCA9IG9Nb2RpZmllci5nZXRJZChvVGFibGUpLFxuXHRcdFx0YUNvbHVtbnMgPSBvVGFibGUuaXNBID8gdGhpcy5nZXRDb2x1bW5zRm9yKG9UYWJsZSkgOiBudWxsO1xuXHRcdGlmICghYUNvbHVtbnMpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0NvbHVtbkluZm8gPSBhQ29sdW1ucy5maW5kKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdHJldHVybiBvQ29sdW1uLm5hbWUgPT09IHNQcm9wZXJ0eUluZm9OYW1lO1xuXHRcdH0pO1xuXHRcdGlmICghb0NvbHVtbkluZm8pIHtcblx0XHRcdExvZy5lcnJvcihgJHtzUHJvcGVydHlJbmZvTmFtZX0gbm90IGZvdW5kIHdoaWxlIGFkZGluZyBjb2x1bW5gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQsIHRydWUpO1xuXHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgb1RhYmxlLCBhQ29sdW1ucywgb0NvbHVtbkluZm8pO1xuXHRcdC8vIHJlbmRlciBjdXN0b20gY29sdW1uXG5cdFx0aWYgKG9Db2x1bW5JbmZvLnR5cGUgPT09IFwiRGVmYXVsdFwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdGVtcGxhdGVDdXN0b21Db2x1bW5GcmFnbWVudChvQ29sdW1uSW5mbywgbVByb3BlcnR5QmFnLnZpZXcsIG9Nb2RpZmllciwgc1RhYmxlSWQpO1xuXHRcdH1cblxuXHRcdGlmIChvQ29sdW1uSW5mby50eXBlID09PSBcIlNsb3RcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50KG9Db2x1bW5JbmZvLCBtUHJvcGVydHlCYWcudmlldywgb01vZGlmaWVyLCBzVGFibGVJZCk7XG5cdFx0fVxuXHRcdC8vIGZhbGwtYmFja1xuXHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRjb25zdCBzUGF0aDogc3RyaW5nID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcIm1ldGFQYXRoXCIsIG9Nb2RpZmllcik7XG5cdFx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoOiBzdHJpbmcgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwiZW50aXR5VHlwZVwiLCBvTW9kaWZpZXIpO1xuXHRcdGNvbnN0IHNSZXRyaWV2ZWRHcm91cElkID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcInJlcXVlc3RHcm91cElkXCIsIG9Nb2RpZmllcik7XG5cdFx0Y29uc3Qgc0dyb3VwSWQ6IHN0cmluZyA9IHRoaXMuX2dldEdyb3VwSWQoc1JldHJpZXZlZEdyb3VwSWQpO1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoKTtcblx0XHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBhd2FpdCB0aGlzLl9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShcblx0XHRcdG9UYWJsZSxcblx0XHRcdHNFbnRpdHlUeXBlUGF0aCxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50XG5cdFx0KTtcblx0XHRjb25zdCBvUHJvcGVydHlJbmZvID0gYUZldGNoZWRQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24gKG9JbmZvOiBhbnkpIHtcblx0XHRcdHJldHVybiBvSW5mby5uYW1lID09PSBzUHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG9Qcm9wZXJ0eUluZm8ubWV0YWRhdGFQYXRoKTtcblx0XHRjb25zdCBhVkhQcm9wZXJ0aWVzID0gdGhpcy5fZ2V0VkhSZWxldmFudEZpZWxkcyhvTWV0YU1vZGVsLCBvUHJvcGVydHlJbmZvLm1ldGFkYXRhUGF0aCwgc1BhdGgpO1xuXHRcdGNvbnN0IG9QYXJhbWV0ZXJzID0ge1xuXHRcdFx0c0JpbmRpbmdQYXRoOiBzUGF0aCxcblx0XHRcdHNWYWx1ZUhlbHBUeXBlOiBcIlRhYmxlVmFsdWVIZWxwXCIsXG5cdFx0XHRvQ29udHJvbDogb1RhYmxlLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdG9Nb2RpZmllcixcblx0XHRcdG9Qcm9wZXJ0eUluZm9cblx0XHR9O1xuXG5cdFx0Y29uc3QgZm5UZW1wbGF0ZVZhbHVlSGVscCA9IGFzeW5jIChzRnJhZ21lbnROYW1lOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0aWQ6IHNUYWJsZUlkLFxuXHRcdFx0XHRcdHJlcXVlc3RHcm91cElkOiBzR3JvdXBJZFxuXHRcdFx0XHR9KSxcblx0XHRcdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XCJ0aGlzXCI6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdFwiZGF0YUZpZWxkXCI6IG9Qcm9wZXJ0eUNvbnRleHRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XCJ0aGlzXCI6IG9UaGlzLFxuXHRcdFx0XHRcdFx0XCJkYXRhRmllbGRcIjogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgb1ZhbHVlSGVscCA9IGF3YWl0IERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIHt9LCBvTW9kaWZpZXIpO1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgdGhpcy5faW5zZXJ0QWdncmVnYXRpb24ob1ZhbHVlSGVscCwgb01vZGlmaWVyLCBvVGFibGUpO1xuXHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0Ly9XZSBhbHdheXMgcmVzb2x2ZSB0aGUgcHJvbWlzZSB0byBlbnN1cmUgdGhhdCB0aGUgYXBwIGRvZXMgbm90IGNyYXNoXG5cdFx0XHRcdExvZy5lcnJvcihgVmFsdWVIZWxwIG5vdCBsb2FkZWQgOiAke29FcnJvci5tZXNzYWdlfWApO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdG9UaGlzLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3QgZm5UZW1wbGF0ZUZyYWdtZW50ID0gKG9JblByb3BlcnR5SW5mbzogYW55LCBvVmlldzogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBzRnJhZ21lbnROYW1lID0gXCJzYXAuZmUubWFjcm9zLnRhYmxlLkNvbHVtblwiO1xuXG5cdFx0XHRsZXQgYkRpc3BsYXlNb2RlO1xuXHRcdFx0bGV0IHNUYWJsZVR5cGVDdXN0b21EYXRhO1xuXHRcdFx0bGV0IHNPbkNoYW5nZUN1c3RvbURhdGE7XG5cdFx0XHRsZXQgc0NyZWF0aW9uTW9kZUN1c3RvbURhdGE7XG5cblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChbXG5cdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwidGFibGVUeXBlXCIsIG9Nb2RpZmllciksXG5cdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvbkNoYW5nZVwiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwiY3JlYXRpb25Nb2RlXCIsIG9Nb2RpZmllcilcblx0XHRcdF0pLnRoZW4oKGFDdXN0b21EYXRhOiBhbnlbXSkgPT4ge1xuXHRcdFx0XHRiRGlzcGxheU1vZGUgPSBhQ3VzdG9tRGF0YVswXTtcblx0XHRcdFx0c1RhYmxlVHlwZUN1c3RvbURhdGEgPSBhQ3VzdG9tRGF0YVsxXTtcblx0XHRcdFx0c09uQ2hhbmdlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzJdO1xuXHRcdFx0XHRzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzNdO1xuXHRcdFx0XHQvLyBSZWFkIE9ubHkgYW5kIENvbHVtbiBFZGl0IE1vZGUgY2FuIGJvdGggaGF2ZSB0aHJlZSBzdGF0ZVxuXHRcdFx0XHQvLyBVbmRlZmluZWQgbWVhbnMgdGhhdCB0aGUgZnJhbWV3b3JrIGRlY2lkZXMgd2hhdCB0byBkb1xuXHRcdFx0XHQvLyBUcnVlIC8gRGlzcGxheSBtZWFucyBhbHdheXMgcmVhZCBvbmx5XG5cdFx0XHRcdC8vIEZhbHNlIC8gRWRpdGFibGUgbWVhbnMgZWRpdGFibGUgYnV0IHdoaWxlIHN0aWxsIHJlc3BlY3RpbmcgdGhlIGxvdyBsZXZlbCBwcmluY2lwbGUgKGltbXV0YWJsZSBwcm9wZXJ0eSB3aWxsIG5vdCBiZSBlZGl0YWJsZSlcblx0XHRcdFx0Y29uc3Qgb0Rpc3BsYXlNb2RlcyA9IHRoaXMuX2dldERpc3BsYXlNb2RlKGJEaXNwbGF5TW9kZSk7XG5cdFx0XHRcdGJEaXNwbGF5TW9kZSA9IG9EaXNwbGF5TW9kZXMuZGlzcGxheW1vZGU7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkVkaXRNb2RlID0gb0Rpc3BsYXlNb2Rlcy5jb2x1bW5FZGl0TW9kZTtcblxuXHRcdFx0XHRjb25zdCBvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0XHRcdFx0cmVhZE9ubHk6IGJEaXNwbGF5TW9kZSxcblx0XHRcdFx0XHRcdGNvbHVtbkVkaXRNb2RlOiBjb2x1bW5FZGl0TW9kZSxcblx0XHRcdFx0XHRcdHRhYmxlVHlwZTogc1RhYmxlVHlwZUN1c3RvbURhdGEsXG5cdFx0XHRcdFx0XHRvbkNoYW5nZTogc09uQ2hhbmdlQ3VzdG9tRGF0YSxcblx0XHRcdFx0XHRcdGlkOiBzVGFibGVJZCxcblx0XHRcdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHNQcm9wZXJ0eUluZm9OYW1lLFxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mbzogb0NvbHVtbkluZm8sXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiB7XG5cdFx0XHRcdFx0XHRcdHNQYXRoOiBzUGF0aCxcblx0XHRcdFx0XHRcdFx0b01vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlOiBzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YVxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRcImVudGl0eVNldFwiOiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcImNvbGxlY3Rpb25cIjogb1RhYmxlQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XCJkYXRhRmllbGRcIjogb1Byb3BlcnR5Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0XCJ0aGlzXCI6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0XCJjb2x1bW5cIjogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvY29sdW1uSW5mb1wiKVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHRcInRoaXNcIjogb1RoaXMsXG5cdFx0XHRcdFx0XHRcdFwiZW50aXR5U2V0XCI6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFwiY29sbGVjdGlvblwiOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcImRhdGFGaWVsZFwiOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFwiY29sdW1uXCI6IG9UaGlzXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgeyB2aWV3OiBvVmlldyB9LCBvTW9kaWZpZXIpLmZpbmFsbHkoXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0b1RoaXMuZGVzdHJveSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdGFWSFByb3BlcnRpZXMubWFwKGFzeW5jIChzUHJvcGVydHlOYW1lOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3QgbVBhcmFtZXRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvUGFyYW1ldGVycywgeyBzUHJvcGVydHlOYW1lOiBzUHJvcGVydHlOYW1lIH0pO1xuXG5cdFx0XHRcdGNvbnN0IGFSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHRcdERlbGVnYXRlVXRpbC5pc1ZhbHVlSGVscFJlcXVpcmVkKG1QYXJhbWV0ZXJzKSxcblx0XHRcdFx0XHREZWxlZ2F0ZVV0aWwuZG9lc1ZhbHVlSGVscEV4aXN0KG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHRdKTtcblxuXHRcdFx0XHRjb25zdCBiVmFsdWVIZWxwUmVxdWlyZWQgPSBhUmVzdWx0c1swXSxcblx0XHRcdFx0XHRiVmFsdWVIZWxwRXhpc3RzID0gYVJlc3VsdHNbMV07XG5cdFx0XHRcdHJldHVybiB0aGlzLl9mblRlbXBsYXRlVmFsdWVIZWxwKGZuVGVtcGxhdGVWYWx1ZUhlbHAsIGJWYWx1ZUhlbHBSZXF1aXJlZCwgYlZhbHVlSGVscEV4aXN0cyk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0Ly8gSWYgdmlldyBpcyBub3QgcHJvdmlkZWQgdHJ5IHRvIGdldCBpdCBieSBhY2Nlc3NpbmcgdG8gdGhlIHBhcmVudGFsIGhpZXJhcmNoeVxuXHRcdC8vIElmIGl0IGRvZXNuJ3Qgd29yayAodGFibGUgaW50byBhbiB1bmF0dGFjaGVkIE9QIHNlY3Rpb24pIGdldCB0aGUgdmlldyB2aWEgdGhlIEFwcENvbXBvbmVudFxuXHRcdGNvbnN0IHZpZXcgPVxuXHRcdFx0bVByb3BlcnR5QmFnLnZpZXcgfHxcblx0XHRcdENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob1RhYmxlKSB8fFxuXHRcdFx0KG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgPyBDb21tb25VdGlscy5nZXRDdXJyZW50UGFnZVZpZXcobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCkgOiB1bmRlZmluZWQpO1xuXHRcdHJldHVybiBmblRlbXBsYXRlRnJhZ21lbnQob1Byb3BlcnR5SW5mbywgdmlldyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFByb3ZpZGUgdGhlIFRhYmxlJ3MgZmlsdGVyIGRlbGVnYXRlIHRvIHByb3ZpZGUgYmFzaWMgZmlsdGVyIGZ1bmN0aW9uYWxpdHkgc3VjaCBhcyBhZGRpbmcgRmlsdGVyRmllbGRzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBPYmplY3QgZm9yIHRoZSBUYWJsZXMgZmlsdGVyIHBlcnNvbmFsaXphdGlvbi5cblx0ICovXG5cdGdldEZpbHRlckRlbGVnYXRlOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIEZpbHRlckJhckRlbGVnYXRlLCB7XG5cdFx0XHRhZGRJdGVtOiBmdW5jdGlvbiAoc1Byb3BlcnR5SW5mb05hbWU6IGFueSwgb1BhcmVudENvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRpZiAoc1Byb3BlcnR5SW5mb05hbWUuaW5kZXhPZihcIlByb3BlcnR5OjpcIikgPT09IDApIHtcblx0XHRcdFx0XHQvLyBDb3JyZWN0IHRoZSBuYW1lIG9mIGNvbXBsZXggcHJvcGVydHkgaW5mbyByZWZlcmVuY2VzLlxuXHRcdFx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIEZpbHRlckJhckRlbGVnYXRlLmFkZEl0ZW0oc1Byb3BlcnR5SW5mb05hbWUsIG9QYXJlbnRDb250cm9sKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgVHlwZVV0aWwgYXR0YWNoZWQgdG8gdGhpcyBkZWxlZ2F0ZS5cblx0ICpcblx0ICogQHJldHVybnMgQW55IGluc3RhbmNlIG9mIFR5cGVVdGlsXG5cdCAqL1xuXHRnZXRUeXBlVXRpbDogZnVuY3Rpb24gKC8qb1BheWxvYWQ6IG9iamVjdCovKSB7XG5cdFx0cmV0dXJuIFR5cGVVdGlsO1xuXHR9LFxuXG5cdGZvcm1hdEdyb3VwSGVhZGVyKG9UYWJsZTogYW55LCBvQ29udGV4dDogYW55LCBzUHJvcGVydHk6IGFueSkge1xuXHRcdGNvbnN0IG1Gb3JtYXRJbmZvcyA9IF9nZXRDYWNoZWRQcm9wZXJ0aWVzKG9UYWJsZSwgbnVsbCksXG5cdFx0XHRvRm9ybWF0SW5mbyA9XG5cdFx0XHRcdG1Gb3JtYXRJbmZvcyAmJlxuXHRcdFx0XHRtRm9ybWF0SW5mb3MuZmlsdGVyKChvYmo6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBvYmoubmFtZSA9PT0gc1Byb3BlcnR5O1xuXHRcdFx0XHR9KVswXSxcblx0XHRcdC8qRm9yIGEgRGF0ZSBvciBEYXRlVGltZSBwcm9wZXJ0eSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIGluIGV4dGVybmFsIGZvcm1hdCB1c2luZyBhIFVJNSB0eXBlIGZvciB0aGVcblx0ICAgICAgICBnaXZlbiBwcm9wZXJ0eSBwYXRoIHRoYXQgZm9ybWF0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSdzIEVETSB0eXBlIGFuZCBjb25zdHJhaW50cyovXG5cdFx0XHRiRXh0ZXJuYWxGb3JtYXQgPSBvRm9ybWF0SW5mbz8udHlwZUNvbmZpZz8uYmFzZVR5cGUgPT09IFwiRGF0ZVRpbWVcIiB8fCBvRm9ybWF0SW5mbz8udHlwZUNvbmZpZz8uYmFzZVR5cGUgPT09IFwiRGF0ZVwiO1xuXHRcdGxldCBzVmFsdWU7XG5cdFx0aWYgKG9Gb3JtYXRJbmZvICYmIG9Gb3JtYXRJbmZvLm1vZGUpIHtcblx0XHRcdHN3aXRjaCAob0Zvcm1hdEluZm8ubW9kZSkge1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRzVmFsdWUgPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShvRm9ybWF0SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBiRXh0ZXJuYWxGb3JtYXQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0c1ZhbHVlID0gVmFsdWVGb3JtYXR0ZXIuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkob0Zvcm1hdEluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSwgYkV4dGVybmFsRm9ybWF0KSxcblx0XHRcdFx0XHRcdG9Db250ZXh0LmdldFByb3BlcnR5KG9Gb3JtYXRJbmZvLnZhbHVlUHJvcGVydHksIGJFeHRlcm5hbEZvcm1hdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0c1ZhbHVlID0gVmFsdWVGb3JtYXR0ZXIuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkob0Zvcm1hdEluZm8udmFsdWVQcm9wZXJ0eSwgYkV4dGVybmFsRm9ybWF0KSxcblx0XHRcdFx0XHRcdG9Db250ZXh0LmdldFByb3BlcnR5KG9Gb3JtYXRJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGJFeHRlcm5hbEZvcm1hdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVmFsdWUgPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShvRm9ybWF0SW5mby5wYXRoLCBiRXh0ZXJuYWxGb3JtYXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW29Gb3JtYXRJbmZvLmxhYmVsLCBzVmFsdWVdKTtcblx0fVxufSk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQUksRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQUk7TUFDSCxJQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBTUcsQ0FBQyxFQUFFO01BQ1YsT0FBT0YsT0FBTyxDQUFDRSxDQUFDLENBQUM7SUFDbEI7SUFDQSxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBSSxFQUFFO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFSCxPQUFPLENBQUM7SUFDcEM7SUFDQSxPQUFPQyxNQUFNO0VBQ2Q7RUFHTywwQkFBMEJGLElBQUksRUFBRUssU0FBUyxFQUFFO0lBQ2pELElBQUk7TUFDSCxJQUFJSCxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBT0csQ0FBQyxFQUFFO01BQ1gsT0FBT0UsU0FBUyxDQUFDLElBQUksRUFBRUYsQ0FBQyxDQUFDO0lBQzFCO0lBQ0EsSUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQUksRUFBRTtNQUMxQixPQUFPRixNQUFNLENBQUNFLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFRCxTQUFTLENBQUNDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFD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
|
|
@@ -335,6 +335,9 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
335
335
|
if (oExportSettings.template) {
|
|
336
336
|
oExportSettings.template = oColumnInfo.exportSettings.template;
|
|
337
337
|
}
|
|
338
|
+
if (oExportSettings.timezoneProperty || (oExportSettings.type === "DateTime" && !oExportSettings?.timezone)) {
|
|
339
|
+
oExportSettings.utc = false;
|
|
340
|
+
}
|
|
338
341
|
}
|
|
339
342
|
|
|
340
343
|
const oPropertyInfo: any = {
|