@magic-xpa/gui 4.800.0 → 4.801.0-dev000.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/magic-xpa-gui.js → esm2020/magic-xpa-gui.mjs} +0 -0
- package/esm2020/src/Commands.mjs +186 -0
- package/esm2020/src/Events.mjs +420 -0
- package/esm2020/src/EventsProcessor.mjs +67 -0
- package/esm2020/src/FocusManager.mjs +34 -0
- package/{esm2015/src/GuiConstants.js → esm2020/src/GuiConstants.mjs} +0 -0
- package/{esm2015/src/GuiEnums.js → esm2020/src/GuiEnums.mjs} +0 -0
- package/{esm2015/src/GuiEnvironment.js → esm2020/src/GuiEnvironment.mjs} +0 -0
- package/{esm2015/src/IFlowMonitorQueue.js → esm2020/src/IFlowMonitorQueue.mjs} +2 -1
- package/esm2020/src/Manager.mjs +192 -0
- package/{esm2015/src/UIBridge.js → esm2020/src/UIBridge.mjs} +0 -0
- package/{esm2015/src/env/IEnvironment.js → esm2020/src/env/IEnvironment.mjs} +1 -0
- package/{esm2015/src/gui/ControlBase.js → esm2020/src/gui/ControlBase.mjs} +0 -0
- package/{esm2015/src/gui/GuiMgControl.js → esm2020/src/gui/GuiMgControl.mjs} +0 -0
- package/{esm2015/src/gui/GuiMgForm.js → esm2020/src/gui/GuiMgForm.mjs} +0 -0
- package/{esm2015/src/gui/KeyboardItem.js → esm2020/src/gui/KeyboardItem.mjs} +0 -0
- package/{esm2015/src/gui/LastFocusedVal.js → esm2020/src/gui/LastFocusedVal.mjs} +0 -0
- package/{esm2015/src/gui/MgValue.js → esm2020/src/gui/MgValue.mjs} +0 -0
- package/{esm2015/src/gui/PropParentInterface.js → esm2020/src/gui/PropParentInterface.mjs} +1 -0
- package/{esm2015/src/gui/low/DialogHandler.js → esm2020/src/gui/low/DialogHandler.mjs} +0 -0
- package/{esm2015/src/gui/low/GuiCommand.js → esm2020/src/gui/low/GuiCommand.mjs} +0 -0
- package/{esm2015/src/gui/low/GuiCommandQueue.js → esm2020/src/gui/low/GuiCommandQueue.mjs} +0 -0
- package/esm2020/src/gui/low/GuiInteractive.mjs +545 -0
- package/{esm2015/src/gui/low/Style.js → esm2020/src/gui/low/Style.mjs} +0 -0
- package/{esm2015/src/management/RuntimeContextBase.js → esm2020/src/management/RuntimeContextBase.mjs} +0 -0
- package/{esm2015/src/management/data/BlobType.js → esm2020/src/management/data/BlobType.mjs} +0 -0
- package/esm2020/src/management/data/DcValues.mjs +214 -0
- package/esm2020/src/management/data/DcValuesBuilderBase.mjs +97 -0
- package/{esm2015/src/management/data/FieldDef.js → esm2020/src/management/data/FieldDef.mjs} +0 -0
- package/{esm2015/src/management/data/FieldsTable.js → esm2020/src/management/data/FieldsTable.mjs} +0 -0
- package/esm2020/src/management/data/GuiDataViewBase.mjs +90 -0
- package/esm2020/src/management/data/GuiFieldBase.mjs +82 -0
- package/{esm2015/src/management/data/IRecord.js → esm2020/src/management/data/IRecord.mjs} +1 -0
- package/{esm2015/src/management/data/IReferencedObject.js → esm2020/src/management/data/IReferencedObject.mjs} +1 -0
- package/{esm2015/src/management/data/NUM_TYPE.js → esm2020/src/management/data/NUM_TYPE.mjs} +0 -0
- package/esm2020/src/management/data/ObjectReferenceBase.mjs +48 -0
- package/{esm2015/src/management/data/ObjectReferencesCollection.js → esm2020/src/management/data/ObjectReferencesCollection.mjs} +0 -0
- package/esm2020/src/management/data/RecordUtils.mjs +361 -0
- package/{esm2015/src/management/data/VectorType.js → esm2020/src/management/data/VectorType.mjs} +0 -0
- package/{esm2015/src/management/data/VectorTypeBase.js → esm2020/src/management/data/VectorTypeBase.mjs} +0 -0
- package/{esm2015/src/management/events/IActionManager.js → esm2020/src/management/events/IActionManager.mjs} +1 -0
- package/esm2020/src/management/events/IGuiEventsManager.mjs +2 -0
- package/{esm2015/src/management/exp/ExpressionInterface.js → esm2020/src/management/exp/ExpressionInterface.mjs} +0 -0
- package/esm2020/src/management/exp/GuiExpressionEvaluator.mjs +333 -0
- package/{esm2015/src/management/gui/ControlTable.js → esm2020/src/management/gui/ControlTable.mjs} +0 -0
- package/esm2020/src/management/gui/DisplayConvertor.mjs +1706 -0
- package/esm2020/src/management/gui/FieldValidator.mjs +1507 -0
- package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +22 -0
- package/{esm2015/src/management/gui/GuiFormPropertyAdapter.js → esm2020/src/management/gui/GuiFormPropertyAdapter.mjs} +0 -0
- package/{esm2015/src/management/gui/HebrewDate.js → esm2020/src/management/gui/HebrewDate.mjs} +0 -0
- package/{esm2015/src/management/gui/Helps.js → esm2020/src/management/gui/Helps.mjs} +0 -0
- package/esm2020/src/management/gui/MgControlBase.mjs +1873 -0
- package/esm2020/src/management/gui/MgFormBase.mjs +748 -0
- package/{esm2015/src/management/gui/PIC.js → esm2020/src/management/gui/PIC.mjs} +0 -0
- package/esm2020/src/management/gui/PropDefaults.mjs +230 -0
- package/{esm2015/src/management/gui/PropInterface.js → esm2020/src/management/gui/PropInterface.mjs} +0 -0
- package/esm2020/src/management/gui/PropTable.mjs +221 -0
- package/esm2020/src/management/gui/Property.mjs +1382 -0
- package/{esm2015/src/management/gui/ValidationDetails.js → esm2020/src/management/gui/ValidationDetails.mjs} +0 -0
- package/{esm2015/src/management/gui/ValidationDetailsBase.js → esm2020/src/management/gui/ValidationDetailsBase.mjs} +0 -0
- package/{esm2015/src/management/gui/WrongFormatException.js → esm2020/src/management/gui/WrongFormatException.mjs} +0 -0
- package/{esm2015/src/management/tasks/GuiDataCollection.js → esm2020/src/management/tasks/GuiDataCollection.mjs} +0 -0
- package/esm2020/src/management/tasks/GuiTaskBase.mjs +502 -0
- package/{esm2015/src/management/tasks/IMGDataTable.js → esm2020/src/management/tasks/IMGDataTable.mjs} +1 -0
- package/{esm2015/src/management/tasks/ITask.js → esm2020/src/management/tasks/ITask.mjs} +1 -0
- package/esm2020/src/management/tasks/MgTimer.mjs +21 -0
- package/{esm2015/src/management/tasks/TaskDefinitionId.js → esm2020/src/management/tasks/TaskDefinitionId.mjs} +0 -0
- package/esm2020/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -0
- package/{esm2015/src/util/AuthenticationDialogHandler.js → esm2020/src/util/AuthenticationDialogHandler.mjs} +0 -0
- package/{esm2015/src/util/MemoryUtil.js → esm2020/src/util/MemoryUtil.mjs} +0 -0
- package/{esm2015/src/util/ObjectReference.js → esm2020/src/util/ObjectReference.mjs} +0 -0
- package/esm2020/src/util/ProcessLauncher.mjs +32 -0
- package/esm2020/src/util/UsernamePasswordCredentials.mjs +52 -0
- package/fesm2015/{magic-xpa-gui.js → magic-xpa-gui.mjs} +133 -175
- package/fesm2015/magic-xpa-gui.mjs.map +1 -0
- package/fesm2020/magic-xpa-gui.mjs +17805 -0
- package/fesm2020/magic-xpa-gui.mjs.map +1 -0
- package/package.json +27 -14
- package/src/Events.d.ts +2 -2
- package/src/EventsProcessor.d.ts +1 -1
- package/src/IFlowMonitorQueue.d.ts +1 -1
- package/src/Manager.d.ts +2 -3
- package/src/management/data/DcValues.d.ts +1 -1
- package/src/management/data/DcValuesBuilderBase.d.ts +1 -1
- package/src/management/data/RecordUtils.d.ts +0 -3
- package/src/management/events/IGuiEventsManager.d.ts +5 -5
- package/src/management/exp/GuiExpressionEvaluator.d.ts +2 -2
- package/src/management/gui/DisplayConvertor.d.ts +6 -6
- package/src/management/gui/GuiControlPropertyAdapter.d.ts +6 -6
- package/src/management/gui/MgControlBase.d.ts +2 -4
- package/src/management/gui/MgFormBase.d.ts +1 -1
- package/src/management/gui/PropTable.d.ts +1 -1
- package/src/management/gui/Property.d.ts +2 -2
- package/src/management/tasks/GuiTaskBase.d.ts +3 -3
- package/src/util/ProcessLauncher.d.ts +1 -3
- package/bundles/magic-xpa-gui.umd.js +0 -19431
- package/bundles/magic-xpa-gui.umd.js.map +0 -1
- package/bundles/magic-xpa-gui.umd.min.js +0 -16
- package/bundles/magic-xpa-gui.umd.min.js.map +0 -1
- package/esm2015/src/Commands.js +0 -189
- package/esm2015/src/Events.js +0 -420
- package/esm2015/src/EventsProcessor.js +0 -68
- package/esm2015/src/FocusManager.js +0 -41
- package/esm2015/src/Manager.js +0 -197
- package/esm2015/src/gui/low/GuiInteractive.js +0 -545
- package/esm2015/src/management/data/DcValues.js +0 -214
- package/esm2015/src/management/data/DcValuesBuilderBase.js +0 -97
- package/esm2015/src/management/data/GuiDataViewBase.js +0 -90
- package/esm2015/src/management/data/GuiFieldBase.js +0 -85
- package/esm2015/src/management/data/ObjectReferenceBase.js +0 -48
- package/esm2015/src/management/data/RecordUtils.js +0 -447
- package/esm2015/src/management/events/IGuiEventsManager.js +0 -1
- package/esm2015/src/management/exp/GuiExpressionEvaluator.js +0 -333
- package/esm2015/src/management/gui/DisplayConvertor.js +0 -1706
- package/esm2015/src/management/gui/FieldValidator.js +0 -1507
- package/esm2015/src/management/gui/GuiControlPropertyAdapter.js +0 -4
- package/esm2015/src/management/gui/MgControlBase.js +0 -1981
- package/esm2015/src/management/gui/MgFormBase.js +0 -763
- package/esm2015/src/management/gui/PropDefaults.js +0 -230
- package/esm2015/src/management/gui/PropTable.js +0 -224
- package/esm2015/src/management/gui/Property.js +0 -1402
- package/esm2015/src/management/tasks/GuiTaskBase.js +0 -506
- package/esm2015/src/management/tasks/MgTimer.js +0 -21
- package/esm2015/src/management/tasks/TaskDefinitionIdTableSaxHandler.js +0 -41
- package/esm2015/src/util/ProcessLauncher.js +0 -32
- package/esm2015/src/util/UsernamePasswordCredentials.js +0 -52
- package/fesm2015/magic-xpa-gui.js.map +0 -1
|
@@ -1,545 +0,0 @@
|
|
|
1
|
-
import { MgValue } from '../MgValue';
|
|
2
|
-
import { GuiMgForm } from '../GuiMgForm';
|
|
3
|
-
import { Events } from '../../Events';
|
|
4
|
-
import { UIBridge } from '../../UIBridge';
|
|
5
|
-
import { ControlBase } from '../ControlBase';
|
|
6
|
-
import { GuiCommandQueue } from './GuiCommandQueue';
|
|
7
|
-
export var InteractiveCommandType;
|
|
8
|
-
(function (InteractiveCommandType) {
|
|
9
|
-
InteractiveCommandType[InteractiveCommandType["GET_FONT_METRICS"] = 0] = "GET_FONT_METRICS";
|
|
10
|
-
InteractiveCommandType[InteractiveCommandType["GET_RESOLUTION"] = 1] = "GET_RESOLUTION";
|
|
11
|
-
InteractiveCommandType[InteractiveCommandType["GET_BOUNDS"] = 2] = "GET_BOUNDS";
|
|
12
|
-
InteractiveCommandType[InteractiveCommandType["GET_VALUE"] = 3] = "GET_VALUE";
|
|
13
|
-
InteractiveCommandType[InteractiveCommandType["SET_BROWSER_TEXT"] = 4] = "SET_BROWSER_TEXT";
|
|
14
|
-
InteractiveCommandType[InteractiveCommandType["GET_BROWSER_TEXT"] = 5] = "GET_BROWSER_TEXT";
|
|
15
|
-
InteractiveCommandType[InteractiveCommandType["BROWSER_EXECUTE"] = 6] = "BROWSER_EXECUTE";
|
|
16
|
-
InteractiveCommandType[InteractiveCommandType["GET_TOP_INDEX"] = 7] = "GET_TOP_INDEX";
|
|
17
|
-
InteractiveCommandType[InteractiveCommandType["MESSAGE_BOX"] = 8] = "MESSAGE_BOX";
|
|
18
|
-
InteractiveCommandType[InteractiveCommandType["SET_TITLE"] = 9] = "SET_TITLE";
|
|
19
|
-
InteractiveCommandType[InteractiveCommandType["DIRECTORY_DIALOG_BOX"] = 10] = "DIRECTORY_DIALOG_BOX";
|
|
20
|
-
InteractiveCommandType[InteractiveCommandType["GET_CLIENT_BOUNDS"] = 11] = "GET_CLIENT_BOUNDS";
|
|
21
|
-
InteractiveCommandType[InteractiveCommandType["SET_EDIT_TEXT"] = 12] = "SET_EDIT_TEXT";
|
|
22
|
-
InteractiveCommandType[InteractiveCommandType["INSERT_EDIT_TEXT"] = 13] = "INSERT_EDIT_TEXT";
|
|
23
|
-
InteractiveCommandType[InteractiveCommandType["SET_SELECTION"] = 14] = "SET_SELECTION";
|
|
24
|
-
InteractiveCommandType[InteractiveCommandType["GET_SELECTION"] = 15] = "GET_SELECTION";
|
|
25
|
-
InteractiveCommandType[InteractiveCommandType["GET_CARET_POS"] = 16] = "GET_CARET_POS";
|
|
26
|
-
InteractiveCommandType[InteractiveCommandType["REFRESH_PAGE"] = 17] = "REFRESH_PAGE";
|
|
27
|
-
InteractiveCommandType[InteractiveCommandType["GET_IS_TOP_OF_TEXTBOX"] = 18] = "GET_IS_TOP_OF_TEXTBOX";
|
|
28
|
-
InteractiveCommandType[InteractiveCommandType["GET_IS_END_OF_TEXTBOX"] = 19] = "GET_IS_END_OF_TEXTBOX";
|
|
29
|
-
InteractiveCommandType[InteractiveCommandType["CLIPBOARD_GET_CONTENT"] = 20] = "CLIPBOARD_GET_CONTENT";
|
|
30
|
-
InteractiveCommandType[InteractiveCommandType["CLIPBOARD_SET_CONTENT"] = 21] = "CLIPBOARD_SET_CONTENT";
|
|
31
|
-
InteractiveCommandType[InteractiveCommandType["CLIPBOARD_PASTE"] = 22] = "CLIPBOARD_PASTE";
|
|
32
|
-
InteractiveCommandType[InteractiveCommandType["POST_KEY_EVENT"] = 23] = "POST_KEY_EVENT";
|
|
33
|
-
InteractiveCommandType[InteractiveCommandType["POST_CHAR_EVENT"] = 24] = "POST_CHAR_EVENT";
|
|
34
|
-
InteractiveCommandType[InteractiveCommandType["SET_CURSOR"] = 25] = "SET_CURSOR";
|
|
35
|
-
InteractiveCommandType[InteractiveCommandType["DISPOSE_ALL_FORMS"] = 26] = "DISPOSE_ALL_FORMS";
|
|
36
|
-
InteractiveCommandType[InteractiveCommandType["GET_ROWS_IN_PAGE"] = 27] = "GET_ROWS_IN_PAGE";
|
|
37
|
-
InteractiveCommandType[InteractiveCommandType["GET_HIDDEN_ROWS_COUNT_IN_TABLE"] = 28] = "GET_HIDDEN_ROWS_COUNT_IN_TABLE";
|
|
38
|
-
InteractiveCommandType[InteractiveCommandType["FILE_OPEN_DIALOG_BOX"] = 29] = "FILE_OPEN_DIALOG_BOX";
|
|
39
|
-
InteractiveCommandType[InteractiveCommandType["FILE_SAVE_DIALOG_BOX"] = 30] = "FILE_SAVE_DIALOG_BOX";
|
|
40
|
-
InteractiveCommandType[InteractiveCommandType["CREATE_DIALOG"] = 31] = "CREATE_DIALOG";
|
|
41
|
-
InteractiveCommandType[InteractiveCommandType["OPEN_DIALOG"] = 32] = "OPEN_DIALOG";
|
|
42
|
-
InteractiveCommandType[InteractiveCommandType["CLOSE_DIALOG"] = 33] = "CLOSE_DIALOG";
|
|
43
|
-
InteractiveCommandType[InteractiveCommandType["SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA"] = 34] = "SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA";
|
|
44
|
-
InteractiveCommandType[InteractiveCommandType["REFLECTION_INVOKE"] = 35] = "REFLECTION_INVOKE";
|
|
45
|
-
InteractiveCommandType[InteractiveCommandType["REFLECTION_SET"] = 36] = "REFLECTION_SET";
|
|
46
|
-
InteractiveCommandType[InteractiveCommandType["GET_LAST_WINDOW_STATE"] = 37] = "GET_LAST_WINDOW_STATE";
|
|
47
|
-
InteractiveCommandType[InteractiveCommandType["GET_FRAMES_BOUNDS"] = 38] = "GET_FRAMES_BOUNDS";
|
|
48
|
-
InteractiveCommandType[InteractiveCommandType["GET_LINKED_PARENT_IDX"] = 39] = "GET_LINKED_PARENT_IDX";
|
|
49
|
-
InteractiveCommandType[InteractiveCommandType["GET_FORM_BOUNDS"] = 40] = "GET_FORM_BOUNDS";
|
|
50
|
-
InteractiveCommandType[InteractiveCommandType["GET_COLUMNS_STATE"] = 41] = "GET_COLUMNS_STATE";
|
|
51
|
-
InteractiveCommandType[InteractiveCommandType["GET_FORM_HANDLE"] = 42] = "GET_FORM_HANDLE";
|
|
52
|
-
InteractiveCommandType[InteractiveCommandType["GET_CTRL_HANDLE"] = 43] = "GET_CTRL_HANDLE";
|
|
53
|
-
InteractiveCommandType[InteractiveCommandType["IS_FORM_ACTIVE"] = 44] = "IS_FORM_ACTIVE";
|
|
54
|
-
InteractiveCommandType[InteractiveCommandType["SET_MARKED_TEXT_ON_RICH_EDIT"] = 45] = "SET_MARKED_TEXT_ON_RICH_EDIT";
|
|
55
|
-
InteractiveCommandType[InteractiveCommandType["SEND_IME_MSG"] = 46] = "SEND_IME_MSG";
|
|
56
|
-
InteractiveCommandType[InteractiveCommandType["CAN_FOCUS"] = 47] = "CAN_FOCUS";
|
|
57
|
-
InteractiveCommandType[InteractiveCommandType["INVOKE_OSCOMMAND"] = 48] = "INVOKE_OSCOMMAND";
|
|
58
|
-
InteractiveCommandType[InteractiveCommandType["GET_SELECTED_INDICE"] = 49] = "GET_SELECTED_INDICE";
|
|
59
|
-
InteractiveCommandType[InteractiveCommandType["SET_SUGGESTED_VALUE"] = 50] = "SET_SUGGESTED_VALUE";
|
|
60
|
-
InteractiveCommandType[InteractiveCommandType["MAP_WIDGET_TO_GUI_OBJECT"] = 51] = "MAP_WIDGET_TO_GUI_OBJECT";
|
|
61
|
-
InteractiveCommandType[InteractiveCommandType["REMOVE_DN_CONTROL_VALUE_CHANGED_HANDLER"] = 52] = "REMOVE_DN_CONTROL_VALUE_CHANGED_HANDLER";
|
|
62
|
-
InteractiveCommandType[InteractiveCommandType["ADD_DN_CONTROL_VALUE_CHANGED_HANDLER"] = 53] = "ADD_DN_CONTROL_VALUE_CHANGED_HANDLER";
|
|
63
|
-
InteractiveCommandType[InteractiveCommandType["GET_RTF_VALUE_BEFORE_ENTERING_CONTROL"] = 54] = "GET_RTF_VALUE_BEFORE_ENTERING_CONTROL";
|
|
64
|
-
InteractiveCommandType[InteractiveCommandType["ATTACH_DNKEY_TO_OBJECT"] = 55] = "ATTACH_DNKEY_TO_OBJECT";
|
|
65
|
-
InteractiveCommandType[InteractiveCommandType["GET_DVCONTROL_POSITION_ISN"] = 56] = "GET_DVCONTROL_POSITION_ISN";
|
|
66
|
-
InteractiveCommandType[InteractiveCommandType["CLEAR_DATA_TABLE"] = 57] = "CLEAR_DATA_TABLE";
|
|
67
|
-
InteractiveCommandType[InteractiveCommandType["SET_DATA_SOURCE_TO_DVCONTROL"] = 58] = "SET_DATA_SOURCE_TO_DVCONTROL";
|
|
68
|
-
InteractiveCommandType[InteractiveCommandType["ACTIVATE_FORM"] = 59] = "ACTIVATE_FORM";
|
|
69
|
-
InteractiveCommandType[InteractiveCommandType["IS_COMBO_DROPPED_DOWN"] = 60] = "IS_COMBO_DROPPED_DOWN";
|
|
70
|
-
InteractiveCommandType[InteractiveCommandType["OPEN_FORM_DESIGNER"] = 61] = "OPEN_FORM_DESIGNER";
|
|
71
|
-
InteractiveCommandType[InteractiveCommandType["INVOKE_UDPCOMMAND"] = 62] = "INVOKE_UDPCOMMAND";
|
|
72
|
-
InteractiveCommandType[InteractiveCommandType["GET_HASINDENT"] = 63] = "GET_HASINDENT";
|
|
73
|
-
InteractiveCommandType[InteractiveCommandType["GET_IS_ROW_EDITING"] = 64] = "GET_IS_ROW_EDITING";
|
|
74
|
-
InteractiveCommandType[InteractiveCommandType["GET_MAX_ROWS_IN_PAGINATED_TABLE"] = 65] = "GET_MAX_ROWS_IN_PAGINATED_TABLE";
|
|
75
|
-
InteractiveCommandType[InteractiveCommandType["CALL_JS"] = 66] = "CALL_JS";
|
|
76
|
-
InteractiveCommandType[InteractiveCommandType["GET_LAST_ROUTE"] = 67] = "GET_LAST_ROUTE";
|
|
77
|
-
})(InteractiveCommandType || (InteractiveCommandType = {}));
|
|
78
|
-
export class GuiInteractiveBase {
|
|
79
|
-
constructor() {
|
|
80
|
-
this._commandType = 0;
|
|
81
|
-
this.TaskTag = null;
|
|
82
|
-
this.controlName = null;
|
|
83
|
-
this._x = 0;
|
|
84
|
-
this._y = 0;
|
|
85
|
-
this._char = null;
|
|
86
|
-
this._str = String.fromCharCode(0);
|
|
87
|
-
this._intVal1 = 0;
|
|
88
|
-
this._line = 0;
|
|
89
|
-
this._obj1 = null;
|
|
90
|
-
this._parameters = null;
|
|
91
|
-
this._boolVal = false;
|
|
92
|
-
this._obj2 = null;
|
|
93
|
-
this._mgValue = null;
|
|
94
|
-
this._setValue = false;
|
|
95
|
-
this.resultString = String.fromCharCode(0);
|
|
96
|
-
}
|
|
97
|
-
canFocus(guiMgControl) {
|
|
98
|
-
this._commandType = InteractiveCommandType.CAN_FOCUS;
|
|
99
|
-
this._obj1 = guiMgControl;
|
|
100
|
-
this._mgValue = new MgValue();
|
|
101
|
-
this.Invoke();
|
|
102
|
-
return this._mgValue.boolVal;
|
|
103
|
-
}
|
|
104
|
-
GetSelectedIndice(guiMgControl) {
|
|
105
|
-
this._commandType = InteractiveCommandType.GET_SELECTED_INDICE;
|
|
106
|
-
this._obj1 = guiMgControl;
|
|
107
|
-
this._mgValue = new MgValue();
|
|
108
|
-
this.Invoke();
|
|
109
|
-
return this._mgValue.str;
|
|
110
|
-
}
|
|
111
|
-
GetHasIndent(guiMgControl) {
|
|
112
|
-
this._commandType = InteractiveCommandType.GET_HASINDENT;
|
|
113
|
-
this._obj1 = guiMgControl;
|
|
114
|
-
this.Invoke();
|
|
115
|
-
return this._boolVal;
|
|
116
|
-
}
|
|
117
|
-
setGetSuggestedValueOfChoiceControlOnTagData(ctrl, line, retSuggestedValue) {
|
|
118
|
-
this._commandType = InteractiveCommandType.SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA;
|
|
119
|
-
this._obj2 = ctrl;
|
|
120
|
-
this._line = line;
|
|
121
|
-
this._boolVal = retSuggestedValue;
|
|
122
|
-
this.Invoke();
|
|
123
|
-
}
|
|
124
|
-
getValue(obj, line) {
|
|
125
|
-
this._commandType = InteractiveCommandType.GET_VALUE;
|
|
126
|
-
this._obj2 = obj;
|
|
127
|
-
this._line = line;
|
|
128
|
-
this._mgValue = new MgValue();
|
|
129
|
-
this.Invoke();
|
|
130
|
-
return this._mgValue.obj;
|
|
131
|
-
}
|
|
132
|
-
getTopIndex(tablecontrol) {
|
|
133
|
-
this._commandType = InteractiveCommandType.GET_TOP_INDEX;
|
|
134
|
-
this._obj2 = tablecontrol;
|
|
135
|
-
this.Invoke();
|
|
136
|
-
return this._intVal1;
|
|
137
|
-
}
|
|
138
|
-
getIsRowEditing(tablecontrol, line, isLineMode) {
|
|
139
|
-
this._commandType = InteractiveCommandType.GET_IS_ROW_EDITING;
|
|
140
|
-
this._obj2 = tablecontrol;
|
|
141
|
-
this._intVal1 = line;
|
|
142
|
-
this._boolVal = isLineMode;
|
|
143
|
-
this.Invoke();
|
|
144
|
-
return this._boolVal;
|
|
145
|
-
}
|
|
146
|
-
browserExecute(browserControl, text, syncExec, language) {
|
|
147
|
-
this._commandType = InteractiveCommandType.BROWSER_EXECUTE;
|
|
148
|
-
this._obj2 = browserControl;
|
|
149
|
-
this._mgValue = new MgValue();
|
|
150
|
-
this._mgValue.str = text;
|
|
151
|
-
this._mgValue.obj = language;
|
|
152
|
-
if (syncExec) {
|
|
153
|
-
this.Invoke();
|
|
154
|
-
return this._mgValue.boolVal;
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
return true;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
messageBox(title, msg, style) {
|
|
161
|
-
this._commandType = InteractiveCommandType.MESSAGE_BOX;
|
|
162
|
-
this._mgValue = new MgValue();
|
|
163
|
-
this._mgValue.title = title;
|
|
164
|
-
this._mgValue.str = ((msg === null) ? '' : msg);
|
|
165
|
-
this._mgValue.style = style;
|
|
166
|
-
Events.RefreshTables();
|
|
167
|
-
this.Invoke();
|
|
168
|
-
return this._mgValue.number;
|
|
169
|
-
}
|
|
170
|
-
setTitle(topMostForm, title) {
|
|
171
|
-
this._commandType = InteractiveCommandType.SET_TITLE;
|
|
172
|
-
this._mgValue = new MgValue();
|
|
173
|
-
this._obj2 = topMostForm;
|
|
174
|
-
this._mgValue.title = ((title === null) ? '' : title);
|
|
175
|
-
this.Invoke();
|
|
176
|
-
}
|
|
177
|
-
invokeUDP(contextId) {
|
|
178
|
-
this._commandType = InteractiveCommandType.INVOKE_UDPCOMMAND;
|
|
179
|
-
this._mgValue = new MgValue();
|
|
180
|
-
this._mgValue.obj = contextId;
|
|
181
|
-
this.Invoke();
|
|
182
|
-
return this._mgValue.number;
|
|
183
|
-
}
|
|
184
|
-
directoryDialogBox(caption, path, bShowNewFolder) {
|
|
185
|
-
this._commandType = InteractiveCommandType.DIRECTORY_DIALOG_BOX;
|
|
186
|
-
this._mgValue = new MgValue();
|
|
187
|
-
this._mgValue.caption = caption;
|
|
188
|
-
this._mgValue.path = path;
|
|
189
|
-
this._mgValue.bool1 = bShowNewFolder;
|
|
190
|
-
this.Invoke();
|
|
191
|
-
return this._mgValue.str;
|
|
192
|
-
}
|
|
193
|
-
fileOpenDialogBox(title, dirName, fileName, filterNames, checkExists, multiSelect) {
|
|
194
|
-
this._commandType = InteractiveCommandType.FILE_OPEN_DIALOG_BOX;
|
|
195
|
-
this._mgValue = new MgValue();
|
|
196
|
-
this._mgValue.title = title;
|
|
197
|
-
this._mgValue.path = dirName;
|
|
198
|
-
this._mgValue.str = fileName;
|
|
199
|
-
this._mgValue.filter = filterNames;
|
|
200
|
-
this._mgValue.boolVal = checkExists;
|
|
201
|
-
this._mgValue.bool1 = multiSelect;
|
|
202
|
-
this.Invoke();
|
|
203
|
-
return this._mgValue.str;
|
|
204
|
-
}
|
|
205
|
-
fileSaveDialogBox(title, dirName, fileName, filterNames, defaultExtension, overwritePrompt) {
|
|
206
|
-
this._commandType = InteractiveCommandType.FILE_SAVE_DIALOG_BOX;
|
|
207
|
-
this._mgValue = new MgValue();
|
|
208
|
-
this._mgValue.title = title;
|
|
209
|
-
this._mgValue.path = dirName;
|
|
210
|
-
this._mgValue.str = fileName;
|
|
211
|
-
this._mgValue.filter = filterNames;
|
|
212
|
-
this._mgValue.caption = defaultExtension;
|
|
213
|
-
this._mgValue.bool1 = overwritePrompt;
|
|
214
|
-
this.Invoke();
|
|
215
|
-
return this._mgValue.str;
|
|
216
|
-
}
|
|
217
|
-
createDialog(handle, parameters) {
|
|
218
|
-
this._commandType = InteractiveCommandType.CREATE_DIALOG;
|
|
219
|
-
this._parameters = parameters;
|
|
220
|
-
this._obj2 = handle;
|
|
221
|
-
this.Invoke();
|
|
222
|
-
}
|
|
223
|
-
closeDialog(handle) {
|
|
224
|
-
this._commandType = InteractiveCommandType.CLOSE_DIALOG;
|
|
225
|
-
this._obj2 = handle;
|
|
226
|
-
this.Invoke();
|
|
227
|
-
}
|
|
228
|
-
setEditText(control, line, text) {
|
|
229
|
-
this._commandType = InteractiveCommandType.SET_EDIT_TEXT;
|
|
230
|
-
this._obj2 = control;
|
|
231
|
-
this._line = line;
|
|
232
|
-
this._mgValue = new MgValue();
|
|
233
|
-
this._mgValue.str = text;
|
|
234
|
-
this.Invoke();
|
|
235
|
-
return this._mgValue.boolVal;
|
|
236
|
-
}
|
|
237
|
-
insertEditText(control, line, startPosition, textToInsert) {
|
|
238
|
-
this._commandType = InteractiveCommandType.INSERT_EDIT_TEXT;
|
|
239
|
-
this._obj2 = control;
|
|
240
|
-
this._line = line;
|
|
241
|
-
this._mgValue = new MgValue();
|
|
242
|
-
this._mgValue.str = textToInsert;
|
|
243
|
-
this._intVal1 = startPosition;
|
|
244
|
-
this.Invoke();
|
|
245
|
-
return this._mgValue.boolVal;
|
|
246
|
-
}
|
|
247
|
-
setSelection(control, line, start, end, caretPos) {
|
|
248
|
-
this._commandType = InteractiveCommandType.SET_SELECTION;
|
|
249
|
-
this._obj2 = control;
|
|
250
|
-
this._line = line;
|
|
251
|
-
this._x = start;
|
|
252
|
-
this._y = end;
|
|
253
|
-
this._mgValue = new MgValue();
|
|
254
|
-
this._mgValue.number = caretPos;
|
|
255
|
-
this.Invoke();
|
|
256
|
-
}
|
|
257
|
-
setSuggestedValue(control, suggestedValue) {
|
|
258
|
-
this._commandType = InteractiveCommandType.SET_SUGGESTED_VALUE;
|
|
259
|
-
this._obj2 = control;
|
|
260
|
-
this._mgValue = new MgValue();
|
|
261
|
-
this._mgValue.str = suggestedValue;
|
|
262
|
-
this.Invoke();
|
|
263
|
-
}
|
|
264
|
-
caretPosGet(control, line) {
|
|
265
|
-
this._commandType = InteractiveCommandType.GET_CARET_POS;
|
|
266
|
-
this._obj2 = control;
|
|
267
|
-
this._line = line;
|
|
268
|
-
this._mgValue = new MgValue();
|
|
269
|
-
this.Invoke();
|
|
270
|
-
return this._mgValue.number;
|
|
271
|
-
}
|
|
272
|
-
RefreshPage(navigateToRootRoute, initialUrl) {
|
|
273
|
-
this._commandType = InteractiveCommandType.REFRESH_PAGE;
|
|
274
|
-
this._boolVal = navigateToRootRoute;
|
|
275
|
-
this._obj1 = initialUrl;
|
|
276
|
-
this.Invoke();
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
getIsTopOfTextBox(control, line) {
|
|
280
|
-
this._commandType = InteractiveCommandType.GET_IS_TOP_OF_TEXTBOX;
|
|
281
|
-
this._obj2 = control;
|
|
282
|
-
this._line = line;
|
|
283
|
-
this.Invoke();
|
|
284
|
-
return this._boolVal;
|
|
285
|
-
}
|
|
286
|
-
getIsEndOfTextBox(control, line) {
|
|
287
|
-
this._commandType = InteractiveCommandType.GET_IS_END_OF_TEXTBOX;
|
|
288
|
-
this._obj2 = control;
|
|
289
|
-
this._line = line;
|
|
290
|
-
this.Invoke();
|
|
291
|
-
return this._boolVal;
|
|
292
|
-
}
|
|
293
|
-
postKeyEvent(control, line, keys, PostChar, forceLogicalControlTextUpdate) {
|
|
294
|
-
this._commandType = InteractiveCommandType.POST_KEY_EVENT;
|
|
295
|
-
this._obj2 = control;
|
|
296
|
-
this._line = line;
|
|
297
|
-
this._mgValue = new MgValue();
|
|
298
|
-
this._mgValue.str = keys;
|
|
299
|
-
this._mgValue.bool1 = forceLogicalControlTextUpdate;
|
|
300
|
-
this._boolVal = PostChar;
|
|
301
|
-
this.Invoke();
|
|
302
|
-
}
|
|
303
|
-
postCharEvent(control, line, chr) {
|
|
304
|
-
this._commandType = InteractiveCommandType.POST_CHAR_EVENT;
|
|
305
|
-
this._obj2 = control;
|
|
306
|
-
this._line = line;
|
|
307
|
-
this._char = chr;
|
|
308
|
-
this.Invoke();
|
|
309
|
-
}
|
|
310
|
-
disposeAllForms() {
|
|
311
|
-
this._commandType = InteractiveCommandType.DISPOSE_ALL_FORMS;
|
|
312
|
-
this.Invoke();
|
|
313
|
-
}
|
|
314
|
-
getRowsInPage(control) {
|
|
315
|
-
this._commandType = InteractiveCommandType.GET_ROWS_IN_PAGE;
|
|
316
|
-
this._obj2 = control;
|
|
317
|
-
this.Invoke();
|
|
318
|
-
return this._intVal1;
|
|
319
|
-
}
|
|
320
|
-
getMaxRowsInPaginatedTable(control) {
|
|
321
|
-
this._commandType = InteractiveCommandType.GET_MAX_ROWS_IN_PAGINATED_TABLE;
|
|
322
|
-
this._obj2 = control;
|
|
323
|
-
this.Invoke();
|
|
324
|
-
return this._intVal1;
|
|
325
|
-
}
|
|
326
|
-
getLastRoute() {
|
|
327
|
-
this._commandType = InteractiveCommandType.GET_LAST_ROUTE;
|
|
328
|
-
this.Invoke();
|
|
329
|
-
return this.resultString;
|
|
330
|
-
}
|
|
331
|
-
GetHiddenRowsCountInTable(control) {
|
|
332
|
-
this._commandType = InteractiveCommandType.GET_HIDDEN_ROWS_COUNT_IN_TABLE;
|
|
333
|
-
this._obj2 = control;
|
|
334
|
-
this.Invoke();
|
|
335
|
-
return this._intVal1;
|
|
336
|
-
}
|
|
337
|
-
getLastWindowState(guiMgForm) {
|
|
338
|
-
this._commandType = InteractiveCommandType.GET_LAST_WINDOW_STATE;
|
|
339
|
-
this._obj2 = guiMgForm;
|
|
340
|
-
this.Invoke();
|
|
341
|
-
return this._intVal1;
|
|
342
|
-
}
|
|
343
|
-
getLinkedParentIdx(frameset) {
|
|
344
|
-
this._commandType = InteractiveCommandType.GET_LINKED_PARENT_IDX;
|
|
345
|
-
this._obj2 = frameset;
|
|
346
|
-
this.Invoke();
|
|
347
|
-
return this._intVal1;
|
|
348
|
-
}
|
|
349
|
-
getColumnsState(tableCtrl) {
|
|
350
|
-
this._commandType = InteractiveCommandType.GET_COLUMNS_STATE;
|
|
351
|
-
this._obj2 = tableCtrl;
|
|
352
|
-
this._mgValue = new MgValue();
|
|
353
|
-
this.Invoke();
|
|
354
|
-
return this._mgValue.listOfIntArr;
|
|
355
|
-
}
|
|
356
|
-
MapWidget(newObjectToSet) {
|
|
357
|
-
if (arguments.length === 1)
|
|
358
|
-
this.MapWidget_0(newObjectToSet);
|
|
359
|
-
else
|
|
360
|
-
this.MapWidget_1();
|
|
361
|
-
}
|
|
362
|
-
MapWidget_0(newObjectToSet) {
|
|
363
|
-
this._commandType = InteractiveCommandType.MAP_WIDGET_TO_GUI_OBJECT;
|
|
364
|
-
this._obj1 = newObjectToSet;
|
|
365
|
-
this.Invoke();
|
|
366
|
-
}
|
|
367
|
-
ActivateForm(guiMgForm) {
|
|
368
|
-
this._commandType = InteractiveCommandType.ACTIVATE_FORM;
|
|
369
|
-
this._obj1 = guiMgForm;
|
|
370
|
-
this.Invoke();
|
|
371
|
-
}
|
|
372
|
-
isFormActive(guiMgForm) {
|
|
373
|
-
if (arguments.length === 1)
|
|
374
|
-
return this.isFormActive_0(guiMgForm);
|
|
375
|
-
else
|
|
376
|
-
this.isFormActive_1();
|
|
377
|
-
}
|
|
378
|
-
isFormActive_0(guiMgForm) {
|
|
379
|
-
return this._boolVal;
|
|
380
|
-
}
|
|
381
|
-
GetRtfValueBeforeEnteringControl(guiMgControl, line) {
|
|
382
|
-
this._commandType = InteractiveCommandType.GET_RTF_VALUE_BEFORE_ENTERING_CONTROL;
|
|
383
|
-
this._obj2 = guiMgControl;
|
|
384
|
-
this._line = line;
|
|
385
|
-
this._mgValue = new MgValue();
|
|
386
|
-
this.Invoke();
|
|
387
|
-
return this._mgValue.str;
|
|
388
|
-
}
|
|
389
|
-
GetDVControlPositionIsn(dataTable, line) {
|
|
390
|
-
this._commandType = InteractiveCommandType.GET_DVCONTROL_POSITION_ISN;
|
|
391
|
-
this._obj1 = dataTable;
|
|
392
|
-
this._line = line;
|
|
393
|
-
this.Invoke();
|
|
394
|
-
return this._intVal1;
|
|
395
|
-
}
|
|
396
|
-
ClearDatatable(dvControl, dataTable) {
|
|
397
|
-
this._commandType = InteractiveCommandType.CLEAR_DATA_TABLE;
|
|
398
|
-
this._obj1 = dvControl;
|
|
399
|
-
this._obj2 = dataTable;
|
|
400
|
-
this.Invoke();
|
|
401
|
-
}
|
|
402
|
-
SetDataSourceToDataViewControl(dvControl, dataTable, propertyName) {
|
|
403
|
-
this._commandType = InteractiveCommandType.SET_DATA_SOURCE_TO_DVCONTROL;
|
|
404
|
-
this._obj1 = dvControl;
|
|
405
|
-
this._obj2 = dataTable;
|
|
406
|
-
this._str = propertyName;
|
|
407
|
-
this.Invoke();
|
|
408
|
-
}
|
|
409
|
-
IsComboBoxInDroppedDownState(comboBox, line) {
|
|
410
|
-
this._commandType = InteractiveCommandType.IS_COMBO_DROPPED_DOWN;
|
|
411
|
-
this._obj1 = comboBox;
|
|
412
|
-
this._line = line;
|
|
413
|
-
this.Invoke();
|
|
414
|
-
return this._boolVal;
|
|
415
|
-
}
|
|
416
|
-
ExecuteCallJS(form, formName, functionName, args) {
|
|
417
|
-
this._commandType = InteractiveCommandType.CALL_JS;
|
|
418
|
-
this._obj2 = form;
|
|
419
|
-
this.controlName = formName;
|
|
420
|
-
this._str = functionName;
|
|
421
|
-
this.arguments = args;
|
|
422
|
-
this.Invoke();
|
|
423
|
-
return this.resultString;
|
|
424
|
-
}
|
|
425
|
-
Invoke() {
|
|
426
|
-
GuiCommandQueue.getInstance().invoke();
|
|
427
|
-
if (this._obj2 instanceof ControlBase) {
|
|
428
|
-
let controlBase = this._obj2;
|
|
429
|
-
this.TaskTag = controlBase.TaskTag;
|
|
430
|
-
this.controlName = controlBase.UniqueName;
|
|
431
|
-
}
|
|
432
|
-
else if (this._obj2 instanceof GuiMgForm) {
|
|
433
|
-
let guiMgForm = this._obj2;
|
|
434
|
-
this.TaskTag = guiMgForm.TaskTag;
|
|
435
|
-
}
|
|
436
|
-
else
|
|
437
|
-
this.TaskTag = '0';
|
|
438
|
-
UIBridge.getInstance().ExecuteInteractiveCommand(this);
|
|
439
|
-
}
|
|
440
|
-
OnRemoveDNControlValueChangedHandler() {
|
|
441
|
-
Events.WriteExceptionToLog('RemoveDNControlValueChangedHandler - Not Implemented Yet');
|
|
442
|
-
}
|
|
443
|
-
OnAddDNControlValueChangedHandler() {
|
|
444
|
-
Events.WriteExceptionToLog('AddDNControlValueChangedHandler - Not Implemented Yet');
|
|
445
|
-
}
|
|
446
|
-
OnGetRtfValueBeforeEnteringControl() {
|
|
447
|
-
Events.WriteExceptionToLog('OnGetOrgRtfValue - Not Implemented Yet');
|
|
448
|
-
}
|
|
449
|
-
onInvokeUDP() {
|
|
450
|
-
}
|
|
451
|
-
onFileOpenDialogBox() {
|
|
452
|
-
}
|
|
453
|
-
onFileSaveDialogBox() {
|
|
454
|
-
}
|
|
455
|
-
onCreateDialog() {
|
|
456
|
-
}
|
|
457
|
-
onOpenDialog() {
|
|
458
|
-
}
|
|
459
|
-
onCloseDialog() {
|
|
460
|
-
}
|
|
461
|
-
isFormActive_1() {
|
|
462
|
-
}
|
|
463
|
-
onDisposeAllForms() {
|
|
464
|
-
}
|
|
465
|
-
onGetFontMetrics() {
|
|
466
|
-
}
|
|
467
|
-
onGetResolution() {
|
|
468
|
-
}
|
|
469
|
-
onCaretPosGet() {
|
|
470
|
-
}
|
|
471
|
-
onGetIsTopOfTextBox() {
|
|
472
|
-
return this._boolVal;
|
|
473
|
-
}
|
|
474
|
-
onGetIsEndOfTextBox() {
|
|
475
|
-
return this._boolVal;
|
|
476
|
-
}
|
|
477
|
-
onSelectionGet() {
|
|
478
|
-
}
|
|
479
|
-
onSetEditText() {
|
|
480
|
-
}
|
|
481
|
-
onInsertEditText() {
|
|
482
|
-
}
|
|
483
|
-
onSetBrowserText() {
|
|
484
|
-
}
|
|
485
|
-
onSetSelection() {
|
|
486
|
-
}
|
|
487
|
-
onSetSuggestedValue() {
|
|
488
|
-
}
|
|
489
|
-
onGetRowsInPage() {
|
|
490
|
-
}
|
|
491
|
-
onGetHiddenRowsCountInTable() {
|
|
492
|
-
}
|
|
493
|
-
onGetTopIndex() {
|
|
494
|
-
}
|
|
495
|
-
getClientBounds_1() {
|
|
496
|
-
}
|
|
497
|
-
onPostKeyEvent() {
|
|
498
|
-
}
|
|
499
|
-
onPostCharEvent() {
|
|
500
|
-
}
|
|
501
|
-
OnSetGetSuggestedValueOfChoiceControlOnTagData() {
|
|
502
|
-
}
|
|
503
|
-
onSendImeMsg() {
|
|
504
|
-
}
|
|
505
|
-
onSetCursor() {
|
|
506
|
-
}
|
|
507
|
-
invokeRequired() {
|
|
508
|
-
return false;
|
|
509
|
-
}
|
|
510
|
-
onGetLastWindowState() {
|
|
511
|
-
}
|
|
512
|
-
onGetLinkedParentIdx() {
|
|
513
|
-
}
|
|
514
|
-
onGetColumnsState() {
|
|
515
|
-
}
|
|
516
|
-
onCanFocus() {
|
|
517
|
-
}
|
|
518
|
-
OnGetSelectedIndice() {
|
|
519
|
-
}
|
|
520
|
-
OnGetHasIndent() {
|
|
521
|
-
}
|
|
522
|
-
MapWidget_1() {
|
|
523
|
-
}
|
|
524
|
-
OnGetDVControlPositionIsn() {
|
|
525
|
-
}
|
|
526
|
-
OnActivateForm() {
|
|
527
|
-
}
|
|
528
|
-
OnIsComboDroppedDowndState() {
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
GuiInteractiveBase.lockObject = null;
|
|
532
|
-
export class GuiInteractive extends GuiInteractiveBase {
|
|
533
|
-
OnGetRtfValueBeforeEnteringControl() {
|
|
534
|
-
}
|
|
535
|
-
onGetBrowserText() {
|
|
536
|
-
}
|
|
537
|
-
onBrowserExecute() {
|
|
538
|
-
}
|
|
539
|
-
onDirectoryDialogBox() {
|
|
540
|
-
}
|
|
541
|
-
constructor() {
|
|
542
|
-
super();
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpSW50ZXJhY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL2d1aS9sb3cvR3VpSW50ZXJhY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxDQUFOLElBQVksc0JBcUVYO0FBckVELFdBQVksc0JBQXNCO0lBQ2hDLDJGQUFnQixDQUFBO0lBQ2hCLHVGQUFjLENBQUE7SUFDZCwrRUFBVSxDQUFBO0lBQ1YsNkVBQVMsQ0FBQTtJQUNULDJGQUFnQixDQUFBO0lBQ2hCLDJGQUFnQixDQUFBO0lBQ2hCLHlGQUFlLENBQUE7SUFDZixxRkFBYSxDQUFBO0lBQ2IsaUZBQVcsQ0FBQTtJQUNYLDZFQUFTLENBQUE7SUFDVCxvR0FBb0IsQ0FBQTtJQUNwQiw4RkFBaUIsQ0FBQTtJQUNqQixzRkFBYSxDQUFBO0lBQ2IsNEZBQWdCLENBQUE7SUFDaEIsc0ZBQWEsQ0FBQTtJQUNiLHNGQUFhLENBQUE7SUFDYixzRkFBYSxDQUFBO0lBQ2Isb0ZBQVksQ0FBQTtJQUNaLHNHQUFxQixDQUFBO0lBQ3JCLHNHQUFxQixDQUFBO0lBQ3JCLHNHQUFxQixDQUFBO0lBQ3JCLHNHQUFxQixDQUFBO0lBQ3JCLDBGQUFlLENBQUE7SUFDZix3RkFBYyxDQUFBO0lBQ2QsMEZBQWUsQ0FBQTtJQUNmLGdGQUFVLENBQUE7SUFDViw4RkFB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cm9sJztcclxuaW1wb3J0IHsgTWdWYWx1ZSB9IGZyb20gJy4uL01nVmFsdWUnO1xyXG5pbXBvcnQgeyBHdWlNZ0Zvcm0gfSBmcm9tICcuLi9HdWlNZ0Zvcm0nO1xyXG5pbXBvcnQgeyBEaWFsb2dIYW5kbGVyIH0gZnJvbSAnLi9EaWFsb2dIYW5kbGVyJztcclxuaW1wb3J0IHsgRXZlbnRzIH0gZnJvbSAnLi4vLi4vRXZlbnRzJztcclxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgVUlCcmlkZ2UgfSBmcm9tICcuLi8uLi9VSUJyaWRnZSc7XHJcbmltcG9ydCB7IENvbnRyb2xCYXNlIH0gZnJvbSAnLi4vQ29udHJvbEJhc2UnO1xyXG5pbXBvcnQgeyBHdWlDb21tYW5kUXVldWUgfSBmcm9tICcuL0d1aUNvbW1hbmRRdWV1ZSc7XHJcblxyXG5leHBvcnQgZW51bSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlIHtcclxuICBHRVRfRk9OVF9NRVRSSUNTLFxyXG4gIEdFVF9SRVNPTFVUSU9OLFxyXG4gIEdFVF9CT1VORFMsXHJcbiAgR0VUX1ZBTFVFLFxyXG4gIFNFVF9CUk9XU0VSX1RFWFQsXHJcbiAgR0VUX0JST1dTRVJfVEVYVCxcclxuICBCUk9XU0VSX0VYRUNVVEUsXHJcbiAgR0VUX1RPUF9JTkRFWCxcclxuICBNRVNTQUdFX0JPWCxcclxuICBTRVRfVElUTEUsXHJcbiAgRElSRUNUT1JZX0RJQUxPR19CT1gsXHJcbiAgR0VUX0NMSUVOVF9CT1VORFMsXHJcbiAgU0VUX0VESVRfVEVYVCxcclxuICBJTlNFUlRfRURJVF9URVhULFxyXG4gIFNFVF9TRUxFQ1RJT04sXHJcbiAgR0VUX1NFTEVDVElPTixcclxuICBHRVRfQ0FSRVRfUE9TLFxyXG4gIFJFRlJFU0hfUEFHRSxcclxuICBHRVRfSVNfVE9QX09GX1RFWFRCT1gsXHJcbiAgR0VUX0lTX0VORF9PRl9URVhUQk9YLFxyXG4gIENMSVBCT0FSRF9HRVRfQ09OVEVOVCxcclxuICBDTElQQk9BUkRfU0VUX0NPTlRFTlQsXHJcbiAgQ0xJUEJPQVJEX1BBU1RFLFxyXG4gIFBPU1RfS0VZX0VWRU5ULFxyXG4gIFBPU1RfQ0hBUl9FVkVOVCxcclxuICBTRVRfQ1VSU09SLFxyXG4gIERJU1BPU0VfQUxMX0ZPUk1TLFxyXG4gIEdFVF9ST1dTX0lOX1BBR0UsXHJcbiAgR0VUX0hJRERFTl9ST1dTX0NPVU5UX0lOX1RBQkxFLFxyXG4gIEZJTEVfT1BFTl9ESUFMT0dfQk9YLFxyXG4gIEZJTEVfU0FWRV9ESUFMT0dfQk9YLFxyXG4gIENSRUFURV9ESUFMT0csXHJcbiAgT1BFTl9ESUFMT0csXHJcbiAgQ0xPU0VfRElBTE9HLFxyXG4gIFNFVF9HRVRfU1VHR0VTVEVEX1ZBTFVFX0ZPUl9DSE9JQ0VfQ09OVFJPTF9PTl9UQUdEQVRBLFxyXG4gIFJFRkxFQ1RJT05fSU5WT0tFLFxyXG4gIFJFRkxFQ1RJT05fU0VULFxyXG4gIEdFVF9MQVNUX1dJTkRPV19TVEFURSxcclxuICBHRVRfRlJBTUVTX0JPVU5EUyxcclxuICBHRVRfTElOS0VEX1BBUkVOVF9JRFgsXHJcbiAgR0VUX0ZPUk1fQk9VTkRTLFxyXG4gIEdFVF9DT0xVTU5TX1NUQVRFLFxyXG4gIEdFVF9GT1JNX0hBTkRMRSxcclxuICBHRVRfQ1RSTF9IQU5ETEUsXHJcbiAgSVNfRk9STV9BQ1RJVkUsXHJcbiAgU0VUX01BUktFRF9URVhUX09OX1JJQ0hfRURJVCxcclxuICBTRU5EX0lNRV9NU0csXHJcbiAgQ0FOX0ZPQ1VTLFxyXG4gIElOVk9LRV9PU0NPTU1BTkQsXHJcbiAgR0VUX1NFTEVDVEVEX0lORElDRSxcclxuICBTRVRfU1VHR0VTVEVEX1ZBTFVFLFxyXG4gIE1BUF9XSURHRVRfVE9fR1VJX09CSkVDVCxcclxuICBSRU1PVkVfRE5fQ09OVFJPTF9WQUxVRV9DSEFOR0VEX0hBTkRMRVIsXHJcbiAgQUREX0ROX0NPTlRST0xfVkFMVUVfQ0hBTkdFRF9IQU5ETEVSLFxyXG4gIEdFVF9SVEZfVkFMVUVfQkVGT1JFX0VOVEVSSU5HX0NPTlRST0wsXHJcbiAgQVRUQUNIX0ROS0VZX1RPX09CSkVDVCxcclxuICBHRVRfRFZDT05UUk9MX1BPU0lUSU9OX0lTTixcclxuICBDTEVBUl9EQVRBX1RBQkxFLFxyXG4gIFNFVF9EQVRBX1NPVVJDRV9UT19EVkNPTlRST0wsXHJcbiAgQUNUSVZBVEVfRk9STSxcclxuICBJU19DT01CT19EUk9QUEVEX0RPV04sXHJcbiAgT1BFTl9GT1JNX0RFU0lHTkVSLFxyXG4gIElOVk9LRV9VRFBDT01NQU5ELFxyXG4gIEdFVF9IQVNJTkRFTlQsXHJcbiAgR0VUX0lTX1JPV19FRElUSU5HLFxyXG4gIEdFVF9NQVhfUk9XU19JTl9QQUdJTkFURURfVEFCTEUsXHJcbiAgQ0FMTF9KUyxcclxuICBHRVRfTEFTVF9ST1VURVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+IEd1aVV0aWxzIGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgR1VJIGxheWVyPC9zdW1tYXJ5PlxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR3VpSW50ZXJhY3RpdmVCYXNlIHtcclxuICBfY29tbWFuZFR5cGU6IEludGVyYWN0aXZlQ29tbWFuZFR5cGUgPSAwO1xyXG4gIFRhc2tUYWc6IHN0cmluZyA9IG51bGw7XHJcbiAgY29udHJvbE5hbWU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIF94OiBudW1iZXIgPSAwO1xyXG4gIF95OiBudW1iZXIgPSAwO1xyXG4gIF9jaGFyOiBzdHJpbmcgPSBudWxsO1xyXG4gIF9zdHI6IHN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMCk7XHJcbiAgX2ludFZhbDE6IG51bWJlciA9IDA7XHJcbiAgX2xpbmU6IG51bWJlciA9IDA7XHJcbiAgX29iajE6IGFueSA9IG51bGw7XHJcbiAgX3BhcmFtZXRlcnM6IGFueVtdID0gbnVsbDtcclxuICBfYm9vbFZhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIF9vYmoyOiBhbnkgPSBudWxsO1xyXG4gIF9tZ1ZhbHVlOiBNZ1ZhbHVlID0gbnVsbDtcclxuICBfc2V0VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhcmd1bWVudHMgOiBBcnJheTxhbnk+IDtcclxuICByZXN1bHRTdHJpbmcgOiBzdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApO1xyXG4gIHByaXZhdGUgc3RhdGljIGxvY2tPYmplY3Q6IGFueSA9IG51bGw7XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENvbnN0cnVjdG9yIDogc2V0cyB0aGUgY29udGV4dElEIGZvciB0aGUgY3VycmVudCBjb21tYW5kLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFJldHVybnMgd2hldGhlciBjb250cm9sIGlzIGZvY3VzYWJsZSBvciBub3QuIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJndWlNZ0NvbnRyb2xcIj4gdGhlIGNvbnRyb2wgd2hpY2ggbmVlZHMgdG8gYmUgY2hlY2tlZC4gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGNhbkZvY3VzKGd1aU1nQ29udHJvbDogR3VpTWdDb250cm9sKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQ0FOX0ZPQ1VTO1xyXG4gICAgdGhpcy5fb2JqMSA9IGd1aU1nQ29udHJvbDtcclxuXHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLmJvb2xWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IC8vLyBSZXR1cm5zIHRoZSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIGZvciBzZWxlY3RlZCBpbmRpY2Ugb2YgbGlzdCBjb250cm9sLi8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZ3VpTWdDb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+Y29tbWEgc2VwYXJhdGVkIHN0cmluZyBmb3Igc2VsZWN0ZWQgaW5kaWNlIG9mIGxpc3QgY29udHJvbDwvcmV0dXJucz5cclxuICBHZXRTZWxlY3RlZEluZGljZShndWlNZ0NvbnRyb2w6IEd1aU1nQ29udHJvbCk6IHN0cmluZyB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1NFTEVDVEVEX0lORElDRTtcclxuICAgIHRoaXMuX29iajEgPSBndWlNZ0NvbnRyb2w7XHJcblxyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5zdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgaW5kZW50IGhhcyBiZWVuIGFwcGxpZWQgdG8gUmljaCBFZGl0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJndWlNZ0NvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0SGFzSW5kZW50KGd1aU1nQ29udHJvbDogR3VpTWdDb250cm9sKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0hBU0lOREVOVDtcclxuICAgIHRoaXMuX29iajEgPSBndWlNZ0NvbnRyb2w7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jvb2xWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRoaXMgbWV0aG9kZSBpcyBzZXQgVFJVRVxcRkFMU0UgdGhhdCBHdWlVdGlsZXNcXEdldFZhbHVlKCkgbWV0aG9kIHdpbGwgYmUgdXNlXHJcbiAgLy8vIHRoaXMgZmFsZyBzYXkgaWYgdG8gcmV0dXJuIHRoZSA6ICh0cnVlKSBzdWdnZXN0ZWQgdmFsdWUgb3IgKGZhbHNlKXRoZSByZWFsIHZhbHVlXHJcbiAgLy8vIHRoaXMgbWV0aG9kIGlzIHVzZSBmb3IgTUdfQUNUX0NUUkxfTU9ESUZZXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXRTdWdnZXN0ZWRWYWx1ZVwiPjwvcGFyYW0+XHJcbiAgc2V0R2V0U3VnZ2VzdGVkVmFsdWVPZkNob2ljZUNvbnRyb2xPblRhZ0RhdGEoY3RybDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIsIHJldFN1Z2dlc3RlZFZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX0dFVF9TVUdHRVNURURfVkFMVUVfRk9SX0NIT0lDRV9DT05UUk9MX09OX1RBR0RBVEE7XHJcbiAgICB0aGlzLl9vYmoyID0gY3RybDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5fYm9vbFZhbCA9IHJldFN1Z2dlc3RlZFZhbHVlO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEdldCB2YWx1ZSBvZiB0aGUgY29udHJvbDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvYmplY3RcIj5hIHJlZmVyZW5jZSB0byB0aGUgcmVsZXZhbnQgb2JqZWN0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZWN0XCI+YSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCB0aGF0IG9uIHJldHVybiB3aWxsIGNvbnRhaW4gdGhlIHJlcXVlc3RlZCB2YWx1ZXMgb24gc3RyaW5nPC9wYXJhbT5cclxuICBnZXRWYWx1ZShvYmo6IGFueSwgbGluZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfVkFMVUU7XHJcbiAgICB0aGlzLl9vYmoyID0gb2JqO1xyXG5cclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX21nVmFsdWUub2JqO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFRvcEluZGV4KHRhYmxlY29udHJvbDogR3VpTWdDb250cm9sKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfVE9QX0lOREVYO1xyXG4gICAgdGhpcy5fb2JqMiA9IHRhYmxlY29udHJvbDtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5faW50VmFsMTtcclxuICB9XHJcblxyXG4gIGdldElzUm93RWRpdGluZyh0YWJsZWNvbnRyb2w6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyLCBpc0xpbmVNb2RlOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0lTX1JPV19FRElUSU5HO1xyXG4gICAgdGhpcy5fb2JqMiA9IHRhYmxlY29udHJvbDtcclxuICAgIHRoaXMuX2ludFZhbDEgPSBsaW5lO1xyXG4gICAgdGhpcy5fYm9vbFZhbCA9IGlzTGluZU1vZGU7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgYnJvd3NlckV4ZWN1dGUoYnJvd3NlckNvbnRyb2w6IEd1aU1nQ29udHJvbCwgdGV4dDogc3RyaW5nLCBzeW5jRXhlYzogYm9vbGVhbiwgbGFuZ3VhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkJST1dTRVJfRVhFQ1VURTtcclxuICAgIHRoaXMuX29iajIgPSBicm93c2VyQ29udHJvbDtcclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5zdHIgPSB0ZXh0O1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5vYmogPSBsYW5ndWFnZTtcclxuXHJcbiAgICAvLyBGb3IgYXN5bmMgZXhlY3V0aW9uLCByZXR1cm4gdHJ1ZSBpZiB0aGUgY29tbWFuZCBpcyBwYXNzZWQgdG8gdGhlIGd1aSB0aHJlYWQuXHJcbiAgICAvLyBGb3Igc3luYyBleGVjdXRpb24sIHJldHVybiB0cnVlIGlmIHRoZSBjb21tYW5kIHdhcyBleGVjdXRlZCBieSB0aGUgZ3VpIHRocmVhZC5cclxuICAgIGlmIChzeW5jRXhlYykge1xyXG4gICAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5ib29sVmFsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+T3BlbiBtZXNzYWdlIGJveCB3aXRoIHBhcmVudCBmb3JtPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRpdGxlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtc2dcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0eWxlXCI+dGhlIHN0eWxlIG9mIHRoZSBtZXNzYWdlIGJveCBjYW4gYmUgZmxhZ3Mgb2YgU3R5bGVzLk1TR0JPWF94eHggPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG1lc3NhZ2UgYm94IHN0eWxlIGZyb20gU3R5bGVzLk1TR0JPWF9YWFg8L3JldHVybnM+XHJcbiAgbWVzc2FnZUJveCh0aXRsZTogc3RyaW5nLCBtc2c6IHN0cmluZywgc3R5bGU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuTUVTU0FHRV9CT1g7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUudGl0bGUgPSB0aXRsZTtcclxuICAgIHRoaXMuX21nVmFsdWUuc3RyID0gKChtc2cgPT09IG51bGwpID8gJycgOiBtc2cpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5zdHlsZSA9IHN0eWxlO1xyXG4gICAgRXZlbnRzLlJlZnJlc2hUYWJsZXMoKTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5udW1iZXI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+c2V0IHRpdGxlIHRvIGJyb3dzZXI8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9wTW9zdEZvcm1cIj50aGUgcGFyZW50IGZvcm0gb2YgdGhlIG1lc3NhZ2UgYm94PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0aXRsZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBtZXNzYWdlIGJveCBzdHlsZSBmcm9tIFN0eWxlcy5NU0dCT1hfWFhYPC9yZXR1cm5zPlxyXG4gIHNldFRpdGxlKHRvcE1vc3RGb3JtOiBHdWlNZ0Zvcm0sIHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfVElUTEU7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX29iajIgPSB0b3BNb3N0Rm9ybTtcclxuICAgIHRoaXMuX21nVmFsdWUudGl0bGUgPSAoKHRpdGxlID09PSBudWxsKSA/ICcnIDogdGl0bGUpO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG4gIC8vLzxzdW1tYXJ5PlxyXG4gIC8vLyBIYW5kbGVzIEludm9rZSBVRFAgb3BlcmF0aW9uIGZyb20gR1VJIHRocmVhZFxyXG4gIC8vLzwvc3VtbWFyeT5cclxuICAvLy88cGFyYW0gbmFtZT1cImNvbnRleHRJZFwiPkNvbnRleHQgaWQ8L3BhcmFtPlxyXG4gIGludm9rZVVEUChjb250ZXh0SWQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuSU5WT0tFX1VEUENPTU1BTkQ7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUub2JqID0gY29udGV4dElkO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLm51bWJlcjtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNhcHRpb25cIj5kZXNjcmlwdGlvbiBmb3IgdGhlIGRpYWxvZyB3aW5kb3c8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInBhdGhcIj5pbml0aWFsIHBhdGggdG8gYnJvd3NlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJiU2hvd05ld0ZvbGRlclwiPnNob3VsZCBzaG93IHRoZSBuZXcgZm9sZGVyIGJ1dHRvbj88L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gZGlyZWN0b3J5IHBhdGggc2VsZWN0ZWQgYnkgdXNlcjwvcmV0dXJucz5cclxuICBkaXJlY3RvcnlEaWFsb2dCb3goY2FwdGlvbjogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGJTaG93TmV3Rm9sZGVyOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5ESVJFQ1RPUllfRElBTE9HX0JPWDtcclxuXHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUuY2FwdGlvbiA9IGNhcHRpb247XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnBhdGggPSBwYXRoO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5ib29sMSA9IGJTaG93TmV3Rm9sZGVyO1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5zdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEZpbGUgT3BlbiBEaWFsb2cgQm94XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0aXRsZVwiPkRpYWxvZyB3aW5kb3cgY2FwdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaW5pdERpclwiPkluaXRpYWwgZGlyZWN0b3J5PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmaWx0ZXJOYW1lc1wiPmZpbHRlciBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNoZWNrRXhpc3RzXCI+dmVyaWZ5IG9wZW5lZCBmaWxlIGV4aXN0czwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibXVsdGlTZWxlY3RcIj5lbmFibGUgc2VsZWN0aW5nIG11bHRpcGxlIGZpbGVzPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+ZmlsZSBwYXRoIHNlbGVjdGVkIGJ5IHVzZXI8L3JldHVybnM+XHJcbiAgZmlsZU9wZW5EaWFsb2dCb3godGl0bGU6IHN0cmluZywgZGlyTmFtZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCBmaWx0ZXJOYW1lczogc3RyaW5nLCBjaGVja0V4aXN0czogYm9vbGVhbiwgbXVsdGlTZWxlY3Q6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkZJTEVfT1BFTl9ESUFMT0dfQk9YO1xyXG5cclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS50aXRsZSA9IHRpdGxlO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5wYXRoID0gZGlyTmFtZTtcclxuICAgIHRoaXMuX21nVmFsdWUuc3RyID0gZmlsZU5hbWU7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLmZpbHRlciA9IGZpbHRlck5hbWVzO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5ib29sVmFsID0gY2hlY2tFeGlzdHM7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLmJvb2wxID0gbXVsdGlTZWxlY3Q7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLnN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gRmlsZSBTYXZlIERpYWxvZyBCb3hcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRpdGxlXCI+Y2FwdGlvbiBvZiB0aGUgZGlhbG9nIHdpbmRvdzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaW5pdERpclwiPiBpbml0aWFsIGRpcmVjdG9yeTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmlsdGVyTmFtZXNcIj5maWx0ZXIgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWZhdWx0RXh0ZW5zaW9uXCI+IGRlZmF1bHQgZXh0ZW5zaW9uIGZvciBmaWxlIG5hbWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm92ZXJ3cml0ZVByb21wdFwiPiBzaG91bGQgcHJvbXB0IHdoZW4gb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgZmlsZT88L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJldEZpbGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5maWxlIHBhdGggc2VsZWN0ZWQgYnkgdXNlcjwvcmV0dXJucz5cclxuICBmaWxlU2F2ZURpYWxvZ0JveCh0aXRsZTogc3RyaW5nLCBkaXJOYW1lOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGZpbHRlck5hbWVzOiBzdHJpbmcsIGRlZmF1bHRFeHRlbnNpb246IHN0cmluZywgb3ZlcndyaXRlUHJvbXB0OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5GSUxFX1NBVkVfRElBTE9HX0JPWDtcclxuXHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUudGl0bGUgPSB0aXRsZTtcclxuICAgIHRoaXMuX21nVmFsdWUucGF0aCA9IGRpck5hbWU7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnN0ciA9IGZpbGVOYW1lO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5maWx0ZXIgPSBmaWx0ZXJOYW1lcztcclxuICAgIHRoaXMuX21nVmFsdWUuY2FwdGlvbiA9IGRlZmF1bHRFeHRlbnNpb247XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLmJvb2wxID0gb3ZlcndyaXRlUHJvbXB0O1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5zdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+UHV0IENvbW1hbmQgdG8gY3JlYXRlIGRpYWxvZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJoYW5kbGVcIj5yZWZlcmVuY2UgdG8gdGhlIGRpYWxvZyBoYW5kbGVyczwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib2JqVHlwZVwiPnBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIG9iamVjdHMgY29uc3RydWN0b3I8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInBhcmFtZXRlcnNcIj48L3BhcmFtPlxyXG4gIGNyZWF0ZURpYWxvZyhoYW5kbGU6IERpYWxvZ0hhbmRsZXIsIHBhcmFtZXRlcnM6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQ1JFQVRFX0RJQUxPRztcclxuICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG4gICAgdGhpcy5fb2JqMiA9IGhhbmRsZTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+UHV0IENvbW1hbmQgdG8gY2xvc2UgZGlhbG9nPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRpYWxvZ1wiPjwvcGFyYW0+XHJcbiAgY2xvc2VEaWFsb2coaGFuZGxlOiBEaWFsb2dIYW5kbGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQ0xPU0VfRElBTE9HO1xyXG4gICAgdGhpcy5fb2JqMiA9IGhhbmRsZTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBzZXQgdGhlIHRleHQgdG8gdGhlIHRoZSBjb250cm9sXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0ZXh0XCI+PC9wYXJhbT5cclxuICBzZXRFZGl0VGV4dChjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwgdGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX0VESVRfVEVYVDtcclxuICAgIHRoaXMuX29iajIgPSBjb250cm9sO1xyXG4gICAgdGhpcy5fbGluZSA9IGxpbmU7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUuc3RyID0gdGV4dDtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLmJvb2xWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGluc2VydCB0aGUgdGV4dCB0byB0aGUgdGhlIGNvbnRyb2wgYXQgdGhlIGdpdmVuIHBvc2l0aW9uXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0ZXh0XCI+PC9wYXJhbT5cclxuICBpbnNlcnRFZGl0VGV4dChjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwgc3RhcnRQb3NpdGlvbjogbnVtYmVyLCB0ZXh0VG9JbnNlcnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLklOU0VSVF9FRElUX1RFWFQ7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnN0ciA9IHRleHRUb0luc2VydDtcclxuICAgIHRoaXMuX2ludFZhbDEgPSBzdGFydFBvc2l0aW9uO1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX21nVmFsdWUuYm9vbFZhbDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+IHNldCB0aGUgdGV4dCB0byB0aGUgdGhlIGNvbnRyb2w8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGV4dFwiPjwvcGFyYW0+XHJcbiAgc2V0U2VsZWN0aW9uKGNvbnRyb2w6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgY2FyZXRQb3M6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9TRUxFQ1RJT047XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5feCA9IHN0YXJ0O1xyXG4gICAgdGhpcy5feSA9IGVuZDtcclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5udW1iZXIgPSBjYXJldFBvcztcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBzZXQgdGhlIHRleHQgdG8gdGhlIHRoZSBjb250cm9sPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRleHRcIj48L3BhcmFtPlxyXG4gIHNldFN1Z2dlc3RlZFZhbHVlKGNvbnRyb2w6IEd1aU1nQ29udHJvbCwgc3VnZ2VzdGVkVmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9TVUdHRVNURURfVkFMVUU7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5zdHIgPSBzdWdnZXN0ZWRWYWx1ZTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBjYXJldCBvbiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgY2FyZXRQb3NHZXQoY29udHJvbDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9DQVJFVF9QT1M7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG5cclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5udW1iZXI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJlZnJlc2ggcGFnZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgUmVmcmVzaFBhZ2UobmF2aWdhdGVUb1Jvb3RSb3V0ZTogYm9vbGVhbiwgaW5pdGlhbFVybDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuUkVGUkVTSF9QQUdFO1xyXG4gICAgdGhpcy5fYm9vbFZhbCA9IG5hdmlnYXRlVG9Sb290Um91dGU7XHJcbiAgICB0aGlzLl9vYmoxID0gaW5pdGlhbFVybDtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNoZWNrIGlmIHRoZSBDYXJlbCBpcyBQb3NpdGlvbmVkIG9uIHRoZSBmaXJzdCBsaW5lIGluIFRleHRCb3guPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIGdldElzVG9wT2ZUZXh0Qm94KGNvbnRyb2w6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0lTX1RPUF9PRl9URVhUQk9YO1xyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jvb2xWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNoZWNrIGlmIHRoZSBDYXJlbCBpcyBQb3NpdGlvbmVkIG9uIHRoZSBsYXN0IGxpbmUgaW4gVGV4dEJveC48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgZ2V0SXNFbmRPZlRleHRCb3goY29udHJvbDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfSVNfRU5EX09GX1RFWFRCT1g7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2Jvb2xWYWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBQb3N0IGEga2V5IGV2ZW50IChlbXVsYXRlIGtleXMgcHJlc3NlZCBieSB0aGUgdXNlcikuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJrZXlDb2RlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdGF0ZU1hc2tcIj48L3BhcmFtPlxyXG4gIHBvc3RLZXlFdmVudChjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwga2V5czogc3RyaW5nLCBQb3N0Q2hhcjogYm9vbGVhbiwgZm9yY2VMb2dpY2FsQ29udHJvbFRleHRVcGRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5QT1NUX0tFWV9FVkVOVDtcclxuXHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnN0ciA9IGtleXM7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLmJvb2wxID0gZm9yY2VMb2dpY2FsQ29udHJvbFRleHRVcGRhdGU7XHJcbiAgICB0aGlzLl9ib29sVmFsID0gUG9zdENoYXI7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2VuZCBXTV9DSEFSIHRvIHRoZSBzcGVjaWZpZWQgY29udHJvbCB2aWEgR1VJIHRocmVhZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNoclwiPjwvcGFyYW0+XHJcbiAgcG9zdENoYXJFdmVudChjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwgY2hyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5QT1NUX0NIQVJfRVZFTlQ7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5fY2hhciA9IGNocjtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBkaXNwb3NlIGFsbCB0aGUgc2hlbGxzLiBsYXN0IGRpc3Bvc2Ugd2lsbCBjbG9zZSB0aGUgZGlzcGxheS48L3N1bW1hcnk+XHJcbiAgZGlzcG9zZUFsbEZvcm1zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkRJU1BPU0VfQUxMX0ZPUk1TO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmV0dXJuIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFJvd3NJblBhZ2UoY29udHJvbDogR3VpTWdDb250cm9sKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfUk9XU19JTl9QQUdFO1xyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludFZhbDE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybiBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGU8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRNYXhSb3dzSW5QYWdpbmF0ZWRUYWJsZShjb250cm9sOiBHdWlNZ0NvbnRyb2wpOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9NQVhfUk9XU19JTl9QQUdJTkFURURfVEFCTEU7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5faW50VmFsMTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0IHRoZSBsYXN0IHJvdXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRMYXN0Um91dGUoKTogc3RyaW5nIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTEFTVF9ST1VURTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRTdHJpbmc7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybiB0aGUgbnVtYmVyIG9mIGhpZGRlbiByb3dzIChwYXJ0aWFsbHkgb3IgZnVsbHkpIGluIHRhYmxlPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0SGlkZGVuUm93c0NvdW50SW5UYWJsZShjb250cm9sOiBHdWlNZ0NvbnRyb2wpOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9ISURERU5fUk9XU19DT1VOVF9JTl9UQUJMRTtcclxuICAgIHRoaXMuX29iajIgPSBjb250cm9sO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9pbnRWYWwxO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gdGhlIGxhc3Qgd2luZG93IHN0YXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldExhc3RXaW5kb3dTdGF0ZShndWlNZ0Zvcm06IEd1aU1nRm9ybSk6IG51bWJlciB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0xBU1RfV0lORE9XX1NUQVRFO1xyXG4gICAgdGhpcy5fb2JqMiA9IGd1aU1nRm9ybTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludFZhbDE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldHMgbGlua2VkIHBhcmVudCBpZHggb2YgZnJhbWVzZXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZyYW1lc2V0XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldExpbmtlZFBhcmVudElkeChmcmFtZXNldDogR3VpTWdDb250cm9sKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTElOS0VEX1BBUkVOVF9JRFg7XHJcbiAgICB0aGlzLl9vYmoyID0gZnJhbWVzZXQ7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9pbnRWYWwxO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIGNvbHVtbnMgc3RhdGUgLS0tIGxheWVyLCB3aWR0aCBhbmQgd2lkdGhGb3JGaWxsVGFibGVQbGFjZW1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImluZGV4XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldENvbHVtbnNTdGF0ZSh0YWJsZUN0cmw6IEd1aU1nQ29udHJvbCk6IExpc3Q8bnVtYmVyW10+IHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfQ09MVU1OU19TVEFURTtcclxuICAgIHRoaXMuX29iajIgPSB0YWJsZUN0cmw7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5saXN0T2ZJbnRBcnI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFVwZGF0ZSB0aGUgQ29udHJvbC5UYWdEYXRhLk1hcERhdGEgd2l0aCB0aGUgbmV3T2JqZWN0VG9TZXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5ld09iamVjdFRvU2V0XCI+PC9wYXJhbT5cclxuICBNYXBXaWRnZXQobmV3T2JqZWN0VG9TZXQ6IGFueSk6IHZvaWQ7XHJcbiAgTWFwV2lkZ2V0KCk6IHZvaWQ7XHJcbiAgTWFwV2lkZ2V0KG5ld09iamVjdFRvU2V0PzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSlcclxuICAgICAgdGhpcy5NYXBXaWRnZXRfMChuZXdPYmplY3RUb1NldCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuTWFwV2lkZ2V0XzEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgTWFwV2lkZ2V0XzAobmV3T2JqZWN0VG9TZXQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLk1BUF9XSURHRVRfVE9fR1VJX09CSkVDVDtcclxuICAgIHRoaXMuX29iajEgPSBuZXdPYmplY3RUb1NldDtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBBY3RpdmF0ZSB0aGUgZm9ybS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImd1aU1nRm9ybVwiPjwvcGFyYW0+XHJcbiAgQWN0aXZhdGVGb3JtKGd1aU1nRm9ybTogR3VpTWdGb3JtKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQUNUSVZBVEVfRk9STTtcclxuICAgIHRoaXMuX29iajEgPSBndWlNZ0Zvcm07XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyBpZiB0aGUgcGFzc2VkIGZvcm0gaXMgYWN0aXZlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzRm9ybUFjdGl2ZShndWlNZ0Zvcm06IEd1aU1nRm9ybSk6IGJvb2xlYW47XHJcbiAgaXNGb3JtQWN0aXZlKCk6IHZvaWQ7XHJcbiAgaXNGb3JtQWN0aXZlKGd1aU1nRm9ybT86IEd1aU1nRm9ybSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXHJcbiAgICAgIHJldHVybiB0aGlzLmlzRm9ybUFjdGl2ZV8wKGd1aU1nRm9ybSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuaXNGb3JtQWN0aXZlXzEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNGb3JtQWN0aXZlXzAoZ3VpTWdGb3JtOiBHdWlNZ0Zvcm0pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBHZXRzIHRoZSBSVEYgdmFsdWUgb2YgdGhlIFJURiBlZGl0IGNvbnRyb2wgd2hpY2ggd2FzIHNldCBiZWZvcmUgZW50ZXJpbmcgaXQuIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJndWlNZ0NvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0UnRmVmFsdWVCZWZvcmVFbnRlcmluZ0NvbnRyb2woZ3VpTWdDb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1JURl9WQUxVRV9CRUZPUkVfRU5URVJJTkdfQ09OVFJPTDtcclxuICAgIHRoaXMuX29iajIgPSBndWlNZ0NvbnRyb2w7XHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuXHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLnN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gR2V0IFBvc2l0aW9uIElzbiBvZiBSb3cgaW4gRGF0YVRhYmxlIGF0dGFjaGVkIHRvIERWIENvbnRyb2wuIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXRhVGFibGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0RFZDb250cm9sUG9zaXRpb25Jc24oZGF0YVRhYmxlOiBhbnksIGxpbmU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0RWQ09OVFJPTF9QT1NJVElPTl9JU047XHJcbiAgICB0aGlzLl9vYmoxID0gZGF0YVRhYmxlO1xyXG4gICAgdGhpcy5fbGluZSA9IGxpbmU7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludFZhbDE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEdldCBQb3NpdGlvbiBJc24gb2YgUm93IGluIERhdGFUYWJsZSBhdHRhY2hlZCB0byBEViBDb250cm9sLiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGF0YVRhYmxlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIENsZWFyRGF0YXRhYmxlKGR2Q29udHJvbDogR3VpTWdDb250cm9sLCBkYXRhVGFibGU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkNMRUFSX0RBVEFfVEFCTEU7XHJcbiAgICB0aGlzLl9vYmoxID0gZHZDb250cm9sO1xyXG4gICAgdGhpcy5fb2JqMiA9IGRhdGFUYWJsZTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFNldCBEYXRhc291cmNlIHByb3BlcnR5IG9mIERhdGF2aWV3IGNvbnRyb2wuIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkdkNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRhdGFUYWJsZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicHJvcGVydHlOYW1lXCI+PC9wYXJhbT5cclxuICBTZXREYXRhU291cmNlVG9EYXRhVmlld0NvbnRyb2woZHZDb250cm9sOiBHdWlNZ0NvbnRyb2wsIGRhdGFUYWJsZTogYW55LCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9EQVRBX1NPVVJDRV9UT19EVkNPTlRST0w7XHJcbiAgICB0aGlzLl9vYmoxID0gZHZDb250cm9sO1xyXG4gICAgdGhpcy5fb2JqMiA9IGRhdGFUYWJsZTtcclxuICAgIHRoaXMuX3N0ciA9IHByb3BlcnR5TmFtZTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vPHN1bW1hcnk+XHJcbiAgLy8vICBDaGVjayB3aGV0aGVyIHRoZSBjb21ib2JveCBpcyBpbiBhIERyb3BwZWREb3duIHN0YXRlIG9yIG5vdC5cclxuICAvLy88L3N1bW1hcnk+XHJcbiAgLy8vPHBhcmFtIG5hbWU9XCJjb21ib0JveFwiPk1nY29tYm9Cb3ggY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vPHBhcmFtIG5hbWU9XCJsaW5lXCI+ISEuPC9wYXJhbT5cclxuICAvLy88cmV0dXJucz5ib29sPC9yZXR1cm5zPlxyXG4gIElzQ29tYm9Cb3hJbkRyb3BwZWREb3duU3RhdGUoY29tYm9Cb3g6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuSVNfQ09NQk9fRFJPUFBFRF9ET1dOO1xyXG4gICAgdGhpcy5fb2JqMSA9IGNvbWJvQm94O1xyXG4gICAgdGhpcy5fbGluZSA9IGxpbmU7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgRXhlY3V0ZUNhbGxKUyhmb3JtICwgZm9ybU5hbWU6IHN0cmluZywgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLCBhcmdzOiBBcnJheTxhbnk+KTogc3RyaW5nIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DQUxMX0pTO1xyXG4gICAgdGhpcy5fb2JqMiA9IGZvcm07XHJcbiAgICB0aGlzLmNvbnRyb2xOYW1lID0gZm9ybU5hbWU7XHJcbiAgICB0aGlzLl9zdHIgPSBmdW5jdGlvbk5hbWU7XHJcbiAgICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMucmVzdWx0U3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDYWxscyBSdW4oKSBzeW5jaHJvbm91c2x5IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQuXHJcbiAgLy8vIEJ1dCBiZWZvcmUgdGhhdCwgaXQgZXhlY3V0ZXMgdGhlIEd1aUNvbW1hbmRRdWV1ZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgSW52b2tlKCk6IHZvaWQge1xyXG4gICAgR3VpQ29tbWFuZFF1ZXVlLmdldEluc3RhbmNlKCkuaW52b2tlKCk7XHJcbiAgICBpZiAodGhpcy5fb2JqMiBpbnN0YW5jZW9mIENvbnRyb2xCYXNlKSB7XHJcbiAgICAgIGxldCBjb250cm9sQmFzZTogQ29udHJvbEJhc2UgPSA8Q29udHJvbEJhc2U+dGhpcy5fb2JqMjtcclxuICAgICAgdGhpcy5UYXNrVGFnID0gY29udHJvbEJhc2UuVGFza1RhZztcclxuICAgICAgdGhpcy5jb250cm9sTmFtZSA9IGNvbnRyb2xCYXNlLlVuaXF1ZU5hbWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX29iajIgaW5zdGFuY2VvZiBHdWlNZ0Zvcm0pIHtcclxuICAgICAgbGV0IGd1aU1nRm9ybTogR3VpTWdGb3JtID0gPEd1aU1nRm9ybT50aGlzLl9vYmoyO1xyXG4gICAgICB0aGlzLlRhc2tUYWcgPSBndWlNZ0Zvcm0uVGFza1RhZztcclxuICAgIH0gZWxzZVxyXG4gICAgICB0aGlzLlRhc2tUYWcgPSAnMCc7IC8vIGdlbmVyYWwgY29tbWFuZFxyXG5cclxuICAgIFVJQnJpZGdlLmdldEluc3RhbmNlKCkuRXhlY3V0ZUludGVyYWN0aXZlQ29tbWFuZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gaW1wbGVtZW50cyB0aGUgUnVubmFibGUgcnVuIG1ldGhvZCBmb3IgY2FsbGluZyBEaXNwbGF5LnN5bmNFeGVjKCk8L3N1bW1hcnk+XHJcbiAgLy8gUnVuKCk6IHZvaWQge1xyXG4gIC8vICAgLy8gU2V0cyB0aGUgY3VycmVudENvbnRleHRJRFxyXG4gIC8vICAgbGV0IGNvbnRleHRJREd1YXJkID0gbmV3IENvbnRleHRJREd1YXJkKHRoaXMuX2NvbnRleHRJRCk7XHJcbiAgLy8gICB0cnkge1xyXG4gIC8vICAgICBzd2l0Y2ggKHRoaXMuX2NvbW1hbmRUeXBlKSB7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9GT05UX01FVFJJQ1M6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0Rm9udE1ldHJpY3MoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfUkVTT0xVVElPTjpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRSZXNvbHV0aW9uKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0JPVU5EUzpcclxuICAvLyAgICAgICAgIHRoaXMub25Cb3VuZHMoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfVkFMVUU6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uVmFsdWUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfQlJPV1NFUl9URVhUOlxyXG4gIC8vICAgICAgICAgdGhpcy5vblNldEJyb3dzZXJUZXh0KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0JST1dTRVJfVEVYVDpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRCcm93c2VyVGV4dCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkJST1dTRVJfRVhFQ1VURTpcclxuICAvLyAgICAgICAgIHRoaXMub25Ccm93c2VyRXhlY3V0ZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9UT1BfSU5ERVg6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0VG9wSW5kZXgoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5NRVNTQUdFX0JPWDpcclxuICAvLyAgICAgICAgIHRoaXMub25NZXNzYWdlQm94KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuRElSRUNUT1JZX0RJQUxPR19CT1g6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uRGlyZWN0b3J5RGlhbG9nQm94KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0NMSUVOVF9CT1VORFM6XHJcbiAgLy8gICAgICAgICB0aGlzLmdldENsaWVudEJvdW5kcygpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9FRElUX1RFWFQ6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uU2V0RWRpdFRleHQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5JTlNFUlRfRURJVF9URVhUOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkluc2VydEVkaXRUZXh0KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX1NFTEVDVElPTjpcclxuICAvLyAgICAgICAgIHRoaXMub25TZXRTZWxlY3Rpb24oKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfU0VMRUNUSU9OOlxyXG4gIC8vICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkdldCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9DQVJFVF9QT1M6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQ2FyZXRQb3NHZXQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfSVNfVE9QX09GX1RFWFRCT1g6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0SXNUb3BPZlRleHRCb3goKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfSVNfRU5EX09GX1RFWFRCT1g6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0SXNFbmRPZlRleHRCb3goKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DTElQQk9BUkRfR0VUX0NPTlRFTlQ6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQ2xpcGJvYXJkUmVhZCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkNMSVBCT0FSRF9TRVRfQ09OVEVOVDpcclxuICAvLyAgICAgICAgIHRoaXMub25DbGlwYm9hcmRXcml0ZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkNMSVBCT0FSRF9QQVNURTpcclxuICAvLyAgICAgICAgIHRoaXMub25DbGlwYm9hcmRQYXN0ZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlBPU1RfS0VZX0VWRU5UOlxyXG4gIC8vICAgICAgICAgdGhpcy5vblBvc3RLZXlFdmVudCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlBPU1RfQ0hBUl9FVkVOVDpcclxuICAvLyAgICAgICAgIHRoaXMub25Qb3N0Q2hhckV2ZW50KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX0NVUlNPUjpcclxuICAvLyAgICAgICAgIHRoaXMub25TZXRDdXJzb3IoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5ESVNQT1NFX0FMTF9GT1JNUzpcclxuICAvLyAgICAgICAgIHRoaXMub25EaXNwb3NlQWxsRm9ybXMoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfUk9XU19JTl9QQUdFOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldFJvd3NJblBhZ2UoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfSElEREVOX1JPV1NfQ09VTlRfSU5fVEFCTEU6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0SGlkZGVuUm93c0NvdW50SW5UYWJsZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkZJTEVfT1BFTl9ESUFMT0dfQk9YOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkZpbGVPcGVuRGlhbG9nQm94KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuRklMRV9TQVZFX0RJQUxPR19CT1g6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uRmlsZVNhdmVEaWFsb2dCb3goKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DUkVBVEVfRElBTE9HOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkNyZWF0ZURpYWxvZygpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLk9QRU5fRElBTE9HOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbk9wZW5EaWFsb2coKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DTE9TRV9ESUFMT0c6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQ2xvc2VEaWFsb2coKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfR0VUX1NVR0dFU1RFRF9WQUxVRV9GT1JfQ0hPSUNFX0NPTlRST0xfT05fVEFHREFUQTpcclxuICAvLyAgICAgICAgIHRoaXMuT25TZXRHZXRTdWdnZXN0ZWRWYWx1ZU9mQ2hvaWNlQ29udHJvbE9uVGFnRGF0YSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9MQVNUX1dJTkRPV19TVEFURTpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRMYXN0V2luZG93U3RhdGUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfRlJBTUVTX0JPVU5EUzpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRGcmFtZXNCb3VuZHMoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTElOS0VEX1BBUkVOVF9JRFg6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0TGlua2VkUGFyZW50SWR4KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0ZPUk1fQk9VTkRTOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldEZvcm1Cb3VuZHMoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfQ09MVU1OU19TVEFURTpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRDb2x1bW5zU3RhdGUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfRk9STV9IQU5ETEU6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0Rm9ybUhhbmRsZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9DVFJMX0hBTkRMRTpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRDdHJsSGFuZGxlKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuSVNfRk9STV9BQ1RJVkU6XHJcbiAgLy8gICAgICAgICB0aGlzLmlzRm9ybUFjdGl2ZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9EUk9QUEVEX0RBVEE6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0RHJvcHBlZERhdGEoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfRFJPUFBFRF9QT0lOVDpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXREcm9wcGVkUG9pbnQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfRFJPUFBFRF9TRUxFQ1RJT046XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0RHJvcHBlZFNlbGVjdGlvbigpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkRST1BfRk9STUFUX1NVUFBPUlRFRDpcclxuICAvLyAgICAgICAgIHRoaXMub25DaGVja0Ryb3BGb3JtYXRQcmVzZW50KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0lTX0JFR0lOX0RSQUc6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0SXNCZWdpbkRyYWcoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5BQ1RJVkFURV9ORVhUX09SX1BSRVZJT1VTX01ESV9DSElMRDpcclxuICAvLyAgICAgICAgIHRoaXMuT25BY3RpdmF0ZU5leHRPclByZXZpb3VzTURJQ2hpbGQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRU5EX0lNRV9NU0c6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uU2VuZEltZU1zZygpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkNBTl9GT0NVUzpcclxuICAvLyAgICAgICAgIHRoaXMub25DYW5Gb2N1cygpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9TRUxFQ1RFRF9JTkRJQ0U6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uR2V0U2VsZWN0ZWRJbmRpY2UoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfU1VHR0VTVEVEX1ZBTFVFOlxyXG4gIC8vICAgICAgICAgdGhpcy5vblNldFN1Z2dlc3RlZFZhbHVlKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuTUFQX1dJREdFVF9UT19HVUlfT0JKRUNUOlxyXG4gIC8vICAgICAgICAgdGhpcy5NYXBXaWRnZXQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5SRU1PVkVfRE5fQ09OVFJPTF9WQUxVRV9DSEFOR0VEX0hBTkRMRVI6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uUmVtb3ZlRE5Db250cm9sVmFsdWVDaGFuZ2VkSGFuZGxlcigpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkFERF9ETl9DT05UUk9MX1ZBTFVFX0NIQU5HRURfSEFORExFUjpcclxuICAvLyAgICAgICAgIHRoaXMuT25BZGRETkNvbnRyb2xWYWx1ZUNoYW5nZWRIYW5kbGVyKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1JURl9WQUxVRV9CRUZPUkVfRU5URVJJTkdfQ09OVFJPTDpcclxuICAvLyAgICAgICAgIHRoaXMuT25HZXRSdGZWYWx1ZUJlZm9yZUVudGVyaW5nQ29udHJvbCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9NRElfQ0hJTERfQ09VTlQ6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uR2V0TURJQ2hpbGRDb3VudCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkFDVElWQVRFX0ZPUk06XHJcbiAgLy8gICAgICAgICB0aGlzLk9uQWN0aXZhdGVGb3JtKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuRU5BQkxFX01FTlVfRU5UUlk6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uRW5hYmxlTWVudUVudHJ5KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0hPV19DT05URVhUX01FTlU6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uU2hvd0NvbnRleHRNZW51KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuSVNfQ09NQk9fRFJPUFBFRF9ET1dOOlxyXG4gIC8vICAgICAgICAgdGhpcy5PbklzQ29tYm9Ecm9wcGVkRG93bmRTdGF0ZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLklOVk9LRV9VRFBDT01NQU5EOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkludm9rZVVEUCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9IQVNJTkRFTlQ6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uR2V0SGFzSW5kZW50KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgY2F0Y2ggKGV4KSB7XHJcbiAgLy8gICAgIGlmIChleCBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gIC8vICAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKGV4KTtcclxuICAvLyAgICAgICB0aHJvdyBleDtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBlbHNlXHJcbiAgLy8gICAgICAgdGhyb3cgZXg7IC8vIFJlc2V0IHRoZSBjdXJyZW50IGNvbnRleHRJRC5cclxuICAvLyAgIH1cclxuICAvLyAgIGZpbmFsbHkge1xyXG4gIC8vICAgICBjb250ZXh0SURHdWFyZC5EaXNwb3NlKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFJlbW92ZSB0aGUgVmFsdWVDaGFuZ2VkSGFuZGxlci4gPC9zdW1tYXJ5PlxyXG4gIE9uUmVtb3ZlRE5Db250cm9sVmFsdWVDaGFuZ2VkSGFuZGxlcigpOiB2b2lkIHtcclxuICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKCdSZW1vdmVETkNvbnRyb2xWYWx1ZUNoYW5nZWRIYW5kbGVyIC0gTm90IEltcGxlbWVudGVkIFlldCcpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT4gQWRkIHRoZSBWYWx1ZUNoYW5nZWRIYW5kbGVyLiA8L3N1bW1hcnk+XHJcbiAgT25BZGRETkNvbnRyb2xWYWx1ZUNoYW5nZWRIYW5kbGVyKCk6IHZvaWQge1xyXG4gICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coJ0FkZEROQ29udHJvbFZhbHVlQ2hhbmdlZEhhbmRsZXIgLSBOb3QgSW1wbGVtZW50ZWQgWWV0Jyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEdldHMgdGhlIFJURiB2YWx1ZSBvZiB0aGUgUlRGIGVkaXQgY29udHJvbCB3aGljaCB3YXMgc2V0IGJlZm9yZSBlbnRlcmluZyBpdC4gPC9zdW1tYXJ5PlxyXG4gIE9uR2V0UnRmVmFsdWVCZWZvcmVFbnRlcmluZ0NvbnRyb2woKTogdm9pZCB7XHJcbiAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZygnT25HZXRPcmdSdGZWYWx1ZSAtIE5vdCBJbXBsZW1lbnRlZCBZZXQnKTtcclxuICB9XHJcblxyXG4vLy8gbWV0aG9kcyBzdXNwZWN0ZWQgYXMgZGlmZmVyZW50IGJldHdlZW4gdGhlIEd1aUludGVyYWN0aXZlIGNsYXNzZXMgb2YgdGhlIHN0YW5kYXJkL2NvbXBhY3QgZnJhbWV3b3Jrc1xyXG4gIGFic3RyYWN0IG9uR2V0QnJvd3NlclRleHQoKTogdm9pZCA7XHJcblxyXG4gIGFic3RyYWN0IG9uQnJvd3NlckV4ZWN1dGUoKTogdm9pZCA7XHJcblxyXG5cclxuICAvLy88c3VtbWFyeT5cclxuICAvLy8gSGFuZGxlcyBJbnZva2UgVURQIG9wZXJhdGlvbiBmcm9tIEdVSSB0aHJlYWRcclxuICAvLy88L3N1bW1hcnk+XHJcbiAgb25JbnZva2VVRFAoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBvbkRpcmVjdG9yeURpYWxvZ0JveCgpOiB2b2lkIDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBIYW5kbGUgdGhlIGZpbGUgb3BlbiBkaWFsb2cgYm94XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBvbkZpbGVPcGVuRGlhbG9nQm94KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBIYW5kbGUgdGhlIGZpbGUgc2F2ZSBkaWFsb2cgYm94XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBvbkZpbGVTYXZlRGlhbG9nQm94KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkNyZWF0ZSBkaWFsb2c8L3N1bW1hcnk+XHJcbiAgb25DcmVhdGVEaWFsb2coKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+T3BlbnMgZGlhbG9nPC9zdW1tYXJ5PlxyXG4gIG9uT3BlbkRpYWxvZygpOiB2b2lkIHtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+Q2xvc2VzIGRpYWxvZzwvc3VtbWFyeT5cclxuICBvbkNsb3NlRGlhbG9nKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlRoaXMgZnVuY3Rpb24gcmV0dXJucyBpZiB0aGUgZm9ybSBpcyBhY3RpdmUgb3Igbm90LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBpc0Zvcm1BY3RpdmVfMSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGRpc3Bvc2UgYWxsIHNoZWxscy48L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkRpc3Bvc2VBbGxGb3JtcygpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2FsY3VsYXRpbmcgdGhlIGZvbnQgbWV0cmljczwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uR2V0Rm9udE1ldHJpY3MoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PiBHZXRzIHRoZSByZXNvbHV0aW9uIG9mIHRoZSBjb250cm9sLiA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkdldFJlc29sdXRpb24oKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybiB0aGUgY2FyZXQgcG9zaXRpb24gb24gdGhlIGdpdmVuIGNvbnRyb2w8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkNhcmV0UG9zR2V0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBjaGVjayBpZiB0aGUgY2FyZXQgaXMgcG9zaXRpb25lZCBvbiB0aGUgZmlyc3QgbGluZSBvZiBUZXh0Qm94PC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25HZXRJc1RvcE9mVGV4dEJveCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBjaGVjayBpZiB0aGUgY2FyZXQgaXMgcG9zaXRpb25lZCBvbiB0aGUgbGFzdCBsaW5lIG9mIFRleHRCb3g8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkdldElzRW5kT2ZUZXh0Qm94KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jvb2xWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybiB0aGUgY2FyZXQgcG9zaXRpb24gb24gdGhlIGdpdmVuIGNvbnRyb2w8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvblNlbGVjdGlvbkdldCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbDwvc3VtbWFyeT5cclxuICAvLyBwcml2YXRlIG9uVmFsdWUoKTogdm9pZCB7XHJcbiAgLy9cclxuICAvLyAgIFVJQnJpZGdlLmdldEluc3RhbmNlKCkuR2V0SW50ZXJhY3RpdmVWYWx1ZSh0aGlzLnRhc2tUYWcsIHRoaXMpO1xyXG4gIC8vXHJcbiAgLy8gICAvL3RoaXMuX21nVmFsdWUuc3RyID0gVUlCcmlkZ2UuZ2V0SW5zdGFuY2UoKS5HZXRDb250cm9sVmFsdWUoY29udHJvbEJhc2UuVGFza1RhZywgKHRoaXMuX2xpbmUpLnRvU3RyaW5nKCksIGNvbnRyb2xCYXNlLlVuaXF1ZU5hbWUpO1xyXG4gIC8vXHJcbiAgLy8gfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHNldCB0aGUgdGV4dCBpbiB0aGUgdGV4dCBjb250cm9sLjwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uU2V0RWRpdFRleHQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGluc2VydCB0aGUgdGV4dCB0byB0aGUgdGV4dCBjb250cm9sIGF0IGEgZ2l2ZW4gcG9zaXRpb24uPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25JbnNlcnRFZGl0VGV4dCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gc2V0IHRoZSB0ZXh0KGh0bWwpIG9uIHRoZSBicm93c2VyIGNvbnRyb2w8L3N1bW1hcnk+XHJcbiAgb25TZXRCcm93c2VyVGV4dCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gc2V0IHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRleHQgY29udHJvbC48L3N1bW1hcnk+XHJcbiAgb25TZXRTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHNldCB0aGUgc3VnZ2VzdGVkIHZhbHVlIGZvciBjaG9pY2UgY29udHJvbC48L3N1bW1hcnk+XHJcbiAgb25TZXRTdWdnZXN0ZWRWYWx1ZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gZ2V0IG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgb25HZXRSb3dzSW5QYWdlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXR1cm4gdGhlIG51bWJlciBvZiBoaWRkZW4gcm93cyAocGFydGlhbGx5IG9yIGZ1bGx5KSBpbiB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgb25HZXRIaWRkZW5Sb3dzQ291bnRJblRhYmxlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBnZXQgdGFibGUgdG9wIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBvbkdldFRvcEluZGV4KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBnZXQgdGhlIENsaWVudCBib3VuZHMgb2YgdGhlIG9iamVjdDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGdldENsaWVudEJvdW5kc18xKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcG9zdCBhIGtleSBjb21iaW5hdGlvbi4gVGhpcyBlbXVsYXRlcyBrZXlzIHByZXNzZWQgYnkgdGhlIHVzZXIuIFNldHRpbmcgdGhlIGRhdGEgaW4gdGhlIHdpZGdldCB0byBpZ25vcmVcclxuICAvLy8ga2V5IGRvd24sIHdpbGwgY2F1c2UgdGhlIE9TIHRvIGhhbmRsZSB0aGUgZXZlbnQgaW5zdGVhZCBvZiB1cy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIG9uUG9zdEtleUV2ZW50KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBTZW5kIFdNX0NIQVIgbWVzc2FnZSB0byBDb21ib0JveCBhbmQgTGlzdEJveC4gVGhpcyBlbXVsYXRlcyBrZXlzIHByZXNzZWQgYnkgdGhlIHVzZXIuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBvblBvc3RDaGFyRXZlbnQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgT25TZXRHZXRTdWdnZXN0ZWRWYWx1ZU9mQ2hvaWNlQ29udHJvbE9uVGFnRGF0YSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gKEtvcmVhbiBJTUUpIHNlbmQgTUdfSU1FX1hYWCBtZXNzYWdlIHRvIE1nVGV4dEJveCA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvblNlbmRJbWVNc2coKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+c2V0IGN1cnNvciBvbiBmb3Jtczwvc3VtbWFyeT5cclxuICBvblNldEN1cnNvcigpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT50cnVlIGlmIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIGRlbGVnYXRlZCB0byB0aGUgR1VJIHRocmVhZDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaW52b2tlUmVxdWlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiB3aW5kb3dTdGF0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkdldExhc3RXaW5kb3dTdGF0ZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCBwYXJlbnQgbGluayBJZHggb2YgdGhpcyBmcmFtZXNldFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkdldExpbmtlZFBhcmVudElkeCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLzxzdW1tYXJ5PmdldCBsYXllciBvZiB0aGUgY29sdW1uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uR2V0Q29sdW1uc1N0YXRlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gSW5kaWNhdGVzIGlmIGEgY29udHJvbCBjYW4gYmUgc2VsZWN0ZWQuIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uQ2FuRm9jdXMoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldCB0aGUgc2VsZWN0ZWQgaW5kaWNlIG9mIHRoZSBsaXN0Ym94IGNvbnRyb2wuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIE9uR2V0U2VsZWN0ZWRJbmRpY2UoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBjb250cm9sIGhhcyBpbmRlbnQgYXBwbGllZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIE9uR2V0SGFzSW5kZW50KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBNYXAgV2lkZ2V0IHRvIEd1aSBvYmplY3QgKE1nRm9ybS9NZ1N0YXR1c0Jhci9NZ1N0YXR1c1BhbmUpIGZvciBNREkgZnJhbWUgZm9yIGEgcGFyYWxsZWwgY29udGV4dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBNYXBXaWRnZXRfMSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgUG9zaXRpb25Jc24gb2YgRGF0YVJvdyBGcm9tIERhdGFUYWJsZSBhdHRhY2hlZCB0byBEVkNvbnRyb2wuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBPbkdldERWQ29udHJvbFBvc2l0aW9uSXNuKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBBY3RpdmF0ZSB0aGUgZm9ybS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIE9uQWN0aXZhdGVGb3JtKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLzxzdW1tYXJ5PlxyXG4gIC8vLyAgQ2hlY2sgd2hldGhlciB0aGUgY29tYm9ib3ggaXMgaW4gZHJvcHBlZCBkb3duIHN0YXRlLlxyXG4gIC8vLzwvc3VtbWFyeT5cclxuICAvLy88cmV0dXJucz4hIS48L3JldHVybnM+XHJcbiAgT25Jc0NvbWJvRHJvcHBlZERvd25kU3RhdGUoKTogdm9pZCB7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3VpSW50ZXJhY3RpdmUgZXh0ZW5kcyBHdWlJbnRlcmFjdGl2ZUJhc2Uge1xyXG5cclxuICBPbkdldFJ0ZlZhbHVlQmVmb3JlRW50ZXJpbmdDb250cm9sKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgb25HZXRCcm93c2VyVGV4dCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG9uQnJvd3NlckV4ZWN1dGUoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBvbkRpcmVjdG9yeURpYWxvZ0JveCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcbn1cclxuIl19
|