@magic-xpa/gui 4.800.0-dev480.21 → 4.800.0-dev480.210
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-gui.umd.js +1050 -7528
- package/bundles/magic-xpa-gui.umd.js.map +1 -1
- package/bundles/magic-xpa-gui.umd.min.js +1 -1
- package/bundles/magic-xpa-gui.umd.min.js.map +1 -1
- package/esm2015/index.js +1 -1
- package/esm2015/magic-xpa-gui.js +1 -4
- package/esm2015/src/Commands.js +11 -114
- package/esm2015/src/Events.js +1 -517
- package/esm2015/src/EventsProcessor.js +1 -51
- package/esm2015/src/FocusManager.js +1 -13
- package/esm2015/src/GuiConstants.js +2 -11
- package/esm2015/src/GuiEnums.js +126 -130
- package/esm2015/src/GuiEnvironment.js +1 -1
- package/esm2015/src/IFlowMonitorQueue.js +1 -1
- package/esm2015/src/Manager.js +10 -148
- package/esm2015/src/UIBridge.js +1 -6
- package/esm2015/src/env/IEnvironment.js +1 -1
- package/esm2015/src/gui/ControlBase.js +1 -1
- package/esm2015/src/gui/GuiMgControl.js +1 -94
- package/esm2015/src/gui/GuiMgForm.js +1 -1
- package/esm2015/src/gui/KeyboardItem.js +5 -46
- package/esm2015/src/gui/LastFocusedVal.js +1 -5
- package/esm2015/src/gui/MgValue.js +1 -1
- package/esm2015/src/gui/PropParentInterface.js +1 -1
- package/esm2015/src/gui/low/DialogHandler.js +1 -10
- package/esm2015/src/gui/low/GuiCommand.js +1 -12
- package/esm2015/src/gui/low/GuiCommandQueue.js +1 -66
- package/esm2015/src/gui/low/GuiInteractive.js +8 -465
- package/esm2015/src/gui/low/Style.js +1 -9
- package/esm2015/src/management/RuntimeContextBase.js +11 -14
- package/esm2015/src/management/data/BlobType.js +0 -0
- package/esm2015/src/management/data/DcValues.js +8 -67
- package/esm2015/src/management/data/DcValuesBuilderBase.js +2 -37
- package/esm2015/src/management/data/FieldDef.js +1 -95
- package/esm2015/src/management/data/FieldsTable.js +2 -28
- package/esm2015/src/management/data/GuiDataViewBase.js +33 -72
- package/esm2015/src/management/data/GuiFieldBase.js +4 -39
- package/esm2015/src/management/data/IRecord.js +1 -1
- package/esm2015/src/management/data/IReferencedObject.js +1 -8
- package/esm2015/src/management/data/NUM_TYPE.js +14 -485
- package/esm2015/src/management/data/ObjectReferenceBase.js +1 -3
- package/esm2015/src/management/data/ObjectReferencesCollection.js +1 -2
- package/esm2015/src/management/data/RecordUtils.js +6 -112
- package/esm2015/src/management/data/VectorType.js +17 -252
- package/esm2015/src/management/data/VectorTypeBase.js +1 -35
- package/esm2015/src/management/events/IActionManager.js +1 -1
- package/esm2015/src/management/events/IGuiEventsManager.js +1 -1
- package/esm2015/src/management/exp/ExpressionInterface.js +5 -3
- package/esm2015/src/management/exp/GuiExpressionEvaluator.js +38 -155
- package/esm2015/src/management/gui/ControlTable.js +18 -72
- package/esm2015/src/management/gui/DisplayConvertor.js +43 -493
- package/esm2015/src/management/gui/FieldValidator.js +58 -339
- package/esm2015/src/management/gui/GuiControlPropertyAdapter.js +1 -1
- package/esm2015/src/management/gui/GuiFormPropertyAdapter.js +1 -8
- package/esm2015/src/management/gui/HebrewDate.js +3 -140
- package/esm2015/src/management/gui/Helps.js +2 -48
- package/esm2015/src/management/gui/MgControlBase.js +143 -876
- package/esm2015/src/management/gui/MgFormBase.js +68 -407
- package/esm2015/src/management/gui/PIC.js +58 -285
- package/esm2015/src/management/gui/PropDefaults.js +13 -48
- package/esm2015/src/management/gui/PropInterface.js +2 -4
- package/esm2015/src/management/gui/PropTable.js +72 -183
- package/esm2015/src/management/gui/Property.js +35 -372
- package/esm2015/src/management/gui/ValidationDetails.js +10 -52
- package/esm2015/src/management/gui/ValidationDetailsBase.js +12 -45
- package/esm2015/src/management/gui/WrongFormatException.js +1 -15
- package/esm2015/src/management/tasks/GuiDataCollection.js +1 -1
- package/esm2015/src/management/tasks/GuiTaskBase.js +38 -383
- package/esm2015/src/management/tasks/IMGDataTable.js +1 -1
- package/esm2015/src/management/tasks/ITask.js +1 -1
- package/esm2015/src/management/tasks/MgTimer.js +1 -16
- package/esm2015/src/management/tasks/TaskDefinitionId.js +8 -18
- package/esm2015/src/management/tasks/TaskDefinitionIdTableSaxHandler.js +1 -13
- package/esm2015/src/util/AuthenticationDialogHandler.js +1 -4
- package/esm2015/src/util/MemoryUtil.js +1 -41
- package/esm2015/src/util/ObjectReference.js +1 -8
- package/esm2015/src/util/ProcessLauncher.js +3 -21
- package/esm2015/src/util/UsernamePasswordCredentials.js +1 -9
- package/fesm2015/magic-xpa-gui.js +857 -7052
- package/fesm2015/magic-xpa-gui.js.map +1 -1
- package/magic-xpa-gui.d.ts +0 -3
- package/package.json +2 -2
- package/src/Commands.d.ts +2 -0
- package/src/Events.d.ts +0 -2
- package/src/GuiEnums.d.ts +125 -128
- package/src/env/IEnvironment.d.ts +3 -0
- package/src/gui/PropParentInterface.d.ts +1 -1
- package/src/gui/low/GuiInteractive.d.ts +3 -1
- package/src/gui/low/Style.d.ts +0 -3
- package/src/management/RuntimeContextBase.d.ts +2 -0
- package/src/management/data/GuiDataViewBase.d.ts +4 -4
- package/src/management/data/IRecord.d.ts +1 -1
- package/src/management/exp/ExpressionInterface.d.ts +4 -0
- package/src/management/exp/GuiExpressionEvaluator.d.ts +4 -6
- package/src/management/gui/ControlTable.d.ts +1 -1
- package/src/management/gui/DisplayConvertor.d.ts +1 -1
- package/src/management/gui/GuiControlPropertyAdapter.d.ts +1 -1
- package/src/management/gui/MgControlBase.d.ts +7 -7
- package/src/management/gui/MgFormBase.d.ts +6 -6
- package/src/management/gui/PIC.d.ts +1 -0
- package/src/management/gui/PropInterface.d.ts +2 -4
- package/src/management/gui/PropTable.d.ts +4 -5
- package/src/management/gui/Property.d.ts +1 -1
- package/src/management/tasks/GuiTaskBase.d.ts +8 -14
- package/src/management/tasks/TaskDefinitionId.d.ts +1 -0
|
@@ -3,16 +3,6 @@ import { Constants, PICInterface, Randomizer, StorageAttribute, UtilStrByteMode
|
|
|
3
3
|
import { PIC } from '../gui/PIC';
|
|
4
4
|
import { Events } from '../../Events';
|
|
5
5
|
import { GuiEnvironment } from '../../GuiEnvironment';
|
|
6
|
-
/// This class handles a Magic Number the identical way it's represented in Magic.
|
|
7
|
-
/// Most of the methods in this class were copied from the C++ sources of Magic,
|
|
8
|
-
/// in order to keep the exact logic used in order to implement all the functionality
|
|
9
|
-
/// expected, which means that the exact methods names and variables names where used
|
|
10
|
-
/// in order to make future debugging more easyer.
|
|
11
|
-
/// Notice a long data type that is used in Magic C++ sources, is represented in java
|
|
12
|
-
/// by the int data type.
|
|
13
|
-
/// </summary>
|
|
14
|
-
/// <author> Alon Bar-Nes
|
|
15
|
-
/// </author>
|
|
16
6
|
export class NUM_TYPE {
|
|
17
7
|
constructor(recordHexStrOrByteValOrDecStrOrNumFrom, offsetOrPic, lengthOrCompIdx) {
|
|
18
8
|
this.COMMACHAR = ',';
|
|
@@ -47,19 +37,10 @@ export class NUM_TYPE {
|
|
|
47
37
|
get Data() {
|
|
48
38
|
return this._data;
|
|
49
39
|
}
|
|
50
|
-
/// <summary>
|
|
51
|
-
/// Default constructor. Set value to 0
|
|
52
|
-
/// </summary>
|
|
53
40
|
constructor_0() {
|
|
54
41
|
this.initConst();
|
|
55
42
|
this.NUM_ZERO();
|
|
56
43
|
}
|
|
57
|
-
/// <summary>
|
|
58
|
-
/// Creates a Magic Number from a string got from the XML record value. The
|
|
59
|
-
/// String is 40 characters long in an hexa representation.
|
|
60
|
-
/// </summary>
|
|
61
|
-
/// <param name = "recordHexStr"> Magic number in hex format, 40 characters long
|
|
62
|
-
/// </param>
|
|
63
44
|
constructor_1(recordHexStr) {
|
|
64
45
|
let i = 0;
|
|
65
46
|
let twoDigits;
|
|
@@ -75,73 +56,34 @@ export class NUM_TYPE {
|
|
|
75
56
|
this.NUM_ZERO();
|
|
76
57
|
}
|
|
77
58
|
}
|
|
78
|
-
/// <summary>
|
|
79
|
-
/// Creates a Magic Number from array of bytes. Used from the expression evaluator
|
|
80
|
-
/// when a Magic Number value apears within an expression.
|
|
81
|
-
/// </summary>
|
|
82
|
-
/// <param name = "byteVal"> Array of bytes representing a Magic Number</param>
|
|
83
|
-
/// <param name = "offset"> Index of the first byte </param>
|
|
84
|
-
/// <param name = "length"> Number of bytes to use </param>
|
|
85
59
|
constructor_2(byteVal, offset, length) {
|
|
86
60
|
this.constructor_0();
|
|
87
61
|
for (let i = 0; i < length; i = i + 1) {
|
|
88
62
|
this._data[i] = byteVal[i + offset];
|
|
89
63
|
}
|
|
90
64
|
}
|
|
91
|
-
/// <summary>
|
|
92
|
-
/// Creates a Magic Number from array of bytes
|
|
93
|
-
/// </summary>
|
|
94
65
|
constructor_3(byteVal) {
|
|
95
66
|
this.constructor_2(byteVal, 0, byteVal.length);
|
|
96
67
|
}
|
|
97
|
-
/// <summary>
|
|
98
|
-
/// Creates a Magic Number from a decimal for number and its picture
|
|
99
|
-
/// </summary>
|
|
100
|
-
/// <param name = "decStr"> The number in a string decimal format </param>
|
|
101
|
-
/// <param name = "pic"> The picture format to be used </param>
|
|
102
68
|
constructor_4(decStr, pic, compIdx) {
|
|
103
69
|
this.constructor_0();
|
|
104
70
|
this.from_a(decStr, pic, compIdx);
|
|
105
71
|
}
|
|
106
|
-
/// <summary>
|
|
107
|
-
/// Creates a Magic Number from a Magic Number
|
|
108
|
-
/// </summary>
|
|
109
|
-
/// <param name = "numFrom"> The source Magic Number </param>
|
|
110
72
|
constructor_5(numFrom) {
|
|
111
73
|
this.initConst();
|
|
112
74
|
this._data = new Int8Array(numFrom._data.length);
|
|
113
75
|
for (let _ai = 0; _ai < this._data.length; ++_ai)
|
|
114
76
|
this._data[_ai] = numFrom._data[_ai];
|
|
115
77
|
}
|
|
116
|
-
/// <summary>
|
|
117
|
-
/// Build a decimal string from the number stored in a Magic Number.
|
|
118
|
-
/// The string is build from the picture provided as a parameter.
|
|
119
|
-
/// </summary>
|
|
120
|
-
/// <param name = "pic">The picture to use for building the display string
|
|
121
|
-
/// </param>
|
|
122
|
-
/// <returns> The decimal form of the Magic Number in the specified format
|
|
123
|
-
/// </returns>
|
|
124
78
|
toDisplayValue(pic) {
|
|
125
79
|
return this.to_a(pic);
|
|
126
80
|
}
|
|
127
|
-
/// <summary>
|
|
128
|
-
/// init constants of the class
|
|
129
|
-
/// </summary>
|
|
130
81
|
initConst() {
|
|
131
82
|
let env = GuiEnvironment.Environment;
|
|
132
83
|
this.DECIMALCHAR = env.GetDecimal();
|
|
133
84
|
this.COMMACHAR = env.GetThousands();
|
|
134
85
|
this.SIGNIFICANT_NUM_SIZE = env.GetSignificantNumSize();
|
|
135
86
|
}
|
|
136
|
-
/// <summary>
|
|
137
|
-
/// Build an hexadecimal string from the Magic Number for the data record in
|
|
138
|
-
/// the XML tag (to be sent to the Magic Server). The length of this string
|
|
139
|
-
/// will allways be two times the length of the Magic Numbers (in bytes)
|
|
140
|
-
/// because every byte in the Magic Number will be translated to two
|
|
141
|
-
/// character hexadecimal string.
|
|
142
|
-
/// </summary>
|
|
143
|
-
/// <returns> the hexadecimal string
|
|
144
|
-
/// </returns>
|
|
145
87
|
toXMLrecord() {
|
|
146
88
|
let hexStr = new StringBuilder(this.SIGNIFICANT_NUM_SIZE * 2);
|
|
147
89
|
let num;
|
|
@@ -157,14 +99,6 @@ export class NUM_TYPE {
|
|
|
157
99
|
}
|
|
158
100
|
return hexStr.ToString().toUpperCase();
|
|
159
101
|
}
|
|
160
|
-
/// <summary>
|
|
161
|
-
/// Transforming a decimal string number to a Magic Number using the format
|
|
162
|
-
/// provided.
|
|
163
|
-
/// </summary>
|
|
164
|
-
/// <param name = "Alpha"> The number is decimal string form
|
|
165
|
-
/// </param>
|
|
166
|
-
/// <param name = "pic"> The picture fomat to use for the extracting the number
|
|
167
|
-
/// </param>
|
|
168
102
|
from_a(Alpha, pic, compIdx) {
|
|
169
103
|
let i;
|
|
170
104
|
let idx;
|
|
@@ -190,11 +124,10 @@ export class NUM_TYPE {
|
|
|
190
124
|
let negSuff;
|
|
191
125
|
let posSuff;
|
|
192
126
|
let specialValNewPolicy = GuiEnvironment.Environment.GetSpecialValNewPolicy();
|
|
193
|
-
// Parse the picture format
|
|
194
127
|
no_pic = (pic == null);
|
|
195
128
|
len = 0;
|
|
196
|
-
SType = false;
|
|
197
|
-
SPart = false;
|
|
129
|
+
SType = false;
|
|
130
|
+
SPart = false;
|
|
198
131
|
if (!no_pic) {
|
|
199
132
|
mask = pic.getMask();
|
|
200
133
|
if (!specialValNewPolicy)
|
|
@@ -209,21 +142,19 @@ export class NUM_TYPE {
|
|
|
209
142
|
if (negPref.length === posPref.length) {
|
|
210
143
|
if (negPref.length === 0 || negPref === posPref)
|
|
211
144
|
SPart = false;
|
|
212
|
-
// PIC_SUF
|
|
213
145
|
else
|
|
214
|
-
SPart = true;
|
|
146
|
+
SPart = true;
|
|
215
147
|
}
|
|
216
148
|
else
|
|
217
|
-
SPart = true;
|
|
149
|
+
SPart = true;
|
|
218
150
|
if (SPart)
|
|
219
151
|
negStr = negPref;
|
|
220
152
|
else
|
|
221
153
|
negStr = negSuff;
|
|
222
154
|
if (negStr.length === 0)
|
|
223
155
|
SType = true;
|
|
224
|
-
// PIC_POSITIVE
|
|
225
156
|
else
|
|
226
|
-
SType = false;
|
|
157
|
+
SType = false;
|
|
227
158
|
if (SType)
|
|
228
159
|
Scan = (SPart ? posPref : posSuff);
|
|
229
160
|
else
|
|
@@ -235,28 +166,15 @@ export class NUM_TYPE {
|
|
|
235
166
|
pic = new PIC("", StorageAttribute.NUMERIC, compIdx);
|
|
236
167
|
NgtvPrmt = false;
|
|
237
168
|
}
|
|
238
|
-
// Localize variables and flags
|
|
239
169
|
dec = false;
|
|
240
170
|
decs = 0;
|
|
241
171
|
digit = 0;
|
|
242
172
|
Signed = 0;
|
|
243
|
-
// SpecialValNewPolicy = Y
|
|
244
|
-
// Loop on input string of numbers and match them against the picture mask
|
|
245
|
-
// It may happen that the picture mask is smaller than received number string
|
|
246
|
-
// For example, if the string received is '1234.56' whereas picture is '2.1'
|
|
247
|
-
// then the characters to parse from the input string is '1234.5' i.e. # digits
|
|
248
|
-
// specified in picture before the decimal should be ignored. Parsing should
|
|
249
|
-
// continue till # of digits after decimal point in picture match with those in
|
|
250
|
-
// the input string or the end of the string
|
|
251
173
|
for (idx = 0; idx < Alpha.length;) {
|
|
252
|
-
// As mentioned above, continue parsing even if mask length as exhausted by checking
|
|
253
|
-
// idx >= pic.mask_size. However, as long as mask length is valid, match the mask
|
|
254
174
|
if (no_pic || (specialValNewPolicy && idx >= pic.getMaskSize()) || mask[idx] === String.fromCharCode(PICInterface.PIC_N)) {
|
|
255
175
|
c = Alpha[idx];
|
|
256
176
|
if (specialValNewPolicy) {
|
|
257
|
-
// stop parsing if # of decs already reached
|
|
258
177
|
if (dec && decs === pic.getDec()) {
|
|
259
|
-
// Finally, stop parsing on matching required no. of decimal digits
|
|
260
178
|
break;
|
|
261
179
|
}
|
|
262
180
|
}
|
|
@@ -291,8 +209,6 @@ export class NUM_TYPE {
|
|
|
291
209
|
Signed = -1;
|
|
292
210
|
}
|
|
293
211
|
else {
|
|
294
|
-
// QCR # 309623 : If prefix/suffix strings contains digits in it, it is considered as part of data.
|
|
295
|
-
// In order to avoid it skip the prefix / suffix strings while extracting the data part to build NUM_TYPE.
|
|
296
212
|
if (idx === 0) {
|
|
297
213
|
if (pic.getNegPref_().length > 0)
|
|
298
214
|
if (Alpha.startsWith(pic.getNegPref_())) {
|
|
@@ -324,7 +240,6 @@ export class NUM_TYPE {
|
|
|
324
240
|
}
|
|
325
241
|
if (Signed === 0 && SType)
|
|
326
242
|
Signed = 1;
|
|
327
|
-
// Return result of decoded digits
|
|
328
243
|
is_negative = (Signed === 1 && !SType) || (Signed !== 1 && SType);
|
|
329
244
|
if (decs > 0 || digit > 9) {
|
|
330
245
|
buf = (is_negative ? '-' : ' ') + Pbuf;
|
|
@@ -333,12 +248,6 @@ export class NUM_TYPE {
|
|
|
333
248
|
else
|
|
334
249
|
this.NUM_4_LONG((is_negative ? -1 : 1) * this.a_2_long(Pbuf));
|
|
335
250
|
}
|
|
336
|
-
/// <summary>
|
|
337
|
-
/// Extracting a non long number from a decimal string number (numbers with
|
|
338
|
-
/// decimal point, etc...)
|
|
339
|
-
/// </summary>
|
|
340
|
-
/// <param name = "str"> The decimal string number
|
|
341
|
-
/// </param>
|
|
342
251
|
num_4_a_std(str) {
|
|
343
252
|
let digstr = "";
|
|
344
253
|
let diglen = 0;
|
|
@@ -389,11 +298,6 @@ export class NUM_TYPE {
|
|
|
389
298
|
if (isminus)
|
|
390
299
|
this._data[0] |= NUM_TYPE.SIGN_MASK;
|
|
391
300
|
}
|
|
392
|
-
/// <summary>
|
|
393
|
-
/// Translating a long value into an internal Magic Number form
|
|
394
|
-
/// </summary>
|
|
395
|
-
/// <param name = "longVal"> The number to be kept
|
|
396
|
-
/// </param>
|
|
397
301
|
NUM_4_LONG(longVal) {
|
|
398
302
|
let hexStr;
|
|
399
303
|
this.NUM_ZERO();
|
|
@@ -409,13 +313,6 @@ export class NUM_TYPE {
|
|
|
409
313
|
this._data[4] = NUM_TYPE.toSByte(parseInt(hexStr.substr(0, (2) - (0)), 16));
|
|
410
314
|
}
|
|
411
315
|
}
|
|
412
|
-
/// <summary>
|
|
413
|
-
/// Getting a long value from a decimal string representing a long value
|
|
414
|
-
/// </summary>
|
|
415
|
-
/// <param name = "str"> the string representing a long value
|
|
416
|
-
/// </param>
|
|
417
|
-
/// <returns> the long number
|
|
418
|
-
/// </returns>
|
|
419
316
|
a_2_long(str) {
|
|
420
317
|
let n = 0;
|
|
421
318
|
for (let pos = 0; pos < str.length; pos++) {
|
|
@@ -426,21 +323,9 @@ export class NUM_TYPE {
|
|
|
426
323
|
}
|
|
427
324
|
return n;
|
|
428
325
|
}
|
|
429
|
-
/// <summary>
|
|
430
|
-
/// Activating the process of building a decimal string by the format indicated
|
|
431
|
-
/// </summary>
|
|
432
|
-
/// <param name = "pic">a numeric picture to use for building the display string
|
|
433
|
-
/// </param>
|
|
434
326
|
to_a(pic) {
|
|
435
327
|
return this.to_a_pic(pic);
|
|
436
328
|
}
|
|
437
|
-
/// <summary>
|
|
438
|
-
/// Performs the process of building a decimal string by the picture provided
|
|
439
|
-
/// </summary>
|
|
440
|
-
/// <param name = "pic"> the picture class holding the information about the picture
|
|
441
|
-
/// </param>
|
|
442
|
-
/// <returns> the string form of the Magic Number
|
|
443
|
-
/// </returns>
|
|
444
329
|
to_a_pic(pic) {
|
|
445
330
|
let buf = new Array(128);
|
|
446
331
|
let remains;
|
|
@@ -464,10 +349,9 @@ export class NUM_TYPE {
|
|
|
464
349
|
let isOut;
|
|
465
350
|
let outVal;
|
|
466
351
|
len = pic.getMaskSize();
|
|
467
|
-
// Set signs of number
|
|
468
352
|
sign_n = (pic.isNegative() && this.num_is_neg() ? false : true);
|
|
469
|
-
pref_len = (sign_n ? pic.getPosPref_().length : pic.getNegPref_().length);
|
|
470
|
-
suff_len = (sign_n ? pic.getPosSuff_().length : pic.getNegSuff_().length);
|
|
353
|
+
pref_len = (sign_n ? pic.getPosPref_().length : pic.getNegPref_().length);
|
|
354
|
+
suff_len = (sign_n ? pic.getPosSuff_().length : pic.getNegSuff_().length);
|
|
471
355
|
left = pic.isLeft();
|
|
472
356
|
pfill = pic.padFill();
|
|
473
357
|
mask_chars = pic.getMaskChars();
|
|
@@ -478,7 +362,6 @@ export class NUM_TYPE {
|
|
|
478
362
|
out_buf[i] = '0'.toLowerCase();
|
|
479
363
|
}
|
|
480
364
|
isOut = ((left || (mask_chars > 0)) ? false : true);
|
|
481
|
-
// Convert to string
|
|
482
365
|
str_pos = pref_len;
|
|
483
366
|
str_len = len - pref_len - suff_len;
|
|
484
367
|
tmp_out_buf = out_buf.slice(str_pos, out_buf.length);
|
|
@@ -500,7 +383,6 @@ export class NUM_TYPE {
|
|
|
500
383
|
str_pos += mask_chars;
|
|
501
384
|
str_len -= mask_chars;
|
|
502
385
|
}
|
|
503
|
-
// take care of pad after and before number
|
|
504
386
|
if (pfill) {
|
|
505
387
|
pad = pic.getPad();
|
|
506
388
|
if (left) {
|
|
@@ -518,7 +400,6 @@ export class NUM_TYPE {
|
|
|
518
400
|
str_pos += remains;
|
|
519
401
|
str_len -= remains;
|
|
520
402
|
}
|
|
521
|
-
// take care of suffix and prefix
|
|
522
403
|
if (suff_len > 0) {
|
|
523
404
|
suff_str = sign_n ? pic.getPosSuff_() : pic.getNegSuff_();
|
|
524
405
|
if (suff_len === 1)
|
|
@@ -539,8 +420,6 @@ export class NUM_TYPE {
|
|
|
539
420
|
for (i = 0; i < pref_len; i++)
|
|
540
421
|
out_buf[str_pos + i] = pref_str[i];
|
|
541
422
|
}
|
|
542
|
-
// str_pos now points to beginning of result str
|
|
543
|
-
// take care of final pad after and before number
|
|
544
423
|
if (!pfill) {
|
|
545
424
|
let outBufLen = out_buf.length;
|
|
546
425
|
if (left) {
|
|
@@ -553,10 +432,8 @@ export class NUM_TYPE {
|
|
|
553
432
|
out_buf[str_pos + i] = pad;
|
|
554
433
|
}
|
|
555
434
|
}
|
|
556
|
-
// result built, finish
|
|
557
435
|
if (isOut)
|
|
558
436
|
return NString.FromChars(out_buf);
|
|
559
|
-
// Copy result to output buffer
|
|
560
437
|
if (mask_chars === 0) {
|
|
561
438
|
if (str_pos + len > out_buf.length)
|
|
562
439
|
len = out_buf.length - str_pos;
|
|
@@ -567,19 +444,6 @@ export class NUM_TYPE {
|
|
|
567
444
|
outVal[out_pos] = out_buf[str_pos++];
|
|
568
445
|
return NString.FromChars(outVal);
|
|
569
446
|
}
|
|
570
|
-
/// <summary>
|
|
571
|
-
/// Bulding the basic decimal string number from a long value (without
|
|
572
|
-
/// the special picture features).
|
|
573
|
-
/// </summary>
|
|
574
|
-
/// <param name = "num"> The number to be translated
|
|
575
|
-
/// </param>
|
|
576
|
-
/// <param name = "str"> The mask to use for building the string number
|
|
577
|
-
/// </param>
|
|
578
|
-
/// <len> len the len to use in the str char array </len>
|
|
579
|
-
/// <param name = "pic"> The picture class holding the information about the picture
|
|
580
|
-
/// </param>
|
|
581
|
-
/// <returns> the length of the result string
|
|
582
|
-
/// </returns>
|
|
583
447
|
num_l_2_str(num, str, len, pic) {
|
|
584
448
|
let commas;
|
|
585
449
|
let digits;
|
|
@@ -593,8 +457,6 @@ export class NUM_TYPE {
|
|
|
593
457
|
if (decs > 0)
|
|
594
458
|
len -= (decs + 1);
|
|
595
459
|
i = len;
|
|
596
|
-
// 26/11/97 Shay Z. Bug #770526 - If The decimal point is the first
|
|
597
|
-
// in the picture's format - assume that the input value is legal !!
|
|
598
460
|
if (num === 0 && !pic.decInFirstPos()) {
|
|
599
461
|
if (pic.zeroFill())
|
|
600
462
|
return (NUM_TYPE.ZERO_FILL);
|
|
@@ -627,17 +489,6 @@ export class NUM_TYPE {
|
|
|
627
489
|
}
|
|
628
490
|
return i;
|
|
629
491
|
}
|
|
630
|
-
/// <summary>
|
|
631
|
-
/// Bulding the basic decimal string number from a non long value (without
|
|
632
|
-
/// the special picture features).
|
|
633
|
-
/// </summary>
|
|
634
|
-
/// <param name = "str"> The mask to use for building the string number
|
|
635
|
-
/// </param>
|
|
636
|
-
/// <len> len the len to use in the str char array </len>
|
|
637
|
-
/// <param name = "pic"> The picture class holding the information about the picture
|
|
638
|
-
/// </param>
|
|
639
|
-
/// <returns> the length of the result string
|
|
640
|
-
/// </returns>
|
|
641
492
|
to_str(str, len, pic) {
|
|
642
493
|
let tmp;
|
|
643
494
|
let commas;
|
|
@@ -676,9 +527,6 @@ export class NUM_TYPE {
|
|
|
676
527
|
}
|
|
677
528
|
digits++;
|
|
678
529
|
}
|
|
679
|
-
// JPN:15/08/1996 Yama (JpnID:ZA0815001)
|
|
680
|
-
// When Format="N12C" and num is bigger than 12 digits.
|
|
681
|
-
// MAGIC crushes. Because the var i becomes negative.
|
|
682
530
|
if (i < 0)
|
|
683
531
|
return (NUM_TYPE.NO_ROOM);
|
|
684
532
|
if ((j < 2) || (j >= this.SIGNIFICANT_NUM_SIZE * 2))
|
|
@@ -693,23 +541,12 @@ export class NUM_TYPE {
|
|
|
693
541
|
if (i < 0)
|
|
694
542
|
return (NUM_TYPE.NO_ROOM);
|
|
695
543
|
str[i--] = this.DECIMALCHAR;
|
|
696
|
-
// 26/11/97 Shay Z. Bug #770526 - If The decimal point is the first
|
|
697
|
-
// in the picture's format - assume that the input value is legal !
|
|
698
544
|
if (i < 0 && pic.decInFirstPos())
|
|
699
545
|
return (0);
|
|
700
546
|
}
|
|
701
547
|
}
|
|
702
548
|
return (i + 1);
|
|
703
549
|
}
|
|
704
|
-
/// <summary>
|
|
705
|
-
/// Performing an Add operation on two magic numbers
|
|
706
|
-
/// </summary>
|
|
707
|
-
/// <param name = "num1"> the first number
|
|
708
|
-
/// </param>
|
|
709
|
-
/// <param name = "num2"> the first number
|
|
710
|
-
/// </param>
|
|
711
|
-
/// <returns> the result
|
|
712
|
-
/// </returns>
|
|
713
550
|
static add(num1, num2) {
|
|
714
551
|
let sign1;
|
|
715
552
|
let sign2;
|
|
@@ -717,7 +554,6 @@ export class NUM_TYPE {
|
|
|
717
554
|
let l1;
|
|
718
555
|
let l2;
|
|
719
556
|
let SIGNIFICANT_NUM_SIZE;
|
|
720
|
-
// null values
|
|
721
557
|
if (num1 === null || num2 === null)
|
|
722
558
|
return null;
|
|
723
559
|
SIGNIFICANT_NUM_SIZE = GuiEnvironment.Environment.GetSignificantNumSize();
|
|
@@ -778,17 +614,7 @@ export class NUM_TYPE {
|
|
|
778
614
|
}
|
|
779
615
|
return tmpres;
|
|
780
616
|
}
|
|
781
|
-
/// <summary>
|
|
782
|
-
/// Performing a Subtract operation on two magic numbers
|
|
783
|
-
/// </summary>
|
|
784
|
-
/// <param name = "num1"> the first number
|
|
785
|
-
/// </param>
|
|
786
|
-
/// <param name = "num2"> the first number
|
|
787
|
-
/// </param>
|
|
788
|
-
/// <returns> the result
|
|
789
|
-
/// </returns>
|
|
790
617
|
static sub(num1, num2) {
|
|
791
|
-
// null values
|
|
792
618
|
if (num1 === null || num2 === null)
|
|
793
619
|
return null;
|
|
794
620
|
let tmpres = new NUM_TYPE();
|
|
@@ -849,15 +675,6 @@ export class NUM_TYPE {
|
|
|
849
675
|
tmpres._data[0] |= sign1;
|
|
850
676
|
return tmpres;
|
|
851
677
|
}
|
|
852
|
-
/// <summary>
|
|
853
|
-
/// Performing a Multiply operation on two magic numbers
|
|
854
|
-
/// </summary>
|
|
855
|
-
/// <param name = "num1"> the first number
|
|
856
|
-
/// </param>
|
|
857
|
-
/// <param name = "num2"> the first number
|
|
858
|
-
/// </param>
|
|
859
|
-
/// <returns> the result
|
|
860
|
-
/// </returns>
|
|
861
678
|
static mul(num1, num2) {
|
|
862
679
|
let fullres = new Int8Array(38);
|
|
863
680
|
let pwr;
|
|
@@ -873,7 +690,6 @@ export class NUM_TYPE {
|
|
|
873
690
|
let l1;
|
|
874
691
|
let l2;
|
|
875
692
|
let SIGNIFICANT_NUM_SIZE;
|
|
876
|
-
// null values
|
|
877
693
|
if (num1 === null || num2 === null)
|
|
878
694
|
return null;
|
|
879
695
|
SIGNIFICANT_NUM_SIZE = GuiEnvironment.Environment.GetSignificantNumSize();
|
|
@@ -946,17 +762,7 @@ export class NUM_TYPE {
|
|
|
946
762
|
res._data[1 + i] = fullres[pos + i];
|
|
947
763
|
return res;
|
|
948
764
|
}
|
|
949
|
-
/// <summary>
|
|
950
|
-
/// Performing a Mod operation on two magic numbers
|
|
951
|
-
/// </summary>
|
|
952
|
-
/// <param name = "num1"> the first number
|
|
953
|
-
/// </param>
|
|
954
|
-
/// <param name = "num2"> the first number
|
|
955
|
-
/// </param>
|
|
956
|
-
/// <returns> the result
|
|
957
|
-
/// </returns>
|
|
958
765
|
static mod(num1, num2) {
|
|
959
|
-
// null values
|
|
960
766
|
if (num1 === null || num2 === null)
|
|
961
767
|
return null;
|
|
962
768
|
let res = new NUM_TYPE();
|
|
@@ -974,15 +780,6 @@ export class NUM_TYPE {
|
|
|
974
780
|
res = NUM_TYPE.sub(num1, res);
|
|
975
781
|
return res;
|
|
976
782
|
}
|
|
977
|
-
/// <summary>
|
|
978
|
-
/// Performing a Divide operation on two magic numbers
|
|
979
|
-
/// </summary>
|
|
980
|
-
/// <param name = "num1"> the first number
|
|
981
|
-
/// </param>
|
|
982
|
-
/// <param name = "num2"> the first number
|
|
983
|
-
/// </param>
|
|
984
|
-
/// <returns> the result
|
|
985
|
-
/// </returns>
|
|
986
783
|
static div(num1, num2) {
|
|
987
784
|
let dividend = new Int8Array((NUM_TYPE.NUM_SIZE - 1) * 2);
|
|
988
785
|
let divisor = new Int8Array(NUM_TYPE.NUM_SIZE);
|
|
@@ -996,7 +793,6 @@ export class NUM_TYPE {
|
|
|
996
793
|
let prod;
|
|
997
794
|
let carry;
|
|
998
795
|
let SIGNIFICANT_NUM_SIZE;
|
|
999
|
-
// null values
|
|
1000
796
|
if (num1 === null || num2 === null)
|
|
1001
797
|
return null;
|
|
1002
798
|
SIGNIFICANT_NUM_SIZE = GuiEnvironment.Environment.GetSignificantNumSize();
|
|
@@ -1030,7 +826,6 @@ export class NUM_TYPE {
|
|
|
1030
826
|
res._data[0] = NUM_TYPE.toSByte(pwr + NUM_TYPE.EXP_BIAS);
|
|
1031
827
|
if ((num1._data[0] & NUM_TYPE.SIGN_MASK) !== (num2._data[0] & NUM_TYPE.SIGN_MASK))
|
|
1032
828
|
res._data[0] |= NUM_TYPE.SIGN_MASK;
|
|
1033
|
-
// normalize dividend & divisor
|
|
1034
829
|
quot = Math.floor(100 / (NUM_TYPE.toUByte(divisor[1]) + 1));
|
|
1035
830
|
if (quot > 1) {
|
|
1036
831
|
carry = 0;
|
|
@@ -1046,13 +841,11 @@ export class NUM_TYPE {
|
|
|
1046
841
|
dividend[pos1] = NUM_TYPE.toSByte(prod % 100);
|
|
1047
842
|
}
|
|
1048
843
|
}
|
|
1049
|
-
// divide dividend by divisor
|
|
1050
844
|
for (pos1 = 1; pos1 < SIGNIFICANT_NUM_SIZE; pos1++) {
|
|
1051
845
|
quot = NUM_TYPE.toUByte(dividend[pos1 - 1]) * 100 + Math.floor(NUM_TYPE.toUByte(dividend[pos1]) / NUM_TYPE.toUByte(divisor[1]));
|
|
1052
846
|
if (quot >= 100)
|
|
1053
847
|
quot = 99;
|
|
1054
848
|
if (quot !== 0) {
|
|
1055
|
-
// multiply divisor by quotient, and subtract from dividend
|
|
1056
849
|
pos = pos1 + len2 - 1;
|
|
1057
850
|
carry = 0;
|
|
1058
851
|
for (pos2 = len2; pos2 > 0; pos2--) {
|
|
@@ -1067,7 +860,6 @@ export class NUM_TYPE {
|
|
|
1067
860
|
}
|
|
1068
861
|
}
|
|
1069
862
|
dividend[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(dividend[pos]) - carry);
|
|
1070
|
-
// decrement quotient, and add back divisor to dividend
|
|
1071
863
|
while (dividend[pos] < 0) {
|
|
1072
864
|
quot--;
|
|
1073
865
|
pos = pos1 + len2 - 1;
|
|
@@ -1086,15 +878,6 @@ export class NUM_TYPE {
|
|
|
1086
878
|
}
|
|
1087
879
|
return res;
|
|
1088
880
|
}
|
|
1089
|
-
/// <summary>
|
|
1090
|
-
/// Compare two magic numbers
|
|
1091
|
-
/// </summary>
|
|
1092
|
-
/// <param name = "num1"> The first number
|
|
1093
|
-
/// </param>
|
|
1094
|
-
/// <param name = "num2"> The second number
|
|
1095
|
-
/// </param>
|
|
1096
|
-
/// <returns> 0 if num1=num2, 1 if num1>num2 or -1 if num1<num2
|
|
1097
|
-
/// </returns>
|
|
1098
881
|
static num_cmp(num1, num2) {
|
|
1099
882
|
let sign1;
|
|
1100
883
|
let sign2;
|
|
@@ -1133,51 +916,25 @@ export class NUM_TYPE {
|
|
|
1133
916
|
cmpval = -cmpval;
|
|
1134
917
|
return (cmpval);
|
|
1135
918
|
}
|
|
1136
|
-
/// <summary>
|
|
1137
|
-
/// Check if the given hex string represents a long number.
|
|
1138
|
-
/// </summary>
|
|
1139
|
-
/// <param name = "numHexStr"> The hex string to check.
|
|
1140
|
-
/// </param>
|
|
1141
|
-
/// <returns> true, if the string represents a 'long' number in NUM_TYPE.
|
|
1142
|
-
/// </returns>
|
|
1143
919
|
static numHexStrIsLong(numHexStr) {
|
|
1144
920
|
return numHexStr.substr(0, 2) === "FF";
|
|
1145
921
|
}
|
|
1146
|
-
/// <summary>
|
|
1147
|
-
/// Zeroes the Magic Number as a long zero
|
|
1148
|
-
/// </summary>
|
|
1149
922
|
NUM_ZERO() {
|
|
1150
923
|
this.setZero(true);
|
|
1151
924
|
}
|
|
1152
|
-
/// <summary>
|
|
1153
|
-
/// Zeroes the Magic Number (all bytes will set to 0)
|
|
1154
|
-
/// </summary>
|
|
1155
925
|
NUM_SET_ZERO() {
|
|
1156
926
|
this.setZero(false);
|
|
1157
927
|
}
|
|
1158
|
-
/// <summary>
|
|
1159
|
-
/// Getting indication for the sign of the Magic Number
|
|
1160
|
-
/// </summary>
|
|
1161
|
-
/// <returns> true in the number is negative, false if positive
|
|
1162
|
-
/// </returns>
|
|
1163
928
|
num_is_neg() {
|
|
1164
929
|
if (this.NUM_IS_LONG())
|
|
1165
930
|
return ((this._data[4] & 0x80) !== 0);
|
|
1166
931
|
return ((this._data[0] & NUM_TYPE.SIGN_MASK) !== 0);
|
|
1167
932
|
}
|
|
1168
|
-
/// <summary>
|
|
1169
|
-
/// Getting indication if the Magic Number is ZERO (all bytes equals to 0)
|
|
1170
|
-
/// </summary>
|
|
1171
|
-
/// <returns> true in the number is ZERO, false if positive
|
|
1172
|
-
/// </returns>
|
|
1173
933
|
num_is_zero() {
|
|
1174
934
|
if (this.NUM_IS_LONG())
|
|
1175
935
|
return (this.NUM_LONG() === 0);
|
|
1176
936
|
return (this._data[0] === 0);
|
|
1177
937
|
}
|
|
1178
|
-
/// <summary>
|
|
1179
|
-
/// Changing sign of Magic Number
|
|
1180
|
-
/// </summary>
|
|
1181
938
|
num_neg() {
|
|
1182
939
|
let l;
|
|
1183
940
|
if (this.NUM_IS_LONG()) {
|
|
@@ -1188,20 +945,9 @@ export class NUM_TYPE {
|
|
|
1188
945
|
if (this._data[0] !== 0)
|
|
1189
946
|
this._data[0] ^= NUM_TYPE.SIGN_MASK;
|
|
1190
947
|
}
|
|
1191
|
-
/// <summary>
|
|
1192
|
-
/// Is the number kept in in the NUM_TYPE is a long number?
|
|
1193
|
-
/// </summary>
|
|
1194
|
-
/// <returns> true in the number is long, false if not
|
|
1195
|
-
/// </returns>
|
|
1196
948
|
NUM_IS_LONG() {
|
|
1197
949
|
return this._data[0] === NUM_TYPE.NUM_LONG_TYPE;
|
|
1198
950
|
}
|
|
1199
|
-
/// <summary>
|
|
1200
|
-
/// Get the long value from the NUM_TYPE.
|
|
1201
|
-
/// THIS FUNCTION MUST BE WRITTEN DIFERENTLY!
|
|
1202
|
-
/// </summary>
|
|
1203
|
-
/// <returns> the long number
|
|
1204
|
-
/// </returns>
|
|
1205
951
|
NUM_LONG() {
|
|
1206
952
|
let i;
|
|
1207
953
|
if (this._data[1] === 0 && this._data[2] === 0 && this._data[3] === 0 && this._data[4] === -128)
|
|
@@ -1209,11 +955,6 @@ export class NUM_TYPE {
|
|
|
1209
955
|
let dataview = new DataView(this._data.buffer);
|
|
1210
956
|
return dataview.getInt32(1, true);
|
|
1211
957
|
}
|
|
1212
|
-
/// <summary>
|
|
1213
|
-
/// Rounds the NUM_TYPE number
|
|
1214
|
-
/// </summary>
|
|
1215
|
-
/// <param name = "decs"> number of digits after to decimal point to round to
|
|
1216
|
-
/// </param>
|
|
1217
958
|
round(decs) {
|
|
1218
959
|
let addval;
|
|
1219
960
|
if (this.NUM_IS_LONG())
|
|
@@ -1226,11 +967,6 @@ export class NUM_TYPE {
|
|
|
1226
967
|
this._data = temp._data;
|
|
1227
968
|
this.num_trunc(decs);
|
|
1228
969
|
}
|
|
1229
|
-
/// <summary>
|
|
1230
|
-
/// Returns a numeric expression, rounded to the specified number of decimal places
|
|
1231
|
-
/// </summary>
|
|
1232
|
-
/// <param name = "whole">the number of decimal places to which the numeric expression is rounded
|
|
1233
|
-
/// </param>
|
|
1234
970
|
dbRound(whole) {
|
|
1235
971
|
let addval;
|
|
1236
972
|
let pwr;
|
|
@@ -1238,7 +974,6 @@ export class NUM_TYPE {
|
|
|
1238
974
|
let i;
|
|
1239
975
|
if (this.NUM_IS_LONG())
|
|
1240
976
|
return;
|
|
1241
|
-
// Add 5 (in the corresponding to whole position)
|
|
1242
977
|
addval = new NUM_TYPE();
|
|
1243
978
|
addval._data[0] = NUM_TYPE.toSByte((this._data[0] & NUM_TYPE.SIGN_MASK) | (NUM_TYPE.EXP_BIAS + ((whole + 1) >> 1)));
|
|
1244
979
|
addval._data[1] = NUM_TYPE.toSByte(((whole & 1) !== 0) ? 5 : 50);
|
|
@@ -1246,7 +981,6 @@ export class NUM_TYPE {
|
|
|
1246
981
|
this._data = new Int8Array(temp._data.length);
|
|
1247
982
|
for (let _ai = 0; _ai < this._data.length; ++_ai)
|
|
1248
983
|
this._data[_ai] = temp._data[_ai];
|
|
1249
|
-
// Put 0 in the end of the number
|
|
1250
984
|
pwr = (this._data[0] & ~NUM_TYPE.SIGN_MASK) - NUM_TYPE.EXP_BIAS;
|
|
1251
985
|
if ((num_diff = pwr - ((whole + 1) >> 1)) >= 0) {
|
|
1252
986
|
if ((whole & 1) !== 0) {
|
|
@@ -1259,11 +993,6 @@ export class NUM_TYPE {
|
|
|
1259
993
|
else
|
|
1260
994
|
this.NUM_SET_ZERO();
|
|
1261
995
|
}
|
|
1262
|
-
/// <summary>
|
|
1263
|
-
/// Truncates the NUM_TYPE number
|
|
1264
|
-
/// </summary>
|
|
1265
|
-
/// <param name = "decs"> number of digits after to decimal point to have
|
|
1266
|
-
/// </param>
|
|
1267
996
|
num_trunc(decs) {
|
|
1268
997
|
let pwr;
|
|
1269
998
|
let num_diff;
|
|
@@ -1286,11 +1015,6 @@ export class NUM_TYPE {
|
|
|
1286
1015
|
for (i = 0; i < num_diff; i++)
|
|
1287
1016
|
this._data[this.SIGNIFICANT_NUM_SIZE - num_diff + i] = 0;
|
|
1288
1017
|
}
|
|
1289
|
-
/// <summary>
|
|
1290
|
-
/// Converts a Magic number from std long
|
|
1291
|
-
/// </summary>
|
|
1292
|
-
/// <param name = "num"> The number to be translated
|
|
1293
|
-
/// </param>
|
|
1294
1018
|
num_4_std_long() {
|
|
1295
1019
|
let slong;
|
|
1296
1020
|
slong = this.NUM_LONG();
|
|
@@ -1301,11 +1025,6 @@ export class NUM_TYPE {
|
|
|
1301
1025
|
this._data[0] |= NUM_TYPE.SIGN_MASK;
|
|
1302
1026
|
}
|
|
1303
1027
|
}
|
|
1304
|
-
/// <summary>
|
|
1305
|
-
/// Converts a Magic number from ulong
|
|
1306
|
-
/// </summary>
|
|
1307
|
-
/// <param name = "num"> The number to be translated
|
|
1308
|
-
/// </param>
|
|
1309
1028
|
num_4_ulong(data) {
|
|
1310
1029
|
let pwr;
|
|
1311
1030
|
let pos;
|
|
@@ -1326,33 +1045,18 @@ export class NUM_TYPE {
|
|
|
1326
1045
|
this._data[0] = NUM_TYPE.toSByte(pwr - pos + NUM_TYPE.EXP_BIAS);
|
|
1327
1046
|
}
|
|
1328
1047
|
}
|
|
1329
|
-
/// <summary>
|
|
1330
|
-
/// Get the long value from a Magic Number
|
|
1331
|
-
/// </summary>
|
|
1332
|
-
/// <returns> the long value of the number
|
|
1333
|
-
/// </returns>
|
|
1334
1048
|
NUM_2_LONG() {
|
|
1335
1049
|
if (this.NUM_IS_LONG())
|
|
1336
1050
|
return this.NUM_LONG();
|
|
1337
1051
|
else
|
|
1338
1052
|
return this.num_2_long();
|
|
1339
1053
|
}
|
|
1340
|
-
/// <summary>
|
|
1341
|
-
/// Get the Ulong value from a Magic Number
|
|
1342
|
-
/// </summary>
|
|
1343
|
-
/// <returns> the long value of the number
|
|
1344
|
-
/// </returns>
|
|
1345
1054
|
NUM_2_ULONG() {
|
|
1346
1055
|
if (this.NUM_IS_LONG())
|
|
1347
1056
|
return this.NUM_LONG();
|
|
1348
1057
|
else
|
|
1349
1058
|
return this.num_2_ulong();
|
|
1350
1059
|
}
|
|
1351
|
-
/// <summary>
|
|
1352
|
-
/// Get the long value from a non long Magic Number
|
|
1353
|
-
/// </summary>
|
|
1354
|
-
/// <returns> the long value of the number
|
|
1355
|
-
/// </returns>
|
|
1356
1060
|
num_2_long() {
|
|
1357
1061
|
let slong;
|
|
1358
1062
|
let sign;
|
|
@@ -1373,11 +1077,6 @@ export class NUM_TYPE {
|
|
|
1373
1077
|
}
|
|
1374
1078
|
return (slong);
|
|
1375
1079
|
}
|
|
1376
|
-
/// <summary>
|
|
1377
|
-
/// Get the ulong value from a non long Magic Number
|
|
1378
|
-
/// </summary>
|
|
1379
|
-
/// <returns> the ulong value of the number
|
|
1380
|
-
/// </returns>
|
|
1381
1080
|
num_2_ulong() {
|
|
1382
1081
|
let val;
|
|
1383
1082
|
let pwr;
|
|
@@ -1399,17 +1098,6 @@ export class NUM_TYPE {
|
|
|
1399
1098
|
val = 0;
|
|
1400
1099
|
return (val);
|
|
1401
1100
|
}
|
|
1402
|
-
/// <summary>
|
|
1403
|
-
/// Perform the actuall add operation
|
|
1404
|
-
/// </summary>
|
|
1405
|
-
/// <param name = "num1"> The first number
|
|
1406
|
-
/// </param>
|
|
1407
|
-
/// <param name = "num2"> The second number
|
|
1408
|
-
/// </param>
|
|
1409
|
-
/// <param name = "operData"> Information for performing the operation
|
|
1410
|
-
/// </param>
|
|
1411
|
-
/// <returns> The two numbers added
|
|
1412
|
-
/// </returns>
|
|
1413
1101
|
static add_pos(num1, num2, operData) {
|
|
1414
1102
|
let len1;
|
|
1415
1103
|
let len2;
|
|
@@ -1419,7 +1107,6 @@ export class NUM_TYPE {
|
|
|
1419
1107
|
let resptr;
|
|
1420
1108
|
let i;
|
|
1421
1109
|
let SIGNIFICANT_NUM_SIZE;
|
|
1422
|
-
// null values
|
|
1423
1110
|
if (num1 == null || num2 == null)
|
|
1424
1111
|
return null;
|
|
1425
1112
|
SIGNIFICANT_NUM_SIZE = GuiEnvironment.Environment.GetSignificantNumSize();
|
|
@@ -1479,17 +1166,6 @@ export class NUM_TYPE {
|
|
|
1479
1166
|
res._data[0] = operData.NUM_Exp1_;
|
|
1480
1167
|
return res;
|
|
1481
1168
|
}
|
|
1482
|
-
/// <summary>
|
|
1483
|
-
/// Perform the actuall sub operation
|
|
1484
|
-
/// </summary>
|
|
1485
|
-
/// <param name = "num1"> The first number
|
|
1486
|
-
/// </param>
|
|
1487
|
-
/// <param name = "num2"> The second number
|
|
1488
|
-
/// </param>
|
|
1489
|
-
/// <param name = "operData"> Information for performing the operation
|
|
1490
|
-
/// </param>
|
|
1491
|
-
/// <returns> The result of the subtraction operation
|
|
1492
|
-
/// </returns>
|
|
1493
1169
|
static sub_pos(num1, num2, operData) {
|
|
1494
1170
|
let len1;
|
|
1495
1171
|
let len2;
|
|
@@ -1499,7 +1175,6 @@ export class NUM_TYPE {
|
|
|
1499
1175
|
let resptr;
|
|
1500
1176
|
let i;
|
|
1501
1177
|
let SIGNIFICANT_NUM_SIZE;
|
|
1502
|
-
// null values
|
|
1503
1178
|
if (num1 == null || num2 == null)
|
|
1504
1179
|
return null;
|
|
1505
1180
|
SIGNIFICANT_NUM_SIZE = GuiEnvironment.Environment.GetSignificantNumSize();
|
|
@@ -1541,14 +1216,14 @@ export class NUM_TYPE {
|
|
|
1541
1216
|
res._data[resptr + pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[resptr + pos]) + NUM_TYPE.toUByte(num1._data[num1ptr + pos]) - NUM_TYPE.toUByte(num2._data[pos]));
|
|
1542
1217
|
if (res._data[resptr + pos] < 0) {
|
|
1543
1218
|
res._data[resptr + pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[resptr + pos]) + 100);
|
|
1544
|
-
res._data[resptr + pos - 1] = NUM_TYPE.toSByte(0xFF);
|
|
1219
|
+
res._data[resptr + pos - 1] = NUM_TYPE.toSByte(0xFF);
|
|
1545
1220
|
}
|
|
1546
1221
|
}
|
|
1547
1222
|
for (pos = operData.NUM_Diff_; pos > 0; pos--) {
|
|
1548
1223
|
res._data[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[pos]) + NUM_TYPE.toUByte(num1._data[pos]));
|
|
1549
1224
|
if (res._data[pos] < 0) {
|
|
1550
1225
|
res._data[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[pos]) + 100);
|
|
1551
|
-
res._data[pos - 1] = NUM_TYPE.toSByte(0xFF);
|
|
1226
|
+
res._data[pos - 1] = NUM_TYPE.toSByte(0xFF);
|
|
1552
1227
|
}
|
|
1553
1228
|
}
|
|
1554
1229
|
while ((++pos <= len) && res._data[pos] === 0) {
|
|
@@ -1565,11 +1240,6 @@ export class NUM_TYPE {
|
|
|
1565
1240
|
}
|
|
1566
1241
|
return res;
|
|
1567
1242
|
}
|
|
1568
|
-
/// <summary>
|
|
1569
|
-
/// Perform the actual FIX operation with whole part of the number
|
|
1570
|
-
/// </summary>
|
|
1571
|
-
/// <param name = "wholes">number of needed whole digits
|
|
1572
|
-
/// </param>
|
|
1573
1243
|
num_fix(wholes) {
|
|
1574
1244
|
let pwr;
|
|
1575
1245
|
let num_diff;
|
|
@@ -1597,22 +1267,9 @@ export class NUM_TYPE {
|
|
|
1597
1267
|
this._data[0] = NUM_TYPE.toSByte(this._data[0] - NUM_TYPE.toSByte(num_diff));
|
|
1598
1268
|
}
|
|
1599
1269
|
}
|
|
1600
|
-
/// <summary>
|
|
1601
|
-
/// check if byte on specific position is zero or 0xFF
|
|
1602
|
-
/// </summary>
|
|
1603
|
-
/// <param name = "position">in NUM to be checked
|
|
1604
|
-
/// </param>
|
|
1605
|
-
/// <returns> is the byte zero
|
|
1606
|
-
/// </returns>
|
|
1607
1270
|
SHRT_IS_ZERO(pos) {
|
|
1608
1271
|
return this._data[pos] === 0 && this._data[pos + 1] === 0;
|
|
1609
1272
|
}
|
|
1610
|
-
/// <summary>
|
|
1611
|
-
/// Zero a Magic Number. If the number should contain a long zero, the first
|
|
1612
|
-
/// byte is set to NUM_LONG_TYPE.
|
|
1613
|
-
/// </summary>
|
|
1614
|
-
/// <param name = "asLong"> set the Magic Number to contain a long zero value
|
|
1615
|
-
/// </param>
|
|
1616
1273
|
setZero(asLong) {
|
|
1617
1274
|
let i;
|
|
1618
1275
|
for (i = 0; i < NUM_TYPE.NUM_SIZE; i++)
|
|
@@ -1620,19 +1277,6 @@ export class NUM_TYPE {
|
|
|
1620
1277
|
if (asLong)
|
|
1621
1278
|
this._data[0] = NUM_TYPE.NUM_LONG_TYPE;
|
|
1622
1279
|
}
|
|
1623
|
-
/// <summary>
|
|
1624
|
-
/// Compare two Magic Numbers
|
|
1625
|
-
/// </summary>
|
|
1626
|
-
/// <param name = "num1"> The first number
|
|
1627
|
-
/// </param>
|
|
1628
|
-
/// <param name = "pos1"> The position of num1 to compare from
|
|
1629
|
-
/// </param>
|
|
1630
|
-
/// <param name = "num2"> The second number
|
|
1631
|
-
/// </param>
|
|
1632
|
-
/// <param name = "pos3"> The position of num2 to compare from
|
|
1633
|
-
/// </param>
|
|
1634
|
-
/// <returns> 0 if identical, 1 if num1>num2, -1 if num1<num2
|
|
1635
|
-
/// </returns>
|
|
1636
1280
|
static memcmp(num1, pos1, num2, pos2, len) {
|
|
1637
1281
|
let i = 0;
|
|
1638
1282
|
while (i < len && num1._data[pos1] === num2._data[pos2] && pos1 < NUM_TYPE.NUM_SIZE && pos2 < NUM_TYPE.NUM_SIZE) {
|
|
@@ -1647,26 +1291,12 @@ export class NUM_TYPE {
|
|
|
1647
1291
|
else
|
|
1648
1292
|
return 1;
|
|
1649
1293
|
}
|
|
1650
|
-
/// <summary>
|
|
1651
|
-
/// Get a unsigned value from a byte
|
|
1652
|
-
/// </summary>
|
|
1653
|
-
/// <param name = "byteVal"> A signed byte value
|
|
1654
|
-
/// </param>
|
|
1655
|
-
/// <returns> the unsigned value of the byte
|
|
1656
|
-
/// </returns>
|
|
1657
1294
|
static toUByte(byteVal) {
|
|
1658
1295
|
let val = byteVal;
|
|
1659
1296
|
if (byteVal < 0)
|
|
1660
1297
|
val = 256 + byteVal;
|
|
1661
1298
|
return val;
|
|
1662
1299
|
}
|
|
1663
|
-
/// <summary>
|
|
1664
|
-
/// Get a signed byte value from a unsigned val
|
|
1665
|
-
/// </summary>
|
|
1666
|
-
/// <param name = "signedVal"> An unsigned byte value (as an integer)
|
|
1667
|
-
/// </param>
|
|
1668
|
-
/// <returns> the signed value as a byte
|
|
1669
|
-
/// </returns>
|
|
1670
1300
|
static toSByte(unsignedVal) {
|
|
1671
1301
|
let val = 0;
|
|
1672
1302
|
if (unsignedVal > Constants.SByteMaxValue)
|
|
@@ -1675,9 +1305,6 @@ export class NUM_TYPE {
|
|
|
1675
1305
|
val = unsignedVal;
|
|
1676
1306
|
return val;
|
|
1677
1307
|
}
|
|
1678
|
-
/// <summary>
|
|
1679
|
-
/// Get the maximum long number in NUM_TYPE std format
|
|
1680
|
-
/// </summary>
|
|
1681
1308
|
static MaxLONG() {
|
|
1682
1309
|
let nUM_TYPE = new NUM_TYPE();
|
|
1683
1310
|
nUM_TYPE._data[0] = NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 5);
|
|
@@ -1688,9 +1315,6 @@ export class NUM_TYPE {
|
|
|
1688
1315
|
nUM_TYPE._data[5] = 47;
|
|
1689
1316
|
return nUM_TYPE;
|
|
1690
1317
|
}
|
|
1691
|
-
/// <summary>
|
|
1692
|
-
/// Get the minimum long number in NUM_TYPE std format
|
|
1693
|
-
/// </summary>
|
|
1694
1318
|
static MinLONG() {
|
|
1695
1319
|
let num = new NUM_TYPE();
|
|
1696
1320
|
num._data[0] = NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 5);
|
|
@@ -1701,17 +1325,9 @@ export class NUM_TYPE {
|
|
|
1701
1325
|
num._data[5] = 48;
|
|
1702
1326
|
return num;
|
|
1703
1327
|
}
|
|
1704
|
-
/// <summary>
|
|
1705
|
-
/// Get double number from Magic NUM_TYPE
|
|
1706
|
-
/// </summary>
|
|
1707
1328
|
to_double() {
|
|
1708
|
-
return this.storage_mg_2_float(8);
|
|
1329
|
+
return this.storage_mg_2_float(8);
|
|
1709
1330
|
}
|
|
1710
|
-
/// <summary>
|
|
1711
|
-
/// Get double number from Magic NUM_TYPE
|
|
1712
|
-
/// </summary>
|
|
1713
|
-
/// <param name = "len">of byte of needed number - USE 8
|
|
1714
|
-
/// </param>
|
|
1715
1331
|
storage_mg_2_float(len) {
|
|
1716
1332
|
let sign_pos;
|
|
1717
1333
|
let sign;
|
|
@@ -1825,91 +1441,43 @@ export class NUM_TYPE {
|
|
|
1825
1441
|
fltOut = this.sbyteArr_2_Double(cout);
|
|
1826
1442
|
return fltOut;
|
|
1827
1443
|
}
|
|
1828
|
-
/// <summary>
|
|
1829
|
-
/// Bit_Wise mask : Leave last byte in number
|
|
1830
|
-
/// </summary>
|
|
1831
1444
|
LO_CHAR(n) {
|
|
1832
1445
|
return n & 255;
|
|
1833
1446
|
}
|
|
1834
|
-
/// <summary>
|
|
1835
|
-
/// Bit_Wise mask : Leave byte before last
|
|
1836
|
-
/// </summary>
|
|
1837
1447
|
HI_CHAR(n) {
|
|
1838
1448
|
return (n & 65280) >> 8;
|
|
1839
1449
|
}
|
|
1840
|
-
/// <summary>
|
|
1841
|
-
/// Bit_Wise mask : Leave 2 last bytes
|
|
1842
|
-
/// </summary>
|
|
1843
1450
|
LO_SHRT(n) {
|
|
1844
1451
|
return (n & 65535);
|
|
1845
1452
|
}
|
|
1846
|
-
/// <summary>
|
|
1847
|
-
/// Bit_Wise mask
|
|
1848
|
-
/// </summary>
|
|
1849
1453
|
HI_SHRT(n) {
|
|
1850
1454
|
return ((n & -65536) >> 16);
|
|
1851
1455
|
}
|
|
1852
|
-
/// <summary>
|
|
1853
|
-
/// Bit_Wise mask
|
|
1854
|
-
/// </summary>
|
|
1855
1456
|
static MK_SHRT(c1, c2) {
|
|
1856
1457
|
let strInt = (c1 << 8 | c2).toString();
|
|
1857
1458
|
return NNumber.Parse(strInt);
|
|
1858
1459
|
}
|
|
1859
|
-
/// <summary>
|
|
1860
|
-
/// Bit_Wise mask
|
|
1861
|
-
/// </summary>
|
|
1862
1460
|
static MK_LONG(s1, s2) {
|
|
1863
1461
|
let l1 = s1;
|
|
1864
1462
|
let l2 = s2;
|
|
1865
1463
|
let strLng = (l1 << 16 | l2).toString();
|
|
1866
1464
|
return NNumber.Parse(strLng);
|
|
1867
1465
|
}
|
|
1868
|
-
/// <summary>
|
|
1869
|
-
/// get the double from array of bytes
|
|
1870
|
-
/// </summary>
|
|
1871
|
-
/// <param name = "array">of bytes, inner representation of the double
|
|
1872
|
-
/// </param>
|
|
1873
|
-
/// <returns> double
|
|
1874
|
-
/// </returns>
|
|
1875
1466
|
sbyteArr_2_Double(array) {
|
|
1876
1467
|
let dataview = new DataView(array.buffer);
|
|
1877
1468
|
return dataview.getFloat64(0, true);
|
|
1878
1469
|
}
|
|
1879
|
-
/// <summary>
|
|
1880
|
-
/// get byte array for double (8 bytes in Java)
|
|
1881
|
-
/// </summary>
|
|
1882
|
-
/// <param name = "double">to get its byte representation
|
|
1883
|
-
/// </param>
|
|
1884
|
-
/// <returns> byte array
|
|
1885
|
-
/// </returns>
|
|
1886
1470
|
static double_2_sbyteArray(d) {
|
|
1887
1471
|
let buffer = new ArrayBuffer(8);
|
|
1888
1472
|
let dataview = new DataView(buffer);
|
|
1889
1473
|
dataview.setFloat64(0, d, true);
|
|
1890
1474
|
return (new Int8Array(dataview.buffer));
|
|
1891
1475
|
}
|
|
1892
|
-
/// <summary>
|
|
1893
|
-
/// Performing an Power operation on two magic numbers Val1^Val2
|
|
1894
|
-
/// </summary>
|
|
1895
|
-
/// <param name = "num1"> the first number - number
|
|
1896
|
-
/// </param>
|
|
1897
|
-
/// <param name = "num2"> the first number - power
|
|
1898
|
-
/// </param>
|
|
1899
|
-
/// <returns> the result
|
|
1900
|
-
/// </returns>
|
|
1901
1476
|
static eval_op_pwr(num1, num2) {
|
|
1902
1477
|
let d0;
|
|
1903
1478
|
let d1;
|
|
1904
|
-
// null values
|
|
1905
1479
|
if (num1 == null || num2 == null)
|
|
1906
1480
|
return null;
|
|
1907
|
-
// If second operator is an integer (which is so in most of the cases)
|
|
1908
|
-
// and it is not -ve, then calculate power using simple multiplication
|
|
1909
|
-
// There is a problem in from_double as it doesn't return exact
|
|
1910
|
-
// values (for example, passing 1.002441 in num to from_double would
|
|
1911
|
-
// return 1.00244099999999). btw, this problem exists even in Visual studio's
|
|
1912
|
-
// watch window (try typing 1.002441 in Name column of watch window).
|
|
1913
1481
|
if (num2.NUM_IS_LONG() && !num2.num_is_neg()) {
|
|
1914
1482
|
d1 = num2.to_double();
|
|
1915
1483
|
let result = NUM_TYPE.from_double(1);
|
|
@@ -1922,33 +1490,15 @@ export class NUM_TYPE {
|
|
|
1922
1490
|
d1 = num2.to_double();
|
|
1923
1491
|
if (d0 < 0.0 && d1 !== d1)
|
|
1924
1492
|
d0 = 0.0;
|
|
1925
|
-
/* pwr (0.0, 0.0) -> error */
|
|
1926
|
-
/* ----------------------- */
|
|
1927
1493
|
else if (d0 !== 0.0)
|
|
1928
1494
|
d0 = Math.pow(d0, d1);
|
|
1929
1495
|
}
|
|
1930
1496
|
return NUM_TYPE.from_double(d0);
|
|
1931
1497
|
}
|
|
1932
|
-
/// <summary>
|
|
1933
|
-
/// translate double to NUM_TYPE
|
|
1934
|
-
/// </summary>
|
|
1935
|
-
/// <param name = "double">to translate
|
|
1936
|
-
/// </param>
|
|
1937
|
-
/// <returns> NUM_TYPE of the double
|
|
1938
|
-
/// </returns>
|
|
1939
1498
|
static from_double(d0) {
|
|
1940
1499
|
let array = NUM_TYPE.double_2_sbyteArray(d0);
|
|
1941
1500
|
return NUM_TYPE.storage_mg_4_float(8, array);
|
|
1942
1501
|
}
|
|
1943
|
-
/// <summary>
|
|
1944
|
-
/// translate byte array to NUM_TYPE
|
|
1945
|
-
/// </summary>
|
|
1946
|
-
/// <param name = "len">of the needed number(8)
|
|
1947
|
-
/// </param>
|
|
1948
|
-
/// <param name = "byte">array mask
|
|
1949
|
-
/// </param>
|
|
1950
|
-
/// <returns> NUM_TYPE for the needed attributes
|
|
1951
|
-
/// </returns>
|
|
1952
1502
|
static storage_mg_4_float(len, inp) {
|
|
1953
1503
|
let cinp;
|
|
1954
1504
|
let sign;
|
|
@@ -1963,21 +1513,18 @@ export class NUM_TYPE {
|
|
|
1963
1513
|
sign = cinp[len - 1];
|
|
1964
1514
|
if (len === 4) {
|
|
1965
1515
|
exp = ((cinp[2] >> 7) | ((cinp[3] & 0x7F) << 1));
|
|
1966
|
-
bias = 150;
|
|
1516
|
+
bias = 150;
|
|
1967
1517
|
long1 = 0;
|
|
1968
1518
|
long2 = NUM_TYPE.MK_LONG(NUM_TYPE.MK_SHRT(0, cinp[2] | 0x80), NUM_TYPE.MK_SHRT(cinp[1], cinp[0]));
|
|
1969
1519
|
}
|
|
1970
1520
|
else {
|
|
1971
1521
|
exp = (((cinp[7] & 0x7F) << 4) | (cinp[6] >> 4));
|
|
1972
|
-
bias = 1075;
|
|
1522
|
+
bias = 1075;
|
|
1973
1523
|
long1 = NUM_TYPE.MK_LONG(NUM_TYPE.MK_SHRT(0, (cinp[6] & 0x0F) | 0x10), NUM_TYPE.MK_SHRT(cinp[5], cinp[4]));
|
|
1974
1524
|
long2 = NUM_TYPE.MK_LONG(NUM_TYPE.MK_SHRT(cinp[3], cinp[2]), NUM_TYPE.MK_SHRT(cinp[1], cinp[0]));
|
|
1975
1525
|
}
|
|
1976
1526
|
return NUM_TYPE.storage_num_4_fld_flt(long1, long2, 18, sign, bias, exp);
|
|
1977
1527
|
}
|
|
1978
|
-
/// <summary>
|
|
1979
|
-
/// translate byte array to NUM_TYPE (like in Magic Souce code).
|
|
1980
|
-
/// </summary>
|
|
1981
1528
|
static storage_num_4_fld_flt(long1, long2, dec, sign, bias, expr) {
|
|
1982
1529
|
let base_Num16Pwrs = [
|
|
1983
1530
|
new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 1]),
|
|
@@ -2038,9 +1585,6 @@ export class NUM_TYPE {
|
|
|
2038
1585
|
outVal.round(dec);
|
|
2039
1586
|
return outVal;
|
|
2040
1587
|
}
|
|
2041
|
-
/// <summary>
|
|
2042
|
-
/// Mathematical functions implementation
|
|
2043
|
-
/// </summary>
|
|
2044
1588
|
static eval_op_log(val1) {
|
|
2045
1589
|
if (val1 == null)
|
|
2046
1590
|
return null;
|
|
@@ -2132,9 +1676,6 @@ export class NUM_TYPE {
|
|
|
2132
1676
|
}
|
|
2133
1677
|
this._data[0] &= NUM_TYPE.toSByte(~NUM_TYPE.SIGN_MASK);
|
|
2134
1678
|
}
|
|
2135
|
-
/// <summary>
|
|
2136
|
-
/// Randomal Math function
|
|
2137
|
-
/// </summary>
|
|
2138
1679
|
static eval_op_rand(val1) {
|
|
2139
1680
|
if (val1 === null)
|
|
2140
1681
|
return null;
|
|
@@ -2144,7 +1685,7 @@ export class NUM_TYPE {
|
|
|
2144
1685
|
let rand_seed;
|
|
2145
1686
|
let tmp_num = new NUM_TYPE();
|
|
2146
1687
|
if (!rand_initialized) {
|
|
2147
|
-
Randomizer.set_initialized();
|
|
1688
|
+
Randomizer.set_initialized();
|
|
2148
1689
|
rand_mod = new NUM_TYPE();
|
|
2149
1690
|
rand_mul = new NUM_TYPE();
|
|
2150
1691
|
rand_seed = new NUM_TYPE();
|
|
@@ -2175,27 +1716,15 @@ export class NUM_TYPE {
|
|
|
2175
1716
|
rand_seed = NUM_TYPE.mul(rand_seed, rand_mul);
|
|
2176
1717
|
rand_seed = NUM_TYPE.mod(rand_seed, rand_mod);
|
|
2177
1718
|
tmp_num = NUM_TYPE.div(rand_seed, rand_mod);
|
|
2178
|
-
// reset globals variables
|
|
2179
1719
|
Randomizer.set_mod(rand_mod.to_double());
|
|
2180
1720
|
Randomizer.set_mul(rand_mul.to_double());
|
|
2181
1721
|
Randomizer.set_seed(rand_seed.to_double());
|
|
2182
1722
|
return tmp_num;
|
|
2183
1723
|
}
|
|
2184
|
-
/// <summary>
|
|
2185
|
-
/// get a random value to use as the ctl encription key
|
|
2186
|
-
/// </summary>
|
|
2187
1724
|
static hash_rand() {
|
|
2188
1725
|
return ((new Date().getMilliseconds()) ^ Math.random() * 12345678);
|
|
2189
|
-
// let array: number[] = new Array<number>(100);
|
|
2190
|
-
// for (let _ai: number = 0; _ai < array.length; ++_ai)
|
|
2191
|
-
// array[_ai] = 0;
|
|
2192
|
-
// new Random().NextBytes(array);
|
|
2193
|
-
// return <number>(Misc.getSystemMilliseconds() ^ NUM_TYPE.hash_str_new(array));
|
|
2194
1726
|
}
|
|
2195
1727
|
}
|
|
2196
|
-
// --------------------------------------------------------------------------
|
|
2197
|
-
// Constants
|
|
2198
|
-
// --------------------------------------------------------------------------
|
|
2199
1728
|
NUM_TYPE.INT_ZERO_HEX = "00000000";
|
|
2200
1729
|
NUM_TYPE.BYTE_ZERO_BIT = "00000000";
|
|
2201
1730
|
NUM_TYPE.NO_ROOM = -1;
|
|
@@ -2226,4 +1755,4 @@ export class OperData {
|
|
|
2226
1755
|
this.NUM_Exp2_ = 0;
|
|
2227
1756
|
}
|
|
2228
1757
|
}
|
|
2229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTlVNX1RZUEUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9OVU1fVFlQRS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELG9GQUFvRjtBQUNwRixrRkFBa0Y7QUFDbEYsdUZBQXVGO0FBQ3ZGLHVGQUF1RjtBQUN2RixvREFBb0Q7QUFDcEQsdUZBQXVGO0FBQ3ZGLDJCQUEyQjtBQUMzQixjQUFjO0FBQ2QsMEJBQTBCO0FBQzFCLGFBQWE7QUFFYixNQUFNLE9BQU8sUUFBUTtJQWtEbkIsWUFBWSxzQ0FBNEMsRUFBRSxXQUFpQixFQUFFLGVBQXdCO1FBdkJyRyxjQUFTLEdBQVcsR0FBRyxDQUFDO1FBQ3hCLGdCQUFXLEdBQVcsR0FBRyxDQUFDO1FBQ2xCLHlCQUFvQixHQUFXLENBQUMsQ0FBQztRQUNqQyxVQUFLLEdBQWMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBcUIxRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixPQUFPO1NBQ1I7UUFDRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMs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QyxDQUFDLENBQUMsQ0FBQztZQUN4SyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDL0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQzVGLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTthQUMzRDtTQUNJO1FBQ1QsS0FBSyxHQUFHLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDMUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxD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LE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FB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QyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0UsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0UsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEYsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkYsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RixJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzVGLENBQUM7UUFFRixJQUFJLGFBQWEsR0FBZ0I7WUFDL0IsSUFBSSxTQUFTLENBQUMsQ0FB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QUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUN2RixHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUM5RixHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUMxRixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUN4RixDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUN4RixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUM1RixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRztJQUM3RixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRTtJQUNuRixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUM5RixHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUM1RixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRztJQUM1RixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtDQUN6RSxDQUFDO0FBNjZFSixNQUFNLE9BQU8sUUFBUTtJQUFyQjtRQUNFLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixjQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV4Y2VwdGlvbiwgSW50MzIsIE5OdW1iZXIsIE5TdHJpbmcsIE51bWJlclN0eWxlcywgU3RyaW5nQnVpbGRlciB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzLCBQSUNJbnRlcmZhY2UsIFJhbmRvbWl6ZXIsIFN0b3JhZ2VBdHRyaWJ1dGUsIFV0aWxTdHJCeXRlTW9kZSB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBQSUMgfSBmcm9tICcuLi9ndWkvUElDJztcclxuaW1wb3J0IHsgSUVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vZW52L0lFbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IEV2ZW50cyB9IGZyb20gJy4uLy4uL0V2ZW50cyc7XHJcbmltcG9ydCB7IEd1aUVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vR3VpRW52aXJvbm1lbnQnO1xyXG5cclxuLy8vICAgVGhpcyBjbGFzcyBoYW5kbGVzIGEgTWFnaWMgTnVtYmVyIHRoZSBpZGVudGljYWwgd2F5IGl0J3MgcmVwcmVzZW50ZWQgaW4gTWFnaWMuXHJcbi8vLyAgIE1vc3Qgb2YgdGhlIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyB3ZXJlIGNvcGllZCBmcm9tIHRoZSBDKysgc291cmNlcyBvZiBNYWdpYyxcclxuLy8vICAgaW4gb3JkZXIgdG8ga2VlcCB0aGUgZXhhY3QgbG9naWMgdXNlZCBpbiBvcmRlciB0byBpbXBsZW1lbnQgYWxsIHRoZSBmdW5jdGlvbmFsaXR5XHJcbi8vLyAgIGV4cGVjdGVkLCB3aGljaCBtZWFucyB0aGF0IHRoZSBleGFjdCBtZXRob2RzIG5hbWVzIGFuZCB2YXJpYWJsZXMgbmFtZXMgd2hlcmUgdXNlZFxyXG4vLy8gICBpbiBvcmRlciB0byBtYWtlIGZ1dHVyZSBkZWJ1Z2dpbmcgbW9yZSBlYXN5ZXIuXHJcbi8vLyAgIE5vdGljZSBhIGxvbmcgZGF0YSB0eXBlIHRoYXQgaXMgdXNlZCBpbiBNYWdpYyBDKysgc291cmNlcywgaXMgcmVwcmVzZW50ZWQgaW4gamF2YVxyXG4vLy8gICBieSB0aGUgaW50IGRhdGEgdHlwZS5cclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxhdXRob3I+ICBBbG9uIEJhci1OZXNcclxuLy8vIDwvYXV0aG9yPlxyXG5cclxuZXhwb3J0IGNsYXNzIE5VTV9UWVBFIHtcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIENvbnN0YW50c1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgc3RhdGljIElOVF9aRVJPX0hFWDogc3RyaW5nID0gXCIwMDAwMDAwMFwiO1xyXG4gIHN0YXRpYyBCWVRFX1pFUk9fQklUOiBzdHJpbmcgPSBcIjAwMDAwMDAwXCI7XHJcbiAgc3RhdGljIE5PX1JPT006IG51bWJlciA9IC0xO1xyXG4gIHN0YXRpYyBaRVJPX0ZJTEw6IG51bWJlciA9IC0yO1xyXG4gIHN0YXRpYyBOVU1fU0laRTogbnVtYmVyID0gMjA7XHJcbiAgc3RhdGljIE5VTV9MT05HX1RZUEU6IG51bWJlciA9IC0xO1xyXG4gIHN0YXRpYyBFWFBfQklBUzogbnVtYmVyID0gNjQ7XHJcbiAgc3RhdGljIFNJR05fTUFTSzogbnVtYmVyID0gLTEyODtcclxuICBwcml2YXRlIHN0YXRpYyBfcmFuZHRibDogbnVtYmVyW10gPSBbXHJcbiAgICA0MSwgMTc5LCA5LCA0MCwgOTMsIDIyNCwgMjQsIDk0LCAzOSwgMTEwLCA3MCwgODUsIDE5NiwgMTI5LCA4MCwgMTEsIDEyNywgNDIsIDg3LFxyXG4gICAgOCwgMjQzLCA5NiwgMTc0LCAxNTMsIDYxLCAxOTIsIDE3LCAyMCwgMjM1LCA3LCA0NywgMjIyLCA1MywgMjE2LCAxMDEsIDExMiwgNDQsIDEzOSwgMTA5LFxyXG4gICAgMjMzLCAxMDgsIDU3LCAyNDAsIDIyOSwgMTYwLCAyMTksIDI1MSwgMTUsIDIyMSwgMjQ1LCAyMzksIDEwNCwgMTgyLCAzMywgMTM4LCA1OSwgMTY2LCAyNDcsIDE0NixcclxuICAgIDE5MCwgMzEsIDEyNSwgMTg4LCAxMTQsIDk3LCA4NiwgMTU3LCAxMDYsIDMsIDE0MiwgNjYsIDY5LCAxNTIsIDE3NywgMTE2LCA1MCwgMTQ5LCAyNDIsIDE0NCxcclxuICAgIDI4LCAyOSwgOTUsIDM3LCAyLCAxMTcsIDI0NiwgNjUsIDE4MywgMjA2LCAyNDEsIDIzMCwgMTMxLCAxMywgMTQ1LCA2MywgOTgsIDIwMCwgMTc2LCAyMjYsXHJcbiAgICA1LCAxNTgsIDE4OSwgNDksIDE4LCA1NCwgMzAsIDEyMCwgMjI3LCA2OCwgNDgsIDkxLCA4OSwgMjUyLCAyMTAsIDE4NSwgMjAzLCAxNDAsIDE3MSwgMTU1LFxyXG4gICAgNTYsIDE2MiwgMjQ5LCAyMDEsIDEzNCwgMjQ0LCA2NywgMTk3LCAxNDgsIDI0OCwgODIsIDEwMCwgMzQsIDkwLCAyMzYsIDUxLCAxNjcsIDE3OCwgMjA3LCAxOTMsXHJcbiAgICAxNjQsIDIyNSwgMjE4LCAxNDcsIDc5LCA3MSwgMjE3LCAxNTEsIDM4LCAxOTgsIDIxNSwgMjEyLCAxMjMsIDE1NiwgNzYsIDEyMSwgMTEzLCAyNTMsIDU1LCAyNTUsXHJcbiAgICAyMywgMjUsIDIzMSwgMTg3LCAyMSwgNzIsIDIwOSwgMTAzLCA4MSwgMzUsIDEyLCA2LCAxMjIsIDc4LCAzMiwgNjAsIDkyLCAxNCwgMjAyLCA4MyxcclxuICAgIDEyOCwgMTk1LCAxMzUsIDIyMywgMjExLCAxODEsIDg0LCAwLCAxMTksIDE3MywgMTY1LCAyMzQsIDQ1LCAyMDgsIDEwNywgMTM2LCAxOTksIDEyNiwgMTQxLCAxNjMsXHJcbiAgICAxODAsIDk5LCAxNzIsIDIyMCwgNzUsIDExNSwgMjMyLCAxMTEsIDIyOCwgMjA0LCAyMzcsIDczLCAyNTQsIDYyLCAxMDUsIDEzMiwgMjIsIDM2LCAxMTgsIDE0MyxcclxuICAgIDE2MSwgMTMzLCAxNjksIDEwLCA1MiwgMTg2LCAxODQsIDE3MCwgNzcsIDIwNSwgMTM3LCAxMjQsIDIzOCwgMTYsIDE1OSwgMjUwLCAxOTEsIDc0LCAyNywgMTMwLFxyXG4gICAgNCwgMTk0LCAxLCA0NiwgNTgsIDEwMiwgNjQsIDE2OCwgMTUwLCA4OCwgMjE0LCAxNzUsIDIxMywgMTU0LCAyNiwgNDMsIDE5XHJcbiAgXTtcclxuICBDT01NQUNIQVI6IHN0cmluZyA9ICcsJztcclxuICBERUNJTUFMQ0hBUjogc3RyaW5nID0gJy4nO1xyXG4gIHByaXZhdGUgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfZGF0YTogSW50OEFycmF5ID0gbmV3IEludDhBcnJheShOVU1fVFlQRS5OVU1fU0laRSk7XHJcblxyXG4gIHNldCBEYXRhKHZhbHVlOiBJbnQ4QXJyYXkpIHtcclxuICAgIHRoaXMuX2RhdGEgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBEYXRhKCk6IEludDhBcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gQ29uc3RydWN0b3IgbGlzdFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNvbnN0cnVjdG9yKCk7XHJcbiAgY29uc3RydWN0b3IocmVjb3JkSGV4U3RyOiBzdHJpbmcpO1xyXG4gIGNvbnN0cnVjdG9yKGJ5dGVWYWw6IEludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3RvcihieXRlVmFsOiBJbnQ4QXJyYXkpO1xyXG4gIGNvbnN0cnVjdG9yKGRlY1N0cjogc3RyaW5nLCBwaWM6IFBJQywgY29tcElkeDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3RvcihudW1Gcm9tOiBOVU1fVFlQRSk7XHJcbiAgY29uc3RydWN0b3IocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20/OiBhbnksIG9mZnNldE9yUGljPzogYW55LCBsZW5ndGhPckNvbXBJZHg/OiBudW1iZXIpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20gPT09IG51bGwgfHwgcmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20uY29uc3RydWN0b3IgPT09IFN0cmluZykpIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tID09PSBudWxsIHx8IHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tIGluc3RhbmNlb2YgSW50OEFycmF5KSAmJiAob2Zmc2V0T3JQaWMgPT09IG51bGwgfHwgb2Zmc2V0T3JQaWMuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKGxlbmd0aE9yQ29tcElkeCA9PT0gbnVsbCB8fCBsZW5ndGhPckNvbXBJZHguY29uc3RydWN0b3IgPT09IE51bWJlcikpIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8yKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tLCBvZmZzZXRPclBpYywgbGVuZ3RoT3JDb21wSWR4KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tID09PSBudWxsIHx8IHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tIGluc3RhbmNlb2YgSW50OEFycmF5KSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzMocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20gPT09IG51bGwgfHwgcmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20uY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKG9mZnNldE9yUGljID09PSBudWxsIHx8IG9mZnNldE9yUGljIGluc3RhbmNlb2YgUElDKSAmJiAobGVuZ3RoT3JDb21wSWR4ID09PSBudWxsIHx8IGxlbmd0aE9yQ29tcElkeC5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzQocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20sIG9mZnNldE9yUGljLCBsZW5ndGhPckNvbXBJZHgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzUocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIERlZmF1bHQgY29uc3RydWN0b3IuIFNldCB2YWx1ZSB0byAwXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRDb25zdCgpO1xyXG4gICAgdGhpcy5OVU1fWkVSTygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENyZWF0ZXMgYSBNYWdpYyBOdW1iZXIgZnJvbSBhIHN0cmluZyBnb3QgZnJvbSB0aGUgWE1MIHJlY29yZCB2YWx1ZS4gVGhlXHJcbiAgLy8vICAgU3RyaW5nIGlzIDQwIGNoYXJhY3RlcnMgbG9uZyBpbiBhbiBoZXhhIHJlcHJlc2VudGF0aW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZWNvcmRIZXhTdHJcIj4gIE1hZ2ljIG51bWJlciBpbiBoZXggZm9ybWF0LCA0MCBjaGFyYWN0ZXJzIGxvbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEocmVjb3JkSGV4U3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHR3b0RpZ2l0czogc3RyaW5nO1xyXG4gICAgdGhpcy5pbml0Q29uc3QoKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgdHdvRGlnaXRzID0gcmVjb3JkSGV4U3RyLnN1YnN0ciggaSAqIDIsIDIpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFbaV0gPSBOVU1fVFlQRS50b1NCeXRlKE5OdW1iZXIuUGFyc2UodHdvRGlnaXRzLCBOdW1iZXJTdHlsZXMuSGV4TnVtYmVyKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleCkge1xyXG4gICAgICBFdmVudHMuV3JpdGVXYXJuaW5nVG9Mb2coZXgpO1xyXG5cclxuICAgICAgdGhpcy5OVU1fWkVSTygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENyZWF0ZXMgYSBNYWdpYyBOdW1iZXIgZnJvbSBhcnJheSBvZiBieXRlcy4gVXNlZCBmcm9tIHRoZSBleHByZXNzaW9uIGV2YWx1YXRvclxyXG4gIC8vLyAgIHdoZW4gYSBNYWdpYyBOdW1iZXIgdmFsdWUgYXBlYXJzIHdpdGhpbiBhbiBleHByZXNzaW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJieXRlVmFsXCI+ICBBcnJheSBvZiBieXRlcyByZXByZXNlbnRpbmcgYSBNYWdpYyBOdW1iZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib2Zmc2V0XCI+ICAgSW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlbmd0aFwiPiAgIE51bWJlciBvZiBieXRlcyB0byB1c2UgPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzIoYnl0ZVZhbDogSW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIHRoaXMuX2RhdGFbaV0gPSBieXRlVmFsW2kgKyBvZmZzZXRdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENyZWF0ZXMgYSBNYWdpYyBOdW1iZXIgZnJvbSBhcnJheSBvZiBieXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8zKGJ5dGVWYWw6IEludDhBcnJheSk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8yKGJ5dGVWYWwsIDAsIGJ5dGVWYWwubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDcmVhdGVzIGEgTWFnaWMgTnVtYmVyIGZyb20gYSBkZWNpbWFsIGZvciBudW1iZXIgYW5kIGl0cyBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlY1N0clwiPiAgVGhlIG51bWJlciBpbiBhIHN0cmluZyBkZWNpbWFsIGZvcm1hdCA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgICBUaGUgcGljdHVyZSBmb3JtYXQgdG8gYmUgdXNlZCA8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfNChkZWNTdHI6IHN0cmluZywgcGljOiBQSUMsIGNvbXBJZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICB0aGlzLmZyb21fYShkZWNTdHIsIHBpYywgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ3JlYXRlcyBhIE1hZ2ljIE51bWJlciBmcm9tIGEgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bUZyb21cIj4gIFRoZSBzb3VyY2UgTWFnaWMgTnVtYmVyIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl81KG51bUZyb206IE5VTV9UWVBFKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRDb25zdCgpO1xyXG4gICAgdGhpcy5fZGF0YSA9IG5ldyBJbnQ4QXJyYXkobnVtRnJvbS5fZGF0YS5sZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCB0aGlzLl9kYXRhLmxlbmd0aDsgKytfYWkpXHJcbiAgICAgIHRoaXMuX2RhdGFbX2FpXSA9IG51bUZyb20uX2RhdGFbX2FpXTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRlY2ltYWwgc3RyaW5nIGZyb20gdGhlIG51bWJlciBzdG9yZWQgaW4gYSBNYWdpYyBOdW1iZXIuXHJcbiAgLy8vICAgVGhlIHN0cmluZyBpcyBidWlsZCBmcm9tIHRoZSBwaWN0dXJlIHByb3ZpZGVkIGFzIGEgcGFyYW1ldGVyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj5UaGUgcGljdHVyZSB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoZSBkaXNwbGF5IHN0cmluZ1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gVGhlIGRlY2ltYWwgZm9ybSBvZiB0aGUgTWFnaWMgTnVtYmVyIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICB0b0Rpc3BsYXlWYWx1ZShwaWM6IFBJQyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50b19hKHBpYyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5pdCBjb25zdGFudHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGluaXRDb25zdCgpOiB2b2lkIHtcclxuICAgIGxldCBlbnY6IElFbnZpcm9ubWVudCA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50O1xyXG4gICAgdGhpcy5ERUNJTUFMQ0hBUiA9IGVudi5HZXREZWNpbWFsKCk7XHJcbiAgICB0aGlzLkNPTU1BQ0hBUiA9IGVudi5HZXRUaG91c2FuZHMoKTtcclxuICAgIHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBlbnYuR2V0U2lnbmlmaWNhbnROdW1TaXplKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYW4gaGV4YWRlY2ltYWwgc3RyaW5nIGZyb20gdGhlIE1hZ2ljIE51bWJlciBmb3IgdGhlIGRhdGEgcmVjb3JkIGluXHJcbiAgLy8vICAgdGhlIFhNTCB0YWcgKHRvIGJlIHNlbnQgdG8gdGhlIE1hZ2ljIFNlcnZlcikuIFRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmdcclxuICAvLy8gICB3aWxsIGFsbHdheXMgYmUgdHdvIHRpbWVzIHRoZSBsZW5ndGggb2YgdGhlIE1hZ2ljIE51bWJlcnMgKGluIGJ5dGVzKVxyXG4gIC8vLyAgIGJlY2F1c2UgZXZlcnkgYnl0ZSBpbiB0aGUgTWFnaWMgTnVtYmVyIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0d29cclxuICAvLy8gICBjaGFyYWN0ZXIgaGV4YWRlY2ltYWwgc3RyaW5nLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgaGV4YWRlY2ltYWwgc3RyaW5nXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICB0b1hNTHJlY29yZCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhleFN0cjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgKiAyKTtcclxuICAgIGxldCBudW06IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0gPSA1O1xyXG4gICAgZWxzZVxyXG4gICAgICBudW0gPSB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFOyBpKyspIHtcclxuICAgICAgaWYgKGkgPCBudW0pXHJcbiAgICAgICAgaGV4U3RyLkFwcGVuZCgoJzAnICsgKHRoaXMuX2RhdGFbaV0gJiAweEZGKS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBoZXhTdHIuQXBwZW5kKFwiMDBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhleFN0ci5Ub1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJhbnNmb3JtaW5nIGEgZGVjaW1hbCBzdHJpbmcgbnVtYmVyIHRvIGEgTWFnaWMgTnVtYmVyIHVzaW5nIHRoZSBmb3JtYXRcclxuICAvLy8gICBwcm92aWRlZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiQWxwaGFcIj4gIFRoZSBudW1iZXIgaXMgZGVjaW1hbCBzdHJpbmcgZm9ybVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgIFRoZSBwaWN0dXJlIGZvbWF0IHRvIHVzZSBmb3IgdGhlIGV4dHJhY3RpbmcgdGhlIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgZnJvbV9hKEFscGhhOiBzdHJpbmcsIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgaWR4OiBudW1iZXI7XHJcbiAgICBsZXQgZGVjOiBib29sZWFuO1xyXG4gICAgbGV0IGRlY3M6IG51bWJlcjtcclxuICAgIGxldCBkaWdpdDogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IG5vX3BpYzogYm9vbGVhbjtcclxuICAgIGxldCBQb3M6IG51bWJlcjtcclxuICAgIGxldCBTVHlwZTogYm9vbGVhbjtcclxuICAgIGxldCBTUGFydDogYm9vbGVhbjtcclxuICAgIGxldCBTaWduZWQ6IG51bWJlcjtcclxuICAgIGxldCBidWY6IHN0cmluZztcclxuICAgIGxldCBtYXNrOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IGM6IHN0cmluZztcclxuICAgIGxldCBOZ3R2UHJtdDogYm9vbGVhbjtcclxuICAgIGxldCBTY2FuOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IFBidWY6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgaXNfbmVnYXRpdmU6IGJvb2xlYW47XHJcbiAgICBsZXQgbmVnU3RyOiBzdHJpbmc7XHJcbiAgICBsZXQgbmVnUHJlZjogc3RyaW5nO1xyXG4gICAgbGV0IHBvc1ByZWY6IHN0cmluZztcclxuICAgIGxldCBuZWdTdWZmOiBzdHJpbmc7XHJcbiAgICBsZXQgcG9zU3VmZjogc3RyaW5nO1xyXG4gICAgbGV0IHNwZWNpYWxWYWxOZXdQb2xpY3k6IGJvb2xlYW4gPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTcGVjaWFsVmFsTmV3UG9saWN5KCk7XHJcblxyXG4gICAgLy8gUGFyc2UgdGhlIHBpY3R1cmUgZm9ybWF0XHJcbiAgICBub19waWMgPSAocGljID09IG51bGwpO1xyXG4gICAgbGVuID0gMDtcclxuICAgIFNUeXBlID0gZmFsc2U7ICAvLyBQSUNfUFNUViA6IHRydWUsIFBJQ19OR1RWOiBmYWxzZVxyXG4gICAgU1BhcnQgPSBmYWxzZTsgIC8vIFBJQ19QUkVGIDogdHJ1ZSwgUElDX1NVRiA6IGZhbHNlXHJcblxyXG4gICAgaWYgKCFub19waWMpIHtcclxuICAgICAgbWFzayA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICAgIGlmICghc3BlY2lhbFZhbE5ld1BvbGljeSlcclxuICAgICAgICBpZiAoQWxwaGEubGVuZ3RoID4gcGljLmdldE1hc2tTaXplKCkpXHJcbiAgICAgICAgICBBbHBoYSA9IEFscGhhLnN1YnN0cigwLCBwaWMuZ2V0TWFza1NpemUoKSk7XHJcbiAgICAgIE5ndHZQcm10ID0gcGljLmlzTmVnYXRpdmUoKTtcclxuICAgICAgaWYgKE5ndHZQcm10KSB7XHJcbiAgICAgICAgbmVnUHJlZiA9IHBpYy5nZXROZWdQcmVmXygpO1xyXG4gICAgICAgIHBvc1ByZWYgPSBwaWMuZ2V0UG9zUHJlZl8oKTtcclxuICAgICAgICBuZWdTdWZmID0gcGljLmdldE5lZ1N1ZmZfKCk7XHJcbiAgICAgICAgcG9zU3VmZiA9IHBpYy5nZXRQb3NTdWZmXygpO1xyXG5cclxuICAgICAgICBpZiAobmVnUHJlZi5sZW5ndGggPT09IHBvc1ByZWYubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAobmVnUHJlZi5sZW5ndGggPT09IDAgfHwgbmVnUHJlZiA9PT0gcG9zUHJlZilcclxuICAgICAgICAgICAgU1BhcnQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIFBJQ19TVUZcclxuICAgICAgICAgIGVsc2UgU1BhcnQgPSB0cnVlOyAvLyBQSUNfUFJFRlxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIFNQYXJ0ID0gdHJ1ZTsgLy8gUElDX1BSRUZcclxuXHJcbiAgICAgICAgaWYgKFNQYXJ0KVxyXG4gICAgICAgICAgbmVnU3RyID0gbmVnUHJlZjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBuZWdTdHIgPSBuZWdTdWZmO1xyXG5cclxuICAgICAgICBpZiAobmVnU3RyLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgIFNUeXBlID0gdHJ1ZTtcclxuICAgICAgICAvLyBQSUNfUE9TSVRJVkVcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBTVHlwZSA9IGZhbHNlOyAvLyBQSUNfTkVHQVRJVkVcclxuXHJcbiAgICAgICAgaWYgKFNUeXBlKVxyXG4gICAgICAgICAgU2NhbiA9IChTUGFydCA/IHBvc1ByZWYgOiBwb3NTdWZmKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBTY2FuID0gKFNQYXJ0ID8gbmVnUHJlZiA6IG5lZ1N1ZmYpO1xyXG4gICAgICAgIGxlbiA9IFNjYW4ubGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcGljID0gbmV3IFBJQyhcIlwiLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIGNvbXBJZHgpO1xyXG4gICAgICBOZ3R2UHJtdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExvY2FsaXplIHZhcmlhYmxlcyBhbmQgZmxhZ3NcclxuICAgIGRlYyA9IGZhbHNlO1xyXG4gICAgZGVjcyA9IDA7XHJcbiAgICBkaWdpdCA9IDA7XHJcbiAgICBTaWduZWQgPSAwO1xyXG5cclxuICAgIC8vIFNwZWNpYWxWYWxOZXdQb2xpY3kgPSBZXHJcbiAgICAvLyBMb29wIG9uIGlucHV0IHN0cmluZyBvZiBudW1iZXJzIGFuZCBtYXRjaCB0aGVtIGFnYWluc3QgdGhlIHBpY3R1cmUgbWFza1xyXG4gICAgLy8gSXQgbWF5IGhhcHBlbiB0aGF0IHRoZSBwaWN0dXJlIG1hc2sgaXMgc21hbGxlciB0aGFuIHJlY2VpdmVkIG51bWJlciBzdHJpbmdcclxuICAgIC8vIEZvciBleGFtcGxlLCBpZiB0aGUgc3RyaW5nIHJlY2VpdmVkIGlzICcxMjM0LjU2JyB3aGVyZWFzIHBpY3R1cmUgaXMgJzIuMSdcclxuICAgIC8vIHRoZW4gdGhlIGNoYXJhY3RlcnMgdG8gcGFyc2UgZnJvbSB0aGUgaW5wdXQgc3RyaW5nIGlzICcxMjM0LjUnIGkuZS4gIyBkaWdpdHNcclxuICAgIC8vIHNwZWNpZmllZCBpbiBwaWN0dXJlIGJlZm9yZSB0aGUgZGVjaW1hbCBzaG91bGQgYmUgaWdub3JlZC4gUGFyc2luZyBzaG91bGRcclxuICAgIC8vIGNvbnRpbnVlIHRpbGwgIyBvZiBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCBpbiBwaWN0dXJlIG1hdGNoIHdpdGggdGhvc2UgaW5cclxuICAgIC8vIHRoZSBpbnB1dCBzdHJpbmcgb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nXHJcbiAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IEFscGhhLmxlbmd0aDsgKSB7XHJcbiAgICAgIC8vIEFzIG1lbnRpb25lZCBhYm92ZSwgY29udGludWUgcGFyc2luZyBldmVuIGlmIG1hc2sgbGVuZ3RoIGFzIGV4aGF1c3RlZCBieSBjaGVja2luZ1xyXG4gICAgICAvLyBpZHggPj0gcGljLm1hc2tfc2l6ZS4gSG93ZXZlciwgYXMgbG9uZyBhcyBtYXNrIGxlbmd0aCBpcyB2YWxpZCwgbWF0Y2ggdGhlIG1hc2tcclxuICAgICAgaWYgKG5vX3BpYyB8fCAoc3BlY2lhbFZhbE5ld1BvbGljeSAmJiBpZHggPj0gcGljLmdldE1hc2tTaXplKCkpICB8fCBtYXNrW2lkeF0gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKSkge1xyXG4gICAgICAgIGMgPSBBbHBoYVtpZHhdO1xyXG4gICAgICAgIGlmIChzcGVjaWFsVmFsTmV3UG9saWN5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIC8vIHN0b3AgcGFyc2luZyBpZiAjIG9mIGRlY3MgYWxyZWFkeSByZWFjaGVkXHJcbiAgICAgICAgICBpZiAoZGVjICYmIGRlY3MgPT09IHBpYy5nZXREZWMoKSlcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gRmluYWxseSwgc3RvcCBwYXJzaW5nIG9uIG1hdGNoaW5nIHJlcXVpcmVkIG5vLiBvZiBkZWNpbWFsIGRpZ2l0c1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGMpKSB7XHJcbiAgICAgICAgICBkaWdpdCsrO1xyXG4gICAgICAgICAgUGJ1ZiArPSBjO1xyXG4gICAgICAgICAgaWYgKGRlYylcclxuICAgICAgICAgICAgZGVjcysrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjID09PSB0aGlzLkRFQ0lNQUxDSEFSKSB7XHJcbiAgICAgICAgICBQYnVmICs9IHRoaXMuREVDSU1BTENIQVI7XHJcbiAgICAgICAgICBkZWMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjICE9PSB0aGlzLkNPTU1BQ0hBUikge1xyXG4gICAgICAgICAgaWYgKE5ndHZQcm10ICYmIFNpZ25lZCA9PT0gMCkge1xyXG4gICAgICAgICAgICBTaWduZWQgPSAxO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSBpZHgsIFBvcyA9IDA7IGkgPD0gQWxwaGEubGVuZ3RoICYmIFBvcyA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5vX3BpYyB8fCBtYXNrW2ldID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTikpIHtcclxuICAgICAgICAgICAgICAgIGMgPSBBbHBoYVtpXTtcclxuICAgICAgICAgICAgICAgIGlmIChjICE9PSBTY2FuW1Bvc10pIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICctJyAmJiAhU1R5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnKycgJiYgU1R5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIFNpZ25lZCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFBvcysrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoUG9zID4gMCAmJiBQb3MgPCBsZW4pXHJcbiAgICAgICAgICAgICAgU2lnbmVkID0gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gUUNSICMgMzA5NjIzIDogSWYgcHJlZml4L3N1ZmZpeCBzdHJpbmdzIGNvbnRhaW5zIGRpZ2l0cyBpbiBpdCwgaXQgaXMgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIGRhdGEuXHJcbiAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGl0IHNraXAgdGhlIHByZWZpeCAvIHN1ZmZpeCBzdHJpbmdzIHdoaWxlIGV4dHJhY3RpbmcgdGhlIGRhdGEgcGFydCB0byBidWlsZCBOVU1fVFlQRS5cclxuICAgICAgICAgICAgaWYgKGlkeCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChwaWMuZ2V0TmVnUHJlZl8oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgaWYgKEFscGhhLnN0YXJ0c1dpdGgocGljLmdldE5lZ1ByZWZfKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlkeCArPSBwaWMuZ2V0TmVnUHJlZl8oKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChwaWMuZ2V0UG9zUHJlZl8oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgaWYgKEFscGhhLnN0YXJ0c1dpdGgocGljLmdldFBvc1ByZWZfKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlkeCArPSBwaWMuZ2V0UG9zUHJlZl8oKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChwaWMuZ2V0TmVnU3VmZl8oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgaWYgKEFscGhhLmVuZHNXaXRoKHBpYy5nZXROZWdTdWZmXygpKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZHggKz0gcGljLmdldE5lZ1N1ZmZfKCkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocGljLmdldFBvc1N1ZmZfKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIGlmIChBbHBoYS5lbmRzV2l0aChwaWMuZ2V0UG9zU3VmZl8oKSkpIHtcclxuICAgICAgICAgICAgICAgICAgaWR4ICs9IHBpYy5nZXRQb3NTdWZmXygpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWR4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFNpZ25lZCA9PT0gMCAmJiBTVHlwZSlcclxuICAgICAgU2lnbmVkID0gMTtcclxuXHJcbiAgICAvLyBSZXR1cm4gcmVzdWx0IG9mIGRlY29kZWQgZGlnaXRzXHJcbiAgICBpc19uZWdhdGl2ZSA9IChTaWduZWQgPT09IDEgJiYgIVNUeXBlKSB8fCAoU2lnbmVkICE9PSAxICYmIFNUeXBlKTtcclxuICAgIGlmIChkZWNzID4gMCB8fCBkaWdpdCA+IDkpIHtcclxuICAgICAgYnVmID0gKGlzX25lZ2F0aXZlID8gJy0nIDogJyAnKSArIFBidWY7XHJcbiAgICAgIHRoaXMubnVtXzRfYV9zdGQoYnVmKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5OVU1fNF9MT05HKChpc19uZWdhdGl2ZSA/IC0xIDogMSkgKiB0aGlzLmFfMl9sb25nKFBidWYpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBFeHRyYWN0aW5nIGEgbm9uIGxvbmcgbnVtYmVyIGZyb20gYSBkZWNpbWFsIHN0cmluZyBudW1iZXIgKG51bWJlcnMgd2l0aFxyXG4gIC8vLyAgIGRlY2ltYWwgcG9pbnQsIGV0Yy4uLilcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+ICBUaGUgZGVjaW1hbCBzdHJpbmcgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgbnVtXzRfYV9zdGQoc3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBkaWdzdHI6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgZGlnbGVuOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHdob2xlczogbnVtYmVyID0gMDtcclxuICAgIGxldCBkZWNzOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGlzRGVjOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaXNtaW51czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG5cclxuICAgIGZvciAocG9zID0gMDsgcG9zIDwgc3RyLmxlbmd0aDsgcG9zKyspIHtcclxuICAgICAgbGV0IGM6IHN0cmluZyA9IHN0ci5jaGFyQXQocG9zKTtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGMpKSB7XHJcbiAgICAgICAgaWYgKGRpZ2xlbiA+IDAgfHwgYyAhPT0gJzAnKSB7XHJcbiAgICAgICAgICBkaWdsZW4rKztcclxuICAgICAgICAgIGRpZ3N0ciA9IGRpZ3N0ciArIGM7XHJcbiAgICAgICAgICBpZiAoIWlzRGVjKVxyXG4gICAgICAgICAgICB3aG9sZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNEZWMpXHJcbiAgICAgICAgICBkZWNzID0gZGVjcyArIDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYyA9PT0gdGhpcy5ERUNJTUFMQ0hBUilcclxuICAgICAgICBpc0RlYyA9IHRydWU7XHJcbiAgICAgIGVsc2UgaWYgKGMgPT09ICctJylcclxuICAgICAgICBpc21pbnVzID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLk5VTV9aRVJPKCk7XHJcbiAgICBpZiAoZGlnbGVuID09PSAwKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKCgod2hvbGVzICsgZGVjcykgJiAxKSA+IDApIHtcclxuICAgICAgdGhpcy5fZGF0YVsxXSA9IE5VTV9UWVBFLnRvU0J5dGUoZGlnc3RyLmNoYXJDb2RlQXQoMCkgLSAnMCcuY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgIHBvcyA9IDE7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHBvcyA9IDA7XHJcblxyXG4gICAgbGV0IG51bXB0cjogbnVtYmVyID0gMSArIHBvcztcclxuICAgIGRpZ2xlbiA9IE1hdGgubWluKGRpZ2xlbiwgKHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSAqIDIgLSBwb3MpO1xyXG4gICAgd2hpbGUgKHBvcyA8IGRpZ2xlbikge1xyXG4gICAgICBsZXQgZGlnaXQxOiBudW1iZXIgPSBOVU1fVFlQRS50b1NCeXRlKChkaWdzdHIuY2hhckNvZGVBdChwb3MrKykgLSAnMCcuY2hhckNvZGVBdCgwKSkpO1xyXG4gICAgICBsZXQgZGlnaXQyOiBudW1iZXIgPSBOVU1fVFlQRS50b1NCeXRlKCgocG9zIDwgZGlnbGVuKVxyXG4gICAgICAgID8gKGRpZ3N0ci5jaGFyQ29kZUF0KHBvcysrKSAtICcwJy5jaGFyQ29kZUF0KDApKVxyXG4gICAgICAgIDogJ1xcMCcuY2hhckNvZGVBdCgwKSkpO1xyXG4gICAgICB0aGlzLl9kYXRhW251bXB0cisrXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaWdpdDEpICogMTAgKyBOVU1fVFlQRS50b1VCeXRlKGRpZ2l0MikpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aG9sZXMgPiAwKVxyXG4gICAgICB0aGlzLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZSg8bnVtYmVyPk5VTV9UWVBFLkVYUF9CSUFTICsgKCh3aG9sZXMgKyAxKSA+PiAxKSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKDxudW1iZXI+TlVNX1RZUEUuRVhQX0JJQVMgLSAoZGVjcyA+PiAxKSk7XHJcblxyXG4gICAgaWYgKGlzbWludXMpXHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gfD0gTlVNX1RZUEUuU0lHTl9NQVNLO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zbGF0aW5nIGEgbG9uZyB2YWx1ZSBpbnRvIGFuIGludGVybmFsIE1hZ2ljIE51bWJlciBmb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxvbmdWYWxcIj4gIFRoZSBudW1iZXIgdG8gYmUga2VwdFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIE5VTV80X0xPTkcobG9uZ1ZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgaGV4U3RyOiBzdHJpbmc7XHJcbiAgICB0aGlzLk5VTV9aRVJPKCk7XHJcblxyXG4gICAgaWYgKGxvbmdWYWwgIT09IDApIHtcclxuICAgICAgaWYgKGxvbmdWYWwgPCAwKVxyXG4gICAgICAgIGxvbmdWYWwgPSAoMHhGRkZGRkZGRiArIGxvbmdWYWwgKyAxKTtcclxuXHJcbiAgICAgIGhleFN0ciA9IGxvbmdWYWwudG9TdHJpbmcoMTYpO1xyXG4gICAgICBpZiAobG9uZ1ZhbCA+IDApXHJcbiAgICAgICAgaGV4U3RyID0gTlVNX1RZUEUuSU5UX1pFUk9fSEVYLnN1YnN0cihoZXhTdHIubGVuZ3RoKSArIGhleFN0cjtcclxuXHJcbiAgICAgIHRoaXMuX2RhdGFbMV0gPSBOVU1fVFlQRS50b1NCeXRlKHBhcnNlSW50KGhleFN0ci5zdWJzdHIoNiwgKDgpIC0gKDYpKSwgMTYpKTtcclxuICAgICAgdGhpcy5fZGF0YVsyXSA9IE5VTV9UWVBFLnRvU0J5dGUocGFyc2VJbnQoaGV4U3RyLnN1YnN0cig0LCAoNikgLSAoNCkpLCAxNikpO1xyXG4gICAgICB0aGlzLl9kYXRhWzNdID0gTlVNX1RZUEUudG9TQnl0ZShwYXJzZUludChoZXhTdHIuc3Vic3RyKDIsICg0KSAtICgyKSksIDE2KSk7XHJcbiAgICAgIHRoaXMuX2RhdGFbNF0gPSBOVU1fVFlQRS50b1NCeXRlKHBhcnNlSW50KGhleFN0ci5zdWJzdHIoMCwgKDIpIC0gKDApKSwgMTYpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXR0aW5nIGEgbG9uZyB2YWx1ZSBmcm9tIGEgZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbG9uZyB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbG9uZyB2YWx1ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxvbmcgbnVtYmVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBhXzJfbG9uZyhzdHI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgbjogbnVtYmVyID0gMDtcclxuICAgIGZvciAobGV0IHBvczogbnVtYmVyID0gMDsgcG9zIDwgc3RyLmxlbmd0aDsgcG9zKyspIHtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHN0ci5jaGFyQXQocG9zKSkpIHtcclxuICAgICAgICBuID0gbiAqIDEwO1xyXG4gICAgICAgIG4gPSBuICsgc3RyLmNoYXJDb2RlQXQocG9zKSAtICcwJy5jaGFyQ29kZUF0KDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBBY3RpdmF0aW5nIHRoZSBwcm9jZXNzIG9mIGJ1aWxkaW5nIGEgZGVjaW1hbCBzdHJpbmcgYnkgdGhlIGZvcm1hdCBpbmRpY2F0ZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+YSBudW1lcmljIHBpY3R1cmUgdG8gdXNlIGZvciBidWlsZGluZyB0aGUgZGlzcGxheSBzdHJpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICB0b19hKHBpYzogUElDKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRvX2FfcGljKHBpYyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybXMgdGhlIHByb2Nlc3Mgb2YgYnVpbGRpbmcgYSBkZWNpbWFsIHN0cmluZyBieSB0aGUgcGljdHVyZSBwcm92aWRlZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj4gIHRoZSBwaWN0dXJlIGNsYXNzIGhvbGRpbmcgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIGZvcm0gb2YgdGhlIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIHRvX2FfcGljKHBpYzogUElDKTogc3RyaW5nIHtcclxuICAgIGxldCBidWY6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oMTI4KTtcclxuICAgIGxldCByZW1haW5zOiBudW1iZXI7XHJcbiAgICBsZXQgc2lnbl9uOiBib29sZWFuO1xyXG4gICAgbGV0IHByZWZfbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgc3VmZl9sZW46IG51bWJlcjtcclxuICAgIGxldCBwcmVmX3N0cjogU3RyaW5nO1xyXG4gICAgbGV0IHN1ZmZfc3RyOiBTdHJpbmc7XHJcbiAgICBsZXQgc3RyX3BvczogbnVtYmVyO1xyXG4gICAgbGV0IHN0cl9sZW46IG51bWJlcjtcclxuICAgIGxldCBvdXRfcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgb3V0X2J1Zjogc3RyaW5nW107XHJcbiAgICBsZXQgdG1wX291dF9idWY6IHN0cmluZ1tdO1xyXG4gICAgbGV0IHBhZDogc3RyaW5nO1xyXG4gICAgbGV0IGxlZnQ6IGJvb2xlYW47XHJcbiAgICBsZXQgcGZpbGw6IGJvb2xlYW47XHJcbiAgICBsZXQgbWFza19jaGFyczogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IHJlczogc3RyaW5nW107XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IGlzT3V0OiBib29sZWFuO1xyXG4gICAgbGV0IG91dFZhbDogc3RyaW5nW107XHJcblxyXG4gICAgbGVuID0gcGljLmdldE1hc2tTaXplKCk7XHJcblxyXG4gICAgLy8gU2V0IHNpZ25zIG9mIG51bWJlclxyXG4gICAgc2lnbl9uID0gKHBpYy5pc05lZ2F0aXZlKCkgJiYgdGhpcy5udW1faXNfbmVnKCkgPyBmYWxzZSA6IHRydWUpO1xyXG5cclxuICAgIHByZWZfbGVuID0gKHNpZ25fbiA/IHBpYy5nZXRQb3NQcmVmXygpLmxlbmd0aCA6IHBpYy5nZXROZWdQcmVmXygpLmxlbmd0aCk7IC8vIHBpY19zaWduW1BJQ19QUkVGXS5sZW47XHJcbiAgICBzdWZmX2xlbiA9IChzaWduX24gPyBwaWMuZ2V0UG9zU3VmZl8oKS5sZW5ndGggOiBwaWMuZ2V0TmVnU3VmZl8oKS5sZW5ndGgpOyAvLyBwaWNfc2lnbltQSUNfU1VGRl0ubGVuO1xyXG5cclxuICAgIGxlZnQgPSBwaWMuaXNMZWZ0KCk7XHJcbiAgICBwZmlsbCA9IHBpYy5wYWRGaWxsKCk7XHJcbiAgICBtYXNrX2NoYXJzID0gcGljLmdldE1hc2tDaGFycygpO1xyXG4gICAgb3V0VmFsID0gTlN0cmluZy5Ub0NoYXJBcnJheShwaWMuZ2V0TWFzaygpLnN1YnN0cigwLCBsZW4pKTtcclxuICAgIG91dF9idWYgPSAoKGxlZnQgfHwgKG1hc2tfY2hhcnMgPiAwKSkgPyBidWYgOiBvdXRWYWwpO1xyXG4gICAgaWYgKGxlZnQpXHJcbiAgICB7XHJcbiAgICAgIGZvciAoaT0wOyBpIDwgb3V0X2J1Zi5sZW5ndGg7IGkrKyApXHJcbiAgICAgICAgb3V0X2J1ZltpXSA9ICg8c3RyaW5nPicwJy50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH1cclxuICAgIGlzT3V0ID0gKChsZWZ0IHx8IChtYXNrX2NoYXJzID4gMCkpID8gZmFsc2UgOiB0cnVlKTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRvIHN0cmluZ1xyXG4gICAgc3RyX3BvcyA9IHByZWZfbGVuO1xyXG4gICAgc3RyX2xlbiA9IGxlbiAtIHByZWZfbGVuIC0gc3VmZl9sZW47XHJcbiAgICB0bXBfb3V0X2J1ZiA9IG91dF9idWYuc2xpY2Uoc3RyX3Bvcywgb3V0X2J1Zi5sZW5ndGgpO1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmVtYWlucyA9IHRoaXMubnVtX2xfMl9zdHIodGhpcy5OVU1fTE9ORygpLCB0bXBfb3V0X2J1Ziwgc3RyX2xlbiwgcGljKTtcclxuICAgIGVsc2VcclxuICAgICAgICByZW1haW5zID0gdGhpcy50b19zdHIodG1wX291dF9idWYsIHN0cl9sZW4sIHBpYyk7XHJcblxyXG4gICAgZm9yIChpID0gc3RyX3BvczsgaSA8IG91dF9idWYubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgb3V0X2J1ZltpXSA9IHRtcF9vdXRfYnVmW2kgLSBzdHJfcG9zXTtcclxuICAgIHRtcF9vdXRfYnVmID0gbnVsbDtcclxuXHJcbiAgICBpZiAocmVtYWlucyA8IG1hc2tfY2hhcnMpIHtcclxuICAgICAgICByZXMgPSBuZXcgQXJyYXkobGVuKTtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgIHJlc1tpXSA9IChyZW1haW5zID09PSBOVU1fVFlQRS5aRVJPX0ZJTEwgPyBwaWMuZ2V0WmVyb1BhZCgpIDogJyonKTtcclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKHJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1hc2tfY2hhcnMgPiAwKSB7XHJcbiAgICAgIHJlbWFpbnMgLT0gbWFza19jaGFycztcclxuICAgICAgc3RyX3BvcyArPSBtYXNrX2NoYXJzO1xyXG4gICAgICBzdHJfbGVuIC09IG1hc2tfY2hhcnM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGFrZSBjYXJlIG9mIHBhZCBhZnRlciBhbmQgYmVmb3JlIG51bWJlclxyXG4gICAgaWYgKHBmaWxsKSB7XHJcbiAgICAgIHBhZCA9IHBpYy5nZXRQYWQoKTtcclxuICAgICAgaWYgKGxlZnQpIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtYWluczsgaSsrKVxyXG4gICAgICAgICAgb3V0X2J1ZiBbc3RyX3BvcyArIHN0cl9sZW4gKyBpXSA9IHBhZDtcclxuICAgICAgICBzdHJfcG9zICs9IHJlbWFpbnM7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbWFpbnM7IGkrKylcclxuICAgICAgICAgIG91dF9idWZbc3RyX3BvcyArIGldID0gcGFkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcGFkID0gJyAnO1xyXG4gICAgICBzdHJfcG9zICs9IHJlbWFpbnM7XHJcbiAgICAgIHN0cl9sZW4gLT0gcmVtYWlucztcclxuICAgIH1cclxuXHJcbiAgICAvLyB0YWtlIGNhcmUgb2Ygc3VmZml4IGFuZCBwcmVmaXhcclxuICAgIGlmIChzdWZmX2xlbiA+IDApIHtcclxuICAgICAgc3VmZl9zdHIgPSBzaWduX24gPyBwaWMuZ2V0UG9zU3VmZl8oKSA6IHBpYy5nZXROZWdTdWZmXygpO1xyXG4gICAgICBpZiAoc3VmZl9sZW4gPT09IDEpXHJcbiAgICAgICAgb3V0X2J1ZltzdHJfcG9zICsgc3RyX2xlbl0gPSBzdWZmX3N0clswXTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHN1ZmZfbGVuOyBpKyspXHJcbiAgICAgICAgICBvdXRfYnVmW3N0cl9wb3MgKyBzdHJfbGVuICsgaV0gPSBzdWZmX3N0cltpXTtcclxuICAgICAgfVxyXG4gICAgICBzdHJfbGVuICs9IHN1ZmZfbGVuO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZWZfbGVuID4gMCkge1xyXG4gICAgICBzdHJfcG9zIC09IHByZWZfbGVuO1xyXG4gICAgICBzdHJfbGVuICs9IHByZWZfbGVuO1xyXG4gICAgICBwcmVmX3N0ciA9IHNpZ25fbiA/IHBpYy5nZXRQb3NQcmVmXygpIDogcGljLmdldE5lZ1ByZWZfKCk7XHJcbiAgICAgIGlmIChwcmVmX2xlbiA9PT0gMSlcclxuICAgICAgICAgIG91dF9idWZbc3RyX3Bvc10gPSBwcmVmX3N0clswXTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmVmX2xlbjsgaSsrKVxyXG4gICAgICAgICAgb3V0X2J1ZltzdHJfcG9zICsgaV0gPSBwcmVmX3N0cltpXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzdHJfcG9zIG5vdyBwb2ludHMgdG8gYmVnaW5uaW5nIG9mIHJlc3VsdCBzdHJcclxuICAgIC8vIHRha2UgY2FyZSBvZiBmaW5hbCBwYWQgYWZ0ZXIgYW5kIGJlZm9yZSBudW1iZXJcclxuICAgIGlmICghcGZpbGwpIHtcclxuICAgICAgbGV0IG91dEJ1ZkxlbjogbnVtYmVyID0gb3V0X2J1Zi5sZW5ndGg7XHJcblxyXG4gICAgICBpZiAobGVmdCkge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1haW5zICYmIChzdHJfcG9zICsgc3RyX2xlbiArIGkgPCBvdXRCdWZMZW4pOyBpKyspXHJcbiAgICAgICAgICBvdXRfYnVmW3N0cl9wb3MgKyBzdHJfbGVuICsgaV0gPSBwYWQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc3RyX3BvcyAtPSByZW1haW5zO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtYWlucyAmJiAoc3RyX3BvcyArIGkgPCBvdXRCdWZMZW4pOyBpKyspXHJcbiAgICAgICAgICBvdXRfYnVmW3N0cl9wb3MgKyBpXSA9IHBhZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlc3VsdCBidWlsdCwgZmluaXNoXHJcbiAgICBpZiAoaXNPdXQpXHJcbiAgICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhvdXRfYnVmKTtcclxuXHJcbiAgICAvLyBDb3B5IHJlc3VsdCB0byBvdXRwdXQgYnVmZmVyXHJcbiAgICBpZiAobWFza19jaGFycyA9PT0gMCkge1xyXG4gICAgICBpZiAoc3RyX3BvcyArIGxlbiA+IG91dF9idWYubGVuZ3RoKVxyXG4gICAgICAgIGxlbiA9IG91dF9idWYubGVuZ3RoIC0gc3RyX3BvcztcclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKG91dF9idWYsIHN0cl9wb3MsICBsZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAob3V0X3BvcyA9IDA7IG91dF9wb3MgPCBsZW4gJiYgc3RyX3BvcyA8IG91dF9idWYubGVuZ3RoOyBvdXRfcG9zKyspXHJcbiAgICAgIGlmIChvdXRWYWxbb3V0X3Bvc10gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKSlcclxuICAgICAgICBvdXRWYWxbb3V0X3Bvc10gPSBvdXRfYnVmW3N0cl9wb3MrK107XHJcblxyXG4gICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKG91dFZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVsZGluZyB0aGUgYmFzaWMgZGVjaW1hbCBzdHJpbmcgbnVtYmVyIGZyb20gYSBsb25nIHZhbHVlICh3aXRob3V0XHJcbiAgLy8vICAgdGhlIHNwZWNpYWwgcGljdHVyZSBmZWF0dXJlcykuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bVwiPiAgVGhlIG51bWJlciB0byBiZSB0cmFuc2xhdGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gIFRoZSBtYXNrIHRvIHVzZSBmb3IgYnVpbGRpbmcgdGhlIHN0cmluZyBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPGxlbj4gICAgbGVuICAgdGhlIGxlbiB0byB1c2UgaW4gdGhlIHN0ciBjaGFyIGFycmF5IDwvbGVuPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICBUaGUgcGljdHVyZSBjbGFzcyBob2xkaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZ1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIG51bV9sXzJfc3RyKG51bTogbnVtYmVyLCBzdHI6IHN0cmluZ1tdLCBsZW46IG51bWJlciwgcGljOiBQSUMpOiBudW1iZXIge1xyXG4gICAgbGV0IGNvbW1hczogYm9vbGVhbjtcclxuICAgIGxldCBkaWdpdHM6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgZGVjczogbnVtYmVyO1xyXG4gICAgbGV0IGo6IG51bWJlcjtcclxuXHJcbiAgICBpZiAobnVtIDwgMClcclxuICAgICAgbnVtID0gLW51bTtcclxuICAgIGNvbW1hcyA9IHBpYy53aXRoQ29tYSgpO1xyXG4gICAgZGVjcyA9IE1hdGgubWluKHBpYy5nZXREZWMoKSwgbGVuIC0gMSk7XHJcbiAgICBpZiAoZGVjcyA+IDApXHJcbiAgICAgIGxlbiAtPSAoZGVjcyArIDEpO1xyXG4gICAgaSA9IGxlbjtcclxuXHJcbiAgICAvLyAyNi8xMS85NyBTaGF5IFouIEJ1ZyAjNzcwNTI2IC0gSWYgVGhlIGRlY2ltYWwgcG9pbnQgaXMgdGhlIGZpcnN0XHJcbiAgICAvLyBpbiB0aGUgcGljdHVyZSdzIGZvcm1hdCAtIGFzc3VtZSB0aGF0IHRoZSBpbnB1dCB2YWx1ZSBpcyBsZWdhbCAhIVxyXG4gICAgaWYgKG51bSA9PT0gMCAmJiAhcGljLmRlY0luRmlyc3RQb3MoKSkge1xyXG4gICAgICBpZiAocGljLnplcm9GaWxsKCkpXHJcbiAgICAgICAgcmV0dXJuIChOVU1fVFlQRS5aRVJPX0ZJTEwpO1xyXG4gICAgICBpZiAobGVuID09PSAwKVxyXG4gICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcblxyXG4gICAgICBpZiAoaSA+IHN0ci5sZW5ndGgpXHJcbiAgICAgICAgaSA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICBzdHJbLS1pXSA9ICcwJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGVjcyA+IDApIHtcclxuICAgICAgICBzdHJbbGVuXSA9IHRoaXMuREVDSU1BTENIQVI7XHJcbiAgICAgIGZvciAoaiA9IDA7IGogPCBkZWNzOyBqKyspXHJcbiAgICAgICAgc3RyW2xlbiArIDEgKyBqXSA9ICcwJztcclxuICAgIH1cclxuXHJcbiAgICBkaWdpdHMgPSAwO1xyXG4gICAgZm9yICg7IG51bSA+IDA7IG51bSA9IE1hdGguZmxvb3IobnVtIC8gMTApKSB7XHJcbiAgICAgIGktLTtcclxuICAgICAgaWYgKGNvbW1hcykge1xyXG4gICAgICAgIGlmIChkaWdpdHMgPT09IDMpIHtcclxuICAgICAgICAgIGlmIChpIDwgMClcclxuICAgICAgICAgICAgcmV0dXJuIChOVU1fVFlQRS5OT19ST09NKTtcclxuICAgICAgICAgIGRpZ2l0cyA9IDA7XHJcbiAgICAgICAgICBzdHJbaS0tXSA9IHRoaXMuQ09NTUFDSEFSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkaWdpdHMrKztcclxuICAgICAgfVxyXG4gICAgICBpZiAoaSA8IDApXHJcbiAgICAgICAgcmV0dXJuIChOVU1fVFlQRS5OT19ST09NKTtcclxuICAgICAgc3RyW2ldID0gKChudW0gJSAxMCkudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVsZGluZyB0aGUgYmFzaWMgZGVjaW1hbCBzdHJpbmcgbnVtYmVyIGZyb20gYSBub24gbG9uZyB2YWx1ZSAod2l0aG91dFxyXG4gIC8vLyAgIHRoZSBzcGVjaWFsIHBpY3R1cmUgZmVhdHVyZXMpLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gIFRoZSBtYXNrIHRvIHVzZSBmb3IgYnVpbGRpbmcgdGhlIHN0cmluZyBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPGxlbj4gICAgbGVuICAgdGhlIGxlbiB0byB1c2UgaW4gdGhlIHN0ciBjaGFyIGFycmF5IDwvbGVuPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICBUaGUgcGljdHVyZSBjbGFzcyBob2xkaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZ1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIHRvX3N0cihzdHI6IHN0cmluZ1tdLCBsZW46IG51bWJlciwgcGljOiBQSUMpOiBudW1iZXIge1xyXG4gICAgbGV0IHRtcDogTlVNX1RZUEU7XHJcbiAgICBsZXQgY29tbWFzOiBib29sZWFuO1xyXG4gICAgbGV0IGRpZ2l0czogbnVtYmVyO1xyXG4gICAgbGV0IGRlY3BvczogbnVtYmVyO1xyXG4gICAgbGV0IGxhc3Q6IG51bWJlcjtcclxuICAgIGxldCBmaXJzdDogbnVtYmVyO1xyXG4gICAgbGV0IGo6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgZGVjczogbnVtYmVyO1xyXG4gICAgbGV0IG51bV9jaGFyOiBudW1iZXI7XHJcblxyXG4gICAgY29tbWFzID0gcGljLndpdGhDb21hKCk7XHJcbiAgICBkZWNzID0gcGljLmdldERlYygpO1xyXG4gICAgaWYgKGRlY3MgPj0gbGVuKVxyXG4gICAgICBkZWNzID0gbGVuIC0gMTtcclxuXHJcbiAgICB0bXAgPSBuZXcgTlVNX1RZUEUodGhpcyk7XHJcbiAgICB0bXAucm91bmQoZGVjcyk7XHJcbiAgICBpZiAodG1wLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJldHVybiB0bXAubnVtX2xfMl9zdHIodG1wLk5VTV9MT05HKCksIHN0ciwgbGVuLCBwaWMpO1xyXG5cclxuICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiB0bXAuX2RhdGFbMF0gPT09IDApXHJcbiAgICAgIHJldHVybiAoTlVNX1RZUEUuWkVST19GSUxMKTtcclxuXHJcbiAgICBpID0gbGVuIC0gMTtcclxuICAgIGRpZ2l0cyA9IDA7XHJcbiAgICBkZWNwb3MgPSAoKHRtcC5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spIC0gTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSAqIDI7XHJcbiAgICBsYXN0ID0gZGVjcG9zIC0gMSArIGRlY3M7XHJcbiAgICBmaXJzdCA9IGRlY3BvcyAtIDE7XHJcbiAgICBpZiAoZmlyc3QgPiAyKVxyXG4gICAgICBmaXJzdCA9ICh0bXAuX2RhdGFbMV0gPCAxMCkgPyAzIDogMjtcclxuXHJcbiAgICBmb3IgKGogPSBsYXN0OyBqID49IGZpcnN0OyBqLS0pIHtcclxuICAgICAgaWYgKGkgPCAwKVxyXG4gICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcblxyXG4gICAgICBpZiAoY29tbWFzICYmIChqIDwgZGVjcG9zKSkge1xyXG4gICAgICAgIGlmIChkaWdpdHMgPT09IDMpIHtcclxuICAgICAgICAgIGRpZ2l0cyA9IDA7XHJcbiAgICAgICAgICBzdHJbaS0tXSA9IHRoaXMuQ09NTUFDSEFSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkaWdpdHMrKztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSlBOOjE1LzA4LzE5OTYgWWFtYSAoSnBuSUQ6WkEwODE1MDAxKVxyXG4gICAgICAvLyBXaGVuIEZvcm1hdD1cIk4xMkNcIiBhbmQgbnVtIGlzIGJpZ2dlciB0aGFuIDEyIGRpZ2l0cy5cclxuICAgICAgLy8gTUFHSUMgY3J1c2hlcy4gQmVjYXVzZSB0aGUgdmFyIGkgYmVjb21lcyBuZWdhdGl2ZS5cclxuICAgICAgaWYgKGkgPCAwKVxyXG4gICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcblxyXG4gICAgICBpZiAoKGogPCAyKSB8fCAoaiA+PSB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFICogMikpXHJcbiAgICAgICAgc3RyW2ktLV0gPSAnMCc7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChpIDwgMClcclxuICAgICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcbiAgICAgICAgbnVtX2NoYXIgPSB0bXAuX2RhdGFbaiA+PiAxXTtcclxuICAgICAgICBzdHJbaS0tXSA9ICgoKGogJiAxKSAhPT0gMCkgPyAobnVtX2NoYXIgJSAxMCkgOiAoTWF0aC5mbG9vcihudW1fY2hhciAvIDEwKSkpLnRvU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChqID09PSBkZWNwb3MpIHtcclxuICAgICAgICBpZiAoaSA8IDApXHJcbiAgICAgICAgICByZXR1cm4gKE5VTV9UWVBFLk5PX1JPT00pO1xyXG4gICAgICAgIHN0cltpLS1dID0gdGhpcy5ERUNJTUFMQ0hBUjtcclxuXHJcbiAgICAgICAgLy8gMjYvMTEvOTcgU2hheSBaLiBCdWcgIzc3MDUyNiAtIElmIFRoZSBkZWNpbWFsIHBvaW50IGlzIHRoZSBmaXJzdFxyXG4gICAgICAgIC8vIGluIHRoZSBwaWN0dXJlJ3MgZm9ybWF0IC0gYXNzdW1lIHRoYXQgdGhlIGlucHV0IHZhbHVlIGlzIGxlZ2FsICFcclxuICAgICAgICBpZiAoaSA8IDAgJiYgcGljLmRlY0luRmlyc3RQb3MoKSlcclxuICAgICAgICAgIHJldHVybiAoMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKGkgKyAxKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtaW5nIGFuIEFkZCBvcGVyYXRpb24gb24gdHdvIG1hZ2ljIG51bWJlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMVwiPiAgdGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMlwiPiAgdGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHJlc3VsdFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGFkZChudW0xOiBOVU1fVFlQRSwgbnVtMjogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgc2lnbjE6IG51bWJlcjtcclxuICAgIGxldCBzaWduMjogbnVtYmVyO1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuICAgIGxldCBsMTogbnVtYmVyO1xyXG4gICAgbGV0IGwyOiBudW1iZXI7XHJcbiAgICBsZXQgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlcjtcclxuICAgIC8vIG51bGwgdmFsdWVzXHJcbiAgICBpZiAobnVtMSA9PT0gbnVsbCB8fCBudW0yID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBTSUdOSUZJQ0FOVF9OVU1fU0laRSA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG4gICAgbGV0IHRtcHJlczogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgb3BlckRhdGE6IE9wZXJEYXRhID0gbmV3IE9wZXJEYXRhKCk7XHJcbiAgICBpZiAobnVtMS5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgIGlmIChudW0yLk5VTV9JU19MT05HKCkpIHtcclxuXHJcbiAgICAgICAgbCA9IGwxID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgIGwgPSAtbDtcclxuXHJcbiAgICAgICAgaWYgKGwgPCAweDQwMDAwMDAwKSB7XHJcbiAgICAgICAgICBsID0gbDIgPSBudW0yLk5VTV9MT05HKCk7XHJcbiAgICAgICAgICBpZiAobCA8IDApXHJcbiAgICAgICAgICAgIGwgPSAtbDtcclxuICAgICAgICAgIGlmIChsIDwgMHg0MDAwMDAwMCkge1xyXG4gICAgICAgICAgICBsMSArPSBsMjtcclxuICAgICAgICAgICAgcmVzLk5VTV80X0xPTkcobDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICAgIH1cclxuICAgICAgbnVtMS5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobnVtMi5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcblxyXG4gICAgc2lnbjEgPSBOVU1fVFlQRS50b1NCeXRlKG51bTEuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0V4cDFfID0gTlVNX1RZUEUudG9TQnl0ZShudW0xLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBzaWduMiA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMi5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBvcGVyRGF0YS5OVU1fRXhwMl8gPSBOVU1fVFlQRS50b1NCeXRlKG51bTIuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIG9wZXJEYXRhLk5VTV9EaWZmXyA9IDxudW1iZXI+KG9wZXJEYXRhLk5VTV9FeHAxXyAtIG9wZXJEYXRhLk5VTV9FeHAyXyk7XHJcblxyXG4gICAgbGV0IGNtcHZhbDogbnVtYmVyID0gb3BlckRhdGEuTlVNX0RpZmZfO1xyXG4gICAgaWYgKGNtcHZhbCA9PT0gMCkge1xyXG4gICAgICBjbXB2YWwgPSBOVU1fVFlQRS50b1VCeXRlKG51bTEuX2RhdGFbMV0pIC0gTlVNX1RZUEUudG9VQnl0ZShudW0yLl9kYXRhWzFdKTtcclxuICAgICAgaWYgKGNtcHZhbCA9PT0gMClcclxuICAgICAgICBjbXB2YWwgPSBOVU1fVFlQRS5tZW1jbXAobnVtMSwgMiwgbnVtMiwgMiwgU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAyKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY21wdmFsID49IDApIHtcclxuICAgICAgaWYgKHNpZ24xID09PSBzaWduMilcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5hZGRfcG9zKG51bTEsIG51bTIsIG9wZXJEYXRhKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRtcHJlcyA9IE5VTV9UWVBFLnN1Yl9wb3MobnVtMSwgbnVtMiwgb3BlckRhdGEpO1xyXG5cclxuICAgICAgaWYgKHRtcHJlcy5fZGF0YVswXSAhPT0gMClcclxuICAgICAgICB0bXByZXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHRtcHJlcy5fZGF0YVswXSB8IHNpZ24xKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgZXhwOiBudW1iZXIgPSBvcGVyRGF0YS5OVU1fRXhwMV87XHJcbiAgICAgIG9wZXJEYXRhLk5VTV9FeHAxXyA9IG9wZXJEYXRhLk5VTV9FeHAyXztcclxuICAgICAgb3BlckRhdGEuTlVNX0V4cDJfID0gZXhwO1xyXG4gICAgICBvcGVyRGF0YS5OVU1fRGlmZl8gPSAtb3BlckRhdGEuTlVNX0RpZmZfO1xyXG5cclxuICAgICAgaWYgKHNpZ24xID09PSBzaWduMilcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5hZGRfcG9zKG51bTIsIG51bTEsIG9wZXJEYXRhKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRtcHJlcyA9IE5VTV9UWVBFLnN1Yl9wb3MobnVtMiwgbnVtMSwgb3BlckRhdGEpO1xyXG5cclxuICAgICAgaWYgKHRtcHJlcy5fZGF0YVswXSAhPT0gMClcclxuICAgICAgICB0bXByZXMuX2RhdGFbMF0gfD0gc2lnbjI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRtcHJlcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtaW5nIGEgU3VidHJhY3Qgb3BlcmF0aW9uIG9uIHR3byBtYWdpYyBudW1iZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXN1bHRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBzdWIobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09PSBudWxsIHx8IG51bTIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCB0bXByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG9wZXJEYXRhOiBPcGVyRGF0YSA9IG5ldyBPcGVyRGF0YSgpO1xyXG5cclxuICAgIGlmIChudW0xLk5VTV9JU19MT05HKCkpIHtcclxuICAgICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICAgIGxldCBsOiBudW1iZXI7XHJcbiAgICAgICAgbGV0IGwxOiBudW1iZXIgPSBsID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgIGwgPSAtbDtcclxuICAgICAgICBpZiAobCA8IDB4NDAwMDAwMDApIHtcclxuICAgICAgICAgIGxldCBsMjogbnVtYmVyID0gbCA9IG51bTIuTlVNX0xPTkcoKTtcclxuICAgICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgICAgbCA9IC1sO1xyXG4gICAgICAgICAgaWYgKGwgPCAweDQwMDAwMDAwKSB7XHJcbiAgICAgICAgICAgIGwxIC09IGwyO1xyXG4gICAgICAgICAgICByZXMuTlVNXzRfTE9ORyhsMSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG51bTIubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBudW0xLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChudW0yLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIG51bTIubnVtXzRfc3RkX2xvbmcoKTtcclxuXHJcbiAgICBsZXQgc2lnbjE6IG51bWJlciA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMS5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBvcGVyRGF0YS5OVU1fRXhwMV8gPSBOVU1fVFlQRS50b1NCeXRlKG51bTEuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIGxldCBzaWduMjogbnVtYmVyID0gTlVNX1RZUEUudG9TQnl0ZShudW0yLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIG9wZXJEYXRhLk5VTV9FeHAyXyA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMi5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0RpZmZfID0gPG51bWJlcj4ob3BlckRhdGEuTlVNX0V4cDFfIC0gb3BlckRhdGEuTlVNX0V4cDJfKTtcclxuXHJcbiAgICBsZXQgY21wdmFsOiBudW1iZXIgPSBvcGVyRGF0YS5OVU1fRGlmZl87XHJcbiAgICBpZiAoY21wdmFsID09PSAwKSB7XHJcbiAgICAgIGNtcHZhbCA9IE5VTV9UWVBFLnRvVUJ5dGUobnVtMS5fZGF0YVsxXSkgLSBOVU1fVFlQRS50b1VCeXRlKG51bTIuX2RhdGFbMV0pO1xyXG4gICAgICBpZiAoY21wdmFsID09PSAwKVxyXG4gICAgICAgIGNtcHZhbCA9IE5VTV9UWVBFLm1lbWNtcChudW0xLCAyLCBudW0yLCAyLCBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKSAtIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjbXB2YWwgPj0gMCkge1xyXG4gICAgICBpZiAoc2lnbjEgPT09IHNpZ24yKVxyXG4gICAgICAgIHRtcHJlcyA9IE5VTV9UWVBFLnN1Yl9wb3MobnVtMSwgbnVtMiwgb3BlckRhdGEpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdG1wcmVzID0gTlVNX1RZUEUuYWRkX3BvcyhudW0xLCBudW0yLCBvcGVyRGF0YSk7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBleHA6IG51bWJlciA9IG9wZXJEYXRhLk5VTV9FeHAxXztcclxuICAgICAgb3BlckRhdGEuTlVNX0V4cDFfID0gb3BlckRhdGEuTlVNX0V4cDJfO1xyXG4gICAgICBvcGVyRGF0YS5OVU1fRXhwMl8gPSBleHA7XHJcbiAgICAgIG9wZXJEYXRhLk5VTV9EaWZmXyA9IC1vcGVyRGF0YS5OVU1fRGlmZl87XHJcbiAgICAgIGlmIChzaWduMSA9PT0gc2lnbjIpIHtcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5zdWJfcG9zKG51bTIsIG51bTEsIG9wZXJEYXRhKTtcclxuICAgICAgICBzaWduMSBePSAoTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdG1wcmVzID0gTlVNX1RZUEUuYWRkX3BvcyhudW0yLCBudW0xLCBvcGVyRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRtcHJlcy5fZGF0YVswXSAhPT0gMClcclxuICAgICAgdG1wcmVzLl9kYXRhWzBdIHw9IHNpZ24xO1xyXG5cclxuICAgIHJldHVybiB0bXByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybWluZyBhIE11bHRpcGx5IG9wZXJhdGlvbiBvbiB0d28gbWFnaWMgbnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgbXVsKG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuXHJcbiAgICBsZXQgZnVsbHJlczogSW50OEFycmF5ID0gbmV3IEludDhBcnJheSgzOCk7XHJcbiAgICBsZXQgcHdyOiBudW1iZXI7XHJcbiAgICBsZXQgbGVuMTogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjI6IG51bWJlcjtcclxuICAgIGxldCBwb3MxOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zMjogbnVtYmVyO1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG4gICAgbGV0IGRpZ2l0MTogbnVtYmVyO1xyXG4gICAgbGV0IHByb2Q6IG51bWJlcjtcclxuICAgIGxldCBjYXJyeTogbnVtYmVyO1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuICAgIGxldCBsMTogbnVtYmVyO1xyXG4gICAgbGV0IGwyOiBudW1iZXI7XHJcbiAgICBsZXQgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBudWxsIHZhbHVlc1xyXG4gICAgaWYgKG51bTEgPT09IG51bGwgfHwgbnVtMiA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKTtcclxuXHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG9wZXJEYXRhOiBPcGVyRGF0YSA9IG5ldyBPcGVyRGF0YSgpO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCB0bXBCeXRlOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKG51bTEuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICBpZiAobnVtMi5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgICAgbCA9IGwxID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgIGwgPSAtbDtcclxuICAgICAgICBpZiAobCA8IDB4QjAwMCkge1xyXG4gICAgICAgICAgbCA9IGwyID0gbnVtMi5OVU1fTE9ORygpO1xyXG4gICAgICAgICAgaWYgKGwgPCAwKVxyXG4gICAgICAgICAgICBsID0gLWw7XHJcbiAgICAgICAgICBpZiAobCA8IDB4QjAwMCkge1xyXG4gICAgICAgICAgICBsMSA9IGwxICogbDI7XHJcbiAgICAgICAgICAgIHJlcy5OVU1fNF9MT05HKGwxKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgICB9XHJcbiAgICAgIG51bTEubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcblxyXG4gICAgb3BlckRhdGEuTlVNX0V4cDFfID0gTlVNX1RZUEUudG9TQnl0ZShudW0xLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBvcGVyRGF0YS5OVU1fRXhwMl8gPSBOVU1fVFlQRS50b1NCeXRlKG51bTIuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIGlmIChvcGVyRGF0YS5OVU1fRXhwMV8gPT09IDAgfHwgb3BlckRhdGEuTlVNX0V4cDJfID09PSAwKSB7XHJcbiAgICAgIHJlcy5OVU1fWkVSTygpO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGVuMSA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMTtcclxuICAgICAgICAgbnVtMS5fZGF0YVtsZW4xXSA9PT0gMDtcclxuICAgICAgICAgbGVuMS0tKSB7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxlbjIgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDE7XHJcbiAgICAgICAgIG51bTIuX2RhdGFbbGVuMl0gPT09IDA7XHJcbiAgICAgICAgIGxlbjItLSkge1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCAoTlVNX1RZUEUuTlVNX1NJWkUgLSAxKSAqIDI7IGkrKylcclxuICAgICAgZnVsbHJlc1tpXSA9IDA7XHJcblxyXG4gICAgcG9zID0gMDtcclxuICAgIGZvciAocG9zMSA9IGxlbjE7IHBvczEgPiAwOyBwb3MxLS0pIHtcclxuICAgICAgcG9zID0gcG9zMSArIGxlbjIgLSAxO1xyXG4gICAgICBkaWdpdDEgPSBudW0xLl9kYXRhW3BvczFdO1xyXG4gICAgICBjYXJyeSA9IDA7XHJcblxyXG4gICAgICBmb3IgKHBvczIgPSBsZW4yOyBwb3MyID4gMDsgcG9zMi0tKSB7XHJcbiAgICAgICAgcHJvZCA9IE5VTV9UWVBFLnRvVUJ5dGUoZGlnaXQxKSAqIE5VTV9UWVBFLnRvVUJ5dGUobnVtMi5fZGF0YVtwb3MyXSkgKyBjYXJyeTtcclxuICAgICAgICBjYXJyeSA9IE1hdGguZmxvb3IocHJvZCAvIDEwMCk7XHJcbiAgICAgICAgZnVsbHJlc1twb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKGZ1bGxyZXNbcG9zXSkgKyBwcm9kICUgMTAwKTtcclxuICAgICAgICB0bXBCeXRlID0gZnVsbHJlc1twb3NdO1xyXG4gICAgICAgIHBvcy0tO1xyXG4gICAgICAgIGlmIChOVU1fVFlQRS50b1VCeXRlKHRtcEJ5dGUpID49IDEwMCkge1xyXG4gICAgICAgICAgZnVsbHJlc1twb3MgKyAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShmdWxscmVzW3BvcyArIDFdKSAtIDEwMCk7XHJcbiAgICAgICAgICBjYXJyeSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmdWxscmVzW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKGNhcnJ5KTtcclxuICAgIH1cclxuXHJcbiAgICBwd3IgPSBOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAxXykgLSBOVU1fVFlQRS5FWFBfQklBUyArIChOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAyXykgLSBOVU1fVFlQRS5FWFBfQklBUyk7XHJcbiAgICBpZiAoZnVsbHJlc1swXSA9PT0gMCkge1xyXG4gICAgICBwb3MrKztcclxuICAgICAgcHdyLS07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKChudW0xLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKSA9PT0gKG51bTIuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spKVxyXG4gICAgICByZXMuX2RhdGFbMF0gPSAwO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXMuX2RhdGFbMF0gPSBOVU1fVFlQRS5TSUdOX01BU0s7XHJcblxyXG4gICAgcmVzLl9kYXRhWzBdIHw9IE5VTV9UWVBFLnRvU0J5dGUocHdyICsgTlVNX1RZUEUuRVhQX0JJQVMpO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMTsgaSsrKVxyXG4gICAgICByZXMuX2RhdGFbMSArIGldID0gZnVsbHJlc1twb3MgKyBpXTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBlcmZvcm1pbmcgYSBNb2Qgb3BlcmF0aW9uIG9uIHR3byBtYWdpYyBudW1iZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXN1bHRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBtb2QobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09PSBudWxsIHx8IG51bTIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBpZiAobnVtMi5udW1faXNfemVybygpKSB7XHJcbiAgICAgIHJlcy5OVU1fWkVSTygpO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChudW0xLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIG51bTEubnVtXzRfc3RkX2xvbmcoKTtcclxuXHJcbiAgICBpZiAobnVtMi5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcblxyXG4gICAgcmVzID0gTlVNX1RZUEUuZGl2KG51bTEsIG51bTIpO1xyXG4gICAgcmVzLm51bV90cnVuYygwKTtcclxuICAgIHJlcyA9IE5VTV9UWVBFLm11bChyZXMsIG51bTIpO1xyXG4gICAgcmVzID0gTlVNX1RZUEUuc3ViKG51bTEsIHJlcyk7XHJcblxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtaW5nIGEgRGl2aWRlIG9wZXJhdGlvbiBvbiB0d28gbWFnaWMgbnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgZGl2KG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGxldCBkaXZpZGVuZDogSW50OEFycmF5ID0gbmV3IEludDhBcnJheSgoTlVNX1RZUEUuTlVNX1NJWkUgLSAxKSAqIDIpO1xyXG4gICAgbGV0IGRpdmlzb3I6IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoTlVNX1RZUEUuTlVNX1NJWkUpO1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjE6IG51bWJlcjtcclxuICAgIGxldCBsZW4yOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zMTogbnVtYmVyO1xyXG4gICAgbGV0IHBvczI6IG51bWJlcjtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBxdW90OiBudW1iZXI7XHJcbiAgICBsZXQgcHJvZDogbnVtYmVyO1xyXG4gICAgbGV0IGNhcnJ5OiBudW1iZXI7XHJcbiAgICBsZXQgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBudWxsIHZhbHVlc1xyXG4gICAgaWYgKG51bTEgPT09IG51bGwgfHwgbnVtMiA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKTtcclxuXHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG9wZXJEYXRhOiBPcGVyRGF0YSA9IG5ldyBPcGVyRGF0YSgpO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCB0bXBCeXRlOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKG51bTEuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgbnVtMS5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG5cclxuICAgIG9wZXJEYXRhLk5VTV9FeHAxXyA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMS5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0V4cDJfID0gTlVNX1RZUEUudG9TQnl0ZShudW0yLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBpZiAob3BlckRhdGEuTlVNX0V4cDFfID09PSAwIHx8IG9wZXJEYXRhLk5VTV9FeHAyXyA9PT0gMCkge1xyXG4gICAgICByZXMuTlVNX1pFUk8oKTtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxlbjEgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDE7XHJcbiAgICAgICAgIG51bTEuX2RhdGFbbGVuMV0gPT09IDA7XHJcbiAgICAgICAgIGxlbjEtLSkge1xyXG4gICAgfVxyXG4gICAgZm9yIChsZW4yID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxO1xyXG4gICAgICAgICBudW0yLl9kYXRhW2xlbjJdID09PSAwO1xyXG4gICAgICAgICBsZW4yLS0pIHtcclxuICAgIH1cclxuXHJcbiAgICBwb3MgPSAoTlVNX1RZUEUubWVtY21wKG51bTEsIDEsIG51bTIsIDEsIGxlbjIpIDwgMCkgPyAwIDogMTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCAoTlVNX1RZUEUuTlVNX1NJWkUgLSAxKSAqIDI7IGkrKylcclxuICAgICAgZGl2aWRlbmRbaV0gPSAwO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW4xOyBpKyspXHJcbiAgICAgIGRpdmlkZW5kW3BvcyArIGldID0gbnVtMS5fZGF0YVsxICsgaV07XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjI7IGkrKylcclxuICAgICAgZGl2aXNvclsxICsgaV0gPSBudW0yLl9kYXRhWzEgKyBpXTtcclxuXHJcbiAgICByZXMuTlVNX1NFVF9aRVJPKCk7XHJcbiAgICBwd3IgPSBOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAxXykgLSBOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAyXykgKyBwb3M7XHJcbiAgICByZXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHB3ciArIE5VTV9UWVBFLkVYUF9CSUFTKTtcclxuICAgIGlmICgobnVtMS5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSykgIT09IChudW0yLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKSlcclxuICAgICAgcmVzLl9kYXRhWzBdIHw9IE5VTV9UWVBFLlNJR05fTUFTSztcclxuXHJcbiAgICAvLyBub3JtYWxpemUgZGl2aWRlbmQgJiBkaXZpc29yXHJcbiAgICBxdW90ID0gTWF0aC5mbG9vcigxMDAgLyAoTlVNX1RZUEUudG9VQnl0ZShkaXZpc29yWzFdKSArIDEpKTtcclxuICAgIGlmIChxdW90ID4gMSkge1xyXG4gICAgICBjYXJyeSA9IDA7XHJcbiAgICAgIGZvciAocG9zMiA9IGxlbjI7IHBvczIgPiAwOyBwb3MyLS0pIHtcclxuICAgICAgICBwcm9kID0gcXVvdCAqIE5VTV9UWVBFLnRvVUJ5dGUoZGl2aXNvcltwb3MyXSkgKyBjYXJyeTtcclxuICAgICAgICBjYXJyeSA9IE1hdGguZmxvb3IocHJvZCAvIDEwMCk7XHJcbiAgICAgICAgZGl2aXNvcltwb3MyXSA9IE5VTV9UWVBFLnRvU0J5dGUocHJvZCAlIDEwMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhcnJ5ID0gMDtcclxuICAgICAgZm9yIChwb3MxID0gbGVuMSArIHBvcyAtIDE7IHBvczEgPj0gMDsgcG9zMS0tKSB7XHJcbiAgICAgICAgcHJvZCA9IHF1b3QgKiBOVU1fVFlQRS50b1VCeXRlKGRpdmlkZW5kW3BvczFdKSArIGNhcnJ5O1xyXG4gICAgICAgIGNhcnJ5ID0gTWF0aC5mbG9vcihwcm9kIC8gMTAwKTtcclxuICAgICAgICBkaXZpZGVuZFtwb3MxXSA9IE5VTV9UWVBFLnRvU0J5dGUocHJvZCAlIDEwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBkaXZpZGUgZGl2aWRlbmQgYnkgZGl2aXNvclxyXG4gICAgZm9yIChwb3MxID0gMTsgcG9zMSA8IFNJR05JRklDQU5UX05VTV9TSVpFOyBwb3MxKyspIHtcclxuICAgICAgcXVvdCA9IE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zMSAtIDFdKSAqIDEwMCArIE1hdGguZmxvb3IoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3MxXSkgLyBOVU1fVFlQRS50b1VCeXRlKGRpdmlzb3JbMV0pKTtcclxuICAgICAgaWYgKHF1b3QgPj0gMTAwKVxyXG4gICAgICAgIHF1b3QgPSA5OTtcclxuXHJcbiAgICAgIGlmIChxdW90ICE9PSAwKSB7XHJcbiAgICAgICAgLy8gbXVsdGlwbHkgZGl2aXNvciBieSBxdW90aWVudCwgYW5kIHN1YnRyYWN0IGZyb20gZGl2aWRlbmRcclxuICAgICAgICBwb3MgPSBwb3MxICsgbGVuMiAtIDE7XHJcbiAgICAgICAgY2FycnkgPSAwO1xyXG4gICAgICAgIGZvciAocG9zMiA9IGxlbjI7IHBvczIgPiAwOyBwb3MyLS0pIHtcclxuICAgICAgICAgIHByb2QgPSBxdW90ICogTlVNX1RZUEUudG9VQnl0ZShkaXZpc29yW3BvczJdKSArIGNhcnJ5O1xyXG4gICAgICAgICAgY2FycnkgPSBNYXRoLmZsb29yKHByb2QgLyAxMDApO1xyXG4gICAgICAgICAgZGl2aWRlbmRbcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3NdKSAtIHByb2QgJSAxMDApO1xyXG4gICAgICAgICAgdG1wQnl0ZSA9IGRpdmlkZW5kW3Bvc107XHJcbiAgICAgICAgICBwb3MtLTtcclxuICAgICAgICAgIGlmICh0bXBCeXRlIDwgMCkge1xyXG4gICAgICAgICAgICBkaXZpZGVuZFtwb3MgKyAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3MgKyAxXSkgKyAxMDApO1xyXG4gICAgICAgICAgICBjYXJyeSsrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkaXZpZGVuZFtwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKGRpdmlkZW5kW3Bvc10pIC0gY2FycnkpO1xyXG5cclxuICAgICAgICAvLyBkZWNyZW1lbnQgcXVvdGllbnQsIGFuZCBhZGQgYmFjayBkaXZpc29yIHRvIGRpdmlkZW5kXHJcbiAgICAgICAgd2hpbGUgKGRpdmlkZW5kW3Bvc10gPCAwKSB7XHJcbiAgICAgICAgICBxdW90LS07XHJcbiAgICAgICAgICBwb3MgPSBwb3MxICsgbGVuMiAtIDE7XHJcbiAgICAgICAgICBmb3IgKHBvczIgPSBsZW4yOyBwb3MyID4gMDsgcG9zMi0tKSB7XHJcbiAgICAgICAgICAgIGRpdmlkZW5kW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zXSkgKyBOVU1fVFlQRS50b1VCeXRlKGRpdmlzb3JbcG9zMl0pKTtcclxuICAgICAgICAgICAgdG1wQnl0ZSA9IGRpdmlkZW5kW3Bvc107XHJcbiAgICAgICAgICAgIHBvcy0tO1xyXG4gICAgICAgICAgICBpZiAoTlVNX1RZUEUudG9VQnl0ZSh0bXBCeXRlKSA+PSAxMDApIHtcclxuICAgICAgICAgICAgICBkaXZpZGVuZFtwb3MgKyAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3MgKyAxXSkgLSAxMDApO1xyXG4gICAgICAgICAgICAgIGRpdmlkZW5kW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zXSkgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXMuX2RhdGFbcG9zMV0gPSBOVU1fVFlQRS50b1NCeXRlKHF1b3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29tcGFyZSB0d28gbWFnaWMgbnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICBUaGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICBUaGUgc2Vjb25kIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gMCBpZiBudW0xPW51bTIsIDEgaWYgbnVtMT5udW0yIG9yIC0xIGlmIG51bTE8bnVtMlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIG51bV9jbXAobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFKTogbnVtYmVyIHtcclxuICAgIGxldCBzaWduMTogbnVtYmVyO1xyXG4gICAgbGV0IHNpZ24yOiBudW1iZXI7XHJcbiAgICBsZXQgY21wdmFsOiBudW1iZXI7XHJcbiAgICBsZXQgbDE6IG51bWJlcjtcclxuICAgIGxldCBsMjogbnVtYmVyO1xyXG4gICAgbGV0IHRtcDogbnVtYmVyO1xyXG4gICAgbGV0IFNJR05JRklDQU5UX05VTV9TSVpFOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKG51bTEgPT0gbnVsbCB8fCBudW0yID09IG51bGwpXHJcbiAgICAgIHJldHVybiBJbnQzMi5NaW5WYWx1ZTtcclxuXHJcbiAgICBTSUdOSUZJQ0FOVF9OVU1fU0laRSA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG5cclxuICAgIGlmIChudW0xLk5VTV9JU19MT05HKCkpIHtcclxuICAgICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICAgIGwxID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGwyID0gbnVtMi5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsMSA+PSAwICYmIGwyID49IDApIHtcclxuICAgICAgICAgIHRtcCA9IGwxIC0gbDI7XHJcbiAgICAgICAgICBpZiAodG1wID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gKDApO1xyXG4gICAgICAgICAgaWYgKHRtcCA+IDApXHJcbiAgICAgICAgICAgIHJldHVybiAoMSk7XHJcbiAgICAgICAgICByZXR1cm4gKC0xKTtcclxuICAgIH1cclxuICAgICAgICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIG51bTEubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgICAgfVxyXG4gICAgZWxzZSBpZiAobnVtMi5OVU1fSVNfTE9ORygpKVxyXG4gICAgICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG5cclxuICAgIHNpZ24xID0gTlVNX1RZUEUudG9TQnl0ZShudW0xLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIHNpZ24yID0gTlVNX1RZUEUudG9TQnl0ZShudW0yLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIGNtcHZhbCA9IChzaWduMSA9PT0gc2lnbjIpXHJcbiAgICAgID8gTlVNX1RZUEUubWVtY21wKG51bTEsIDAsIG51bTIsIDAsIFNJR05JRklDQU5UX05VTV9TSVpFKVxyXG4gICAgICA6IDE7XHJcbiAgICBpZiAoc2lnbjEgIT09IDApXHJcbiAgICAgIGNtcHZhbCA9IC1jbXB2YWw7XHJcbiAgICByZXR1cm4gKGNtcHZhbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2sgaWYgdGhlIGdpdmVuIGhleCBzdHJpbmcgcmVwcmVzZW50cyBhIGxvbmcgbnVtYmVyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW1IZXhTdHJcIj4gIFRoZSBoZXggc3RyaW5nIHRvIGNoZWNrLlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSwgaWYgdGhlIHN0cmluZyByZXByZXNlbnRzIGEgJ2xvbmcnIG51bWJlciBpbiBOVU1fVFlQRS5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBudW1IZXhTdHJJc0xvbmcobnVtSGV4U3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBudW1IZXhTdHIuc3Vic3RyKDAsIDIpID09PSBcIkZGXCI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgWmVyb2VzIHRoZSBNYWdpYyBOdW1iZXIgYXMgYSBsb25nIHplcm9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIE5VTV9aRVJPKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRaZXJvKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFplcm9lcyB0aGUgTWFnaWMgTnVtYmVyIChhbGwgYnl0ZXMgd2lsbCBzZXQgdG8gMClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIE5VTV9TRVRfWkVSTygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0WmVybyhmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0dGluZyBpbmRpY2F0aW9uIGZvciB0aGUgc2lnbiBvZiB0aGUgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaW4gdGhlIG51bWJlciBpcyBuZWdhdGl2ZSwgZmFsc2UgaWYgcG9zaXRpdmVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIG51bV9pc19uZWcoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICByZXR1cm4gKCh0aGlzLl9kYXRhWzRdICYgMHg4MCkgIT09IDApO1xyXG4gICAgcmV0dXJuICgodGhpcy5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSykgIT09IDApO1xyXG4gICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0dGluZyBpbmRpY2F0aW9uIGlmIHRoZSBNYWdpYyBOdW1iZXIgaXMgWkVSTyAoYWxsIGJ5dGVzIGVxdWFscyB0byAwKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGluIHRoZSBudW1iZXIgaXMgWkVSTywgZmFsc2UgaWYgcG9zaXRpdmVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIG51bV9pc196ZXJvKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmV0dXJuICh0aGlzLk5VTV9MT05HKCkgPT09IDApO1xyXG4gICAgcmV0dXJuICh0aGlzLl9kYXRhWzBdID09PSAwKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENoYW5naW5nIHNpZ24gb2YgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBudW1fbmVnKCk6IHZvaWQge1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgIGwgPSAtdGhpcy5OVU1fTE9ORygpO1xyXG4gICAgICB0aGlzLk5VTV80X0xPTkcobCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9kYXRhWzBdICE9PSAwKVxyXG4gICAgICB0aGlzLl9kYXRhWzBdIF49IE5VTV9UWVBFLlNJR05fTUFTSztcclxuICAgICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSXMgdGhlIG51bWJlciBrZXB0IGluIGluIHRoZSBOVU1fVFlQRSBpcyBhIGxvbmcgbnVtYmVyP1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGluIHRoZSBudW1iZXIgaXMgbG9uZywgZmFsc2UgaWYgbm90XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBOVU1fSVNfTE9ORygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhWzBdID09PSBOVU1fVFlQRS5OVU1fTE9OR19UWVBFO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbG9uZyB2YWx1ZSBmcm9tIHRoZSBOVU1fVFlQRS5cclxuICAvLy8gICBUSElTIEZVTkNUSU9OIE1VU1QgQkUgV1JJVFRFTiBESUZFUkVOVExZIVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbG9uZyBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIE5VTV9MT05HKCk6IG51bWJlciB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0aGlzLl9kYXRhWzFdID09PSAwICYmIHRoaXMuX2RhdGFbMl0gPT09IDAgJiYgdGhpcy5fZGF0YVszXSA9PT0gMCAmJiB0aGlzLl9kYXRhWzRdID09PSAtMTI4KVxyXG4gICAgICByZXR1cm4gSW50MzIuTWluVmFsdWU7XHJcblxyXG4gICAgbGV0IGRhdGF2aWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuX2RhdGEuYnVmZmVyKTtcclxuICAgIHJldHVybiBkYXRhdmlldy5nZXRJbnQzMigxLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSb3VuZHMgdGhlIE5VTV9UWVBFIG51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZWNzXCI+ICBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRvIGRlY2ltYWwgcG9pbnQgdG8gcm91bmQgdG9cclxuICAvLy8gPC9wYXJhbT5cclxuICByb3VuZChkZWNzOiBudW1iZXIpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgYWRkdmFsOiBOVU1fVFlQRTtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgYWRkdmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBhZGR2YWwuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKCh0aGlzLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKSB8IChOVU1fVFlQRS5FWFBfQklBUyAtIChkZWNzID4+IDEpKSk7XHJcbiAgICBhZGR2YWwuX2RhdGFbMV0gPSBOVU1fVFlQRS50b1NCeXRlKChkZWNzICYgMSkgIT09IDAgPyA1IDogNTApO1xyXG5cclxuICAgIGxldCB0ZW1wOiBOVU1fVFlQRSA9IE5VTV9UWVBFLmFkZCh0aGlzLCBhZGR2YWwpO1xyXG4gICAgdGhpcy5fZGF0YSA9IG5ldyBJbnQ4QXJyYXkodGVtcC5fZGF0YS5sZW5ndGgpO1xyXG5cclxuICAgIHRoaXMuX2RhdGEgPSB0ZW1wLl9kYXRhO1xyXG4gICAgICB0aGlzLm51bV90cnVuYyhkZWNzKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybnMgYSBudW1lcmljIGV4cHJlc3Npb24sIHJvdW5kZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwid2hvbGVcIj50aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHdoaWNoIHRoZSBudW1lcmljIGV4cHJlc3Npb24gaXMgcm91bmRlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIGRiUm91bmQod2hvbGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGFkZHZhbDogTlVNX1RZUEU7XHJcbiAgICBsZXQgcHdyOiBudW1iZXI7XHJcbiAgICBsZXQgbnVtX2RpZmY6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIC8vIEFkZCA1IChpbiB0aGUgY29ycmVzcG9uZGluZyB0byB3aG9sZSBwb3NpdGlvbilcclxuICAgIGFkZHZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgYWRkdmFsLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZSgodGhpcy5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSykgfCAoTlVNX1RZUEUuRVhQX0JJQVMgKyAoKHdob2xlICsgMSkgPj4gMSkpKTtcclxuICAgIGFkZHZhbC5fZGF0YVsxXSA9IE5VTV9UWVBFLnRvU0J5dGUoKCh3aG9sZSAmIDEpICE9PSAwKSA/IDUgOiA1MCk7XHJcblxyXG4gICAgbGV0IHRlbXA6IE5VTV9UWVBFID0gTlVNX1RZUEUuYWRkKHRoaXMsIGFkZHZhbCk7XHJcbiAgICB0aGlzLl9kYXRhID0gbmV3IEludDhBcnJheSh0ZW1wLl9kYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgICBmb3IgKGxldCBfYWk6IG51bWJlciA9IDA7IF9haSA8IHRoaXMuX2RhdGEubGVuZ3RoOyArK19haSlcclxuICAgICAgdGhpcy5fZGF0YVtfYWldID0gdGVtcC5fZGF0YVtfYWldO1xyXG5cclxuICAgIC8vIFB1dCAwIGluIHRoZSBlbmQgb2YgdGhlIG51bWJlclxyXG4gICAgcHdyID0gKHRoaXMuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKSAtIE5VTV9UWVBFLkVYUF9CSUFTO1xyXG5cclxuICAgIGlmICgobnVtX2RpZmYgPSBwd3IgLSAoKHdob2xlICsgMSkgPj4gMSkpID49IDApIHtcclxuICAgICAgaWYgKCh3aG9sZSAmIDEpICE9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5fZGF0YVsxICsgbnVtX2RpZmZdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLl9kYXRhWzEgKyBudW1fZGlmZl0gLSB0aGlzLl9kYXRhWzEgKyBudW1fZGlmZl0gJSAxMCk7XHJcbiAgICAgICAgbnVtX2RpZmYrKztcclxuICAgICAgICB9XHJcbiAgICAgIGZvciAoaSA9IDA7XHJcbiAgICAgICAgICAgaSA8IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAoMSArIG51bV9kaWZmKTtcclxuICAgICAgICAgICBpKyspXHJcbiAgICAgICAgdGhpcy5fZGF0YVsxICsgbnVtX2RpZmYgKyBpXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuTlVNX1NFVF9aRVJPKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRydW5jYXRlcyB0aGUgTlVNX1RZUEUgbnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlY3NcIj4gIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdG8gZGVjaW1hbCBwb2ludCB0byBoYXZlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgbnVtX3RydW5jKGRlY3M6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IG51bV9kaWZmOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBwd3IgPSAodGhpcy5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spIC0gTlVNX1RZUEUuRVhQX0JJQVM7XHJcbiAgICBpZiAoKG51bV9kaWZmID0gdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEgLSBwd3IgLSAoKGRlY3MgKyAxKSA+PiAxKSkgPCAwKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBpZiAoKG51bV9kaWZmIDwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpICYmICgoZGVjcyAmIDEpICE9PSAwKSkge1xyXG4gICAgICB0aGlzLl9kYXRhW3RoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxIC0gbnVtX2RpZmZdID1cclxuICAgICAgICBOVU1fVFlQRS50b1NCeXRlKHRoaXMuX2RhdGFbdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEgLSBudW1fZGlmZl0gLSB0aGlzLl9kYXRhW3RoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxIC0gbnVtX2RpZmZdICUgMTApO1xyXG4gICAgICBpZiAodGhpcy5fZGF0YVt0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSAtIG51bV9kaWZmXSA9PT0gMClcclxuICAgICAgICBudW1fZGlmZisrO1xyXG4gICAgICAgICAgfVxyXG4gICAgaWYgKG51bV9kaWZmID49IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSB7XHJcbiAgICAgICAgICB0aGlzLk5VTV9aRVJPKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICBmb3IgKGkgPSAwO1xyXG4gICAgICAgICBpIDwgbnVtX2RpZmY7XHJcbiAgICAgICAgIGkrKylcclxuICAgICAgdGhpcy5fZGF0YVt0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gbnVtX2RpZmYgKyBpXSA9IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0cyBhIE1hZ2ljIG51bWJlciBmcm9tIHN0ZCBsb25nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bVwiPiAgVGhlIG51bWJlciB0byBiZSB0cmFuc2xhdGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgbnVtXzRfc3RkX2xvbmcoKTogdm9pZCB7XHJcbiAgICBsZXQgc2xvbmc6IG51bWJlcjtcclxuXHJcbiAgICBzbG9uZyA9IHRoaXMuTlVNX0xPTkcoKTtcclxuICAgIGlmIChzbG9uZyA+PSAwKVxyXG4gICAgICB0aGlzLm51bV80X3Vsb25nKHNsb25nKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm51bV80X3Vsb25nKC1zbG9uZyk7XHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gfD0gTlVNX1RZUEUuU0lHTl9NQVNLO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnRzIGEgTWFnaWMgbnVtYmVyIGZyb20gdWxvbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtXCI+ICBUaGUgbnVtYmVyIHRvIGJlIHRyYW5zbGF0ZWRcclxuICAvLy8gPC9wYXJhbT5cclxuICBudW1fNF91bG9uZyhkYXRhOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBwd3I6IG51bWJlcjtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcblxyXG4gICAgdGhpcy5OVU1fU0VUX1pFUk8oKTtcclxuICAgIHBvcyA9IHB3ciA9IDU7XHJcbiAgICB3aGlsZSAoZGF0YSA+IDApIHtcclxuICAgICAgdGhpcy5fZGF0YVtwb3MtLV0gPSBOVU1fVFlQRS50b1NCeXRlKGRhdGEgJSAxMDApO1xyXG4gICAgICBkYXRhID0gTWF0aC5mbG9vcihkYXRhIC8gMTAwKTtcclxuICAgIH1cclxuICAgIGlmIChwb3MgPCBwd3IpIHtcclxuICAgICAgaWYgKHBvcyA+IDApIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHdyIC0gcG9zOyBpKyspXHJcbiAgICAgICAgICB0aGlzLl9kYXRhWzEgKyBpXSA9IHRoaXMuX2RhdGFbMSArIHBvcyArIGldO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwb3M7IGkrKylcclxuICAgICAgICAgIHRoaXMuX2RhdGFbcHdyIC0gcG9zICsgMSArIGldID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHB3ciAtIHBvcyArIE5VTV9UWVBFLkVYUF9CSUFTKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbG9uZyB2YWx1ZSBmcm9tIGEgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBsb25nIHZhbHVlIG9mIHRoZSBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIE5VTV8yX0xPTkcoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJldHVybiB0aGlzLk5VTV9MT05HKCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLm51bV8yX2xvbmcoKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgVWxvbmcgdmFsdWUgZnJvbSBhIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbG9uZyB2YWx1ZSBvZiB0aGUgbnVtYmVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBOVU1fMl9VTE9ORygpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmV0dXJuIHRoaXMuTlVNX0xPTkcoKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMubnVtXzJfdWxvbmcoKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbG9uZyB2YWx1ZSBmcm9tIGEgbm9uIGxvbmcgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBsb25nIHZhbHVlIG9mIHRoZSBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIG51bV8yX2xvbmcoKTogbnVtYmVyIHtcclxuICAgIGxldCBzbG9uZzogbnVtYmVyO1xyXG4gICAgbGV0IHNpZ246IG51bWJlcjtcclxuXHJcbiAgICBzaWduID0gdGhpcy5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSztcclxuICAgIHRoaXMuX2RhdGFbMF0gJj0gTlVNX1RZUEUudG9TQnl0ZSh+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIGlmIChzaWduICE9PSAwKSB7XHJcbiAgICAgIGlmIChOVU1fVFlQRS5tZW1jbXAodGhpcywgMCwgTlVNX1RZUEUuTWluTE9ORygpLCAwLCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFKSA+IDApXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoTlVNX1RZUEUubWVtY21wKHRoaXMsIDAsIE5VTV9UWVBFLk1heExPTkcoKSwgMCwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSkgPiAwKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICBzbG9uZyA9IHRoaXMubnVtXzJfdWxvbmcoKTtcclxuICAgIGlmIChzaWduICE9PSAwKSB7XHJcbiAgICAgIHNsb25nID0gLXNsb25nO1xyXG4gICAgICB0aGlzLl9kYXRhWzBdIHw9IE5VTV9UWVBFLnRvU0J5dGUoc2lnbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKHNsb25nKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgdWxvbmcgdmFsdWUgZnJvbSBhIG5vbiBsb25nIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgdWxvbmcgdmFsdWUgb2YgdGhlIG51bWJlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgbnVtXzJfdWxvbmcoKTogbnVtYmVyIHtcclxuICAgIGxldCB2YWw6IG51bWJlcjtcclxuICAgIGxldCBwd3I6IG51bWJlcjtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBsYXN0OiBib29sZWFuO1xyXG5cclxuICAgIHB3ciA9IHRoaXMuX2RhdGFbMF0gLSBOVU1fVFlQRS5FWFBfQklBUztcclxuICAgIGlmIChwd3IgPiA1KVxyXG4gICAgICByZXR1cm4gKDApO1xyXG4gICAgbGFzdCA9IChwd3IgPT09IDUpO1xyXG4gICAgaWYgKGxhc3QpXHJcbiAgICAgIHB3ciA9IDQ7XHJcblxyXG4gICAgdmFsID0gMDtcclxuICAgIGZvciAocG9zID0gMTsgcG9zIDw9IHB3cjsgcG9zKyspXHJcbiAgICAgIHZhbCA9IHZhbCAqIDEwMCArIE5VTV9UWVBFLnRvVUJ5dGUodGhpcy5fZGF0YVtwb3NdKTtcclxuXHJcbiAgICBpZiAobGFzdClcclxuICAgICAgaWYgKHZhbCA8PSBNYXRoLmZsb29yKCgweEZGRkZGRkZGIC0gTlVNX1RZUEUudG9VQnl0ZSh0aGlzLl9kYXRhWzVdKSkgLyAxMDApKVxyXG4gICAgICAgIHZhbCA9IHZhbCAqIDEwMCArIE5VTV9UWVBFLnRvVUJ5dGUodGhpcy5fZGF0YVs1XSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB2YWwgPSAwO1xyXG4gICAgcmV0dXJuICh2YWwpO1xyXG4gICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybSB0aGUgYWN0dWFsbCBhZGQgb3BlcmF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gICAgICBUaGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICAgICAgVGhlIHNlY29uZCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9wZXJEYXRhXCI+ICBJbmZvcm1hdGlvbiBmb3IgcGVyZm9ybWluZyB0aGUgb3BlcmF0aW9uXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBUaGUgdHdvIG51bWJlcnMgYWRkZWRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBhZGRfcG9zKG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSwgb3BlckRhdGE6IE9wZXJEYXRhKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IGxlbjE6IG51bWJlcjtcclxuICAgIGxldCBsZW4yOiBudW1iZXI7XHJcbiAgICBsZXQgbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgbnVtMXB0cjogbnVtYmVyO1xyXG4gICAgbGV0IHJlc3B0cjogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBTSUdOSUZJQ0FOVF9OVU1fU0laRTogbnVtYmVyO1xyXG5cclxuICAgIC8vIG51bGwgdmFsdWVzXHJcbiAgICBpZiAobnVtMSA9PSBudWxsIHx8IG51bTIgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBTSUdOSUZJQ0FOVF9OVU1fU0laRSA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG5cclxuICAgIGxldCByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgaWYgKG9wZXJEYXRhLk5VTV9FeHAyXyA9PT0gMCB8fCAob3BlckRhdGEuTlVNX0RpZmZfID49IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMSkpIHtcclxuICAgICAgcmVzID0gbmV3IE5VTV9UWVBFKG51bTEpO1xyXG4gICAgICByZXMuX2RhdGFbMF0gPSBvcGVyRGF0YS5OVU1fRXhwMV87XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgbGVuMSA9IDE7XHJcbiAgICBmb3IgKGkgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDI7IGkgPiAwOyBpIC09IDIpIHtcclxuICAgICAgaWYgKG51bTEuU0hSVF9JU19aRVJPKGkpKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbGVuMSA9IGkgKyAxO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgaWYgKG51bTEuX2RhdGFbbGVuMV0gPT09IDApXHJcbiAgICAgIGxlbjEtLTtcclxuXHJcbiAgICBsZW4yID0gMTtcclxuICAgIGZvciAoaSA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMjsgaSA+IDA7IGkgLT0gMikge1xyXG4gICAgICBpZiAobnVtMi5TSFJUX0lTX1pFUk8oaSkpXHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxlbjIgPSBpICsgMTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGlmIChudW0yLl9kYXRhW2xlbjJdID09PSAwKVxyXG4gICAgICBsZW4yLS07XHJcblxyXG4gICAgaWYgKChsZW4gPSBNYXRoLm1heChsZW4xLCBsZW4yICsgb3BlckRhdGEuTlVNX0RpZmZfKSkgPiBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpXHJcbiAgICAgIGxlbiA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMTtcclxuXHJcbiAgICByZXMuTlVNX1NFVF9aRVJPKCk7XHJcbiAgICBudW0xcHRyID0gb3BlckRhdGEuTlVNX0RpZmZfO1xyXG4gICAgcmVzcHRyID0gb3BlckRhdGEuTlVNX0RpZmZfO1xyXG4gICAgZm9yIChwb3MgPSBsZW4gLSBvcGVyRGF0YS5OVU1fRGlmZl87IHBvcyA+IDA7IHBvcy0tKSB7XHJcbiAgICAgIHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdID1cclxuICAgICAgICBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Jlc3B0ciArIHBvc10pICsgTlVNX1RZUEUudG9VQnl0ZShudW0xLl9kYXRhW251bTFwdHIgKyBwb3NdKSArIE5VTV9UWVBFLnRvVUJ5dGUobnVtMi5fZGF0YVtwb3NdKSk7XHJcbiAgICAgIGlmIChOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdKSA+PSAxMDApIHtcclxuICAgICAgICByZXMuX2RhdGFbcmVzcHRyICsgcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcmVzcHRyICsgcG9zXSkgLSAxMDApO1xyXG4gICAgICAgIHJlcy5fZGF0YVtyZXNwdHIgKyBwb3MgLSAxXSA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIGZvciAocG9zID0gb3BlckRhdGEuTlVNX0RpZmZfOyBwb3MgPiAwOyBwb3MtLSkge1xyXG4gICAgICByZXMuX2RhdGFbcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcG9zXSkgKyBOVU1fVFlQRS50b1VCeXRlKG51bTEuX2RhdGFbcG9zXSkpO1xyXG4gICAgICBpZiAoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcG9zXSkgPj0gMTAwKSB7XHJcbiAgICAgICAgcmVzLl9kYXRhW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Bvc10pIC0gMTAwKTtcclxuICAgICAgICByZXMuX2RhdGFbcG9zIC0gMV0gPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIGlmIChyZXMuX2RhdGFbMF0gIT09IDApIHtcclxuICAgICAgZm9yIChwb3MgPSBNYXRoLm1pbihsZW4sIFNJR05JRklDQU5UX05VTV9TSVpFIC0gMik7IHBvcyA+PSAwOyBwb3MtLSlcclxuICAgICAgICByZXMuX2RhdGFbcG9zICsgMV0gPSByZXMuX2RhdGFbcG9zXTtcclxuICAgICAgb3BlckRhdGEuTlVNX0V4cDFfKys7XHJcbiAgICAgICAgICB9XHJcbiAgICByZXMuX2RhdGFbMF0gPSBvcGVyRGF0YS5OVU1fRXhwMV87XHJcblxyXG4gICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtIHRoZSBhY3R1YWxsIHN1YiBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMVwiPiAgICAgIFRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gICAgICBUaGUgc2Vjb25kIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3BlckRhdGFcIj4gIEluZm9ybWF0aW9uIGZvciBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb25cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IFRoZSByZXN1bHQgb2YgdGhlIHN1YnRyYWN0aW9uIG9wZXJhdGlvblxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIHN1Yl9wb3MobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFLCBvcGVyRGF0YTogT3BlckRhdGEpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgbGVuMTogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjI6IG51bWJlcjtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBudW0xcHRyOiBudW1iZXI7XHJcbiAgICBsZXQgcmVzcHRyOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IFNJR05JRklDQU5UX05VTV9TSVpFOiBudW1iZXI7XHJcblxyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09IG51bGwgfHwgbnVtMiA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBTSUdOSUZJQ0FOVF9OVU1fU0laRSA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG5cclxuICAgIGxldCByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgajogbnVtYmVyO1xyXG5cclxuICAgIGlmIChvcGVyRGF0YS5OVU1fRXhwMl8gPT09IDAgfHwgKG9wZXJEYXRhLk5VTV9EaWZmXyA+PSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpKSB7XHJcbiAgICAgIHJlcyA9IG5ldyBOVU1fVFlQRShudW0xKTtcclxuICAgICAgcmVzLl9kYXRhWzBdID0gb3BlckRhdGEuTlVNX0V4cDFfO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGxlbjEgPSAxO1xyXG4gICAgZm9yIChpID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAyOyBpID4gMDsgaSAtPSAyKSB7XHJcbiAgICAgIGlmIChudW0xLlNIUlRfSVNfWkVSTyhpKSlcclxuICAgICAgICBjb250aW51ZTtcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxlbjEgPSBpICsgMTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGlmIChudW0xLl9kYXRhW2xlbjFdID09PSAwKVxyXG4gICAgICBsZW4xLS07XHJcblxyXG4gICAgbGVuMiA9IDE7XHJcbiAgICBmb3IgKGkgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDI7IGkgPiAwOyBpIC09IDIpIHtcclxuICAgICAgaWYgKG51bTIuU0hSVF9JU19aRVJPKGkpKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZW4yID0gaSArIDE7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICBpZiAobnVtMi5fZGF0YVtsZW4yXSA9PT0gMClcclxuICAgICAgbGVuMi0tO1xyXG5cclxuICAgIGlmICgobGVuID0gTWF0aC5tYXgobGVuMSwgbGVuMiArIG9wZXJEYXRhLk5VTV9EaWZmXykpID4gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKVxyXG4gICAgICBsZW4gPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDE7XHJcblxyXG4gICAgcmVzLk5VTV9TRVRfWkVSTygpO1xyXG4gICAgbnVtMXB0ciA9IG9wZXJEYXRhLk5VTV9EaWZmXztcclxuICAgIHJlc3B0ciA9IG9wZXJEYXRhLk5VTV9EaWZmXztcclxuICAgIGZvciAocG9zID0gbGVuIC0gb3BlckRhdGEuTlVNX0RpZmZfOyBwb3MgPiAwOyBwb3MtLSkge1xyXG5cclxuICAgICAgcmVzLl9kYXRhW3Jlc3B0ciArIHBvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Jlc3B0ciArIHBvc10pICsgTlVNX1RZUEUudG9VQnl0ZShudW0xLl9kYXRhW251bTFwdHIgKyBwb3NdKSAtIE5VTV9UWVBFLnRvVUJ5dGUobnVtMi5fZGF0YVtwb3NdKSk7XHJcbiAgICAgIGlmIChyZXMuX2RhdGFbcmVzcHRyICsgcG9zXSA8IDApIHtcclxuICAgICAgICByZXMuX2RhdGFbcmVzcHRyICsgcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcmVzcHRyICsgcG9zXSkgKyAxMDApO1xyXG4gICAgICAgIHJlcy5fZGF0YVtyZXNwdHIgKyBwb3MgLSAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoMHhGRik7IC8vIDI1NVxyXG4gICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgZm9yIChwb3MgPSBvcGVyRGF0YS5OVU1fRGlmZl87IHBvcyA+IDA7IHBvcy0tKSB7XHJcbiAgICAgIHJlcy5fZGF0YVtwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtwb3NdKSArIE5VTV9UWVBFLnRvVUJ5dGUobnVtMS5fZGF0YVtwb3NdKSk7XHJcbiAgICAgIGlmIChyZXMuX2RhdGFbcG9zXSA8IDApIHtcclxuICAgICAgICByZXMuX2RhdGFbcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcG9zXSkgKyAxMDApO1xyXG4gICAgICAgIHJlcy5fZGF0YVtwb3MgLSAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoMHhGRik7IC8vIDI1NVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICB3aGlsZSAoKCsrcG9zIDw9IGxlbikgJiYgcmVzLl9kYXRhW3Bvc10gPT09IDApIHtcclxuICAgICAgICB9XHJcbiAgICBpZiAocG9zIDw9IGxlbikge1xyXG4gICAgICBvcGVyRGF0YS5OVU1fRGlmZl8gPSBwb3MgLSAxO1xyXG4gICAgICBpZiAob3BlckRhdGEuTlVNX0RpZmZfID4gMCkge1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW4gLSBvcGVyRGF0YS5OVU1fRGlmZl87IGorKylcclxuICAgICAgICAgIHJlcy5fZGF0YVsxICsgal0gPSByZXMuX2RhdGFbcG9zICsgal07XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG9wZXJEYXRhLk5VTV9EaWZmXzsgaisrKVxyXG4gICAgICAgICAgcmVzLl9kYXRhW2xlbiAtIG9wZXJEYXRhLk5VTV9EaWZmXyArIDEgKyBqXSA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgcmVzLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAxXykgLSBvcGVyRGF0YS5OVU1fRGlmZl8pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybSB0aGUgYWN0dWFsICBGSVggb3BlcmF0aW9uIHdpdGggd2hvbGUgcGFydCBvZiB0aGUgbnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIndob2xlc1wiPm51bWJlciBvZiBuZWVkZWQgd2hvbGUgZGlnaXRzXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgbnVtX2ZpeCh3aG9sZXM6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IG51bV9kaWZmOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgdGhpcy5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgcHdyID0gKHRoaXMuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKSAtIE5VTV9UWVBFLkVYUF9CSUFTO1xyXG5cclxuICAgIGlmICgobnVtX2RpZmYgPSBwd3IgLSAoKHdob2xlcyArIDEpID4+IDEpKSA8IDApXHJcbiAgICAgIHJldHVybjtcclxuICAgIGlmIChudW1fZGlmZiA8IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSB7XHJcbiAgICAgIGlmICgod2hvbGVzICYgMSkgPT09IDEpXHJcbiAgICAgICAgdGhpcy5fZGF0YVsxICsgbnVtX2RpZmZdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLl9kYXRhWzEgKyBudW1fZGlmZl0gJSAxMCk7XHJcbiAgICAgIHdoaWxlICgobnVtX2RpZmYgPCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSkgJiYgdGhpcy5fZGF0YVsxICsgbnVtX2RpZmZdID09PSAwKVxyXG4gICAgICAgIG51bV9kaWZmKys7XHJcbiAgICAgIH1cclxuICAgIGlmIChudW1fZGlmZiA+PSB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSkge1xyXG4gICAgICAgIHRoaXMuTlVNX1pFUk8oKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICBpZiAobnVtX2RpZmYgPiAwKSB7XHJcbiAgICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSAtIG51bV9kaWZmOyBpKyspXHJcbiAgICAgICAgdGhpcy5fZGF0YVsxICsgaV0gPSB0aGlzLl9kYXRhWzEgKyBudW1fZGlmZiArIGldO1xyXG5cclxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9kaWZmOyBpKyspXHJcbiAgICAgICAgdGhpcy5fZGF0YVt0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gbnVtX2RpZmYgKyBpXSA9IDA7XHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuX2RhdGFbMF0gLSBOVU1fVFlQRS50b1NCeXRlKG51bV9kaWZmKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hlY2sgaWYgYnl0ZSBvbiBzcGVjaWZpYyBwb3NpdGlvbiBpcyB6ZXJvIG9yIDB4RkZcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicG9zaXRpb25cIj5pbiBOVU0gdG8gYmUgY2hlY2tlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gaXMgdGhlIGJ5dGUgemVyb1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgU0hSVF9JU19aRVJPKHBvczogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YVtwb3NdID09PSAwICYmIHRoaXMuX2RhdGFbcG9zICsgMV0gPT09IDA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgWmVybyBhIE1hZ2ljIE51bWJlci4gSWYgdGhlIG51bWJlciBzaG91bGQgY29udGFpbiBhIGxvbmcgemVybywgdGhlIGZpcnN0XHJcbiAgLy8vICAgYnl0ZSBpcyBzZXQgdG8gTlVNX0xPTkdfVFlQRS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYXNMb25nXCI+ICBzZXQgdGhlIE1hZ2ljIE51bWJlciB0byBjb250YWluIGEgbG9uZyB6ZXJvIHZhbHVlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzZXRaZXJvKGFzTG9uZzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX1RZUEUuTlVNX1NJWkU7IGkrKylcclxuICAgICAgdGhpcy5fZGF0YVtpXSA9IDA7XHJcblxyXG4gICAgaWYgKGFzTG9uZylcclxuICAgICAgdGhpcy5fZGF0YVswXSA9IE5VTV9UWVBFLk5VTV9MT05HX1RZUEU7XHJcbiAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb21wYXJlIHR3byBNYWdpYyBOdW1iZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gIFRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBvczFcIj4gIFRoZSBwb3NpdGlvbiBvZiBudW0xIHRvIGNvbXBhcmUgZnJvbVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMlwiPiAgVGhlIHNlY29uZCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBvczNcIj4gIFRoZSBwb3NpdGlvbiBvZiBudW0yIHRvIGNvbXBhcmUgZnJvbVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gMCBpZiBpZGVudGljYWwsIDEgaWYgbnVtMT5udW0yLCAtMSBpZiBudW0xPG51bTJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIG1lbWNtcChudW0xOiBOVU1fVFlQRSwgcG9zMTogbnVtYmVyLCBudW0yOiBOVU1fVFlQRSwgcG9zMjogbnVtYmVyLCBsZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMDtcclxuXHJcbiAgICB3aGlsZSAoaSA8IGxlbiAmJiBudW0xLl9kYXRhW3BvczFdID09PSBudW0yLl9kYXRhW3BvczJdICYmIHBvczEgPCBOVU1fVFlQRS5OVU1fU0laRSAmJiBwb3MyIDwgTlVNX1RZUEUuTlVNX1NJWkUpIHtcclxuICAgICAgaSsrO1xyXG4gICAgICBwb3MxKys7XHJcbiAgICAgIHBvczIrKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaSA9PT0gbGVuKVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIGVsc2UgaWYgKHRoaXMudG9VQnl0ZShudW0xLl9kYXRhW3BvczFdKSA8IHRoaXMudG9VQnl0ZShudW0yLl9kYXRhW3BvczJdKSlcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gMTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgYSB1bnNpZ25lZCB2YWx1ZSBmcm9tIGEgYnl0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJieXRlVmFsXCI+ICBBIHNpZ25lZCBieXRlIHZhbHVlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgdW5zaWduZWQgdmFsdWUgb2YgdGhlIGJ5dGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyB0b1VCeXRlKGJ5dGVWYWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgdmFsOiBudW1iZXIgPSBieXRlVmFsO1xyXG5cclxuICAgIGlmIChieXRlVmFsIDwgMClcclxuICAgICAgdmFsID0gMjU2ICsgYnl0ZVZhbDtcclxuXHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIHNpZ25lZCBieXRlIHZhbHVlIGZyb20gYSB1bnNpZ25lZCB2YWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic2lnbmVkVmFsXCI+ICBBbiB1bnNpZ25lZCBieXRlIHZhbHVlIChhcyBhbiBpbnRlZ2VyKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHNpZ25lZCB2YWx1ZSBhcyBhIGJ5dGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyB0b1NCeXRlKHVuc2lnbmVkVmFsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHZhbDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodW5zaWduZWRWYWwgPiBDb25zdGFudHMuU0J5dGVNYXhWYWx1ZSlcclxuICAgICAgdmFsID0gKHVuc2lnbmVkVmFsIC0gMjU2KTtcclxuICAgIGVsc2VcclxuICAgICAgdmFsID0gdW5zaWduZWRWYWw7XHJcblxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIG1heGltdW0gbG9uZyBudW1iZXIgaW4gTlVNX1RZUEUgc3RkIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIE1heExPTkcoKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IG5VTV9UWVBFOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgblVNX1RZUEUuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNSk7XHJcbiAgICBuVU1fVFlQRS5fZGF0YVsxXSA9IDIxO1xyXG4gICAgblVNX1RZUEUuX2RhdGFbMl0gPSA0NztcclxuICAgIG5VTV9UWVBFLl9kYXRhWzNdID0gNDg7XHJcbiAgICBuVU1fVFlQRS5fZGF0YVs0XSA9IDM2O1xyXG4gICAgblVNX1RZUEUuX2RhdGFbNV0gPSA0NztcclxuICAgIHJldHVybiBuVU1fVFlQRTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIG1pbmltdW0gbG9uZyBudW1iZXIgaW4gTlVNX1RZUEUgc3RkIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIE1pbkxPTkcoKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IG51bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIG51bS5fZGF0YVswXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA1KTtcclxuICAgIG51bS5fZGF0YVsxXSA9IDIxO1xyXG4gICAgbnVtLl9kYXRhWzJdID0gNDc7XHJcbiAgICBudW0uX2RhdGFbM10gPSA0ODtcclxuICAgIG51bS5fZGF0YVs0XSA9IDM2O1xyXG4gICAgbnVtLl9kYXRhWzVdID0gNDg7XHJcbiAgICByZXR1cm4gbnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBkb3VibGUgbnVtYmVyIGZyb20gTWFnaWMgTlVNX1RZUEVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHRvX2RvdWJsZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZV9tZ18yX2Zsb2F0KDgpOyAvLyBMZW5ndGggb2YgZG91YmxlIGlzIDggYnl0ZVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBkb3VibGUgbnVtYmVyIGZyb20gTWFnaWMgTlVNX1RZUEVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGVuXCI+b2YgYnl0ZSBvZiBuZWVkZWQgbnVtYmVyIC0gVVNFIDhcclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIHN0b3JhZ2VfbWdfMl9mbG9hdChsZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc2lnbl9wb3M6IG51bWJlcjtcclxuICAgIGxldCBzaWduOiBudW1iZXI7XHJcbiAgICBsZXQgY29tcG51bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCB0bXBudW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgZGl2bnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IGJpdHM6IG51bWJlcjtcclxuICAgIGxldCBleHA6IG51bWJlcjtcclxuICAgIGxldCBsb25nMTogbnVtYmVyID0gMDtcclxuICAgIGxldCBsb25nMjogbnVtYmVyID0gMDtcclxuICAgIGxldCBmbHRPdXQ6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgY291dDogSW50OEFycmF5ID0gbmV3IEludDhBcnJheShbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0pO1xyXG4gICAgbGV0IE51bTJQd3IyM186IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA0KSwgOCwgMzgsIDg2LCA4XSk7XHJcbiAgICBsZXQgTnVtMlB3cjUyXzogSW50OEFycmF5ID0gbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDgpLCA0NSwgMywgNTksIDk2LCAyNywgMzcsIDQsIDk2XSk7XHJcbiAgICBsZXQgYmFzZV9OdW0xNlB3cnM6IEludDhBcnJheVtdID0gW1xyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDFdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAxNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMiksIDIsIDU2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAyKSwgNDAsIDk2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAzKSwgNiwgNTUsIDM2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA0KSwgMSwgNCwgODUsIDc2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA0KSwgMTYsIDc3LCA3MiwgMTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDUpLCAyLCA2OCwgNDMsIDU0LCA1Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNSksIDQyLCA5NCwgOTYsIDcyLCA5Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNiksIDYsIDg3LCAxOSwgNDcsIDY3LCAzNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNyksIDEsIDksIDk1LCAxMSwgNjIsIDc3LCA3Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNyksIDE3LCA1OSwgMjEsIDg2LCA0LCA0NCwgMTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDgpLCAyLCA4MSwgNDcsIDQ5LCA3NiwgNzEsIDYsIDU2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA4KSwgNDUsIDMsIDU5LCA5NiwgMjcsIDM3LCA0LCA5Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgOSksIDcsIDIwLCA1NywgNTksIDQwLCAzNywgOTIsIDc5LCAzNl0pXHJcbiAgICBdO1xyXG5cclxuICAgIGxldCBiYXNlX051bTJQd3JzOiBJbnQ4QXJyYXlbXSA9IFtcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAxXSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgMl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDRdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCA4XSlcclxuICAgICAgXTtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICB0aGlzLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICBpZiAodGhpcy5fZGF0YVswXSA9PT0gMClcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICBzaWduID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIHRoaXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuX2RhdGFbMF0gJiA8bnVtYmVyPih+TlVNX1RZUEUuU0lHTl9NQVNLKSk7XHJcbiAgICBpZiAobGVuID09PSA0KSB7XHJcbiAgICAgIGJpdHMgPSAyNDtcclxuICAgICAgY29tcG51bSA9IG5ldyBOVU1fVFlQRShOdW0yUHdyMjNfKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBiaXRzID0gNTM7XHJcbiAgICAgIGNvbXBudW0gPSBuZXcgTlVNX1RZUEUoTnVtMlB3cjUyXyk7XHJcbiAgICB9XHJcbiAgICBwd3IgPSAodGhpcy5fZGF0YVswXSAtIE5VTV9UWVBFLkVYUF9CSUFTKSA8PCAxO1xyXG4gICAgaWYgKHB3ciA8IDApXHJcbiAgICAgIGV4cCA9IHB3ciAqIDMgKyBNYXRoLmZsb29yKChwd3IgKyAxKSAvIDMpO1xyXG4gICAgZWxzZSBleHAgPSBwd3IgKiAzICsgTWF0aC5mbG9vcigocHdyICsgMikgLyAzKTtcclxuICAgIHB3ciA9IGJpdHMgLSBleHA7XHJcbiAgICBpZiAocHdyIDwgMCkge1xyXG4gICAgICBwd3IgPSAtcHdyO1xyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5kaXYodGhpcywgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzW3B3ciA+PiAyXSkpO1xyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5kaXYodG1wbnVtLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0yUHdyc1twd3IgJiAzXSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRtcG51bSA9IHRoaXM7XHJcbiAgICAgIHdoaWxlIChwd3IgPj0gNjApIHtcclxuICAgICAgICB0bXBudW0gPSBOVU1fVFlQRS5tdWwodG1wbnVtLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0xNlB3cnNbMTRdKSk7XHJcbiAgICAgICAgcHdyIC09IDU2O1xyXG4gICAgICB9XHJcbiAgICAgIHRtcG51bSA9IE5VTV9UWVBFLm11bCh0bXBudW0sIG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1twd3IgPj4gMl0pKTtcclxuICAgICAgdG1wbnVtID0gTlVNX1RZUEUubXVsKHRtcG51bSwgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMlB3cnNbcHdyICYgM10pKTtcclxuICAgIH1cclxuICAgIHdoaWxlIChOVU1fVFlQRS5udW1fY21wKHRtcG51bSwgY29tcG51bSkgPCAwKSB7XHJcbiAgICAgIGV4cC0tO1xyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5hZGQodG1wbnVtLCB0bXBudW0pO1xyXG4gICAgfVxyXG4gICAgaWYgKGxlbiA9PT0gNCkge1xyXG4gICAgICBsb25nMSA9IHRtcG51bS5udW1fMl91bG9uZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGRpdm51bSA9IE5VTV9UWVBFLmRpdih0bXBudW0sIG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1s4XSkpO1xyXG4gICAgICBkaXZudW0ubnVtX3RydW5jKDApO1xyXG4gICAgICBsb25nMSA9IGRpdm51bS5udW1fMl91bG9uZygpO1xyXG4gICAgICBkaXZudW0gPSBOVU1fVFlQRS5tdWwoZGl2bnVtLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0xNlB3cnNbOF0pKTtcclxuICAgICAgZGl2bnVtID0gTlVNX1RZUEUuc3ViKHRtcG51bSwgZGl2bnVtKTtcclxuICAgICAgbG9uZzIgPSBkaXZudW0ubnVtXzJfdWxvbmcoKTtcclxuICAgIH1cclxuICAgIHNpZ25fcG9zID0gbGVuIC0gMTtcclxuICAgIGlmIChsZW4gPT09IDQpIHtcclxuICAgICAgZXhwICs9IDEyNjtcclxuICAgICAgY291dFszXSA9IE5VTV9UWVBFLnRvU0J5dGUoZXhwID4+IDEpO1xyXG4gICAgICBjb3V0WzJdID0gTlVNX1RZUEUudG9TQnl0ZSgodGhpcy5MT19DSEFSKHRoaXMuSElfU0hSVChsb25nMSkpICYgMHg3RikgfCAoKGV4cCAmIDB4MDEpIDw8IDcpKTtcclxuICAgICAgY291dFsxXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5ISV9DSEFSKHRoaXMuTE9fU0hSVChsb25nMSkpKTtcclxuICAgICAgY291dFswXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5MT19DSEFSKHRoaXMuTE9fU0hSVChsb25nMSkpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBleHAgKz0gMTAyMjtcclxuICAgICAgY291dFs3XSA9IE5VTV9UWVBFLnRvU0J5dGUoZXhwID4+IDQpO1xyXG5cclxuICAgICAgY291dFs2XSA9IE5VTV9UWVBFLnRvU0J5dGUoKHRoaXMuTE9fQ0hBUih0aGlzLkhJX1NIUlQobG9uZzEpKSAmIDB4MEYpIHwgKChleHAgJiAweDBGKSA8PCA0KSk7XHJcblxyXG4gICAgICBjb3V0WzVdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLkhJX0NIQVIodGhpcy5MT19TSFJUKGxvbmcxKSkpO1xyXG5cclxuICAgICAgY291dFs0XSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5MT19DSEFSKHRoaXMuTE9fU0hSVChsb25nMSkpKTtcclxuICAgICAgY291dFszXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5ISV9DSEFSKHRoaXMuSElfU0hSVChsb25nMikpKTtcclxuICAgICAgY291dFsyXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5MT19DSEFSKHRoaXMuSElfU0hSVChsb25nMikpKTtcclxuICAgICAgY291dFsxXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5ISV9DSEFSKHRoaXMuTE9fU0hSVChsb25nMikpKTtcclxuICAgICAgY291dFswXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5MT19DSEFSKHRoaXMuTE9fU0hSVChsb25nMikpKTtcclxuICAgIH1cclxuICAgIGlmIChzaWduICE9PSAwKSB7XHJcbiAgICAgIGNvdXRbc2lnbl9wb3NdIHw9IE5VTV9UWVBFLlNJR05fTUFTSztcclxuICAgICAgdGhpcy5fZGF0YVswXSB8PSBOVU1fVFlQRS5TSUdOX01BU0s7XHJcbiAgICB9XHJcbiAgICBmbHRPdXQgPSB0aGlzLnNieXRlQXJyXzJfRG91YmxlKGNvdXQpO1xyXG4gICAgcmV0dXJuIGZsdE91dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCaXRfV2lzZSBtYXNrIDogTGVhdmUgbGFzdCBieXRlIGluIG51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBMT19DSEFSKG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gbiAmIDI1NTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCaXRfV2lzZSBtYXNrIDogTGVhdmUgYnl0ZSBiZWZvcmUgbGFzdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBISV9DSEFSKG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKG4gJiA2NTI4MCkgPj4gODtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCaXRfV2lzZSBtYXNrIDogTGVhdmUgMiBsYXN0IGJ5dGVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIExPX1NIUlQobjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiA8bnVtYmVyPihuICYgNjU1MzUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJpdF9XaXNlIG1hc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgSElfU0hSVChuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDxudW1iZXI+KChuICYgLTY1NTM2KSA+PiAxNik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQml0X1dpc2UgbWFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTUtfU0hSVChjMTogbnVtYmVyLCBjMjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBzdHJJbnQ6IHN0cmluZyA9IChjMSA8PCA4IHwgYzIpLnRvU3RyaW5nKCk7XHJcbiAgICByZXR1cm4gTk51bWJlci5QYXJzZShzdHJJbnQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJpdF9XaXNlIG1hc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc3RhdGljIE1LX0xPTkcoczE6IG51bWJlciwgczI6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgbDE6IG51bWJlciA9IDxudW1iZXI+czE7XHJcbiAgICBsZXQgbDI6IG51bWJlciA9IDxudW1iZXI+czI7XHJcbiAgICBsZXQgc3RyTG5nOiBzdHJpbmcgPSAobDEgPDwgMTYgfCBsMikudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBOTnVtYmVyLlBhcnNlKHN0ckxuZyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBkb3VibGUgZnJvbSBhcnJheSBvZiBieXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhcnJheVwiPm9mIGJ5dGVzLCBpbm5lciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG91YmxlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBkb3VibGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc2J5dGVBcnJfMl9Eb3VibGUoYXJyYXk6IEludDhBcnJheSk6IG51bWJlciB7XHJcbiAgICBsZXQgZGF0YXZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXkuYnVmZmVyKTtcclxuICAgIHJldHVybiBkYXRhdmlldy5nZXRGbG9hdDY0KDAsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBieXRlIGFycmF5IGZvciBkb3VibGUgKDggYnl0ZXMgaW4gSmF2YSlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZG91YmxlXCI+dG8gZ2V0IGl0cyBieXRlIHJlcHJlc2VudGF0aW9uXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBieXRlIGFycmF5XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBkb3VibGVfMl9zYnl0ZUFycmF5KGQ6IG51bWJlcik6IEludDhBcnJheSB7XHJcbiAgICBsZXQgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xyXG4gICAgbGV0IGRhdGF2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcik7XHJcbiAgICBkYXRhdmlldy5zZXRGbG9hdDY0KDAsIGQsIHRydWUpO1xyXG4gICAgcmV0dXJuIChuZXcgSW50OEFycmF5KGRhdGF2aWV3LmJ1ZmZlcikpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBlcmZvcm1pbmcgYW4gUG93ZXIgb3BlcmF0aW9uIG9uIHR3byBtYWdpYyBudW1iZXJzIFZhbDFeVmFsMlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICB0aGUgZmlyc3QgbnVtYmVyIC0gbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICB0aGUgZmlyc3QgbnVtYmVyIC0gcG93ZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXN1bHRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBldmFsX29wX3B3cihudW0xOiBOVU1fVFlQRSwgbnVtMjogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgZDA6IG51bWJlcjtcclxuICAgIGxldCBkMTogbnVtYmVyO1xyXG5cclxuICAgIC8vIG51bGwgdmFsdWVzXHJcbiAgICBpZiAobnVtMSA9PSBudWxsIHx8IG51bTIgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgLy8gSWYgc2Vjb25kIG9wZXJhdG9yIGlzIGFuIGludGVnZXIgKHdoaWNoIGlzIHNvIGluIG1vc3Qgb2YgdGhlIGNhc2VzKVxyXG4gICAgLy8gYW5kIGl0IGlzIG5vdCAtdmUsIHRoZW4gY2FsY3VsYXRlIHBvd2VyIHVzaW5nIHNpbXBsZSBtdWx0aXBsaWNhdGlvblxyXG4gICAgLy8gVGhlcmUgaXMgYSBwcm9ibGVtIGluIGZyb21fZG91YmxlIGFzIGl0IGRvZXNuJ3QgcmV0dXJuIGV4YWN0XHJcbiAgICAvLyB2YWx1ZXMgKGZvciBleGFtcGxlLCBwYXNzaW5nIDEuMDAyNDQxIGluIG51bSB0byBmcm9tX2RvdWJsZSB3b3VsZFxyXG4gICAgLy8gcmV0dXJuIDEuMDAyNDQwOTk5OTk5OTkpLiBidHcsIHRoaXMgcHJvYmxlbSBleGlzdHMgZXZlbiBpbiBWaXN1YWwgc3R1ZGlvJ3NcclxuICAgIC8vIHdhdGNoIHdpbmRvdyAodHJ5IHR5cGluZyAxLjAwMjQ0MSBpbiBOYW1lIGNvbHVtbiBvZiB3YXRjaCB3aW5kb3cpLlxyXG4gICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSAmJiAhbnVtMi5udW1faXNfbmVnKCkpIHtcclxuICAgICAgZDEgPSBudW0yLnRvX2RvdWJsZSgpO1xyXG4gICAgICBsZXQgcmVzdWx0OiBOVU1fVFlQRSA9IE5VTV9UWVBFLmZyb21fZG91YmxlKDEpO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZDE7IGkrKylcclxuICAgICAgICByZXN1bHQgPSB0aGlzLm11bChyZXN1bHQsIG51bTEpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgZDAgPSBudW0xLnRvX2RvdWJsZSgpO1xyXG4gICAgICBkMSA9IG51bTIudG9fZG91YmxlKCk7XHJcbiAgICAgIGlmIChkMCA8IDAuMCAmJiBkMSAhPT0gPG51bWJlcj4gZDEpXHJcbiAgICAgICAgZDAgPSAwLjA7XHJcbiAgICAgIC8qIHB3ciAoMC4wLCAwLjApIC0+IGVycm9yICovXHJcbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgICAgIGVsc2UgaWYgKGQwICE9PSAwLjApXHJcbiAgICAgICAgZDAgPSBNYXRoLnBvdyhkMCwgZDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOVU1fVFlQRS5mcm9tX2RvdWJsZShkMCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJhbnNsYXRlIGRvdWJsZSB0byBOVU1fVFlQRVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkb3VibGVcIj50byB0cmFuc2xhdGVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IE5VTV9UWVBFIG9mIHRoZSBkb3VibGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBmcm9tX2RvdWJsZShkMDogbnVtYmVyKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IGFycmF5OiBJbnQ4QXJyYXkgPSBOVU1fVFlQRS5kb3VibGVfMl9zYnl0ZUFycmF5KGQwKTtcclxuICAgIHJldHVybiBOVU1fVFlQRS5zdG9yYWdlX21nXzRfZmxvYXQoOCwgYXJyYXkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSBieXRlIGFycmF5ICB0byBOVU1fVFlQRVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZW5cIj5vZiB0aGUgbmVlZGVkIG51bWJlcig4KVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYnl0ZVwiPmFycmF5IG1hc2tcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IE5VTV9UWVBFIGZvciB0aGUgbmVlZGVkIGF0dHJpYnV0ZXNcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIHN0b3JhZ2VfbWdfNF9mbG9hdChsZW46IG51bWJlciwgaW5wOiBJbnQ4QXJyYXkpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgY2lucDogbnVtYmVyW107XHJcbiAgICBsZXQgc2lnbjogbnVtYmVyO1xyXG4gICAgbGV0IHRtcDE6IG51bWJlcjtcclxuICAgIGxldCBleHA6IG51bWJlcjtcclxuICAgIGxldCBiaWFzOiBudW1iZXI7XHJcbiAgICBsZXQgbG9uZzE6IG51bWJlcjtcclxuICAgIGxldCBsb25nMjogbnVtYmVyO1xyXG5cclxuICAgIGNpbnAgPSBuZXcgQXJyYXk8bnVtYmVyPihpbnAubGVuZ3RoKTtcclxuICAgIGZvciAodG1wMSA9IDA7XHJcbiAgICAgICAgIHRtcDEgPCBpbnAubGVuZ3RoO1xyXG4gICAgICAgICB0bXAxKyspXHJcbiAgICAgIGNpbnBbdG1wMV0gPSBOVU1fVFlQRS50b1VCeXRlKGlucFt0bXAxXSk7XHJcblxyXG4gICAgc2lnbiA9IGNpbnBbbGVuIC0gMV07XHJcbiAgICBpZiAobGVuID09PSA0KSB7XHJcbiAgICAgIGV4cCA9IDxudW1iZXI+KChjaW5wWzJdID4+IDcpIHwgKChjaW5wWzNdICYgMHg3RikgPDwgMSkpO1xyXG4gICAgICBiaWFzID0gMTUwOyAvLyAxMjYgKyAoMSArIDIzKTtcclxuICAgICAgbG9uZzEgPSAwO1xyXG4gICAgICBsb25nMiA9IE5VTV9UWVBFLk1LX0xPTkcoTlVNX1RZUEUuTUtfU0hSVCgwLCBjaW5wWzJdIHwgMHg4MCksIE5VTV9UWVBFLk1LX1NIUlQoY2lucFsxXSwgY2lucFswXSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGV4cCA9IDxudW1iZXI+KCgoY2lucFs3XSAmIDB4N0YpIDw8IDQpIHwgKGNpbnBbNl0gPj4gNCkpO1xyXG4gICAgICBiaWFzID0gMTA3NTsgLy8gMTAyMiArICgxICsgMjAgKyAzMik7XHJcbiAgICAgIGxvbmcxID0gTlVNX1RZUEUuTUtfTE9ORyhOVU1fVFlQRS5NS19TSFJUKDAsIChjaW5wWzZdICYgMHgwRikgfCAweDEwKSwgTlVNX1RZUEUuTUtfU0hSVChjaW5wWzVdLCBjaW5wWzRdKSk7XHJcbiAgICAgIGxvbmcyID0gTlVNX1RZUEUuTUtfTE9ORyhOVU1fVFlQRS5NS19TSFJUKGNpbnBbM10sIGNpbnBbMl0pLCBOVU1fVFlQRS5NS19TSFJUKGNpbnBbMV0sIGNpbnBbMF0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBOVU1fVFlQRS5zdG9yYWdlX251bV80X2ZsZF9mbHQobG9uZzEsIGxvbmcyLCAxOCwgc2lnbiwgYmlhcywgZXhwKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cmFuc2xhdGUgYnl0ZSBhcnJheSAgdG8gTlVNX1RZUEUgKGxpa2UgaW4gTWFnaWMgU291Y2UgY29kZSkuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHN0YXRpYyBzdG9yYWdlX251bV80X2ZsZF9mbHQobG9uZzE6IG51bWJlciwgbG9uZzI6IG51bWJlciwgZGVjOiBudW1iZXIsIHNpZ246IG51bWJlciwgYmlhczogbnVtYmVyLCBleHByOiBudW1iZXIpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgYmFzZV9OdW0xNlB3cnM6IEludDhBcnJheVtdID0gW1xyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDFdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAxNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMiksIDIsIDU2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAyKSwgNDAsIDk2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAzKSwgNiwgNTUsIDM2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA0KSwgMSwgNCwgODUsIDc2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA0KSwgMTYsIDc3LCA3MiwgMTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDUpLCAyLCA2OCwgNDMsIDU0LCA1Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNSksIDQyLCA5NCwgOTYsIDcyLCA5Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNiksIDYsIDg3LCAxOSwgNDcsIDY3LCAzNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNyksIDEsIDksIDk1LCAxMSwgNjIsIDc3LCA3Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNyksIDE3LCA1OSwgMjEsIDg2LCA0LCA0NCwgMTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDgpLCAyLCA4MSwgNDcsIDQ5LCA3NiwgNzEsIDYsIDU2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA4KSwgNDUsIDMsIDU5LCA5NiwgMjcsIDM3LCA0LCA5Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgOSksIDcsIDIwLCA1NywgNTksIDQwLCAzNywgOTIsIDc5LCAzNl0pXHJcbiAgICBdO1xyXG5cclxuICAgIGxldCBiYXNlX051bTJQd3JzOiBJbnQ4QXJyYXlbXSA9IFtcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAxXSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgMl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDRdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCA4XSlcclxuICAgIF07XHJcbiAgICBsZXQgdG1wbnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG91dFZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBleHA6IG51bWJlciA9IDxudW1iZXI+ZXhwcjtcclxuICAgIGlmIChleHAgPT09IDApIHtcclxuICAgICAgb3V0VmFsLk5VTV9aRVJPKCk7XHJcbiAgICAgIHJldHVybiBvdXRWYWw7XHJcbiAgICB9XHJcbiAgICBvdXRWYWwubnVtXzRfdWxvbmcobG9uZzIpO1xyXG4gICAgaWYgKGxvbmcxICE9PSAwKSB7XHJcbiAgICAgIHRtcG51bS5udW1fNF91bG9uZyhsb25nMSk7XHJcbiAgICAgIHRtcG51bSA9IE5VTV9UWVBFLm11bCh0bXBudW0sIG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1s4XSkpO1xyXG4gICAgICBvdXRWYWwgPSBOVU1fVFlQRS5hZGQodG1wbnVtLCBvdXRWYWwpO1xyXG4gICAgfVxyXG4gICAgZXhwID0gPG51bWJlcj4oZXhwIC0gYmlhcyk7XHJcbiAgICBpZiAoZXhwIDwgMCkge1xyXG4gICAgICBleHAgPSAtZXhwO1xyXG4gICAgICB3aGlsZSAoZXhwID49IDYwKSB7XHJcbiAgICAgICAgb3V0VmFsID0gTlVNX1RZUEUuZGl2KG91dFZhbCwgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzWzE0XSkpO1xyXG4gICAgICAgIGV4cCAtPSA1NjtcclxuICAgICAgfVxyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5tdWwobmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzW2V4cCA+PiAyXSksXHJcbiAgICAgICAgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMlB3cnNbZXhwICYgM10pKTtcclxuICAgICAgb3V0VmFsID0gTlVNX1RZUEUuZGl2KG91dFZhbCwgdG1wbnVtKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZXhwID49IDYwKSB7XHJcbiAgICAgICAgb3V0VmFsLk5VTV9aRVJPKCk7XHJcbiAgICAgICAgcmV0dXJuIG91dFZhbDtcclxuICAgICAgfVxyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5tdWwobmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzW2V4cCA+PiAyXSksXHJcbiAgICAgICAgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMlB3cnNbZXhwICYgM10pKTtcclxuICAgICAgb3V0VmFsID0gTlVNX1RZUEUubXVsKG91dFZhbCwgdG1wbnVtKTtcclxuICAgIH1cclxuICAgIGlmICgoc2lnbiAmIDB4ODApICE9PSAwKVxyXG4gICAgICBvdXRWYWwuX2RhdGFbMF0gPSBvdXRWYWwuX2RhdGFbMF0gfCBOVU1fVFlQRS5TSUdOX01BU0s7XHJcbiAgICBvdXRWYWwucm91bmQoZGVjKTtcclxuICAgIHJldHVybiBvdXRWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWF0aGVtYXRpY2FsIGZ1bmN0aW9ucyBpbXBsZW1lbnRhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGV2YWxfb3BfbG9nKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcblxyXG4gICAgaWYgKGQgPiAwLjApXHJcbiAgICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKE1hdGgubG9nKGQpKTtcclxuICAgIGVsc2VcclxuICAgICAgcmVzVmFsLk5VTV9aRVJPKCk7XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV2YWxfb3BfZXhwKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEU7XHJcblxyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgZDogbnVtYmVyID0gdmFsMS50b19kb3VibGUoKTtcclxuICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKE1hdGguZXhwKGQpKTtcclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXZhbF9vcF9hYnModmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSh2YWwxKTtcclxuICAgIHJlc1ZhbC5udW1fYWJzKCk7XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV2YWxfb3Bfc2luKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLnRvX2RvdWJsZSgpO1xyXG4gICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC5zaW4oZCkpO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX2Nvcyh2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGlmICh2YWwxID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIGxldCByZXNWYWw6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLnRvX2RvdWJsZSgpO1xyXG4gICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC5jb3MoZCkpO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX3Rhbih2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGlmICh2YWwxID09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLnRvX2RvdWJsZSgpO1xyXG4gICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC50YW4oZCkpO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX2FzaW4odmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcbiAgICBpZiAoZCA8PSAxLjAgJiYgZCA+PSAtMS4wKVxyXG4gICAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShNYXRoLmFzaW4oZCkpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZSgwLjApO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX2Fjb3ModmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcblxyXG4gICAgaWYgKGQgPD0gMS4wICYmIGQgPj0gLTEuMClcclxuICAgICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC5hY29zKGQpKTtcclxuICAgIGVsc2VcclxuICAgICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoMC4wKTtcclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXZhbF9vcF9hdGFuKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcbiAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShNYXRoLmF0YW4oZCkpO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIG51bV9hYnMoKTogdm9pZCB7XHJcbiAgICBsZXQgbDogbnVtYmVyO1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICBsID0gdGhpcy5OVU1fTE9ORygpO1xyXG4gICAgICBpZiAobCA8IDApXHJcbiAgICAgICAgbCA9IC1sO1xyXG4gICAgICB0aGlzLk5VTV80X0xPTkcobCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2RhdGFbMF0gJj0gTlVNX1RZUEUudG9TQnl0ZSh+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSYW5kb21hbCBNYXRoIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgZXZhbF9vcF9yYW5kKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCByYW5kX2luaXRpYWxpemVkOiBib29sZWFuID0gUmFuZG9taXplci5nZXRfaW5pdGlhbGl6ZWQoKTtcclxuICAgIGxldCByYW5kX21vZDogTlVNX1RZUEU7XHJcbiAgICBsZXQgcmFuZF9tdWw6IE5VTV9UWVBFO1xyXG4gICAgbGV0IHJhbmRfc2VlZDogTlVNX1RZUEU7XHJcblxyXG4gICAgbGV0IHRtcF9udW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgaWYgKCFyYW5kX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIFJhbmRvbWl6ZXIuc2V0X2luaXRpYWxpemVkKCk7IC8vIHNldCB0byB0cnVlXHJcbiAgICAgIHJhbmRfbW9kID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgIHJhbmRfbXVsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgIHJhbmRfc2VlZCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICByYW5kX21vZC5udW1fNF9hX3N0ZChcIjEwMDAwMDAwN1wiKTtcclxuICAgICAgcmFuZF9tdWwubnVtXzRfYV9zdGQoXCI3NTAwMDAwN1wiKTtcclxuICAgICAgcmFuZF9zZWVkLm51bV80X2Ffc3RkKFwiMTIzNDU2NzhcIik7XHJcblxyXG4gICAgICBSYW5kb21pemVyLnNldF9tb2QocmFuZF9tb2QudG9fZG91YmxlKCkpO1xyXG4gICAgICBSYW5kb21pemVyLnNldF9tdWwocmFuZF9tdWwudG9fZG91YmxlKCkpO1xyXG4gICAgICBSYW5kb21pemVyLnNldF9zZWVkKHJhbmRfc2VlZC50b19kb3VibGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICByYW5kX21vZCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKFJhbmRvbWl6ZXIuZ2V0X21vZCgpKTtcclxuICAgICAgcmFuZF9tdWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShSYW5kb21pemVyLmdldF9tdWwoKSk7XHJcbiAgICAgIHJhbmRfc2VlZCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKFJhbmRvbWl6ZXIuZ2V0X3NlZWQoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGlmICghdmFsMS5udW1faXNfemVybygpKSB7XHJcbiAgICAgIGlmICh2YWwxLm51bV9pc19uZWcoKSlcclxuICAgICAgICByYW5kX3NlZWQuTlVNXzRfTE9ORyhOVU1fVFlQRS5oYXNoX3JhbmQoKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByYW5kX3NlZWQgPSBuZXcgTlVNX1RZUEUodmFsMSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgIGlmIChyYW5kX3NlZWQubnVtX2lzX25lZygpKSB7XHJcbiAgICAgICAgdG1wX251bS5OVU1fNF9MT05HKC0xKTtcclxuICAgICAgICByYW5kX3NlZWQgPSBOVU1fVFlQRS5tdWwocmFuZF9zZWVkLCB0bXBfbnVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJhbmRfc2VlZCA9IE5VTV9UWVBFLm11bChyYW5kX3NlZWQsIHJhbmRfbXVsKTtcclxuICAgIHJhbmRfc2VlZCA9IE5VTV9UWVBFLm1vZChyYW5kX3NlZWQsIHJhbmRfbW9kKTtcclxuICAgIHRtcF9udW0gPSBOVU1fVFlQRS5kaXYocmFuZF9zZWVkLCByYW5kX21vZCk7XHJcbiAgICAvLyByZXNldCBnbG9iYWxzIHZhcmlhYmxlc1xyXG4gICAgUmFuZG9taXplci5zZXRfbW9kKHJhbmRfbW9kLnRvX2RvdWJsZSgpKTtcclxuICAgIFJhbmRvbWl6ZXIuc2V0X211bChyYW5kX211bC50b19kb3VibGUoKSk7XHJcbiAgICBSYW5kb21pemVyLnNldF9zZWVkKHJhbmRfc2VlZC50b19kb3VibGUoKSk7XHJcbiAgICByZXR1cm4gdG1wX251bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYSByYW5kb20gdmFsdWUgdG8gdXNlIGFzIHRoZSBjdGwgZW5jcmlwdGlvbiAga2V5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHN0YXRpYyBoYXNoX3JhbmQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoKG5ldyBEYXRlKCkuZ2V0TWlsbGlzZWNvbmRzKCkpIF4gTWF0aC5yYW5kb20oKSAqIDEyMzQ1Njc4KTtcclxuICAgIC8vIGxldCBhcnJheTogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPigxMDApO1xyXG4gICAgLy8gZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCBhcnJheS5sZW5ndGg7ICsrX2FpKVxyXG4gICAgLy8gICBhcnJheVtfYWldID0gMDtcclxuICAgIC8vIG5ldyBSYW5kb20oKS5OZXh0Qnl0ZXMoYXJyYXkpO1xyXG4gICAgLy8gcmV0dXJuIDxudW1iZXI+KE1pc2MuZ2V0U3lzdGVtTWlsbGlzZWNvbmRzKCkgXiBOVU1fVFlQRS5oYXNoX3N0cl9uZXcoYXJyYXkpKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBPcGVyRGF0YSB7XHJcbiAgTlVNX0RpZmZfOiBudW1iZXIgPSAwO1xyXG4gIE5VTV9FeHAxXzogbnVtYmVyID0gMDtcclxuICBOVU1fRXhwMl86IG51bWJlciA9IDA7XHJcbn1cclxuXHJcbiJdfQ==
|
|
1758
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTlVNX1RZUEUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9OVU1fVFlQRS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBYXRELE1BQU0sT0FBTyxRQUFRO0lBa0RuQixZQUFZLHNDQUE0QyxFQUFFLFdBQWlCLEVBQUUsZUFBd0I7UUF2QnJHLGNBQVMsR0FBVyxHQUFHLENBQUM7UUFDeEIsZ0JBQVcsR0FBVyxHQUFHLENBQUM7UUFDbEIseUJBQW9CLEdBQVcsQ0FBQyxDQUFDO1FBQ2pDLFVBQUssR0FBYyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFxQjFELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLE9BQU87U0FDUjtRQUNELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsS0FBSyxJQUFJLElBQUksc0NBQXNDLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxFQUFFO1lBQ2hKLElBQUksQ0FBQyxhQUFhLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUMzRCxPQUFPO1NBQ1I7UUFD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b0IsR0FBRyxDQUFDLEVBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUN0QixJQUFJLEVBQUUsRUFBRTtTQUNaO1FBRUQsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDOUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVsQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUU7WUFDdkIsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4QyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUU7WUFDdkIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVyQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN4RixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxR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QyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxD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LFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25GLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RixJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEYsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM1RixD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RUFBRSxHQUFHLEVBQUUsR0FBRztJQUN2RixHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUM5RixHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUMxRixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUN4RixDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUN4RixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUM1RixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRztJQUM3RixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRTtJQUNuRixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUM5RixHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUM1RixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRztJQUM1RixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtDQUN6RSxDQUFDO0FBNjZFSixNQUFNLE9BQU8sUUFBUTtJQUFyQjtRQUNFLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixjQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV4Y2VwdGlvbiwgSW50MzIsIE5OdW1iZXIsIE5TdHJpbmcsIE51bWJlclN0eWxlcywgU3RyaW5nQnVpbGRlciB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzLCBQSUNJbnRlcmZhY2UsIFJhbmRvbWl6ZXIsIFN0b3JhZ2VBdHRyaWJ1dGUsIFV0aWxTdHJCeXRlTW9kZSB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBQSUMgfSBmcm9tICcuLi9ndWkvUElDJztcclxuaW1wb3J0IHsgSUVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vZW52L0lFbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IEV2ZW50cyB9IGZyb20gJy4uLy4uL0V2ZW50cyc7XHJcbmltcG9ydCB7IEd1aUVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vR3VpRW52aXJvbm1lbnQnO1xyXG5cclxuLy8vICAgVGhpcyBjbGFzcyBoYW5kbGVzIGEgTWFnaWMgTnVtYmVyIHRoZSBpZGVudGljYWwgd2F5IGl0J3MgcmVwcmVzZW50ZWQgaW4gTWFnaWMuXHJcbi8vLyAgIE1vc3Qgb2YgdGhlIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyB3ZXJlIGNvcGllZCBmcm9tIHRoZSBDKysgc291cmNlcyBvZiBNYWdpYyxcclxuLy8vICAgaW4gb3JkZXIgdG8ga2VlcCB0aGUgZXhhY3QgbG9naWMgdXNlZCBpbiBvcmRlciB0byBpbXBsZW1lbnQgYWxsIHRoZSBmdW5jdGlvbmFsaXR5XHJcbi8vLyAgIGV4cGVjdGVkLCB3aGljaCBtZWFucyB0aGF0IHRoZSBleGFjdCBtZXRob2RzIG5hbWVzIGFuZCB2YXJpYWJsZXMgbmFtZXMgd2hlcmUgdXNlZFxyXG4vLy8gICBpbiBvcmRlciB0byBtYWtlIGZ1dHVyZSBkZWJ1Z2dpbmcgbW9yZSBlYXN5ZXIuXHJcbi8vLyAgIE5vdGljZSBhIGxvbmcgZGF0YSB0eXBlIHRoYXQgaXMgdXNlZCBpbiBNYWdpYyBDKysgc291cmNlcywgaXMgcmVwcmVzZW50ZWQgaW4gamF2YVxyXG4vLy8gICBieSB0aGUgaW50IGRhdGEgdHlwZS5cclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxhdXRob3I+ICBBbG9uIEJhci1OZXNcclxuLy8vIDwvYXV0aG9yPlxyXG5cclxuZXhwb3J0IGNsYXNzIE5VTV9UWVBFIHtcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIENvbnN0YW50c1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgc3RhdGljIElOVF9aRVJPX0hFWDogc3RyaW5nID0gXCIwMDAwMDAwMFwiO1xyXG4gIHN0YXRpYyBCWVRFX1pFUk9fQklUOiBzdHJpbmcgPSBcIjAwMDAwMDAwXCI7XHJcbiAgc3RhdGljIE5PX1JPT006IG51bWJlciA9IC0xO1xyXG4gIHN0YXRpYyBaRVJPX0ZJTEw6IG51bWJlciA9IC0yO1xyXG4gIHN0YXRpYyBOVU1fU0laRTogbnVtYmVyID0gMjA7XHJcbiAgc3RhdGljIE5VTV9MT05HX1RZUEU6IG51bWJlciA9IC0xO1xyXG4gIHN0YXRpYyBFWFBfQklBUzogbnVtYmVyID0gNjQ7XHJcbiAgc3RhdGljIFNJR05fTUFTSzogbnVtYmVyID0gLTEyODtcclxuICBwcml2YXRlIHN0YXRpYyBfcmFuZHRibDogbnVtYmVyW10gPSBbXHJcbiAgICA0MSwgMTc5LCA5LCA0MCwgOTMsIDIyNCwgMjQsIDk0LCAzOSwgMTEwLCA3MCwgODUsIDE5NiwgMTI5LCA4MCwgMTEsIDEyNywgNDIsIDg3LFxyXG4gICAgOCwgMjQzLCA5NiwgMTc0LCAxNTMsIDYxLCAxOTIsIDE3LCAyMCwgMjM1LCA3LCA0NywgMjIyLCA1MywgMjE2LCAxMDEsIDExMiwgNDQsIDEzOSwgMTA5LFxyXG4gICAgMjMzLCAxMDgsIDU3LCAyNDAsIDIyOSwgMTYwLCAyMTksIDI1MSwgMTUsIDIyMSwgMjQ1LCAyMzksIDEwNCwgMTgyLCAzMywgMTM4LCA1OSwgMTY2LCAyNDcsIDE0NixcclxuICAgIDE5MCwgMzEsIDEyNSwgMTg4LCAxMTQsIDk3LCA4NiwgMTU3LCAxMDYsIDMsIDE0MiwgNjYsIDY5LCAxNTIsIDE3NywgMTE2LCA1MCwgMTQ5LCAyNDIsIDE0NCxcclxuICAgIDI4LCAyOSwgOTUsIDM3LCAyLCAxMTcsIDI0NiwgNjUsIDE4MywgMjA2LCAyNDEsIDIzMCwgMTMxLCAxMywgMTQ1LCA2MywgOTgsIDIwMCwgMTc2LCAyMjYsXHJcbiAgICA1LCAxNTgsIDE4OSwgNDksIDE4LCA1NCwgMzAsIDEyMCwgMjI3LCA2OCwgNDgsIDkxLCA4OSwgMjUyLCAyMTAsIDE4NSwgMjAzLCAxNDAsIDE3MSwgMTU1LFxyXG4gICAgNTYsIDE2MiwgMjQ5LCAyMDEsIDEzNCwgMjQ0LCA2NywgMTk3LCAxNDgsIDI0OCwgODIsIDEwMCwgMzQsIDkwLCAyMzYsIDUxLCAxNjcsIDE3OCwgMjA3LCAxOTMsXHJcbiAgICAxNjQsIDIyNSwgMjE4LCAxNDcsIDc5LCA3MSwgMjE3LCAxNTEsIDM4LCAxOTgsIDIxNSwgMjEyLCAxMjMsIDE1NiwgNzYsIDEyMSwgMTEzLCAyNTMsIDU1LCAyNTUsXHJcbiAgICAyMywgMjUsIDIzMSwgMTg3LCAyMSwgNzIsIDIwOSwgMTAzLCA4MSwgMzUsIDEyLCA2LCAxMjIsIDc4LCAzMiwgNjAsIDkyLCAxNCwgMjAyLCA4MyxcclxuICAgIDEyOCwgMTk1LCAxMzUsIDIyMywgMjExLCAxODEsIDg0LCAwLCAxMTksIDE3MywgMTY1LCAyMzQsIDQ1LCAyMDgsIDEwNywgMTM2LCAxOTksIDEyNiwgMTQxLCAxNjMsXHJcbiAgICAxODAsIDk5LCAxNzIsIDIyMCwgNzUsIDExNSwgMjMyLCAxMTEsIDIyOCwgMjA0LCAyMzcsIDczLCAyNTQsIDYyLCAxMDUsIDEzMiwgMjIsIDM2LCAxMTgsIDE0MyxcclxuICAgIDE2MSwgMTMzLCAxNjksIDEwLCA1MiwgMTg2LCAxODQsIDE3MCwgNzcsIDIwNSwgMTM3LCAxMjQsIDIzOCwgMTYsIDE1OSwgMjUwLCAxOTEsIDc0LCAyNywgMTMwLFxyXG4gICAgNCwgMTk0LCAxLCA0NiwgNTgsIDEwMiwgNjQsIDE2OCwgMTUwLCA4OCwgMjE0LCAxNzUsIDIxMywgMTU0LCAyNiwgNDMsIDE5XHJcbiAgXTtcclxuICBDT01NQUNIQVI6IHN0cmluZyA9ICcsJztcclxuICBERUNJTUFMQ0hBUjogc3RyaW5nID0gJy4nO1xyXG4gIHByaXZhdGUgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfZGF0YTogSW50OEFycmF5ID0gbmV3IEludDhBcnJheShOVU1fVFlQRS5OVU1fU0laRSk7XHJcblxyXG4gIHNldCBEYXRhKHZhbHVlOiBJbnQ4QXJyYXkpIHtcclxuICAgIHRoaXMuX2RhdGEgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBEYXRhKCk6IEludDhBcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gQ29uc3RydWN0b3IgbGlzdFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNvbnN0cnVjdG9yKCk7XHJcbiAgY29uc3RydWN0b3IocmVjb3JkSGV4U3RyOiBzdHJpbmcpO1xyXG4gIGNvbnN0cnVjdG9yKGJ5dGVWYWw6IEludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3RvcihieXRlVmFsOiBJbnQ4QXJyYXkpO1xyXG4gIGNvbnN0cnVjdG9yKGRlY1N0cjogc3RyaW5nLCBwaWM6IFBJQywgY29tcElkeDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3RvcihudW1Gcm9tOiBOVU1fVFlQRSk7XHJcbiAgY29uc3RydWN0b3IocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20/OiBhbnksIG9mZnNldE9yUGljPzogYW55LCBsZW5ndGhPckNvbXBJZHg/OiBudW1iZXIpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20gPT09IG51bGwgfHwgcmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20uY29uc3RydWN0b3IgPT09IFN0cmluZykpIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tID09PSBudWxsIHx8IHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tIGluc3RhbmNlb2YgSW50OEFycmF5KSAmJiAob2Zmc2V0T3JQaWMgPT09IG51bGwgfHwgb2Zmc2V0T3JQaWMuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKGxlbmd0aE9yQ29tcElkeCA9PT0gbnVsbCB8fCBsZW5ndGhPckNvbXBJZHguY29uc3RydWN0b3IgPT09IE51bWJlcikpIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8yKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tLCBvZmZzZXRPclBpYywgbGVuZ3RoT3JDb21wSWR4KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tID09PSBudWxsIHx8IHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tIGluc3RhbmNlb2YgSW50OEFycmF5KSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzMocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20gPT09IG51bGwgfHwgcmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20uY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKG9mZnNldE9yUGljID09PSBudWxsIHx8IG9mZnNldE9yUGljIGluc3RhbmNlb2YgUElDKSAmJiAobGVuZ3RoT3JDb21wSWR4ID09PSBudWxsIHx8IGxlbmd0aE9yQ29tcElkeC5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzQocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20sIG9mZnNldE9yUGljLCBsZW5ndGhPckNvbXBJZHgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzUocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIERlZmF1bHQgY29uc3RydWN0b3IuIFNldCB2YWx1ZSB0byAwXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRDb25zdCgpO1xyXG4gICAgdGhpcy5OVU1fWkVSTygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENyZWF0ZXMgYSBNYWdpYyBOdW1iZXIgZnJvbSBhIHN0cmluZyBnb3QgZnJvbSB0aGUgWE1MIHJlY29yZCB2YWx1ZS4gVGhlXHJcbiAgLy8vICAgU3RyaW5nIGlzIDQwIGNoYXJhY3RlcnMgbG9uZyBpbiBhbiBoZXhhIHJlcHJlc2VudGF0aW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZWNvcmRIZXhTdHJcIj4gIE1hZ2ljIG51bWJlciBpbiBoZXggZm9ybWF0LCA0MCBjaGFyYWN0ZXJzIGxvbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEocmVjb3JkSGV4U3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHR3b0RpZ2l0czogc3RyaW5nO1xyXG4gICAgdGhpcy5pbml0Q29uc3QoKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgdHdvRGlnaXRzID0gcmVjb3JkSGV4U3RyLnN1YnN0ciggaSAqIDIsIDIpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFbaV0gPSBOVU1fVFlQRS50b1NCeXRlKE5OdW1iZXIuUGFyc2UodHdvRGlnaXRzLCBOdW1iZXJTdHlsZXMuSGV4TnVtYmVyKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleCkge1xyXG4gICAgICBFdmVudHMuV3JpdGVXYXJuaW5nVG9Mb2coZXgpO1xyXG5cclxuICAgICAgdGhpcy5OVU1fWkVSTygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENyZWF0ZXMgYSBNYWdpYyBOdW1iZXIgZnJvbSBhcnJheSBvZiBieXRlcy4gVXNlZCBmcm9tIHRoZSBleHByZXNzaW9uIGV2YWx1YXRvclxyXG4gIC8vLyAgIHdoZW4gYSBNYWdpYyBOdW1iZXIgdmFsdWUgYXBlYXJzIHdpdGhpbiBhbiBleHByZXNzaW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJieXRlVmFsXCI+ICBBcnJheSBvZiBieXRlcyByZXByZXNlbnRpbmcgYSBNYWdpYyBOdW1iZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib2Zmc2V0XCI+ICAgSW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlbmd0aFwiPiAgIE51bWJlciBvZiBieXRlcyB0byB1c2UgPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzIoYnl0ZVZhbDogSW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIHRoaXMuX2RhdGFbaV0gPSBieXRlVmFsW2kgKyBvZmZzZXRdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENyZWF0ZXMgYSBNYWdpYyBOdW1iZXIgZnJvbSBhcnJheSBvZiBieXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8zKGJ5dGVWYWw6IEludDhBcnJheSk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8yKGJ5dGVWYWwsIDAsIGJ5dGVWYWwubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDcmVhdGVzIGEgTWFnaWMgTnVtYmVyIGZyb20gYSBkZWNpbWFsIGZvciBudW1iZXIgYW5kIGl0cyBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlY1N0clwiPiAgVGhlIG51bWJlciBpbiBhIHN0cmluZyBkZWNpbWFsIGZvcm1hdCA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgICBUaGUgcGljdHVyZSBmb3JtYXQgdG8gYmUgdXNlZCA8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfNChkZWNTdHI6IHN0cmluZywgcGljOiBQSUMsIGNvbXBJZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICB0aGlzLmZyb21fYShkZWNTdHIsIHBpYywgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ3JlYXRlcyBhIE1hZ2ljIE51bWJlciBmcm9tIGEgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bUZyb21cIj4gIFRoZSBzb3VyY2UgTWFnaWMgTnVtYmVyIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl81KG51bUZyb206IE5VTV9UWVBFKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRDb25zdCgpO1xyXG4gICAgdGhpcy5fZGF0YSA9IG5ldyBJbnQ4QXJyYXkobnVtRnJvbS5fZGF0YS5sZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCB0aGlzLl9kYXRhLmxlbmd0aDsgKytfYWkpXHJcbiAgICAgIHRoaXMuX2RhdGFbX2FpXSA9IG51bUZyb20uX2RhdGFbX2FpXTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRlY2ltYWwgc3RyaW5nIGZyb20gdGhlIG51bWJlciBzdG9yZWQgaW4gYSBNYWdpYyBOdW1iZXIuXHJcbiAgLy8vICAgVGhlIHN0cmluZyBpcyBidWlsZCBmcm9tIHRoZSBwaWN0dXJlIHByb3ZpZGVkIGFzIGEgcGFyYW1ldGVyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj5UaGUgcGljdHVyZSB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoZSBkaXNwbGF5IHN0cmluZ1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gVGhlIGRlY2ltYWwgZm9ybSBvZiB0aGUgTWFnaWMgTnVtYmVyIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICB0b0Rpc3BsYXlWYWx1ZShwaWM6IFBJQyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50b19hKHBpYyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5pdCBjb25zdGFudHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGluaXRDb25zdCgpOiB2b2lkIHtcclxuICAgIGxldCBlbnY6IElFbnZpcm9ubWVudCA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50O1xyXG4gICAgdGhpcy5ERUNJTUFMQ0hBUiA9IGVudi5HZXREZWNpbWFsKCk7XHJcbiAgICB0aGlzLkNPTU1BQ0hBUiA9IGVudi5HZXRUaG91c2FuZHMoKTtcclxuICAgIHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBlbnYuR2V0U2lnbmlmaWNhbnROdW1TaXplKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYW4gaGV4YWRlY2ltYWwgc3RyaW5nIGZyb20gdGhlIE1hZ2ljIE51bWJlciBmb3IgdGhlIGRhdGEgcmVjb3JkIGluXHJcbiAgLy8vICAgdGhlIFhNTCB0YWcgKHRvIGJlIHNlbnQgdG8gdGhlIE1hZ2ljIFNlcnZlcikuIFRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmdcclxuICAvLy8gICB3aWxsIGFsbHdheXMgYmUgdHdvIHRpbWVzIHRoZSBsZW5ndGggb2YgdGhlIE1hZ2ljIE51bWJlcnMgKGluIGJ5dGVzKVxyXG4gIC8vLyAgIGJlY2F1c2UgZXZlcnkgYnl0ZSBpbiB0aGUgTWFnaWMgTnVtYmVyIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0d29cclxuICAvLy8gICBjaGFyYWN0ZXIgaGV4YWRlY2ltYWwgc3RyaW5nLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgaGV4YWRlY2ltYWwgc3RyaW5nXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICB0b1hNTHJlY29yZCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhleFN0cjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgKiAyKTtcclxuICAgIGxldCBudW06IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0gPSA1O1xyXG4gICAgZWxzZVxyXG4gICAgICBudW0gPSB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFOyBpKyspIHtcclxuICAgICAgaWYgKGkgPCBudW0pXHJcbiAgICAgICAgaGV4U3RyLkFwcGVuZCgoJzAnICsgKHRoaXMuX2RhdGFbaV0gJiAweEZGKS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBoZXhTdHIuQXBwZW5kKFwiMDBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhleFN0ci5Ub1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJhbnNmb3JtaW5nIGEgZGVjaW1hbCBzdHJpbmcgbnVtYmVyIHRvIGEgTWFnaWMgTnVtYmVyIHVzaW5nIHRoZSBmb3JtYXRcclxuICAvLy8gICBwcm92aWRlZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiQWxwaGFcIj4gIFRoZSBudW1iZXIgaXMgZGVjaW1hbCBzdHJpbmcgZm9ybVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgIFRoZSBwaWN0dXJlIGZvbWF0IHRvIHVzZSBmb3IgdGhlIGV4dHJhY3RpbmcgdGhlIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgZnJvbV9hKEFscGhhOiBzdHJpbmcsIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgaWR4OiBudW1iZXI7XHJcbiAgICBsZXQgZGVjOiBib29sZWFuO1xyXG4gICAgbGV0IGRlY3M6IG51bWJlcjtcclxuICAgIGxldCBkaWdpdDogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IG5vX3BpYzogYm9vbGVhbjtcclxuICAgIGxldCBQb3M6IG51bWJlcjtcclxuICAgIGxldCBTVHlwZTogYm9vbGVhbjtcclxuICAgIGxldCBTUGFydDogYm9vbGVhbjtcclxuICAgIGxldCBTaWduZWQ6IG51bWJlcjtcclxuICAgIGxldCBidWY6IHN0cmluZztcclxuICAgIGxldCBtYXNrOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IGM6IHN0cmluZztcclxuICAgIGxldCBOZ3R2UHJtdDogYm9vbGVhbjtcclxuICAgIGxldCBTY2FuOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IFBidWY6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgaXNfbmVnYXRpdmU6IGJvb2xlYW47XHJcbiAgICBsZXQgbmVnU3RyOiBzdHJpbmc7XHJcbiAgICBsZXQgbmVnUHJlZjogc3RyaW5nO1xyXG4gICAgbGV0IHBvc1ByZWY6IHN0cmluZztcclxuICAgIGxldCBuZWdTdWZmOiBzdHJpbmc7XHJcbiAgICBsZXQgcG9zU3VmZjogc3RyaW5nO1xyXG4gICAgbGV0IHNwZWNpYWxWYWxOZXdQb2xpY3k6IGJvb2xlYW4gPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTcGVjaWFsVmFsTmV3UG9saWN5KCk7XHJcblxyXG4gICAgLy8gUGFyc2UgdGhlIHBpY3R1cmUgZm9ybWF0XHJcbiAgICBub19waWMgPSAocGljID09IG51bGwpO1xyXG4gICAgbGVuID0gMDtcclxuICAgIFNUeXBlID0gZmFsc2U7ICAvLyBQSUNfUFNUViA6IHRydWUsIFBJQ19OR1RWOiBmYWxzZVxyXG4gICAgU1BhcnQgPSBmYWxzZTsgIC8vIFBJQ19QUkVGIDogdHJ1ZSwgUElDX1NVRiA6IGZhbHNlXHJcblxyXG4gICAgaWYgKCFub19waWMpIHtcclxuICAgICAgbWFzayA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICAgIGlmICghc3BlY2lhbFZhbE5ld1BvbGljeSlcclxuICAgICAgICBpZiAoQWxwaGEubGVuZ3RoID4gcGljLmdldE1hc2tTaXplKCkpXHJcbiAgICAgICAgICBBbHBoYSA9IEFscGhhLnN1YnN0cigwLCBwaWMuZ2V0TWFza1NpemUoKSk7XHJcbiAgICAgIE5ndHZQcm10ID0gcGljLmlzTmVnYXRpdmUoKTtcclxuICAgICAgaWYgKE5ndHZQcm10KSB7XHJcbiAgICAgICAgbmVnUHJlZiA9IHBpYy5nZXROZWdQcmVmXygpO1xyXG4gICAgICAgIHBvc1ByZWYgPSBwaWMuZ2V0UG9zUHJlZl8oKTtcclxuICAgICAgICBuZWdTdWZmID0gcGljLmdldE5lZ1N1ZmZfKCk7XHJcbiAgICAgICAgcG9zU3VmZiA9IHBpYy5nZXRQb3NTdWZmXygpO1xyXG5cclxuICAgICAgICBpZiAobmVnUHJlZi5sZW5ndGggPT09IHBvc1ByZWYubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAobmVnUHJlZi5sZW5ndGggPT09IDAgfHwgbmVnUHJlZiA9PT0gcG9zUHJlZilcclxuICAgICAgICAgICAgU1BhcnQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIFBJQ19TVUZcclxuICAgICAgICAgIGVsc2UgU1BhcnQgPSB0cnVlOyAvLyBQSUNfUFJFRlxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIFNQYXJ0ID0gdHJ1ZTsgLy8gUElDX1BSRUZcclxuXHJcbiAgICAgICAgaWYgKFNQYXJ0KVxyXG4gICAgICAgICAgbmVnU3RyID0gbmVnUHJlZjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBuZWdTdHIgPSBuZWdTdWZmO1xyXG5cclxuICAgICAgICBpZiAobmVnU3RyLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgIFNUeXBlID0gdHJ1ZTtcclxuICAgICAgICAvLyBQSUNfUE9TSVRJVkVcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBTVHlwZSA9IGZhbHNlOyAvLyBQSUNfTkVHQVRJVkVcclxuXHJcbiAgICAgICAgaWYgKFNUeXBlKVxyXG4gICAgICAgICAgU2NhbiA9IChTUGFydCA/IHBvc1ByZWYgOiBwb3NTdWZmKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBTY2FuID0gKFNQYXJ0ID8gbmVnUHJlZiA6IG5lZ1N1ZmYpO1xyXG4gICAgICAgIGxlbiA9IFNjYW4ubGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcGljID0gbmV3IFBJQyhcIlwiLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIGNvbXBJZHgpO1xyXG4gICAgICBOZ3R2UHJtdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExvY2FsaXplIHZhcmlhYmxlcyBhbmQgZmxhZ3NcclxuICAgIGRlYyA9IGZhbHNlO1xyXG4gICAgZGVjcyA9IDA7XHJcbiAgICBkaWdpdCA9IDA7XHJcbiAgICBTaWduZWQgPSAwO1xyXG5cclxuICAgIC8vIFNwZWNpYWxWYWxOZXdQb2xpY3kgPSBZXHJcbiAgICAvLyBMb29wIG9uIGlucHV0IHN0cmluZyBvZiBudW1iZXJzIGFuZCBtYXRjaCB0aGVtIGFnYWluc3QgdGhlIHBpY3R1cmUgbWFza1xyXG4gICAgLy8gSXQgbWF5IGhhcHBlbiB0aGF0IHRoZSBwaWN0dXJlIG1hc2sgaXMgc21hbGxlciB0aGFuIHJlY2VpdmVkIG51bWJlciBzdHJpbmdcclxuICAgIC8vIEZvciBleGFtcGxlLCBpZiB0aGUgc3RyaW5nIHJlY2VpdmVkIGlzICcxMjM0LjU2JyB3aGVyZWFzIHBpY3R1cmUgaXMgJzIuMSdcclxuICAgIC8vIHRoZW4gdGhlIGNoYXJhY3RlcnMgdG8gcGFyc2UgZnJvbSB0aGUgaW5wdXQgc3RyaW5nIGlzICcxMjM0LjUnIGkuZS4gIyBkaWdpdHNcclxuICAgIC8vIHNwZWNpZmllZCBpbiBwaWN0dXJlIGJlZm9yZSB0aGUgZGVjaW1hbCBzaG91bGQgYmUgaWdub3JlZC4gUGFyc2luZyBzaG91bGRcclxuICAgIC8vIGNvbnRpbnVlIHRpbGwgIyBvZiBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCBpbiBwaWN0dXJlIG1hdGNoIHdpdGggdGhvc2UgaW5cclxuICAgIC8vIHRoZSBpbnB1dCBzdHJpbmcgb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nXHJcbiAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IEFscGhhLmxlbmd0aDsgKSB7XHJcbiAgICAgIC8vIEFzIG1lbnRpb25lZCBhYm92ZSwgY29udGludWUgcGFyc2luZyBldmVuIGlmIG1hc2sgbGVuZ3RoIGFzIGV4aGF1c3RlZCBieSBjaGVja2luZ1xyXG4gICAgICAvLyBpZHggPj0gcGljLm1hc2tfc2l6ZS4gSG93ZXZlciwgYXMgbG9uZyBhcyBtYXNrIGxlbmd0aCBpcyB2YWxpZCwgbWF0Y2ggdGhlIG1hc2tcclxuICAgICAgaWYgKG5vX3BpYyB8fCAoc3BlY2lhbFZhbE5ld1BvbGljeSAmJiBpZHggPj0gcGljLmdldE1hc2tTaXplKCkpICB8fCBtYXNrW2lkeF0gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKSkge1xyXG4gICAgICAgIGMgPSBBbHBoYVtpZHhdO1xyXG4gICAgICAgIGlmIChzcGVjaWFsVmFsTmV3UG9saWN5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIC8vIHN0b3AgcGFyc2luZyBpZiAjIG9mIGRlY3MgYWxyZWFkeSByZWFjaGVkXHJcbiAgICAgICAgICBpZiAoZGVjICYmIGRlY3MgPT09IHBpYy5nZXREZWMoKSlcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gRmluYWxseSwgc3RvcCBwYXJzaW5nIG9uIG1hdGNoaW5nIHJlcXVpcmVkIG5vLiBvZiBkZWNpbWFsIGRpZ2l0c1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGMpKSB7XHJcbiAgICAgICAgICBkaWdpdCsrO1xyXG4gICAgICAgICAgUGJ1ZiArPSBjO1xyXG4gICAgICAgICAgaWYgKGRlYylcclxuICAgICAgICAgICAgZGVjcysrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjID09PSB0aGlzLkRFQ0lNQUxDSEFSKSB7XHJcbiAgICAgICAgICBQYnVmICs9IHRoaXMuREVDSU1BTENIQVI7XHJcbiAgICAgICAgICBkZWMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjICE9PSB0aGlzLkNPTU1BQ0hBUikge1xyXG4gICAgICAgICAgaWYgKE5ndHZQcm10ICYmIFNpZ25lZCA9PT0gMCkge1xyXG4gICAgICAgICAgICBTaWduZWQgPSAxO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSBpZHgsIFBvcyA9IDA7IGkgPD0gQWxwaGEubGVuZ3RoICYmIFBvcyA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5vX3BpYyB8fCBtYXNrW2ldID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTikpIHtcclxuICAgICAgICAgICAgICAgIGMgPSBBbHBoYVtpXTtcclxuICAgICAgICAgICAgICAgIGlmIChjICE9PSBTY2FuW1Bvc10pIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICctJyAmJiAhU1R5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnKycgJiYgU1R5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIFNpZ25lZCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFBvcysrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoUG9zID4gMCAmJiBQb3MgPCBsZW4pXHJcbiAgICAgICAgICAgICAgU2lnbmVkID0gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gUUNSICMgMzA5NjIzIDogSWYgcHJlZml4L3N1ZmZpeCBzdHJpbmdzIGNvbnRhaW5zIGRpZ2l0cyBpbiBpdCwgaXQgaXMgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIGRhdGEuXHJcbiAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGl0IHNraXAgdGhlIHByZWZpeCAvIHN1ZmZpeCBzdHJpbmdzIHdoaWxlIGV4dHJhY3RpbmcgdGhlIGRhdGEgcGFydCB0byBidWlsZCBOVU1fVFlQRS5cclxuICAgICAgICAgICAgaWYgKGlkeCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChwaWMuZ2V0TmVnUHJlZl8oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgaWYgKEFscGhhLnN0YXJ0c1dpdGgocGljLmdldE5lZ1ByZWZfKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlkeCArPSBwaWMuZ2V0TmVnUHJlZl8oKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChwaWMuZ2V0UG9zUHJlZl8oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgaWYgKEFscGhhLnN0YXJ0c1dpdGgocGljLmdldFBvc1ByZWZfKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlkeCArPSBwaWMuZ2V0UG9zUHJlZl8oKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChwaWMuZ2V0TmVnU3VmZl8oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgaWYgKEFscGhhLmVuZHNXaXRoKHBpYy5nZXROZWdTdWZmXygpKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZHggKz0gcGljLmdldE5lZ1N1ZmZfKCkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocGljLmdldFBvc1N1ZmZfKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIGlmIChBbHBoYS5lbmRzV2l0aChwaWMuZ2V0UG9zU3VmZl8oKSkpIHtcclxuICAgICAgICAgICAgICAgICAgaWR4ICs9IHBpYy5nZXRQb3NTdWZmXygpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWR4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFNpZ25lZCA9PT0gMCAmJiBTVHlwZSlcclxuICAgICAgU2lnbmVkID0gMTtcclxuXHJcbiAgICAvLyBSZXR1cm4gcmVzdWx0IG9mIGRlY29kZWQgZGlnaXRzXHJcbiAgICBpc19uZWdhdGl2ZSA9IChTaWduZWQgPT09IDEgJiYgIVNUeXBlKSB8fCAoU2lnbmVkICE9PSAxICYmIFNUeXBlKTtcclxuICAgIGlmIChkZWNzID4gMCB8fCBkaWdpdCA+IDkpIHtcclxuICAgICAgYnVmID0gKGlzX25lZ2F0aXZlID8gJy0nIDogJyAnKSArIFBidWY7XHJcbiAgICAgIHRoaXMubnVtXzRfYV9zdGQoYnVmKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5OVU1fNF9MT05HKChpc19uZWdhdGl2ZSA/IC0xIDogMSkgKiB0aGlzLmFfMl9sb25nKFBidWYpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBFeHRyYWN0aW5nIGEgbm9uIGxvbmcgbnVtYmVyIGZyb20gYSBkZWNpbWFsIHN0cmluZyBudW1iZXIgKG51bWJlcnMgd2l0aFxyXG4gIC8vLyAgIGRlY2ltYWwgcG9pbnQsIGV0Yy4uLilcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+ICBUaGUgZGVjaW1hbCBzdHJpbmcgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgbnVtXzRfYV9zdGQoc3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBkaWdzdHI6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgZGlnbGVuOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHdob2xlczogbnVtYmVyID0gMDtcclxuICAgIGxldCBkZWNzOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGlzRGVjOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaXNtaW51czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG5cclxuICAgIGZvciAocG9zID0gMDsgcG9zIDwgc3RyLmxlbmd0aDsgcG9zKyspIHtcclxuICAgICAgbGV0IGM6IHN0cmluZyA9IHN0ci5jaGFyQXQocG9zKTtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGMpKSB7XHJcbiAgICAgICAgaWYgKGRpZ2xlbiA+IDAgfHwgYyAhPT0gJzAnKSB7XHJcbiAgICAgICAgICBkaWdsZW4rKztcclxuICAgICAgICAgIGRpZ3N0ciA9IGRpZ3N0ciArIGM7XHJcbiAgICAgICAgICBpZiAoIWlzRGVjKVxyXG4gICAgICAgICAgICB3aG9sZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNEZWMpXHJcbiAgICAgICAgICBkZWNzID0gZGVjcyArIDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYyA9PT0gdGhpcy5ERUNJTUFMQ0hBUilcclxuICAgICAgICBpc0RlYyA9IHRydWU7XHJcbiAgICAgIGVsc2UgaWYgKGMgPT09ICctJylcclxuICAgICAgICBpc21pbnVzID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLk5VTV9aRVJPKCk7XHJcbiAgICBpZiAoZGlnbGVuID09PSAwKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKCgod2hvbGVzICsgZGVjcykgJiAxKSA+IDApIHtcclxuICAgICAgdGhpcy5fZGF0YVsxXSA9IE5VTV9UWVBFLnRvU0J5dGUoZGlnc3RyLmNoYXJDb2RlQXQoMCkgLSAnMCcuY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgIHBvcyA9IDE7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHBvcyA9IDA7XHJcblxyXG4gICAgbGV0IG51bXB0cjogbnVtYmVyID0gMSArIHBvcztcclxuICAgIGRpZ2xlbiA9IE1hdGgubWluKGRpZ2xlbiwgKHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSAqIDIgLSBwb3MpO1xyXG4gICAgd2hpbGUgKHBvcyA8IGRpZ2xlbikge1xyXG4gICAgICBsZXQgZGlnaXQxOiBudW1iZXIgPSBOVU1fVFlQRS50b1NCeXRlKChkaWdzdHIuY2hhckNvZGVBdChwb3MrKykgLSAnMCcuY2hhckNvZGVBdCgwKSkpO1xyXG4gICAgICBsZXQgZGlnaXQyOiBudW1iZXIgPSBOVU1fVFlQRS50b1NCeXRlKCgocG9zIDwgZGlnbGVuKVxyXG4gICAgICAgID8gKGRpZ3N0ci5jaGFyQ29kZUF0KHBvcysrKSAtICcwJy5jaGFyQ29kZUF0KDApKVxyXG4gICAgICAgIDogJ1xcMCcuY2hhckNvZGVBdCgwKSkpO1xyXG4gICAgICB0aGlzLl9kYXRhW251bXB0cisrXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaWdpdDEpICogMTAgKyBOVU1fVFlQRS50b1VCeXRlKGRpZ2l0MikpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aG9sZXMgPiAwKVxyXG4gICAgICB0aGlzLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZSg8bnVtYmVyPk5VTV9UWVBFLkVYUF9CSUFTICsgKCh3aG9sZXMgKyAxKSA+PiAxKSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKDxudW1iZXI+TlVNX1RZUEUuRVhQX0JJQVMgLSAoZGVjcyA+PiAxKSk7XHJcblxyXG4gICAgaWYgKGlzbWludXMpXHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gfD0gTlVNX1RZUEUuU0lHTl9NQVNLO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zbGF0aW5nIGEgbG9uZyB2YWx1ZSBpbnRvIGFuIGludGVybmFsIE1hZ2ljIE51bWJlciBmb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxvbmdWYWxcIj4gIFRoZSBudW1iZXIgdG8gYmUga2VwdFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIE5VTV80X0xPTkcobG9uZ1ZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgaGV4U3RyOiBzdHJpbmc7XHJcbiAgICB0aGlzLk5VTV9aRVJPKCk7XHJcblxyXG4gICAgaWYgKGxvbmdWYWwgIT09IDApIHtcclxuICAgICAgaWYgKGxvbmdWYWwgPCAwKVxyXG4gICAgICAgIGxvbmdWYWwgPSAoMHhGRkZGRkZGRiArIGxvbmdWYWwgKyAxKTtcclxuXHJcbiAgICAgIGhleFN0ciA9IGxvbmdWYWwudG9TdHJpbmcoMTYpO1xyXG4gICAgICBpZiAobG9uZ1ZhbCA+IDApXHJcbiAgICAgICAgaGV4U3RyID0gTlVNX1RZUEUuSU5UX1pFUk9fSEVYLnN1YnN0cihoZXhTdHIubGVuZ3RoKSArIGhleFN0cjtcclxuXHJcbiAgICAgIHRoaXMuX2RhdGFbMV0gPSBOVU1fVFlQRS50b1NCeXRlKHBhcnNlSW50KGhleFN0ci5zdWJzdHIoNiwgKDgpIC0gKDYpKSwgMTYpKTtcclxuICAgICAgdGhpcy5fZGF0YVsyXSA9IE5VTV9UWVBFLnRvU0J5dGUocGFyc2VJbnQoaGV4U3RyLnN1YnN0cig0LCAoNikgLSAoNCkpLCAxNikpO1xyXG4gICAgICB0aGlzLl9kYXRhWzNdID0gTlVNX1RZUEUudG9TQnl0ZShwYXJzZUludChoZXhTdHIuc3Vic3RyKDIsICg0KSAtICgyKSksIDE2KSk7XHJcbiAgICAgIHRoaXMuX2RhdGFbNF0gPSBOVU1fVFlQRS50b1NCeXRlKHBhcnNlSW50KGhleFN0ci5zdWJzdHIoMCwgKDIpIC0gKDApKSwgMTYpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXR0aW5nIGEgbG9uZyB2YWx1ZSBmcm9tIGEgZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbG9uZyB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbG9uZyB2YWx1ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxvbmcgbnVtYmVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBhXzJfbG9uZyhzdHI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgbjogbnVtYmVyID0gMDtcclxuICAgIGZvciAobGV0IHBvczogbnVtYmVyID0gMDsgcG9zIDwgc3RyLmxlbmd0aDsgcG9zKyspIHtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHN0ci5jaGFyQXQocG9zKSkpIHtcclxuICAgICAgICBuID0gbiAqIDEwO1xyXG4gICAgICAgIG4gPSBuICsgc3RyLmNoYXJDb2RlQXQocG9zKSAtICcwJy5jaGFyQ29kZUF0KDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBBY3RpdmF0aW5nIHRoZSBwcm9jZXNzIG9mIGJ1aWxkaW5nIGEgZGVjaW1hbCBzdHJpbmcgYnkgdGhlIGZvcm1hdCBpbmRpY2F0ZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+YSBudW1lcmljIHBpY3R1cmUgdG8gdXNlIGZvciBidWlsZGluZyB0aGUgZGlzcGxheSBzdHJpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICB0b19hKHBpYzogUElDKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRvX2FfcGljKHBpYyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybXMgdGhlIHByb2Nlc3Mgb2YgYnVpbGRpbmcgYSBkZWNpbWFsIHN0cmluZyBieSB0aGUgcGljdHVyZSBwcm92aWRlZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj4gIHRoZSBwaWN0dXJlIGNsYXNzIGhvbGRpbmcgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIGZvcm0gb2YgdGhlIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIHRvX2FfcGljKHBpYzogUElDKTogc3RyaW5nIHtcclxuICAgIGxldCBidWY6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oMTI4KTtcclxuICAgIGxldCByZW1haW5zOiBudW1iZXI7XHJcbiAgICBsZXQgc2lnbl9uOiBib29sZWFuO1xyXG4gICAgbGV0IHByZWZfbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgc3VmZl9sZW46IG51bWJlcjtcclxuICAgIGxldCBwcmVmX3N0cjogU3RyaW5nO1xyXG4gICAgbGV0IHN1ZmZfc3RyOiBTdHJpbmc7XHJcbiAgICBsZXQgc3RyX3BvczogbnVtYmVyO1xyXG4gICAgbGV0IHN0cl9sZW46IG51bWJlcjtcclxuICAgIGxldCBvdXRfcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgb3V0X2J1Zjogc3RyaW5nW107XHJcbiAgICBsZXQgdG1wX291dF9idWY6IHN0cmluZ1tdO1xyXG4gICAgbGV0IHBhZDogc3RyaW5nO1xyXG4gICAgbGV0IGxlZnQ6IGJvb2xlYW47XHJcbiAgICBsZXQgcGZpbGw6IGJvb2xlYW47XHJcbiAgICBsZXQgbWFza19jaGFyczogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IHJlczogc3RyaW5nW107XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IGlzT3V0OiBib29sZWFuO1xyXG4gICAgbGV0IG91dFZhbDogc3RyaW5nW107XHJcblxyXG4gICAgbGVuID0gcGljLmdldE1hc2tTaXplKCk7XHJcblxyXG4gICAgLy8gU2V0IHNpZ25zIG9mIG51bWJlclxyXG4gICAgc2lnbl9uID0gKHBpYy5pc05lZ2F0aXZlKCkgJiYgdGhpcy5udW1faXNfbmVnKCkgPyBmYWxzZSA6IHRydWUpO1xyXG5cclxuICAgIHByZWZfbGVuID0gKHNpZ25fbiA/IHBpYy5nZXRQb3NQcmVmXygpLmxlbmd0aCA6IHBpYy5nZXROZWdQcmVmXygpLmxlbmd0aCk7IC8vIHBpY19zaWduW1BJQ19QUkVGXS5sZW47XHJcbiAgICBzdWZmX2xlbiA9IChzaWduX24gPyBwaWMuZ2V0UG9zU3VmZl8oKS5sZW5ndGggOiBwaWMuZ2V0TmVnU3VmZl8oKS5sZW5ndGgpOyAvLyBwaWNfc2lnbltQSUNfU1VGRl0ubGVuO1xyXG5cclxuICAgIGxlZnQgPSBwaWMuaXNMZWZ0KCk7XHJcbiAgICBwZmlsbCA9IHBpYy5wYWRGaWxsKCk7XHJcbiAgICBtYXNrX2NoYXJzID0gcGljLmdldE1hc2tDaGFycygpO1xyXG4gICAgb3V0VmFsID0gTlN0cmluZy5Ub0NoYXJBcnJheShwaWMuZ2V0TWFzaygpLnN1YnN0cigwLCBsZW4pKTtcclxuICAgIG91dF9idWYgPSAoKGxlZnQgfHwgKG1hc2tfY2hhcnMgPiAwKSkgPyBidWYgOiBvdXRWYWwpO1xyXG4gICAgaWYgKGxlZnQpXHJcbiAgICB7XHJcbiAgICAgIGZvciAoaT0wOyBpIDwgb3V0X2J1Zi5sZW5ndGg7IGkrKyApXHJcbiAgICAgICAgb3V0X2J1ZltpXSA9ICg8c3RyaW5nPicwJy50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH1cclxuICAgIGlzT3V0ID0gKChsZWZ0IHx8IChtYXNrX2NoYXJzID4gMCkpID8gZmFsc2UgOiB0cnVlKTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRvIHN0cmluZ1xyXG4gICAgc3RyX3BvcyA9IHByZWZfbGVuO1xyXG4gICAgc3RyX2xlbiA9IGxlbiAtIHByZWZfbGVuIC0gc3VmZl9sZW47XHJcbiAgICB0bXBfb3V0X2J1ZiA9IG91dF9idWYuc2xpY2Uoc3RyX3Bvcywgb3V0X2J1Zi5sZW5ndGgpO1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmVtYWlucyA9IHRoaXMubnVtX2xfMl9zdHIodGhpcy5OVU1fTE9ORygpLCB0bXBfb3V0X2J1Ziwgc3RyX2xlbiwgcGljKTtcclxuICAgIGVsc2VcclxuICAgICAgICByZW1haW5zID0gdGhpcy50b19zdHIodG1wX291dF9idWYsIHN0cl9sZW4sIHBpYyk7XHJcblxyXG4gICAgZm9yIChpID0gc3RyX3BvczsgaSA8IG91dF9idWYubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgb3V0X2J1ZltpXSA9IHRtcF9vdXRfYnVmW2kgLSBzdHJfcG9zXTtcclxuICAgIHRtcF9vdXRfYnVmID0gbnVsbDtcclxuXHJcbiAgICBpZiAocmVtYWlucyA8IG1hc2tfY2hhcnMpIHtcclxuICAgICAgICByZXMgPSBuZXcgQXJyYXkobGVuKTtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgIHJlc1tpXSA9IChyZW1haW5zID09PSBOVU1fVFlQRS5aRVJPX0ZJTEwgPyBwaWMuZ2V0WmVyb1BhZCgpIDogJyonKTtcclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKHJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1hc2tfY2hhcnMgPiAwKSB7XHJcbiAgICAgIHJlbWFpbnMgLT0gbWFza19jaGFycztcclxuICAgICAgc3RyX3BvcyArPSBtYXNrX2NoYXJzO1xyXG4gICAgICBzdHJfbGVuIC09IG1hc2tfY2hhcnM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGFrZSBjYXJlIG9mIHBhZCBhZnRlciBhbmQgYmVmb3JlIG51bWJlclxyXG4gICAgaWYgKHBmaWxsKSB7XHJcbiAgICAgIHBhZCA9IHBpYy5nZXRQYWQoKTtcclxuICAgICAgaWYgKGxlZnQpIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtYWluczsgaSsrKVxyXG4gICAgICAgICAgb3V0X2J1ZiBbc3RyX3BvcyArIHN0cl9sZW4gKyBpXSA9IHBhZDtcclxuICAgICAgICBzdHJfcG9zICs9IHJlbWFpbnM7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbWFpbnM7IGkrKylcclxuICAgICAgICAgIG91dF9idWZbc3RyX3BvcyArIGldID0gcGFkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcGFkID0gJyAnO1xyXG4gICAgICBzdHJfcG9zICs9IHJlbWFpbnM7XHJcbiAgICAgIHN0cl9sZW4gLT0gcmVtYWlucztcclxuICAgIH1cclxuXHJcbiAgICAvLyB0YWtlIGNhcmUgb2Ygc3VmZml4IGFuZCBwcmVmaXhcclxuICAgIGlmIChzdWZmX2xlbiA+IDApIHtcclxuICAgICAgc3VmZl9zdHIgPSBzaWduX24gPyBwaWMuZ2V0UG9zU3VmZl8oKSA6IHBpYy5nZXROZWdTdWZmXygpO1xyXG4gICAgICBpZiAoc3VmZl9sZW4gPT09IDEpXHJcbiAgICAgICAgb3V0X2J1ZltzdHJfcG9zICsgc3RyX2xlbl0gPSBzdWZmX3N0clswXTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHN1ZmZfbGVuOyBpKyspXHJcbiAgICAgICAgICBvdXRfYnVmW3N0cl9wb3MgKyBzdHJfbGVuICsgaV0gPSBzdWZmX3N0cltpXTtcclxuICAgICAgfVxyXG4gICAgICBzdHJfbGVuICs9IHN1ZmZfbGVuO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZWZfbGVuID4gMCkge1xyXG4gICAgICBzdHJfcG9zIC09IHByZWZfbGVuO1xyXG4gICAgICBzdHJfbGVuICs9IHByZWZfbGVuO1xyXG4gICAgICBwcmVmX3N0ciA9IHNpZ25fbiA/IHBpYy5nZXRQb3NQcmVmXygpIDogcGljLmdldE5lZ1ByZWZfKCk7XHJcbiAgICAgIGlmIChwcmVmX2xlbiA9PT0gMSlcclxuICAgICAgICAgIG91dF9idWZbc3RyX3Bvc10gPSBwcmVmX3N0clswXTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmVmX2xlbjsgaSsrKVxyXG4gICAgICAgICAgb3V0X2J1ZltzdHJfcG9zICsgaV0gPSBwcmVmX3N0cltpXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzdHJfcG9zIG5vdyBwb2ludHMgdG8gYmVnaW5uaW5nIG9mIHJlc3VsdCBzdHJcclxuICAgIC8vIHRha2UgY2FyZSBvZiBmaW5hbCBwYWQgYWZ0ZXIgYW5kIGJlZm9yZSBudW1iZXJcclxuICAgIGlmICghcGZpbGwpIHtcclxuICAgICAgbGV0IG91dEJ1ZkxlbjogbnVtYmVyID0gb3V0X2J1Zi5sZW5ndGg7XHJcblxyXG4gICAgICBpZiAobGVmdCkge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1haW5zICYmIChzdHJfcG9zICsgc3RyX2xlbiArIGkgPCBvdXRCdWZMZW4pOyBpKyspXHJcbiAgICAgICAgICBvdXRfYnVmW3N0cl9wb3MgKyBzdHJfbGVuICsgaV0gPSBwYWQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc3RyX3BvcyAtPSByZW1haW5zO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtYWlucyAmJiAoc3RyX3BvcyArIGkgPCBvdXRCdWZMZW4pOyBpKyspXHJcbiAgICAgICAgICBvdXRfYnVmW3N0cl9wb3MgKyBpXSA9IHBhZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlc3VsdCBidWlsdCwgZmluaXNoXHJcbiAgICBpZiAoaXNPdXQpXHJcbiAgICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhvdXRfYnVmKTtcclxuXHJcbiAgICAvLyBDb3B5IHJlc3VsdCB0byBvdXRwdXQgYnVmZmVyXHJcbiAgICBpZiAobWFza19jaGFycyA9PT0gMCkge1xyXG4gICAgICBpZiAoc3RyX3BvcyArIGxlbiA+IG91dF9idWYubGVuZ3RoKVxyXG4gICAgICAgIGxlbiA9IG91dF9idWYubGVuZ3RoIC0gc3RyX3BvcztcclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKG91dF9idWYsIHN0cl9wb3MsICBsZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAob3V0X3BvcyA9IDA7IG91dF9wb3MgPCBsZW4gJiYgc3RyX3BvcyA8IG91dF9idWYubGVuZ3RoOyBvdXRfcG9zKyspXHJcbiAgICAgIGlmIChvdXRWYWxbb3V0X3Bvc10gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKSlcclxuICAgICAgICBvdXRWYWxbb3V0X3Bvc10gPSBvdXRfYnVmW3N0cl9wb3MrK107XHJcblxyXG4gICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKG91dFZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVsZGluZyB0aGUgYmFzaWMgZGVjaW1hbCBzdHJpbmcgbnVtYmVyIGZyb20gYSBsb25nIHZhbHVlICh3aXRob3V0XHJcbiAgLy8vICAgdGhlIHNwZWNpYWwgcGljdHVyZSBmZWF0dXJlcykuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bVwiPiAgVGhlIG51bWJlciB0byBiZSB0cmFuc2xhdGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gIFRoZSBtYXNrIHRvIHVzZSBmb3IgYnVpbGRpbmcgdGhlIHN0cmluZyBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPGxlbj4gICAgbGVuICAgdGhlIGxlbiB0byB1c2UgaW4gdGhlIHN0ciBjaGFyIGFycmF5IDwvbGVuPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICBUaGUgcGljdHVyZSBjbGFzcyBob2xkaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZ1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIG51bV9sXzJfc3RyKG51bTogbnVtYmVyLCBzdHI6IHN0cmluZ1tdLCBsZW46IG51bWJlciwgcGljOiBQSUMpOiBudW1iZXIge1xyXG4gICAgbGV0IGNvbW1hczogYm9vbGVhbjtcclxuICAgIGxldCBkaWdpdHM6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgZGVjczogbnVtYmVyO1xyXG4gICAgbGV0IGo6IG51bWJlcjtcclxuXHJcbiAgICBpZiAobnVtIDwgMClcclxuICAgICAgbnVtID0gLW51bTtcclxuICAgIGNvbW1hcyA9IHBpYy53aXRoQ29tYSgpO1xyXG4gICAgZGVjcyA9IE1hdGgubWluKHBpYy5nZXREZWMoKSwgbGVuIC0gMSk7XHJcbiAgICBpZiAoZGVjcyA+IDApXHJcbiAgICAgIGxlbiAtPSAoZGVjcyArIDEpO1xyXG4gICAgaSA9IGxlbjtcclxuXHJcbiAgICAvLyAyNi8xMS85NyBTaGF5IFouIEJ1ZyAjNzcwNTI2IC0gSWYgVGhlIGRlY2ltYWwgcG9pbnQgaXMgdGhlIGZpcnN0XHJcbiAgICAvLyBpbiB0aGUgcGljdHVyZSdzIGZvcm1hdCAtIGFzc3VtZSB0aGF0IHRoZSBpbnB1dCB2YWx1ZSBpcyBsZWdhbCAhIVxyXG4gICAgaWYgKG51bSA9PT0gMCAmJiAhcGljLmRlY0luRmlyc3RQb3MoKSkge1xyXG4gICAgICBpZiAocGljLnplcm9GaWxsKCkpXHJcbiAgICAgICAgcmV0dXJuIChOVU1fVFlQRS5aRVJPX0ZJTEwpO1xyXG4gICAgICBpZiAobGVuID09PSAwKVxyXG4gICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcblxyXG4gICAgICBpZiAoaSA+IHN0ci5sZW5ndGgpXHJcbiAgICAgICAgaSA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICBzdHJbLS1pXSA9ICcwJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGVjcyA+IDApIHtcclxuICAgICAgICBzdHJbbGVuXSA9IHRoaXMuREVDSU1BTENIQVI7XHJcbiAgICAgIGZvciAoaiA9IDA7IGogPCBkZWNzOyBqKyspXHJcbiAgICAgICAgc3RyW2xlbiArIDEgKyBqXSA9ICcwJztcclxuICAgIH1cclxuXHJcbiAgICBkaWdpdHMgPSAwO1xyXG4gICAgZm9yICg7IG51bSA+IDA7IG51bSA9IE1hdGguZmxvb3IobnVtIC8gMTApKSB7XHJcbiAgICAgIGktLTtcclxuICAgICAgaWYgKGNvbW1hcykge1xyXG4gICAgICAgIGlmIChkaWdpdHMgPT09IDMpIHtcclxuICAgICAgICAgIGlmIChpIDwgMClcclxuICAgICAgICAgICAgcmV0dXJuIChOVU1fVFlQRS5OT19ST09NKTtcclxuICAgICAgICAgIGRpZ2l0cyA9IDA7XHJcbiAgICAgICAgICBzdHJbaS0tXSA9IHRoaXMuQ09NTUFDSEFSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkaWdpdHMrKztcclxuICAgICAgfVxyXG4gICAgICBpZiAoaSA8IDApXHJcbiAgICAgICAgcmV0dXJuIChOVU1fVFlQRS5OT19ST09NKTtcclxuICAgICAgc3RyW2ldID0gKChudW0gJSAxMCkudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVsZGluZyB0aGUgYmFzaWMgZGVjaW1hbCBzdHJpbmcgbnVtYmVyIGZyb20gYSBub24gbG9uZyB2YWx1ZSAod2l0aG91dFxyXG4gIC8vLyAgIHRoZSBzcGVjaWFsIHBpY3R1cmUgZmVhdHVyZXMpLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gIFRoZSBtYXNrIHRvIHVzZSBmb3IgYnVpbGRpbmcgdGhlIHN0cmluZyBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPGxlbj4gICAgbGVuICAgdGhlIGxlbiB0byB1c2UgaW4gdGhlIHN0ciBjaGFyIGFycmF5IDwvbGVuPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICBUaGUgcGljdHVyZSBjbGFzcyBob2xkaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZ1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIHRvX3N0cihzdHI6IHN0cmluZ1tdLCBsZW46IG51bWJlciwgcGljOiBQSUMpOiBudW1iZXIge1xyXG4gICAgbGV0IHRtcDogTlVNX1RZUEU7XHJcbiAgICBsZXQgY29tbWFzOiBib29sZWFuO1xyXG4gICAgbGV0IGRpZ2l0czogbnVtYmVyO1xyXG4gICAgbGV0IGRlY3BvczogbnVtYmVyO1xyXG4gICAgbGV0IGxhc3Q6IG51bWJlcjtcclxuICAgIGxldCBmaXJzdDogbnVtYmVyO1xyXG4gICAgbGV0IGo6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgZGVjczogbnVtYmVyO1xyXG4gICAgbGV0IG51bV9jaGFyOiBudW1iZXI7XHJcblxyXG4gICAgY29tbWFzID0gcGljLndpdGhDb21hKCk7XHJcbiAgICBkZWNzID0gcGljLmdldERlYygpO1xyXG4gICAgaWYgKGRlY3MgPj0gbGVuKVxyXG4gICAgICBkZWNzID0gbGVuIC0gMTtcclxuXHJcbiAgICB0bXAgPSBuZXcgTlVNX1RZUEUodGhpcyk7XHJcbiAgICB0bXAucm91bmQoZGVjcyk7XHJcbiAgICBpZiAodG1wLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJldHVybiB0bXAubnVtX2xfMl9zdHIodG1wLk5VTV9MT05HKCksIHN0ciwgbGVuLCBwaWMpO1xyXG5cclxuICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiB0bXAuX2RhdGFbMF0gPT09IDApXHJcbiAgICAgIHJldHVybiAoTlVNX1RZUEUuWkVST19GSUxMKTtcclxuXHJcbiAgICBpID0gbGVuIC0gMTtcclxuICAgIGRpZ2l0cyA9IDA7XHJcbiAgICBkZWNwb3MgPSAoKHRtcC5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spIC0gTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSAqIDI7XHJcbiAgICBsYXN0ID0gZGVjcG9zIC0gMSArIGRlY3M7XHJcbiAgICBmaXJzdCA9IGRlY3BvcyAtIDE7XHJcbiAgICBpZiAoZmlyc3QgPiAyKVxyXG4gICAgICBmaXJzdCA9ICh0bXAuX2RhdGFbMV0gPCAxMCkgPyAzIDogMjtcclxuXHJcbiAgICBmb3IgKGogPSBsYXN0OyBqID49IGZpcnN0OyBqLS0pIHtcclxuICAgICAgaWYgKGkgPCAwKVxyXG4gICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcblxyXG4gICAgICBpZiAoY29tbWFzICYmIChqIDwgZGVjcG9zKSkge1xyXG4gICAgICAgIGlmIChkaWdpdHMgPT09IDMpIHtcclxuICAgICAgICAgIGRpZ2l0cyA9IDA7XHJcbiAgICAgICAgICBzdHJbaS0tXSA9IHRoaXMuQ09NTUFDSEFSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkaWdpdHMrKztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSlBOOjE1LzA4LzE5OTYgWWFtYSAoSnBuSUQ6WkEwODE1MDAxKVxyXG4gICAgICAvLyBXaGVuIEZvcm1hdD1cIk4xMkNcIiBhbmQgbnVtIGlzIGJpZ2dlciB0aGFuIDEyIGRpZ2l0cy5cclxuICAgICAgLy8gTUFHSUMgY3J1c2hlcy4gQmVjYXVzZSB0aGUgdmFyIGkgYmVjb21lcyBuZWdhdGl2ZS5cclxuICAgICAgaWYgKGkgPCAwKVxyXG4gICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcblxyXG4gICAgICBpZiAoKGogPCAyKSB8fCAoaiA+PSB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFICogMikpXHJcbiAgICAgICAgc3RyW2ktLV0gPSAnMCc7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChpIDwgMClcclxuICAgICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcbiAgICAgICAgbnVtX2NoYXIgPSB0bXAuX2RhdGFbaiA+PiAxXTtcclxuICAgICAgICBzdHJbaS0tXSA9ICgoKGogJiAxKSAhPT0gMCkgPyAobnVtX2NoYXIgJSAxMCkgOiAoTWF0aC5mbG9vcihudW1fY2hhciAvIDEwKSkpLnRvU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChqID09PSBkZWNwb3MpIHtcclxuICAgICAgICBpZiAoaSA8IDApXHJcbiAgICAgICAgICByZXR1cm4gKE5VTV9UWVBFLk5PX1JPT00pO1xyXG4gICAgICAgIHN0cltpLS1dID0gdGhpcy5ERUNJTUFMQ0hBUjtcclxuXHJcbiAgICAgICAgLy8gMjYvMTEvOTcgU2hheSBaLiBCdWcgIzc3MDUyNiAtIElmIFRoZSBkZWNpbWFsIHBvaW50IGlzIHRoZSBmaXJzdFxyXG4gICAgICAgIC8vIGluIHRoZSBwaWN0dXJlJ3MgZm9ybWF0IC0gYXNzdW1lIHRoYXQgdGhlIGlucHV0IHZhbHVlIGlzIGxlZ2FsICFcclxuICAgICAgICBpZiAoaSA8IDAgJiYgcGljLmRlY0luRmlyc3RQb3MoKSlcclxuICAgICAgICAgIHJldHVybiAoMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKGkgKyAxKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtaW5nIGFuIEFkZCBvcGVyYXRpb24gb24gdHdvIG1hZ2ljIG51bWJlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMVwiPiAgdGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMlwiPiAgdGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHJlc3VsdFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGFkZChudW0xOiBOVU1fVFlQRSwgbnVtMjogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgc2lnbjE6IG51bWJlcjtcclxuICAgIGxldCBzaWduMjogbnVtYmVyO1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuICAgIGxldCBsMTogbnVtYmVyO1xyXG4gICAgbGV0IGwyOiBudW1iZXI7XHJcbiAgICBsZXQgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlcjtcclxuICAgIC8vIG51bGwgdmFsdWVzXHJcbiAgICBpZiAobnVtMSA9PT0gbnVsbCB8fCBudW0yID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBTSUdOSUZJQ0FOVF9OVU1fU0laRSA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG4gICAgbGV0IHRtcHJlczogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgb3BlckRhdGE6IE9wZXJEYXRhID0gbmV3IE9wZXJEYXRhKCk7XHJcbiAgICBpZiAobnVtMS5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgIGlmIChudW0yLk5VTV9JU19MT05HKCkpIHtcclxuXHJcbiAgICAgICAgbCA9IGwxID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgIGwgPSAtbDtcclxuXHJcbiAgICAgICAgaWYgKGwgPCAweDQwMDAwMDAwKSB7XHJcbiAgICAgICAgICBsID0gbDIgPSBudW0yLk5VTV9MT05HKCk7XHJcbiAgICAgICAgICBpZiAobCA8IDApXHJcbiAgICAgICAgICAgIGwgPSAtbDtcclxuICAgICAgICAgIGlmIChsIDwgMHg0MDAwMDAwMCkge1xyXG4gICAgICAgICAgICBsMSArPSBsMjtcclxuICAgICAgICAgICAgcmVzLk5VTV80X0xPTkcobDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICAgIH1cclxuICAgICAgbnVtMS5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobnVtMi5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcblxyXG4gICAgc2lnbjEgPSBOVU1fVFlQRS50b1NCeXRlKG51bTEuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0V4cDFfID0gTlVNX1RZUEUudG9TQnl0ZShudW0xLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBzaWduMiA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMi5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBvcGVyRGF0YS5OVU1fRXhwMl8gPSBOVU1fVFlQRS50b1NCeXRlKG51bTIuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIG9wZXJEYXRhLk5VTV9EaWZmXyA9IDxudW1iZXI+KG9wZXJEYXRhLk5VTV9FeHAxXyAtIG9wZXJEYXRhLk5VTV9FeHAyXyk7XHJcblxyXG4gICAgbGV0IGNtcHZhbDogbnVtYmVyID0gb3BlckRhdGEuTlVNX0RpZmZfO1xyXG4gICAgaWYgKGNtcHZhbCA9PT0gMCkge1xyXG4gICAgICBjbXB2YWwgPSBOVU1fVFlQRS50b1VCeXRlKG51bTEuX2RhdGFbMV0pIC0gTlVNX1RZUEUudG9VQnl0ZShudW0yLl9kYXRhWzFdKTtcclxuICAgICAgaWYgKGNtcHZhbCA9PT0gMClcclxuICAgICAgICBjbXB2YWwgPSBOVU1fVFlQRS5tZW1jbXAobnVtMSwgMiwgbnVtMiwgMiwgU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAyKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY21wdmFsID49IDApIHtcclxuICAgICAgaWYgKHNpZ24xID09PSBzaWduMilcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5hZGRfcG9zKG51bTEsIG51bTIsIG9wZXJEYXRhKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRtcHJlcyA9IE5VTV9UWVBFLnN1Yl9wb3MobnVtMSwgbnVtMiwgb3BlckRhdGEpO1xyXG5cclxuICAgICAgaWYgKHRtcHJlcy5fZGF0YVswXSAhPT0gMClcclxuICAgICAgICB0bXByZXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHRtcHJlcy5fZGF0YVswXSB8IHNpZ24xKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgZXhwOiBudW1iZXIgPSBvcGVyRGF0YS5OVU1fRXhwMV87XHJcbiAgICAgIG9wZXJEYXRhLk5VTV9FeHAxXyA9IG9wZXJEYXRhLk5VTV9FeHAyXztcclxuICAgICAgb3BlckRhdGEuTlVNX0V4cDJfID0gZXhwO1xyXG4gICAgICBvcGVyRGF0YS5OVU1fRGlmZl8gPSAtb3BlckRhdGEuTlVNX0RpZmZfO1xyXG5cclxuICAgICAgaWYgKHNpZ24xID09PSBzaWduMilcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5hZGRfcG9zKG51bTIsIG51bTEsIG9wZXJEYXRhKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRtcHJlcyA9IE5VTV9UWVBFLnN1Yl9wb3MobnVtMiwgbnVtMSwgb3BlckRhdGEpO1xyXG5cclxuICAgICAgaWYgKHRtcHJlcy5fZGF0YVswXSAhPT0gMClcclxuICAgICAgICB0bXByZXMuX2RhdGFbMF0gfD0gc2lnbjI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRtcHJlcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtaW5nIGEgU3VidHJhY3Qgb3BlcmF0aW9uIG9uIHR3byBtYWdpYyBudW1iZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXN1bHRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBzdWIobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09PSBudWxsIHx8IG51bTIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCB0bXByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG9wZXJEYXRhOiBPcGVyRGF0YSA9IG5ldyBPcGVyRGF0YSgpO1xyXG5cclxuICAgIGlmIChudW0xLk5VTV9JU19MT05HKCkpIHtcclxuICAgICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICAgIGxldCBsOiBudW1iZXI7XHJcbiAgICAgICAgbGV0IGwxOiBudW1iZXIgPSBsID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgIGwgPSAtbDtcclxuICAgICAgICBpZiAobCA8IDB4NDAwMDAwMDApIHtcclxuICAgICAgICAgIGxldCBsMjogbnVtYmVyID0gbCA9IG51bTIuTlVNX0xPTkcoKTtcclxuICAgICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgICAgbCA9IC1sO1xyXG4gICAgICAgICAgaWYgKGwgPCAweDQwMDAwMDAwKSB7XHJcbiAgICAgICAgICAgIGwxIC09IGwyO1xyXG4gICAgICAgICAgICByZXMuTlVNXzRfTE9ORyhsMSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG51bTIubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBudW0xLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChudW0yLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIG51bTIubnVtXzRfc3RkX2xvbmcoKTtcclxuXHJcbiAgICBsZXQgc2lnbjE6IG51bWJlciA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMS5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBvcGVyRGF0YS5OVU1fRXhwMV8gPSBOVU1fVFlQRS50b1NCeXRlKG51bTEuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIGxldCBzaWduMjogbnVtYmVyID0gTlVNX1RZUEUudG9TQnl0ZShudW0yLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIG9wZXJEYXRhLk5VTV9FeHAyXyA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMi5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0RpZmZfID0gPG51bWJlcj4ob3BlckRhdGEuTlVNX0V4cDFfIC0gb3BlckRhdGEuTlVNX0V4cDJfKTtcclxuXHJcbiAgICBsZXQgY21wdmFsOiBudW1iZXIgPSBvcGVyRGF0YS5OVU1fRGlmZl87XHJcbiAgICBpZiAoY21wdmFsID09PSAwKSB7XHJcbiAgICAgIGNtcHZhbCA9IE5VTV9UWVBFLnRvVUJ5dGUobnVtMS5fZGF0YVsxXSkgLSBOVU1fVFlQRS50b1VCeXRlKG51bTIuX2RhdGFbMV0pO1xyXG4gICAgICBpZiAoY21wdmFsID09PSAwKVxyXG4gICAgICAgIGNtcHZhbCA9IE5VTV9UWVBFLm1lbWNtcChudW0xLCAyLCBudW0yLCAyLCBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKSAtIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjbXB2YWwgPj0gMCkge1xyXG4gICAgICBpZiAoc2lnbjEgPT09IHNpZ24yKVxyXG4gICAgICAgIHRtcHJlcyA9IE5VTV9UWVBFLnN1Yl9wb3MobnVtMSwgbnVtMiwgb3BlckRhdGEpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdG1wcmVzID0gTlVNX1RZUEUuYWRkX3BvcyhudW0xLCBudW0yLCBvcGVyRGF0YSk7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBleHA6IG51bWJlciA9IG9wZXJEYXRhLk5VTV9FeHAxXztcclxuICAgICAgb3BlckRhdGEuTlVNX0V4cDFfID0gb3BlckRhdGEuTlVNX0V4cDJfO1xyXG4gICAgICBvcGVyRGF0YS5OVU1fRXhwMl8gPSBleHA7XHJcbiAgICAgIG9wZXJEYXRhLk5VTV9EaWZmXyA9IC1vcGVyRGF0YS5OVU1fRGlmZl87XHJcbiAgICAgIGlmIChzaWduMSA9PT0gc2lnbjIpIHtcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5zdWJfcG9zKG51bTIsIG51bTEsIG9wZXJEYXRhKTtcclxuICAgICAgICBzaWduMSBePSAoTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdG1wcmVzID0gTlVNX1RZUEUuYWRkX3BvcyhudW0yLCBudW0xLCBvcGVyRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRtcHJlcy5fZGF0YVswXSAhPT0gMClcclxuICAgICAgdG1wcmVzLl9kYXRhWzBdIHw9IHNpZ24xO1xyXG5cclxuICAgIHJldHVybiB0bXByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybWluZyBhIE11bHRpcGx5IG9wZXJhdGlvbiBvbiB0d28gbWFnaWMgbnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgbXVsKG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuXHJcbiAgICBsZXQgZnVsbHJlczogSW50OEFycmF5ID0gbmV3IEludDhBcnJheSgzOCk7XHJcbiAgICBsZXQgcHdyOiBudW1iZXI7XHJcbiAgICBsZXQgbGVuMTogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjI6IG51bWJlcjtcclxuICAgIGxldCBwb3MxOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zMjogbnVtYmVyO1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG4gICAgbGV0IGRpZ2l0MTogbnVtYmVyO1xyXG4gICAgbGV0IHByb2Q6IG51bWJlcjtcclxuICAgIGxldCBjYXJyeTogbnVtYmVyO1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuICAgIGxldCBsMTogbnVtYmVyO1xyXG4gICAgbGV0IGwyOiBudW1iZXI7XHJcbiAgICBsZXQgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBudWxsIHZhbHVlc1xyXG4gICAgaWYgKG51bTEgPT09IG51bGwgfHwgbnVtMiA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKTtcclxuXHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG9wZXJEYXRhOiBPcGVyRGF0YSA9IG5ldyBPcGVyRGF0YSgpO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCB0bXBCeXRlOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKG51bTEuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICBpZiAobnVtMi5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgICAgbCA9IGwxID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgIGwgPSAtbDtcclxuICAgICAgICBpZiAobCA8IDB4QjAwMCkge1xyXG4gICAgICAgICAgbCA9IGwyID0gbnVtMi5OVU1fTE9ORygpO1xyXG4gICAgICAgICAgaWYgKGwgPCAwKVxyXG4gICAgICAgICAgICBsID0gLWw7XHJcbiAgICAgICAgICBpZiAobCA8IDB4QjAwMCkge1xyXG4gICAgICAgICAgICBsMSA9IGwxICogbDI7XHJcbiAgICAgICAgICAgIHJlcy5OVU1fNF9MT05HKGwxKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgICB9XHJcbiAgICAgIG51bTEubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcblxyXG4gICAgb3BlckRhdGEuTlVNX0V4cDFfID0gTlVNX1RZUEUudG9TQnl0ZShudW0xLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBvcGVyRGF0YS5OVU1fRXhwMl8gPSBOVU1fVFlQRS50b1NCeXRlKG51bTIuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIGlmIChvcGVyRGF0YS5OVU1fRXhwMV8gPT09IDAgfHwgb3BlckRhdGEuTlVNX0V4cDJfID09PSAwKSB7XHJcbiAgICAgIHJlcy5OVU1fWkVSTygpO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGVuMSA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMTtcclxuICAgICAgICAgbnVtMS5fZGF0YVtsZW4xXSA9PT0gMDtcclxuICAgICAgICAgbGVuMS0tKSB7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxlbjIgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDE7XHJcbiAgICAgICAgIG51bTIuX2RhdGFbbGVuMl0gPT09IDA7XHJcbiAgICAgICAgIGxlbjItLSkge1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCAoTlVNX1RZUEUuTlVNX1NJWkUgLSAxKSAqIDI7IGkrKylcclxuICAgICAgZnVsbHJlc1tpXSA9IDA7XHJcblxyXG4gICAgcG9zID0gMDtcclxuICAgIGZvciAocG9zMSA9IGxlbjE7IHBvczEgPiAwOyBwb3MxLS0pIHtcclxuICAgICAgcG9zID0gcG9zMSArIGxlbjIgLSAxO1xyXG4gICAgICBkaWdpdDEgPSBudW0xLl9kYXRhW3BvczFdO1xyXG4gICAgICBjYXJyeSA9IDA7XHJcblxyXG4gICAgICBmb3IgKHBvczIgPSBsZW4yOyBwb3MyID4gMDsgcG9zMi0tKSB7XHJcbiAgICAgICAgcHJvZCA9IE5VTV9UWVBFLnRvVUJ5dGUoZGlnaXQxKSAqIE5VTV9UWVBFLnRvVUJ5dGUobnVtMi5fZGF0YVtwb3MyXSkgKyBjYXJyeTtcclxuICAgICAgICBjYXJyeSA9IE1hdGguZmxvb3IocHJvZCAvIDEwMCk7XHJcbiAgICAgICAgZnVsbHJlc1twb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKGZ1bGxyZXNbcG9zXSkgKyBwcm9kICUgMTAwKTtcclxuICAgICAgICB0bXBCeXRlID0gZnVsbHJlc1twb3NdO1xyXG4gICAgICAgIHBvcy0tO1xyXG4gICAgICAgIGlmIChOVU1fVFlQRS50b1VCeXRlKHRtcEJ5dGUpID49IDEwMCkge1xyXG4gICAgICAgICAgZnVsbHJlc1twb3MgKyAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShmdWxscmVzW3BvcyArIDFdKSAtIDEwMCk7XHJcbiAgICAgICAgICBjYXJyeSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmdWxscmVzW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKGNhcnJ5KTtcclxuICAgIH1cclxuXHJcbiAgICBwd3IgPSBOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAxXykgLSBOVU1fVFlQRS5FWFBfQklBUyArIChOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAyXykgLSBOVU1fVFlQRS5FWFBfQklBUyk7XHJcbiAgICBpZiAoZnVsbHJlc1swXSA9PT0gMCkge1xyXG4gICAgICBwb3MrKztcclxuICAgICAgcHdyLS07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKChudW0xLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKSA9PT0gKG51bTIuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spKVxyXG4gICAgICByZXMuX2RhdGFbMF0gPSAwO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXMuX2RhdGFbMF0gPSBOVU1fVFlQRS5TSUdOX01BU0s7XHJcblxyXG4gICAgcmVzLl9kYXRhWzBdIHw9IE5VTV9UWVBFLnRvU0J5dGUocHdyICsgTlVNX1RZUEUuRVhQX0JJQVMpO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMTsgaSsrKVxyXG4gICAgICByZXMuX2RhdGFbMSArIGldID0gZnVsbHJlc1twb3MgKyBpXTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBlcmZvcm1pbmcgYSBNb2Qgb3BlcmF0aW9uIG9uIHR3byBtYWdpYyBudW1iZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXN1bHRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBtb2QobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09PSBudWxsIHx8IG51bTIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBpZiAobnVtMi5udW1faXNfemVybygpKSB7XHJcbiAgICAgIHJlcy5OVU1fWkVSTygpO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChudW0xLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIG51bTEubnVtXzRfc3RkX2xvbmcoKTtcclxuXHJcbiAgICBpZiAobnVtMi5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcblxyXG4gICAgcmVzID0gTlVNX1RZUEUuZGl2KG51bTEsIG51bTIpO1xyXG4gICAgcmVzLm51bV90cnVuYygwKTtcclxuICAgIHJlcyA9IE5VTV9UWVBFLm11bChyZXMsIG51bTIpO1xyXG4gICAgcmVzID0gTlVNX1RZUEUuc3ViKG51bTEsIHJlcyk7XHJcblxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtaW5nIGEgRGl2aWRlIG9wZXJhdGlvbiBvbiB0d28gbWFnaWMgbnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgZGl2KG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGxldCBkaXZpZGVuZDogSW50OEFycmF5ID0gbmV3IEludDhBcnJheSgoTlVNX1RZUEUuTlVNX1NJWkUgLSAxKSAqIDIpO1xyXG4gICAgbGV0IGRpdmlzb3I6IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoTlVNX1RZUEUuTlVNX1NJWkUpO1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjE6IG51bWJlcjtcclxuICAgIGxldCBsZW4yOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zMTogbnVtYmVyO1xyXG4gICAgbGV0IHBvczI6IG51bWJlcjtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBxdW90OiBudW1iZXI7XHJcbiAgICBsZXQgcHJvZDogbnVtYmVyO1xyXG4gICAgbGV0IGNhcnJ5OiBudW1iZXI7XHJcbiAgICBsZXQgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBudWxsIHZhbHVlc1xyXG4gICAgaWYgKG51bTEgPT09IG51bGwgfHwgbnVtMiA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKTtcclxuXHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG9wZXJEYXRhOiBPcGVyRGF0YSA9IG5ldyBPcGVyRGF0YSgpO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCB0bXBCeXRlOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKG51bTEuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgbnVtMS5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG5cclxuICAgIG9wZXJEYXRhLk5VTV9FeHAxXyA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMS5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0V4cDJfID0gTlVNX1RZUEUudG9TQnl0ZShudW0yLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBpZiAob3BlckRhdGEuTlVNX0V4cDFfID09PSAwIHx8IG9wZXJEYXRhLk5VTV9FeHAyXyA9PT0gMCkge1xyXG4gICAgICByZXMuTlVNX1pFUk8oKTtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxlbjEgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDE7XHJcbiAgICAgICAgIG51bTEuX2RhdGFbbGVuMV0gPT09IDA7XHJcbiAgICAgICAgIGxlbjEtLSkge1xyXG4gICAgfVxyXG4gICAgZm9yIChsZW4yID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxO1xyXG4gICAgICAgICBudW0yLl9kYXRhW2xlbjJdID09PSAwO1xyXG4gICAgICAgICBsZW4yLS0pIHtcclxuICAgIH1cclxuXHJcbiAgICBwb3MgPSAoTlVNX1RZUEUubWVtY21wKG51bTEsIDEsIG51bTIsIDEsIGxlbjIpIDwgMCkgPyAwIDogMTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCAoTlVNX1RZUEUuTlVNX1NJWkUgLSAxKSAqIDI7IGkrKylcclxuICAgICAgZGl2aWRlbmRbaV0gPSAwO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW4xOyBpKyspXHJcbiAgICAgIGRpdmlkZW5kW3BvcyArIGldID0gbnVtMS5fZGF0YVsxICsgaV07XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjI7IGkrKylcclxuICAgICAgZGl2aXNvclsxICsgaV0gPSBudW0yLl9kYXRhWzEgKyBpXTtcclxuXHJcbiAgICByZXMuTlVNX1NFVF9aRVJPKCk7XHJcbiAgICBwd3IgPSBOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAxXykgLSBOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAyXykgKyBwb3M7XHJcbiAgICByZXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHB3ciArIE5VTV9UWVBFLkVYUF9CSUFTKTtcclxuICAgIGlmICgobnVtMS5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSykgIT09IChudW0yLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKSlcclxuICAgICAgcmVzLl9kYXRhWzBdIHw9IE5VTV9UWVBFLlNJR05fTUFTSztcclxuXHJcbiAgICAvLyBub3JtYWxpemUgZGl2aWRlbmQgJiBkaXZpc29yXHJcbiAgICBxdW90ID0gTWF0aC5mbG9vcigxMDAgLyAoTlVNX1RZUEUudG9VQnl0ZShkaXZpc29yWzFdKSArIDEpKTtcclxuICAgIGlmIChxdW90ID4gMSkge1xyXG4gICAgICBjYXJyeSA9IDA7XHJcbiAgICAgIGZvciAocG9zMiA9IGxlbjI7IHBvczIgPiAwOyBwb3MyLS0pIHtcclxuICAgICAgICBwcm9kID0gcXVvdCAqIE5VTV9UWVBFLnRvVUJ5dGUoZGl2aXNvcltwb3MyXSkgKyBjYXJyeTtcclxuICAgICAgICBjYXJyeSA9IE1hdGguZmxvb3IocHJvZCAvIDEwMCk7XHJcbiAgICAgICAgZGl2aXNvcltwb3MyXSA9IE5VTV9UWVBFLnRvU0J5dGUocHJvZCAlIDEwMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhcnJ5ID0gMDtcclxuICAgICAgZm9yIChwb3MxID0gbGVuMSArIHBvcyAtIDE7IHBvczEgPj0gMDsgcG9zMS0tKSB7XHJcbiAgICAgICAgcHJvZCA9IHF1b3QgKiBOVU1fVFlQRS50b1VCeXRlKGRpdmlkZW5kW3BvczFdKSArIGNhcnJ5O1xyXG4gICAgICAgIGNhcnJ5ID0gTWF0aC5mbG9vcihwcm9kIC8gMTAwKTtcclxuICAgICAgICBkaXZpZGVuZFtwb3MxXSA9IE5VTV9UWVBFLnRvU0J5dGUocHJvZCAlIDEwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBkaXZpZGUgZGl2aWRlbmQgYnkgZGl2aXNvclxyXG4gICAgZm9yIChwb3MxID0gMTsgcG9zMSA8IFNJR05JRklDQU5UX05VTV9TSVpFOyBwb3MxKyspIHtcclxuICAgICAgcXVvdCA9IE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zMSAtIDFdKSAqIDEwMCArIE1hdGguZmxvb3IoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3MxXSkgLyBOVU1fVFlQRS50b1VCeXRlKGRpdmlzb3JbMV0pKTtcclxuICAgICAgaWYgKHF1b3QgPj0gMTAwKVxyXG4gICAgICAgIHF1b3QgPSA5OTtcclxuXHJcbiAgICAgIGlmIChxdW90ICE9PSAwKSB7XHJcbiAgICAgICAgLy8gbXVsdGlwbHkgZGl2aXNvciBieSBxdW90aWVudCwgYW5kIHN1YnRyYWN0IGZyb20gZGl2aWRlbmRcclxuICAgICAgICBwb3MgPSBwb3MxICsgbGVuMiAtIDE7XHJcbiAgICAgICAgY2FycnkgPSAwO1xyXG4gICAgICAgIGZvciAocG9zMiA9IGxlbjI7IHBvczIgPiAwOyBwb3MyLS0pIHtcclxuICAgICAgICAgIHByb2QgPSBxdW90ICogTlVNX1RZUEUudG9VQnl0ZShkaXZpc29yW3BvczJdKSArIGNhcnJ5O1xyXG4gICAgICAgICAgY2FycnkgPSBNYXRoLmZsb29yKHByb2QgLyAxMDApO1xyXG4gICAgICAgICAgZGl2aWRlbmRbcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3NdKSAtIHByb2QgJSAxMDApO1xyXG4gICAgICAgICAgdG1wQnl0ZSA9IGRpdmlkZW5kW3Bvc107XHJcbiAgICAgICAgICBwb3MtLTtcclxuICAgICAgICAgIGlmICh0bXBCeXRlIDwgMCkge1xyXG4gICAgICAgICAgICBkaXZpZGVuZFtwb3MgKyAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3MgKyAxXSkgKyAxMDApO1xyXG4gICAgICAgICAgICBjYXJyeSsrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkaXZpZGVuZFtwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKGRpdmlkZW5kW3Bvc10pIC0gY2FycnkpO1xyXG5cclxuICAgICAgICAvLyBkZWNyZW1lbnQgcXVvdGllbnQsIGFuZCBhZGQgYmFjayBkaXZpc29yIHRvIGRpdmlkZW5kXHJcbiAgICAgICAgd2hpbGUgKGRpdmlkZW5kW3Bvc10gPCAwKSB7XHJcbiAgICAgICAgICBxdW90LS07XHJcbiAgICAgICAgICBwb3MgPSBwb3MxICsgbGVuMiAtIDE7XHJcbiAgICAgICAgICBmb3IgKHBvczIgPSBsZW4yOyBwb3MyID4gMDsgcG9zMi0tKSB7XHJcbiAgICAgICAgICAgIGRpdmlkZW5kW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zXSkgKyBOVU1fVFlQRS50b1VCeXRlKGRpdmlzb3JbcG9zMl0pKTtcclxuICAgICAgICAgICAgdG1wQnl0ZSA9IGRpdmlkZW5kW3Bvc107XHJcbiAgICAgICAgICAgIHBvcy0tO1xyXG4gICAgICAgICAgICBpZiAoTlVNX1RZUEUudG9VQnl0ZSh0bXBCeXRlKSA+PSAxMDApIHtcclxuICAgICAgICAgICAgICBkaXZpZGVuZFtwb3MgKyAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3MgKyAxXSkgLSAxMDApO1xyXG4gICAgICAgICAgICAgIGRpdmlkZW5kW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zXSkgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXMuX2RhdGFbcG9zMV0gPSBOVU1fVFlQRS50b1NCeXRlKHF1b3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29tcGFyZSB0d28gbWFnaWMgbnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICBUaGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICBUaGUgc2Vjb25kIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gMCBpZiBudW0xPW51bTIsIDEgaWYgbnVtMT5udW0yIG9yIC0xIGlmIG51bTE8bnVtMlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIG51bV9jbXAobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFKTogbnVtYmVyIHtcclxuICAgIGxldCBzaWduMTogbnVtYmVyO1xyXG4gICAgbGV0IHNpZ24yOiBudW1iZXI7XHJcbiAgICBsZXQgY21wdmFsOiBudW1iZXI7XHJcbiAgICBsZXQgbDE6IG51bWJlcjtcclxuICAgIGxldCBsMjogbnVtYmVyO1xyXG4gICAgbGV0IHRtcDogbnVtYmVyO1xyXG4gICAgbGV0IFNJR05JRklDQU5UX05VTV9TSVpFOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKG51bTEgPT0gbnVsbCB8fCBudW0yID09IG51bGwpXHJcbiAgICAgIHJldHVybiBJbnQzMi5NaW5WYWx1ZTtcclxuXHJcbiAgICBTSUdOSUZJQ0FOVF9OVU1fU0laRSA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG5cclxuICAgIGlmIChudW0xLk5VTV9JU19MT05HKCkpIHtcclxuICAgICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICAgIGwxID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGwyID0gbnVtMi5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsMSA+PSAwICYmIGwyID49IDApIHtcclxuICAgICAgICAgIHRtcCA9IGwxIC0gbDI7XHJcbiAgICAgICAgICBpZiAodG1wID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gKDApO1xyXG4gICAgICAgICAgaWYgKHRtcCA+IDApXHJcbiAgICAgICAgICAgIHJldHVybiAoMSk7XHJcbiAgICAgICAgICByZXR1cm4gKC0xKTtcclxuICAgIH1cclxuICAgICAgICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIG51bTEubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgICAgfVxyXG4gICAgZWxzZSBpZiAobnVtMi5OVU1fSVNfTE9ORygpKVxyXG4gICAgICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG5cclxuICAgIHNpZ24xID0gTlVNX1RZUEUudG9TQnl0ZShudW0xLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIHNpZ24yID0gTlVNX1RZUEUudG9TQnl0ZShudW0yLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIGNtcHZhbCA9IChzaWduMSA9PT0gc2lnbjIpXHJcbiAgICAgID8gTlVNX1RZUEUubWVtY21wKG51bTEsIDAsIG51bTIsIDAsIFNJR05JRklDQU5UX05VTV9TSVpFKVxyXG4gICAgICA6IDE7XHJcbiAgICBpZiAoc2lnbjEgIT09IDApXHJcbiAgICAgIGNtcHZhbCA9IC1jbXB2YWw7XHJcbiAgICByZXR1cm4gKGNtcHZhbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2sgaWYgdGhlIGdpdmVuIGhleCBzdHJpbmcgcmVwcmVzZW50cyBhIGxvbmcgbnVtYmVyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW1IZXhTdHJcIj4gIFRoZSBoZXggc3RyaW5nIHRvIGNoZWNrLlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSwgaWYgdGhlIHN0cmluZyByZXByZXNlbnRzIGEgJ2xvbmcnIG51bWJlciBpbiBOVU1fVFlQRS5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBudW1IZXhTdHJJc0xvbmcobnVtSGV4U3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBudW1IZXhTdHIuc3Vic3RyKDAsIDIpID09PSBcIkZGXCI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgWmVyb2VzIHRoZSBNYWdpYyBOdW1iZXIgYXMgYSBsb25nIHplcm9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIE5VTV9aRVJPKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRaZXJvKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFplcm9lcyB0aGUgTWFnaWMgTnVtYmVyIChhbGwgYnl0ZXMgd2lsbCBzZXQgdG8gMClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIE5VTV9TRVRfWkVSTygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0WmVybyhmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0dGluZyBpbmRpY2F0aW9uIGZvciB0aGUgc2lnbiBvZiB0aGUgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaW4gdGhlIG51bWJlciBpcyBuZWdhdGl2ZSwgZmFsc2UgaWYgcG9zaXRpdmVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIG51bV9pc19uZWcoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICByZXR1cm4gKCh0aGlzLl9kYXRhWzRdICYgMHg4MCkgIT09IDApO1xyXG4gICAgcmV0dXJuICgodGhpcy5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSykgIT09IDApO1xyXG4gICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0dGluZyBpbmRpY2F0aW9uIGlmIHRoZSBNYWdpYyBOdW1iZXIgaXMgWkVSTyAoYWxsIGJ5dGVzIGVxdWFscyB0byAwKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGluIHRoZSBudW1iZXIgaXMgWkVSTywgZmFsc2UgaWYgcG9zaXRpdmVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIG51bV9pc196ZXJvKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmV0dXJuICh0aGlzLk5VTV9MT05HKCkgPT09IDApO1xyXG4gICAgcmV0dXJuICh0aGlzLl9kYXRhWzBdID09PSAwKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENoYW5naW5nIHNpZ24gb2YgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBudW1fbmVnKCk6IHZvaWQge1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgIGwgPSAtdGhpcy5OVU1fTE9ORygpO1xyXG4gICAgICB0aGlzLk5VTV80X0xPTkcobCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9kYXRhWzBdICE9PSAwKVxyXG4gICAgICB0aGlzLl9kYXRhWzBdIF49IE5VTV9UWVBFLlNJR05fTUFTSztcclxuICAgICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSXMgdGhlIG51bWJlciBrZXB0IGluIGluIHRoZSBOVU1fVFlQRSBpcyBhIGxvbmcgbnVtYmVyP1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGluIHRoZSBudW1iZXIgaXMgbG9uZywgZmFsc2UgaWYgbm90XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBOVU1fSVNfTE9ORygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhWzBdID09PSBOVU1fVFlQRS5OVU1fTE9OR19UWVBFO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbG9uZyB2YWx1ZSBmcm9tIHRoZSBOVU1fVFlQRS5cclxuICAvLy8gICBUSElTIEZVTkNUSU9OIE1VU1QgQkUgV1JJVFRFTiBESUZFUkVOVExZIVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbG9uZyBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIE5VTV9MT05HKCk6IG51bWJlciB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0aGlzLl9kYXRhWzFdID09PSAwICYmIHRoaXMuX2RhdGFbMl0gPT09IDAgJiYgdGhpcy5fZGF0YVszXSA9PT0gMCAmJiB0aGlzLl9kYXRhWzRdID09PSAtMTI4KVxyXG4gICAgICByZXR1cm4gSW50MzIuTWluVmFsdWU7XHJcblxyXG4gICAgbGV0IGRhdGF2aWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuX2RhdGEuYnVmZmVyKTtcclxuICAgIHJldHVybiBkYXRhdmlldy5nZXRJbnQzMigxLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSb3VuZHMgdGhlIE5VTV9UWVBFIG51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZWNzXCI+ICBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRvIGRlY2ltYWwgcG9pbnQgdG8gcm91bmQgdG9cclxuICAvLy8gPC9wYXJhbT5cclxuICByb3VuZChkZWNzOiBudW1iZXIpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgYWRkdmFsOiBOVU1fVFlQRTtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgYWRkdmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBhZGR2YWwuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKCh0aGlzLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKSB8IChOVU1fVFlQRS5FWFBfQklBUyAtIChkZWNzID4+IDEpKSk7XHJcbiAgICBhZGR2YWwuX2RhdGFbMV0gPSBOVU1fVFlQRS50b1NCeXRlKChkZWNzICYgMSkgIT09IDAgPyA1IDogNTApO1xyXG5cclxuICAgIGxldCB0ZW1wOiBOVU1fVFlQRSA9IE5VTV9UWVBFLmFkZCh0aGlzLCBhZGR2YWwpO1xyXG4gICAgdGhpcy5fZGF0YSA9IG5ldyBJbnQ4QXJyYXkodGVtcC5fZGF0YS5sZW5ndGgpO1xyXG5cclxuICAgIHRoaXMuX2RhdGEgPSB0ZW1wLl9kYXRhO1xyXG4gICAgICB0aGlzLm51bV90cnVuYyhkZWNzKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybnMgYSBudW1lcmljIGV4cHJlc3Npb24sIHJvdW5kZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwid2hvbGVcIj50aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHdoaWNoIHRoZSBudW1lcmljIGV4cHJlc3Npb24gaXMgcm91bmRlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIGRiUm91bmQod2hvbGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGFkZHZhbDogTlVNX1RZUEU7XHJcbiAgICBsZXQgcHdyOiBudW1iZXI7XHJcbiAgICBsZXQgbnVtX2RpZmY6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIC8vIEFkZCA1IChpbiB0aGUgY29ycmVzcG9uZGluZyB0byB3aG9sZSBwb3NpdGlvbilcclxuICAgIGFkZHZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgYWRkdmFsLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZSgodGhpcy5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSykgfCAoTlVNX1RZUEUuRVhQX0JJQVMgKyAoKHdob2xlICsgMSkgPj4gMSkpKTtcclxuICAgIGFkZHZhbC5fZGF0YVsxXSA9IE5VTV9UWVBFLnRvU0J5dGUoKCh3aG9sZSAmIDEpICE9PSAwKSA/IDUgOiA1MCk7XHJcblxyXG4gICAgbGV0IHRlbXA6IE5VTV9UWVBFID0gTlVNX1RZUEUuYWRkKHRoaXMsIGFkZHZhbCk7XHJcbiAgICB0aGlzLl9kYXRhID0gbmV3IEludDhBcnJheSh0ZW1wLl9kYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgICBmb3IgKGxldCBfYWk6IG51bWJlciA9IDA7IF9haSA8IHRoaXMuX2RhdGEubGVuZ3RoOyArK19haSlcclxuICAgICAgdGhpcy5fZGF0YVtfYWldID0gdGVtcC5fZGF0YVtfYWldO1xyXG5cclxuICAgIC8vIFB1dCAwIGluIHRoZSBlbmQgb2YgdGhlIG51bWJlclxyXG4gICAgcHdyID0gKHRoaXMuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKSAtIE5VTV9UWVBFLkVYUF9CSUFTO1xyXG5cclxuICAgIGlmICgobnVtX2RpZmYgPSBwd3IgLSAoKHdob2xlICsgMSkgPj4gMSkpID49IDApIHtcclxuICAgICAgaWYgKCh3aG9sZSAmIDEpICE9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5fZGF0YVsxICsgbnVtX2RpZmZdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLl9kYXRhWzEgKyBudW1fZGlmZl0gLSB0aGlzLl9kYXRhWzEgKyBudW1fZGlmZl0gJSAxMCk7XHJcbiAgICAgICAgbnVtX2RpZmYrKztcclxuICAgICAgICB9XHJcbiAgICAgIGZvciAoaSA9IDA7XHJcbiAgICAgICAgICAgaSA8IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAoMSArIG51bV9kaWZmKTtcclxuICAgICAgICAgICBpKyspXHJcbiAgICAgICAgdGhpcy5fZGF0YVsxICsgbnVtX2RpZmYgKyBpXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuTlVNX1NFVF9aRVJPKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRydW5jYXRlcyB0aGUgTlVNX1RZUEUgbnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlY3NcIj4gIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdG8gZGVjaW1hbCBwb2ludCB0byBoYXZlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgbnVtX3RydW5jKGRlY3M6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IG51bV9kaWZmOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBwd3IgPSAodGhpcy5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spIC0gTlVNX1RZUEUuRVhQX0JJQVM7XHJcbiAgICBpZiAoKG51bV9kaWZmID0gdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEgLSBwd3IgLSAoKGRlY3MgKyAxKSA+PiAxKSkgPCAwKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBpZiAoKG51bV9kaWZmIDwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpICYmICgoZGVjcyAmIDEpICE9PSAwKSkge1xyXG4gICAgICB0aGlzLl9kYXRhW3RoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxIC0gbnVtX2RpZmZdID1cclxuICAgICAgICBOVU1fVFlQRS50b1NCeXRlKHRoaXMuX2RhdGFbdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEgLSBudW1fZGlmZl0gLSB0aGlzLl9kYXRhW3RoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxIC0gbnVtX2RpZmZdICUgMTApO1xyXG4gICAgICBpZiAodGhpcy5fZGF0YVt0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSAtIG51bV9kaWZmXSA9PT0gMClcclxuICAgICAgICBudW1fZGlmZisrO1xyXG4gICAgICAgICAgfVxyXG4gICAgaWYgKG51bV9kaWZmID49IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSB7XHJcbiAgICAgICAgICB0aGlzLk5VTV9aRVJPKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICBmb3IgKGkgPSAwO1xyXG4gICAgICAgICBpIDwgbnVtX2RpZmY7XHJcbiAgICAgICAgIGkrKylcclxuICAgICAgdGhpcy5fZGF0YVt0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gbnVtX2RpZmYgKyBpXSA9IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0cyBhIE1hZ2ljIG51bWJlciBmcm9tIHN0ZCBsb25nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bVwiPiAgVGhlIG51bWJlciB0byBiZSB0cmFuc2xhdGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgbnVtXzRfc3RkX2xvbmcoKTogdm9pZCB7XHJcbiAgICBsZXQgc2xvbmc6IG51bWJlcjtcclxuXHJcbiAgICBzbG9uZyA9IHRoaXMuTlVNX0xPTkcoKTtcclxuICAgIGlmIChzbG9uZyA+PSAwKVxyXG4gICAgICB0aGlzLm51bV80X3Vsb25nKHNsb25nKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm51bV80X3Vsb25nKC1zbG9uZyk7XHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gfD0gTlVNX1RZUEUuU0lHTl9NQVNLO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnRzIGEgTWFnaWMgbnVtYmVyIGZyb20gdWxvbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtXCI+ICBUaGUgbnVtYmVyIHRvIGJlIHRyYW5zbGF0ZWRcclxuICAvLy8gPC9wYXJhbT5cclxuICBudW1fNF91bG9uZyhkYXRhOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBwd3I6IG51bWJlcjtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcblxyXG4gICAgdGhpcy5OVU1fU0VUX1pFUk8oKTtcclxuICAgIHBvcyA9IHB3ciA9IDU7XHJcbiAgICB3aGlsZSAoZGF0YSA+IDApIHtcclxuICAgICAgdGhpcy5fZGF0YVtwb3MtLV0gPSBOVU1fVFlQRS50b1NCeXRlKGRhdGEgJSAxMDApO1xyXG4gICAgICBkYXRhID0gTWF0aC5mbG9vcihkYXRhIC8gMTAwKTtcclxuICAgIH1cclxuICAgIGlmIChwb3MgPCBwd3IpIHtcclxuICAgICAgaWYgKHBvcyA+IDApIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHdyIC0gcG9zOyBpKyspXHJcbiAgICAgICAgICB0aGlzLl9kYXRhWzEgKyBpXSA9IHRoaXMuX2RhdGFbMSArIHBvcyArIGldO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwb3M7IGkrKylcclxuICAgICAgICAgIHRoaXMuX2RhdGFbcHdyIC0gcG9zICsgMSArIGldID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHB3ciAtIHBvcyArIE5VTV9UWVBFLkVYUF9CSUFTKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbG9uZyB2YWx1ZSBmcm9tIGEgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBsb25nIHZhbHVlIG9mIHRoZSBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIE5VTV8yX0xPTkcoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJldHVybiB0aGlzLk5VTV9MT05HKCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLm51bV8yX2xvbmcoKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgVWxvbmcgdmFsdWUgZnJvbSBhIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbG9uZyB2YWx1ZSBvZiB0aGUgbnVtYmVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBOVU1fMl9VTE9ORygpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmV0dXJuIHRoaXMuTlVNX0xPTkcoKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMubnVtXzJfdWxvbmcoKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbG9uZyB2YWx1ZSBmcm9tIGEgbm9uIGxvbmcgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBsb25nIHZhbHVlIG9mIHRoZSBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIG51bV8yX2xvbmcoKTogbnVtYmVyIHtcclxuICAgIGxldCBzbG9uZzogbnVtYmVyO1xyXG4gICAgbGV0IHNpZ246IG51bWJlcjtcclxuXHJcbiAgICBzaWduID0gdGhpcy5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSztcclxuICAgIHRoaXMuX2RhdGFbMF0gJj0gTlVNX1RZUEUudG9TQnl0ZSh+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIGlmIChzaWduICE9PSAwKSB7XHJcbiAgICAgIGlmIChOVU1fVFlQRS5tZW1jbXAodGhpcywgMCwgTlVNX1RZUEUuTWluTE9ORygpLCAwLCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFKSA+IDApXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoTlVNX1RZUEUubWVtY21wKHRoaXMsIDAsIE5VTV9UWVBFLk1heExPTkcoKSwgMCwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSkgPiAwKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICBzbG9uZyA9IHRoaXMubnVtXzJfdWxvbmcoKTtcclxuICAgIGlmIChzaWduICE9PSAwKSB7XHJcbiAgICAgIHNsb25nID0gLXNsb25nO1xyXG4gICAgICB0aGlzLl9kYXRhWzBdIHw9IE5VTV9UWVBFLnRvU0J5dGUoc2lnbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKHNsb25nKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgdWxvbmcgdmFsdWUgZnJvbSBhIG5vbiBsb25nIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgdWxvbmcgdmFsdWUgb2YgdGhlIG51bWJlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgbnVtXzJfdWxvbmcoKTogbnVtYmVyIHtcclxuICAgIGxldCB2YWw6IG51bWJlcjtcclxuICAgIGxldCBwd3I6IG51bWJlcjtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBsYXN0OiBib29sZWFuO1xyXG5cclxuICAgIHB3ciA9IHRoaXMuX2RhdGFbMF0gLSBOVU1fVFlQRS5FWFBfQklBUztcclxuICAgIGlmIChwd3IgPiA1KVxyXG4gICAgICByZXR1cm4gKDApO1xyXG4gICAgbGFzdCA9IChwd3IgPT09IDUpO1xyXG4gICAgaWYgKGxhc3QpXHJcbiAgICAgIHB3ciA9IDQ7XHJcblxyXG4gICAgdmFsID0gMDtcclxuICAgIGZvciAocG9zID0gMTsgcG9zIDw9IHB3cjsgcG9zKyspXHJcbiAgICAgIHZhbCA9IHZhbCAqIDEwMCArIE5VTV9UWVBFLnRvVUJ5dGUodGhpcy5fZGF0YVtwb3NdKTtcclxuXHJcbiAgICBpZiAobGFzdClcclxuICAgICAgaWYgKHZhbCA8PSBNYXRoLmZsb29yKCgweEZGRkZGRkZGIC0gTlVNX1RZUEUudG9VQnl0ZSh0aGlzLl9kYXRhWzVdKSkgLyAxMDApKVxyXG4gICAgICAgIHZhbCA9IHZhbCAqIDEwMCArIE5VTV9UWVBFLnRvVUJ5dGUodGhpcy5fZGF0YVs1XSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB2YWwgPSAwO1xyXG4gICAgcmV0dXJuICh2YWwpO1xyXG4gICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybSB0aGUgYWN0dWFsbCBhZGQgb3BlcmF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gICAgICBUaGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICAgICAgVGhlIHNlY29uZCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9wZXJEYXRhXCI+ICBJbmZvcm1hdGlvbiBmb3IgcGVyZm9ybWluZyB0aGUgb3BlcmF0aW9uXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBUaGUgdHdvIG51bWJlcnMgYWRkZWRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBhZGRfcG9zKG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSwgb3BlckRhdGE6IE9wZXJEYXRhKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IGxlbjE6IG51bWJlcjtcclxuICAgIGxldCBsZW4yOiBudW1iZXI7XHJcbiAgICBsZXQgbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgbnVtMXB0cjogbnVtYmVyO1xyXG4gICAgbGV0IHJlc3B0cjogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBTSUdOSUZJQ0FOVF9OVU1fU0laRTogbnVtYmVyO1xyXG5cclxuICAgIC8vIG51bGwgdmFsdWVzXHJcbiAgICBpZiAobnVtMSA9PSBudWxsIHx8IG51bTIgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBTSUdOSUZJQ0FOVF9OVU1fU0laRSA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG5cclxuICAgIGxldCByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgaWYgKG9wZXJEYXRhLk5VTV9FeHAyXyA9PT0gMCB8fCAob3BlckRhdGEuTlVNX0RpZmZfID49IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMSkpIHtcclxuICAgICAgcmVzID0gbmV3IE5VTV9UWVBFKG51bTEpO1xyXG4gICAgICByZXMuX2RhdGFbMF0gPSBvcGVyRGF0YS5OVU1fRXhwMV87XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgbGVuMSA9IDE7XHJcbiAgICBmb3IgKGkgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDI7IGkgPiAwOyBpIC09IDIpIHtcclxuICAgICAgaWYgKG51bTEuU0hSVF9JU19aRVJPKGkpKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbGVuMSA9IGkgKyAxO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgaWYgKG51bTEuX2RhdGFbbGVuMV0gPT09IDApXHJcbiAgICAgIGxlbjEtLTtcclxuXHJcbiAgICBsZW4yID0gMTtcclxuICAgIGZvciAoaSA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMjsgaSA+IDA7IGkgLT0gMikge1xyXG4gICAgICBpZiAobnVtMi5TSFJUX0lTX1pFUk8oaSkpXHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxlbjIgPSBpICsgMTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGlmIChudW0yLl9kYXRhW2xlbjJdID09PSAwKVxyXG4gICAgICBsZW4yLS07XHJcblxyXG4gICAgaWYgKChsZW4gPSBNYXRoLm1heChsZW4xLCBsZW4yICsgb3BlckRhdGEuTlVNX0RpZmZfKSkgPiBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpXHJcbiAgICAgIGxlbiA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMTtcclxuXHJcbiAgICByZXMuTlVNX1NFVF9aRVJPKCk7XHJcbiAgICBudW0xcHRyID0gb3BlckRhdGEuTlVNX0RpZmZfO1xyXG4gICAgcmVzcHRyID0gb3BlckRhdGEuTlVNX0RpZmZfO1xyXG4gICAgZm9yIChwb3MgPSBsZW4gLSBvcGVyRGF0YS5OVU1fRGlmZl87IHBvcyA+IDA7IHBvcy0tKSB7XHJcbiAgICAgIHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdID1cclxuICAgICAgICBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Jlc3B0ciArIHBvc10pICsgTlVNX1RZUEUudG9VQnl0ZShudW0xLl9kYXRhW251bTFwdHIgKyBwb3NdKSArIE5VTV9UWVBFLnRvVUJ5dGUobnVtMi5fZGF0YVtwb3NdKSk7XHJcbiAgICAgIGlmIChOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdKSA+PSAxMDApIHtcclxuICAgICAgICByZXMuX2RhdGFbcmVzcHRyICsgcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcmVzcHRyICsgcG9zXSkgLSAxMDApO1xyXG4gICAgICAgIHJlcy5fZGF0YVtyZXNwdHIgKyBwb3MgLSAxXSA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIGZvciAocG9zID0gb3BlckRhdGEuTlVNX0RpZmZfOyBwb3MgPiAwOyBwb3MtLSkge1xyXG4gICAgICByZXMuX2RhdGFbcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcG9zXSkgKyBOVU1fVFlQRS50b1VCeXRlKG51bTEuX2RhdGFbcG9zXSkpO1xyXG4gICAgICBpZiAoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcG9zXSkgPj0gMTAwKSB7XHJcbiAgICAgICAgcmVzLl9kYXRhW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Bvc10pIC0gMTAwKTtcclxuICAgICAgICByZXMuX2RhdGFbcG9zIC0gMV0gPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIGlmIChyZXMuX2RhdGFbMF0gIT09IDApIHtcclxuICAgICAgZm9yIChwb3MgPSBNYXRoLm1pbihsZW4sIFNJR05JRklDQU5UX05VTV9TSVpFIC0gMik7IHBvcyA+PSAwOyBwb3MtLSlcclxuICAgICAgICByZXMuX2RhdGFbcG9zICsgMV0gPSByZXMuX2RhdGFbcG9zXTtcclxuICAgICAgb3BlckRhdGEuTlVNX0V4cDFfKys7XHJcbiAgICAgICAgICB9XHJcbiAgICByZXMuX2RhdGFbMF0gPSBvcGVyRGF0YS5OVU1fRXhwMV87XHJcblxyXG4gICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtIHRoZSBhY3R1YWxsIHN1YiBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMVwiPiAgICAgIFRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gICAgICBUaGUgc2Vjb25kIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3BlckRhdGFcIj4gIEluZm9ybWF0aW9uIGZvciBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb25cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IFRoZSByZXN1bHQgb2YgdGhlIHN1YnRyYWN0aW9uIG9wZXJhdGlvblxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIHN1Yl9wb3MobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFLCBvcGVyRGF0YTogT3BlckRhdGEpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgbGVuMTogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjI6IG51bWJlcjtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBudW0xcHRyOiBudW1iZXI7XHJcbiAgICBsZXQgcmVzcHRyOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IFNJR05JRklDQU5UX05VTV9TSVpFOiBudW1iZXI7XHJcblxyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09IG51bGwgfHwgbnVtMiA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBTSUdOSUZJQ0FOVF9OVU1fU0laRSA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG5cclxuICAgIGxldCByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgajogbnVtYmVyO1xyXG5cclxuICAgIGlmIChvcGVyRGF0YS5OVU1fRXhwMl8gPT09IDAgfHwgKG9wZXJEYXRhLk5VTV9EaWZmXyA+PSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpKSB7XHJcbiAgICAgIHJlcyA9IG5ldyBOVU1fVFlQRShudW0xKTtcclxuICAgICAgcmVzLl9kYXRhWzBdID0gb3BlckRhdGEuTlVNX0V4cDFfO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGxlbjEgPSAxO1xyXG4gICAgZm9yIChpID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAyOyBpID4gMDsgaSAtPSAyKSB7XHJcbiAgICAgIGlmIChudW0xLlNIUlRfSVNfWkVSTyhpKSlcclxuICAgICAgICBjb250aW51ZTtcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxlbjEgPSBpICsgMTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGlmIChudW0xLl9kYXRhW2xlbjFdID09PSAwKVxyXG4gICAgICBsZW4xLS07XHJcblxyXG4gICAgbGVuMiA9IDE7XHJcbiAgICBmb3IgKGkgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDI7IGkgPiAwOyBpIC09IDIpIHtcclxuICAgICAgaWYgKG51bTIuU0hSVF9JU19aRVJPKGkpKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZW4yID0gaSArIDE7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICBpZiAobnVtMi5fZGF0YVtsZW4yXSA9PT0gMClcclxuICAgICAgbGVuMi0tO1xyXG5cclxuICAgIGlmICgobGVuID0gTWF0aC5tYXgobGVuMSwgbGVuMiArIG9wZXJEYXRhLk5VTV9EaWZmXykpID4gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKVxyXG4gICAgICBsZW4gPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDE7XHJcblxyXG4gICAgcmVzLk5VTV9TRVRfWkVSTygpO1xyXG4gICAgbnVtMXB0ciA9IG9wZXJEYXRhLk5VTV9EaWZmXztcclxuICAgIHJlc3B0ciA9IG9wZXJEYXRhLk5VTV9EaWZmXztcclxuICAgIGZvciAocG9zID0gbGVuIC0gb3BlckRhdGEuTlVNX0RpZmZfOyBwb3MgPiAwOyBwb3MtLSkge1xyXG5cclxuICAgICAgcmVzLl9kYXRhW3Jlc3B0ciArIHBvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Jlc3B0ciArIHBvc10pICsgTlVNX1RZUEUudG9VQnl0ZShudW0xLl9kYXRhW251bTFwdHIgKyBwb3NdKSAtIE5VTV9UWVBFLnRvVUJ5dGUobnVtMi5fZGF0YVtwb3NdKSk7XHJcbiAgICAgIGlmIChyZXMuX2RhdGFbcmVzcHRyICsgcG9zXSA8IDApIHtcclxuICAgICAgICByZXMuX2RhdGFbcmVzcHRyICsgcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcmVzcHRyICsgcG9zXSkgKyAxMDApO1xyXG4gICAgICAgIHJlcy5fZGF0YVtyZXNwdHIgKyBwb3MgLSAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoMHhGRik7IC8vIDI1NVxyXG4gICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgZm9yIChwb3MgPSBvcGVyRGF0YS5OVU1fRGlmZl87IHBvcyA+IDA7IHBvcy0tKSB7XHJcbiAgICAgIHJlcy5fZGF0YVtwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtwb3NdKSArIE5VTV9UWVBFLnRvVUJ5dGUobnVtMS5fZGF0YVtwb3NdKSk7XHJcbiAgICAgIGlmIChyZXMuX2RhdGFbcG9zXSA8IDApIHtcclxuICAgICAgICByZXMuX2RhdGFbcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcG9zXSkgKyAxMDApO1xyXG4gICAgICAgIHJlcy5fZGF0YVtwb3MgLSAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoMHhGRik7IC8vIDI1NVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICB3aGlsZSAoKCsrcG9zIDw9IGxlbikgJiYgcmVzLl9kYXRhW3Bvc10gPT09IDApIHtcclxuICAgICAgICB9XHJcbiAgICBpZiAocG9zIDw9IGxlbikge1xyXG4gICAgICBvcGVyRGF0YS5OVU1fRGlmZl8gPSBwb3MgLSAxO1xyXG4gICAgICBpZiAob3BlckRhdGEuTlVNX0RpZmZfID4gMCkge1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW4gLSBvcGVyRGF0YS5OVU1fRGlmZl87IGorKylcclxuICAgICAgICAgIHJlcy5fZGF0YVsxICsgal0gPSByZXMuX2RhdGFbcG9zICsgal07XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG9wZXJEYXRhLk5VTV9EaWZmXzsgaisrKVxyXG4gICAgICAgICAgcmVzLl9kYXRhW2xlbiAtIG9wZXJEYXRhLk5VTV9EaWZmXyArIDEgKyBqXSA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgcmVzLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAxXykgLSBvcGVyRGF0YS5OVU1fRGlmZl8pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybSB0aGUgYWN0dWFsICBGSVggb3BlcmF0aW9uIHdpdGggd2hvbGUgcGFydCBvZiB0aGUgbnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIndob2xlc1wiPm51bWJlciBvZiBuZWVkZWQgd2hvbGUgZGlnaXRzXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgbnVtX2ZpeCh3aG9sZXM6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IG51bV9kaWZmOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgdGhpcy5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgcHdyID0gKHRoaXMuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKSAtIE5VTV9UWVBFLkVYUF9CSUFTO1xyXG5cclxuICAgIGlmICgobnVtX2RpZmYgPSBwd3IgLSAoKHdob2xlcyArIDEpID4+IDEpKSA8IDApXHJcbiAgICAgIHJldHVybjtcclxuICAgIGlmIChudW1fZGlmZiA8IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSB7XHJcbiAgICAgIGlmICgod2hvbGVzICYgMSkgPT09IDEpXHJcbiAgICAgICAgdGhpcy5fZGF0YVsxICsgbnVtX2RpZmZdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLl9kYXRhWzEgKyBudW1fZGlmZl0gJSAxMCk7XHJcbiAgICAgIHdoaWxlICgobnVtX2RpZmYgPCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSkgJiYgdGhpcy5fZGF0YVsxICsgbnVtX2RpZmZdID09PSAwKVxyXG4gICAgICAgIG51bV9kaWZmKys7XHJcbiAgICAgIH1cclxuICAgIGlmIChudW1fZGlmZiA+PSB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSkge1xyXG4gICAgICAgIHRoaXMuTlVNX1pFUk8oKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICBpZiAobnVtX2RpZmYgPiAwKSB7XHJcbiAgICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSAtIG51bV9kaWZmOyBpKyspXHJcbiAgICAgICAgdGhpcy5fZGF0YVsxICsgaV0gPSB0aGlzLl9kYXRhWzEgKyBudW1fZGlmZiArIGldO1xyXG5cclxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9kaWZmOyBpKyspXHJcbiAgICAgICAgdGhpcy5fZGF0YVt0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gbnVtX2RpZmYgKyBpXSA9IDA7XHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuX2RhdGFbMF0gLSBOVU1fVFlQRS50b1NCeXRlKG51bV9kaWZmKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hlY2sgaWYgYnl0ZSBvbiBzcGVjaWZpYyBwb3NpdGlvbiBpcyB6ZXJvIG9yIDB4RkZcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicG9zaXRpb25cIj5pbiBOVU0gdG8gYmUgY2hlY2tlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gaXMgdGhlIGJ5dGUgemVyb1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgU0hSVF9JU19aRVJPKHBvczogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YVtwb3NdID09PSAwICYmIHRoaXMuX2RhdGFbcG9zICsgMV0gPT09IDA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgWmVybyBhIE1hZ2ljIE51bWJlci4gSWYgdGhlIG51bWJlciBzaG91bGQgY29udGFpbiBhIGxvbmcgemVybywgdGhlIGZpcnN0XHJcbiAgLy8vICAgYnl0ZSBpcyBzZXQgdG8gTlVNX0xPTkdfVFlQRS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYXNMb25nXCI+ICBzZXQgdGhlIE1hZ2ljIE51bWJlciB0byBjb250YWluIGEgbG9uZyB6ZXJvIHZhbHVlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzZXRaZXJvKGFzTG9uZzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX1RZUEUuTlVNX1NJWkU7IGkrKylcclxuICAgICAgdGhpcy5fZGF0YVtpXSA9IDA7XHJcblxyXG4gICAgaWYgKGFzTG9uZylcclxuICAgICAgdGhpcy5fZGF0YVswXSA9IE5VTV9UWVBFLk5VTV9MT05HX1RZUEU7XHJcbiAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb21wYXJlIHR3byBNYWdpYyBOdW1iZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gIFRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBvczFcIj4gIFRoZSBwb3NpdGlvbiBvZiBudW0xIHRvIGNvbXBhcmUgZnJvbVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMlwiPiAgVGhlIHNlY29uZCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBvczNcIj4gIFRoZSBwb3NpdGlvbiBvZiBudW0yIHRvIGNvbXBhcmUgZnJvbVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gMCBpZiBpZGVudGljYWwsIDEgaWYgbnVtMT5udW0yLCAtMSBpZiBudW0xPG51bTJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIG1lbWNtcChudW0xOiBOVU1fVFlQRSwgcG9zMTogbnVtYmVyLCBudW0yOiBOVU1fVFlQRSwgcG9zMjogbnVtYmVyLCBsZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMDtcclxuXHJcbiAgICB3aGlsZSAoaSA8IGxlbiAmJiBudW0xLl9kYXRhW3BvczFdID09PSBudW0yLl9kYXRhW3BvczJdICYmIHBvczEgPCBOVU1fVFlQRS5OVU1fU0laRSAmJiBwb3MyIDwgTlVNX1RZUEUuTlVNX1NJWkUpIHtcclxuICAgICAgaSsrO1xyXG4gICAgICBwb3MxKys7XHJcbiAgICAgIHBvczIrKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaSA9PT0gbGVuKVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIGVsc2UgaWYgKHRoaXMudG9VQnl0ZShudW0xLl9kYXRhW3BvczFdKSA8IHRoaXMudG9VQnl0ZShudW0yLl9kYXRhW3BvczJdKSlcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gMTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgYSB1bnNpZ25lZCB2YWx1ZSBmcm9tIGEgYnl0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJieXRlVmFsXCI+ICBBIHNpZ25lZCBieXRlIHZhbHVlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgdW5zaWduZWQgdmFsdWUgb2YgdGhlIGJ5dGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyB0b1VCeXRlKGJ5dGVWYWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgdmFsOiBudW1iZXIgPSBieXRlVmFsO1xyXG5cclxuICAgIGlmIChieXRlVmFsIDwgMClcclxuICAgICAgdmFsID0gMjU2ICsgYnl0ZVZhbDtcclxuXHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIHNpZ25lZCBieXRlIHZhbHVlIGZyb20gYSB1bnNpZ25lZCB2YWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic2lnbmVkVmFsXCI+ICBBbiB1bnNpZ25lZCBieXRlIHZhbHVlIChhcyBhbiBpbnRlZ2VyKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHNpZ25lZCB2YWx1ZSBhcyBhIGJ5dGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyB0b1NCeXRlKHVuc2lnbmVkVmFsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHZhbDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodW5zaWduZWRWYWwgPiBDb25zdGFudHMuU0J5dGVNYXhWYWx1ZSlcclxuICAgICAgdmFsID0gKHVuc2lnbmVkVmFsIC0gMjU2KTtcclxuICAgIGVsc2VcclxuICAgICAgdmFsID0gdW5zaWduZWRWYWw7XHJcblxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIG1heGltdW0gbG9uZyBudW1iZXIgaW4gTlVNX1RZUEUgc3RkIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIE1heExPTkcoKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IG5VTV9UWVBFOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgblVNX1RZUEUuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNSk7XHJcbiAgICBuVU1fVFlQRS5fZGF0YVsxXSA9IDIxO1xyXG4gICAgblVNX1RZUEUuX2RhdGFbMl0gPSA0NztcclxuICAgIG5VTV9UWVBFLl9kYXRhWzNdID0gNDg7XHJcbiAgICBuVU1fVFlQRS5fZGF0YVs0XSA9IDM2O1xyXG4gICAgblVNX1RZUEUuX2RhdGFbNV0gPSA0NztcclxuICAgIHJldHVybiBuVU1fVFlQRTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIG1pbmltdW0gbG9uZyBudW1iZXIgaW4gTlVNX1RZUEUgc3RkIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIE1pbkxPTkcoKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IG51bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIG51bS5fZGF0YVswXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA1KTtcclxuICAgIG51bS5fZGF0YVsxXSA9IDIxO1xyXG4gICAgbnVtLl9kYXRhWzJdID0gNDc7XHJcbiAgICBudW0uX2RhdGFbM10gPSA0ODtcclxuICAgIG51bS5fZGF0YVs0XSA9IDM2O1xyXG4gICAgbnVtLl9kYXRhWzVdID0gNDg7XHJcbiAgICByZXR1cm4gbnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBkb3VibGUgbnVtYmVyIGZyb20gTWFnaWMgTlVNX1RZUEVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHRvX2RvdWJsZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZV9tZ18yX2Zsb2F0KDgpOyAvLyBMZW5ndGggb2YgZG91YmxlIGlzIDggYnl0ZVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBkb3VibGUgbnVtYmVyIGZyb20gTWFnaWMgTlVNX1RZUEVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGVuXCI+b2YgYnl0ZSBvZiBuZWVkZWQgbnVtYmVyIC0gVVNFIDhcclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIHN0b3JhZ2VfbWdfMl9mbG9hdChsZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc2lnbl9wb3M6IG51bWJlcjtcclxuICAgIGxldCBzaWduOiBudW1iZXI7XHJcbiAgICBsZXQgY29tcG51bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCB0bXBudW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgZGl2bnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IGJpdHM6IG51bWJlcjtcclxuICAgIGxldCBleHA6IG51bWJlcjtcclxuICAgIGxldCBsb25nMTogbnVtYmVyID0gMDtcclxuICAgIGxldCBsb25nMjogbnVtYmVyID0gMDtcclxuICAgIGxldCBmbHRPdXQ6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgY291dDogSW50OEFycmF5ID0gbmV3IEludDhBcnJheShbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0pO1xyXG4gICAgbGV0IE51bTJQd3IyM186IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA0KSwgOCwgMzgsIDg2LCA4XSk7XHJcbiAgICBsZXQgTnVtMlB3cjUyXzogSW50OEFycmF5ID0gbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDgpLCA0NSwgMywgNTksIDk2LCAyNywgMzcsIDQsIDk2XSk7XHJcbiAgICBsZXQgYmFzZV9OdW0xNlB3cnM6IEludDhBcnJheVtdID0gW1xyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDFdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAxNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMiksIDIsIDU2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAyKSwgNDAsIDk2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAzKSwgNiwgNTUsIDM2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA0KSwgMSwgNCwgODUsIDc2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA0KSwgMTYsIDc3LCA3MiwgMTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDUpLCAyLCA2OCwgNDMsIDU0LCA1Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNSksIDQyLCA5NCwgOTYsIDcyLCA5Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNiksIDYsIDg3LCAxOSwgNDcsIDY3LCAzNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNyksIDEsIDksIDk1LCAxMSwgNjIsIDc3LCA3Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNyksIDE3LCA1OSwgMjEsIDg2LCA0LCA0NCwgMTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDgpLCAyLCA4MSwgNDcsIDQ5LCA3NiwgNzEsIDYsIDU2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA4KSwgNDUsIDMsIDU5LCA5NiwgMjcsIDM3LCA0LCA5Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgOSksIDcsIDIwLCA1NywgNTksIDQwLCAzNywgOTIsIDc5LCAzNl0pXHJcbiAgICBdO1xyXG5cclxuICAgIGxldCBiYXNlX051bTJQd3JzOiBJbnQ4QXJyYXlbXSA9IFtcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAxXSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgMl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDRdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCA4XSlcclxuICAgICAgXTtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICB0aGlzLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICBpZiAodGhpcy5fZGF0YVswXSA9PT0gMClcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICBzaWduID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIHRoaXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuX2RhdGFbMF0gJiA8bnVtYmVyPih+TlVNX1RZUEUuU0lHTl9NQVNLKSk7XHJcbiAgICBpZiAobGVuID09PSA0KSB7XHJcbiAgICAgIGJpdHMgPSAyNDtcclxuICAgICAgY29tcG51bSA9IG5ldyBOVU1fVFlQRShOdW0yUHdyMjNfKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBiaXRzID0gNTM7XHJcbiAgICAgIGNvbXBudW0gPSBuZXcgTlVNX1RZUEUoTnVtMlB3cjUyXyk7XHJcbiAgICB9XHJcbiAgICBwd3IgPSAodGhpcy5fZGF0YVswXSAtIE5VTV9UWVBFLkVYUF9CSUFTKSA8PCAxO1xyXG4gICAgaWYgKHB3ciA8IDApXHJcbiAgICAgIGV4cCA9IHB3ciAqIDMgKyBNYXRoLmZsb29yKChwd3IgKyAxKSAvIDMpO1xyXG4gICAgZWxzZSBleHAgPSBwd3IgKiAzICsgTWF0aC5mbG9vcigocHdyICsgMikgLyAzKTtcclxuICAgIHB3ciA9IGJpdHMgLSBleHA7XHJcbiAgICBpZiAocHdyIDwgMCkge1xyXG4gICAgICBwd3IgPSAtcHdyO1xyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5kaXYodGhpcywgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzW3B3ciA+PiAyXSkpO1xyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5kaXYodG1wbnVtLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0yUHdyc1twd3IgJiAzXSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRtcG51bSA9IHRoaXM7XHJcbiAgICAgIHdoaWxlIChwd3IgPj0gNjApIHtcclxuICAgICAgICB0bXBudW0gPSBOVU1fVFlQRS5tdWwodG1wbnVtLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0xNlB3cnNbMTRdKSk7XHJcbiAgICAgICAgcHdyIC09IDU2O1xyXG4gICAgICB9XHJcbiAgICAgIHRtcG51bSA9IE5VTV9UWVBFLm11bCh0bXBudW0sIG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1twd3IgPj4gMl0pKTtcclxuICAgICAgdG1wbnVtID0gTlVNX1RZUEUubXVsKHRtcG51bSwgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMlB3cnNbcHdyICYgM10pKTtcclxuICAgIH1cclxuICAgIHdoaWxlIChOVU1fVFlQRS5udW1fY21wKHRtcG51bSwgY29tcG51bSkgPCAwKSB7XHJcbiAgICAgIGV4cC0tO1xyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5hZGQodG1wbnVtLCB0bXBudW0pO1xyXG4gICAgfVxyXG4gICAgaWYgKGxlbiA9PT0gNCkge1xyXG4gICAgICBsb25nMSA9IHRtcG51bS5udW1fMl91bG9uZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGRpdm51bSA9IE5VTV9UWVBFLmRpdih0bXBudW0sIG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1s4XSkpO1xyXG4gICAgICBkaXZudW0ubnVtX3RydW5jKDApO1xyXG4gICAgICBsb25nMSA9IGRpdm51bS5udW1fMl91bG9uZygpO1xyXG4gICAgICBkaXZudW0gPSBOVU1fVFlQRS5tdWwoZGl2bnVtLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0xNlB3cnNbOF0pKTtcclxuICAgICAgZGl2bnVtID0gTlVNX1RZUEUuc3ViKHRtcG51bSwgZGl2bnVtKTtcclxuICAgICAgbG9uZzIgPSBkaXZudW0ubnVtXzJfdWxvbmcoKTtcclxuICAgIH1cclxuICAgIHNpZ25fcG9zID0gbGVuIC0gMTtcclxuICAgIGlmIChsZW4gPT09IDQpIHtcclxuICAgICAgZXhwICs9IDEyNjtcclxuICAgICAgY291dFszXSA9IE5VTV9UWVBFLnRvU0J5dGUoZXhwID4+IDEpO1xyXG4gICAgICBjb3V0WzJdID0gTlVNX1RZUEUudG9TQnl0ZSgodGhpcy5MT19DSEFSKHRoaXMuSElfU0hSVChsb25nMSkpICYgMHg3RikgfCAoKGV4cCAmIDB4MDEpIDw8IDcpKTtcclxuICAgICAgY291dFsxXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5ISV9DSEFSKHRoaXMuTE9fU0hSVChsb25nMSkpKTtcclxuICAgICAgY291dFswXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5MT19DSEFSKHRoaXMuTE9fU0hSVChsb25nMSkpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBleHAgKz0gMTAyMjtcclxuICAgICAgY291dFs3XSA9IE5VTV9UWVBFLnRvU0J5dGUoZXhwID4+IDQpO1xyXG5cclxuICAgICAgY291dFs2XSA9IE5VTV9UWVBFLnRvU0J5dGUoKHRoaXMuTE9fQ0hBUih0aGlzLkhJX1NIUlQobG9uZzEpKSAmIDB4MEYpIHwgKChleHAgJiAweDBGKSA8PCA0KSk7XHJcblxyXG4gICAgICBjb3V0WzVdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLkhJX0NIQVIodGhpcy5MT19TSFJUKGxvbmcxKSkpO1xyXG5cclxuICAgICAgY291dFs0XSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5MT19DSEFSKHRoaXMuTE9fU0hSVChsb25nMSkpKTtcclxuICAgICAgY291dFszXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5ISV9DSEFSKHRoaXMuSElfU0hSVChsb25nMikpKTtcclxuICAgICAgY291dFsyXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5MT19DSEFSKHRoaXMuSElfU0hSVChsb25nMikpKTtcclxuICAgICAgY291dFsxXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5ISV9DSEFSKHRoaXMuTE9fU0hSVChsb25nMikpKTtcclxuICAgICAgY291dFswXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5MT19DSEFSKHRoaXMuTE9fU0hSVChsb25nMikpKTtcclxuICAgIH1cclxuICAgIGlmIChzaWduICE9PSAwKSB7XHJcbiAgICAgIGNvdXRbc2lnbl9wb3NdIHw9IE5VTV9UWVBFLlNJR05fTUFTSztcclxuICAgICAgdGhpcy5fZGF0YVswXSB8PSBOVU1fVFlQRS5TSUdOX01BU0s7XHJcbiAgICB9XHJcbiAgICBmbHRPdXQgPSB0aGlzLnNieXRlQXJyXzJfRG91YmxlKGNvdXQpO1xyXG4gICAgcmV0dXJuIGZsdE91dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCaXRfV2lzZSBtYXNrIDogTGVhdmUgbGFzdCBieXRlIGluIG51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBMT19DSEFSKG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gbiAmIDI1NTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCaXRfV2lzZSBtYXNrIDogTGVhdmUgYnl0ZSBiZWZvcmUgbGFzdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBISV9DSEFSKG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKG4gJiA2NTI4MCkgPj4gODtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCaXRfV2lzZSBtYXNrIDogTGVhdmUgMiBsYXN0IGJ5dGVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIExPX1NIUlQobjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiA8bnVtYmVyPihuICYgNjU1MzUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJpdF9XaXNlIG1hc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgSElfU0hSVChuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDxudW1iZXI+KChuICYgLTY1NTM2KSA+PiAxNik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQml0X1dpc2UgbWFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTUtfU0hSVChjMTogbnVtYmVyLCBjMjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBzdHJJbnQ6IHN0cmluZyA9IChjMSA8PCA4IHwgYzIpLnRvU3RyaW5nKCk7XHJcbiAgICByZXR1cm4gTk51bWJlci5QYXJzZShzdHJJbnQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJpdF9XaXNlIG1hc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc3RhdGljIE1LX0xPTkcoczE6IG51bWJlciwgczI6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgbDE6IG51bWJlciA9IDxudW1iZXI+czE7XHJcbiAgICBsZXQgbDI6IG51bWJlciA9IDxudW1iZXI+czI7XHJcbiAgICBsZXQgc3RyTG5nOiBzdHJpbmcgPSAobDEgPDwgMTYgfCBsMikudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBOTnVtYmVyLlBhcnNlKHN0ckxuZyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBkb3VibGUgZnJvbSBhcnJheSBvZiBieXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhcnJheVwiPm9mIGJ5dGVzLCBpbm5lciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG91YmxlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBkb3VibGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc2J5dGVBcnJfMl9Eb3VibGUoYXJyYXk6IEludDhBcnJheSk6IG51bWJlciB7XHJcbiAgICBsZXQgZGF0YXZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXkuYnVmZmVyKTtcclxuICAgIHJldHVybiBkYXRhdmlldy5nZXRGbG9hdDY0KDAsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBieXRlIGFycmF5IGZvciBkb3VibGUgKDggYnl0ZXMgaW4gSmF2YSlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZG91YmxlXCI+dG8gZ2V0IGl0cyBieXRlIHJlcHJlc2VudGF0aW9uXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBieXRlIGFycmF5XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBkb3VibGVfMl9zYnl0ZUFycmF5KGQ6IG51bWJlcik6IEludDhBcnJheSB7XHJcbiAgICBsZXQgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xyXG4gICAgbGV0IGRhdGF2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcik7XHJcbiAgICBkYXRhdmlldy5zZXRGbG9hdDY0KDAsIGQsIHRydWUpO1xyXG4gICAgcmV0dXJuIChuZXcgSW50OEFycmF5KGRhdGF2aWV3LmJ1ZmZlcikpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBlcmZvcm1pbmcgYW4gUG93ZXIgb3BlcmF0aW9uIG9uIHR3byBtYWdpYyBudW1iZXJzIFZhbDFeVmFsMlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICB0aGUgZmlyc3QgbnVtYmVyIC0gbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICB0aGUgZmlyc3QgbnVtYmVyIC0gcG93ZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXN1bHRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBldmFsX29wX3B3cihudW0xOiBOVU1fVFlQRSwgbnVtMjogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgZDA6IG51bWJlcjtcclxuICAgIGxldCBkMTogbnVtYmVyO1xyXG5cclxuICAgIC8vIG51bGwgdmFsdWVzXHJcbiAgICBpZiAobnVtMSA9PSBudWxsIHx8IG51bTIgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgLy8gSWYgc2Vjb25kIG9wZXJhdG9yIGlzIGFuIGludGVnZXIgKHdoaWNoIGlzIHNvIGluIG1vc3Qgb2YgdGhlIGNhc2VzKVxyXG4gICAgLy8gYW5kIGl0IGlzIG5vdCAtdmUsIHRoZW4gY2FsY3VsYXRlIHBvd2VyIHVzaW5nIHNpbXBsZSBtdWx0aXBsaWNhdGlvblxyXG4gICAgLy8gVGhlcmUgaXMgYSBwcm9ibGVtIGluIGZyb21fZG91YmxlIGFzIGl0IGRvZXNuJ3QgcmV0dXJuIGV4YWN0XHJcbiAgICAvLyB2YWx1ZXMgKGZvciBleGFtcGxlLCBwYXNzaW5nIDEuMDAyNDQxIGluIG51bSB0byBmcm9tX2RvdWJsZSB3b3VsZFxyXG4gICAgLy8gcmV0dXJuIDEuMDAyNDQwOTk5OTk5OTkpLiBidHcsIHRoaXMgcHJvYmxlbSBleGlzdHMgZXZlbiBpbiBWaXN1YWwgc3R1ZGlvJ3NcclxuICAgIC8vIHdhdGNoIHdpbmRvdyAodHJ5IHR5cGluZyAxLjAwMjQ0MSBpbiBOYW1lIGNvbHVtbiBvZiB3YXRjaCB3aW5kb3cpLlxyXG4gICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSAmJiAhbnVtMi5udW1faXNfbmVnKCkpIHtcclxuICAgICAgZDEgPSBudW0yLnRvX2RvdWJsZSgpO1xyXG4gICAgICBsZXQgcmVzdWx0OiBOVU1fVFlQRSA9IE5VTV9UWVBFLmZyb21fZG91YmxlKDEpO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZDE7IGkrKylcclxuICAgICAgICByZXN1bHQgPSB0aGlzLm11bChyZXN1bHQsIG51bTEpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgZDAgPSBudW0xLnRvX2RvdWJsZSgpO1xyXG4gICAgICBkMSA9IG51bTIudG9fZG91YmxlKCk7XHJcbiAgICAgIGlmIChkMCA8IDAuMCAmJiBkMSAhPT0gPG51bWJlcj4gZDEpXHJcbiAgICAgICAgZDAgPSAwLjA7XHJcbiAgICAgIC8qIHB3ciAoMC4wLCAwLjApIC0+IGVycm9yICovXHJcbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgICAgIGVsc2UgaWYgKGQwICE9PSAwLjApXHJcbiAgICAgICAgZDAgPSBNYXRoLnBvdyhkMCwgZDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOVU1fVFlQRS5mcm9tX2RvdWJsZShkMCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJhbnNsYXRlIGRvdWJsZSB0byBOVU1fVFlQRVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkb3VibGVcIj50byB0cmFuc2xhdGVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IE5VTV9UWVBFIG9mIHRoZSBkb3VibGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBmcm9tX2RvdWJsZShkMDogbnVtYmVyKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IGFycmF5OiBJbnQ4QXJyYXkgPSBOVU1fVFlQRS5kb3VibGVfMl9zYnl0ZUFycmF5KGQwKTtcclxuICAgIHJldHVybiBOVU1fVFlQRS5zdG9yYWdlX21nXzRfZmxvYXQoOCwgYXJyYXkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSBieXRlIGFycmF5ICB0byBOVU1fVFlQRVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZW5cIj5vZiB0aGUgbmVlZGVkIG51bWJlcig4KVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYnl0ZVwiPmFycmF5IG1hc2tcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IE5VTV9UWVBFIGZvciB0aGUgbmVlZGVkIGF0dHJpYnV0ZXNcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIHN0b3JhZ2VfbWdfNF9mbG9hdChsZW46IG51bWJlciwgaW5wOiBJbnQ4QXJyYXkpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgY2lucDogbnVtYmVyW107XHJcbiAgICBsZXQgc2lnbjogbnVtYmVyO1xyXG4gICAgbGV0IHRtcDE6IG51bWJlcjtcclxuICAgIGxldCBleHA6IG51bWJlcjtcclxuICAgIGxldCBiaWFzOiBudW1iZXI7XHJcbiAgICBsZXQgbG9uZzE6IG51bWJlcjtcclxuICAgIGxldCBsb25nMjogbnVtYmVyO1xyXG5cclxuICAgIGNpbnAgPSBuZXcgQXJyYXk8bnVtYmVyPihpbnAubGVuZ3RoKTtcclxuICAgIGZvciAodG1wMSA9IDA7XHJcbiAgICAgICAgIHRtcDEgPCBpbnAubGVuZ3RoO1xyXG4gICAgICAgICB0bXAxKyspXHJcbiAgICAgIGNpbnBbdG1wMV0gPSBOVU1fVFlQRS50b1VCeXRlKGlucFt0bXAxXSk7XHJcblxyXG4gICAgc2lnbiA9IGNpbnBbbGVuIC0gMV07XHJcbiAgICBpZiAobGVuID09PSA0KSB7XHJcbiAgICAgIGV4cCA9IDxudW1iZXI+KChjaW5wWzJdID4+IDcpIHwgKChjaW5wWzNdICYgMHg3RikgPDwgMSkpO1xyXG4gICAgICBiaWFzID0gMTUwOyAvLyAxMjYgKyAoMSArIDIzKTtcclxuICAgICAgbG9uZzEgPSAwO1xyXG4gICAgICBsb25nMiA9IE5VTV9UWVBFLk1LX0xPTkcoTlVNX1RZUEUuTUtfU0hSVCgwLCBjaW5wWzJdIHwgMHg4MCksIE5VTV9UWVBFLk1LX1NIUlQoY2lucFsxXSwgY2lucFswXSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGV4cCA9IDxudW1iZXI+KCgoY2lucFs3XSAmIDB4N0YpIDw8IDQpIHwgKGNpbnBbNl0gPj4gNCkpO1xyXG4gICAgICBiaWFzID0gMTA3NTsgLy8gMTAyMiArICgxICsgMjAgKyAzMik7XHJcbiAgICAgIGxvbmcxID0gTlVNX1RZUEUuTUtfTE9ORyhOVU1fVFlQRS5NS19TSFJUKDAsIChjaW5wWzZdICYgMHgwRikgfCAweDEwKSwgTlVNX1RZUEUuTUtfU0hSVChjaW5wWzVdLCBjaW5wWzRdKSk7XHJcbiAgICAgIGxvbmcyID0gTlVNX1RZUEUuTUtfTE9ORyhOVU1fVFlQRS5NS19TSFJUKGNpbnBbM10sIGNpbnBbMl0pLCBOVU1fVFlQRS5NS19TSFJUKGNpbnBbMV0sIGNpbnBbMF0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBOVU1fVFlQRS5zdG9yYWdlX251bV80X2ZsZF9mbHQobG9uZzEsIGxvbmcyLCAxOCwgc2lnbiwgYmlhcywgZXhwKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cmFuc2xhdGUgYnl0ZSBhcnJheSAgdG8gTlVNX1RZUEUgKGxpa2UgaW4gTWFnaWMgU291Y2UgY29kZSkuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHN0YXRpYyBzdG9yYWdlX251bV80X2ZsZF9mbHQobG9uZzE6IG51bWJlciwgbG9uZzI6IG51bWJlciwgZGVjOiBudW1iZXIsIHNpZ246IG51bWJlciwgYmlhczogbnVtYmVyLCBleHByOiBudW1iZXIpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgYmFzZV9OdW0xNlB3cnM6IEludDhBcnJheVtdID0gW1xyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDFdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAxNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMiksIDIsIDU2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAyKSwgNDAsIDk2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAzKSwgNiwgNTUsIDM2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA0KSwgMSwgNCwgODUsIDc2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA0KSwgMTYsIDc3LCA3MiwgMTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDUpLCAyLCA2OCwgNDMsIDU0LCA1Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNSksIDQyLCA5NCwgOTYsIDcyLCA5Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNiksIDYsIDg3LCAxOSwgNDcsIDY3LCAzNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNyksIDEsIDksIDk1LCAxMSwgNjIsIDc3LCA3Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNyksIDE3LCA1OSwgMjEsIDg2LCA0LCA0NCwgMTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDgpLCAyLCA4MSwgNDcsIDQ5LCA3NiwgNzEsIDYsIDU2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA4KSwgNDUsIDMsIDU5LCA5NiwgMjcsIDM3LCA0LCA5Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgOSksIDcsIDIwLCA1NywgNTksIDQwLCAzNywgOTIsIDc5LCAzNl0pXHJcbiAgICBdO1xyXG5cclxuICAgIGxldCBiYXNlX051bTJQd3JzOiBJbnQ4QXJyYXlbXSA9IFtcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAxXSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgMl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDRdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCA4XSlcclxuICAgIF07XHJcbiAgICBsZXQgdG1wbnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG91dFZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBleHA6IG51bWJlciA9IDxudW1iZXI+ZXhwcjtcclxuICAgIGlmIChleHAgPT09IDApIHtcclxuICAgICAgb3V0VmFsLk5VTV9aRVJPKCk7XHJcbiAgICAgIHJldHVybiBvdXRWYWw7XHJcbiAgICB9XHJcbiAgICBvdXRWYWwubnVtXzRfdWxvbmcobG9uZzIpO1xyXG4gICAgaWYgKGxvbmcxICE9PSAwKSB7XHJcbiAgICAgIHRtcG51bS5udW1fNF91bG9uZyhsb25nMSk7XHJcbiAgICAgIHRtcG51bSA9IE5VTV9UWVBFLm11bCh0bXBudW0sIG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1s4XSkpO1xyXG4gICAgICBvdXRWYWwgPSBOVU1fVFlQRS5hZGQodG1wbnVtLCBvdXRWYWwpO1xyXG4gICAgfVxyXG4gICAgZXhwID0gPG51bWJlcj4oZXhwIC0gYmlhcyk7XHJcbiAgICBpZiAoZXhwIDwgMCkge1xyXG4gICAgICBleHAgPSAtZXhwO1xyXG4gICAgICB3aGlsZSAoZXhwID49IDYwKSB7XHJcbiAgICAgICAgb3V0VmFsID0gTlVNX1RZUEUuZGl2KG91dFZhbCwgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzWzE0XSkpO1xyXG4gICAgICAgIGV4cCAtPSA1NjtcclxuICAgICAgfVxyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5tdWwobmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzW2V4cCA+PiAyXSksXHJcbiAgICAgICAgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMlB3cnNbZXhwICYgM10pKTtcclxuICAgICAgb3V0VmFsID0gTlVNX1RZUEUuZGl2KG91dFZhbCwgdG1wbnVtKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZXhwID49IDYwKSB7XHJcbiAgICAgICAgb3V0VmFsLk5VTV9aRVJPKCk7XHJcbiAgICAgICAgcmV0dXJuIG91dFZhbDtcclxuICAgICAgfVxyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5tdWwobmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzW2V4cCA+PiAyXSksXHJcbiAgICAgICAgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMlB3cnNbZXhwICYgM10pKTtcclxuICAgICAgb3V0VmFsID0gTlVNX1RZUEUubXVsKG91dFZhbCwgdG1wbnVtKTtcclxuICAgIH1cclxuICAgIGlmICgoc2lnbiAmIDB4ODApICE9PSAwKVxyXG4gICAgICBvdXRWYWwuX2RhdGFbMF0gPSBvdXRWYWwuX2RhdGFbMF0gfCBOVU1fVFlQRS5TSUdOX01BU0s7XHJcbiAgICBvdXRWYWwucm91bmQoZGVjKTtcclxuICAgIHJldHVybiBvdXRWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWF0aGVtYXRpY2FsIGZ1bmN0aW9ucyBpbXBsZW1lbnRhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGV2YWxfb3BfbG9nKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcblxyXG4gICAgaWYgKGQgPiAwLjApXHJcbiAgICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKE1hdGgubG9nKGQpKTtcclxuICAgIGVsc2VcclxuICAgICAgcmVzVmFsLk5VTV9aRVJPKCk7XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV2YWxfb3BfZXhwKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEU7XHJcblxyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgZDogbnVtYmVyID0gdmFsMS50b19kb3VibGUoKTtcclxuICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKE1hdGguZXhwKGQpKTtcclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXZhbF9vcF9hYnModmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSh2YWwxKTtcclxuICAgIHJlc1ZhbC5udW1fYWJzKCk7XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV2YWxfb3Bfc2luKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLnRvX2RvdWJsZSgpO1xyXG4gICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC5zaW4oZCkpO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX2Nvcyh2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGlmICh2YWwxID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIGxldCByZXNWYWw6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLnRvX2RvdWJsZSgpO1xyXG4gICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC5jb3MoZCkpO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX3Rhbih2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGlmICh2YWwxID09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLnRvX2RvdWJsZSgpO1xyXG4gICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC50YW4oZCkpO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX2FzaW4odmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcbiAgICBpZiAoZCA8PSAxLjAgJiYgZCA+PSAtMS4wKVxyXG4gICAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShNYXRoLmFzaW4oZCkpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZSgwLjApO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX2Fjb3ModmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcblxyXG4gICAgaWYgKGQgPD0gMS4wICYmIGQgPj0gLTEuMClcclxuICAgICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC5hY29zKGQpKTtcclxuICAgIGVsc2VcclxuICAgICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoMC4wKTtcclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXZhbF9vcF9hdGFuKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcbiAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShNYXRoLmF0YW4oZCkpO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIG51bV9hYnMoKTogdm9pZCB7XHJcbiAgICBsZXQgbDogbnVtYmVyO1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICBsID0gdGhpcy5OVU1fTE9ORygpO1xyXG4gICAgICBpZiAobCA8IDApXHJcbiAgICAgICAgbCA9IC1sO1xyXG4gICAgICB0aGlzLk5VTV80X0xPTkcobCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2RhdGFbMF0gJj0gTlVNX1RZUEUudG9TQnl0ZSh+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSYW5kb21hbCBNYXRoIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgZXZhbF9vcF9yYW5kKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCByYW5kX2luaXRpYWxpemVkOiBib29sZWFuID0gUmFuZG9taXplci5nZXRfaW5pdGlhbGl6ZWQoKTtcclxuICAgIGxldCByYW5kX21vZDogTlVNX1RZUEU7XHJcbiAgICBsZXQgcmFuZF9tdWw6IE5VTV9UWVBFO1xyXG4gICAgbGV0IHJhbmRfc2VlZDogTlVNX1RZUEU7XHJcblxyXG4gICAgbGV0IHRtcF9udW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgaWYgKCFyYW5kX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIFJhbmRvbWl6ZXIuc2V0X2luaXRpYWxpemVkKCk7IC8vIHNldCB0byB0cnVlXHJcbiAgICAgIHJhbmRfbW9kID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgIHJhbmRfbXVsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgIHJhbmRfc2VlZCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICByYW5kX21vZC5udW1fNF9hX3N0ZChcIjEwMDAwMDAwN1wiKTtcclxuICAgICAgcmFuZF9tdWwubnVtXzRfYV9zdGQoXCI3NTAwMDAwN1wiKTtcclxuICAgICAgcmFuZF9zZWVkLm51bV80X2Ffc3RkKFwiMTIzNDU2NzhcIik7XHJcblxyXG4gICAgICBSYW5kb21pemVyLnNldF9tb2QocmFuZF9tb2QudG9fZG91YmxlKCkpO1xyXG4gICAgICBSYW5kb21pemVyLnNldF9tdWwocmFuZF9tdWwudG9fZG91YmxlKCkpO1xyXG4gICAgICBSYW5kb21pemVyLnNldF9zZWVkKHJhbmRfc2VlZC50b19kb3VibGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICByYW5kX21vZCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKFJhbmRvbWl6ZXIuZ2V0X21vZCgpKTtcclxuICAgICAgcmFuZF9tdWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShSYW5kb21pemVyLmdldF9tdWwoKSk7XHJcbiAgICAgIHJhbmRfc2VlZCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKFJhbmRvbWl6ZXIuZ2V0X3NlZWQoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGlmICghdmFsMS5udW1faXNfemVybygpKSB7XHJcbiAgICAgIGlmICh2YWwxLm51bV9pc19uZWcoKSlcclxuICAgICAgICByYW5kX3NlZWQuTlVNXzRfTE9ORyhOVU1fVFlQRS5oYXNoX3JhbmQoKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByYW5kX3NlZWQgPSBuZXcgTlVNX1RZUEUodmFsMSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgIGlmIChyYW5kX3NlZWQubnVtX2lzX25lZygpKSB7XHJcbiAgICAgICAgdG1wX251bS5OVU1fNF9MT05HKC0xKTtcclxuICAgICAgICByYW5kX3NlZWQgPSBOVU1fVFlQRS5tdWwocmFuZF9zZWVkLCB0bXBfbnVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJhbmRfc2VlZCA9IE5VTV9UWVBFLm11bChyYW5kX3NlZWQsIHJhbmRfbXVsKTtcclxuICAgIHJhbmRfc2VlZCA9IE5VTV9UWVBFLm1vZChyYW5kX3NlZWQsIHJhbmRfbW9kKTtcclxuICAgIHRtcF9udW0gPSBOVU1fVFlQRS5kaXYocmFuZF9zZWVkLCByYW5kX21vZCk7XHJcbiAgICAvLyByZXNldCBnbG9iYWxzIHZhcmlhYmxlc1xyXG4gICAgUmFuZG9taXplci5zZXRfbW9kKHJhbmRfbW9kLnRvX2RvdWJsZSgpKTtcclxuICAgIFJhbmRvbWl6ZXIuc2V0X211bChyYW5kX211bC50b19kb3VibGUoKSk7XHJcbiAgICBSYW5kb21pemVyLnNldF9zZWVkKHJhbmRfc2VlZC50b19kb3VibGUoKSk7XHJcbiAgICByZXR1cm4gdG1wX251bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYSByYW5kb20gdmFsdWUgdG8gdXNlIGFzIHRoZSBjdGwgZW5jcmlwdGlvbiAga2V5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHN0YXRpYyBoYXNoX3JhbmQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoKG5ldyBEYXRlKCkuZ2V0TWlsbGlzZWNvbmRzKCkpIF4gTWF0aC5yYW5kb20oKSAqIDEyMzQ1Njc4KTtcclxuICAgIC8vIGxldCBhcnJheTogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPigxMDApO1xyXG4gICAgLy8gZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCBhcnJheS5sZW5ndGg7ICsrX2FpKVxyXG4gICAgLy8gICBhcnJheVtfYWldID0gMDtcclxuICAgIC8vIG5ldyBSYW5kb20oKS5OZXh0Qnl0ZXMoYXJyYXkpO1xyXG4gICAgLy8gcmV0dXJuIDxudW1iZXI+KE1pc2MuZ2V0U3lzdGVtTWlsbGlzZWNvbmRzKCkgXiBOVU1fVFlQRS5oYXNoX3N0cl9uZXcoYXJyYXkpKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBPcGVyRGF0YSB7XHJcbiAgTlVNX0RpZmZfOiBudW1iZXIgPSAwO1xyXG4gIE5VTV9FeHAxXzogbnVtYmVyID0gMDtcclxuICBOVU1fRXhwMl86IG51bWJlciA9IDA7XHJcbn1cclxuXHJcbiJdfQ==
|