@magic-xpa/utils 4.800.0-dev480.22 → 4.800.0-dev480.220
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/bundles/magic-xpa-utils.umd.js +72 -1222
- package/bundles/magic-xpa-utils.umd.js.map +1 -1
- package/bundles/magic-xpa-utils.umd.min.js +1 -1
- package/bundles/magic-xpa-utils.umd.min.js.map +1 -1
- package/esm2015/index.js +1 -1
- package/esm2015/magic-xpa-utils.js +1 -4
- package/esm2015/src/Base64.js +1 -46
- package/esm2015/src/ChoiceUtils.js +1 -13
- package/esm2015/src/Constants.js +2 -14
- package/esm2015/src/DateTimeUtils.js +1 -2
- package/esm2015/src/DateUtil.js +1 -13
- package/esm2015/src/InternalInterface.js +4 -8
- package/esm2015/src/JSON_Utils.js +1 -1
- package/esm2015/src/Logger.js +2 -81
- package/esm2015/src/MagicConstants.js +1 -1
- package/esm2015/src/Misc.js +1 -60
- package/esm2015/src/MsgInterface.js +1 -1
- package/esm2015/src/PICInterface.js +20 -31
- package/esm2015/src/PlatformUtils.js +2 -2
- package/esm2015/src/Queue.js +1 -9
- package/esm2015/src/Randomizer.js +1 -1
- package/esm2015/src/RequestInfo.js +1 -4
- package/esm2015/src/Rtf.js +15 -199
- package/esm2015/src/StorageAttribute.js +1 -33
- package/esm2015/src/StrUtil.js +0 -0
- package/esm2015/src/SyncExecutionHelper.js +1 -16
- package/esm2015/src/UtilDateJpn.js +9 -89
- package/esm2015/src/UtilImeJpn.js +3 -32
- package/esm2015/src/UtilStrByteMode.js +15 -288
- package/esm2015/src/XMLConstants.js +1 -12
- package/esm2015/src/Xml/XmlParser.js +3 -100
- package/esm2015/src/enums.js +1 -1
- package/fesm2015/magic-xpa-utils.js +72 -1224
- package/fesm2015/magic-xpa-utils.js.map +1 -1
- package/magic-xpa-utils.d.ts +0 -3
- package/package.json +2 -2
- package/src/InternalInterface.d.ts +1 -1
- package/src/StrUtil.d.ts +0 -1
|
@@ -17,12 +17,9 @@ XMLConstants.MG_TAG_OPEN = XMLConstants.TAG_OPEN + XMLConstants.MG_TAG_XML + " "
|
|
|
17
17
|
XMLConstants.MG_TAG_TASK = "task";
|
|
18
18
|
XMLConstants.MG_TAG_TASK_END = "/task";
|
|
19
19
|
XMLConstants.MG_TAG_RECOMPUTE = "recompute";
|
|
20
|
-
//TODO: this class contains the constants which are used for XML parsing.
|
|
21
|
-
//Check if we can move it to Util.dll
|
|
22
20
|
XMLConstants.MG_ATTR_VB_VIEW_ROWIDX = "db_view_rowidx";
|
|
23
21
|
XMLConstants.MG_ATTR_CONTROL_ISN = "controlIsn";
|
|
24
22
|
XMLConstants.MG_HOR_ALIGMENT_IS_INHERITED = "horizontalAlignmentIsFromSystemDefault";
|
|
25
|
-
// MainHeaders
|
|
26
23
|
XMLConstants.MAX_PATH = 260;
|
|
27
24
|
XMLConstants.FILE_NAME_SIZE = XMLConstants.MAX_PATH + 1;
|
|
28
25
|
XMLConstants.CDATA_START = "<![CDATA[";
|
|
@@ -108,13 +105,11 @@ XMLConstants.MG_ATTR_ISSPECIFIC = "isSpecific";
|
|
|
108
105
|
XMLConstants.MG_ATTR_IS_GUI_THREAD_EXECUTION = "isGuiThreadExecution";
|
|
109
106
|
XMLConstants.MG_TAG_TASKDEFINITIONID_ENTRY = "taskDefinitionId";
|
|
110
107
|
XMLConstants.MG_TAG_OBJECT_REFERENCE = "objectRef";
|
|
111
|
-
//Help types
|
|
112
108
|
XMLConstants.MG_ATTR_HLP_TYP_TOOLTIP = "T";
|
|
113
109
|
XMLConstants.MG_ATTR_HLP_TYP_PROMPT = "P";
|
|
114
110
|
XMLConstants.MG_ATTR_HLP_TYP_URL = "U";
|
|
115
111
|
XMLConstants.MG_ATTR_HLP_TYP_INTERNAL = "I";
|
|
116
112
|
XMLConstants.MG_ATTR_HLP_TYP_WINDOWS = "W";
|
|
117
|
-
//Internal help attributes.
|
|
118
113
|
XMLConstants.MG_ATTR_INTERNAL_HELP_TYPE = "type";
|
|
119
114
|
XMLConstants.MG_ATTR_INTERNAL_HELP_NAME = "name";
|
|
120
115
|
XMLConstants.MG_ATTR_INTERNAL_HELP_FRAMEX = "framex";
|
|
@@ -129,26 +124,20 @@ XMLConstants.MG_ATTR_INTERNAL_HELP_BORDERSTYLE = "borderstyle";
|
|
|
129
124
|
XMLConstants.MG_ATTR_INTERNAL_TITLE_BAR = "titlebar";
|
|
130
125
|
XMLConstants.MG_ATTR_INTERNAL_HELP_SYSTEM_MENU = "sysmenu";
|
|
131
126
|
XMLConstants.MG_ATTR_INTERNAL_HELP_FONT_TABLE_INDEX = "fonttableindex";
|
|
132
|
-
//Windows help attributes.
|
|
133
127
|
XMLConstants.MG_ATTR_WINDOWS_HELP_FILE = "file";
|
|
134
128
|
XMLConstants.MG_ATTR_WINDOWS_HELP_COMMAND = "command";
|
|
135
129
|
XMLConstants.MG_ATTR_WINDOWS_HELP_KEY = "key";
|
|
136
|
-
//Print data attributes.
|
|
137
130
|
XMLConstants.MG_TAG_PRINT_DATA = "Print_data";
|
|
138
131
|
XMLConstants.MG_TAG_PRINT_DATA_END = "/Print_data";
|
|
139
132
|
XMLConstants.MG_TAG_RECORD = "Record";
|
|
140
133
|
XMLConstants.MG_TAG_RECORD_END = "/Record";
|
|
141
|
-
//Custom Validators attributes.
|
|
142
134
|
XMLConstants.MG_TAG_CUSTOM_VALIDATORS = "CustomValidators";
|
|
143
135
|
XMLConstants.MG_TAG_CUSTOM_VALIDATORS_END = "/CustomValidators";
|
|
144
136
|
XMLConstants.MG_TAG_CUSTOM_VALIDATOR = "CustomValidator";
|
|
145
|
-
// date/time formats for DateTimeUtils
|
|
146
|
-
//TODO: isolate to a different file?
|
|
147
137
|
XMLConstants.ERROR_LOG_TIME_FORMAT = "HH:mm:ss.S";
|
|
148
138
|
XMLConstants.ERROR_LOG_DATE_FORMAT = "DD/MM/YYYY";
|
|
149
139
|
XMLConstants.HTTP_ERROR_TIME_FORMAT = "HH:mm:ss";
|
|
150
140
|
XMLConstants.CACHED_DATE_TIME_FORMAT = "DD/MM/YYYY HH:mm:ss";
|
|
151
|
-
//webs constants
|
|
152
141
|
XMLConstants.MG_TAG_WS_READ_REQUEST = "Read";
|
|
153
142
|
XMLConstants.MG_TAG_WS_CREATE_REQUEST = "Create";
|
|
154
143
|
XMLConstants.MG_TAG_WS_CREATE_REQUEST_END = "/Create";
|
|
@@ -177,4 +166,4 @@ XMLConstants.MG_TAG_WS_DESCRIPTION = "description";
|
|
|
177
166
|
XMLConstants.MG_TAG_MENUS_OPEN = "Menus";
|
|
178
167
|
XMLConstants.MG_TAG_MENUS_CLOSE = "/Menus";
|
|
179
168
|
XMLConstants.MG_TAG_MENU = "Menu";
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWE1MQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdXRpbHMvc3JjL1hNTENvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sWUFBWTtJQTZNdkI7SUFFQSxDQUFDOztBQTlNZSx1QkFBVSxHQUFXLEtBQUssQ0FBQztBQUMzQiwyQkFBYyxHQUFXLE1BQU0sQ0FBQztBQUVoQyxxQkFBUSxHQUFXLElBQUksQ0FBQztBQUN4QixxQkFBUSxHQUFXLEdBQUcsQ0FBQztBQUN2QixzQkFBUyxHQUFXLEdBQUcsQ0FBQztBQUN4QiwyQkFBYyxHQUFXLElBQUksQ0FBQztBQUM5QixzQkFBUyxHQUFXLFFBQVEsQ0FBQztBQUM3QixvQkFBTyxHQUFXLElBQUksQ0FBQztBQUN2QixvQkFBTyxHQUFXLEtBQUssQ0FBQztBQUV4Qix1QkFBVSxHQUFXLElBQUksQ0FBQztBQUUxQixrQ0FBcUIsR0FBVyxZQUFZLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztBQUN4Ryx3QkFBVyxHQUFXLFlBQVksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDdkgsd0JBQVcsR0FBVyxNQUFNLENBQUM7QUFDN0IsNEJBQWUsR0FBVyxPQUFPLENBQUM7QUFDbEMsNkJBQWdCLEdBQVcsV0FBVyxDQUFDO0FBRXZELHlFQUF5RTtBQUN6RSxxQ0FBcUM7QUFDckIsbUNBQXNCLEdBQVcsZ0JBQWdCLENBQUM7QUFDbEQsZ0NBQW1CLEdBQVcsWUFBWSxDQUFDO0FBQzNDLHlDQUE0QixHQUFXLHdDQUF3QyxDQUFDO0FBRWhHLGNBQWM7QUFDRSxxQkFBUSxHQUFXLEdBQUcsQ0FBQztBQUN2QiwyQkFBYyxHQUFXLFlBQVksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFD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R0FBVyxhQUFhLENBQUM7QUFFekQsK0JBQWtCLEdBQVcsVUFBVSxDQUFDO0FBQ3hDLGlDQUFvQixHQUFXLFlBQVksQ0FBQztBQUM1Qyw4QkFBaUIsR0FBVyxTQUFTLENBQUM7QUFDdEMsNkJBQWdCLEdBQVcsUUFBUSxDQUFDO0FBQ3BDLDZCQUFnQixHQUFXLFFBQVEsQ0FBQztBQUNwQyxpQ0FBb0IsR0FBVyxTQUFTLENBQUM7QUFDekMsMEJBQWEsR0FBVyxLQUFLLENBQUM7QUFDOUIsMEJBQWEsR0FBVyxLQUFLLENBQUM7QUFDOUIsNkJBQWdCLEdBQVcsS0FBSyxDQUFDO0FBQ2pDLGlDQUFvQixHQUFXLE1BQU0sQ0FBQztBQUN0Qyw0QkFBZSxHQUFXLE9BQU8sQ0FBQztBQUNsQyxnQ0FBbUIsR0FBVyxRQUFRLENBQUM7QUFFdkMsK0JBQWtCLEdBQVcsVUFBVSxDQUFDO0FBQ3hDLDRCQUFlLEdBQVcsT0FBTyxDQUFDO0FBQ2xDLGlDQUFvQixHQUFXLFdBQVcsQ0FBQztBQUMzQyxrQ0FBcUIsR0FBVyxhQUFhLENBQUM7QUFFOUMsOEJBQWlCLEdBQVcsT0FBTyxDQUFDO0FBQ3BDLCtCQUFrQixHQUFXLFFBQVEsQ0FBQztBQUN0Qyx3QkFBVyxHQUFXLE1BQU0sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBYTUxDb25zdGFudHMge1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfWE1MOiBzdHJpbmcgPSBcInhtbFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfWE1MX0VORDogc3RyaW5nID0gXCIveG1sXCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBUQUdfVEVSTTogc3RyaW5nID0gXCIvPlwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBUQUdfT1BFTjogc3RyaW5nID0gXCI8XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFRBR19DTE9TRTogc3RyaW5nID0gXCI+XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFhNTF9BVFRSX0RFTElNOiBzdHJpbmcgPSBcIlxcXCJcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RBUlRfVEFHOiBzdHJpbmcgPSBcIlxcbiAgIDxcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgRU5EX1RBRzogc3RyaW5nID0gXCI8L1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBYTUxfVEFCOiBzdHJpbmcgPSBcIiAgIFwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JRDogc3RyaW5nID0gXCJpZFwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1hNTF9FTkRfVEFHR0VEOiBzdHJpbmcgPSBYTUxDb25zdGFudHMuRU5EX1RBRyArIFhNTENvbnN0YW50cy5NR19UQUdfWE1MICsgWE1MQ29uc3RhbnRzLlRBR19DTE9TRTtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX09QRU46IHN0cmluZyA9IFhNTENvbnN0YW50cy5UQUdfT1BFTiArIFhNTENvbnN0YW50cy5NR19UQUdfWE1MICsgXCIgXCIgKyBYTUxDb25zdGFudHMuTUdfQVRUUl9JRCArIFwiPVxcXCJNR0RBVEFcXFwiPlwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfVEFTSzogc3RyaW5nID0gXCJ0YXNrXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19UQVNLX0VORDogc3RyaW5nID0gXCIvdGFza1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfUkVDT01QVVRFOiBzdHJpbmcgPSBcInJlY29tcHV0ZVwiO1xyXG5cclxuICAvL1RPRE86IHRoaXMgY2xhc3MgY29udGFpbnMgdGhlIGNvbnN0YW50cyB3aGljaCBhcmUgdXNlZCBmb3IgWE1MIHBhcnNpbmcuXHJcbiAgLy9DaGVjayBpZiB3ZSBjYW4gbW92ZSBpdCB0byBVdGlsLmRsbFxyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1ZCX1ZJRVdfUk9XSURYOiBzdHJpbmcgPSBcImRiX3ZpZXdfcm93aWR4XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfQ09OVFJPTF9JU046IHN0cmluZyA9IFwiY29udHJvbElzblwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19IT1JfQUxJR01FTlRfSVNfSU5IRVJJVEVEOiBzdHJpbmcgPSBcImhvcml6b250YWxBbGlnbm1lbnRJc0Zyb21TeXN0ZW1EZWZhdWx0XCI7XHJcblxyXG4gIC8vIE1haW5IZWFkZXJzXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1BWF9QQVRIOiBudW1iZXIgPSAyNjA7XHJcbiAgc3RhdGljIHJlYWRvbmx5IEZJTEVfTkFNRV9TSVpFOiBudW1iZXIgPSBYTUxDb25zdGFudHMuTUFYX1BBVEggKyAxO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgQ0RBVEFfU1RBUlQ6IHN0cmluZyA9IFwiPCFbQ0RBVEFbXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IENEQVRBX0VORDogc3RyaW5nID0gXCJdXT5cIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfVkFMVUU6IHN0cmluZyA9IFwidmFsXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfU1RVRElPX1ZBTFVFOiBzdHJpbmcgPSBcInN0dWRpb1ZhbHVlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfTkFNRTogc3RyaW5nID0gXCJuYW1lXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfVFlQRTogc3RyaW5nID0gXCJ0eXBlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfU0laRTogc3RyaW5nID0gXCJzaXplXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfVkFSX05BTUU6IHN0cmluZyA9IFwidmFyX25hbWVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9WQVJfRElTUF9OQU1FOiBzdHJpbmcgPSBcInZhcl9kaXNwX25hbWVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9WRUNfQ0VMTFNfU0laRTogc3RyaW5nID0gXCJ2ZWNDZWxsc1NpemVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9WRUNfQ0VMTFNfQVRUUjogc3RyaW5nID0gXCJ2ZWNfY2VsbHNfYXR0clwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1ZFQ19DRUxMU19DT05URU5UOiBzdHJpbmcgPSBcIkNlbGxDb250ZW50VHlwZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX05VTExWQUxVRTogc3RyaW5nID0gXCJudWxsdmFsdWVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9OVUxMRElTUExBWTogc3RyaW5nID0gXCJudWxsZGlzcGxheVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX05VTExERUZBVUxUOiBzdHJpbmcgPSBcIm51bGxkZWZhdWx0XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfREJfTU9ESUZJQUJMRTogc3RyaW5nID0gXCJkYl9tb2RpZmlhYmxlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfREVGQVVMVFZBTFVFOiBzdHJpbmcgPSBcImRlZmF1bHR2YWx1ZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX05VTExBTExPV0VEOiBzdHJpbmcgPSBcIm51bGxhbGxvd2VkXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfQkxPQl9DT05URU5UOiBzdHJpbmcgPSBcIkNvbnRlbnRUeXBlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfUEFSVF9PRl9EQVRBVklFVzogc3RyaW5nID0gXCJwYXJ0T2ZEYXRhdmlld1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0RBVEFfVFlQRTogc3RyaW5nID0gXCJkYXRhVHlwZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0RBVEFfQ1RSTDogc3RyaW5nID0gXCJkYXRhX2N0cmxcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9MSU5LRURfUEFSRU5UOiBzdHJpbmcgPSBcImxpbmtlZF9wYXJlbnRcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9DT05UQUlORVI6IHN0cmluZyA9IFwiY29udGFpbmVyXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSVNfRlJBTUVTRVQ6IHN0cmluZyA9IFwiaXNGcmFtZVNldFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lTX0xJR0FMX1JDX0ZPUk06IHN0cmluZyA9IFwiaXNMZWdhbFJjRm9ybVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1VTRVJTVEFURV9JRDogc3RyaW5nID0gXCJ1c2VyU3RhdGVJZFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1BCX0lNQUdFU19OVU1CRVI6IHN0cmluZyA9IFwiUEJJbWFnZXNOdW1iZXJcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9GT1JNX0lTTjogc3RyaW5nID0gXCJmb3JtSXNuXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfVEFTS0lEOiBzdHJpbmcgPSBcInRhc2tpZFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lTX01PREFMOiBzdHJpbmcgPSBcIklzTW9kYWxcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9UQVNLX0lTX1NFUklBTElaQVRJT05fUEFSVElBTDogc3RyaW5nID0gXCJpc1NlcmlhbGl6YXRpb25QYXJ0aWFsXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfWE1MX1RSVUU6IHN0cmluZyA9IFwiMVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1hNTF9GQUxTRTogc3RyaW5nID0gXCIwXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfVE9PTEtJVF9QQVJFTlRfVEFTSzogc3RyaW5nID0gXCJ0b29sa2l0X3BhcmVudF90YXNrXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfQ1RMX0lEWDogc3RyaW5nID0gXCJjdGxfaWR4XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfTUFJTlBSRzogc3RyaW5nID0gXCJtYWlucHJnXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfTlVMTF9BUklUSE1FVElDOiBzdHJpbmcgPSBcIm51bGxBcml0aG1ldGljXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSU5URVJBQ1RJVkU6IHN0cmluZyA9IFwiaW50ZXJhY3RpdmVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JU19PRkZMSU5FOiBzdHJpbmcgPSBcIklzT2ZmbGluZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1JFVFVSTl9WQUxVRV9FWFA6IHN0cmluZyA9IFwicmV0dXJuVmFsdWVFeHBcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9QQVJBTExFTDogc3RyaW5nID0gXCJQYXJhbGxlbEV4ZWN1dGlvblwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX09QRU5fV0lOOiBzdHJpbmcgPSBcIk9wZW5XaW5cIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9BTExPV19FVkVOVFM6IHN0cmluZyA9IFwiQWxsb3dFdmVudHNcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JU1BSRzogc3RyaW5nID0gXCJpc1ByZ1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0FQUExfR1VJRDogc3RyaW5nID0gXCJhcHBsaWNhdGlvbkd1aWRcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9QUk9HUkFNX0lTTjogc3RyaW5nID0gXCJwcm9ncmFtSXNuXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfVEFTS19JU046IHN0cmluZyA9IFwidGFza0lzblwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1JPVVRFUl9QQVRIOiBzdHJpbmcgPSBcIlJvdXRlclBhdGhcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JTl9ERUZBVUxUX1JPVVRFUl9PVVRMRVQ6IHN0cmluZyA9IFwiSW5EZWZhdWx0Um91dGVyT3V0bGV0XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfRVhQQU5EOiBzdHJpbmcgPSBcImV4cGFuZFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0VYUDogc3RyaW5nID0gXCJleHBcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9FUlJPUl9FWFA6IHN0cmluZyA9IFwiZXJyb3JFeHBcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9FUlJPUjogc3RyaW5nID0gXCJlcnJvck1zZ1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lTX0dFTkVSSUM6IHN0cmluZyA9IFwiaXNHZW5lcmljXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSEFTSENPREU6IHN0cmluZyA9IFwiaGFzaENvZGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9QSUNUVVJFOiBzdHJpbmcgPSBcInBpY3R1cmVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9TVE9SQUdFOiBzdHJpbmcgPSBcInN0b3JhZ2VcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9ESVRJRFg6IHN0cmluZyA9IFwiZGl0aWR4XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSUNPTl9GSUxFX05BTUU6IHN0cmluZyA9IFwiaWNvbkZpbGVOYW1lXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfU1lTX0NPTlRFWFRfTUVOVTogc3RyaW5nID0gXCJzeXN0ZW1Db250ZXh0TWVudVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfRkxESDogc3RyaW5nID0gXCJmbGRoXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19EVkhFQURFUjogc3RyaW5nID0gXCJkdmhlYWRlclwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX01FTlVTX0ZJTEVfTkFNRTogc3RyaW5nID0gXCJtZW51c0ZpbGVOYW1lXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfTUVOVV9DT05URU5UOiBzdHJpbmcgPSBcIk1lbnVzQ29udGVudFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1NPUlRfQllfUkVDRU5UTFlfVVNFRDogc3RyaW5nID0gXCJTb3J0V2luZG93TGlzdEJ5UmVjZW50bHlVc2VkXCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0NPTlRST0xfWl9PUkRFUjogc3RyaW5nID0gXCJ6b3JkZXJcIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19QUk9QOiBzdHJpbmcgPSBcInByb3BcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX0NPTlRST0w6IHN0cmluZyA9IFwiY29udHJvbFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfRk9STTogc3RyaW5nID0gXCJmb3JtXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19GT1JNX1BST1BFUlRJRVM6IHN0cmluZyA9IFwicHJvcGVydGllc0Zvcm1cIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX0ZPUk1TOiBzdHJpbmcgPSBcImZvcm1zXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19UUkVFOiBzdHJpbmcgPSBcInRyZWVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX05PREU6IHN0cmluZyA9IFwibm9kZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfRkxEOiBzdHJpbmcgPSBcImZsZFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0NISUxEUkVOX1JFVFJJRVZFRDogc3RyaW5nID0gXCJjaGlsZHJlbl9yZXRyaWV2ZWRcIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19IRUxQVEFCTEU6IHN0cmluZyA9IFwiaGVscHRhYmxlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19IRUxQSVRFTTogc3RyaW5nID0gXCJoZWxwaXRlbVwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9GVUxMTkFNRTogc3RyaW5nID0gXCJmdWxsbmFtZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lTU1BFQ0lGSUM6IHN0cmluZyA9IFwiaXNTcGVjaWZpY1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lTX0dVSV9USFJFQURfRVhFQ1VUSU9OOiBzdHJpbmcgPSBcImlzR3VpVGhyZWFkRXhlY3V0aW9uXCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfVEFTS0RFRklOSVRJT05JRF9FTlRSWTogc3RyaW5nID0gXCJ0YXNrRGVmaW5pdGlvbklkXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19PQkpFQ1RfUkVGRVJFTkNFOiBzdHJpbmcgPSBcIm9iamVjdFJlZlwiO1xyXG5cclxuICAvL0hlbHAgdHlwZXNcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9ITFBfVFlQX1RPT0xUSVA6IHN0cmluZyA9IFwiVFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0hMUF9UWVBfUFJPTVBUOiBzdHJpbmcgPSBcIlBcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9ITFBfVFlQX1VSTDogc3RyaW5nID0gXCJVXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSExQX1RZUF9JTlRFUk5BTDogc3RyaW5nID0gXCJJXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSExQX1RZUF9XSU5ET1dTOiBzdHJpbmcgPSBcIldcIjtcclxuXHJcbiAgLy9JbnRlcm5hbCBoZWxwIGF0dHJpYnV0ZXMuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSU5URVJOQUxfSEVMUF9UWVBFOiBzdHJpbmcgPSBcInR5cGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JTlRFUk5BTF9IRUxQX05BTUU6IHN0cmluZyA9IFwibmFtZVwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JTlRFUk5BTF9IRUxQX0ZSQU1FWDogc3RyaW5nID0gXCJmcmFtZXhcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JTlRFUk5BTF9IRUxQX0ZSQU1FWTogc3RyaW5nID0gXCJmcmFtZXlcIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSU5URVJOQUxfSEVMUF9GUkFNRURYOiBzdHJpbmcgPSBcImZhbWVkeFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOVEVSTkFMX0hFTFBfRlJBTUVEWTogc3RyaW5nID0gXCJmcmFtZWR5XCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOVEVSTkFMX0hFTFBfU0laRURYOiBzdHJpbmcgPSBcInNpemVkeFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOVEVSTkFMX0hFTFBfU0laRURZOiBzdHJpbmcgPSBcInNpemVkeVwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JTlRFUk5BTF9IRUxQX0ZBQ1RPUlg6IHN0cmluZyA9IFwiZmFjdG9yeFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOVEVSTkFMX0hFTFBfRkFDVE9SWTogc3RyaW5nID0gXCJmYWN0b3J5XCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOVEVSTkFMX0hFTFBfQk9SREVSU1RZTEU6IHN0cmluZyA9IFwiYm9yZGVyc3R5bGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JTlRFUk5BTF9USVRMRV9CQVI6IHN0cmluZyA9IFwidGl0bGViYXJcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JTlRFUk5BTF9IRUxQX1NZU1RFTV9NRU5VOiBzdHJpbmcgPSBcInN5c21lbnVcIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSU5URVJOQUxfSEVMUF9GT05UX1RBQkxFX0lOREVYOiBzdHJpbmcgPSBcImZvbnR0YWJsZWluZGV4XCI7XHJcblxyXG4gIC8vV2luZG93cyBoZWxwIGF0dHJpYnV0ZXMuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfV0lORE9XU19IRUxQX0ZJTEU6IHN0cmluZyA9IFwiZmlsZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1dJTkRPV1NfSEVMUF9DT01NQU5EOiBzdHJpbmcgPSBcImNvbW1hbmRcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9XSU5ET1dTX0hFTFBfS0VZOiBzdHJpbmcgPSBcImtleVwiO1xyXG5cclxuICAvL1ByaW50IGRhdGEgYXR0cmlidXRlcy5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1BSSU5UX0RBVEE6IHN0cmluZyA9IFwiUHJpbnRfZGF0YVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfUFJJTlRfREFUQV9FTkQ6IHN0cmluZyA9IFwiL1ByaW50X2RhdGFcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1JFQ09SRDogc3RyaW5nID0gXCJSZWNvcmRcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1JFQ09SRF9FTkQ6IHN0cmluZyA9IFwiL1JlY29yZFwiO1xyXG5cclxuICAvL0N1c3RvbSBWYWxpZGF0b3JzICBhdHRyaWJ1dGVzLlxyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfQ1VTVE9NX1ZBTElEQVRPUlM6IHN0cmluZyA9IFwiQ3VzdG9tVmFsaWRhdG9yc1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfQ1VTVE9NX1ZBTElEQVRPUlNfRU5EOiBzdHJpbmcgPSBcIi9DdXN0b21WYWxpZGF0b3JzXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19DVVNUT01fVkFMSURBVE9SOiBzdHJpbmcgPSBcIkN1c3RvbVZhbGlkYXRvclwiO1xyXG5cclxuICAvLyBkYXRlL3RpbWUgZm9ybWF0cyBmb3IgRGF0ZVRpbWVVdGlsc1xyXG4gIC8vVE9ETzogaXNvbGF0ZSB0byBhIGRpZmZlcmVudCBmaWxlP1xyXG4gIHN0YXRpYyByZWFkb25seSBFUlJPUl9MT0dfVElNRV9GT1JNQVQ6IHN0cmluZyA9IFwiSEg6bW06c3MuU1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBFUlJPUl9MT0dfREFURV9GT1JNQVQ6IHN0cmluZyA9IFwiREQvTU0vWVlZWVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBIVFRQX0VSUk9SX1RJTUVfRk9STUFUOiBzdHJpbmcgPSBcIkhIOm1tOnNzXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFRF9EQVRFX1RJTUVfRk9STUFUOiBzdHJpbmcgPSBcIkREL01NL1lZWVkgSEg6bW06c3NcIjtcclxuXHJcbiAgLy93ZWJzIGNvbnN0YW50c1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfUkVBRF9SRVFVRVNUOiBzdHJpbmcgPSBcIlJlYWRcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX0NSRUFURV9SRVFVRVNUOiBzdHJpbmcgPSBcIkNyZWF0ZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfQ1JFQVRFX1JFUVVFU1RfRU5EOiBzdHJpbmcgPSBcIi9DcmVhdGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX1VQREFURV9SRVFVRVNUOiBzdHJpbmcgPSBcIlVwZGF0ZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfVVBEQVRFX1JFUVVFU1RfRU5EOiBzdHJpbmcgPSBcIi9VcGRhdGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX0RFTEVURV9SRVFVRVNUOiBzdHJpbmcgPSBcIkRlbGV0ZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfREVMRVRFX1JFUVVFU1RfRU5EOiBzdHJpbmcgPSBcIi9EZWxldGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX01BTklQVUxBVEVfUkVRVUVTVDogc3RyaW5nID0gXCJNYW5pcHVsYXRlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19NQU5JUFVMQVRFX1JFUVVFU1RfRU5EOiBzdHJpbmcgPSBcIi9NYW5pcHVsYXRlXCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfREFUQUJBU0U6IHN0cmluZyA9IFwiRGF0YWJhc2VcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX0RBVEFTT1VSQ0U6IHN0cmluZyA9IFwiRGF0YXNvdXJjZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfQ09MVU1OUzogc3RyaW5nID0gXCJDb2x1bW5zXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19DT0xVTU46IHN0cmluZyA9IFwic3RyaW5nXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19SQU5HRVM6IHN0cmluZyA9IFwiUmFuZ2VzXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19SQU5HRVNfRU5EOiBzdHJpbmcgPSBcIi9SYW5nZXNcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX01JTjogc3RyaW5nID0gXCJNaW5cIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX01BWDogc3RyaW5nID0gXCJNYXhcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX1JFQ09SRDogc3RyaW5nID0gXCJSb3dcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX1JFQ09SRF9FTkQ6IHN0cmluZyA9IFwiL1Jvd1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfV0hFUkU6IHN0cmluZyA9IFwiV2hlcmVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX1dIRVJFX0VORDogc3RyaW5nID0gXCIvV2hlcmVcIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19SRVNQT05TRTogc3RyaW5nID0gXCJSZXNwb25zZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfRVJST1I6IHN0cmluZyA9IFwiRXJyb3JcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX0VSUk9SX0NPREU6IHN0cmluZyA9IFwiZXJyb3JDb2RlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19ERVNDUklQVElPTjogc3RyaW5nID0gXCJkZXNjcmlwdGlvblwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX01FTlVTX09QRU46IHN0cmluZyA9IFwiTWVudXNcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX01FTlVTX0NMT1NFOiBzdHJpbmcgPSBcIi9NZW51c1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfTUVOVTogc3RyaW5nID0gXCJNZW51XCI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICB9XHJcbn1cclxuIl19
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWE1MQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdXRpbHMvc3JjL1hNTENvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sWUFBWTtJQTZNdkI7SUFFQSxDQUFDOztBQTlNZSx1QkFBVSxHQUFXLEtBQUssQ0FBQztBQUMzQiwyQkFBYyxHQUFXLE1BQU0sQ0FBQztBQUVoQyxxQkFBUSxHQUFXLElBQUksQ0FBQztBQUN4QixxQkFBUSxHQUFXLEdBQUcsQ0FBQztBQUN2QixzQkFBUyxHQUFXLEdBQUcsQ0FBQztBQUN4QiwyQkFBYyxHQUFXLElBQUksQ0FBQztBQUM5QixzQkFBUyxHQUFXLFFBQVEsQ0FBQztBQUM3QixvQkFBTyxHQUFXLElBQUksQ0FBQztBQUN2QixvQkFBTyxHQUFXLEtBQUssQ0FBQztBQUV4Qix1QkFBVSxHQUFXLElBQUksQ0FBQztBQUUxQixrQ0FBcUIsR0FBVyxZQUFZLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztBQUN4Ryx3QkFBVyxHQUFXLFlBQVksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDdkgsd0JBQVcsR0FBVyxNQUFNLENBQUM7QUFDN0IsNEJBQWUsR0FBVyxPQUFPLENBQUM7QUFDbEMsNkJBQWdCLEdBQVcsV0FBVyxDQUFDO0FBSXZDLG1DQUFzQixHQUFXLGdCQUFnQixDQUFDO0FBQ2xELGdDQUFtQixHQUFXLFlBQVksQ0FBQztBQUMzQyx5Q0FBNEIsR0FBVyx3Q0FBd0MsQ0FBQztBQUdoRixxQkFBUSxHQUFXLEdBQUcsQ0FBQztBQUN2QiwyQkFBYyxHQUFXLFlBQVksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRW5ELHdCQUFXLEdBQVcsV0FBVyxDQUFDO0FBQ2xD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cEMsNkJBQWdCLEdBQVcsUUFBUSxDQUFDO0FBQ3BDLGlDQUFvQixHQUFXLFNBQVMsQ0FBQztBQUN6QywwQkFBYSxHQUFXLEtBQUssQ0FBQztBQUM5QiwwQkFBYSxHQUFXLEtBQUssQ0FBQztBQUM5Qiw2QkFBZ0IsR0FBVyxLQUFLLENBQUM7QUFDakMsaUNBQW9CLEdBQVcsTUFBTSxDQUFDO0FBQ3RDLDRCQUFlLEdBQVcsT0FBTyxDQUFDO0FBQ2xDLGdDQUFtQixHQUFXLFFBQVEsQ0FBQztBQUV2QywrQkFBa0IsR0FBVyxVQUFVLENBQUM7QUFDeEMsNEJBQWUsR0FBVyxPQUFPLENBQUM7QUFDbEMsaUNBQW9CLEdBQVcsV0FBVyxDQUFDO0FBQzNDLGtDQUFxQixHQUFXLGFBQWEsQ0FBQztBQUU5Qyw4QkFBaUIsR0FBVyxPQUFPLENBQUM7QUFDcEMsK0JBQWtCLEdBQVcsUUFBUSxDQUFDO0FBQ3RDLHdCQUFXLEdBQVcsTUFBTSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFhNTENvbnN0YW50cyB7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19YTUw6IHN0cmluZyA9IFwieG1sXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19YTUxfRU5EOiBzdHJpbmcgPSBcIi94bWxcIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IFRBR19URVJNOiBzdHJpbmcgPSBcIi8+XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFRBR19PUEVOOiBzdHJpbmcgPSBcIjxcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgVEFHX0NMT1NFOiBzdHJpbmcgPSBcIj5cIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgWE1MX0FUVFJfREVMSU06IHN0cmluZyA9IFwiXFxcIlwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVEFSVF9UQUc6IHN0cmluZyA9IFwiXFxuICAgPFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBFTkRfVEFHOiBzdHJpbmcgPSBcIjwvXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFhNTF9UQUI6IHN0cmluZyA9IFwiICAgXCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lEOiBzdHJpbmcgPSBcImlkXCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfWE1MX0VORF9UQUdHRUQ6IHN0cmluZyA9IFhNTENvbnN0YW50cy5FTkRfVEFHICsgWE1MQ29uc3RhbnRzLk1HX1RBR19YTUwgKyBYTUxDb25zdGFudHMuVEFHX0NMT1NFO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfT1BFTjogc3RyaW5nID0gWE1MQ29uc3RhbnRzLlRBR19PUEVOICsgWE1MQ29uc3RhbnRzLk1HX1RBR19YTUwgKyBcIiBcIiArIFhNTENvbnN0YW50cy5NR19BVFRSX0lEICsgXCI9XFxcIk1HREFUQVxcXCI+XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19UQVNLOiBzdHJpbmcgPSBcInRhc2tcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1RBU0tfRU5EOiBzdHJpbmcgPSBcIi90YXNrXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19SRUNPTVBVVEU6IHN0cmluZyA9IFwicmVjb21wdXRlXCI7XHJcblxyXG4gIC8vVE9ETzogdGhpcyBjbGFzcyBjb250YWlucyB0aGUgY29uc3RhbnRzIHdoaWNoIGFyZSB1c2VkIGZvciBYTUwgcGFyc2luZy5cclxuICAvL0NoZWNrIGlmIHdlIGNhbiBtb3ZlIGl0IHRvIFV0aWwuZGxsXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfVkJfVklFV19ST1dJRFg6IHN0cmluZyA9IFwiZGJfdmlld19yb3dpZHhcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9DT05UUk9MX0lTTjogc3RyaW5nID0gXCJjb250cm9sSXNuXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0hPUl9BTElHTUVOVF9JU19JTkhFUklURUQ6IHN0cmluZyA9IFwiaG9yaXpvbnRhbEFsaWdubWVudElzRnJvbVN5c3RlbURlZmF1bHRcIjtcclxuXHJcbiAgLy8gTWFpbkhlYWRlcnNcclxuICBzdGF0aWMgcmVhZG9ubHkgTUFYX1BBVEg6IG51bWJlciA9IDI2MDtcclxuICBzdGF0aWMgcmVhZG9ubHkgRklMRV9OQU1FX1NJWkU6IG51bWJlciA9IFhNTENvbnN0YW50cy5NQVhfUEFUSCArIDE7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBDREFUQV9TVEFSVDogc3RyaW5nID0gXCI8IVtDREFUQVtcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgQ0RBVEFfRU5EOiBzdHJpbmcgPSBcIl1dPlwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9WQUxVRTogc3RyaW5nID0gXCJ2YWxcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9TVFVESU9fVkFMVUU6IHN0cmluZyA9IFwic3R1ZGlvVmFsdWVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9OQU1FOiBzdHJpbmcgPSBcIm5hbWVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9UWVBFOiBzdHJpbmcgPSBcInR5cGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9TSVpFOiBzdHJpbmcgPSBcInNpemVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9WQVJfTkFNRTogc3RyaW5nID0gXCJ2YXJfbmFtZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1ZBUl9ESVNQX05BTUU6IHN0cmluZyA9IFwidmFyX2Rpc3BfbmFtZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1ZFQ19DRUxMU19TSVpFOiBzdHJpbmcgPSBcInZlY0NlbGxzU2l6ZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1ZFQ19DRUxMU19BVFRSOiBzdHJpbmcgPSBcInZlY19jZWxsc19hdHRyXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfVkVDX0NFTExTX0NPTlRFTlQ6IHN0cmluZyA9IFwiQ2VsbENvbnRlbnRUeXBlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfTlVMTFZBTFVFOiBzdHJpbmcgPSBcIm51bGx2YWx1ZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX05VTExESVNQTEFZOiBzdHJpbmcgPSBcIm51bGxkaXNwbGF5XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfTlVMTERFRkFVTFQ6IHN0cmluZyA9IFwibnVsbGRlZmF1bHRcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9EQl9NT0RJRklBQkxFOiBzdHJpbmcgPSBcImRiX21vZGlmaWFibGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9ERUZBVUxUVkFMVUU6IHN0cmluZyA9IFwiZGVmYXVsdHZhbHVlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfTlVMTEFMTE9XRUQ6IHN0cmluZyA9IFwibnVsbGFsbG93ZWRcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9CTE9CX0NPTlRFTlQ6IHN0cmluZyA9IFwiQ29udGVudFR5cGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9QQVJUX09GX0RBVEFWSUVXOiBzdHJpbmcgPSBcInBhcnRPZkRhdGF2aWV3XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfREFUQV9UWVBFOiBzdHJpbmcgPSBcImRhdGFUeXBlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfREFUQV9DVFJMOiBzdHJpbmcgPSBcImRhdGFfY3RybFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0xJTktFRF9QQVJFTlQ6IHN0cmluZyA9IFwibGlua2VkX3BhcmVudFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0NPTlRBSU5FUjogc3RyaW5nID0gXCJjb250YWluZXJcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JU19GUkFNRVNFVDogc3RyaW5nID0gXCJpc0ZyYW1lU2V0XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSVNfTElHQUxfUkNfRk9STTogc3RyaW5nID0gXCJpc0xlZ2FsUmNGb3JtXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfVVNFUlNUQVRFX0lEOiBzdHJpbmcgPSBcInVzZXJTdGF0ZUlkXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfUEJfSU1BR0VTX05VTUJFUjogc3RyaW5nID0gXCJQQkltYWdlc051bWJlclwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0ZPUk1fSVNOOiBzdHJpbmcgPSBcImZvcm1Jc25cIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9UQVNLSUQ6IHN0cmluZyA9IFwidGFza2lkXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSVNfTU9EQUw6IHN0cmluZyA9IFwiSXNNb2RhbFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1RBU0tfSVNfU0VSSUFMSVpBVElPTl9QQVJUSUFMOiBzdHJpbmcgPSBcImlzU2VyaWFsaXphdGlvblBhcnRpYWxcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9YTUxfVFJVRTogc3RyaW5nID0gXCIxXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfWE1MX0ZBTFNFOiBzdHJpbmcgPSBcIjBcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9UT09MS0lUX1BBUkVOVF9UQVNLOiBzdHJpbmcgPSBcInRvb2xraXRfcGFyZW50X3Rhc2tcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9DVExfSURYOiBzdHJpbmcgPSBcImN0bF9pZHhcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9NQUlOUFJHOiBzdHJpbmcgPSBcIm1haW5wcmdcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9OVUxMX0FSSVRITUVUSUM6IHN0cmluZyA9IFwibnVsbEFyaXRobWV0aWNcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JTlRFUkFDVElWRTogc3RyaW5nID0gXCJpbnRlcmFjdGl2ZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lTX09GRkxJTkU6IHN0cmluZyA9IFwiSXNPZmZsaW5lXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfUkVUVVJOX1ZBTFVFX0VYUDogc3RyaW5nID0gXCJyZXR1cm5WYWx1ZUV4cFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1BBUkFMTEVMOiBzdHJpbmcgPSBcIlBhcmFsbGVsRXhlY3V0aW9uXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfT1BFTl9XSU46IHN0cmluZyA9IFwiT3BlbldpblwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0FMTE9XX0VWRU5UUzogc3RyaW5nID0gXCJBbGxvd0V2ZW50c1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lTUFJHOiBzdHJpbmcgPSBcImlzUHJnXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfQVBQTF9HVUlEOiBzdHJpbmcgPSBcImFwcGxpY2F0aW9uR3VpZFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1BST0dSQU1fSVNOOiBzdHJpbmcgPSBcInByb2dyYW1Jc25cIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9UQVNLX0lTTjogc3RyaW5nID0gXCJ0YXNrSXNuXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfUk9VVEVSX1BBVEg6IHN0cmluZyA9IFwiUm91dGVyUGF0aFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOX0RFRkFVTFRfUk9VVEVSX09VVExFVDogc3RyaW5nID0gXCJJbkRlZmF1bHRSb3V0ZXJPdXRsZXRcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9FWFBBTkQ6IHN0cmluZyA9IFwiZXhwYW5kXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfRVhQOiBzdHJpbmcgPSBcImV4cFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0VSUk9SX0VYUDogc3RyaW5nID0gXCJlcnJvckV4cFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0VSUk9SOiBzdHJpbmcgPSBcImVycm9yTXNnXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSVNfR0VORVJJQzogc3RyaW5nID0gXCJpc0dlbmVyaWNcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9IQVNIQ09ERTogc3RyaW5nID0gXCJoYXNoQ29kZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1BJQ1RVUkU6IHN0cmluZyA9IFwicGljdHVyZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1NUT1JBR0U6IHN0cmluZyA9IFwic3RvcmFnZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0RJVElEWDogc3RyaW5nID0gXCJkaXRpZHhcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JQ09OX0ZJTEVfTkFNRTogc3RyaW5nID0gXCJpY29uRmlsZU5hbWVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9TWVNfQ09OVEVYVF9NRU5VOiBzdHJpbmcgPSBcInN5c3RlbUNvbnRleHRNZW51XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19GTERIOiBzdHJpbmcgPSBcImZsZGhcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX0RWSEVBREVSOiBzdHJpbmcgPSBcImR2aGVhZGVyXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfTUVOVVNfRklMRV9OQU1FOiBzdHJpbmcgPSBcIm1lbnVzRmlsZU5hbWVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9NRU5VX0NPTlRFTlQ6IHN0cmluZyA9IFwiTWVudXNDb250ZW50XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfU09SVF9CWV9SRUNFTlRMWV9VU0VEOiBzdHJpbmcgPSBcIlNvcnRXaW5kb3dMaXN0QnlSZWNlbnRseVVzZWRcIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfQ09OVFJPTF9aX09SREVSOiBzdHJpbmcgPSBcInpvcmRlclwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1BST1A6IHN0cmluZyA9IFwicHJvcFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfQ09OVFJPTDogc3RyaW5nID0gXCJjb250cm9sXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19GT1JNOiBzdHJpbmcgPSBcImZvcm1cIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX0ZPUk1fUFJPUEVSVElFUzogc3RyaW5nID0gXCJwcm9wZXJ0aWVzRm9ybVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfRk9STVM6IHN0cmluZyA9IFwiZm9ybXNcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1RSRUU6IHN0cmluZyA9IFwidHJlZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfTk9ERTogc3RyaW5nID0gXCJub2RlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19GTEQ6IHN0cmluZyA9IFwiZmxkXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfQ0hJTERSRU5fUkVUUklFVkVEOiBzdHJpbmcgPSBcImNoaWxkcmVuX3JldHJpZXZlZFwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX0hFTFBUQUJMRTogc3RyaW5nID0gXCJoZWxwdGFibGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX0hFTFBJVEVNOiBzdHJpbmcgPSBcImhlbHBpdGVtXCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0ZVTExOQU1FOiBzdHJpbmcgPSBcImZ1bGxuYW1lXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSVNTUEVDSUZJQzogc3RyaW5nID0gXCJpc1NwZWNpZmljXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSVNfR1VJX1RIUkVBRF9FWEVDVVRJT046IHN0cmluZyA9IFwiaXNHdWlUaHJlYWRFeGVjdXRpb25cIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19UQVNLREVGSU5JVElPTklEX0VOVFJZOiBzdHJpbmcgPSBcInRhc2tEZWZpbml0aW9uSWRcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX09CSkVDVF9SRUZFUkVOQ0U6IHN0cmluZyA9IFwib2JqZWN0UmVmXCI7XHJcblxyXG4gIC8vSGVscCB0eXBlc1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0hMUF9UWVBfVE9PTFRJUDogc3RyaW5nID0gXCJUXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSExQX1RZUF9QUk9NUFQ6IHN0cmluZyA9IFwiUFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0hMUF9UWVBfVVJMOiBzdHJpbmcgPSBcIlVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9ITFBfVFlQX0lOVEVSTkFMOiBzdHJpbmcgPSBcIklcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9ITFBfVFlQX1dJTkRPV1M6IHN0cmluZyA9IFwiV1wiO1xyXG5cclxuICAvL0ludGVybmFsIGhlbHAgYXR0cmlidXRlcy5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JTlRFUk5BTF9IRUxQX1RZUEU6IHN0cmluZyA9IFwidHlwZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOVEVSTkFMX0hFTFBfTkFNRTogc3RyaW5nID0gXCJuYW1lXCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOVEVSTkFMX0hFTFBfRlJBTUVYOiBzdHJpbmcgPSBcImZyYW1leFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOVEVSTkFMX0hFTFBfRlJBTUVZOiBzdHJpbmcgPSBcImZyYW1leVwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JTlRFUk5BTF9IRUxQX0ZSQU1FRFg6IHN0cmluZyA9IFwiZmFtZWR4XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSU5URVJOQUxfSEVMUF9GUkFNRURZOiBzdHJpbmcgPSBcImZyYW1lZHlcIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSU5URVJOQUxfSEVMUF9TSVpFRFg6IHN0cmluZyA9IFwic2l6ZWR4XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSU5URVJOQUxfSEVMUF9TSVpFRFk6IHN0cmluZyA9IFwic2l6ZWR5XCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOVEVSTkFMX0hFTFBfRkFDVE9SWDogc3RyaW5nID0gXCJmYWN0b3J4XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSU5URVJOQUxfSEVMUF9GQUNUT1JZOiBzdHJpbmcgPSBcImZhY3RvcnlcIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfSU5URVJOQUxfSEVMUF9CT1JERVJTVFlMRTogc3RyaW5nID0gXCJib3JkZXJzdHlsZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOVEVSTkFMX1RJVExFX0JBUjogc3RyaW5nID0gXCJ0aXRsZWJhclwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX0lOVEVSTkFMX0hFTFBfU1lTVEVNX01FTlU6IHN0cmluZyA9IFwic3lzbWVudVwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9JTlRFUk5BTF9IRUxQX0ZPTlRfVEFCTEVfSU5ERVg6IHN0cmluZyA9IFwiZm9udHRhYmxlaW5kZXhcIjtcclxuXHJcbiAgLy9XaW5kb3dzIGhlbHAgYXR0cmlidXRlcy5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfQVRUUl9XSU5ET1dTX0hFTFBfRklMRTogc3RyaW5nID0gXCJmaWxlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX0FUVFJfV0lORE9XU19IRUxQX0NPTU1BTkQ6IHN0cmluZyA9IFwiY29tbWFuZFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19BVFRSX1dJTkRPV1NfSEVMUF9LRVk6IHN0cmluZyA9IFwia2V5XCI7XHJcblxyXG4gIC8vUHJpbnQgZGF0YSBhdHRyaWJ1dGVzLlxyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfUFJJTlRfREFUQTogc3RyaW5nID0gXCJQcmludF9kYXRhXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19QUklOVF9EQVRBX0VORDogc3RyaW5nID0gXCIvUHJpbnRfZGF0YVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfUkVDT1JEOiBzdHJpbmcgPSBcIlJlY29yZFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfUkVDT1JEX0VORDogc3RyaW5nID0gXCIvUmVjb3JkXCI7XHJcblxyXG4gIC8vQ3VzdG9tIFZhbGlkYXRvcnMgIGF0dHJpYnV0ZXMuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19DVVNUT01fVkFMSURBVE9SUzogc3RyaW5nID0gXCJDdXN0b21WYWxpZGF0b3JzXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19DVVNUT01fVkFMSURBVE9SU19FTkQ6IHN0cmluZyA9IFwiL0N1c3RvbVZhbGlkYXRvcnNcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX0NVU1RPTV9WQUxJREFUT1I6IHN0cmluZyA9IFwiQ3VzdG9tVmFsaWRhdG9yXCI7XHJcblxyXG4gIC8vIGRhdGUvdGltZSBmb3JtYXRzIGZvciBEYXRlVGltZVV0aWxzXHJcbiAgLy9UT0RPOiBpc29sYXRlIHRvIGEgZGlmZmVyZW50IGZpbGU/XHJcbiAgc3RhdGljIHJlYWRvbmx5IEVSUk9SX0xPR19USU1FX0ZPUk1BVDogc3RyaW5nID0gXCJISDptbTpzcy5TXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IEVSUk9SX0xPR19EQVRFX0ZPUk1BVDogc3RyaW5nID0gXCJERC9NTS9ZWVlZXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IEhUVFBfRVJST1JfVElNRV9GT1JNQVQ6IHN0cmluZyA9IFwiSEg6bW06c3NcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVEX0RBVEVfVElNRV9GT1JNQVQ6IHN0cmluZyA9IFwiREQvTU0vWVlZWSBISDptbTpzc1wiO1xyXG5cclxuICAvL3dlYnMgY29uc3RhbnRzXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19SRUFEX1JFUVVFU1Q6IHN0cmluZyA9IFwiUmVhZFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfQ1JFQVRFX1JFUVVFU1Q6IHN0cmluZyA9IFwiQ3JlYXRlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19DUkVBVEVfUkVRVUVTVF9FTkQ6IHN0cmluZyA9IFwiL0NyZWF0ZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfVVBEQVRFX1JFUVVFU1Q6IHN0cmluZyA9IFwiVXBkYXRlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19VUERBVEVfUkVRVUVTVF9FTkQ6IHN0cmluZyA9IFwiL1VwZGF0ZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfREVMRVRFX1JFUVVFU1Q6IHN0cmluZyA9IFwiRGVsZXRlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19ERUxFVEVfUkVRVUVTVF9FTkQ6IHN0cmluZyA9IFwiL0RlbGV0ZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfTUFOSVBVTEFURV9SRVFVRVNUOiBzdHJpbmcgPSBcIk1hbmlwdWxhdGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX01BTklQVUxBVEVfUkVRVUVTVF9FTkQ6IHN0cmluZyA9IFwiL01hbmlwdWxhdGVcIjtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19EQVRBQkFTRTogc3RyaW5nID0gXCJEYXRhYmFzZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfREFUQVNPVVJDRTogc3RyaW5nID0gXCJEYXRhc291cmNlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19DT0xVTU5TOiBzdHJpbmcgPSBcIkNvbHVtbnNcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX0NPTFVNTjogc3RyaW5nID0gXCJzdHJpbmdcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX1JBTkdFUzogc3RyaW5nID0gXCJSYW5nZXNcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX1JBTkdFU19FTkQ6IHN0cmluZyA9IFwiL1Jhbmdlc1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfTUlOOiBzdHJpbmcgPSBcIk1pblwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfTUFYOiBzdHJpbmcgPSBcIk1heFwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfUkVDT1JEOiBzdHJpbmcgPSBcIlJvd1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfUkVDT1JEX0VORDogc3RyaW5nID0gXCIvUm93XCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19XSEVSRTogc3RyaW5nID0gXCJXaGVyZVwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfV0hFUkVfRU5EOiBzdHJpbmcgPSBcIi9XaGVyZVwiO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX1JFU1BPTlNFOiBzdHJpbmcgPSBcIlJlc3BvbnNlXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19XU19FUlJPUjogc3RyaW5nID0gXCJFcnJvclwiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfV1NfRVJST1JfQ09ERTogc3RyaW5nID0gXCJlcnJvckNvZGVcIjtcclxuICBzdGF0aWMgcmVhZG9ubHkgTUdfVEFHX1dTX0RFU0NSSVBUSU9OOiBzdHJpbmcgPSBcImRlc2NyaXB0aW9uXCI7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfTUVOVVNfT1BFTjogc3RyaW5nID0gXCJNZW51c1wiO1xyXG4gIHN0YXRpYyByZWFkb25seSBNR19UQUdfTUVOVVNfQ0xPU0U6IHN0cmluZyA9IFwiL01lbnVzXCI7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1HX1RBR19NRU5VOiBzdHJpbmcgPSBcIk1lbnVcIjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
import { NString, List, ApplicationException, StringBuilder, NChar, NNumber } from "@magic-xpa/mscorelib";
|
|
2
2
|
import { XMLConstants } from "../XMLConstants";
|
|
3
|
-
/// <summary> a helper class for the parsing of the XML</summary>
|
|
4
3
|
export class XmlParser {
|
|
5
|
-
/// <summary>
|
|
6
|
-
///
|
|
7
|
-
/// </summary>
|
|
8
|
-
/// <param name="data"></param>
|
|
9
4
|
constructor(data = NString.Empty) {
|
|
10
5
|
this._currIndex = 0;
|
|
11
6
|
this._xmLdata = "";
|
|
12
|
-
this._history = new List();
|
|
7
|
+
this._history = new List();
|
|
13
8
|
this.setXMLdata(data);
|
|
14
9
|
this.setCurrIndex(0);
|
|
15
10
|
}
|
|
16
|
-
/// <summary> parse a string according to a set of delimiters and return the result in a vector</summary>
|
|
17
|
-
/// <param name="str">the String which need be parted </param>
|
|
18
|
-
/// <param name="delimiter">the delimiter which part different parts of str </param>
|
|
19
|
-
/// <param name="isMagicXML">is needed tokenizer working on Magic XML, so the "=" sign will be delited in the end of every first token </param>
|
|
20
|
-
/// <returns> tmpVector dynamically array, which consist tokens in every element, every token is String </returns>
|
|
21
11
|
static getTokens(str, delimiter, isMagicXML = true) {
|
|
22
12
|
let tokensVec = new List();
|
|
23
13
|
let token = null;
|
|
@@ -26,22 +16,17 @@ export class XmlParser {
|
|
|
26
16
|
}
|
|
27
17
|
let strTok = str.split(delimiter.charAt(0));
|
|
28
18
|
for (let i = 0; i < strTok.length; i = i + 1) {
|
|
29
|
-
// Split in C# creates a last empty string token if the source string ends with
|
|
30
|
-
// the delimiter or if the string is empty (as opposed to Java that will ignore it)
|
|
31
|
-
// therefore we have to break this loop if such case occurs.
|
|
32
19
|
if (isMagicXML && i === strTok.length - 1 && strTok.length % 2 === 1) {
|
|
33
20
|
break;
|
|
34
21
|
}
|
|
35
22
|
token = strTok[i];
|
|
36
23
|
if (isMagicXML) {
|
|
37
|
-
// the 1st token in the pair comes with "=", remove it.
|
|
38
24
|
if (i % 2 === 0) {
|
|
39
25
|
token = token.trim();
|
|
40
26
|
if (token.endsWith("=")) {
|
|
41
27
|
token = token.substr(0, token.length - 1);
|
|
42
28
|
}
|
|
43
29
|
}
|
|
44
|
-
// 2nd token in the pair can be an empty string, in that case set it to " ".
|
|
45
30
|
else if (token === "")
|
|
46
31
|
token = " ";
|
|
47
32
|
}
|
|
@@ -51,11 +36,6 @@ export class XmlParser {
|
|
|
51
36
|
}
|
|
52
37
|
return tokensVec;
|
|
53
38
|
}
|
|
54
|
-
/// <summary>unscape from:
|
|
55
|
-
/// {"&",\\, \q, \o, \l, \g, \e, \\r, \\n}, to:
|
|
56
|
-
/// {"&", \, ", ', <, >, =, \r, \n}
|
|
57
|
-
/// <param name="str">String to be converted</param>
|
|
58
|
-
/// <returns>unescaped string</returns>
|
|
59
39
|
static unescape(str) {
|
|
60
40
|
let unescapedString = new StringBuilder(str.length);
|
|
61
41
|
for (let i = 0; i < str.length; i++) {
|
|
@@ -92,11 +72,6 @@ export class XmlParser {
|
|
|
92
72
|
}
|
|
93
73
|
return (unescapedString.ToString());
|
|
94
74
|
}
|
|
95
|
-
/// <summary>escape from:
|
|
96
|
-
/// {\, ", ', <, >, =, \r, \n}, to:
|
|
97
|
-
/// {\\, \q, \0, \l, \g, \e, \\r, \\n}
|
|
98
|
-
/// <param name="str">String to be converted</param>
|
|
99
|
-
/// <returns>escaped string</returns>
|
|
100
75
|
static escape(str) {
|
|
101
76
|
let escapedString = new StringBuilder(str.length * 2);
|
|
102
77
|
for (let i = 0; i < str.length; i++) {
|
|
@@ -132,23 +107,15 @@ export class XmlParser {
|
|
|
132
107
|
}
|
|
133
108
|
return (escapedString.ToString());
|
|
134
109
|
}
|
|
135
|
-
/// <summary>
|
|
136
|
-
/// here we only need to take care of "&" so that Sax parser will be able to handle url
|
|
137
|
-
/// </summary>
|
|
138
|
-
/// <param name="str"></param>
|
|
139
|
-
/// <returns></returns>
|
|
140
110
|
static escapeUrl(str) {
|
|
141
111
|
return NString.Replace(str, "&", "&");
|
|
142
112
|
}
|
|
143
|
-
/// <summary>get next tag name from current index in XML string</summary>
|
|
144
|
-
/// <returns> next tag name </returns>
|
|
145
113
|
getNextTag() {
|
|
146
114
|
if (this._xmLdata.length - this._currIndex <= 1) {
|
|
147
|
-
return null;
|
|
115
|
+
return null;
|
|
148
116
|
}
|
|
149
117
|
for (let tmpIndx = this._currIndex + 1; tmpIndx < this._xmLdata.length; tmpIndx++) {
|
|
150
118
|
let tmpChar = this._xmLdata[tmpIndx];
|
|
151
|
-
// a letter starts an element and ends with " ". "/" starts an element closing and ends with '>'.
|
|
152
119
|
if (NChar.IsLetter(tmpChar) || tmpChar === '/') {
|
|
153
120
|
let endOfTag = NString.IndexOfAny(this._xmLdata, XmlParser.endOfNameChar, tmpIndx, this._xmLdata.length - tmpIndx);
|
|
154
121
|
if (endOfTag === -1)
|
|
@@ -159,34 +126,25 @@ export class XmlParser {
|
|
|
159
126
|
}
|
|
160
127
|
return null;
|
|
161
128
|
}
|
|
162
|
-
/// <summary>Substring of XMLstring</summary>
|
|
163
|
-
/// <returns> substring of XML string -from currIndex to endContext </returns>
|
|
164
129
|
getXMLsubstring(endContext) {
|
|
165
130
|
return this._xmLdata.substr(this._currIndex, endContext - this._currIndex);
|
|
166
131
|
}
|
|
167
|
-
/// <summary>get current element value</summary>
|
|
168
|
-
/// <returns> element's value </returns>
|
|
169
132
|
GetCurrentElementValue() {
|
|
170
133
|
this.setCurrIndex2EndOfTag();
|
|
171
134
|
let endContext = this.getXMLdata().indexOf(XMLConstants.TAG_OPEN, this.getCurrIndex());
|
|
172
|
-
// read value of xml element
|
|
173
135
|
let value = this.getXMLsubstring(endContext);
|
|
174
136
|
this.setCurrIndex2EndOfTag();
|
|
175
137
|
return value;
|
|
176
138
|
}
|
|
177
|
-
/// <summary>set current index (on parsing time) to the end of current tag</summary>
|
|
178
139
|
setCurrIndex2EndOfTag() {
|
|
179
140
|
this._currIndex = this._xmLdata.indexOf(XMLConstants.TAG_CLOSE, this._currIndex) + 1;
|
|
180
141
|
}
|
|
181
|
-
/// <summary>get int from string at parsing time</summary>
|
|
182
142
|
static getInt(valueStr) {
|
|
183
143
|
return NNumber.Parse(valueStr.trim());
|
|
184
144
|
}
|
|
185
|
-
/// <summary>get boolean from string at parsing time</summary>
|
|
186
145
|
static getBoolean(valueStr) {
|
|
187
146
|
return valueStr[0] === '1';
|
|
188
147
|
}
|
|
189
|
-
/// <summary>get/set functions 4 XMLstring & currIndex, for parser</summary>
|
|
190
148
|
getCurrIndex() {
|
|
191
149
|
return this._currIndex;
|
|
192
150
|
}
|
|
@@ -207,81 +165,46 @@ export class XmlParser {
|
|
|
207
165
|
this.setCurrIndex(0);
|
|
208
166
|
}
|
|
209
167
|
}
|
|
210
|
-
/// <summary>
|
|
211
|
-
/// prepare the parser to read from the newXmlString
|
|
212
|
-
/// </summary>
|
|
213
|
-
/// <param name="newXmlString"></param>
|
|
214
168
|
PrepareFormReadString(newXmlString) {
|
|
215
169
|
this.setXMLdata(newXmlString);
|
|
216
170
|
this.setCurrIndex(0);
|
|
217
171
|
}
|
|
218
|
-
/// <summary> push the current parsing information into the history stack</summary>
|
|
219
172
|
push() {
|
|
220
173
|
this._history.push(this._currIndex);
|
|
221
174
|
this._history.push(this._xmLdata);
|
|
222
175
|
}
|
|
223
|
-
/// <summary> restore the previous parsing information from the history stack</summary>
|
|
224
176
|
pop() {
|
|
225
177
|
let count = this._history.length;
|
|
226
178
|
this._xmLdata = this._history.get_Item(count - 1);
|
|
227
179
|
this._currIndex = this._history.get_Item(count - 2);
|
|
228
180
|
this._history.SetSize(count - 2);
|
|
229
181
|
}
|
|
230
|
-
/// <summary>gets a table cache xml and set the xmlparser data and index accordingly</summary>
|
|
231
182
|
loadTableCacheData(data) {
|
|
232
183
|
this.setXMLdata(data);
|
|
233
184
|
this.setCurrIndex(0);
|
|
234
185
|
}
|
|
235
|
-
/// <summary>
|
|
236
|
-
/// Reads the XML from the element at the current position until the end of
|
|
237
|
-
/// the element, returning the contents as a string. This allows deferring the
|
|
238
|
-
/// processing of an element until the time is right to do so.<br/>
|
|
239
|
-
/// The returned string contains the element tag itself. For example:<br/>
|
|
240
|
-
/// - Assuming that the current element is 'element1', with 2 'innerElement' elements, the
|
|
241
|
-
/// resulting string will look like this:<br/>
|
|
242
|
-
/// <element1>
|
|
243
|
-
/// <innerelement/>
|
|
244
|
-
/// <innerelement/>
|
|
245
|
-
/// </element1>
|
|
246
|
-
///
|
|
247
|
-
/// This makes the result valid for processing by this XML parser.
|
|
248
|
-
/// </summary>
|
|
249
|
-
/// <returns></returns>
|
|
250
186
|
ReadToEndOfCurrentElement() {
|
|
251
|
-
// Get the current tag according to the value of _currIndex.
|
|
252
187
|
let currentTag = this.getNextTag();
|
|
253
188
|
let currentTagIndex = this._xmLdata.indexOf(XMLConstants.TAG_OPEN + currentTag, this.getCurrIndex());
|
|
254
|
-
// Find the end of the element's block in the XML.
|
|
255
|
-
// find next open tag
|
|
256
189
|
let nextOpenTagIndex = this._xmLdata.indexOf(XMLConstants.TAG_OPEN, currentTagIndex + 1);
|
|
257
190
|
if (nextOpenTagIndex === -1)
|
|
258
191
|
nextOpenTagIndex = this._xmLdata.length;
|
|
259
|
-
// find a close tag BEFORE the next open tag
|
|
260
192
|
let elementEndIndex = NString.IndexOf(this._xmLdata, XMLConstants.TAG_TERM, this.getCurrIndex(), nextOpenTagIndex - this.getCurrIndex());
|
|
261
193
|
if (elementEndIndex === -1)
|
|
262
|
-
// close tag was not found in range - we have inner elements, look for the full close tag
|
|
263
194
|
elementEndIndex = this._xmLdata.indexOf("/" + currentTag, this.getCurrIndex()) + currentTag.length + XMLConstants.TAG_TERM.length;
|
|
264
195
|
else
|
|
265
196
|
elementEndIndex = elementEndIndex + XMLConstants.TAG_TERM.length;
|
|
266
|
-
// Copy the element data so it can be returned.
|
|
267
197
|
let elementBlock = this.getXMLsubstring(elementEndIndex);
|
|
268
|
-
// Move the parser to the end of the element block.
|
|
269
198
|
this.setCurrIndex(elementEndIndex);
|
|
270
199
|
return elementBlock;
|
|
271
200
|
}
|
|
272
201
|
ReadContentOfCurrentElement() {
|
|
273
|
-
// Get the current tag according to the value of _currIndex.
|
|
274
202
|
let currentTag = this.getNextTag();
|
|
275
|
-
// Find the end of the element's block in the XML.
|
|
276
203
|
let elementEndIndex = this._xmLdata.indexOf("</" + currentTag + ">", this.getCurrIndex());
|
|
277
204
|
if (elementEndIndex === -1)
|
|
278
|
-
// Can't find the end of the current element - either XML is faulty or the element is empty.
|
|
279
205
|
return NString.Empty;
|
|
280
|
-
// Move to the end of the opening tag
|
|
281
206
|
this.setCurrIndex2EndOfTag();
|
|
282
|
-
// Copy the content of the element (from the end of the opening tag to the beginning of the closing tag).
|
|
283
207
|
let elementBlock = this.getXMLsubstring(elementEndIndex);
|
|
284
|
-
// Move the parser to the end of the element block.
|
|
285
208
|
this.setCurrIndex(elementEndIndex);
|
|
286
209
|
this.setCurrIndex2EndOfTag();
|
|
287
210
|
return elementBlock;
|
|
@@ -292,29 +215,9 @@ export class XmlParser {
|
|
|
292
215
|
}
|
|
293
216
|
return this.ToString_1(headCharCount, tailCharCount);
|
|
294
217
|
}
|
|
295
|
-
/// <summary>
|
|
296
|
-
/// Generates a string that visualizes the XML parser state (e.g. for debug watch list.)<br/>
|
|
297
|
-
/// The method will show the XML data, trimming it to 20 characters before the
|
|
298
|
-
/// current position (_currIndex) and up to 50 characters after the current position.
|
|
299
|
-
/// The current position itself will be marked with a marker that looks like:
|
|
300
|
-
/// |-{current index}-| <br/>
|
|
301
|
-
/// The marker will be placed immediately before _xmlData[_currIndex].
|
|
302
|
-
/// </summary>
|
|
303
|
-
/// <returns></returns>
|
|
304
218
|
ToString_0() {
|
|
305
219
|
return this.toString(20, 50);
|
|
306
220
|
}
|
|
307
|
-
/// <summary>
|
|
308
|
-
/// Generates a string that visualizes the XML parser state (e.g. for debug watch list.)<br/>
|
|
309
|
-
/// The method will show the XML data, trimming it to headCharCount characters before the
|
|
310
|
-
/// current position (_currIndex) and up to tailCharCount characters after the current position.
|
|
311
|
-
/// The current position itself will be marked with a marker that looks like:
|
|
312
|
-
/// |-{current index}-| <br/>
|
|
313
|
-
/// The marker will be placed immediately before _xmlData[_currIndex].
|
|
314
|
-
/// </summary>
|
|
315
|
-
/// <param name="headCharCount">Number of characters to show before the current position marker.</param>
|
|
316
|
-
/// <param name="tailCharCount">Number of characters to show after the current position marker.</param>
|
|
317
|
-
/// <returns></returns>
|
|
318
221
|
ToString_1(headCharCount, tailCharCount) {
|
|
319
222
|
let markerPosition = Math.min(this._currIndex, this._xmLdata.length);
|
|
320
223
|
let segmentStartIndex = Math.max(0, markerPosition - headCharCount);
|
|
@@ -341,4 +244,4 @@ export class XmlParser {
|
|
|
341
244
|
}
|
|
342
245
|
}
|
|
343
246
|
XmlParser.endOfNameChar = [' ', '>'];
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWG1sUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdXRpbHMvc3JjL1htbC9YbWxQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFjLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsaUVBQWlFO0FBQ2pFLE1BQU0sT0FBTyxTQUFTO0lBT3BCLGFBQWE7SUFDYixHQUFHO0lBQ0gsY0FBYztJQUNkLCtCQUErQjtJQUMvQixZQUFZLE9BQWUsT0FBTyxDQUFDLEtBQUs7UUFSaEMsZUFBVSxHQUFXLENBQUMsQ0FBQztRQUN2QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGFBQVEsR0FBMEIsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdEQUF3RDtRQU81RyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELHlHQUF5RztJQUN6Ryw4REFBOEQ7SUFDOUQsb0ZBQW9GO0lBQ3BGLCtJQUErSTtJQUMvSSxrSEFBa0g7SUFDbEgsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFXLEVBQUUsU0FBaUIsRUFBRSxhQUFzQixJQUFJO1FBQ3pFLElBQUksU0FBUyxHQUFpQixJQUFJLElBQUksRUFBVSxDQUFDO1FBQ2pELElBQUksS0FBSyxHQUFXLElBQUksQ0FBQztRQUV6QixJQUFJLFVBQVUsRUFBRTtZQUNkLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEI7UUFFRCxJQUFJLE1BQU0sR0FBYSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMs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QUFDO1NBQzlCO0lBQ0gsQ0FBQzs7QUE5WmMsdUJBQWEsR0FBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TlN0cmluZywgTGlzdCwgQXBwbGljYXRpb25FeGNlcHRpb24sIFN0cmluZ0J1aWxkZXIsIERpY3Rpb25hcnksIE5DaGFyLCBOTnVtYmVyfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtYTUxDb25zdGFudHN9IGZyb20gXCIuLi9YTUxDb25zdGFudHNcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT4gYSBoZWxwZXIgY2xhc3MgZm9yIHRoZSBwYXJzaW5nIG9mIHRoZSBYTUw8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBYbWxQYXJzZXIge1xyXG4gIHByaXZhdGUgc3RhdGljIGVuZE9mTmFtZUNoYXI6IHN0cmluZ1tdID0gWycgJywgJz4nXTtcclxuXHJcbiAgcHJpdmF0ZSBfY3VyckluZGV4OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3htTGRhdGE6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHJpdmF0ZSBfaGlzdG9yeTogTGlzdDxudW1iZXIgfCBzdHJpbmc+ID0gbmV3IExpc3QoKTsgLy8gSW4gb3JkZXIgdG8gYWxsb3cgcmVjdXJzaXZlIHBhcnNpbmcgd2Ugc2F2ZSBwcmV2IGRhdGFcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGF0YVwiPjwvcGFyYW0+XHJcbiAgY29uc3RydWN0b3IoZGF0YTogc3RyaW5nID0gTlN0cmluZy5FbXB0eSkge1xyXG4gICAgdGhpcy5zZXRYTUxkYXRhKGRhdGEpO1xyXG4gICAgdGhpcy5zZXRDdXJySW5kZXgoMCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHBhcnNlIGEgc3RyaW5nIGFjY29yZGluZyB0byBhIHNldCBvZiBkZWxpbWl0ZXJzIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBpbiBhIHZlY3Rvcjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgU3RyaW5nIHdoaWNoIG5lZWQgYmUgcGFydGVkIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVsaW1pdGVyXCI+dGhlIGRlbGltaXRlciB3aGljaCBwYXJ0IGRpZmZlcmVudCBwYXJ0cyBvZiBzdHIgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc01hZ2ljWE1MXCI+aXMgbmVlZGVkIHRva2VuaXplciB3b3JraW5nIG9uIE1hZ2ljIFhNTCwgc28gdGhlIFwiPVwiIHNpZ24gd2lsbCBiZSBkZWxpdGVkIGluIHRoZSBlbmQgb2YgZXZlcnkgZmlyc3QgdG9rZW4gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRtcFZlY3RvciBkeW5hbWljYWxseSBhcnJheSwgd2hpY2ggY29uc2lzdCB0b2tlbnMgaW4gZXZlcnkgZWxlbWVudCwgZXZlcnkgdG9rZW4gaXMgU3RyaW5nIDwvcmV0dXJucz5cclxuICBzdGF0aWMgZ2V0VG9rZW5zKHN0cjogc3RyaW5nLCBkZWxpbWl0ZXI6IHN0cmluZywgaXNNYWdpY1hNTDogYm9vbGVhbiA9IHRydWUpOiBMaXN0PHN0cmluZz4ge1xyXG4gICAgbGV0IHRva2Vuc1ZlYzogTGlzdDxzdHJpbmc+ID0gbmV3IExpc3Q8c3RyaW5nPigpO1xyXG4gICAgbGV0IHRva2VuOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIGlmIChpc01hZ2ljWE1MKSB7XHJcbiAgICAgIHN0ciA9IHN0ci50cmltKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHN0clRvazogc3RyaW5nW10gPSBzdHIuc3BsaXQoZGVsaW1pdGVyLmNoYXJBdCgwKSk7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN0clRvay5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAvLyBTcGxpdCBpbiBDIyBjcmVhdGVzIGEgbGFzdCBlbXB0eSBzdHJpbmcgdG9rZW4gaWYgdGhlIHNvdXJjZSBzdHJpbmcgZW5kcyB3aXRoXHJcbiAgICAgIC8vIHRoZSBkZWxpbWl0ZXIgb3IgaWYgdGhlIHN0cmluZyBpcyBlbXB0eSAoYXMgb3Bwb3NlZCB0byBKYXZhIHRoYXQgd2lsbCBpZ25vcmUgaXQpXHJcbiAgICAgIC8vIHRoZXJlZm9yZSB3ZSBoYXZlIHRvIGJyZWFrIHRoaXMgbG9vcCBpZiBzdWNoIGNhc2Ugb2NjdXJzLlxyXG4gICAgICBpZiAoaXNNYWdpY1hNTCAmJiBpID09PSBzdHJUb2subGVuZ3RoIC0gMSAmJiBzdHJUb2subGVuZ3RoICUgMiA9PT0gMSkge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0b2tlbiA9IHN0clRva1tpXTtcclxuICAgICAgaWYgKGlzTWFnaWNYTUwpIHtcclxuICAgICAgICAvLyB0aGUgMXN0IHRva2VuIGluIHRoZSBwYWlyIGNvbWVzIHdpdGggXCI9XCIsIHJlbW92ZSBpdC5cclxuICAgICAgICBpZiAoaSAlIDIgPT09IDApIHtcclxuICAgICAgICAgIHRva2VuID0gdG9rZW4udHJpbSgpO1xyXG4gICAgICAgICAgaWYgKHRva2VuLmVuZHNXaXRoKFwiPVwiKSkge1xyXG4gICAgICAgICAgICB0b2tlbiA9IHRva2VuLnN1YnN0cigwLCB0b2tlbi5sZW5ndGggLSAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gMm5kIHRva2VuIGluIHRoZSBwYWlyIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcsIGluIHRoYXQgY2FzZSBzZXQgaXQgdG8gXCIgXCIuXHJcbiAgICAgICAgZWxzZSBpZiAodG9rZW4gPT09IFwiXCIpXHJcbiAgICAgICAgICB0b2tlbiA9IFwiIFwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5YTUxQYXJzZXIuZ2V0VG9rZW5zKCkgbnVsbCB0b2tlbiB2YWx1ZVwiKTtcclxuXHJcbiAgICAgIHRva2Vuc1ZlYy5wdXNoKHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9rZW5zVmVjO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnVuc2NhcGUgZnJvbTpcclxuICAvLy8ge1wiJmFtcDtcIixcXFxcLCBcXHEsIFxcbywgXFxsLCBcXGcsIFxcZSwgXFxcXHIsIFxcXFxufSwgdG86XHJcbiAgLy8vIHtcIiZcIiwgICAgIFxcLCAgXCIsICAnLCAgPCwgID4sICA9LCAgXFxyLCAgXFxufVxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPlN0cmluZyB0byBiZSBjb252ZXJ0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz51bmVzY2FwZWQgc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBzdGF0aWMgdW5lc2NhcGUoc3RyOiBzdHJpbmcpOiBzdHJpbmdcclxuICB7XHJcbiAgICBsZXQgdW5lc2NhcGVkU3RyaW5nOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoc3RyLmxlbmd0aCk7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoc3RyW2ldICE9PSAnXFxcXCcpIHtcclxuICAgICAgICB1bmVzY2FwZWRTdHJpbmcuQXBwZW5kKHN0cltpXSk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAoc3RyWysraV0pIHtcclxuICAgICAgICBjYXNlICdxJzpcclxuICAgICAgICAgIHVuZXNjYXBlZFN0cmluZy5BcHBlbmQoJ1xcXCInKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ28nOlxyXG4gICAgICAgICAgdW5lc2NhcGVkU3RyaW5nLkFwcGVuZCgnXFwnJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdsJzpcclxuICAgICAgICAgIHVuZXNjYXBlZFN0cmluZy5BcHBlbmQoJzwnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2cnOlxyXG4gICAgICAgICAgdW5lc2NhcGVkU3RyaW5nLkFwcGVuZCgnPicpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZSc6XHJcbiAgICAgICAgICB1bmVzY2FwZWRTdHJpbmcuQXBwZW5kKCc9Jyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdyJzpcclxuICAgICAgICAgIHVuZXNjYXBlZFN0cmluZy5BcHBlbmQoJ1xccicpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbic6XHJcbiAgICAgICAgICB1bmVzY2FwZWRTdHJpbmcuQXBwZW5kKCdcXG4nKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB1bmVzY2FwZWRTdHJpbmcuQXBwZW5kKHN0cltpXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICh1bmVzY2FwZWRTdHJpbmcuVG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+ZXNjYXBlIGZyb206XHJcbiAgLy8vIHtcXCwgIFwiLCAgJywgIDwsICAgPiwgID0sICBcXHIsICBcXG59LCB0bzpcclxuICAvLy8ge1xcXFwsIFxccSwgXFwwLCBcXGwsICBcXGcsIFxcZSwgXFxcXHIsIFxcXFxufVxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPlN0cmluZyB0byBiZSBjb252ZXJ0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5lc2NhcGVkIHN0cmluZzwvcmV0dXJucz5cclxuICBwdWJsaWMgc3RhdGljIGVzY2FwZShzdHI6IHN0cmluZyk6IHN0cmluZ1xyXG4gIHtcclxuICAgIGxldCBlc2NhcGVkU3RyaW5nOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoc3RyLmxlbmd0aCAqIDIpO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgc3dpdGNoIChzdHJbaV0pIHtcclxuICAgICAgICBjYXNlICdcXFxcJzpcclxuICAgICAgICAgIGVzY2FwZWRTdHJpbmcuQXBwZW5kKFwiXFxcXFxcXFxcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdcIic6XHJcbiAgICAgICAgICBlc2NhcGVkU3RyaW5nLkFwcGVuZChcIlxcXFxxXCIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnXFwnJzpcclxuICAgICAgICAgIGVzY2FwZWRTdHJpbmcuQXBwZW5kKFwiXFxcXG9cIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICc8JzpcclxuICAgICAgICAgIGVzY2FwZWRTdHJpbmcuQXBwZW5kKFwiXFxcXGxcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICc+JzpcclxuICAgICAgICAgIGVzY2FwZWRTdHJpbmcuQXBwZW5kKFwiXFxcXGdcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICc9JzpcclxuICAgICAgICAgIGVzY2FwZWRTdHJpbmcuQXBwZW5kKFwiXFxcXGVcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdcXHInOlxyXG4gICAgICAgICAgZXNjYXBlZFN0cmluZy5BcHBlbmQoXCJcXHJcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdcXG4nOlxyXG4gICAgICAgICAgZXNjYXBlZFN0cmluZy5BcHBlbmQoXCJcXG5cIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgZXNjYXBlZFN0cmluZy5BcHBlbmQoc3RyW2ldKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChlc2NhcGVkU3RyaW5nLlRvU3RyaW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBoZXJlIHdlIG9ubHkgbmVlZCB0byB0YWtlIGNhcmUgb2YgXCImXCIgc28gdGhhdCBTYXggcGFyc2VyIHdpbGwgYmUgYWJsZSB0byBoYW5kbGUgdXJsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIGVzY2FwZVVybChzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gTlN0cmluZy5SZXBsYWNlKHN0ciwgXCImXCIsIFwiJmFtcDtcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0IG5leHQgdGFnIG5hbWUgZnJvbSBjdXJyZW50IGluZGV4IGluIFhNTCBzdHJpbmc8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBuZXh0IHRhZyBuYW1lIDwvcmV0dXJucz5cclxuICBnZXROZXh0VGFnKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5feG1MZGF0YS5sZW5ndGggLSB0aGlzLl9jdXJySW5kZXggPD0gMSkge1xyXG4gICAgICByZXR1cm4gbnVsbDsgIC8vIGVuZCBvZiBYTUwgc3RyaW5nXHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgdG1wSW5keDogbnVtYmVyID0gdGhpcy5fY3VyckluZGV4ICsgMTsgdG1wSW5keCA8IHRoaXMuX3htTGRhdGEubGVuZ3RoOyB0bXBJbmR4KyspIHtcclxuICAgICAgbGV0IHRtcENoYXI6IHN0cmluZyA9IHRoaXMuX3htTGRhdGFbdG1wSW5keF07XHJcblxyXG4gICAgICAvLyBhIGxldHRlciBzdGFydHMgYW4gZWxlbWVudCBhbmQgZW5kcyB3aXRoIFwiIFwiLiBcIi9cIiBzdGFydHMgYW4gZWxlbWVudCBjbG9zaW5nIGFuZCBlbmRzIHdpdGggJz4nLlxyXG4gICAgICBpZiAoTkNoYXIuSXNMZXR0ZXIodG1wQ2hhcikgfHwgdG1wQ2hhciA9PT0gJy8nKSB7XHJcbiAgICAgICAgbGV0IGVuZE9mVGFnOiBudW1iZXIgPSBOU3RyaW5nLkluZGV4T2ZBbnkodGhpcy5feG1MZGF0YSwgWG1sUGFyc2VyLmVuZE9mTmFtZUNoYXIsIHRtcEluZHgsIHRoaXMuX3htTGRhdGEubGVuZ3RoIC0gdG1wSW5keCk7XHJcblxyXG4gICAgICAgIGlmIChlbmRPZlRhZyA9PT0gLTEpXHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5feG1MZGF0YS5zdWJzdHIodG1wSW5keCwgZW5kT2ZUYWcgLSB0bXBJbmR4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlN1YnN0cmluZyBvZiBYTUxzdHJpbmc8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdWJzdHJpbmcgb2YgWE1MIHN0cmluZyAtZnJvbSBjdXJySW5kZXggdG8gZW5kQ29udGV4dCA8L3JldHVybnM+XHJcbiAgZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5feG1MZGF0YS5zdWJzdHIodGhpcy5fY3VyckluZGV4LCBlbmRDb250ZXh0IC0gdGhpcy5fY3VyckluZGV4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXQgY3VycmVudCBlbGVtZW50IHZhbHVlPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gZWxlbWVudCdzIHZhbHVlIDwvcmV0dXJucz5cclxuICBHZXRDdXJyZW50RWxlbWVudFZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICB0aGlzLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHRoaXMuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19PUEVOLCB0aGlzLmdldEN1cnJJbmRleCgpKTtcclxuICAgIC8vIHJlYWQgdmFsdWUgb2YgeG1sIGVsZW1lbnRcclxuICAgIGxldCB2YWx1ZTogc3RyaW5nID0gdGhpcy5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICB0aGlzLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnNldCBjdXJyZW50IGluZGV4IChvbiBwYXJzaW5nIHRpbWUpIHRvIHRoZSBlbmQgb2YgY3VycmVudCB0YWc8L3N1bW1hcnk+XHJcbiAgc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY3VyckluZGV4ID0gdGhpcy5feG1MZGF0YS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHRoaXMuX2N1cnJJbmRleCkgKyAxO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldCBpbnQgZnJvbSBzdHJpbmcgYXQgcGFyc2luZyB0aW1lPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBnZXRJbnQodmFsdWVTdHI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTk51bWJlci5QYXJzZSh2YWx1ZVN0ci50cmltKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldCBib29sZWFuIGZyb20gc3RyaW5nIGF0IHBhcnNpbmcgdGltZTwvc3VtbWFyeT5cclxuICBzdGF0aWMgZ2V0Qm9vbGVhbih2YWx1ZVN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWVTdHJbMF0gPT09ICcxJztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXQvc2V0IGZ1bmN0aW9ucyA0IFhNTHN0cmluZyAmIGN1cnJJbmRleCwgZm9yIHBhcnNlcjwvc3VtbWFyeT5cclxuICBnZXRDdXJySW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJySW5kZXg7XHJcbiAgfVxyXG5cclxuICBnZXRYTUxkYXRhKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5feG1MZGF0YTtcclxuICB9XHJcblxyXG4gIGFkZDJDdXJySW5kZXgoYWRkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2N1cnJJbmRleCA9IHRoaXMuX2N1cnJJbmRleCArIGFkZDtcclxuICB9XHJcblxyXG4gIHNldEN1cnJJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jdXJySW5kZXggPSBpbmRleDtcclxuICB9XHJcblxyXG4gIHNldFhNTGRhdGEoZGF0YTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoZGF0YSAhPT0gbnVsbClcclxuICAgICAgdGhpcy5feG1MZGF0YSA9IGRhdGEudHJpbSgpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX3htTGRhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLnNldEN1cnJJbmRleCgwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcHJlcGFyZSB0aGUgcGFyc2VyIHRvIHJlYWQgZnJvbSB0aGUgbmV3WG1sU3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJuZXdYbWxTdHJpbmdcIj48L3BhcmFtPlxyXG4gIFByZXBhcmVGb3JtUmVhZFN0cmluZyhuZXdYbWxTdHJpbmc6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRYTUxkYXRhKG5ld1htbFN0cmluZyk7XHJcbiAgICB0aGlzLnNldEN1cnJJbmRleCgwKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcHVzaCB0aGUgY3VycmVudCBwYXJzaW5nIGluZm9ybWF0aW9uIGludG8gdGhlIGhpc3Rvcnkgc3RhY2s8L3N1bW1hcnk+XHJcbiAgcHVzaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hpc3RvcnkucHVzaCh0aGlzLl9jdXJySW5kZXgpO1xyXG4gICAgdGhpcy5faGlzdG9yeS5wdXNoKHRoaXMuX3htTGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXN0b3JlIHRoZSBwcmV2aW91cyBwYXJzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGhpc3Rvcnkgc3RhY2s8L3N1bW1hcnk+XHJcbiAgcG9wKCk6IHZvaWQge1xyXG4gICAgbGV0IGNvdW50OiBudW1iZXIgPSB0aGlzLl9oaXN0b3J5Lmxlbmd0aDtcclxuXHJcbiAgICB0aGlzLl94bUxkYXRhID0gPHN0cmluZz50aGlzLl9oaXN0b3J5LmdldF9JdGVtKGNvdW50IC0gMSk7XHJcbiAgICB0aGlzLl9jdXJySW5kZXggPSA8bnVtYmVyPnRoaXMuX2hpc3RvcnkuZ2V0X0l0ZW0oY291bnQgLSAyKTtcclxuXHJcbiAgICB0aGlzLl9oaXN0b3J5LlNldFNpemUoY291bnQgLSAyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXRzIGEgdGFibGUgY2FjaGUgeG1sIGFuZCBzZXQgdGhlIHhtbHBhcnNlciBkYXRhIGFuZCBpbmRleCBhY2NvcmRpbmdseTwvc3VtbWFyeT5cclxuICBsb2FkVGFibGVDYWNoZURhdGEoZGF0YTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFhNTGRhdGEoZGF0YSk7XHJcbiAgICB0aGlzLnNldEN1cnJJbmRleCgwKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVhZHMgdGhlIFhNTCBmcm9tIHRoZSBlbGVtZW50IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIHVudGlsIHRoZSBlbmQgb2ZcclxuICAvLy8gdGhlIGVsZW1lbnQsIHJldHVybmluZyB0aGUgY29udGVudHMgYXMgYSBzdHJpbmcuIFRoaXMgYWxsb3dzIGRlZmVycmluZyB0aGVcclxuICAvLy8gcHJvY2Vzc2luZyBvZiBhbiBlbGVtZW50IHVudGlsIHRoZSB0aW1lIGlzIHJpZ2h0IHRvIGRvIHNvLjxici8+XHJcbiAgLy8vIFRoZSByZXR1cm5lZCBzdHJpbmcgY29udGFpbnMgdGhlIGVsZW1lbnQgdGFnIGl0c2VsZi4gRm9yIGV4YW1wbGU6PGJyLz5cclxuICAvLy8gLSBBc3N1bWluZyB0aGF0IHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgJ2VsZW1lbnQxJywgd2l0aCAyICdpbm5lckVsZW1lbnQnIGVsZW1lbnRzLCB0aGVcclxuICAvLy8gcmVzdWx0aW5nIHN0cmluZyB3aWxsIGxvb2sgbGlrZSB0aGlzOjxici8+XHJcbiAgLy8vIDxlbGVtZW50MT5cclxuICAvLy8gICA8aW5uZXJlbGVtZW50Lz5cclxuICAvLy8gICA8aW5uZXJlbGVtZW50Lz5cclxuICAvLy8gPC9lbGVtZW50MT5cclxuICAvLy9cclxuICAvLy8gVGhpcyBtYWtlcyB0aGUgcmVzdWx0IHZhbGlkIGZvciBwcm9jZXNzaW5nIGJ5IHRoaXMgWE1MIHBhcnNlci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgUmVhZFRvRW5kT2ZDdXJyZW50RWxlbWVudCgpOiBzdHJpbmcge1xyXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHRhZyBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIF9jdXJySW5kZXguXHJcbiAgICBsZXQgY3VycmVudFRhZzogc3RyaW5nID0gdGhpcy5nZXROZXh0VGFnKCk7XHJcbiAgICBsZXQgY3VycmVudFRhZ0luZGV4OiBudW1iZXIgPSB0aGlzLl94bUxkYXRhLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19PUEVOICsgY3VycmVudFRhZywgdGhpcy5nZXRDdXJySW5kZXgoKSk7XHJcblxyXG4gICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSBlbGVtZW50J3MgYmxvY2sgaW4gdGhlIFhNTC5cclxuICAgIC8vIGZpbmQgbmV4dCBvcGVuIHRhZ1xyXG4gICAgbGV0IG5leHRPcGVuVGFnSW5kZXg6IG51bWJlciA9IHRoaXMuX3htTGRhdGEuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIGN1cnJlbnRUYWdJbmRleCArIDEpO1xyXG4gICAgaWYgKG5leHRPcGVuVGFnSW5kZXggPT09IC0xKVxyXG4gICAgICBuZXh0T3BlblRhZ0luZGV4ID0gdGhpcy5feG1MZGF0YS5sZW5ndGg7XHJcblxyXG4gICAgLy8gZmluZCBhIGNsb3NlIHRhZyBCRUZPUkUgdGhlIG5leHQgb3BlbiB0YWdcclxuICAgIGxldCBlbGVtZW50RW5kSW5kZXg6IG51bWJlciA9IE5TdHJpbmcuSW5kZXhPZih0aGlzLl94bUxkYXRhLCBYTUxDb25zdGFudHMuVEFHX1RFUk0sIHRoaXMuZ2V0Q3VyckluZGV4KCksIG5leHRPcGVuVGFnSW5kZXggLSB0aGlzLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbGVtZW50RW5kSW5kZXggPT09IC0xKVxyXG4gICAgLy8gY2xvc2UgdGFnIHdhcyBub3QgZm91bmQgaW4gcmFuZ2UgLSB3ZSBoYXZlIGlubmVyIGVsZW1lbnRzLCBsb29rIGZvciB0aGUgZnVsbCBjbG9zZSB0YWdcclxuICAgICAgZWxlbWVudEVuZEluZGV4ID0gdGhpcy5feG1MZGF0YS5pbmRleE9mKFwiL1wiICsgY3VycmVudFRhZywgdGhpcy5nZXRDdXJySW5kZXgoKSkgKyBjdXJyZW50VGFnLmxlbmd0aCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGg7XHJcbiAgICBlbHNlXHJcbiAgICAgIGVsZW1lbnRFbmRJbmRleCA9IGVsZW1lbnRFbmRJbmRleCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGg7XHJcblxyXG4gICAgLy8gQ29weSB0aGUgZWxlbWVudCBkYXRhIHNvIGl0IGNhbiBiZSByZXR1cm5lZC5cclxuICAgIGxldCBlbGVtZW50QmxvY2s6IHN0cmluZyA9IHRoaXMuZ2V0WE1Mc3Vic3RyaW5nKGVsZW1lbnRFbmRJbmRleCk7XHJcblxyXG4gICAgLy8gTW92ZSB0aGUgcGFyc2VyIHRvIHRoZSBlbmQgb2YgdGhlIGVsZW1lbnQgYmxvY2suXHJcbiAgICB0aGlzLnNldEN1cnJJbmRleChlbGVtZW50RW5kSW5kZXgpO1xyXG5cclxuICAgIHJldHVybiBlbGVtZW50QmxvY2s7XHJcbiAgfVxyXG5cclxuICBSZWFkQ29udGVudE9mQ3VycmVudEVsZW1lbnQoKTogc3RyaW5nIHtcclxuICAgIC8vIEdldCB0aGUgY3VycmVudCB0YWcgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiBfY3VyckluZGV4LlxyXG4gICAgbGV0IGN1cnJlbnRUYWc6IHN0cmluZyA9IHRoaXMuZ2V0TmV4dFRhZygpO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGVuZCBvZiB0aGUgZWxlbWVudCdzIGJsb2NrIGluIHRoZSBYTUwuXHJcbiAgICBsZXQgZWxlbWVudEVuZEluZGV4OiBudW1iZXIgPSB0aGlzLl94bUxkYXRhLmluZGV4T2YoXCI8L1wiICsgY3VycmVudFRhZyArIFwiPlwiLCB0aGlzLmdldEN1cnJJbmRleCgpKTtcclxuXHJcbiAgICBpZiAoZWxlbWVudEVuZEluZGV4ID09PSAtMSlcclxuICAgICAgLy8gQ2FuJ3QgZmluZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQgLSBlaXRoZXIgWE1MIGlzIGZhdWx0eSBvciB0aGUgZWxlbWVudCBpcyBlbXB0eS5cclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRW1wdHk7XHJcblxyXG4gICAgLy8gTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBvcGVuaW5nIHRhZ1xyXG4gICAgdGhpcy5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuXHJcbiAgICAvLyBDb3B5IHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50IChmcm9tIHRoZSBlbmQgb2YgdGhlIG9wZW5pbmcgdGFnIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNsb3NpbmcgdGFnKS5cclxuICAgIGxldCBlbGVtZW50QmxvY2s6IHN0cmluZyA9IHRoaXMuZ2V0WE1Mc3Vic3RyaW5nKGVsZW1lbnRFbmRJbmRleCk7XHJcblxyXG4gICAgLy8gTW92ZSB0aGUgcGFyc2VyIHRvIHRoZSBlbmQgb2YgdGhlIGVsZW1lbnQgYmxvY2suXHJcbiAgICB0aGlzLnNldEN1cnJJbmRleChlbGVtZW50RW5kSW5kZXgpO1xyXG4gICAgdGhpcy5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuXHJcbiAgICByZXR1cm4gZWxlbWVudEJsb2NrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZW5lcmF0ZXMgYSBzdHJpbmcgdGhhdCB2aXN1YWxpemVzIHRoZSBYTUwgcGFyc2VyIHN0YXRlIChlLmcuIGZvciBkZWJ1ZyB3YXRjaCBsaXN0Lik8YnIvPlxyXG4gIC8vLyBUaGUgbWV0aG9kIHdpbGwgc2hvdyB0aGUgWE1MIGRhdGEsIHRyaW1taW5nIGl0IHRvIDIwIGNoYXJhY3RlcnMgYmVmb3JlIHRoZVxyXG4gIC8vLyBjdXJyZW50IHBvc2l0aW9uIChfY3VyckluZGV4KSBhbmQgdXAgdG8gNTAgY2hhcmFjdGVycyBhZnRlciB0aGUgY3VycmVudCBwb3NpdGlvbi5cclxuICAvLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gaXRzZWxmIHdpbGwgYmUgbWFya2VkIHdpdGggYSBtYXJrZXIgdGhhdCBsb29rcyBsaWtlOlxyXG4gIC8vLyB8LXtjdXJyZW50IGluZGV4fS18IDxici8+XHJcbiAgLy8vIFRoZSBtYXJrZXIgd2lsbCBiZSBwbGFjZWQgaW1tZWRpYXRlbHkgYmVmb3JlIF94bWxEYXRhW19jdXJySW5kZXhdLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaGVhZENoYXJDb3VudFwiPk51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHNob3cgYmVmb3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uIG1hcmtlci48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRhaWxDaGFyQ291bnRcIj5OdW1iZXIgb2YgY2hhcmFjdGVycyB0byBzaG93IGFmdGVyIHRoZSBjdXJyZW50IHBvc2l0aW9uIG1hcmtlci48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgdG9TdHJpbmcoKTogc3RyaW5nO1xyXG4gIHRvU3RyaW5nKGhlYWRDaGFyQ291bnQ6IG51bWJlciwgdGFpbENoYXJDb3VudDogbnVtYmVyKTogc3RyaW5nO1xyXG4gIHRvU3RyaW5nKGhlYWRDaGFyQ291bnQ/OiBudW1iZXIsIHRhaWxDaGFyQ291bnQ/OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuVG9TdHJpbmdfMCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuVG9TdHJpbmdfMShoZWFkQ2hhckNvdW50LCB0YWlsQ2hhckNvdW50KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2VuZXJhdGVzIGEgc3RyaW5nIHRoYXQgdmlzdWFsaXplcyB0aGUgWE1MIHBhcnNlciBzdGF0ZSAoZS5nLiBmb3IgZGVidWcgd2F0Y2ggbGlzdC4pPGJyLz5cclxuICAvLy8gVGhlIG1ldGhvZCB3aWxsIHNob3cgdGhlIFhNTCBkYXRhLCB0cmltbWluZyBpdCB0byAyMCBjaGFyYWN0ZXJzIGJlZm9yZSB0aGVcclxuICAvLy8gY3VycmVudCBwb3NpdGlvbiAoX2N1cnJJbmRleCkgYW5kIHVwIHRvIDUwIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgLy8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIGl0c2VsZiB3aWxsIGJlIG1hcmtlZCB3aXRoIGEgbWFya2VyIHRoYXQgbG9va3MgbGlrZTpcclxuICAvLy8gfC17Y3VycmVudCBpbmRleH0tfCA8YnIvPlxyXG4gIC8vLyBUaGUgbWFya2VyIHdpbGwgYmUgcGxhY2VkIGltbWVkaWF0ZWx5IGJlZm9yZSBfeG1sRGF0YVtfY3VyckluZGV4XS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBUb1N0cmluZ18wKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50b1N0cmluZygyMCwgNTApO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZW5lcmF0ZXMgYSBzdHJpbmcgdGhhdCB2aXN1YWxpemVzIHRoZSBYTUwgcGFyc2VyIHN0YXRlIChlLmcuIGZvciBkZWJ1ZyB3YXRjaCBsaXN0Lik8YnIvPlxyXG4gIC8vLyBUaGUgbWV0aG9kIHdpbGwgc2hvdyB0aGUgWE1MIGRhdGEsIHRyaW1taW5nIGl0IHRvIGhlYWRDaGFyQ291bnQgY2hhcmFjdGVycyBiZWZvcmUgdGhlXHJcbiAgLy8vIGN1cnJlbnQgcG9zaXRpb24gKF9jdXJySW5kZXgpIGFuZCB1cCB0byB0YWlsQ2hhckNvdW50IGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgLy8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIGl0c2VsZiB3aWxsIGJlIG1hcmtlZCB3aXRoIGEgbWFya2VyIHRoYXQgbG9va3MgbGlrZTpcclxuICAvLy8gfC17Y3VycmVudCBpbmRleH0tfCA8YnIvPlxyXG4gIC8vLyBUaGUgbWFya2VyIHdpbGwgYmUgcGxhY2VkIGltbWVkaWF0ZWx5IGJlZm9yZSBfeG1sRGF0YVtfY3VyckluZGV4XS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImhlYWRDaGFyQ291bnRcIj5OdW1iZXIgb2YgY2hhcmFjdGVycyB0byBzaG93IGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbiBtYXJrZXIuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0YWlsQ2hhckNvdW50XCI+TnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc2hvdyBhZnRlciB0aGUgY3VycmVudCBwb3NpdGlvbiBtYXJrZXIuPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgVG9TdHJpbmdfMShoZWFkQ2hhckNvdW50OiBudW1iZXIsIHRhaWxDaGFyQ291bnQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgbWFya2VyUG9zaXRpb246IG51bWJlciA9IE1hdGgubWluKHRoaXMuX2N1cnJJbmRleCwgdGhpcy5feG1MZGF0YS5sZW5ndGgpO1xyXG4gICAgbGV0IHNlZ21lbnRTdGFydEluZGV4OiBudW1iZXIgPSBNYXRoLm1heCgwLCBtYXJrZXJQb3NpdGlvbiAtIGhlYWRDaGFyQ291bnQpO1xyXG4gICAgbGV0IHNlZ21lbnRFbmRJbmRleDogbnVtYmVyID0gTWF0aC5taW4odGhpcy5feG1MZGF0YS5sZW5ndGgsIG1hcmtlclBvc2l0aW9uICsgdGFpbENoYXJDb3VudCk7XHJcblxyXG4gICAgbGV0IGhlYWRMZW5ndGg6IG51bWJlciA9IG1hcmtlclBvc2l0aW9uIC0gc2VnbWVudFN0YXJ0SW5kZXg7XHJcbiAgICBsZXQgdGFpbExlbmd0aDogbnVtYmVyID0gc2VnbWVudEVuZEluZGV4IC0gbWFya2VyUG9zaXRpb247XHJcblxyXG4gICAgbGV0IHNlZ21lbnQ6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgaWYgKHNlZ21lbnRTdGFydEluZGV4ID4gMClcclxuICAgICAgc2VnbWVudC5BcHBlbmQoXCIuLi5cIik7XHJcblxyXG4gICAgaWYgKGhlYWRMZW5ndGggPiAwKVxyXG4gICAgICBzZWdtZW50LkFwcGVuZCh0aGlzLl94bUxkYXRhLCBzZWdtZW50U3RhcnRJbmRleCwgaGVhZExlbmd0aCk7XHJcblxyXG4gICAgc2VnbWVudC5BcHBlbmQoXCJ8LXtcIikuQXBwZW5kKHRoaXMuX2N1cnJJbmRleCkuQXBwZW5kKFwifS18XCIpO1xyXG5cclxuICAgIGlmICh0YWlsTGVuZ3RoID4gMClcclxuICAgICAgc2VnbWVudC5BcHBlbmQodGhpcy5feG1MZGF0YSwgdGhpcy5fY3VyckluZGV4LCB0YWlsTGVuZ3RoKTtcclxuXHJcbiAgICBpZiAoc2VnbWVudEVuZEluZGV4IDwgdGhpcy5feG1MZGF0YS5sZW5ndGgpXHJcbiAgICAgIHNlZ21lbnQuQXBwZW5kKFwiLi4uXCIpO1xyXG5cclxuICAgIHJldHVybiBzZWdtZW50LlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBTa2lwWE1MRWxlbWVudCgpOiB2b2lkIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSB0aGlzLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgdGhpcy5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHRoaXMuZ2V0WE1MZGF0YSgpLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWG1sUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdXRpbHMvc3JjL1htbC9YbWxQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFjLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFHN0MsTUFBTSxPQUFPLFNBQVM7SUFXcEIsWUFBWSxPQUFlLE9BQU8sQ0FBQyxLQUFLO1FBUmhDLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixhQUFRLEdBQTBCLElBQUksSUFBSSxFQUFFLENBQUM7UUFPbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFPRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQVcsRUFBRSxTQUFpQixFQUFFLGFBQXNCLElBQUk7UUFDekUsSUFBSSxTQUFTLEdBQWlCLElBQUksSUFBSSxFQUFVLENBQUM7UUFDakQsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDO1FBRXpCLElBQUksVUFBVSxFQUFFO1lBQ2QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNsQjtRQUVELElBQUksTUFBTSxHQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRELEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBSXBELElBQUksVUFB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QUUvRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVELElBQUksVUFBVSxHQUFHLENBQUM7WUFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFN0QsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEIsT0FBTyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLFVBQVUsR0FBVyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDL0YsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDOUQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDOUI7SUFDSCxDQUFDOztBQTlaYyx1QkFBYSxHQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOU3RyaW5nLCBMaXN0LCBBcHBsaWNhdGlvbkV4Y2VwdGlvbiwgU3RyaW5nQnVpbGRlciwgRGljdGlvbmFyeSwgTkNoYXIsIE5OdW1iZXJ9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1hNTENvbnN0YW50c30gZnJvbSBcIi4uL1hNTENvbnN0YW50c1wiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PiBhIGhlbHBlciBjbGFzcyBmb3IgdGhlIHBhcnNpbmcgb2YgdGhlIFhNTDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIFhtbFBhcnNlciB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZW5kT2ZOYW1lQ2hhcjogc3RyaW5nW10gPSBbJyAnLCAnPiddO1xyXG5cclxuICBwcml2YXRlIF9jdXJySW5kZXg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfeG1MZGF0YTogc3RyaW5nID0gXCJcIjtcclxuICBwcml2YXRlIF9oaXN0b3J5OiBMaXN0PG51bWJlciB8IHN0cmluZz4gPSBuZXcgTGlzdCgpOyAvLyBJbiBvcmRlciB0byBhbGxvdyByZWN1cnNpdmUgcGFyc2luZyB3ZSBzYXZlIHByZXYgZGF0YVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXRhXCI+PC9wYXJhbT5cclxuICBjb25zdHJ1Y3RvcihkYXRhOiBzdHJpbmcgPSBOU3RyaW5nLkVtcHR5KSB7XHJcbiAgICB0aGlzLnNldFhNTGRhdGEoZGF0YSk7XHJcbiAgICB0aGlzLnNldEN1cnJJbmRleCgwKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcGFyc2UgYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgc2V0IG9mIGRlbGltaXRlcnMgYW5kIHJldHVybiB0aGUgcmVzdWx0IGluIGEgdmVjdG9yPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPnRoZSBTdHJpbmcgd2hpY2ggbmVlZCBiZSBwYXJ0ZWQgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWxpbWl0ZXJcIj50aGUgZGVsaW1pdGVyIHdoaWNoIHBhcnQgZGlmZmVyZW50IHBhcnRzIG9mIHN0ciA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzTWFnaWNYTUxcIj5pcyBuZWVkZWQgdG9rZW5pemVyIHdvcmtpbmcgb24gTWFnaWMgWE1MLCBzbyB0aGUgXCI9XCIgc2lnbiB3aWxsIGJlIGRlbGl0ZWQgaW4gdGhlIGVuZCBvZiBldmVyeSBmaXJzdCB0b2tlbiA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdG1wVmVjdG9yIGR5bmFtaWNhbGx5IGFycmF5LCB3aGljaCBjb25zaXN0IHRva2VucyBpbiBldmVyeSBlbGVtZW50LCBldmVyeSB0b2tlbiBpcyBTdHJpbmcgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRUb2tlbnMoc3RyOiBzdHJpbmcsIGRlbGltaXRlcjogc3RyaW5nLCBpc01hZ2ljWE1MOiBib29sZWFuID0gdHJ1ZSk6IExpc3Q8c3RyaW5nPiB7XHJcbiAgICBsZXQgdG9rZW5zVmVjOiBMaXN0PHN0cmluZz4gPSBuZXcgTGlzdDxzdHJpbmc+KCk7XHJcbiAgICBsZXQgdG9rZW46IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgaWYgKGlzTWFnaWNYTUwpIHtcclxuICAgICAgc3RyID0gc3RyLnRyaW0oKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc3RyVG9rOiBzdHJpbmdbXSA9IHN0ci5zcGxpdChkZWxpbWl0ZXIuY2hhckF0KDApKTtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3RyVG9rLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIC8vIFNwbGl0IGluIEMjIGNyZWF0ZXMgYSBsYXN0IGVtcHR5IHN0cmluZyB0b2tlbiBpZiB0aGUgc291cmNlIHN0cmluZyBlbmRzIHdpdGhcclxuICAgICAgLy8gdGhlIGRlbGltaXRlciBvciBpZiB0aGUgc3RyaW5nIGlzIGVtcHR5IChhcyBvcHBvc2VkIHRvIEphdmEgdGhhdCB3aWxsIGlnbm9yZSBpdClcclxuICAgICAgLy8gdGhlcmVmb3JlIHdlIGhhdmUgdG8gYnJlYWsgdGhpcyBsb29wIGlmIHN1Y2ggY2FzZSBvY2N1cnMuXHJcbiAgICAgIGlmIChpc01hZ2ljWE1MICYmIGkgPT09IHN0clRvay5sZW5ndGggLSAxICYmIHN0clRvay5sZW5ndGggJSAyID09PSAxKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRva2VuID0gc3RyVG9rW2ldO1xyXG4gICAgICBpZiAoaXNNYWdpY1hNTCkge1xyXG4gICAgICAgIC8vIHRoZSAxc3QgdG9rZW4gaW4gdGhlIHBhaXIgY29tZXMgd2l0aCBcIj1cIiwgcmVtb3ZlIGl0LlxyXG4gICAgICAgIGlmIChpICUgMiA9PT0gMCkge1xyXG4gICAgICAgICAgdG9rZW4gPSB0b2tlbi50cmltKCk7XHJcbiAgICAgICAgICBpZiAodG9rZW4uZW5kc1dpdGgoXCI9XCIpKSB7XHJcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW4uc3Vic3RyKDAsIHRva2VuLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAybmQgdG9rZW4gaW4gdGhlIHBhaXIgY2FuIGJlIGFuIGVtcHR5IHN0cmluZywgaW4gdGhhdCBjYXNlIHNldCBpdCB0byBcIiBcIi5cclxuICAgICAgICBlbHNlIGlmICh0b2tlbiA9PT0gXCJcIilcclxuICAgICAgICAgIHRva2VuID0gXCIgXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0b2tlbiA9PT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBDbGllbnRNYW5hZ2VyLkluc3RhbmNlLlhNTFBhcnNlci5nZXRUb2tlbnMoKSBudWxsIHRva2VuIHZhbHVlXCIpO1xyXG5cclxuICAgICAgdG9rZW5zVmVjLnB1c2godG9rZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b2tlbnNWZWM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+dW5zY2FwZSBmcm9tOlxyXG4gIC8vLyB7XCImYW1wO1wiLFxcXFwsIFxccSwgXFxvLCBcXGwsIFxcZywgXFxlLCBcXFxcciwgXFxcXG59LCB0bzpcclxuICAvLy8ge1wiJlwiLCAgICAgXFwsICBcIiwgICcsICA8LCAgPiwgID0sICBcXHIsICBcXG59XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+U3RyaW5nIHRvIGJlIGNvbnZlcnRlZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPnVuZXNjYXBlZCBzdHJpbmc8L3JldHVybnM+XHJcbiAgcHVibGljIHN0YXRpYyB1bmVzY2FwZShzdHI6IHN0cmluZyk6IHN0cmluZ1xyXG4gIHtcclxuICAgIGxldCB1bmVzY2FwZWRTdHJpbmc6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihzdHIubGVuZ3RoKTtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChzdHJbaV0gIT09ICdcXFxcJykge1xyXG4gICAgICAgIHVuZXNjYXBlZFN0cmluZy5BcHBlbmQoc3RyW2ldKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoIChzdHJbKytpXSkge1xyXG4gICAgICAgIGNhc2UgJ3EnOlxyXG4gICAgICAgICAgdW5lc2NhcGVkU3RyaW5nLkFwcGVuZCgnXFxcIicpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbyc6XHJcbiAgICAgICAgICB1bmVzY2FwZWRTdHJpbmcuQXBwZW5kKCdcXCcnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2wnOlxyXG4gICAgICAgICAgdW5lc2NhcGVkU3RyaW5nLkFwcGVuZCgnPCcpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZyc6XHJcbiAgICAgICAgICB1bmVzY2FwZWRTdHJpbmcuQXBwZW5kKCc+Jyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdlJzpcclxuICAgICAgICAgIHVuZXNjYXBlZFN0cmluZy5BcHBlbmQoJz0nKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3InOlxyXG4gICAgICAgICAgdW5lc2NhcGVkU3RyaW5nLkFwcGVuZCgnXFxyJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICduJzpcclxuICAgICAgICAgIHVuZXNjYXBlZFN0cmluZy5BcHBlbmQoJ1xcbicpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHVuZXNjYXBlZFN0cmluZy5BcHBlbmQoc3RyW2ldKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKHVuZXNjYXBlZFN0cmluZy5Ub1N0cmluZygpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5lc2NhcGUgZnJvbTpcclxuICAvLy8ge1xcLCAgXCIsICAnLCAgPCwgICA+LCAgPSwgIFxcciwgIFxcbn0sIHRvOlxyXG4gIC8vLyB7XFxcXCwgXFxxLCBcXDAsIFxcbCwgIFxcZywgXFxlLCBcXFxcciwgXFxcXG59XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+U3RyaW5nIHRvIGJlIGNvbnZlcnRlZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPmVzY2FwZWQgc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBzdGF0aWMgZXNjYXBlKHN0cjogc3RyaW5nKTogc3RyaW5nXHJcbiAge1xyXG4gICAgbGV0IGVzY2FwZWRTdHJpbmc6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihzdHIubGVuZ3RoICogMik7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xyXG4gICAgICBzd2l0Y2ggKHN0cltpXSkge1xyXG4gICAgICAgIGNhc2UgJ1xcXFwnOlxyXG4gICAgICAgICAgZXNjYXBlZFN0cmluZy5BcHBlbmQoXCJcXFxcXFxcXFwiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1wiJzpcclxuICAgICAgICAgIGVzY2FwZWRTdHJpbmcuQXBwZW5kKFwiXFxcXHFcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdcXCcnOlxyXG4gICAgICAgICAgZXNjYXBlZFN0cmluZy5BcHBlbmQoXCJcXFxcb1wiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJzwnOlxyXG4gICAgICAgICAgZXNjYXBlZFN0cmluZy5BcHBlbmQoXCJcXFxcbFwiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJz4nOlxyXG4gICAgICAgICAgZXNjYXBlZFN0cmluZy5BcHBlbmQoXCJcXFxcZ1wiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJz0nOlxyXG4gICAgICAgICAgZXNjYXBlZFN0cmluZy5BcHBlbmQoXCJcXFxcZVwiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1xccic6XHJcbiAgICAgICAgICBlc2NhcGVkU3RyaW5nLkFwcGVuZChcIlxcclwiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1xcbic6XHJcbiAgICAgICAgICBlc2NhcGVkU3RyaW5nLkFwcGVuZChcIlxcblwiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBlc2NhcGVkU3RyaW5nLkFwcGVuZChzdHJbaV0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKGVzY2FwZWRTdHJpbmcuVG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGhlcmUgd2Ugb25seSBuZWVkIHRvIHRha2UgY2FyZSBvZiBcIiZcIiBzbyB0aGF0IFNheCBwYXJzZXIgd2lsbCBiZSBhYmxlIHRvIGhhbmRsZSB1cmxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgZXNjYXBlVXJsKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBOU3RyaW5nLlJlcGxhY2Uoc3RyLCBcIiZcIiwgXCImYW1wO1wiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXQgbmV4dCB0YWcgbmFtZSBmcm9tIGN1cnJlbnQgaW5kZXggaW4gWE1MIHN0cmluZzwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IG5leHQgdGFnIG5hbWUgPC9yZXR1cm5zPlxyXG4gIGdldE5leHRUYWcoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLl94bUxkYXRhLmxlbmd0aCAtIHRoaXMuX2N1cnJJbmRleCA8PSAxKSB7XHJcbiAgICAgIHJldHVybiBudWxsOyAgLy8gZW5kIG9mIFhNTCBzdHJpbmdcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCB0bXBJbmR4OiBudW1iZXIgPSB0aGlzLl9jdXJySW5kZXggKyAxOyB0bXBJbmR4IDwgdGhpcy5feG1MZGF0YS5sZW5ndGg7IHRtcEluZHgrKykge1xyXG4gICAgICBsZXQgdG1wQ2hhcjogc3RyaW5nID0gdGhpcy5feG1MZGF0YVt0bXBJbmR4XTtcclxuXHJcbiAgICAgIC8vIGEgbGV0dGVyIHN0YXJ0cyBhbiBlbGVtZW50IGFuZCBlbmRzIHdpdGggXCIgXCIuIFwiL1wiIHN0YXJ0cyBhbiBlbGVtZW50IGNsb3NpbmcgYW5kIGVuZHMgd2l0aCAnPicuXHJcbiAgICAgIGlmIChOQ2hhci5Jc0xldHRlcih0bXBDaGFyKSB8fCB0bXBDaGFyID09PSAnLycpIHtcclxuICAgICAgICBsZXQgZW5kT2ZUYWc6IG51bWJlciA9IE5TdHJpbmcuSW5kZXhPZkFueSh0aGlzLl94bUxkYXRhLCBYbWxQYXJzZXIuZW5kT2ZOYW1lQ2hhciwgdG1wSW5keCwgdGhpcy5feG1MZGF0YS5sZW5ndGggLSB0bXBJbmR4KTtcclxuXHJcbiAgICAgICAgaWYgKGVuZE9mVGFnID09PSAtMSlcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiB0aGlzLl94bUxkYXRhLnN1YnN0cih0bXBJbmR4LCBlbmRPZlRhZyAtIHRtcEluZHgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+U3Vic3RyaW5nIG9mIFhNTHN0cmluZzwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHN1YnN0cmluZyBvZiBYTUwgc3RyaW5nIC1mcm9tIGN1cnJJbmRleCB0byBlbmRDb250ZXh0IDwvcmV0dXJucz5cclxuICBnZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl94bUxkYXRhLnN1YnN0cih0aGlzLl9jdXJySW5kZXgsIGVuZENvbnRleHQgLSB0aGlzLl9jdXJySW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldCBjdXJyZW50IGVsZW1lbnQgdmFsdWU8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBlbGVtZW50J3MgdmFsdWUgPC9yZXR1cm5zPlxyXG4gIEdldEN1cnJlbnRFbGVtZW50VmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHRoaXMuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gdGhpcy5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIHRoaXMuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgLy8gcmVhZCB2YWx1ZSBvZiB4bWwgZWxlbWVudFxyXG4gICAgbGV0IHZhbHVlOiBzdHJpbmcgPSB0aGlzLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgIHRoaXMuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+c2V0IGN1cnJlbnQgaW5kZXggKG9uIHBhcnNpbmcgdGltZSkgdG8gdGhlIGVuZCBvZiBjdXJyZW50IHRhZzwvc3VtbWFyeT5cclxuICBzZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jdXJySW5kZXggPSB0aGlzLl94bUxkYXRhLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgdGhpcy5fY3VyckluZGV4KSArIDE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0IGludCBmcm9tIHN0cmluZyBhdCBwYXJzaW5nIHRpbWU8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGdldEludCh2YWx1ZVN0cjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBOTnVtYmVyLlBhcnNlKHZhbHVlU3RyLnRyaW0oKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0IGJvb2xlYW4gZnJvbSBzdHJpbmcgYXQgcGFyc2luZyB0aW1lPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBnZXRCb29sZWFuKHZhbHVlU3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZVN0clswXSA9PT0gJzEnO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldC9zZXQgZnVuY3Rpb25zIDQgWE1Mc3RyaW5nICYgY3VyckluZGV4LCBmb3IgcGFyc2VyPC9zdW1tYXJ5PlxyXG4gIGdldEN1cnJJbmRleCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJJbmRleDtcclxuICB9XHJcblxyXG4gIGdldFhNTGRhdGEoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl94bUxkYXRhO1xyXG4gIH1cclxuXHJcbiAgYWRkMkN1cnJJbmRleChhZGQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY3VyckluZGV4ID0gdGhpcy5fY3VyckluZGV4ICsgYWRkO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3VyckluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2N1cnJJbmRleCA9IGluZGV4O1xyXG4gIH1cclxuXHJcbiAgc2V0WE1MZGF0YShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChkYXRhICE9PSBudWxsKVxyXG4gICAgICB0aGlzLl94bUxkYXRhID0gZGF0YS50cmltKCk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5feG1MZGF0YSA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2V0Q3VyckluZGV4KDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBwcmVwYXJlIHRoZSBwYXJzZXIgdG8gcmVhZCBmcm9tIHRoZSBuZXdYbWxTdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5ld1htbFN0cmluZ1wiPjwvcGFyYW0+XHJcbiAgUHJlcGFyZUZvcm1SZWFkU3RyaW5nKG5ld1htbFN0cmluZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFhNTGRhdGEobmV3WG1sU3RyaW5nKTtcclxuICAgIHRoaXMuc2V0Q3VyckluZGV4KDApO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBwdXNoIHRoZSBjdXJyZW50IHBhcnNpbmcgaW5mb3JtYXRpb24gaW50byB0aGUgaGlzdG9yeSBzdGFjazwvc3VtbWFyeT5cclxuICBwdXNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5faGlzdG9yeS5wdXNoKHRoaXMuX2N1cnJJbmRleCk7XHJcbiAgICB0aGlzLl9oaXN0b3J5LnB1c2godGhpcy5feG1MZGF0YSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlc3RvcmUgdGhlIHByZXZpb3VzIHBhcnNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgaGlzdG9yeSBzdGFjazwvc3VtbWFyeT5cclxuICBwb3AoKTogdm9pZCB7XHJcbiAgICBsZXQgY291bnQ6IG51bWJlciA9IHRoaXMuX2hpc3RvcnkubGVuZ3RoO1xyXG5cclxuICAgIHRoaXMuX3htTGRhdGEgPSA8c3RyaW5nPnRoaXMuX2hpc3RvcnkuZ2V0X0l0ZW0oY291bnQgLSAxKTtcclxuICAgIHRoaXMuX2N1cnJJbmRleCA9IDxudW1iZXI+dGhpcy5faGlzdG9yeS5nZXRfSXRlbShjb3VudCAtIDIpO1xyXG5cclxuICAgIHRoaXMuX2hpc3RvcnkuU2V0U2l6ZShjb3VudCAtIDIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldHMgYSB0YWJsZSBjYWNoZSB4bWwgYW5kIHNldCB0aGUgeG1scGFyc2VyIGRhdGEgYW5kIGluZGV4IGFjY29yZGluZ2x5PC9zdW1tYXJ5PlxyXG4gIGxvYWRUYWJsZUNhY2hlRGF0YShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0WE1MZGF0YShkYXRhKTtcclxuICAgIHRoaXMuc2V0Q3VyckluZGV4KDApO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZWFkcyB0aGUgWE1MIGZyb20gdGhlIGVsZW1lbnQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gdW50aWwgdGhlIGVuZCBvZlxyXG4gIC8vLyB0aGUgZWxlbWVudCwgcmV0dXJuaW5nIHRoZSBjb250ZW50cyBhcyBhIHN0cmluZy4gVGhpcyBhbGxvd3MgZGVmZXJyaW5nIHRoZVxyXG4gIC8vLyBwcm9jZXNzaW5nIG9mIGFuIGVsZW1lbnQgdW50aWwgdGhlIHRpbWUgaXMgcmlnaHQgdG8gZG8gc28uPGJyLz5cclxuICAvLy8gVGhlIHJldHVybmVkIHN0cmluZyBjb250YWlucyB0aGUgZWxlbWVudCB0YWcgaXRzZWxmLiBGb3IgZXhhbXBsZTo8YnIvPlxyXG4gIC8vLyAtIEFzc3VtaW5nIHRoYXQgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyAnZWxlbWVudDEnLCB3aXRoIDIgJ2lubmVyRWxlbWVudCcgZWxlbWVudHMsIHRoZVxyXG4gIC8vLyByZXN1bHRpbmcgc3RyaW5nIHdpbGwgbG9vayBsaWtlIHRoaXM6PGJyLz5cclxuICAvLy8gPGVsZW1lbnQxPlxyXG4gIC8vLyAgIDxpbm5lcmVsZW1lbnQvPlxyXG4gIC8vLyAgIDxpbm5lcmVsZW1lbnQvPlxyXG4gIC8vLyA8L2VsZW1lbnQxPlxyXG4gIC8vL1xyXG4gIC8vLyBUaGlzIG1ha2VzIHRoZSByZXN1bHQgdmFsaWQgZm9yIHByb2Nlc3NpbmcgYnkgdGhpcyBYTUwgcGFyc2VyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBSZWFkVG9FbmRPZkN1cnJlbnRFbGVtZW50KCk6IHN0cmluZyB7XHJcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdGFnIGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2YgX2N1cnJJbmRleC5cclxuICAgIGxldCBjdXJyZW50VGFnOiBzdHJpbmcgPSB0aGlzLmdldE5leHRUYWcoKTtcclxuICAgIGxldCBjdXJyZW50VGFnSW5kZXg6IG51bWJlciA9IHRoaXMuX3htTGRhdGEuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4gKyBjdXJyZW50VGFnLCB0aGlzLmdldEN1cnJJbmRleCgpKTtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBlbmQgb2YgdGhlIGVsZW1lbnQncyBibG9jayBpbiB0aGUgWE1MLlxyXG4gICAgLy8gZmluZCBuZXh0IG9wZW4gdGFnXHJcbiAgICBsZXQgbmV4dE9wZW5UYWdJbmRleDogbnVtYmVyID0gdGhpcy5feG1MZGF0YS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfT1BFTiwgY3VycmVudFRhZ0luZGV4ICsgMSk7XHJcbiAgICBpZiAobmV4dE9wZW5UYWdJbmRleCA9PT0gLTEpXHJcbiAgICAgIG5leHRPcGVuVGFnSW5kZXggPSB0aGlzLl94bUxkYXRhLmxlbmd0aDtcclxuXHJcbiAgICAvLyBmaW5kIGEgY2xvc2UgdGFnIEJFRk9SRSB0aGUgbmV4dCBvcGVuIHRhZ1xyXG4gICAgbGV0IGVsZW1lbnRFbmRJbmRleDogbnVtYmVyID0gTlN0cmluZy5JbmRleE9mKHRoaXMuX3htTGRhdGEsIFhNTENvbnN0YW50cy5UQUdfVEVSTSwgdGhpcy5nZXRDdXJySW5kZXgoKSwgbmV4dE9wZW5UYWdJbmRleCAtIHRoaXMuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgaWYgKGVsZW1lbnRFbmRJbmRleCA9PT0gLTEpXHJcbiAgICAvLyBjbG9zZSB0YWcgd2FzIG5vdCBmb3VuZCBpbiByYW5nZSAtIHdlIGhhdmUgaW5uZXIgZWxlbWVudHMsIGxvb2sgZm9yIHRoZSBmdWxsIGNsb3NlIHRhZ1xyXG4gICAgICBlbGVtZW50RW5kSW5kZXggPSB0aGlzLl94bUxkYXRhLmluZGV4T2YoXCIvXCIgKyBjdXJyZW50VGFnLCB0aGlzLmdldEN1cnJJbmRleCgpKSArIGN1cnJlbnRUYWcubGVuZ3RoICsgWE1MQ29uc3RhbnRzLlRBR19URVJNLmxlbmd0aDtcclxuICAgIGVsc2VcclxuICAgICAgZWxlbWVudEVuZEluZGV4ID0gZWxlbWVudEVuZEluZGV4ICsgWE1MQ29uc3RhbnRzLlRBR19URVJNLmxlbmd0aDtcclxuXHJcbiAgICAvLyBDb3B5IHRoZSBlbGVtZW50IGRhdGEgc28gaXQgY2FuIGJlIHJldHVybmVkLlxyXG4gICAgbGV0IGVsZW1lbnRCbG9jazogc3RyaW5nID0gdGhpcy5nZXRYTUxzdWJzdHJpbmcoZWxlbWVudEVuZEluZGV4KTtcclxuXHJcbiAgICAvLyBNb3ZlIHRoZSBwYXJzZXIgdG8gdGhlIGVuZCBvZiB0aGUgZWxlbWVudCBibG9jay5cclxuICAgIHRoaXMuc2V0Q3VyckluZGV4KGVsZW1lbnRFbmRJbmRleCk7XHJcblxyXG4gICAgcmV0dXJuIGVsZW1lbnRCbG9jaztcclxuICB9XHJcblxyXG4gIFJlYWRDb250ZW50T2ZDdXJyZW50RWxlbWVudCgpOiBzdHJpbmcge1xyXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHRhZyBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIF9jdXJySW5kZXguXHJcbiAgICBsZXQgY3VycmVudFRhZzogc3RyaW5nID0gdGhpcy5nZXROZXh0VGFnKCk7XHJcblxyXG4gICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSBlbGVtZW50J3MgYmxvY2sgaW4gdGhlIFhNTC5cclxuICAgIGxldCBlbGVtZW50RW5kSW5kZXg6IG51bWJlciA9IHRoaXMuX3htTGRhdGEuaW5kZXhPZihcIjwvXCIgKyBjdXJyZW50VGFnICsgXCI+XCIsIHRoaXMuZ2V0Q3VyckluZGV4KCkpO1xyXG5cclxuICAgIGlmIChlbGVtZW50RW5kSW5kZXggPT09IC0xKVxyXG4gICAgICAvLyBDYW4ndCBmaW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCAtIGVpdGhlciBYTUwgaXMgZmF1bHR5IG9yIHRoZSBlbGVtZW50IGlzIGVtcHR5LlxyXG4gICAgICByZXR1cm4gTlN0cmluZy5FbXB0eTtcclxuXHJcbiAgICAvLyBNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIG9wZW5pbmcgdGFnXHJcbiAgICB0aGlzLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG5cclxuICAgIC8vIENvcHkgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQgKGZyb20gdGhlIGVuZCBvZiB0aGUgb3BlbmluZyB0YWcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY2xvc2luZyB0YWcpLlxyXG4gICAgbGV0IGVsZW1lbnRCbG9jazogc3RyaW5nID0gdGhpcy5nZXRYTUxzdWJzdHJpbmcoZWxlbWVudEVuZEluZGV4KTtcclxuXHJcbiAgICAvLyBNb3ZlIHRoZSBwYXJzZXIgdG8gdGhlIGVuZCBvZiB0aGUgZWxlbWVudCBibG9jay5cclxuICAgIHRoaXMuc2V0Q3VyckluZGV4KGVsZW1lbnRFbmRJbmRleCk7XHJcbiAgICB0aGlzLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG5cclxuICAgIHJldHVybiBlbGVtZW50QmxvY2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdlbmVyYXRlcyBhIHN0cmluZyB0aGF0IHZpc3VhbGl6ZXMgdGhlIFhNTCBwYXJzZXIgc3RhdGUgKGUuZy4gZm9yIGRlYnVnIHdhdGNoIGxpc3QuKTxici8+XHJcbiAgLy8vIFRoZSBtZXRob2Qgd2lsbCBzaG93IHRoZSBYTUwgZGF0YSwgdHJpbW1pbmcgaXQgdG8gMjAgY2hhcmFjdGVycyBiZWZvcmUgdGhlXHJcbiAgLy8vIGN1cnJlbnQgcG9zaXRpb24gKF9jdXJySW5kZXgpIGFuZCB1cCB0byA1MCBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxyXG4gIC8vLyBUaGUgY3VycmVudCBwb3NpdGlvbiBpdHNlbGYgd2lsbCBiZSBtYXJrZWQgd2l0aCBhIG1hcmtlciB0aGF0IGxvb2tzIGxpa2U6XHJcbiAgLy8vIHwte2N1cnJlbnQgaW5kZXh9LXwgPGJyLz5cclxuICAvLy8gVGhlIG1hcmtlciB3aWxsIGJlIHBsYWNlZCBpbW1lZGlhdGVseSBiZWZvcmUgX3htbERhdGFbX2N1cnJJbmRleF0uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJoZWFkQ2hhckNvdW50XCI+TnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc2hvdyBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gbWFya2VyLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGFpbENoYXJDb3VudFwiPk51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHNob3cgYWZ0ZXIgdGhlIGN1cnJlbnQgcG9zaXRpb24gbWFya2VyLjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICB0b1N0cmluZygpOiBzdHJpbmc7XHJcbiAgdG9TdHJpbmcoaGVhZENoYXJDb3VudDogbnVtYmVyLCB0YWlsQ2hhckNvdW50OiBudW1iZXIpOiBzdHJpbmc7XHJcbiAgdG9TdHJpbmcoaGVhZENoYXJDb3VudD86IG51bWJlciwgdGFpbENoYXJDb3VudD86IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5Ub1N0cmluZ18wKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5Ub1N0cmluZ18xKGhlYWRDaGFyQ291bnQsIHRhaWxDaGFyQ291bnQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZW5lcmF0ZXMgYSBzdHJpbmcgdGhhdCB2aXN1YWxpemVzIHRoZSBYTUwgcGFyc2VyIHN0YXRlIChlLmcuIGZvciBkZWJ1ZyB3YXRjaCBsaXN0Lik8YnIvPlxyXG4gIC8vLyBUaGUgbWV0aG9kIHdpbGwgc2hvdyB0aGUgWE1MIGRhdGEsIHRyaW1taW5nIGl0IHRvIDIwIGNoYXJhY3RlcnMgYmVmb3JlIHRoZVxyXG4gIC8vLyBjdXJyZW50IHBvc2l0aW9uIChfY3VyckluZGV4KSBhbmQgdXAgdG8gNTAgY2hhcmFjdGVycyBhZnRlciB0aGUgY3VycmVudCBwb3NpdGlvbi5cclxuICAvLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gaXRzZWxmIHdpbGwgYmUgbWFya2VkIHdpdGggYSBtYXJrZXIgdGhhdCBsb29rcyBsaWtlOlxyXG4gIC8vLyB8LXtjdXJyZW50IGluZGV4fS18IDxici8+XHJcbiAgLy8vIFRoZSBtYXJrZXIgd2lsbCBiZSBwbGFjZWQgaW1tZWRpYXRlbHkgYmVmb3JlIF94bWxEYXRhW19jdXJySW5kZXhdLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIFRvU3RyaW5nXzAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKDIwLCA1MCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdlbmVyYXRlcyBhIHN0cmluZyB0aGF0IHZpc3VhbGl6ZXMgdGhlIFhNTCBwYXJzZXIgc3RhdGUgKGUuZy4gZm9yIGRlYnVnIHdhdGNoIGxpc3QuKTxici8+XHJcbiAgLy8vIFRoZSBtZXRob2Qgd2lsbCBzaG93IHRoZSBYTUwgZGF0YSwgdHJpbW1pbmcgaXQgdG8gaGVhZENoYXJDb3VudCBjaGFyYWN0ZXJzIGJlZm9yZSB0aGVcclxuICAvLy8gY3VycmVudCBwb3NpdGlvbiAoX2N1cnJJbmRleCkgYW5kIHVwIHRvIHRhaWxDaGFyQ291bnQgY2hhcmFjdGVycyBhZnRlciB0aGUgY3VycmVudCBwb3NpdGlvbi5cclxuICAvLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gaXRzZWxmIHdpbGwgYmUgbWFya2VkIHdpdGggYSBtYXJrZXIgdGhhdCBsb29rcyBsaWtlOlxyXG4gIC8vLyB8LXtjdXJyZW50IGluZGV4fS18IDxici8+XHJcbiAgLy8vIFRoZSBtYXJrZXIgd2lsbCBiZSBwbGFjZWQgaW1tZWRpYXRlbHkgYmVmb3JlIF94bWxEYXRhW19jdXJySW5kZXhdLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaGVhZENoYXJDb3VudFwiPk51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHNob3cgYmVmb3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uIG1hcmtlci48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRhaWxDaGFyQ291bnRcIj5OdW1iZXIgb2YgY2hhcmFjdGVycyB0byBzaG93IGFmdGVyIHRoZSBjdXJyZW50IHBvc2l0aW9uIG1hcmtlci48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBUb1N0cmluZ18xKGhlYWRDaGFyQ291bnQ6IG51bWJlciwgdGFpbENoYXJDb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBtYXJrZXJQb3NpdGlvbjogbnVtYmVyID0gTWF0aC5taW4odGhpcy5fY3VyckluZGV4LCB0aGlzLl94bUxkYXRhLmxlbmd0aCk7XHJcbiAgICBsZXQgc2VnbWVudFN0YXJ0SW5kZXg6IG51bWJlciA9IE1hdGgubWF4KDAsIG1hcmtlclBvc2l0aW9uIC0gaGVhZENoYXJDb3VudCk7XHJcbiAgICBsZXQgc2VnbWVudEVuZEluZGV4OiBudW1iZXIgPSBNYXRoLm1pbih0aGlzLl94bUxkYXRhLmxlbmd0aCwgbWFya2VyUG9zaXRpb24gKyB0YWlsQ2hhckNvdW50KTtcclxuXHJcbiAgICBsZXQgaGVhZExlbmd0aDogbnVtYmVyID0gbWFya2VyUG9zaXRpb24gLSBzZWdtZW50U3RhcnRJbmRleDtcclxuICAgIGxldCB0YWlsTGVuZ3RoOiBudW1iZXIgPSBzZWdtZW50RW5kSW5kZXggLSBtYXJrZXJQb3NpdGlvbjtcclxuXHJcbiAgICBsZXQgc2VnbWVudDogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICBpZiAoc2VnbWVudFN0YXJ0SW5kZXggPiAwKVxyXG4gICAgICBzZWdtZW50LkFwcGVuZChcIi4uLlwiKTtcclxuXHJcbiAgICBpZiAoaGVhZExlbmd0aCA+IDApXHJcbiAgICAgIHNlZ21lbnQuQXBwZW5kKHRoaXMuX3htTGRhdGEsIHNlZ21lbnRTdGFydEluZGV4LCBoZWFkTGVuZ3RoKTtcclxuXHJcbiAgICBzZWdtZW50LkFwcGVuZChcInwte1wiKS5BcHBlbmQodGhpcy5fY3VyckluZGV4KS5BcHBlbmQoXCJ9LXxcIik7XHJcblxyXG4gICAgaWYgKHRhaWxMZW5ndGggPiAwKVxyXG4gICAgICBzZWdtZW50LkFwcGVuZCh0aGlzLl94bUxkYXRhLCB0aGlzLl9jdXJySW5kZXgsIHRhaWxMZW5ndGgpO1xyXG5cclxuICAgIGlmIChzZWdtZW50RW5kSW5kZXggPCB0aGlzLl94bUxkYXRhLmxlbmd0aClcclxuICAgICAgc2VnbWVudC5BcHBlbmQoXCIuLi5cIik7XHJcblxyXG4gICAgcmV0dXJuIHNlZ21lbnQuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIFNraXBYTUxFbGVtZW50KCk6IHZvaWQge1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHRoaXMuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19URVJNLCB0aGlzLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgdGhpcy5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|