react-dropzone 10.1.6 → 10.1.10
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/README.md +1 -1
- package/dist/es/index.js +95 -102
- package/dist/es/utils/index.js +2 -2
- package/dist/index.js +2 -2
- package/package.json +10 -8
- package/src/index.js +15 -20
- package/src/index.spec.js +32 -7
- package/src/utils/index.js +4 -2
package/README.md
CHANGED
|
@@ -92,7 +92,7 @@ function MyDropzone() {
|
|
|
92
92
|
console.log(binaryStr)
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
acceptedFiles.forEach(file => reader.
|
|
95
|
+
acceptedFiles.forEach(file => reader.readAsArrayBuffer(file))
|
|
96
96
|
}, [])
|
|
97
97
|
const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop})
|
|
98
98
|
|
package/dist/es/index.js
CHANGED
|
@@ -10,11 +10,13 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
|
|
|
10
10
|
|
|
11
11
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
|
|
12
12
|
|
|
13
|
-
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
13
|
+
function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
14
14
|
|
|
15
15
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
16
16
|
|
|
17
|
-
function
|
|
17
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
+
|
|
19
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
18
20
|
|
|
19
21
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
20
22
|
|
|
@@ -25,7 +27,7 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
|
|
|
25
27
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
26
28
|
|
|
27
29
|
/* eslint prefer-template: 0 */
|
|
28
|
-
import React, { forwardRef, Fragment, useCallback, useEffect, useMemo, useReducer, useRef
|
|
30
|
+
import React, { forwardRef, Fragment, useCallback, useEffect, useMemo, useReducer, useRef } from 'react';
|
|
29
31
|
import PropTypes from 'prop-types';
|
|
30
32
|
import { fromEvent } from 'file-selector';
|
|
31
33
|
import { allFilesAccepted, composeEventHandlers, fileAccepted, fileMatchSize, isEvtWithFiles, isIeOrEdge, isPropagationStopped, onDocumentDragOver } from './utils/index';
|
|
@@ -309,80 +311,80 @@ var initialState = {
|
|
|
309
311
|
draggedFiles: [],
|
|
310
312
|
acceptedFiles: [],
|
|
311
313
|
rejectedFiles: []
|
|
312
|
-
/**
|
|
313
|
-
* A React hook that creates a drag 'n' drop area.
|
|
314
|
-
*
|
|
315
|
-
* ```jsx
|
|
316
|
-
* function MyDropzone(props) {
|
|
317
|
-
* const {getRootProps, getInputProps} = useDropzone({
|
|
318
|
-
* onDrop: acceptedFiles => {
|
|
319
|
-
* // do something with the File objects, e.g. upload to some server
|
|
320
|
-
* }
|
|
321
|
-
* });
|
|
322
|
-
* return (
|
|
323
|
-
* <div {...getRootProps()}>
|
|
324
|
-
* <input {...getInputProps()} />
|
|
325
|
-
* <p>Drag and drop some files here, or click to select files</p>
|
|
326
|
-
* </div>
|
|
327
|
-
* )
|
|
328
|
-
* }
|
|
329
|
-
* ```
|
|
330
|
-
*
|
|
331
|
-
* @function useDropzone
|
|
332
|
-
*
|
|
333
|
-
* @param {object} props
|
|
334
|
-
* @param {string|string[]} [props.accept] Set accepted file types.
|
|
335
|
-
* See https://github.com/okonet/attr-accept for more information.
|
|
336
|
-
* Keep in mind that mime type determination is not reliable across platforms. CSV files,
|
|
337
|
-
* for example, are reported as text/plain under macOS but as application/vnd.ms-excel under
|
|
338
|
-
* Windows. In some cases there might not be a mime type set at all.
|
|
339
|
-
* See: https://github.com/react-dropzone/react-dropzone/issues/276
|
|
340
|
-
* @param {boolean} [props.multiple=true] Allow drag 'n' drop (or selection from the file dialog) of multiple files
|
|
341
|
-
* @param {boolean} [props.preventDropOnDocument=true] If false, allow dropped items to take over the current browser window
|
|
342
|
-
* @param {boolean} [props.noClick=false] If true, disables click to open the native file selection dialog
|
|
343
|
-
* @param {boolean} [props.noKeyboard=false] If true, disables SPACE/ENTER to open the native file selection dialog.
|
|
344
|
-
* Note that it also stops tracking the focus state.
|
|
345
|
-
* @param {boolean} [props.noDrag=false] If true, disables drag 'n' drop
|
|
346
|
-
* @param {boolean} [props.noDragEventsBubbling=false] If true, stops drag event propagation to parents
|
|
347
|
-
* @param {number} [props.minSize=0] Minimum file size (in bytes)
|
|
348
|
-
* @param {number} [props.maxSize=Infinity] Maximum file size (in bytes)
|
|
349
|
-
* @param {boolean} [props.disabled=false] Enable/disable the dropzone
|
|
350
|
-
* @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator
|
|
351
|
-
* @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection
|
|
352
|
-
* @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.
|
|
353
|
-
* @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs
|
|
354
|
-
* @param {dragCb} [props.onDragOver] Cb for when the `dragover` event occurs
|
|
355
|
-
* @param {dropCb} [props.onDrop] Cb for when the `drop` event occurs.
|
|
356
|
-
* Note that this callback is invoked after the `getFilesFromEvent` callback is done.
|
|
357
|
-
*
|
|
358
|
-
* Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.
|
|
359
|
-
* `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.
|
|
360
|
-
* If `multiple` is set to false and additional files are droppped,
|
|
361
|
-
* all files besides the first will be rejected.
|
|
362
|
-
* Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.
|
|
363
|
-
*
|
|
364
|
-
* Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.
|
|
365
|
-
* If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.
|
|
366
|
-
*
|
|
367
|
-
* `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.
|
|
368
|
-
* For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:
|
|
369
|
-
*
|
|
370
|
-
* ```js
|
|
371
|
-
* function onDrop(acceptedFiles) {
|
|
372
|
-
* const req = request.post('/upload')
|
|
373
|
-
* acceptedFiles.forEach(file => {
|
|
374
|
-
* req.attach(file.name, file)
|
|
375
|
-
* })
|
|
376
|
-
* req.end(callback)
|
|
377
|
-
* }
|
|
378
|
-
* ```
|
|
379
|
-
* @param {dropAcceptedCb} [props.onDropAccepted]
|
|
380
|
-
* @param {dropRejectedCb} [props.onDropRejected]
|
|
381
|
-
*
|
|
382
|
-
* @returns {DropzoneState}
|
|
383
|
-
*/
|
|
384
|
-
|
|
385
314
|
};
|
|
315
|
+
/**
|
|
316
|
+
* A React hook that creates a drag 'n' drop area.
|
|
317
|
+
*
|
|
318
|
+
* ```jsx
|
|
319
|
+
* function MyDropzone(props) {
|
|
320
|
+
* const {getRootProps, getInputProps} = useDropzone({
|
|
321
|
+
* onDrop: acceptedFiles => {
|
|
322
|
+
* // do something with the File objects, e.g. upload to some server
|
|
323
|
+
* }
|
|
324
|
+
* });
|
|
325
|
+
* return (
|
|
326
|
+
* <div {...getRootProps()}>
|
|
327
|
+
* <input {...getInputProps()} />
|
|
328
|
+
* <p>Drag and drop some files here, or click to select files</p>
|
|
329
|
+
* </div>
|
|
330
|
+
* )
|
|
331
|
+
* }
|
|
332
|
+
* ```
|
|
333
|
+
*
|
|
334
|
+
* @function useDropzone
|
|
335
|
+
*
|
|
336
|
+
* @param {object} props
|
|
337
|
+
* @param {string|string[]} [props.accept] Set accepted file types.
|
|
338
|
+
* See https://github.com/okonet/attr-accept for more information.
|
|
339
|
+
* Keep in mind that mime type determination is not reliable across platforms. CSV files,
|
|
340
|
+
* for example, are reported as text/plain under macOS but as application/vnd.ms-excel under
|
|
341
|
+
* Windows. In some cases there might not be a mime type set at all.
|
|
342
|
+
* See: https://github.com/react-dropzone/react-dropzone/issues/276
|
|
343
|
+
* @param {boolean} [props.multiple=true] Allow drag 'n' drop (or selection from the file dialog) of multiple files
|
|
344
|
+
* @param {boolean} [props.preventDropOnDocument=true] If false, allow dropped items to take over the current browser window
|
|
345
|
+
* @param {boolean} [props.noClick=false] If true, disables click to open the native file selection dialog
|
|
346
|
+
* @param {boolean} [props.noKeyboard=false] If true, disables SPACE/ENTER to open the native file selection dialog.
|
|
347
|
+
* Note that it also stops tracking the focus state.
|
|
348
|
+
* @param {boolean} [props.noDrag=false] If true, disables drag 'n' drop
|
|
349
|
+
* @param {boolean} [props.noDragEventsBubbling=false] If true, stops drag event propagation to parents
|
|
350
|
+
* @param {number} [props.minSize=0] Minimum file size (in bytes)
|
|
351
|
+
* @param {number} [props.maxSize=Infinity] Maximum file size (in bytes)
|
|
352
|
+
* @param {boolean} [props.disabled=false] Enable/disable the dropzone
|
|
353
|
+
* @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator
|
|
354
|
+
* @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection
|
|
355
|
+
* @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.
|
|
356
|
+
* @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs
|
|
357
|
+
* @param {dragCb} [props.onDragOver] Cb for when the `dragover` event occurs
|
|
358
|
+
* @param {dropCb} [props.onDrop] Cb for when the `drop` event occurs.
|
|
359
|
+
* Note that this callback is invoked after the `getFilesFromEvent` callback is done.
|
|
360
|
+
*
|
|
361
|
+
* Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.
|
|
362
|
+
* `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.
|
|
363
|
+
* If `multiple` is set to false and additional files are droppped,
|
|
364
|
+
* all files besides the first will be rejected.
|
|
365
|
+
* Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.
|
|
366
|
+
*
|
|
367
|
+
* Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.
|
|
368
|
+
* If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.
|
|
369
|
+
*
|
|
370
|
+
* `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.
|
|
371
|
+
* For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:
|
|
372
|
+
*
|
|
373
|
+
* ```js
|
|
374
|
+
* function onDrop(acceptedFiles) {
|
|
375
|
+
* const req = request.post('/upload')
|
|
376
|
+
* acceptedFiles.forEach(file => {
|
|
377
|
+
* req.attach(file.name, file)
|
|
378
|
+
* })
|
|
379
|
+
* req.end(callback)
|
|
380
|
+
* }
|
|
381
|
+
* ```
|
|
382
|
+
* @param {dropAcceptedCb} [props.onDropAccepted]
|
|
383
|
+
* @param {dropRejectedCb} [props.onDropRejected]
|
|
384
|
+
*
|
|
385
|
+
* @returns {DropzoneState}
|
|
386
|
+
*/
|
|
387
|
+
|
|
386
388
|
export function useDropzone() {
|
|
387
389
|
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
388
390
|
accept = _ref2.accept,
|
|
@@ -502,11 +504,7 @@ export function useDropzone() {
|
|
|
502
504
|
openFileDialog();
|
|
503
505
|
}
|
|
504
506
|
}, [inputRef, noClick]);
|
|
505
|
-
|
|
506
|
-
var _useState = useState([]),
|
|
507
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
508
|
-
dragTargets = _useState2[0],
|
|
509
|
-
setDragTargets = _useState2[1];
|
|
507
|
+
var dragTargetsRef = useRef([]);
|
|
510
508
|
|
|
511
509
|
var onDocumentDrop = function onDocumentDrop(event) {
|
|
512
510
|
if (rootRef.current && rootRef.current.contains(event.target)) {
|
|
@@ -515,7 +513,7 @@ export function useDropzone() {
|
|
|
515
513
|
}
|
|
516
514
|
|
|
517
515
|
event.preventDefault();
|
|
518
|
-
|
|
516
|
+
dragTargetsRef.current = [];
|
|
519
517
|
};
|
|
520
518
|
|
|
521
519
|
useEffect(function () {
|
|
@@ -537,8 +535,8 @@ export function useDropzone() {
|
|
|
537
535
|
event.persist();
|
|
538
536
|
stopPropagation(event); // Count the dropzone and any children that are entered.
|
|
539
537
|
|
|
540
|
-
if (
|
|
541
|
-
|
|
538
|
+
if (dragTargetsRef.current.indexOf(event.target) === -1) {
|
|
539
|
+
dragTargetsRef.current = [].concat(_toConsumableArray(dragTargetsRef.current), [event.target]);
|
|
542
540
|
}
|
|
543
541
|
|
|
544
542
|
if (isEvtWithFiles(event)) {
|
|
@@ -558,7 +556,7 @@ export function useDropzone() {
|
|
|
558
556
|
}
|
|
559
557
|
});
|
|
560
558
|
}
|
|
561
|
-
}, [
|
|
559
|
+
}, [getFilesFromEvent, onDragEnter, noDragEventsBubbling]);
|
|
562
560
|
var onDragOverCb = useCallback(function (event) {
|
|
563
561
|
event.preventDefault();
|
|
564
562
|
event.persist();
|
|
@@ -583,11 +581,10 @@ export function useDropzone() {
|
|
|
583
581
|
event.persist();
|
|
584
582
|
stopPropagation(event); // Only deactivate once the dropzone and all children have been left
|
|
585
583
|
|
|
586
|
-
var targets =
|
|
584
|
+
var targets = dragTargetsRef.current.filter(function (target) {
|
|
587
585
|
return target !== event.target && rootRef.current && rootRef.current.contains(target);
|
|
588
|
-
})
|
|
589
|
-
|
|
590
|
-
setDragTargets(targets);
|
|
586
|
+
});
|
|
587
|
+
dragTargetsRef.current = targets;
|
|
591
588
|
|
|
592
589
|
if (targets.length > 0) {
|
|
593
590
|
return;
|
|
@@ -602,13 +599,13 @@ export function useDropzone() {
|
|
|
602
599
|
if (isEvtWithFiles(event) && onDragLeave) {
|
|
603
600
|
onDragLeave(event);
|
|
604
601
|
}
|
|
605
|
-
}, [rootRef,
|
|
602
|
+
}, [rootRef, onDragLeave, noDragEventsBubbling]);
|
|
606
603
|
var onDropCb = useCallback(function (event) {
|
|
607
604
|
event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done
|
|
608
605
|
|
|
609
606
|
event.persist();
|
|
610
607
|
stopPropagation(event);
|
|
611
|
-
|
|
608
|
+
dragTargetsRef.current = [];
|
|
612
609
|
dispatch({
|
|
613
610
|
type: 'reset'
|
|
614
611
|
});
|
|
@@ -696,11 +693,9 @@ export function useDropzone() {
|
|
|
696
693
|
onDragOver: composeDragHandler(composeEventHandlers(onDragOver, onDragOverCb)),
|
|
697
694
|
onDragLeave: composeDragHandler(composeEventHandlers(onDragLeave, onDragLeaveCb)),
|
|
698
695
|
onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb))
|
|
699
|
-
}, refKey, rootRef),
|
|
700
|
-
htmlFor: 'noop'
|
|
701
|
-
} : {}, !disabled && !noKeyboard ? {
|
|
696
|
+
}, refKey, rootRef), !disabled && !noKeyboard ? {
|
|
702
697
|
tabIndex: 0
|
|
703
|
-
} : {}, rest);
|
|
698
|
+
} : {}, {}, rest);
|
|
704
699
|
};
|
|
705
700
|
}, [rootRef, onKeyDownCb, onFocusCb, onBlurCb, onClickCb, onDragEnterCb, onDragOverCb, onDragLeaveCb, onDropCb, noKeyboard, noDrag, disabled]);
|
|
706
701
|
var onInputElementClick = useCallback(function (event) {
|
|
@@ -713,8 +708,7 @@ export function useDropzone() {
|
|
|
713
708
|
refKey = _ref4$refKey === void 0 ? 'ref' : _ref4$refKey,
|
|
714
709
|
onChange = _ref4.onChange,
|
|
715
710
|
onClick = _ref4.onClick,
|
|
716
|
-
|
|
717
|
-
rest = _objectWithoutProperties(_ref4, ["refKey", "onChange", "onClick", "disabled"]);
|
|
711
|
+
rest = _objectWithoutProperties(_ref4, ["refKey", "onChange", "onClick"]);
|
|
718
712
|
|
|
719
713
|
var inputProps = _defineProperty({
|
|
720
714
|
accept: accept,
|
|
@@ -726,16 +720,15 @@ export function useDropzone() {
|
|
|
726
720
|
onChange: composeHandler(composeEventHandlers(onChange, onDropCb)),
|
|
727
721
|
onClick: composeHandler(composeEventHandlers(onClick, onInputElementClick)),
|
|
728
722
|
autoComplete: 'off',
|
|
729
|
-
tabIndex: -1
|
|
730
|
-
disabled: disabled || noClick
|
|
723
|
+
tabIndex: -1
|
|
731
724
|
}, refKey, inputRef);
|
|
732
725
|
|
|
733
|
-
return _objectSpread({}, inputProps, rest);
|
|
726
|
+
return _objectSpread({}, inputProps, {}, rest);
|
|
734
727
|
};
|
|
735
|
-
}, [inputRef, accept, multiple, onDropCb, disabled
|
|
728
|
+
}, [inputRef, accept, multiple, onDropCb, disabled]);
|
|
736
729
|
var fileCount = draggedFiles.length;
|
|
737
730
|
var isMultipleAllowed = multiple || fileCount <= 1;
|
|
738
|
-
var isDragAccept = fileCount > 0 && allFilesAccepted(draggedFiles, accept);
|
|
731
|
+
var isDragAccept = fileCount > 0 && allFilesAccepted(draggedFiles, accept, maxSize, minSize);
|
|
739
732
|
var isDragReject = fileCount > 0 && (!isDragAccept || !isMultipleAllowed);
|
|
740
733
|
return _objectSpread({}, state, {
|
|
741
734
|
isDragAccept: isDragAccept,
|
package/dist/es/utils/index.js
CHANGED
|
@@ -9,9 +9,9 @@ export function fileAccepted(file, accept) {
|
|
|
9
9
|
export function fileMatchSize(file, maxSize, minSize) {
|
|
10
10
|
return file.size <= maxSize && file.size >= minSize;
|
|
11
11
|
}
|
|
12
|
-
export function allFilesAccepted(files, accept) {
|
|
12
|
+
export function allFilesAccepted(files, accept, maxSize, minSize) {
|
|
13
13
|
return files.every(function (file) {
|
|
14
|
-
return fileAccepted(file, accept);
|
|
14
|
+
return fileAccepted(file, accept) && fileMatchSize(file, maxSize, minSize);
|
|
15
15
|
});
|
|
16
16
|
} // React's synthetic events has event.isPropagationStopped,
|
|
17
17
|
// but to remain compatibility with other libs (Preact) fall back
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],n):n((e=e||self).reactDropzone={},e.React,e.PropTypes)}(this,function(e,ae,n){"use strict";var u="default"in ae?ae.default:ae;function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function fe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function le(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(e){fe(n,e,t[e])})}return n}function se(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function pe(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=[],r=!0,o=!1,i=void 0;try{for(var u,c=e[Symbol.iterator]();!(r=(u=c.next()).done)&&(t.push(u.value),!n||t.length!==n);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return t}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function de(e){return function(e){if(Array.isArray(e)){for(var n=0,t=new Array(e.length);n<e.length;n++)t[n]=e[n];return t}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function f(i,u,c,a){return new(c||(c=Promise))(function(e,n){function t(e){try{o(a.next(e))}catch(e){n(e)}}function r(e){try{o(a.throw(e))}catch(e){n(e)}}function o(n){n.done?e(n.value):new c(function(e){e(n.value)}).then(t,r)}o((a=a.apply(i,u||[])).next())})}function l(t,r){var o,i,u,e,c={label:0,sent:function(){if(1&u[0])throw u[1];return u[1]},trys:[],ops:[]};return e={next:n(0),throw:n(1),return:n(2)},"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function n(n){return function(e){return function(n){if(o)throw new TypeError("Generator is already executing.");for(;c;)try{if(o=1,i&&(u=2&n[0]?i.return:n[0]?i.throw||((u=i.return)&&u.call(i),0):i.next)&&!(u=u.call(i,n[1])).done)return u;switch(i=0,u&&(n=[2&n[0],u.value]),n[0]){case 0:case 1:u=n;break;case 4:return c.label++,{value:n[1],done:!1};case 5:c.label++,i=n[1],n=[0];continue;case 7:n=c.ops.pop(),c.trys.pop();continue;default:if(!(u=0<(u=c.trys).length&&u[u.length-1])&&(6===n[0]||2===n[0])){c=0;continue}if(3===n[0]&&(!u||n[1]>u[0]&&n[1]<u[3])){c.label=n[1];break}if(6===n[0]&&c.label<u[1]){c.label=u[1],u=n;break}if(u&&c.label<u[2]){c.label=u[2],c.ops.push(n);break}u[2]&&c.ops.pop(),c.trys.pop();continue}n=r.call(t,c)}catch(e){n=[6,e],i=0}finally{o=u=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,e])}}}function t(e,n){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var r,o,i=t.call(e),u=[];try{for(;(void 0===n||0<n--)&&!(r=i.next()).done;)u.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return u}function i(){for(var e=[],n=0;n<arguments.length;n++)e=e.concat(t(arguments[n]));return e}n=n&&n.hasOwnProperty("default")?n.default:n;var o=new Map([["avi","video/avi"],["gif","image/gif"],["ico","image/x-icon"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["mkv","video/x-matroska"],["mov","video/quicktime"],["mp4","video/mp4"],["pdf","application/pdf"],["png","image/png"],["zip","application/zip"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]]);function a(e,n){var t=function(e){var n=e.name;if(n&&-1!==n.lastIndexOf(".")&&!e.type){var t=n.split(".").pop().toLowerCase(),r=o.get(t);r&&Object.defineProperty(e,"type",{value:r,writable:!1,configurable:!1,enumerable:!0})}return e}(e),r=e.webkitRelativePath;return Object.defineProperty(t,"path",{value:"string"==typeof n?n:"string"==typeof r&&0<r.length?r:e.name,writable:!1,configurable:!1,enumerable:!0}),t}var r=[".DS_Store","Thumbs.db"];function ve(o){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,(r=o,r.dataTransfer&&o.dataTransfer?function(t,r){return f(this,void 0,void 0,function(){var n;return l(this,function(e){switch(e.label){case 0:return t.items?(n=p(t.items).filter(function(e){return"file"===e.kind}),"drop"!==r?[2,n]:[4,Promise.all(n.map(d))]):[3,2];case 1:return[2,s(function t(e){return e.reduce(function(e,n){return i(e,Array.isArray(n)?t(n):[n])},[])}(e.sent()))];case 2:return[2,s(p(t.files).map(function(e){return a(e)}))]}})})}(o.dataTransfer,o.type):(n=o,(t=n.target,null!==t&&n.target.files?p(n.target.files):[]).map(function(e){return a(e)})))];var n,t,r})})}function s(e){return e.filter(function(e){return-1===r.indexOf(e.name)})}function p(e){for(var n=[],t=0;t<e.length;t++){var r=e[t];n.push(r)}return n}function d(e){if("function"!=typeof e.webkitGetAsEntry)return v(e);var n=e.webkitGetAsEntry();return n&&n.isDirectory?g(n):v(e)}function v(e){var n=e.getAsFile();if(!n)return Promise.reject(e+" is not a File");var t=a(n);return Promise.resolve(t)}function y(n){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,n.isDirectory?g(n):function(r){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,new Promise(function(t,n){r.file(function(e){var n=a(e,r.fullPath);t(n)},function(e){n(e)})})]})})}(n)]})})}function g(e){var n=e.createReader();return new Promise(function(u,c){var a=[];!function i(){var e=this;n.readEntries(function(o){return f(e,void 0,void 0,function(){var n,t,r;return l(this,function(e){switch(e.label){case 0:if(o.length)return[3,5];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,Promise.all(a)];case 2:return n=e.sent(),u(n),[3,4];case 3:return t=e.sent(),c(t),[3,4];case 4:return[3,6];case 5:r=Promise.all(o.map(y)),a.push(r),i(),e.label=6;case 6:return[2]}})})},function(e){c(e)})}()})}var b,h,m=(function(e){e.exports=function(t){function r(e){if(o[e])return o[e].exports;var n=o[e]={i:e,l:!1,exports:{}};return t[e].call(n.exports,n,n.exports,r),n.l=!0,n.exports}var o={};return r.m=t,r.c=o,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=13)}([function(e,n){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n){var t=e.exports={version:"2.5.0"};"number"==typeof __e&&(__e=t)},function(e,n,t){e.exports=!t(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,n,t){var r=t(32)("wks"),o=t(9),i=t(0).Symbol,u="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=u&&i[e]||(u?i:o)("Symbol."+e))}).store=r},function(e,n,t){var y=t(0),g=t(2),b=t(8),h=t(22),m=t(10),x=function(e,n,t){var r,o,i,u,c=e&x.F,a=e&x.G,f=e&x.S,l=e&x.P,s=e&x.B,p=a?y:f?y[n]||(y[n]={}):(y[n]||{}).prototype,d=a?g:g[n]||(g[n]={}),v=d.prototype||(d.prototype={});for(r in a&&(t=n),t)i=((o=!c&&p&&void 0!==p[r])?p:t)[r],u=s&&o?m(i,y):l&&"function"==typeof i?m(Function.call,i):i,p&&h(p,r,i,e&x.U),d[r]!=i&&b(d,r,u),l&&v[r]!=i&&(v[r]=i)};y.core=g,x.F=1,x.G=2,x.S=4,x.P=8,x.B=16,x.W=32,x.U=64,x.R=128,e.exports=x},function(e,n,t){var r=t(16),o=t(21);e.exports=t(3)?function(e,n,t){return r.f(e,n,o(1,t))}:function(e,n,t){return e[n]=t,e}},function(e,n){var t=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+r).toString(36))}},function(e,n,t){var i=t(24);e.exports=function(r,o,e){if(i(r),void 0===o)return r;switch(e){case 1:return function(e){return r.call(o,e)};case 2:return function(e,n){return r.call(o,e,n)};case 3:return function(e,n,t){return r.call(o,e,n,t)}}return function(){return r.apply(o,arguments)}}},function(e,n){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,n,t){var r=t(28),o=Math.min;e.exports=function(e){return 0<e?o(r(e),9007199254740991):0}},function(e,n,t){n.__esModule=!0,n.default=function(e,n){if(e&&n){var t=Array.isArray(n)?n:n.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return t.some(function(e){var n=e.trim();return"."===n.charAt(0)?r.toLowerCase().endsWith(n.toLowerCase()):n.endsWith("/*")?i===n.replace(/\/.*$/,""):o===n})}return!0},t(14),t(34)},function(e,n,t){t(15),e.exports=t(2).Array.some},function(e,n,t){var r=t(7),o=t(25)(3);r(r.P+r.F*!t(33)([].some,!0),"Array",{some:function(e){return o(this,e,arguments[1])}})},function(e,n,t){var r=t(17),o=t(18),i=t(20),u=Object.defineProperty;n.f=t(3)?Object.defineProperty:function(e,n,t){if(r(e),n=i(n,!0),r(t),o)try{return u(e,n,t)}catch(e){}if("get"in t||"set"in t)throw TypeError("Accessors not supported!");return"value"in t&&(e[n]=t.value),e}},function(e,n,t){var r=t(1);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,n,t){e.exports=!t(3)&&!t(4)(function(){return 7!=Object.defineProperty(t(19)("div"),"a",{get:function(){return 7}}).a})},function(e,n,t){var r=t(1),o=t(0).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,n,t){var o=t(1);e.exports=function(e,n){if(!o(e))return e;var t,r;if(n&&"function"==typeof(t=e.toString)&&!o(r=t.call(e)))return r;if("function"==typeof(t=e.valueOf)&&!o(r=t.call(e)))return r;if(!n&&"function"==typeof(t=e.toString)&&!o(r=t.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n,t){var i=t(0),u=t(8),c=t(23),a=t(9)("src"),r=Function.toString,f=(""+r).split("toString");t(2).inspectSource=function(e){return r.call(e)},(e.exports=function(e,n,t,r){var o="function"==typeof t;o&&(c(t,"name")||u(t,"name",n)),e[n]!==t&&(o&&(c(t,a)||u(t,a,e[n]?""+e[n]:f.join(String(n)))),e===i?e[n]=t:r?e[n]?e[n]=t:u(e,n,t):(delete e[n],u(e,n,t)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||r.call(this)})},function(e,n){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,n,t){var m=t(10),x=t(26),D=t(27),w=t(12),r=t(29);e.exports=function(s,e){var p=1==s,d=2==s,v=3==s,y=4==s,g=6==s,b=5==s||g,h=e||r;return function(e,n,t){for(var r,o,i=D(e),u=x(i),c=m(n,t,3),a=w(u.length),f=0,l=p?h(e,a):d?h(e,0):void 0;f<a;f++)if((b||f in u)&&(o=c(r=u[f],f,i),s))if(p)l[f]=o;else if(o)switch(s){case 3:return!0;case 5:return r;case 6:return f;case 2:l.push(r)}else if(y)return!1;return g?-1:v||y?y:l}}},function(e,n,t){var r=t(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,n,t){var r=t(11);e.exports=function(e){return Object(r(e))}},function(e,n){var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(0<e?r:t)(e)}},function(e,n,t){var r=t(30);e.exports=function(e,n){return new(r(e))(n)}},function(e,n,t){var r=t(1),o=t(31),i=t(6)("species");e.exports=function(e){var n;return o(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!o(n.prototype)||(n=void 0),r(n)&&null===(n=n[i])&&(n=void 0)),void 0===n?Array:n}},function(e,n,t){var r=t(5);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,n,t){var r=t(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,n,t){var r=t(4);e.exports=function(e,n){return!!e&&r(function(){n?e.call(null,function(){},1):e.call(null)})}},function(e,n,t){t(35),e.exports=t(2).String.endsWith},function(e,n,t){var r=t(7),u=t(12),c=t(36),a="".endsWith;r(r.P+r.F*t(38)("endsWith"),"String",{endsWith:function(e){var n=c(this,e,"endsWith"),t=1<arguments.length?arguments[1]:void 0,r=u(n.length),o=void 0===t?r:Math.min(u(t),r),i=String(e);return a?a.call(n,i,o):n.slice(o-i.length,o)===i}})},function(e,n,t){var r=t(37),o=t(11);e.exports=function(e,n,t){if(r(n))throw TypeError("String#"+t+" doesn't accept regex!");return String(o(e))}},function(e,n,t){var r=t(1),o=t(5),i=t(6)("match");e.exports=function(e){var n;return r(e)&&(void 0!==(n=e[i])?!!n:"RegExp"==o(e))}},function(e,n,t){var r=t(6)("match");e.exports=function(n){var t=/./;try{"/./"[n](t)}catch(e){try{return t[r]=!1,!"/./"[n](t)}catch(n){}}return!0}}])}(b={exports:{}},b.exports),b.exports),x=(h=m)&&h.__esModule&&Object.prototype.hasOwnProperty.call(h,"default")?h.default:h;function ye(e,n){return"application/x-moz-file"===e.type||x(e,n)}function ge(e){return"function"==typeof e.isPropagationStopped?e.isPropagationStopped():void 0!==e.cancelBubble&&e.cancelBubble}function be(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(e){return"Files"===e||"application/x-moz-file"===e}):!!e.target&&!!e.target.files}function he(e){e.preventDefault()}function me(){for(var e=arguments.length,o=new Array(e),n=0;n<e;n++)o[n]=arguments[n];return function(n){for(var e=arguments.length,t=new Array(1<e?e-1:0),r=1;r<e;r++)t[r-1]=arguments[r];return o.some(function(e){return!ge(n)&&e&&e.apply(void 0,[n].concat(t)),ge(n)})}}var D=ae.forwardRef(function(e,n){var t=e.children,r=w(se(e,["children"])),o=r.open,i=se(r,["open"]);return ae.useEffect(function(){return"function"==typeof n?n({open:o}):"object"===c(n)&&null!==n&&(n.current={open:o}),function(){"function"==typeof n?n(null):"object"===c(n)&&null!==n&&(n.current=null)}},[n]),u.createElement(ae.Fragment,null,t(le({},i,{open:o})))});D.displayName="Dropzone";var xe={isFocused:!(D.propTypes={children:n.func,accept:n.oneOfType([n.string,n.arrayOf(n.string)]),multiple:n.bool,preventDropOnDocument:n.bool,noClick:n.bool,noKeyboard:n.bool,noDrag:n.bool,noDragEventsBubbling:n.bool,minSize:n.number,maxSize:n.number,disabled:n.bool,getFilesFromEvent:n.func,onFileDialogCancel:n.func,onDragEnter:n.func,onDragLeave:n.func,onDragOver:n.func,onDrop:n.func,onDropAccepted:n.func,onDropRejected:n.func}),isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,draggedFiles:[],acceptedFiles:[],rejectedFiles:[]};function w(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},c=e.accept,n=e.disabled,p=void 0!==n&&n,t=e.getFilesFromEvent,r=void 0===t?ve:t,o=e.maxSize,u=void 0===o?1/0:o,i=e.minSize,a=void 0===i?0:i,f=e.multiple,l=void 0===f||f,s=e.onDragEnter,d=e.onDragLeave,v=e.onDragOver,y=e.onDrop,g=e.onDropAccepted,b=e.onDropRejected,h=e.onFileDialogCancel,m=e.preventDropOnDocument,x=void 0===m||m,D=e.noClick,w=void 0!==D&&D,F=e.noKeyboard,O=void 0!==F&&F,j=e.noDrag,S=void 0!==j&&j,A=e.noDragEventsBubbling,E=void 0!==A&&A,P=ae.useRef(null),k=ae.useRef(null),C=pe(ae.useReducer(De,xe),2),_=C[0],T=C[1],M=_.isFocused,L=_.isFileDialogActive,R=_.draggedFiles,z=function(){k.current&&(T({type:"openDialog"}),k.current.value=null,k.current.click())},B=function(){L&&setTimeout(function(){k.current&&(k.current.files.length||(T({type:"closeDialog"}),"function"==typeof h&&h()))},300)};ae.useEffect(function(){return window.addEventListener("focus",B,!1),function(){window.removeEventListener("focus",B,!1)}},[k,L,h]);var I=ae.useCallback(function(e){P.current&&P.current.isEqualNode(e.target)&&(32!==e.keyCode&&13!==e.keyCode||(e.preventDefault(),z()))},[P,k]),K=ae.useCallback(function(){T({type:"focus"})},[]),W=ae.useCallback(function(){T({type:"blur"})},[]),G=ae.useCallback(function(){w||(!function(){var e,n=0<arguments.length&&void 0!==arguments[0]?arguments[0]:window.navigator.userAgent;return-1!==(e=n).indexOf("MSIE")||-1!==e.indexOf("Trident/")||-1!==n.indexOf("Edge/")}()?z():setTimeout(z,0))},[k,w]),N=pe(ae.useState([]),2),q=N[0],U=N[1],$=function(e){P.current&&P.current.contains(e.target)||(e.preventDefault(),U([]))};ae.useEffect(function(){return x&&(document.addEventListener("dragover",he,!1),document.addEventListener("drop",$,!1)),function(){x&&(document.removeEventListener("dragover",he),document.removeEventListener("drop",$))}},[P,x]);var H,J=ae.useCallback(function(n){n.preventDefault(),n.persist(),ne(n),-1===q.indexOf(n.target)&&U([].concat(de(q),[n.target])),be(n)&&Promise.resolve(r(n)).then(function(e){ge(n)&&!E||(T({draggedFiles:e,isDragActive:!0,type:"setDraggedFiles"}),s&&s(n))})},[q,r,s,E]),Q=ae.useCallback(function(e){if(e.preventDefault(),e.persist(),ne(e),e.dataTransfer)try{e.dataTransfer.dropEffect="copy"}catch(e){}return be(e)&&v&&v(e),!1},[v,E]),V=ae.useCallback(function(n){n.preventDefault(),n.persist(),ne(n);var e=de(q.filter(function(e){return e!==n.target&&P.current&&P.current.contains(e)}));U(e),0<e.length||(T({isDragActive:!1,type:"setDraggedFiles",draggedFiles:[]}),be(n)&&d&&d(n))},[P,q,d,E]),X=ae.useCallback(function(n){n.preventDefault(),n.persist(),ne(n),U([]),T({type:"reset"}),be(n)&&Promise.resolve(r(n)).then(function(e){if(!ge(n)||E){var o=[],i=[];e.forEach(function(e){var n,t,r;ye(e,c)&&(t=u,r=a,(n=e).size<=t&&n.size>=r)?o.push(e):i.push(e)}),!l&&1<o.length&&i.push.apply(i,de(o.splice(0))),T({acceptedFiles:o,rejectedFiles:i,type:"setFiles"}),y&&y(o,i,n),0<i.length&&b&&b(i,n),0<o.length&&g&&g(o,n)}})},[l,c,a,u,r,y,g,b,E]),Y=function(e){return p?null:e},Z=function(e){return O?null:Y(e)},ee=function(e){return S?null:Y(e)},ne=function(e){E&&e.stopPropagation()},te=ae.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onKeyDown,o=e.onFocus,i=e.onBlur,u=e.onClick,c=e.onDragEnter,a=e.onDragOver,f=e.onDragLeave,l=e.onDrop,s=se(e,["refKey","onKeyDown","onFocus","onBlur","onClick","onDragEnter","onDragOver","onDragLeave","onDrop"]);return le(fe({onKeyDown:Z(me(r,I)),onFocus:Z(me(o,K)),onBlur:Z(me(i,W)),onClick:Y(me(u,G)),onDragEnter:ee(me(c,J)),onDragOver:ee(me(a,Q)),onDragLeave:ee(me(f,V)),onDrop:ee(me(l,X))},t,P),P.current&&"LABEL"===P.current.tagName?{htmlFor:"noop"}:{},p||O?{}:{tabIndex:0},s)}},[P,I,K,W,G,J,Q,V,X,O,S,p]),re=ae.useCallback(function(e){e.stopPropagation()},[]),oe=ae.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onChange,o=e.onClick,i=e.disabled,u=se(e,["refKey","onChange","onClick","disabled"]);return le({},fe({accept:c,multiple:l,type:"file",style:{display:"none"},onChange:Y(me(r,X)),onClick:Y(me(o,re)),autoComplete:"off",tabIndex:-1,disabled:i||w},t,k),u)}},[k,c,l,X,p,w]),ie=R.length,ue=l||ie<=1,ce=0<ie&&(H=c,R.every(function(e){return ye(e,H)}));return le({},_,{isDragAccept:ce,isDragReject:0<ie&&(!ce||!ue),isFocused:M&&!p,getRootProps:te,getInputProps:oe,rootRef:P,inputRef:k,open:Y(z)})}function De(e,n){switch(n.type){case"focus":return le({},e,{isFocused:!0});case"blur":return le({},e,{isFocused:!1});case"openDialog":return le({},e,{isFileDialogActive:!0});case"closeDialog":return le({},e,{isFileDialogActive:!1});case"setDraggedFiles":var t=n.isDragActive;return le({},e,{draggedFiles:n.draggedFiles,isDragActive:t});case"setFiles":return le({},e,{acceptedFiles:n.acceptedFiles,rejectedFiles:n.rejectedFiles});case"reset":return le({},e,{isFileDialogActive:!1,isDragActive:!1,draggedFiles:[]});default:return e}}e.default=D,e.useDropzone=w,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvZmlsZS1zZWxlY3Rvci9kaXN0L2VzNS9maWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtc2VsZWN0b3IvZGlzdC9lczUvZmlsZS1zZWxlY3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiZXhwb3J0IHZhciBDT01NT05fTUlNRV9UWVBFUyA9IG5ldyBNYXAoW1xuICAgIFsnYXZpJywgJ3ZpZGVvL2F2aSddLFxuICAgIFsnZ2lmJywgJ2ltYWdlL2dpZiddLFxuICAgIFsnaWNvJywgJ2ltYWdlL3gtaWNvbiddLFxuICAgIFsnanBlZycsICdpbWFnZS9qcGVnJ10sXG4gICAgWydqcGcnLCAnaW1hZ2UvanBlZyddLFxuICAgIFsnbWt2JywgJ3ZpZGVvL3gtbWF0cm9za2EnXSxcbiAgICBbJ21vdicsICd2aWRlby9xdWlja3RpbWUnXSxcbiAgICBbJ21wNCcsICd2aWRlby9tcDQnXSxcbiAgICBbJ3BkZicsICdhcHBsaWNhdGlvbi9wZGYnXSxcbiAgICBbJ3BuZycsICdpbWFnZS9wbmcnXSxcbiAgICBbJ3ppcCcsICdhcHBsaWNhdGlvbi96aXAnXSxcbiAgICBbJ2RvYycsICdhcHBsaWNhdGlvbi9tc3dvcmQnXSxcbiAgICBbJ2RvY3gnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnXVxuXSk7XG5leHBvcnQgZnVuY3Rpb24gdG9GaWxlV2l0aFBhdGgoZmlsZSwgcGF0aCkge1xuICAgIHZhciBmID0gd2l0aE1pbWVUeXBlKGZpbGUpO1xuICAgIHZhciB3ZWJraXRSZWxhdGl2ZVBhdGggPSBmaWxlLndlYmtpdFJlbGF0aXZlUGF0aDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgJ3BhdGgnLCB7XG4gICAgICAgIHZhbHVlOiB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gcGF0aFxuICAgICAgICAgICAgLy8gSWYgPGlucHV0IHdlYmtpdGRpcmVjdG9yeT4gaXMgc2V0LFxuICAgICAgICAgICAgLy8gdGhlIEZpbGUgd2lsbCBoYXZlIGEge3dlYmtpdFJlbGF0aXZlUGF0aH0gcHJvcGVydHlcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSW5wdXRFbGVtZW50L3dlYmtpdGRpcmVjdG9yeVxuICAgICAgICAgICAgOiB0eXBlb2Ygd2Via2l0UmVsYXRpdmVQYXRoID09PSAnc3RyaW5nJyAmJiB3ZWJraXRSZWxhdGl2ZVBhdGgubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gd2Via2l0UmVsYXRpdmVQYXRoXG4gICAgICAgICAgICAgICAgOiBmaWxlLm5hbWUsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBmO1xufVxuZnVuY3Rpb24gd2l0aE1pbWVUeXBlKGZpbGUpIHtcbiAgICB2YXIgbmFtZSA9IGZpbGUubmFtZTtcbiAgICB2YXIgaGFzRXh0ZW5zaW9uID0gbmFtZSAmJiBuYW1lLmxhc3RJbmRleE9mKCcuJykgIT09IC0xO1xuICAgIGlmIChoYXNFeHRlbnNpb24gJiYgIWZpbGUudHlwZSkge1xuICAgICAgICB2YXIgZXh0ID0gbmFtZS5zcGxpdCgnLicpXG4gICAgICAgICAgICAucG9wKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIHR5cGUgPSBDT01NT05fTUlNRV9UWVBFUy5nZXQoZXh0KTtcbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWxlLCAndHlwZScsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHlwZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbGUuanMubWFwIiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHRvRmlsZVdpdGhQYXRoIH0gZnJvbSAnLi9maWxlJztcbnZhciBGSUxFU19UT19JR05PUkUgPSBbXG4gICAgLy8gVGh1bWJuYWlsIGNhY2hlIGZpbGVzIGZvciBtYWNPUyBhbmQgV2luZG93c1xuICAgICcuRFNfU3RvcmUnLFxuICAgICdUaHVtYnMuZGInIC8vIFdpbmRvd3Ncbl07XG4vKipcbiAqIENvbnZlcnQgYSBEcmFnRXZlbnQncyBEYXRhVHJhc2ZlciBvYmplY3QgdG8gYSBsaXN0IG9mIEZpbGUgb2JqZWN0c1xuICogTk9URTogSWYgc29tZSBvZiB0aGUgaXRlbXMgYXJlIGZvbGRlcnMsXG4gKiBldmVyeXRoaW5nIHdpbGwgYmUgZmxhdHRlbmVkIGFuZCBwbGFjZWQgaW4gdGhlIHNhbWUgbGlzdCBidXQgdGhlIHBhdGhzIHdpbGwgYmUga2VwdCBhcyBhIHtwYXRofSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBldnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdmVudChldnQpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgaXNEcmFnRXZ0KGV2dCkgJiYgZXZ0LmRhdGFUcmFuc2ZlclxuICAgICAgICAgICAgICAgICAgICA/IGdldERhdGFUcmFuc2ZlckZpbGVzKGV2dC5kYXRhVHJhbnNmZXIsIGV2dC50eXBlKVxuICAgICAgICAgICAgICAgICAgICA6IGdldElucHV0RmlsZXMoZXZ0KV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNEcmFnRXZ0KHZhbHVlKSB7XG4gICAgcmV0dXJuICEhdmFsdWUuZGF0YVRyYW5zZmVyO1xufVxuZnVuY3Rpb24gZ2V0SW5wdXRGaWxlcyhldnQpIHtcbiAgICB2YXIgZmlsZXMgPSBpc0lucHV0KGV2dC50YXJnZXQpXG4gICAgICAgID8gZXZ0LnRhcmdldC5maWxlc1xuICAgICAgICAgICAgPyBmcm9tTGlzdChldnQudGFyZ2V0LmZpbGVzKVxuICAgICAgICAgICAgOiBbXVxuICAgICAgICA6IFtdO1xuICAgIHJldHVybiBmaWxlcy5tYXAoZnVuY3Rpb24gKGZpbGUpIHsgcmV0dXJuIHRvRmlsZVdpdGhQYXRoKGZpbGUpOyB9KTtcbn1cbmZ1bmN0aW9uIGlzSW5wdXQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGw7XG59XG5mdW5jdGlvbiBnZXREYXRhVHJhbnNmZXJGaWxlcyhkdCwgdHlwZSkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaXRlbXMsIGZpbGVzO1xuICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXRlbXMpIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xuICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGZyb21MaXN0KGR0Lml0ZW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5raW5kID09PSAnZmlsZSc7IH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG5kLmh0bWwjZG5kZXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5ICdkcmFnc3RhcnQnIGFuZCAnZHJvcCcgaGFzIGFjY2VzcyB0byB0aGUgZGF0YSAoc291cmNlIG5vZGUpXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSAnZHJvcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBpdGVtc107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5hbGwoaXRlbXMubWFwKHRvRmlsZVByb21pc2VzKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZmlsZXMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBub0lnbm9yZWRGaWxlcyhmbGF0dGVuKGZpbGVzKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIG5vSWdub3JlZEZpbGVzKGZyb21MaXN0KGR0LmZpbGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZmlsZSkgeyByZXR1cm4gdG9GaWxlV2l0aFBhdGgoZmlsZSk7IH0pKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gbm9JZ25vcmVkRmlsZXMoZmlsZXMpIHtcbiAgICByZXR1cm4gZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChmaWxlKSB7IHJldHVybiBGSUxFU19UT19JR05PUkUuaW5kZXhPZihmaWxlLm5hbWUpID09PSAtMTsgfSk7XG59XG4vLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgQXJyYXkuZnJvbSgpXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9mcm9tI0Jyb3dzZXJfY29tcGF0aWJpbGl0eVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVMaXN0XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRGF0YVRyYW5zZmVySXRlbUxpc3RcbmZ1bmN0aW9uIGZyb21MaXN0KGl0ZW1zKSB7XG4gICAgdmFyIGZpbGVzID0gW107XG4gICAgLy8gdHNsaW50OmRpc2FibGU6IHByZWZlci1mb3Itb2ZcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmaWxlID0gaXRlbXNbaV07XG4gICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XG4gICAgfVxuICAgIHJldHVybiBmaWxlcztcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9EYXRhVHJhbnNmZXJJdGVtXG5mdW5jdGlvbiB0b0ZpbGVQcm9taXNlcyhpdGVtKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtLndlYmtpdEdldEFzRW50cnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGZyb21EYXRhVHJhbnNmZXJJdGVtKGl0ZW0pO1xuICAgIH1cbiAgICB2YXIgZW50cnkgPSBpdGVtLndlYmtpdEdldEFzRW50cnkoKTtcbiAgICAvLyBTYWZhcmkgc3VwcG9ydHMgZHJvcHBpbmcgYW4gaW1hZ2Ugbm9kZSBmcm9tIGEgZGlmZmVyZW50IHdpbmRvdyBhbmQgY2FuIGJlIHJldHJpZXZlZCB1c2luZ1xuICAgIC8vIHRoZSBEYXRhVHJhbnNmZXJJdGVtLmdldEFzRmlsZSgpIEFQSVxuICAgIC8vIE5PVEU6IEZpbGVTeXN0ZW1FbnRyeS5maWxlKCkgdGhyb3dzIGlmIHRyeWluZyB0byBnZXQgdGhlIGZpbGVcbiAgICBpZiAoZW50cnkgJiYgZW50cnkuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIGZyb21EaXJFbnRyeShlbnRyeSk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tRGF0YVRyYW5zZmVySXRlbShpdGVtKTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW4oaXRlbXMpIHtcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGZpbGVzKSB7IHJldHVybiB0c2xpYl8xLl9fc3ByZWFkKGFjYywgKEFycmF5LmlzQXJyYXkoZmlsZXMpID8gZmxhdHRlbihmaWxlcykgOiBbZmlsZXNdKSk7IH0sIFtdKTtcbn1cbmZ1bmN0aW9uIGZyb21EYXRhVHJhbnNmZXJJdGVtKGl0ZW0pIHtcbiAgICB2YXIgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChpdGVtICsgXCIgaXMgbm90IGEgRmlsZVwiKTtcbiAgICB9XG4gICAgdmFyIGZ3cCA9IHRvRmlsZVdpdGhQYXRoKGZpbGUpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZndwKTtcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRW50cnlcbmZ1bmN0aW9uIGZyb21FbnRyeShlbnRyeSkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBlbnRyeS5pc0RpcmVjdG9yeSA/IGZyb21EaXJFbnRyeShlbnRyeSkgOiBmcm9tRmlsZUVudHJ5KGVudHJ5KV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeVxuZnVuY3Rpb24gZnJvbURpckVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIHJlYWRFbnRyaWVzKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkvY3JlYXRlUmVhZGVyXG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbURpcmVjdG9yeVJlYWRlci9yZWFkRW50cmllc1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChiYXRjaCkgeyByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVzLCBlcnJfMSwgaXRlbXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFiYXRjaC5sZW5ndGgpIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UuYWxsKGVudHJpZXMpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZpbGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMgLypicmVhayovLCA2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IFByb21pc2UuYWxsKGJhdGNoLm1hcChmcm9tRW50cnkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIHJlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTsgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVhZEVudHJpZXMoKTtcbiAgICB9KTtcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRmlsZUVudHJ5XG5mdW5jdGlvbiBmcm9tRmlsZUVudHJ5KGVudHJ5KSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuZmlsZShmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZ3cCA9IHRvRmlsZVdpdGhQYXRoKGZpbGUsIGVudHJ5LmZ1bGxQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZndwKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLXNlbGVjdG9yLmpzLm1hcCIsIm1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7aWYocltlXSlyZXR1cm4gcltlXS5leHBvcnRzO3ZhciBvPXJbZV09e2k6ZSxsOiExLGV4cG9ydHM6e319O3JldHVybiB0W2VdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLG4pLG8ubD0hMCxvLmV4cG9ydHN9dmFyIHI9e307cmV0dXJuIG4ubT10LG4uYz1yLG4uZD1mdW5jdGlvbih0LHIsZSl7bi5vKHQscil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDplfSl9LG4ubj1mdW5jdGlvbih0KXt2YXIgcj10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gbi5kKHIsXCJhXCIscikscn0sbi5vPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfSxuLnA9XCJcIixuKG4ucz0xMyl9KFtmdW5jdGlvbih0LG4pe3ZhciByPXQuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcIm51bWJlclwiPT10eXBlb2YgX19nJiYoX19nPXIpfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdD9udWxsIT09dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0sZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9e3ZlcnNpb246XCIyLjUuMFwifTtcIm51bWJlclwiPT10eXBlb2YgX19lJiYoX19lPXIpfSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDQpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sZnVuY3Rpb24odCxuKXt2YXIgcj17fS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDMyKShcIndrc1wiKSxvPXIoOSksaT1yKDApLlN5bWJvbCx1PVwiZnVuY3Rpb25cIj09dHlwZW9mIGk7KHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZVt0XXx8KGVbdF09dSYmaVt0XXx8KHU/aTpvKShcIlN5bWJvbC5cIit0KSl9KS5zdG9yZT1lfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPXIoMiksaT1yKDgpLHU9cigyMiksYz1yKDEwKSxmPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxzLHAsbCx2PXQmZi5GLHk9dCZmLkcsaD10JmYuUyxkPXQmZi5QLHg9dCZmLkIsZz15P2U6aD9lW25dfHwoZVtuXT17fSk6KGVbbl18fHt9KS5wcm90b3R5cGUsbT15P286b1tuXXx8KG9bbl09e30pLGI9bS5wcm90b3R5cGV8fChtLnByb3RvdHlwZT17fSk7eSYmKHI9bik7Zm9yKGEgaW4gcilzPSF2JiZnJiZ2b2lkIDAhPT1nW2FdLHA9KHM/ZzpyKVthXSxsPXgmJnM/YyhwLGUpOmQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHA/YyhGdW5jdGlvbi5jYWxsLHApOnAsZyYmdShnLGEscCx0JmYuVSksbVthXSE9cCYmaShtLGEsbCksZCYmYlthXSE9cCYmKGJbYV09cCl9O2UuY29yZT1vLGYuRj0xLGYuRz0yLGYuUz00LGYuUD04LGYuQj0xNixmLlc9MzIsZi5VPTY0LGYuUj0xMjgsdC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE2KSxvPXIoMjEpO3QuZXhwb3J0cz1yKDMpP2Z1bmN0aW9uKHQsbixyKXtyZXR1cm4gZS5mKHQsbixvKDEscikpfTpmdW5jdGlvbih0LG4scil7cmV0dXJuIHRbbl09cix0fX0sZnVuY3Rpb24odCxuKXt2YXIgcj0wLGU9TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJTeW1ib2woXCIuY29uY2F0KHZvaWQgMD09PXQ/XCJcIjp0LFwiKV9cIiwoKytyK2UpLnRvU3RyaW5nKDM2KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtpZihlKHQpLHZvaWQgMD09PW4pcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbChuLHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsZSl7cmV0dXJuIHQuY2FsbChuLHIsZSl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixlLG8pe3JldHVybiB0LmNhbGwobixyLGUsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KG4sYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PXQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiK3QpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjgpLG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/byhlKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7bi5fX2VzTW9kdWxlPSEwLG4uZGVmYXVsdD1mdW5jdGlvbih0LG4pe2lmKHQmJm4pe3ZhciByPUFycmF5LmlzQXJyYXkobik/bjpuLnNwbGl0KFwiLFwiKSxlPXQubmFtZXx8XCJcIixvPXQudHlwZXx8XCJcIixpPW8ucmVwbGFjZSgvXFwvLiokLyxcIlwiKTtyZXR1cm4gci5zb21lKGZ1bmN0aW9uKHQpe3ZhciBuPXQudHJpbSgpO3JldHVyblwiLlwiPT09bi5jaGFyQXQoMCk/ZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKG4udG9Mb3dlckNhc2UoKSk6bi5lbmRzV2l0aChcIi8qXCIpP2k9PT1uLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik6bz09PW59KX1yZXR1cm4hMH0scigxNCkscigzNCl9LGZ1bmN0aW9uKHQsbixyKXtyKDE1KSx0LmV4cG9ydHM9cigyKS5BcnJheS5zb21lfSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cig3KSxvPXIoMjUpKDMpO2UoZS5QK2UuRiohcigzMykoW10uc29tZSwhMCksXCJBcnJheVwiLHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxNyksbz1yKDE4KSxpPXIoMjApLHU9T2JqZWN0LmRlZmluZVByb3BlcnR5O24uZj1yKDMpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LG4scil7aWYoZSh0KSxuPWkobiwhMCksZShyKSxvKXRyeXtyZXR1cm4gdSh0LG4scil9Y2F0Y2godCl7fWlmKFwiZ2V0XCJpbiByfHxcInNldFwiaW4gcil0aHJvdyBUeXBlRXJyb3IoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCFcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gciYmKHRbbl09ci52YWx1ZSksdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighZSh0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt0LmV4cG9ydHM9IXIoMykmJiFyKDQpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyKDE5KShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoMCkuZG9jdW1lbnQsaT1lKG8pJiZlKG8uY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpP28uY3JlYXRlRWxlbWVudCh0KTp7fX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe2lmKCFlKHQpKXJldHVybiB0O3ZhciByLG87aWYobiYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIWUobz1yLmNhbGwodCkpKXJldHVybiBvO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC52YWx1ZU9mKSYmIWUobz1yLmNhbGwodCkpKXJldHVybiBvO2lmKCFuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhZShvPXIuY2FsbCh0KSkpcmV0dXJuIG87dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6bn19fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPXIoOCksaT1yKDIzKSx1PXIoOSkoXCJzcmNcIiksYz1GdW5jdGlvbi50b1N0cmluZyxmPShcIlwiK2MpLnNwbGl0KFwidG9TdHJpbmdcIik7cigyKS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBjLmNhbGwodCl9LCh0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIsYyl7dmFyIGE9XCJmdW5jdGlvblwiPT10eXBlb2YgcjthJiYoaShyLFwibmFtZVwiKXx8byhyLFwibmFtZVwiLG4pKSx0W25dIT09ciYmKGEmJihpKHIsdSl8fG8ocix1LHRbbl0/XCJcIit0W25dOmYuam9pbihTdHJpbmcobikpKSksdD09PWU/dFtuXT1yOmM/dFtuXT90W25dPXI6byh0LG4scik6KGRlbGV0ZSB0W25dLG8odCxuLHIpKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcyYmdGhpc1t1XXx8Yy5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHIuY2FsbCh0LG4pfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxMCksbz1yKDI2KSxpPXIoMjcpLHU9cigxMiksYz1yKDI5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgcj0xPT10LGY9Mj09dCxhPTM9PXQscz00PT10LHA9Nj09dCxsPTU9PXR8fHAsdj1ufHxjO3JldHVybiBmdW5jdGlvbihuLGMseSl7Zm9yKHZhciBoLGQseD1pKG4pLGc9byh4KSxtPWUoYyx5LDMpLGI9dShnLmxlbmd0aCksXz0wLHc9cj92KG4sYik6Zj92KG4sMCk6dm9pZCAwO2I+XztfKyspaWYoKGx8fF8gaW4gZykmJihoPWdbX10sZD1tKGgsXyx4KSx0KSlpZihyKXdbX109ZDtlbHNlIGlmKGQpc3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGg7Y2FzZSA2OnJldHVybiBfO2Nhc2UgMjp3LnB1c2goaCl9ZWxzZSBpZihzKXJldHVybiExO3JldHVybiBwPy0xOmF8fHM/czp3fX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDUpO3QuZXhwb3J0cz1PYmplY3QoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm5cIlN0cmluZ1wiPT1lKHQpP3Quc3BsaXQoXCJcIik6T2JqZWN0KHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KGUodCkpfX0sZnVuY3Rpb24odCxuKXt2YXIgcj1NYXRoLmNlaWwsZT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP2U6cikodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyhlKHQpKShuKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpLG89cigzMSksaT1yKDYpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG8odCkmJihuPXQuY29uc3RydWN0b3IsXCJmdW5jdGlvblwiIT10eXBlb2Ygbnx8biE9PUFycmF5JiYhbyhuLnByb3RvdHlwZSl8fChuPXZvaWQgMCksZShuKSYmbnVsbD09PShuPW5baV0pJiYobj12b2lkIDApKSx2b2lkIDA9PT1uP0FycmF5Om59fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KTt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJBcnJheVwiPT1lKHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1lW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHwoZVtcIl9fY29yZS1qc19zaGFyZWRfX1wiXT17fSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvW3RdfHwob1t0XT17fSl9fSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cig0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4hIXQmJmUoZnVuY3Rpb24oKXtuP3QuY2FsbChudWxsLGZ1bmN0aW9uKCl7fSwxKTp0LmNhbGwobnVsbCl9KX19LGZ1bmN0aW9uKHQsbixyKXtyKDM1KSx0LmV4cG9ydHM9cigyKS5TdHJpbmcuZW5kc1dpdGh9LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDcpLG89cigxMiksaT1yKDM2KSx1PVwiXCIuZW5kc1dpdGg7ZShlLlArZS5GKnIoMzgpKFwiZW5kc1dpdGhcIiksXCJTdHJpbmdcIix7ZW5kc1dpdGg6ZnVuY3Rpb24odCl7dmFyIG49aSh0aGlzLHQsXCJlbmRzV2l0aFwiKSxyPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGU9byhuLmxlbmd0aCksYz12b2lkIDA9PT1yP2U6TWF0aC5taW4obyhyKSxlKSxmPVN0cmluZyh0KTtyZXR1cm4gdT91LmNhbGwobixmLGMpOm4uc2xpY2UoYy1mLmxlbmd0aCxjKT09PWZ9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDM3KSxvPXIoMTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7aWYoZShuKSl0aHJvdyBUeXBlRXJyb3IoXCJTdHJpbmcjXCIrcitcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7cmV0dXJuIFN0cmluZyhvKHQpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpLG89cig1KSxpPXIoNikoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIGUodCkmJih2b2lkIDAhPT0obj10W2ldKT8hIW46XCJSZWdFeHBcIj09byh0KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig2KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj0vLi87dHJ5e1wiLy4vXCJbdF0obil9Y2F0Y2gocil7dHJ5e3JldHVybiBuW2VdPSExLCFcIi8uL1wiW3RdKG4pfWNhdGNoKHQpe319cmV0dXJuITB9fV0pOyIsImltcG9ydCBhY2NlcHRzIGZyb20gJ2F0dHItYWNjZXB0J1xuXG4vLyBGaXJlZm94IHZlcnNpb25zIHByaW9yIHRvIDUzIHJldHVybiBhIGJvZ3VzIE1JTUUgdHlwZSBmb3IgZXZlcnkgZmlsZSBkcmFnLCBzbyBkcmFnb3ZlcnMgd2l0aFxuLy8gdGhhdCBNSU1FIHR5cGUgd2lsbCBhbHdheXMgYmUgYWNjZXB0ZWRcbmV4cG9ydCBmdW5jdGlvbiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlLnR5cGUgPT09ICdhcHBsaWNhdGlvbi94LW1vei1maWxlJyB8fCBhY2NlcHRzKGZpbGUsIGFjY2VwdClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVNYXRjaFNpemUoZmlsZSwgbWF4U2l6ZSwgbWluU2l6ZSkge1xuICByZXR1cm4gZmlsZS5zaXplIDw9IG1heFNpemUgJiYgZmlsZS5zaXplID49IG1pblNpemVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEZpbGVzQWNjZXB0ZWQoZmlsZXMsIGFjY2VwdCkge1xuICByZXR1cm4gZmlsZXMuZXZlcnkoZmlsZSA9PiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSlcbn1cblxuLy8gUmVhY3QncyBzeW50aGV0aWMgZXZlbnRzIGhhcyBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCxcbi8vIGJ1dCB0byByZW1haW4gY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGxpYnMgKFByZWFjdCkgZmFsbCBiYWNrXG4vLyB0byBjaGVjayBldmVudC5jYW5jZWxCdWJibGVcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudCkge1xuICBpZiAodHlwZW9mIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQuY2FuY2VsQnViYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBldmVudC5jYW5jZWxCdWJibGVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSB7XG4gIGlmICghZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgcmV0dXJuICEhZXZlbnQudGFyZ2V0ICYmICEhZXZlbnQudGFyZ2V0LmZpbGVzXG4gIH1cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlci90eXBlc1xuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTF9EcmFnX2FuZF9Ecm9wX0FQSS9SZWNvbW1lbmRlZF9kcmFnX3R5cGVzI2ZpbGVcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwoXG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLFxuICAgIHR5cGUgPT4gdHlwZSA9PT0gJ0ZpbGVzJyB8fCB0eXBlID09PSAnYXBwbGljYXRpb24veC1tb3otZmlsZSdcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNLaW5kRmlsZShpdGVtKSB7XG4gIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCAmJiBpdGVtLmtpbmQgPT09ICdmaWxlJ1xufVxuXG4vLyBhbGxvdyB0aGUgZW50aXJlIGRvY3VtZW50IHRvIGJlIGEgZHJhZyB0YXJnZXRcbmV4cG9ydCBmdW5jdGlvbiBvbkRvY3VtZW50RHJhZ092ZXIoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxufVxuXG5mdW5jdGlvbiBpc0llKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSAhPT0gLTEgfHwgdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJykgIT09IC0xXG59XG5cbmZ1bmN0aW9uIGlzRWRnZSh1c2VyQWdlbnQpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5pbmRleE9mKCdFZGdlLycpICE9PSAtMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJZU9yRWRnZSh1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICByZXR1cm4gaXNJZSh1c2VyQWdlbnQpIHx8IGlzRWRnZSh1c2VyQWdlbnQpXG59XG5cbi8qKlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGNvbXBvc2UgZXZlbnQgaGFuZGxlcnNcbiAqIFRoZXkgYXJlIGV4ZWN1dGVkIGluIG9yZGVyIHVudGlsIG9uZSBvZiB0aGVtIGNhbGxzIGBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpYC5cbiAqIE5vdGUgdGhhdCB0aGUgY2hlY2sgaXMgZG9uZSBvbiB0aGUgZmlyc3QgaW52b2tlIHRvbyxcbiAqIG1lYW5pbmcgdGhhdCBpZiBwcm9wYWdhdGlvbiB3YXMgc3RvcHBlZCBiZWZvcmUgaW52b2tpbmcgdGhlIGZucyxcbiAqIG5vIGhhbmRsZXJzIHdpbGwgYmUgZXhlY3V0ZWQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5zIHRoZSBldmVudCBoYW5sZGVyIGZ1bmN0aW9uc1xuICogQHJldHVybiB7RnVuY3Rpb259IHRoZSBldmVudCBoYW5kbGVyIHRvIGFkZCB0byBhbiBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlRXZlbnRIYW5kbGVycyguLi5mbnMpIHtcbiAgcmV0dXJuIChldmVudCwgLi4uYXJncykgPT5cbiAgICBmbnMuc29tZShmbiA9PiB7XG4gICAgICBpZiAoIWlzUHJvcGFnYXRpb25TdG9wcGVkKGV2ZW50KSAmJiBmbikge1xuICAgICAgICBmbihldmVudCwgLi4uYXJncylcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudClcbiAgICB9KVxufVxuIiwiLyogZXNsaW50IHByZWZlci10ZW1wbGF0ZTogMCAqL1xuaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIEZyYWdtZW50LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAnZmlsZS1zZWxlY3RvcidcbmltcG9ydCB7XG4gIGFsbEZpbGVzQWNjZXB0ZWQsXG4gIGNvbXBvc2VFdmVudEhhbmRsZXJzLFxuICBmaWxlQWNjZXB0ZWQsXG4gIGZpbGVNYXRjaFNpemUsXG4gIGlzRXZ0V2l0aEZpbGVzLFxuICBpc0llT3JFZGdlLFxuICBpc1Byb3BhZ2F0aW9uU3RvcHBlZCxcbiAgb25Eb2N1bWVudERyYWdPdmVyXG59IGZyb20gJy4vdXRpbHMvaW5kZXgnXG5cbi8qKlxuICogQ29udmVuaWVuY2Ugd3JhcHBlciBjb21wb25lbnQgZm9yIHRoZSBgdXNlRHJvcHpvbmVgIGhvb2tcbiAqXG4gKiBgYGBqc3hcbiAqIDxEcm9wem9uZT5cbiAqICAgeyh7Z2V0Um9vdFByb3BzLCBnZXRJbnB1dFByb3BzfSkgPT4gKFxuICogICAgIDxkaXYgey4uLmdldFJvb3RQcm9wcygpfT5cbiAqICAgICAgIDxpbnB1dCB7Li4uZ2V0SW5wdXRQcm9wcygpfSAvPlxuICogICAgICAgPHA+RHJhZyAnbicgZHJvcCBzb21lIGZpbGVzIGhlcmUsIG9yIGNsaWNrIHRvIHNlbGVjdCBmaWxlczwvcD5cbiAqICAgICA8L2Rpdj5cbiAqICAgKX1cbiAqIDwvRHJvcHpvbmU+XG4gKiBgYGBcbiAqL1xuY29uc3QgRHJvcHpvbmUgPSBmb3J3YXJkUmVmKCh7IGNoaWxkcmVuLCAuLi5wYXJhbXMgfSwgcmVmKSA9PiB7XG4gIGNvbnN0IHsgb3BlbiwgLi4ucHJvcHMgfSA9IHVzZURyb3B6b25lKHBhcmFtcylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYoeyBvcGVuIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVmID09PSAnb2JqZWN0JyAmJiByZWYgIT09IG51bGwpIHtcbiAgICAgIHJlZi5jdXJyZW50ID0geyBvcGVuIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVmKG51bGwpXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZWYgPT09ICdvYmplY3QnICYmIHJlZiAhPT0gbnVsbCkge1xuICAgICAgICByZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtyZWZdKVxuXG4gIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IHJlYWN0LXN0eWxlZ3VpZGlzdCBjYW5ub3QgY3JlYXRlIGRvY3MgaWYgd2UgZG9uJ3QgcmV0dXJuIGEganN4IGVsZW1lbnRcbiAgcmV0dXJuIDxGcmFnbWVudD57Y2hpbGRyZW4oeyAuLi5wcm9wcywgb3BlbiB9KX08L0ZyYWdtZW50PlxufSlcblxuRHJvcHpvbmUuZGlzcGxheU5hbWUgPSAnRHJvcHpvbmUnXG5Ecm9wem9uZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBSZW5kZXIgZnVuY3Rpb24gdGhhdCBleHBvc2VzIHRoZSBkcm9wem9uZSBzdGF0ZSBhbmQgcHJvcCBnZXR0ZXIgZm5zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1zLmdldFJvb3RQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIHRoZSByb290IGRyb3AgY29udGFpbmVyIHlvdSByZW5kZXJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1zLmdldElucHV0UHJvcHMgUmV0dXJucyB0aGUgcHJvcHMgeW91IHNob3VsZCBhcHBseSB0byBoaWRkZW4gZmlsZSBpbnB1dCB5b3UgcmVuZGVyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtcy5vcGVuIE9wZW4gdGhlIG5hdGl2ZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2dcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNGb2N1c2VkIERyb3B6b25lIGFyZWEgaXMgaW4gZm9jdXNcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNGaWxlRGlhbG9nQWN0aXZlIEZpbGUgZGlhbG9nIGlzIG9wZW5lZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0RyYWdBY3RpdmUgQWN0aXZlIGRyYWcgaXMgaW4gcHJvZ3Jlc3NcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNEcmFnQWNjZXB0IERyYWdnZWQgZmlsZXMgYXJlIGFjY2VwdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1zLmlzRHJhZ1JlamVjdCBTb21lIGRyYWdnZWQgZmlsZXMgYXJlIHJlamVjdGVkXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBwYXJhbXMuZHJhZ2dlZEZpbGVzIEZpbGVzIGluIGFjdGl2ZSBkcmFnXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBwYXJhbXMuYWNjZXB0ZWRGaWxlcyBBY2NlcHRlZCBmaWxlc1xuICAgKiBAcGFyYW0ge0ZpbGVbXX0gcGFyYW1zLnJlamVjdGVkRmlsZXMgUmVqZWN0ZWQgZmlsZXNcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogU2V0IGFjY2VwdGVkIGZpbGUgdHlwZXMuXG4gICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vb2tvbmV0L2F0dHItYWNjZXB0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKiBLZWVwIGluIG1pbmQgdGhhdCBtaW1lIHR5cGUgZGV0ZXJtaW5hdGlvbiBpcyBub3QgcmVsaWFibGUgYWNyb3NzIHBsYXRmb3Jtcy4gQ1NWIGZpbGVzLFxuICAgKiBmb3IgZXhhbXBsZSwgYXJlIHJlcG9ydGVkIGFzIHRleHQvcGxhaW4gdW5kZXIgbWFjT1MgYnV0IGFzIGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCB1bmRlclxuICAgKiBXaW5kb3dzLiBJbiBzb21lIGNhc2VzIHRoZXJlIG1pZ2h0IG5vdCBiZSBhIG1pbWUgdHlwZSBzZXQgYXQgYWxsLlxuICAgKiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvMjc2XG4gICAqL1xuICBhY2NlcHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpXSksXG5cbiAgLyoqXG4gICAqIEFsbG93IGRyYWcgJ24nIGRyb3AgKG9yIHNlbGVjdGlvbiBmcm9tIHRoZSBmaWxlIGRpYWxvZykgb2YgbXVsdGlwbGUgZmlsZXNcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgZmFsc2UsIGFsbG93IGRyb3BwZWQgaXRlbXMgdG8gdGFrZSBvdmVyIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93XG4gICAqL1xuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBkaXNhYmxlcyBjbGljayB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nXG4gICAqL1xuICBub0NsaWNrOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgZGlzYWJsZXMgU1BBQ0UvRU5URVIgdG8gb3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZy5cbiAgICogTm90ZSB0aGF0IGl0IGFsc28gc3RvcHMgdHJhY2tpbmcgdGhlIGZvY3VzIHN0YXRlLlxuICAgKi9cbiAgbm9LZXlib2FyZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGRpc2FibGVzIGRyYWcgJ24nIGRyb3BcbiAgICovXG4gIG5vRHJhZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHN0b3BzIGRyYWcgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50c1xuICAgKi9cbiAgbm9EcmFnRXZlbnRzQnViYmxpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtaW5TaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtYXhTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSB0aGUgZHJvcHpvbmVcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVXNlIHRoaXMgdG8gcHJvdmlkZSBhIGN1c3RvbSBmaWxlIGFnZ3JlZ2F0b3JcbiAgICpcbiAgICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICAgKi9cbiAgZ2V0RmlsZXNGcm9tRXZlbnQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiBjbG9zaW5nIHRoZSBmaWxlIGRpYWxvZyB3aXRoIG5vIHNlbGVjdGlvblxuICAgKi9cbiAgb25GaWxlRGlhbG9nQ2FuY2VsOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcmFnZW50ZXJgIGV2ZW50IG9jY3Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtEcmFnRXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkRyYWdFbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJhZ2xlYXZlYCBldmVudCBvY2N1cnNcbiAgICpcbiAgICogQHBhcmFtIHtEcmFnRXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkRyYWdMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJhZ292ZXJgIGV2ZW50IG9jY3Vyc1xuICAgKlxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uRHJhZ092ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyb3BgIGV2ZW50IG9jY3Vycy5cbiAgICogTm90ZSB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciB0aGUgYGdldEZpbGVzRnJvbUV2ZW50YCBjYWxsYmFjayBpcyBkb25lLlxuICAgKlxuICAgKiBGaWxlcyBhcmUgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQgYmFzZWQgb24gdGhlIGBhY2NlcHRgLCBgbXVsdGlwbGVgLCBgbWluU2l6ZWAgYW5kIGBtYXhTaXplYCBwcm9wcy5cbiAgICogYGFjY2VwdGAgbXVzdCBiZSBhIHZhbGlkIFtNSU1FIHR5cGVdKGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWwpIGFjY29yZGluZyB0byBbaW5wdXQgZWxlbWVudCBzcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy53My5vcmcvd2lraS9IVE1ML0VsZW1lbnRzL2lucHV0L2ZpbGUpIG9yIGEgdmFsaWQgZmlsZSBleHRlbnNpb24uXG4gICAqIElmIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGZhbHNlIGFuZCBhZGRpdGlvbmFsIGZpbGVzIGFyZSBkcm9wcHBlZCxcbiAgICogYWxsIGZpbGVzIGJlc2lkZXMgdGhlIGZpcnN0IHdpbGwgYmUgcmVqZWN0ZWQuXG4gICAqIEFueSBmaWxlIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBzaXplIGluIHRoZSBbYG1pblNpemVgLCBgbWF4U2l6ZWBdIHJhbmdlLCB3aWxsIGJlIHJlamVjdGVkIGFzIHdlbGwuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgYG9uRHJvcGAgY2FsbGJhY2sgd2lsbCBhbHdheXMgYmUgaW52b2tlZCByZWdhcmRsZXNzIGlmIHRoZSBkcm9wcGVkIGZpbGVzIHdlcmUgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQuXG4gICAqIElmIHlvdSdkIGxpa2UgdG8gcmVhY3QgdG8gYSBzcGVjaWZpYyBzY2VuYXJpbywgdXNlIHRoZSBgb25Ecm9wQWNjZXB0ZWRgL2BvbkRyb3BSZWplY3RlZGAgcHJvcHMuXG4gICAqXG4gICAqIGBvbkRyb3BgIHdpbGwgcHJvdmlkZSB5b3Ugd2l0aCBhbiBhcnJheSBvZiBbRmlsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGUpIG9iamVjdHMgd2hpY2ggeW91IGNhbiB0aGVuIHByb2Nlc3MgYW5kIHNlbmQgdG8gYSBzZXJ2ZXIuXG4gICAqIEZvciBleGFtcGxlLCB3aXRoIFtTdXBlckFnZW50XShodHRwczovL2dpdGh1Yi5jb20vdmlzaW9ubWVkaWEvc3VwZXJhZ2VudCkgYXMgYSBodHRwL2FqYXggbGlicmFyeTpcbiAgICpcbiAgICogYGBganNcbiAgICogZnVuY3Rpb24gb25Ecm9wKGFjY2VwdGVkRmlsZXMpIHtcbiAgICogICBjb25zdCByZXEgPSByZXF1ZXN0LnBvc3QoJy91cGxvYWQnKVxuICAgKiAgIGFjY2VwdGVkRmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICogICAgIHJlcS5hdHRhY2goZmlsZS5uYW1lLCBmaWxlKVxuICAgKiAgIH0pXG4gICAqICAgcmVxLmVuZChjYWxsYmFjaylcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtGaWxlW119IGFjY2VwdGVkRmlsZXNcbiAgICogQHBhcmFtIHtGaWxlW119IHJlamVjdGVkRmlsZXNcbiAgICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICAgKi9cbiAgb25Ecm9wOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcm9wYCBldmVudCBvY2N1cnMuXG4gICAqIE5vdGUgdGhhdCBpZiBubyBmaWxlcyBhcmUgYWNjZXB0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IGludm9rZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBmaWxlc1xuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudFxuICAgKi9cbiAgb25Ecm9wQWNjZXB0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyb3BgIGV2ZW50IG9jY3Vycy5cbiAgICogTm90ZSB0aGF0IGlmIG5vIGZpbGVzIGFyZSByZWplY3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3QgaW52b2tlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3RbXX0gZmlsZXNcbiAgICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnRcbiAgICovXG4gIG9uRHJvcFJlamVjdGVkOiBQcm9wVHlwZXMuZnVuY1xufVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wem9uZVxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIGZvciB0aGUgYGRyYWdlbnRlcmAsXG4gKiBgZHJhZ292ZXJgIGFuZCBgZHJhZ2xlYXZlYCBldmVudHMuXG4gKiBJdCBpcyBub3QgaW52b2tlZCBpZiB0aGUgaXRlbXMgYXJlIG5vdCBmaWxlcyAoc3VjaCBhcyBsaW5rLCB0ZXh0LCBldGMuKS5cbiAqXG4gKiBAY2FsbGJhY2sgZHJhZ0NiXG4gKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIGZvciB0aGUgYGRyb3BgIG9yIGlucHV0IGNoYW5nZSBldmVudC5cbiAqIEl0IGlzIG5vdCBpbnZva2VkIGlmIHRoZSBpdGVtcyBhcmUgbm90IGZpbGVzIChzdWNoIGFzIGxpbmssIHRleHQsIGV0Yy4pLlxuICpcbiAqIEBjYWxsYmFjayBkcm9wQ2JcbiAqIEBwYXJhbSB7RmlsZVtdfSBhY2NlcHRlZEZpbGVzIExpc3Qgb2YgYWNjZXB0ZWQgZmlsZXNcbiAqIEBwYXJhbSB7RmlsZVtdfSByZWplY3RlZEZpbGVzIExpc3Qgb2YgcmVqZWN0ZWQgZmlsZXNcbiAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50IEEgZHJhZyBldmVudCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQgKGlmIGZpbGVzIHdlcmUgc2VsZWN0ZWQgdmlhIHRoZSBmaWxlIGRpYWxvZylcbiAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIGZvciB0aGUgYGRyb3BgIG9yIGlucHV0IGNoYW5nZSBldmVudC5cbiAqIEl0IGlzIG5vdCBpbnZva2VkIGlmIHRoZSBpdGVtcyBhcmUgZmlsZXMgKHN1Y2ggYXMgbGluaywgdGV4dCwgZXRjLikuXG4gKlxuICogQGNhbGxiYWNrIGRyb3BBY2NlcHRlZENiXG4gKiBAcGFyYW0ge0ZpbGVbXX0gZmlsZXMgTGlzdCBvZiBhY2NlcHRlZCBmaWxlcyB0aGF0IG1lZXQgdGhlIGdpdmVuIGNyaXRlcmlhXG4gKiAoYGFjY2VwdGAsIGBtdWx0aXBsZWAsIGBtaW5TaXplYCwgYG1heFNpemVgKVxuICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJvcGAgb3IgaW5wdXQgY2hhbmdlIGV2ZW50LlxuICpcbiAqIEBjYWxsYmFjayBkcm9wUmVqZWN0ZWRDYlxuICogQHBhcmFtIHtGaWxlW119IGZpbGVzIExpc3Qgb2YgcmVqZWN0ZWQgZmlsZXMgdGhhdCBkbyBub3QgbWVldCB0aGUgZ2l2ZW4gY3JpdGVyaWFcbiAqIChgYWNjZXB0YCwgYG11bHRpcGxlYCwgYG1pblNpemVgLCBgbWF4U2l6ZWApXG4gKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gKi9cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCBhZ2dyZWdhdGUgZmlsZXMsXG4gKiBpbiBhIGFzeW5jaHJvbm91cyBmYXNoaW9uLCBmcm9tIGRyYWcgb3IgaW5wdXQgY2hhbmdlIGV2ZW50cy5cbiAqXG4gKiBAY2FsbGJhY2sgZ2V0RmlsZXNGcm9tRXZlbnRcbiAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50IEEgZHJhZyBldmVudCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQgKGlmIGZpbGVzIHdlcmUgc2VsZWN0ZWQgdmlhIHRoZSBmaWxlIGRpYWxvZylcbiAqIEByZXR1cm5zIHsoRmlsZVtdfFByb21pc2U8RmlsZVtdPil9XG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3Qgd2l0aCB0aGUgY3VycmVudCBkcm9wem9uZSBzdGF0ZSBhbmQgc29tZSBoZWxwZXIgZnVuY3Rpb25zLlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERyb3B6b25lU3RhdGVcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldFJvb3RQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIHRoZSByb290IGRyb3AgY29udGFpbmVyIHlvdSByZW5kZXJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldElucHV0UHJvcHMgUmV0dXJucyB0aGUgcHJvcHMgeW91IHNob3VsZCBhcHBseSB0byBoaWRkZW4gZmlsZSBpbnB1dCB5b3UgcmVuZGVyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBvcGVuIE9wZW4gdGhlIG5hdGl2ZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2dcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNGb2N1c2VkIERyb3B6b25lIGFyZWEgaXMgaW4gZm9jdXNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNGaWxlRGlhbG9nQWN0aXZlIEZpbGUgZGlhbG9nIGlzIG9wZW5lZFxuICogQHByb3BlcnR5IHtib29sZWFufSBpc0RyYWdBY3RpdmUgQWN0aXZlIGRyYWcgaXMgaW4gcHJvZ3Jlc3NcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNEcmFnQWNjZXB0IERyYWdnZWQgZmlsZXMgYXJlIGFjY2VwdGVkXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzRHJhZ1JlamVjdCBTb21lIGRyYWdnZWQgZmlsZXMgYXJlIHJlamVjdGVkXG4gKiBAcHJvcGVydHkge0ZpbGVbXX0gZHJhZ2dlZEZpbGVzIEZpbGVzIGluIGFjdGl2ZSBkcmFnXG4gKiBAcHJvcGVydHkge0ZpbGVbXX0gYWNjZXB0ZWRGaWxlcyBBY2NlcHRlZCBmaWxlc1xuICogQHByb3BlcnR5IHtGaWxlW119IHJlamVjdGVkRmlsZXMgUmVqZWN0ZWQgZmlsZXNcbiAqL1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGlzRm9jdXNlZDogZmFsc2UsXG4gIGlzRmlsZURpYWxvZ0FjdGl2ZTogZmFsc2UsXG4gIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gIGlzRHJhZ0FjY2VwdDogZmFsc2UsXG4gIGlzRHJhZ1JlamVjdDogZmFsc2UsXG4gIGRyYWdnZWRGaWxlczogW10sXG4gIGFjY2VwdGVkRmlsZXM6IFtdLFxuICByZWplY3RlZEZpbGVzOiBbXVxufVxuXG4vKipcbiAqIEEgUmVhY3QgaG9vayB0aGF0IGNyZWF0ZXMgYSBkcmFnICduJyBkcm9wIGFyZWEuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBNeURyb3B6b25lKHByb3BzKSB7XG4gKiAgIGNvbnN0IHtnZXRSb290UHJvcHMsIGdldElucHV0UHJvcHN9ID0gdXNlRHJvcHpvbmUoe1xuICogICAgIG9uRHJvcDogYWNjZXB0ZWRGaWxlcyA9PiB7XG4gKiAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgRmlsZSBvYmplY3RzLCBlLmcuIHVwbG9hZCB0byBzb21lIHNlcnZlclxuICogICAgIH1cbiAqICAgfSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdiB7Li4uZ2V0Um9vdFByb3BzKCl9PlxuICogICAgICAgPGlucHV0IHsuLi5nZXRJbnB1dFByb3BzKCl9IC8+XG4gKiAgICAgICA8cD5EcmFnIGFuZCBkcm9wIHNvbWUgZmlsZXMgaGVyZSwgb3IgY2xpY2sgdG8gc2VsZWN0IGZpbGVzPC9wPlxuICogICAgIDwvZGl2PlxuICogICApXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZnVuY3Rpb24gdXNlRHJvcHpvbmVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbcHJvcHMuYWNjZXB0XSBTZXQgYWNjZXB0ZWQgZmlsZSB0eXBlcy5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vb2tvbmV0L2F0dHItYWNjZXB0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICogS2VlcCBpbiBtaW5kIHRoYXQgbWltZSB0eXBlIGRldGVybWluYXRpb24gaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBwbGF0Zm9ybXMuIENTViBmaWxlcyxcbiAqIGZvciBleGFtcGxlLCBhcmUgcmVwb3J0ZWQgYXMgdGV4dC9wbGFpbiB1bmRlciBtYWNPUyBidXQgYXMgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIHVuZGVyXG4gKiBXaW5kb3dzLiBJbiBzb21lIGNhc2VzIHRoZXJlIG1pZ2h0IG5vdCBiZSBhIG1pbWUgdHlwZSBzZXQgYXQgYWxsLlxuICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtZHJvcHpvbmUvcmVhY3QtZHJvcHpvbmUvaXNzdWVzLzI3NlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubXVsdGlwbGU9dHJ1ZV0gQWxsb3cgZHJhZyAnbicgZHJvcCAob3Igc2VsZWN0aW9uIGZyb20gdGhlIGZpbGUgZGlhbG9nKSBvZiBtdWx0aXBsZSBmaWxlc1xuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMucHJldmVudERyb3BPbkRvY3VtZW50PXRydWVdIElmIGZhbHNlLCBhbGxvdyBkcm9wcGVkIGl0ZW1zIHRvIHRha2Ugb3ZlciB0aGUgY3VycmVudCBicm93c2VyIHdpbmRvd1xuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9DbGljaz1mYWxzZV0gSWYgdHJ1ZSwgZGlzYWJsZXMgY2xpY2sgdG8gb3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZ1xuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9LZXlib2FyZD1mYWxzZV0gSWYgdHJ1ZSwgZGlzYWJsZXMgU1BBQ0UvRU5URVIgdG8gb3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZy5cbiAqIE5vdGUgdGhhdCBpdCBhbHNvIHN0b3BzIHRyYWNraW5nIHRoZSBmb2N1cyBzdGF0ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLm5vRHJhZz1mYWxzZV0gSWYgdHJ1ZSwgZGlzYWJsZXMgZHJhZyAnbicgZHJvcFxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9EcmFnRXZlbnRzQnViYmxpbmc9ZmFsc2VdIElmIHRydWUsIHN0b3BzIGRyYWcgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50c1xuICogQHBhcmFtIHtudW1iZXJ9IFtwcm9wcy5taW5TaXplPTBdIE1pbmltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJvcHMubWF4U2l6ZT1JbmZpbml0eV0gTWF4aW11bSBmaWxlIHNpemUgKGluIGJ5dGVzKVxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMuZGlzYWJsZWQ9ZmFsc2VdIEVuYWJsZS9kaXNhYmxlIHRoZSBkcm9wem9uZVxuICogQHBhcmFtIHtnZXRGaWxlc0Zyb21FdmVudH0gW3Byb3BzLmdldEZpbGVzRnJvbUV2ZW50XSBVc2UgdGhpcyB0byBwcm92aWRlIGEgY3VzdG9tIGZpbGUgYWdncmVnYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BzLm9uRmlsZURpYWxvZ0NhbmNlbF0gQ2IgZm9yIHdoZW4gY2xvc2luZyB0aGUgZmlsZSBkaWFsb2cgd2l0aCBubyBzZWxlY3Rpb25cbiAqIEBwYXJhbSB7ZHJhZ0NifSBbcHJvcHMub25EcmFnRW50ZXJdIENiIGZvciB3aGVuIHRoZSBgZHJhZ2VudGVyYCBldmVudCBvY2N1cnMuXG4gKiBAcGFyYW0ge2RyYWdDYn0gW3Byb3BzLm9uRHJhZ0xlYXZlXSBDYiBmb3Igd2hlbiB0aGUgYGRyYWdsZWF2ZWAgZXZlbnQgb2NjdXJzXG4gKiBAcGFyYW0ge2RyYWdDYn0gW3Byb3BzLm9uRHJhZ092ZXJdIENiIGZvciB3aGVuIHRoZSBgZHJhZ292ZXJgIGV2ZW50IG9jY3Vyc1xuICogQHBhcmFtIHtkcm9wQ2J9IFtwcm9wcy5vbkRyb3BdIENiIGZvciB3aGVuIHRoZSBgZHJvcGAgZXZlbnQgb2NjdXJzLlxuICogTm90ZSB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciB0aGUgYGdldEZpbGVzRnJvbUV2ZW50YCBjYWxsYmFjayBpcyBkb25lLlxuICpcbiAqIEZpbGVzIGFyZSBhY2NlcHRlZCBvciByZWplY3RlZCBiYXNlZCBvbiB0aGUgYGFjY2VwdGAsIGBtdWx0aXBsZWAsIGBtaW5TaXplYCBhbmQgYG1heFNpemVgIHByb3BzLlxuICogYGFjY2VwdGAgbXVzdCBiZSBhIHZhbGlkIFtNSU1FIHR5cGVdKGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWwpIGFjY29yZGluZyB0byBbaW5wdXQgZWxlbWVudCBzcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy53My5vcmcvd2lraS9IVE1ML0VsZW1lbnRzL2lucHV0L2ZpbGUpIG9yIGEgdmFsaWQgZmlsZSBleHRlbnNpb24uXG4gKiBJZiBgbXVsdGlwbGVgIGlzIHNldCB0byBmYWxzZSBhbmQgYWRkaXRpb25hbCBmaWxlcyBhcmUgZHJvcHBwZWQsXG4gKiBhbGwgZmlsZXMgYmVzaWRlcyB0aGUgZmlyc3Qgd2lsbCBiZSByZWplY3RlZC5cbiAqIEFueSBmaWxlIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBzaXplIGluIHRoZSBbYG1pblNpemVgLCBgbWF4U2l6ZWBdIHJhbmdlLCB3aWxsIGJlIHJlamVjdGVkIGFzIHdlbGwuXG4gKlxuICogTm90ZSB0aGF0IHRoZSBgb25Ecm9wYCBjYWxsYmFjayB3aWxsIGFsd2F5cyBiZSBpbnZva2VkIHJlZ2FyZGxlc3MgaWYgdGhlIGRyb3BwZWQgZmlsZXMgd2VyZSBhY2NlcHRlZCBvciByZWplY3RlZC5cbiAqIElmIHlvdSdkIGxpa2UgdG8gcmVhY3QgdG8gYSBzcGVjaWZpYyBzY2VuYXJpbywgdXNlIHRoZSBgb25Ecm9wQWNjZXB0ZWRgL2BvbkRyb3BSZWplY3RlZGAgcHJvcHMuXG4gKlxuICogYG9uRHJvcGAgd2lsbCBwcm92aWRlIHlvdSB3aXRoIGFuIGFycmF5IG9mIFtGaWxlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZSkgb2JqZWN0cyB3aGljaCB5b3UgY2FuIHRoZW4gcHJvY2VzcyBhbmQgc2VuZCB0byBhIHNlcnZlci5cbiAqIEZvciBleGFtcGxlLCB3aXRoIFtTdXBlckFnZW50XShodHRwczovL2dpdGh1Yi5jb20vdmlzaW9ubWVkaWEvc3VwZXJhZ2VudCkgYXMgYSBodHRwL2FqYXggbGlicmFyeTpcbiAqXG4gKiBgYGBqc1xuICogZnVuY3Rpb24gb25Ecm9wKGFjY2VwdGVkRmlsZXMpIHtcbiAqICAgY29uc3QgcmVxID0gcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgYWNjZXB0ZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICogICAgIHJlcS5hdHRhY2goZmlsZS5uYW1lLCBmaWxlKVxuICogICB9KVxuICogICByZXEuZW5kKGNhbGxiYWNrKVxuICogfVxuICogYGBgXG4gKiBAcGFyYW0ge2Ryb3BBY2NlcHRlZENifSBbcHJvcHMub25Ecm9wQWNjZXB0ZWRdXG4gKiBAcGFyYW0ge2Ryb3BSZWplY3RlZENifSBbcHJvcHMub25Ecm9wUmVqZWN0ZWRdXG4gKlxuICogQHJldHVybnMge0Ryb3B6b25lU3RhdGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEcm9wem9uZSh7XG4gIGFjY2VwdCxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgZ2V0RmlsZXNGcm9tRXZlbnQgPSBmcm9tRXZlbnQsXG4gIG1heFNpemUgPSBJbmZpbml0eSxcbiAgbWluU2l6ZSA9IDAsXG4gIG11bHRpcGxlID0gdHJ1ZSxcbiAgb25EcmFnRW50ZXIsXG4gIG9uRHJhZ0xlYXZlLFxuICBvbkRyYWdPdmVyLFxuICBvbkRyb3AsXG4gIG9uRHJvcEFjY2VwdGVkLFxuICBvbkRyb3BSZWplY3RlZCxcbiAgb25GaWxlRGlhbG9nQ2FuY2VsLFxuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgPSB0cnVlLFxuICBub0NsaWNrID0gZmFsc2UsXG4gIG5vS2V5Ym9hcmQgPSBmYWxzZSxcbiAgbm9EcmFnID0gZmFsc2UsXG4gIG5vRHJhZ0V2ZW50c0J1YmJsaW5nID0gZmFsc2Vcbn0gPSB7fSkge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKG51bGwpXG5cbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSlcbiAgY29uc3QgeyBpc0ZvY3VzZWQsIGlzRmlsZURpYWxvZ0FjdGl2ZSwgZHJhZ2dlZEZpbGVzIH0gPSBzdGF0ZVxuXG4gIC8vIEZuIGZvciBvcGVuaW5nIHRoZSBmaWxlIGRpYWxvZyBwcm9ncmFtbWF0aWNhbGx5XG4gIGNvbnN0IG9wZW5GaWxlRGlhbG9nID0gKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdvcGVuRGlhbG9nJyB9KVxuICAgICAgaW5wdXRSZWYuY3VycmVudC52YWx1ZSA9IG51bGxcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuY2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBmaWxlIGRpYWxvZyBhY3RpdmUgc3RhdGUgd2hlbiB0aGUgd2luZG93IGlzIGZvY3VzZWQgb25cbiAgY29uc3Qgb25XaW5kb3dGb2N1cyA9ICgpID0+IHtcbiAgICAvLyBFeGVjdXRlIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGZpbGUgZGlhbG9nIGlzIG9wZW5lZCBpbiB0aGUgYnJvd3NlclxuICAgIGlmIChpc0ZpbGVEaWFsb2dBY3RpdmUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IGlucHV0UmVmLmN1cnJlbnRcblxuICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdjbG9zZURpYWxvZycgfSlcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvbkZpbGVEaWFsb2dDYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgb25GaWxlRGlhbG9nQ2FuY2VsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDMwMClcbiAgICB9XG4gIH1cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzLCBmYWxzZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgb25XaW5kb3dGb2N1cywgZmFsc2UpXG4gICAgfVxuICB9LCBbaW5wdXRSZWYsIGlzRmlsZURpYWxvZ0FjdGl2ZSwgb25GaWxlRGlhbG9nQ2FuY2VsXSlcblxuICAvLyBDYiB0byBvcGVuIHRoZSBmaWxlIGRpYWxvZyB3aGVuIFNQQUNFL0VOVEVSIG9jY3VycyBvbiB0aGUgZHJvcHpvbmVcbiAgY29uc3Qgb25LZXlEb3duQ2IgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICAvLyBJZ25vcmUga2V5Ym9hcmQgZXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBET00gdHJlZVxuICAgICAgaWYgKCFyb290UmVmLmN1cnJlbnQgfHwgIXJvb3RSZWYuY3VycmVudC5pc0VxdWFsTm9kZShldmVudC50YXJnZXQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMzIgfHwgZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBvcGVuRmlsZURpYWxvZygpXG4gICAgICB9XG4gICAgfSxcbiAgICBbcm9vdFJlZiwgaW5wdXRSZWZdXG4gIClcblxuICAvLyBVcGRhdGUgZm9jdXMgc3RhdGUgZm9yIHRoZSBkcm9wem9uZVxuICBjb25zdCBvbkZvY3VzQ2IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnZm9jdXMnIH0pXG4gIH0sIFtdKVxuICBjb25zdCBvbkJsdXJDYiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdibHVyJyB9KVxuICB9LCBbXSlcblxuICAvLyBDYiB0byBvcGVuIHRoZSBmaWxlIGRpYWxvZyB3aGVuIGNsaWNrIG9jY3VycyBvbiB0aGUgZHJvcHpvbmVcbiAgY29uc3Qgb25DbGlja0NiID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChub0NsaWNrKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJbiBJRTExL0VkZ2UgdGhlIGZpbGUtYnJvd3NlciBkaWFsb2cgaXMgYmxvY2tpbmcsIHRoZXJlZm9yZSwgdXNlIHNldFRpbWVvdXQoKVxuICAgIC8vIHRvIGVuc3VyZSBSZWFjdCBjYW4gaGFuZGxlIHN0YXRlIGNoYW5nZXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvNDUwXG4gICAgaWYgKGlzSWVPckVkZ2UoKSkge1xuICAgICAgc2V0VGltZW91dChvcGVuRmlsZURpYWxvZywgMClcbiAgICB9IGVsc2Uge1xuICAgICAgb3BlbkZpbGVEaWFsb2coKVxuICAgIH1cbiAgfSwgW2lucHV0UmVmLCBub0NsaWNrXSlcblxuICBjb25zdCBbZHJhZ1RhcmdldHMsIHNldERyYWdUYXJnZXRzXSA9IHVzZVN0YXRlKFtdKVxuICBjb25zdCBvbkRvY3VtZW50RHJvcCA9IGV2ZW50ID0+IHtcbiAgICBpZiAocm9vdFJlZi5jdXJyZW50ICYmIHJvb3RSZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAvLyBJZiB3ZSBpbnRlcmNlcHRlZCBhbiBldmVudCBmb3Igb3VyIGluc3RhbmNlLCBsZXQgaXQgcHJvcGFnYXRlIGRvd24gdG8gdGhlIGluc3RhbmNlJ3Mgb25Ecm9wIGhhbmRsZXJcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgc2V0RHJhZ1RhcmdldHMoW10pXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcmV2ZW50RHJvcE9uRG9jdW1lbnQpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25Eb2N1bWVudERyYWdPdmVyLCBmYWxzZSlcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBvbkRvY3VtZW50RHJvcCwgZmFsc2UpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChwcmV2ZW50RHJvcE9uRG9jdW1lbnQpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBvbkRvY3VtZW50RHJhZ092ZXIpXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBvbkRvY3VtZW50RHJvcClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtyb290UmVmLCBwcmV2ZW50RHJvcE9uRG9jdW1lbnRdKVxuXG4gIGNvbnN0IG9uRHJhZ0VudGVyQ2IgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAvLyBQZXJzaXN0IGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRoZSBldmVudCBsYXRlciBhZnRlciBnZXRGaWxlc0Zyb21FdmVudCgpIGlzIGRvbmVcbiAgICAgIGV2ZW50LnBlcnNpc3QoKVxuICAgICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50KVxuXG4gICAgICAvLyBDb3VudCB0aGUgZHJvcHpvbmUgYW5kIGFueSBjaGlsZHJlbiB0aGF0IGFyZSBlbnRlcmVkLlxuICAgICAgaWYgKGRyYWdUYXJnZXRzLmluZGV4T2YoZXZlbnQudGFyZ2V0KSA9PT0gLTEpIHtcbiAgICAgICAgc2V0RHJhZ1RhcmdldHMoWy4uLmRyYWdUYXJnZXRzLCBldmVudC50YXJnZXRdKVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNFdnRXaXRoRmlsZXMoZXZlbnQpKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShnZXRGaWxlc0Zyb21FdmVudChldmVudCkpLnRoZW4oZHJhZ2dlZEZpbGVzID0+IHtcbiAgICAgICAgICBpZiAoaXNQcm9wYWdhdGlvblN0b3BwZWQoZXZlbnQpICYmICFub0RyYWdFdmVudHNCdWJibGluZykge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgZHJhZ2dlZEZpbGVzLFxuICAgICAgICAgICAgaXNEcmFnQWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogJ3NldERyYWdnZWRGaWxlcydcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKG9uRHJhZ0VudGVyKSB7XG4gICAgICAgICAgICBvbkRyYWdFbnRlcihldmVudClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbZHJhZ1RhcmdldHMsIGdldEZpbGVzRnJvbUV2ZW50LCBvbkRyYWdFbnRlciwgbm9EcmFnRXZlbnRzQnViYmxpbmddXG4gIClcblxuICBjb25zdCBvbkRyYWdPdmVyQ2IgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBldmVudC5wZXJzaXN0KClcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudClcblxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknXG4gICAgICAgIH0gY2F0Y2gge30gLyogZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eSAqL1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNFdnRXaXRoRmlsZXMoZXZlbnQpICYmIG9uRHJhZ092ZXIpIHtcbiAgICAgICAgb25EcmFnT3ZlcihldmVudClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcbiAgICBbb25EcmFnT3Zlciwgbm9EcmFnRXZlbnRzQnViYmxpbmddXG4gIClcblxuICBjb25zdCBvbkRyYWdMZWF2ZUNiID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgZXZlbnQucGVyc2lzdCgpXG4gICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQpXG5cbiAgICAgIC8vIE9ubHkgZGVhY3RpdmF0ZSBvbmNlIHRoZSBkcm9wem9uZSBhbmQgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBsZWZ0XG4gICAgICBjb25zdCB0YXJnZXRzID0gW1xuICAgICAgICAuLi5kcmFnVGFyZ2V0cy5maWx0ZXIoXG4gICAgICAgICAgdGFyZ2V0ID0+IHRhcmdldCAhPT0gZXZlbnQudGFyZ2V0ICYmIHJvb3RSZWYuY3VycmVudCAmJiByb290UmVmLmN1cnJlbnQuY29udGFpbnModGFyZ2V0KVxuICAgICAgICApXG4gICAgICBdXG4gICAgICBzZXREcmFnVGFyZ2V0cyh0YXJnZXRzKVxuICAgICAgaWYgKHRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICB0eXBlOiAnc2V0RHJhZ2dlZEZpbGVzJyxcbiAgICAgICAgZHJhZ2dlZEZpbGVzOiBbXVxuICAgICAgfSlcblxuICAgICAgaWYgKGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSAmJiBvbkRyYWdMZWF2ZSkge1xuICAgICAgICBvbkRyYWdMZWF2ZShldmVudClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyb290UmVmLCBkcmFnVGFyZ2V0cywgb25EcmFnTGVhdmUsIG5vRHJhZ0V2ZW50c0J1YmJsaW5nXVxuICApXG5cbiAgY29uc3Qgb25Ecm9wQ2IgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAvLyBQZXJzaXN0IGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRoZSBldmVudCBsYXRlciBhZnRlciBnZXRGaWxlc0Zyb21FdmVudCgpIGlzIGRvbmVcbiAgICAgIGV2ZW50LnBlcnNpc3QoKVxuICAgICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50KVxuXG4gICAgICBzZXREcmFnVGFyZ2V0cyhbXSlcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KVxuXG4gICAgICBpZiAoaXNFdnRXaXRoRmlsZXMoZXZlbnQpKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShnZXRGaWxlc0Zyb21FdmVudChldmVudCkpLnRoZW4oZmlsZXMgPT4ge1xuICAgICAgICAgIGlmIChpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudCkgJiYgIW5vRHJhZ0V2ZW50c0J1YmJsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhY2NlcHRlZEZpbGVzID0gW11cbiAgICAgICAgICBjb25zdCByZWplY3RlZEZpbGVzID0gW11cblxuICAgICAgICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsZUFjY2VwdGVkKGZpbGUsIGFjY2VwdCkgJiYgZmlsZU1hdGNoU2l6ZShmaWxlLCBtYXhTaXplLCBtaW5TaXplKSkge1xuICAgICAgICAgICAgICBhY2NlcHRlZEZpbGVzLnB1c2goZmlsZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlamVjdGVkRmlsZXMucHVzaChmaWxlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoIW11bHRpcGxlICYmIGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmVqZWN0ZWRGaWxlcy5wdXNoKC4uLmFjY2VwdGVkRmlsZXMuc3BsaWNlKDApKSAvLyBSZWplY3QgZXZlcnl0aGluZyBhbmQgZW1wdHkgYWNjZXB0ZWQgZmlsZXNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICBhY2NlcHRlZEZpbGVzLFxuICAgICAgICAgICAgcmVqZWN0ZWRGaWxlcyxcbiAgICAgICAgICAgIHR5cGU6ICdzZXRGaWxlcydcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKG9uRHJvcCkge1xuICAgICAgICAgICAgb25Ecm9wKGFjY2VwdGVkRmlsZXMsIHJlamVjdGVkRmlsZXMsIGV2ZW50KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWplY3RlZEZpbGVzLmxlbmd0aCA+IDAgJiYgb25Ecm9wUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIG9uRHJvcFJlamVjdGVkKHJlamVjdGVkRmlsZXMsIGV2ZW50KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhY2NlcHRlZEZpbGVzLmxlbmd0aCA+IDAgJiYgb25Ecm9wQWNjZXB0ZWQpIHtcbiAgICAgICAgICAgIG9uRHJvcEFjY2VwdGVkKGFjY2VwdGVkRmlsZXMsIGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIG11bHRpcGxlLFxuICAgICAgYWNjZXB0LFxuICAgICAgbWluU2l6ZSxcbiAgICAgIG1heFNpemUsXG4gICAgICBnZXRGaWxlc0Zyb21FdmVudCxcbiAgICAgIG9uRHJvcCxcbiAgICAgIG9uRHJvcEFjY2VwdGVkLFxuICAgICAgb25Ecm9wUmVqZWN0ZWQsXG4gICAgICBub0RyYWdFdmVudHNCdWJibGluZ1xuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNvbXBvc2VIYW5kbGVyID0gZm4gPT4ge1xuICAgIHJldHVybiBkaXNhYmxlZCA/IG51bGwgOiBmblxuICB9XG5cbiAgY29uc3QgY29tcG9zZUtleWJvYXJkSGFuZGxlciA9IGZuID0+IHtcbiAgICByZXR1cm4gbm9LZXlib2FyZCA/IG51bGwgOiBjb21wb3NlSGFuZGxlcihmbilcbiAgfVxuXG4gIGNvbnN0IGNvbXBvc2VEcmFnSGFuZGxlciA9IGZuID0+IHtcbiAgICByZXR1cm4gbm9EcmFnID8gbnVsbCA6IGNvbXBvc2VIYW5kbGVyKGZuKVxuICB9XG5cbiAgY29uc3Qgc3RvcFByb3BhZ2F0aW9uID0gZXZlbnQgPT4ge1xuICAgIGlmIChub0RyYWdFdmVudHNCdWJibGluZykge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBnZXRSb290UHJvcHMgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICByZWZLZXkgPSAncmVmJyxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25EcmFnRW50ZXIsXG4gICAgICBvbkRyYWdPdmVyLFxuICAgICAgb25EcmFnTGVhdmUsXG4gICAgICBvbkRyb3AsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHt9KSA9PiAoe1xuICAgICAgb25LZXlEb3duOiBjb21wb3NlS2V5Ym9hcmRIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uS2V5RG93biwgb25LZXlEb3duQ2IpKSxcbiAgICAgIG9uRm9jdXM6IGNvbXBvc2VLZXlib2FyZEhhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25Gb2N1cywgb25Gb2N1c0NiKSksXG4gICAgICBvbkJsdXI6IGNvbXBvc2VLZXlib2FyZEhhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25CbHVyLCBvbkJsdXJDYikpLFxuICAgICAgb25DbGljazogY29tcG9zZUhhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25DbGljaywgb25DbGlja0NiKSksXG4gICAgICBvbkRyYWdFbnRlcjogY29tcG9zZURyYWdIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRHJhZ0VudGVyLCBvbkRyYWdFbnRlckNiKSksXG4gICAgICBvbkRyYWdPdmVyOiBjb21wb3NlRHJhZ0hhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25EcmFnT3Zlciwgb25EcmFnT3ZlckNiKSksXG4gICAgICBvbkRyYWdMZWF2ZTogY29tcG9zZURyYWdIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRHJhZ0xlYXZlLCBvbkRyYWdMZWF2ZUNiKSksXG4gICAgICBvbkRyb3A6IGNvbXBvc2VEcmFnSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyb3AsIG9uRHJvcENiKSksXG4gICAgICBbcmVmS2V5XTogcm9vdFJlZixcbiAgICAgIC4uLihyb290UmVmLmN1cnJlbnQgJiYgcm9vdFJlZi5jdXJyZW50LnRhZ05hbWUgPT09ICdMQUJFTCcgPyB7IGh0bWxGb3I6ICdub29wJyB9IDoge30pLFxuICAgICAgLi4uKCFkaXNhYmxlZCAmJiAhbm9LZXlib2FyZCA/IHsgdGFiSW5kZXg6IDAgfSA6IHt9KSxcbiAgICAgIC4uLnJlc3RcbiAgICB9KSxcbiAgICBbXG4gICAgICByb290UmVmLFxuICAgICAgb25LZXlEb3duQ2IsXG4gICAgICBvbkZvY3VzQ2IsXG4gICAgICBvbkJsdXJDYixcbiAgICAgIG9uQ2xpY2tDYixcbiAgICAgIG9uRHJhZ0VudGVyQ2IsXG4gICAgICBvbkRyYWdPdmVyQ2IsXG4gICAgICBvbkRyYWdMZWF2ZUNiLFxuICAgICAgb25Ecm9wQ2IsXG4gICAgICBub0tleWJvYXJkLFxuICAgICAgbm9EcmFnLFxuICAgICAgZGlzYWJsZWRcbiAgICBdXG4gIClcblxuICBjb25zdCBvbklucHV0RWxlbWVudENsaWNrID0gdXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGdldElucHV0UHJvcHMgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7IHJlZktleSA9ICdyZWYnLCBvbkNoYW5nZSwgb25DbGljaywgZGlzYWJsZWQsIC4uLnJlc3QgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBpbnB1dFByb3BzID0ge1xuICAgICAgICBhY2NlcHQsXG4gICAgICAgIG11bHRpcGxlLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHN0eWxlOiB7IGRpc3BsYXk6ICdub25lJyB9LFxuICAgICAgICBvbkNoYW5nZTogY29tcG9zZUhhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25DaGFuZ2UsIG9uRHJvcENiKSksXG4gICAgICAgIG9uQ2xpY2s6IGNvbXBvc2VIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQ2xpY2ssIG9uSW5wdXRFbGVtZW50Q2xpY2spKSxcbiAgICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJyxcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQgfHwgbm9DbGljayxcbiAgICAgICAgW3JlZktleV06IGlucHV0UmVmXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgIC4uLnJlc3RcbiAgICAgIH1cbiAgICB9LFxuICAgIFtpbnB1dFJlZiwgYWNjZXB0LCBtdWx0aXBsZSwgb25Ecm9wQ2IsIGRpc2FibGVkLCBub0NsaWNrXVxuICApXG5cbiAgY29uc3QgZmlsZUNvdW50ID0gZHJhZ2dlZEZpbGVzLmxlbmd0aFxuICBjb25zdCBpc011bHRpcGxlQWxsb3dlZCA9IG11bHRpcGxlIHx8IGZpbGVDb3VudCA8PSAxXG4gIGNvbnN0IGlzRHJhZ0FjY2VwdCA9IGZpbGVDb3VudCA+IDAgJiYgYWxsRmlsZXNBY2NlcHRlZChkcmFnZ2VkRmlsZXMsIGFjY2VwdClcbiAgY29uc3QgaXNEcmFnUmVqZWN0ID0gZmlsZUNvdW50ID4gMCAmJiAoIWlzRHJhZ0FjY2VwdCB8fCAhaXNNdWx0aXBsZUFsbG93ZWQpXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpc0RyYWdBY2NlcHQsXG4gICAgaXNEcmFnUmVqZWN0LFxuICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkICYmICFkaXNhYmxlZCxcbiAgICBnZXRSb290UHJvcHMsXG4gICAgZ2V0SW5wdXRQcm9wcyxcbiAgICByb290UmVmLFxuICAgIGlucHV0UmVmLFxuICAgIG9wZW46IGNvbXBvc2VIYW5kbGVyKG9wZW5GaWxlRGlhbG9nKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnZm9jdXMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgfVxuICAgIGNhc2UgJ2JsdXInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH1cbiAgICBjYXNlICdvcGVuRGlhbG9nJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0ZpbGVEaWFsb2dBY3RpdmU6IHRydWVcbiAgICAgIH1cbiAgICBjYXNlICdjbG9zZURpYWxvZyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNGaWxlRGlhbG9nQWN0aXZlOiBmYWxzZVxuICAgICAgfVxuICAgIGNhc2UgJ3NldERyYWdnZWRGaWxlcyc6XG4gICAgICAvKiBlc2xpbnQgbm8tY2FzZS1kZWNsYXJhdGlvbnM6IDAgKi9cbiAgICAgIGNvbnN0IHsgaXNEcmFnQWN0aXZlLCBkcmFnZ2VkRmlsZXMgfSA9IGFjdGlvblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGRyYWdnZWRGaWxlcyxcbiAgICAgICAgaXNEcmFnQWN0aXZlXG4gICAgICB9XG4gICAgY2FzZSAnc2V0RmlsZXMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFjY2VwdGVkRmlsZXM6IGFjdGlvbi5hY2NlcHRlZEZpbGVzLFxuICAgICAgICByZWplY3RlZEZpbGVzOiBhY3Rpb24ucmVqZWN0ZWRGaWxlc1xuICAgICAgfVxuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0ZpbGVEaWFsb2dBY3RpdmU6IGZhbHNlLFxuICAgICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICBkcmFnZ2VkRmlsZXM6IFtdXG4gICAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZVxuICB9XG59XG4iXSwibmFtZXMiOlsiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJ2YWx1ZSIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImYiLCJ5IiwidCIsImciLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJ0aHJvdyIsInJldHVybiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwidGhpcyIsIm4iLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJjYWxsIiwicG9wIiwibGVuZ3RoIiwicHVzaCIsIl9fcmVhZCIsIm8iLCJtIiwiciIsImkiLCJhciIsImVycm9yIiwiX19zcHJlYWQiLCJhcmd1bWVudHMiLCJjb25jYXQiLCJDT01NT05fTUlNRV9UWVBFUyIsIk1hcCIsInRvRmlsZVdpdGhQYXRoIiwiZmlsZSIsInBhdGgiLCJuYW1lIiwibGFzdEluZGV4T2YiLCJ0eXBlIiwiZXh0Iiwic3BsaXQiLCJ0b0xvd2VyQ2FzZSIsImdldCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid2l0aE1pbWVUeXBlIiwid2Via2l0UmVsYXRpdmVQYXRoIiwiRklMRVNfVE9fSUdOT1JFIiwiZnJvbUV2ZW50IiwiZXZ0IiwidHNsaWJfMS5fX2F3YWl0ZXIiLCJ0c2xpYl8xLl9fZ2VuZXJhdG9yIiwiX2EiLCJkYXRhVHJhbnNmZXIiLCJkdCIsIml0ZW1zIiwiZnJvbUxpc3QiLCJmaWx0ZXIiLCJpdGVtIiwia2luZCIsImFsbCIsIm1hcCIsInRvRmlsZVByb21pc2VzIiwibm9JZ25vcmVkRmlsZXMiLCJmbGF0dGVuIiwicmVkdWNlIiwiYWNjIiwiZmlsZXMiLCJ0c2xpYl8xLl9fc3ByZWFkIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0RGF0YVRyYW5zZmVyRmlsZXMiLCJ0YXJnZXQiLCJpbmRleE9mIiwid2Via2l0R2V0QXNFbnRyeSIsImZyb21EYXRhVHJhbnNmZXJJdGVtIiwiZW50cnkiLCJpc0RpcmVjdG9yeSIsImZyb21EaXJFbnRyeSIsImdldEFzRmlsZSIsImZ3cCIsImZyb21FbnRyeSIsImZ1bGxQYXRoIiwiZXJyIiwiZnJvbUZpbGVFbnRyeSIsInJlYWRlciIsImNyZWF0ZVJlYWRlciIsImVudHJpZXMiLCJyZWFkRW50cmllcyIsIl90aGlzIiwiYmF0Y2giLCJlcnJfMSIsIm1vZHVsZSIsImV4cG9ydHMiLCJsIiwiYyIsImQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJ3aW5kb3ciLCJNYXRoIiwic2VsZiIsIkZ1bmN0aW9uIiwiX19nIiwidmVyc2lvbiIsIl9fZSIsImEiLCJ0b1N0cmluZyIsInNsaWNlIiwidSIsInN0b3JlIiwiRiIsIkciLCJoIiwiUyIsIngiLCJCIiwiYiIsIlUiLCJjb3JlIiwiVyIsIlIiLCJyYW5kb20iLCJtaW4iLCJyZXBsYWNlIiwic29tZSIsInRyaW0iLCJjaGFyQXQiLCJlbmRzV2l0aCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInZhbHVlT2YiLCJpbnNwZWN0U291cmNlIiwiam9pbiIsIlN0cmluZyIsInciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwiY29uc3RydWN0b3IiLCJmaWxlQWNjZXB0ZWQiLCJhY2NlcHQiLCJhY2NlcHRzIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJldmVudCIsImNhbmNlbEJ1YmJsZSIsImlzRXZ0V2l0aEZpbGVzIiwidHlwZXMiLCJvbkRvY3VtZW50RHJhZ092ZXIiLCJwcmV2ZW50RGVmYXVsdCIsImNvbXBvc2VFdmVudEhhbmRsZXJzIiwiZm5zIiwiYXJncyIsImZuIiwiRHJvcHpvbmUiLCJmb3J3YXJkUmVmIiwicmVmIiwiY2hpbGRyZW4iLCJ1c2VEcm9wem9uZSIsIm9wZW4iLCJwcm9wcyIsInVzZUVmZmVjdCIsIl90eXBlb2YiLCJjdXJyZW50IiwiUmVhY3QiLCJGcmFnbWVudCIsImRpc3BsYXlOYW1lIiwiaW5pdGlhbFN0YXRlIiwiaXNGb2N1c2VkIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiZnVuYyIsIm9uZU9mVHlwZSIsInN0cmluZyIsImFycmF5T2YiLCJtdWx0aXBsZSIsImJvb2wiLCJwcmV2ZW50RHJvcE9uRG9jdW1lbnQiLCJub0NsaWNrIiwibm9LZXlib2FyZCIsIm5vRHJhZyIsIm5vRHJhZ0V2ZW50c0J1YmJsaW5nIiwibWluU2l6ZSIsIm51bWJlciIsIm1heFNpemUiLCJkaXNhYmxlZCIsImdldEZpbGVzRnJvbUV2ZW50Iiwib25GaWxlRGlhbG9nQ2FuY2VsIiwib25EcmFnRW50ZXIiLCJvbkRyYWdMZWF2ZSIsIm9uRHJhZ092ZXIiLCJvbkRyb3AiLCJvbkRyb3BBY2NlcHRlZCIsIm9uRHJvcFJlamVjdGVkIiwiaXNGaWxlRGlhbG9nQWN0aXZlIiwiaXNEcmFnQWN0aXZlIiwiaXNEcmFnQWNjZXB0IiwiaXNEcmFnUmVqZWN0IiwiZHJhZ2dlZEZpbGVzIiwiYWNjZXB0ZWRGaWxlcyIsInJlamVjdGVkRmlsZXMiLCJJbmZpbml0eSIsInJvb3RSZWYiLCJ1c2VSZWYiLCJpbnB1dFJlZiIsInVzZVJlZHVjZXIiLCJyZWR1Y2VyIiwic3RhdGUiLCJkaXNwYXRjaCIsIm9wZW5GaWxlRGlhbG9nIiwiY2xpY2siLCJvbldpbmRvd0ZvY3VzIiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25LZXlEb3duQ2IiLCJ1c2VDYWxsYmFjayIsImlzRXF1YWxOb2RlIiwia2V5Q29kZSIsIm9uRm9jdXNDYiIsIm9uQmx1ckNiIiwib25DbGlja0NiIiwidXNlckFnZW50IiwibmF2aWdhdG9yIiwiaXNJZU9yRWRnZSIsInVzZVN0YXRlIiwiZHJhZ1RhcmdldHMiLCJzZXREcmFnVGFyZ2V0cyIsIm9uRG9jdW1lbnREcm9wIiwiY29udGFpbnMiLCJvbkRyYWdFbnRlckNiIiwicGVyc2lzdCIsInN0b3BQcm9wYWdhdGlvbiIsIm9uRHJhZ092ZXJDYiIsImRyb3BFZmZlY3QiLCJvbkRyYWdMZWF2ZUNiIiwidGFyZ2V0cyIsIm9uRHJvcENiIiwiZm9yRWFjaCIsInNpemUiLCJzcGxpY2UiLCJjb21wb3NlSGFuZGxlciIsImNvbXBvc2VLZXlib2FyZEhhbmRsZXIiLCJjb21wb3NlRHJhZ0hhbmRsZXIiLCJnZXRSb290UHJvcHMiLCJ1c2VNZW1vIiwicmVmS2V5Iiwib25LZXlEb3duIiwib25Gb2N1cyIsIm9uQmx1ciIsIm9uQ2xpY2siLCJyZXN0IiwidGFnTmFtZSIsImh0bWxGb3IiLCJ0YWJJbmRleCIsIm9uSW5wdXRFbGVtZW50Q2xpY2siLCJnZXRJbnB1dFByb3BzIiwib25DaGFuZ2UiLCJzdHlsZSIsImRpc3BsYXkiLCJhdXRvQ29tcGxldGUiLCJmaWxlQ291bnQiLCJpc011bHRpcGxlQWxsb3dlZCIsImV2ZXJ5IiwiYWN0aW9uIl0sIm1hcHBpbmdzIjoib2tFQWlFTyxTQUFTQSxFQUFVQyxFQUFTQyxFQUFZQyxFQUFHQyxHQUM5QyxPQUFPLElBQUtELElBQU1BLEVBQUlFLFVBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVUMsR0FBUyxJQUFNQyxFQUFLTixFQUFVTyxLQUFLRixJQUFXLE1BQU9HLEdBQUtMLEVBQU9LLElBQ3BGLFNBQVNDLEVBQVNKLEdBQVMsSUFBTUMsRUFBS04sRUFBaUIsTUFBRUssSUFBVyxNQUFPRyxHQUFLTCxFQUFPSyxJQUN2RixTQUFTRixFQUFLSSxHQUFVQSxFQUFPQyxLQUFPVCxFQUFRUSxFQUFPTCxPQUFTLElBQUlOLEVBQUUsU0FBVUcsR0FBV0EsRUFBUVEsRUFBT0wsU0FBV08sS0FBS1IsRUFBV0ssR0FDbklILEdBQU1OLEVBQVlBLEVBQVVhLE1BQU1oQixFQUFTQyxHQUFjLEtBQUtTLFVBSS9ELFNBQVNPLEVBQVlqQixFQUFTa0IsR0FDakMsSUFBc0dDLEVBQUdDLEVBQUdDLEVBQUdDLEVBQTNHQyxFQUFJLENBQUVDLE1BQU8sRUFBR0MsS0FBTSxXQUFhLEdBQVcsRUFBUEosRUFBRSxHQUFRLE1BQU1BLEVBQUUsR0FBSSxPQUFPQSxFQUFFLElBQU9LLEtBQU0sR0FBSUMsSUFBSyxJQUNoRyxPQUFPTCxFQUFJLENBQUVaLEtBQU1rQixFQUFLLEdBQUlDLE1BQVNELEVBQUssR0FBSUUsT0FBVUYsRUFBSyxJQUF3QixtQkFBWEcsU0FBMEJULEVBQUVTLE9BQU9DLFVBQVksV0FBYSxPQUFPQyxPQUFVWCxFQUN2SixTQUFTTSxFQUFLTSxHQUFLLE9BQU8sU0FBVUMsR0FBSyxPQUN6QyxTQUFjQyxHQUNWLEdBQUlqQixFQUFHLE1BQU0sSUFBSWtCLFVBQVUsbUNBQzNCLEtBQU9kLEdBQUcsSUFDTixHQUFJSixFQUFJ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
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],n):n((e=e||self).reactDropzone={},e.React,e.PropTypes)}(this,function(e,ie,n){"use strict";var u="default"in ie?ie.default:ie;function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ue(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),t.push.apply(t,r)}return t}function ce(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?r(t,!0).forEach(function(e){ue(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):r(t).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function ae(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],0<=n.indexOf(t)||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function fe(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var t=[],r=!0,o=!1,i=void 0;try{for(var u,c=e[Symbol.iterator]();!(r=(u=c.next()).done)&&(t.push(u.value),!n||t.length!==n);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return t}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function le(e){return function(e){if(Array.isArray(e)){for(var n=0,t=new Array(e.length);n<e.length;n++)t[n]=e[n];return t}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function f(i,u,c,a){return new(c=c||Promise)(function(e,n){function t(e){try{o(a.next(e))}catch(e){n(e)}}function r(e){try{o(a.throw(e))}catch(e){n(e)}}function o(n){n.done?e(n.value):new c(function(e){e(n.value)}).then(t,r)}o((a=a.apply(i,u||[])).next())})}function l(t,r){var o,i,u,e,c={label:0,sent:function(){if(1&u[0])throw u[1];return u[1]},trys:[],ops:[]};return e={next:n(0),throw:n(1),return:n(2)},"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function n(n){return function(e){return function(n){if(o)throw new TypeError("Generator is already executing.");for(;c;)try{if(o=1,i&&(u=2&n[0]?i.return:n[0]?i.throw||((u=i.return)&&u.call(i),0):i.next)&&!(u=u.call(i,n[1])).done)return u;switch(i=0,u&&(n=[2&n[0],u.value]),n[0]){case 0:case 1:u=n;break;case 4:return c.label++,{value:n[1],done:!1};case 5:c.label++,i=n[1],n=[0];continue;case 7:n=c.ops.pop(),c.trys.pop();continue;default:if(!(u=0<(u=c.trys).length&&u[u.length-1])&&(6===n[0]||2===n[0])){c=0;continue}if(3===n[0]&&(!u||n[1]>u[0]&&n[1]<u[3])){c.label=n[1];break}if(6===n[0]&&c.label<u[1]){c.label=u[1],u=n;break}if(u&&c.label<u[2]){c.label=u[2],c.ops.push(n);break}u[2]&&c.ops.pop(),c.trys.pop();continue}n=r.call(t,c)}catch(e){n=[6,e],i=0}finally{o=u=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,e])}}}function t(e,n){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var r,o,i=t.call(e),u=[];try{for(;(void 0===n||0<n--)&&!(r=i.next()).done;)u.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return u}function o(){for(var e=[],n=0;n<arguments.length;n++)e=e.concat(t(arguments[n]));return e}n=n&&n.hasOwnProperty("default")?n.default:n;var i=new Map([["avi","video/avi"],["gif","image/gif"],["ico","image/x-icon"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["mkv","video/x-matroska"],["mov","video/quicktime"],["mp4","video/mp4"],["pdf","application/pdf"],["png","image/png"],["zip","application/zip"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]]);function a(e,n){var t=function(e){var n=e.name;if(n&&-1!==n.lastIndexOf(".")&&!e.type){var t=n.split(".").pop().toLowerCase(),r=i.get(t);r&&Object.defineProperty(e,"type",{value:r,writable:!1,configurable:!1,enumerable:!0})}return e}(e);if("string"!=typeof t.path){var r=e.webkitRelativePath;Object.defineProperty(t,"path",{value:"string"==typeof n?n:"string"==typeof r&&0<r.length?r:e.name,writable:!1,configurable:!1,enumerable:!0})}return t}var s=[".DS_Store","Thumbs.db"];function se(n){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,function(e){return!!e.dataTransfer}(n)&&n.dataTransfer?function(t,r){return f(this,void 0,void 0,function(){var n;return l(this,function(e){switch(e.label){case 0:return t.items?(n=d(t.items).filter(function(e){return"file"===e.kind}),"drop"!==r?[2,n]:[4,Promise.all(n.map(v))]):[3,2];case 1:return[2,p(function t(e){return e.reduce(function(e,n){return o(e,Array.isArray(n)?t(n):[n])},[])}(e.sent()))];case 2:return[2,p(d(t.files).map(function(e){return a(e)}))]}})})}(n.dataTransfer,n.type):function(e){return(function(e){return null!==e}(e.target)&&e.target.files?d(e.target.files):[]).map(function(e){return a(e)})}(n)]})})}function p(e){return e.filter(function(e){return-1===s.indexOf(e.name)})}function d(e){for(var n=[],t=0;t<e.length;t++){var r=e[t];n.push(r)}return n}function v(e){if("function"!=typeof e.webkitGetAsEntry)return y(e);var n=e.webkitGetAsEntry();return n&&n.isDirectory?b(n):y(e)}function y(e){var n=e.getAsFile();if(!n)return Promise.reject(e+" is not a File");var t=a(n);return Promise.resolve(t)}function g(n){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,n.isDirectory?b(n):function(r){return f(this,void 0,void 0,function(){return l(this,function(e){return[2,new Promise(function(t,n){r.file(function(e){var n=a(e,r.fullPath);t(n)},function(e){n(e)})})]})})}(n)]})})}function b(e){var n=e.createReader();return new Promise(function(u,c){var a=[];!function i(){var e=this;n.readEntries(function(o){return f(e,void 0,void 0,function(){var n,t,r;return l(this,function(e){switch(e.label){case 0:if(o.length)return[3,5];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,Promise.all(a)];case 2:return n=e.sent(),u(n),[3,4];case 3:return t=e.sent(),c(t),[3,4];case 4:return[3,6];case 5:r=Promise.all(o.map(g)),a.push(r),i(),e.label=6;case 6:return[2]}})})},function(e){c(e)})}()})}var h,m,D=(function(e){function r(e){if(o[e])return o[e].exports;var n=o[e]={i:e,l:!1,exports:{}};return t[e].call(n.exports,n,n.exports,r),n.l=!0,n.exports}var t,o;e.exports=(o={},r.m=t=[function(e,n){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n){var t=e.exports={version:"2.5.0"};"number"==typeof __e&&(__e=t)},function(e,n,t){e.exports=!t(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,n,t){var r=t(32)("wks"),o=t(9),i=t(0).Symbol,u="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=u&&i[e]||(u?i:o)("Symbol."+e))}).store=r},function(e,n,t){var y=t(0),g=t(2),b=t(8),h=t(22),m=t(10),D=function(e,n,t){var r,o,i,u,c=e&D.F,a=e&D.G,f=e&D.S,l=e&D.P,s=e&D.B,p=a?y:f?y[n]||(y[n]={}):(y[n]||{}).prototype,d=a?g:g[n]||(g[n]={}),v=d.prototype||(d.prototype={});for(r in a&&(t=n),t)i=((o=!c&&p&&void 0!==p[r])?p:t)[r],u=s&&o?m(i,y):l&&"function"==typeof i?m(Function.call,i):i,p&&h(p,r,i,e&D.U),d[r]!=i&&b(d,r,u),l&&v[r]!=i&&(v[r]=i)};y.core=g,D.F=1,D.G=2,D.S=4,D.P=8,D.B=16,D.W=32,D.U=64,D.R=128,e.exports=D},function(e,n,t){var r=t(16),o=t(21);e.exports=t(3)?function(e,n,t){return r.f(e,n,o(1,t))}:function(e,n,t){return e[n]=t,e}},function(e,n){var t=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+r).toString(36))}},function(e,n,t){var i=t(24);e.exports=function(r,o,e){if(i(r),void 0===o)return r;switch(e){case 1:return function(e){return r.call(o,e)};case 2:return function(e,n){return r.call(o,e,n)};case 3:return function(e,n,t){return r.call(o,e,n,t)}}return function(){return r.apply(o,arguments)}}},function(e,n){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,n,t){var r=t(28),o=Math.min;e.exports=function(e){return 0<e?o(r(e),9007199254740991):0}},function(e,n,t){n.__esModule=!0,n.default=function(e,n){if(e&&n){var t=Array.isArray(n)?n:n.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return t.some(function(e){var n=e.trim();return"."===n.charAt(0)?r.toLowerCase().endsWith(n.toLowerCase()):n.endsWith("/*")?i===n.replace(/\/.*$/,""):o===n})}return!0},t(14),t(34)},function(e,n,t){t(15),e.exports=t(2).Array.some},function(e,n,t){var r=t(7),o=t(25)(3);r(r.P+r.F*!t(33)([].some,!0),"Array",{some:function(e){return o(this,e,arguments[1])}})},function(e,n,t){var r=t(17),o=t(18),i=t(20),u=Object.defineProperty;n.f=t(3)?Object.defineProperty:function(e,n,t){if(r(e),n=i(n,!0),r(t),o)try{return u(e,n,t)}catch(e){}if("get"in t||"set"in t)throw TypeError("Accessors not supported!");return"value"in t&&(e[n]=t.value),e}},function(e,n,t){var r=t(1);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,n,t){e.exports=!t(3)&&!t(4)(function(){return 7!=Object.defineProperty(t(19)("div"),"a",{get:function(){return 7}}).a})},function(e,n,t){var r=t(1),o=t(0).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,n,t){var o=t(1);e.exports=function(e,n){if(!o(e))return e;var t,r;if(n&&"function"==typeof(t=e.toString)&&!o(r=t.call(e)))return r;if("function"==typeof(t=e.valueOf)&&!o(r=t.call(e)))return r;if(!n&&"function"==typeof(t=e.toString)&&!o(r=t.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n,t){var i=t(0),u=t(8),c=t(23),a=t(9)("src"),r=Function.toString,f=(""+r).split("toString");t(2).inspectSource=function(e){return r.call(e)},(e.exports=function(e,n,t,r){var o="function"==typeof t;o&&(c(t,"name")||u(t,"name",n)),e[n]!==t&&(o&&(c(t,a)||u(t,a,e[n]?""+e[n]:f.join(String(n)))),e===i?e[n]=t:r?e[n]?e[n]=t:u(e,n,t):(delete e[n],u(e,n,t)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||r.call(this)})},function(e,n){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,n,t){var m=t(10),D=t(26),w=t(27),x=t(12),r=t(29);e.exports=function(s,e){var p=1==s,d=2==s,v=3==s,y=4==s,g=6==s,b=5==s||g,h=e||r;return function(e,n,t){for(var r,o,i=w(e),u=D(i),c=m(n,t,3),a=x(u.length),f=0,l=p?h(e,a):d?h(e,0):void 0;f<a;f++)if((b||f in u)&&(o=c(r=u[f],f,i),s))if(p)l[f]=o;else if(o)switch(s){case 3:return!0;case 5:return r;case 6:return f;case 2:l.push(r)}else if(y)return!1;return g?-1:v||y?y:l}}},function(e,n,t){var r=t(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,n,t){var r=t(11);e.exports=function(e){return Object(r(e))}},function(e,n){var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(0<e?r:t)(e)}},function(e,n,t){var r=t(30);e.exports=function(e,n){return new(r(e))(n)}},function(e,n,t){var r=t(1),o=t(31),i=t(6)("species");e.exports=function(e){var n;return o(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!o(n.prototype)||(n=void 0),r(n)&&null===(n=n[i])&&(n=void 0)),void 0===n?Array:n}},function(e,n,t){var r=t(5);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,n,t){var r=t(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,n,t){var r=t(4);e.exports=function(e,n){return!!e&&r(function(){n?e.call(null,function(){},1):e.call(null)})}},function(e,n,t){t(35),e.exports=t(2).String.endsWith},function(e,n,t){var r=t(7),u=t(12),c=t(36),a="".endsWith;r(r.P+r.F*t(38)("endsWith"),"String",{endsWith:function(e){var n=c(this,e,"endsWith"),t=1<arguments.length?arguments[1]:void 0,r=u(n.length),o=void 0===t?r:Math.min(u(t),r),i=String(e);return a?a.call(n,i,o):n.slice(o-i.length,o)===i}})},function(e,n,t){var r=t(37),o=t(11);e.exports=function(e,n,t){if(r(n))throw TypeError("String#"+t+" doesn't accept regex!");return String(o(e))}},function(e,n,t){var r=t(1),o=t(5),i=t(6)("match");e.exports=function(e){var n;return r(e)&&(void 0!==(n=e[i])?!!n:"RegExp"==o(e))}},function(e,n,t){var r=t(6)("match");e.exports=function(n){var t=/./;try{"/./"[n](t)}catch(e){try{return t[r]=!1,!"/./"[n](t)}catch(n){}}return!0}}],r.c=o,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=13))}(h={exports:{}},h.exports),h.exports),w=(m=D)&&m.__esModule&&Object.prototype.hasOwnProperty.call(m,"default")?m.default:m;function pe(e,n){return"application/x-moz-file"===e.type||w(e,n)}function de(e,n,t){return e.size<=n&&e.size>=t}function ve(e){return"function"==typeof e.isPropagationStopped?e.isPropagationStopped():void 0!==e.cancelBubble&&e.cancelBubble}function ye(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(e){return"Files"===e||"application/x-moz-file"===e}):!!e.target&&!!e.target.files}function ge(e){e.preventDefault()}function be(){for(var e=arguments.length,o=new Array(e),n=0;n<e;n++)o[n]=arguments[n];return function(n){for(var e=arguments.length,t=new Array(1<e?e-1:0),r=1;r<e;r++)t[r-1]=arguments[r];return o.some(function(e){return!ve(n)&&e&&e.apply(void 0,[n].concat(t)),ve(n)})}}var x=ie.forwardRef(function(e,n){var t=e.children,r=O(ae(e,["children"])),o=r.open,i=ae(r,["open"]);return ie.useEffect(function(){return"function"==typeof n?n({open:o}):"object"===c(n)&&null!==n&&(n.current={open:o}),function(){"function"==typeof n?n(null):"object"===c(n)&&null!==n&&(n.current=null)}},[n]),u.createElement(ie.Fragment,null,t(ce({},i,{open:o})))});x.displayName="Dropzone";var he={isFocused:!(x.propTypes={children:n.func,accept:n.oneOfType([n.string,n.arrayOf(n.string)]),multiple:n.bool,preventDropOnDocument:n.bool,noClick:n.bool,noKeyboard:n.bool,noDrag:n.bool,noDragEventsBubbling:n.bool,minSize:n.number,maxSize:n.number,disabled:n.bool,getFilesFromEvent:n.func,onFileDialogCancel:n.func,onDragEnter:n.func,onDragLeave:n.func,onDragOver:n.func,onDrop:n.func,onDropAccepted:n.func,onDropRejected:n.func}),isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,draggedFiles:[],acceptedFiles:[],rejectedFiles:[]};function O(){function n(){_.current&&(R({type:"openDialog"}),_.current.value=null,_.current.click())}function e(){L&&setTimeout(function(){_.current&&(_.current.files.length||(R({type:"closeDialog"}),"function"==typeof D&&D()))},300)}var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},u=t.accept,r=t.disabled,p=void 0!==r&&r,o=t.getFilesFromEvent,i=void 0===o?se:o,c=t.maxSize,a=void 0===c?1/0:c,f=t.minSize,l=void 0===f?0:f,s=t.multiple,d=void 0===s||s,v=t.onDragEnter,y=t.onDragLeave,g=t.onDragOver,b=t.onDrop,h=t.onDropAccepted,m=t.onDropRejected,D=t.onFileDialogCancel,w=t.preventDropOnDocument,x=void 0===w||w,O=t.noClick,j=void 0!==O&&O,F=t.noKeyboard,S=void 0!==F&&F,P=t.noDrag,A=void 0!==P&&P,E=t.noDragEventsBubbling,k=void 0!==E&&E,C=ie.useRef(null),_=ie.useRef(null),T=fe(ie.useReducer(me,he),2),M=T[0],R=T[1],z=M.isFocused,L=M.isFileDialogActive,B=M.draggedFiles;ie.useEffect(function(){return window.addEventListener("focus",e,!1),function(){window.removeEventListener("focus",e,!1)}},[_,L,D]);function I(e){C.current&&C.current.contains(e.target)||(e.preventDefault(),N.current=[])}var K=ie.useCallback(function(e){C.current&&C.current.isEqualNode(e.target)&&(32!==e.keyCode&&13!==e.keyCode||(e.preventDefault(),n()))},[C,_]),W=ie.useCallback(function(){R({type:"focus"})},[]),G=ie.useCallback(function(){R({type:"blur"})},[]),q=ie.useCallback(function(){j||(!function(e){var n=0<arguments.length&&void 0!==e?e:window.navigator.userAgent;return function(e){return-1!==e.indexOf("MSIE")||-1!==e.indexOf("Trident/")}(n)||function(e){return-1!==e.indexOf("Edge/")}(n)}()?n():setTimeout(n,0))},[_,j]),N=ie.useRef([]);ie.useEffect(function(){return x&&(document.addEventListener("dragover",ge,!1),document.addEventListener("drop",I,!1)),function(){x&&(document.removeEventListener("dragover",ge),document.removeEventListener("drop",I))}},[C,x]);function U(e){return p?null:e}function $(e){return S?null:U(e)}function H(e){return A?null:U(e)}var J=ie.useCallback(function(n){n.preventDefault(),n.persist(),Y(n),-1===N.current.indexOf(n.target)&&(N.current=[].concat(le(N.current),[n.target])),ye(n)&&Promise.resolve(i(n)).then(function(e){ve(n)&&!k||(R({draggedFiles:e,isDragActive:!0,type:"setDraggedFiles"}),v&&v(n))})},[i,v,k]),Q=ie.useCallback(function(e){if(e.preventDefault(),e.persist(),Y(e),e.dataTransfer)try{e.dataTransfer.dropEffect="copy"}catch(e){}return ye(e)&&g&&g(e),!1},[g,k]),V=ie.useCallback(function(n){n.preventDefault(),n.persist(),Y(n);var e=N.current.filter(function(e){return e!==n.target&&C.current&&C.current.contains(e)});0<(N.current=e).length||(R({isDragActive:!1,type:"setDraggedFiles",draggedFiles:[]}),ye(n)&&y&&y(n))},[C,y,k]),X=ie.useCallback(function(r){r.preventDefault(),r.persist(),Y(r),N.current=[],R({type:"reset"}),ye(r)&&Promise.resolve(i(r)).then(function(e){if(!ve(r)||k){var n=[],t=[];e.forEach(function(e){pe(e,u)&&de(e,a,l)?n.push(e):t.push(e)}),!d&&1<n.length&&t.push.apply(t,le(n.splice(0))),R({acceptedFiles:n,rejectedFiles:t,type:"setFiles"}),b&&b(n,t,r),0<t.length&&m&&m(t,r),0<n.length&&h&&h(n,r)}})},[d,u,l,a,i,b,h,m,k]),Y=function(e){k&&e.stopPropagation()},Z=ie.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onKeyDown,o=e.onFocus,i=e.onBlur,u=e.onClick,c=e.onDragEnter,a=e.onDragOver,f=e.onDragLeave,l=e.onDrop,s=ae(e,["refKey","onKeyDown","onFocus","onBlur","onClick","onDragEnter","onDragOver","onDragLeave","onDrop"]);return ce(ue({onKeyDown:$(be(r,K)),onFocus:$(be(o,W)),onBlur:$(be(i,G)),onClick:U(be(u,q)),onDragEnter:H(be(c,J)),onDragOver:H(be(a,Q)),onDragLeave:H(be(f,V)),onDrop:H(be(l,X))},t,C),p||S?{}:{tabIndex:0},{},s)}},[C,K,W,G,q,J,Q,V,X,S,A,p]),ee=ie.useCallback(function(e){e.stopPropagation()},[]),ne=ie.useMemo(function(){return function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,r=e.onChange,o=e.onClick,i=ae(e,["refKey","onChange","onClick"]);return ce({},ue({accept:u,multiple:d,type:"file",style:{display:"none"},onChange:U(be(r,X)),onClick:U(be(o,ee)),autoComplete:"off",tabIndex:-1},t,_),{},i)}},[_,u,d,X,p]),te=B.length,re=d||te<=1,oe=0<te&&function(e,n,t,r){return e.every(function(e){return pe(e,n)&&de(e,t,r)})}(B,u,a,l);return ce({},M,{isDragAccept:oe,isDragReject:0<te&&(!oe||!re),isFocused:z&&!p,getRootProps:Z,getInputProps:ne,rootRef:C,inputRef:_,open:U(n)})}function me(e,n){switch(n.type){case"focus":return ce({},e,{isFocused:!0});case"blur":return ce({},e,{isFocused:!1});case"openDialog":return ce({},e,{isFileDialogActive:!0});case"closeDialog":return ce({},e,{isFileDialogActive:!1});case"setDraggedFiles":var t=n.isDragActive;return ce({},e,{draggedFiles:n.draggedFiles,isDragActive:t});case"setFiles":return ce({},e,{acceptedFiles:n.acceptedFiles,rejectedFiles:n.rejectedFiles});case"reset":return ce({},e,{isFileDialogActive:!1,isDragActive:!1,draggedFiles:[]});default:return e}}e.default=x,e.useDropzone=O,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvZmlsZS1zZWxlY3Rvci9kaXN0L2VzNS9maWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtc2VsZWN0b3IvZGlzdC9lczUvZmlsZS1zZWxlY3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcbiIsImV4cG9ydCB2YXIgQ09NTU9OX01JTUVfVFlQRVMgPSBuZXcgTWFwKFtcbiAgICBbJ2F2aScsICd2aWRlby9hdmknXSxcbiAgICBbJ2dpZicsICdpbWFnZS9naWYnXSxcbiAgICBbJ2ljbycsICdpbWFnZS94LWljb24nXSxcbiAgICBbJ2pwZWcnLCAnaW1hZ2UvanBlZyddLFxuICAgIFsnanBnJywgJ2ltYWdlL2pwZWcnXSxcbiAgICBbJ21rdicsICd2aWRlby94LW1hdHJvc2thJ10sXG4gICAgWydtb3YnLCAndmlkZW8vcXVpY2t0aW1lJ10sXG4gICAgWydtcDQnLCAndmlkZW8vbXA0J10sXG4gICAgWydwZGYnLCAnYXBwbGljYXRpb24vcGRmJ10sXG4gICAgWydwbmcnLCAnaW1hZ2UvcG5nJ10sXG4gICAgWyd6aXAnLCAnYXBwbGljYXRpb24vemlwJ10sXG4gICAgWydkb2MnLCAnYXBwbGljYXRpb24vbXN3b3JkJ10sXG4gICAgWydkb2N4JywgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50J11cbl0pO1xuZXhwb3J0IGZ1bmN0aW9uIHRvRmlsZVdpdGhQYXRoKGZpbGUsIHBhdGgpIHtcbiAgICB2YXIgZiA9IHdpdGhNaW1lVHlwZShmaWxlKTtcbiAgICBpZiAodHlwZW9mIGYucGF0aCAhPT0gJ3N0cmluZycpIHsgLy8gb24gZWxlY3Ryb24sIHBhdGggaXMgYWxyZWFkeSBzZXQgdG8gdGhlIGFic29sdXRlIHBhdGhcbiAgICAgICAgdmFyIHdlYmtpdFJlbGF0aXZlUGF0aCA9IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgJ3BhdGgnLCB7XG4gICAgICAgICAgICB2YWx1ZTogdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBwYXRoXG4gICAgICAgICAgICAgICAgLy8gSWYgPGlucHV0IHdlYmtpdGRpcmVjdG9yeT4gaXMgc2V0LFxuICAgICAgICAgICAgICAgIC8vIHRoZSBGaWxlIHdpbGwgaGF2ZSBhIHt3ZWJraXRSZWxhdGl2ZVBhdGh9IHByb3BlcnR5XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvd2Via2l0ZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgOiB0eXBlb2Ygd2Via2l0UmVsYXRpdmVQYXRoID09PSAnc3RyaW5nJyAmJiB3ZWJraXRSZWxhdGl2ZVBhdGgubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IHdlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgICAgICAgICA6IGZpbGUubmFtZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZjtcbn1cbmZ1bmN0aW9uIHdpdGhNaW1lVHlwZShmaWxlKSB7XG4gICAgdmFyIG5hbWUgPSBmaWxlLm5hbWU7XG4gICAgdmFyIGhhc0V4dGVuc2lvbiA9IG5hbWUgJiYgbmFtZS5sYXN0SW5kZXhPZignLicpICE9PSAtMTtcbiAgICBpZiAoaGFzRXh0ZW5zaW9uICYmICFmaWxlLnR5cGUpIHtcbiAgICAgICAgdmFyIGV4dCA9IG5hbWUuc3BsaXQoJy4nKVxuICAgICAgICAgICAgLnBvcCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciB0eXBlID0gQ09NTU9OX01JTUVfVFlQRVMuZ2V0KGV4dCk7XG4gICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmlsZSwgJ3R5cGUnLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHR5cGUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbGU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLmpzLm1hcCIsImltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB0b0ZpbGVXaXRoUGF0aCB9IGZyb20gJy4vZmlsZSc7XG52YXIgRklMRVNfVE9fSUdOT1JFID0gW1xuICAgIC8vIFRodW1ibmFpbCBjYWNoZSBmaWxlcyBmb3IgbWFjT1MgYW5kIFdpbmRvd3NcbiAgICAnLkRTX1N0b3JlJyxcbiAgICAnVGh1bWJzLmRiJyAvLyBXaW5kb3dzXG5dO1xuLyoqXG4gKiBDb252ZXJ0IGEgRHJhZ0V2ZW50J3MgRGF0YVRyYXNmZXIgb2JqZWN0IHRvIGEgbGlzdCBvZiBGaWxlIG9iamVjdHNcbiAqIE5PVEU6IElmIHNvbWUgb2YgdGhlIGl0ZW1zIGFyZSBmb2xkZXJzLFxuICogZXZlcnl0aGluZyB3aWxsIGJlIGZsYXR0ZW5lZCBhbmQgcGxhY2VkIGluIHRoZSBzYW1lIGxpc3QgYnV0IHRoZSBwYXRocyB3aWxsIGJlIGtlcHQgYXMgYSB7cGF0aH0gcHJvcGVydHkuXG4gKiBAcGFyYW0gZXZ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXZlbnQoZXZ0KSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGlzRHJhZ0V2dChldnQpICYmIGV2dC5kYXRhVHJhbnNmZXJcbiAgICAgICAgICAgICAgICAgICAgPyBnZXREYXRhVHJhbnNmZXJGaWxlcyhldnQuZGF0YVRyYW5zZmVyLCBldnQudHlwZSlcbiAgICAgICAgICAgICAgICAgICAgOiBnZXRJbnB1dEZpbGVzKGV2dCldO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzRHJhZ0V2dCh2YWx1ZSkge1xuICAgIHJldHVybiAhIXZhbHVlLmRhdGFUcmFuc2Zlcjtcbn1cbmZ1bmN0aW9uIGdldElucHV0RmlsZXMoZXZ0KSB7XG4gICAgdmFyIGZpbGVzID0gaXNJbnB1dChldnQudGFyZ2V0KVxuICAgICAgICA/IGV2dC50YXJnZXQuZmlsZXNcbiAgICAgICAgICAgID8gZnJvbUxpc3QoZXZ0LnRhcmdldC5maWxlcylcbiAgICAgICAgICAgIDogW11cbiAgICAgICAgOiBbXTtcbiAgICByZXR1cm4gZmlsZXMubWFwKGZ1bmN0aW9uIChmaWxlKSB7IHJldHVybiB0b0ZpbGVXaXRoUGF0aChmaWxlKTsgfSk7XG59XG5mdW5jdGlvbiBpc0lucHV0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RGF0YVRyYW5zZmVyRmlsZXMoZHQsIHR5cGUpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGl0ZW1zLCBmaWxlcztcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWR0Lml0ZW1zKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBmcm9tTGlzdChkdC5pdGVtcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0ua2luZCA9PT0gJ2ZpbGUnOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RuZC5odG1sI2RuZGV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSAnZHJhZ3N0YXJ0JyBhbmQgJ2Ryb3AnIGhhcyBhY2Nlc3MgdG8gdGhlIGRhdGEgKHNvdXJjZSBub2RlKVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gJ2Ryb3AnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgaXRlbXNdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UuYWxsKGl0ZW1zLm1hcCh0b0ZpbGVQcm9taXNlcykpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGZpbGVzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbm9JZ25vcmVkRmlsZXMoZmxhdHRlbihmaWxlcykpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCBub0lnbm9yZWRGaWxlcyhmcm9tTGlzdChkdC5maWxlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGZpbGUpIHsgcmV0dXJuIHRvRmlsZVdpdGhQYXRoKGZpbGUpOyB9KSldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIG5vSWdub3JlZEZpbGVzKGZpbGVzKSB7XG4gICAgcmV0dXJuIGZpbGVzLmZpbHRlcihmdW5jdGlvbiAoZmlsZSkgeyByZXR1cm4gRklMRVNfVE9fSUdOT1JFLmluZGV4T2YoZmlsZS5uYW1lKSA9PT0gLTE7IH0pO1xufVxuLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IEFycmF5LmZyb20oKVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvZnJvbSNCcm93c2VyX2NvbXBhdGliaWxpdHlcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlTGlzdFxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlckl0ZW1MaXN0XG5mdW5jdGlvbiBmcm9tTGlzdChpdGVtcykge1xuICAgIHZhciBmaWxlcyA9IFtdO1xuICAgIC8vIHRzbGludDpkaXNhYmxlOiBwcmVmZXItZm9yLW9mXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmlsZSA9IGl0ZW1zW2ldO1xuICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZXM7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRGF0YVRyYW5zZmVySXRlbVxuZnVuY3Rpb24gdG9GaWxlUHJvbWlzZXMoaXRlbSkge1xuICAgIGlmICh0eXBlb2YgaXRlbS53ZWJraXRHZXRBc0VudHJ5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBmcm9tRGF0YVRyYW5zZmVySXRlbShpdGVtKTtcbiAgICB9XG4gICAgdmFyIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgLy8gU2FmYXJpIHN1cHBvcnRzIGRyb3BwaW5nIGFuIGltYWdlIG5vZGUgZnJvbSBhIGRpZmZlcmVudCB3aW5kb3cgYW5kIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmdcbiAgICAvLyB0aGUgRGF0YVRyYW5zZmVySXRlbS5nZXRBc0ZpbGUoKSBBUElcbiAgICAvLyBOT1RFOiBGaWxlU3lzdGVtRW50cnkuZmlsZSgpIHRocm93cyBpZiB0cnlpbmcgdG8gZ2V0IHRoZSBmaWxlXG4gICAgaWYgKGVudHJ5ICYmIGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIHJldHVybiBmcm9tRGlyRW50cnkoZW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbURhdGFUcmFuc2Zlckl0ZW0oaXRlbSk7XG59XG5mdW5jdGlvbiBmbGF0dGVuKGl0ZW1zKSB7XG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBmaWxlcykgeyByZXR1cm4gdHNsaWJfMS5fX3NwcmVhZChhY2MsIChBcnJheS5pc0FycmF5KGZpbGVzKSA/IGZsYXR0ZW4oZmlsZXMpIDogW2ZpbGVzXSkpOyB9LCBbXSk7XG59XG5mdW5jdGlvbiBmcm9tRGF0YVRyYW5zZmVySXRlbShpdGVtKSB7XG4gICAgdmFyIGZpbGUgPSBpdGVtLmdldEFzRmlsZSgpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoaXRlbSArIFwiIGlzIG5vdCBhIEZpbGVcIik7XG4gICAgfVxuICAgIHZhciBmd3AgPSB0b0ZpbGVXaXRoUGF0aChmaWxlKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZ3cCk7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbUVudHJ5XG5mdW5jdGlvbiBmcm9tRW50cnkoZW50cnkpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZW50cnkuaXNEaXJlY3RvcnkgPyBmcm9tRGlyRW50cnkoZW50cnkpIDogZnJvbUZpbGVFbnRyeShlbnRyeSldO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnlcbmZ1bmN0aW9uIGZyb21EaXJFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWFkZXIgPSBlbnRyeS5jcmVhdGVSZWFkZXIoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiByZWFkRW50cmllcygpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5L2NyZWF0ZVJlYWRlclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXIvcmVhZEVudHJpZXNcbiAgICAgICAgICAgIHJlYWRlci5yZWFkRW50cmllcyhmdW5jdGlvbiAoYmF0Y2gpIHsgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlcywgZXJyXzEsIGl0ZW1zO1xuICAgICAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhYmF0Y2gubGVuZ3RoKSByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLmFsbChlbnRyaWVzKV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycl8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszIC8qYnJlYWsqLywgNl07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBQcm9taXNlLmFsbChiYXRjaC5tYXAoZnJvbUVudHJ5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKGl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSByZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEVudHJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7IH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlYWRFbnRyaWVzKCk7XG4gICAgfSk7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbUZpbGVFbnRyeVxuZnVuY3Rpb24gZnJvbUZpbGVFbnRyeShlbnRyeSkge1xuICAgIHJldHVybiB0c2xpYl8xLl9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmd3AgPSB0b0ZpbGVXaXRoUGF0aChmaWxlLCBlbnRyeS5mdWxsUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZ3cCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsZS1zZWxlY3Rvci5qcy5tYXAiLCJtb2R1bGUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUpe2lmKHJbZV0pcmV0dXJuIHJbZV0uZXhwb3J0czt2YXIgbz1yW2VdPXtpOmUsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxuKSxvLmw9ITAsby5leHBvcnRzfXZhciByPXt9O3JldHVybiBuLm09dCxuLmM9cixuLmQ9ZnVuY3Rpb24odCxyLGUpe24ubyh0LHIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6ZX0pfSxuLm49ZnVuY3Rpb24odCl7dmFyIHI9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChyLFwiYVwiLHIpLHJ9LG4ubz1mdW5jdGlvbih0LG4pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKX0sbi5wPVwiXCIsbihuLnM9MTMpfShbZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi41LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz0hcig0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzMikoXCJ3a3NcIiksbz1yKDkpLGk9cigwKS5TeW1ib2wsdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF18fChlW3RdPXUmJmlbdF18fCh1P2k6bykoXCJTeW1ib2wuXCIrdCkpfSkuc3RvcmU9ZX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1yKDIpLGk9cig4KSx1PXIoMjIpLGM9cigxMCksZj1mdW5jdGlvbih0LG4scil7dmFyIGEscyxwLGwsdj10JmYuRix5PXQmZi5HLGg9dCZmLlMsZD10JmYuUCx4PXQmZi5CLGc9eT9lOmg/ZVtuXXx8KGVbbl09e30pOihlW25dfHx7fSkucHJvdG90eXBlLG09eT9vOm9bbl18fChvW25dPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO3kmJihyPW4pO2ZvcihhIGluIHIpcz0hdiYmZyYmdm9pZCAwIT09Z1thXSxwPShzP2c6cilbYV0sbD14JiZzP2MocCxlKTpkJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwP2MoRnVuY3Rpb24uY2FsbCxwKTpwLGcmJnUoZyxhLHAsdCZmLlUpLG1bYV0hPXAmJmkobSxhLGwpLGQmJmJbYV0hPXAmJihiW2FdPXApfTtlLmNvcmU9byxmLkY9MSxmLkc9MixmLlM9NCxmLlA9OCxmLkI9MTYsZi5XPTMyLGYuVT02NCxmLlI9MTI4LHQuZXhwb3J0cz1mfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxNiksbz1yKDIxKTt0LmV4cG9ydHM9cigzKT9mdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZih0LG4sbygxLHIpKX06ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0W25dPXIsdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9MCxlPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ltYm9sKFwiLmNvbmNhdCh2b2lkIDA9PT10P1wiXCI6dCxcIilfXCIsKCsrcitlKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7aWYoZSh0KSx2b2lkIDA9PT1uKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwobixyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLGUpe3JldHVybiB0LmNhbGwobixyLGUpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsZSxvKXtyZXR1cm4gdC5jYWxsKG4scixlLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShuLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT10KXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIit0KTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI4KSxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP28oZSh0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO24uX19lc01vZHVsZT0hMCxuLmRlZmF1bHQ9ZnVuY3Rpb24odCxuKXtpZih0JiZuKXt2YXIgcj1BcnJheS5pc0FycmF5KG4pP246bi5zcGxpdChcIixcIiksZT10Lm5hbWV8fFwiXCIsbz10LnR5cGV8fFwiXCIsaT1vLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik7cmV0dXJuIHIuc29tZShmdW5jdGlvbih0KXt2YXIgbj10LnRyaW0oKTtyZXR1cm5cIi5cIj09PW4uY2hhckF0KDApP2UudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChuLnRvTG93ZXJDYXNlKCkpOm4uZW5kc1dpdGgoXCIvKlwiKT9pPT09bi5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpOm89PT1ufSl9cmV0dXJuITB9LHIoMTQpLHIoMzQpfSxmdW5jdGlvbih0LG4scil7cigxNSksdC5leHBvcnRzPXIoMikuQXJyYXkuc29tZX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNyksbz1yKDI1KSgzKTtlKGUuUCtlLkYqIXIoMzMpKFtdLnNvbWUsITApLFwiQXJyYXlcIix7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTcpLG89cigxOCksaT1yKDIwKSx1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuLmY9cigzKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxuLHIpe2lmKGUodCksbj1pKG4sITApLGUociksbyl0cnl7cmV0dXJuIHUodCxuLHIpfWNhdGNoKHQpe31pZihcImdldFwiaW4gcnx8XCJzZXRcImluIHIpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIHImJih0W25dPXIudmFsdWUpLHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWUodCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDMpJiYhcig0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigxOSkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDApLmRvY3VtZW50LGk9ZShvKSYmZShvLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighZSh0KSlyZXR1cm4gdDt2YXIgcixvO2lmKG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudmFsdWVPZikmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbztpZighbiYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIWUobz1yLmNhbGwodCkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOm59fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1yKDgpLGk9cigyMyksdT1yKDkpKFwic3JjXCIpLGM9RnVuY3Rpb24udG9TdHJpbmcsZj0oXCJcIitjKS5zcGxpdChcInRvU3RyaW5nXCIpO3IoMikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYy5jYWxsKHQpfSwodC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGMpe3ZhciBhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI7YSYmKGkocixcIm5hbWVcIil8fG8ocixcIm5hbWVcIixuKSksdFtuXSE9PXImJihhJiYoaShyLHUpfHxvKHIsdSx0W25dP1wiXCIrdFtuXTpmLmpvaW4oU3RyaW5nKG4pKSkpLHQ9PT1lP3Rbbl09cjpjP3Rbbl0/dFtuXT1yOm8odCxuLHIpOihkZWxldGUgdFtuXSxvKHQsbixyKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLFwidG9TdHJpbmdcIixmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJnRoaXNbdV18fGMuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LG4pe3ZhciByPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiByLmNhbGwodCxuKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTApLG89cigyNiksaT1yKDI3KSx1PXIoMTIpLGM9cigyOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIHI9MT09dCxmPTI9PXQsYT0zPT10LHM9ND09dCxwPTY9PXQsbD01PT10fHxwLHY9bnx8YztyZXR1cm4gZnVuY3Rpb24obixjLHkpe2Zvcih2YXIgaCxkLHg9aShuKSxnPW8oeCksbT1lKGMseSwzKSxiPXUoZy5sZW5ndGgpLF89MCx3PXI/dihuLGIpOmY/dihuLDApOnZvaWQgMDtiPl87XysrKWlmKChsfHxfIGluIGcpJiYoaD1nW19dLGQ9bShoLF8seCksdCkpaWYocil3W19dPWQ7ZWxzZSBpZihkKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBoO2Nhc2UgNjpyZXR1cm4gXztjYXNlIDI6dy5wdXNoKGgpfWVsc2UgaWYocylyZXR1cm4hMTtyZXR1cm4gcD8tMTphfHxzP3M6d319fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09ZSh0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChlKHQpKX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9TWF0aC5jZWlsLGU9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9lOnIpKHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcoZSh0KSkobil9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoMzEpLGk9cig2KShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBvKHQpJiYobj10LmNvbnN0cnVjdG9yLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG58fG4hPT1BcnJheSYmIW8obi5wcm90b3R5cGUpfHwobj12b2lkIDApLGUobikmJm51bGw9PT0obj1uW2ldKSYmKG49dm9pZCAwKSksdm9pZCAwPT09bj9BcnJheTpufX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNSk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVyblwiQXJyYXlcIj09ZSh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89ZVtcIl9fY29yZS1qc19zaGFyZWRfX1wiXXx8KGVbXCJfX2NvcmUtanNfc2hhcmVkX19cIl09e30pO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gb1t0XXx8KG9bdF09e30pfX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuISF0JiZlKGZ1bmN0aW9uKCl7bj90LmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6dC5jYWxsKG51bGwpfSl9fSxmdW5jdGlvbih0LG4scil7cigzNSksdC5leHBvcnRzPXIoMikuU3RyaW5nLmVuZHNXaXRofSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cig3KSxvPXIoMTIpLGk9cigzNiksdT1cIlwiLmVuZHNXaXRoO2UoZS5QK2UuRipyKDM4KShcImVuZHNXaXRoXCIpLFwiU3RyaW5nXCIse2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBuPWkodGhpcyx0LFwiZW5kc1dpdGhcIikscj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlPW8obi5sZW5ndGgpLGM9dm9pZCAwPT09cj9lOk1hdGgubWluKG8ociksZSksZj1TdHJpbmcodCk7cmV0dXJuIHU/dS5jYWxsKG4sZixjKTpuLnNsaWNlKGMtZi5sZW5ndGgsYyk9PT1mfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzNyksbz1yKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUobikpdGhyb3cgVHlwZUVycm9yKFwiU3RyaW5nI1wiK3IrXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO3JldHVybiBTdHJpbmcobyh0KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoNSksaT1yKDYpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBlKHQpJiYodm9pZCAwIT09KG49dFtpXSk/ISFuOlwiUmVnRXhwXCI9PW8odCkpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNikoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49Ly4vO3RyeXtcIi8uL1wiW3RdKG4pfWNhdGNoKHIpe3RyeXtyZXR1cm4gbltlXT0hMSwhXCIvLi9cIlt0XShuKX1jYXRjaCh0KXt9fXJldHVybiEwfX1dKTsiLCJpbXBvcnQgYWNjZXB0cyBmcm9tICdhdHRyLWFjY2VwdCdcblxuLy8gRmlyZWZveCB2ZXJzaW9ucyBwcmlvciB0byA1MyByZXR1cm4gYSBib2d1cyBNSU1FIHR5cGUgZm9yIGV2ZXJ5IGZpbGUgZHJhZywgc28gZHJhZ292ZXJzIHdpdGhcbi8vIHRoYXQgTUlNRSB0eXBlIHdpbGwgYWx3YXlzIGJlIGFjY2VwdGVkXG5leHBvcnQgZnVuY3Rpb24gZmlsZUFjY2VwdGVkKGZpbGUsIGFjY2VwdCkge1xuICByZXR1cm4gZmlsZS50eXBlID09PSAnYXBwbGljYXRpb24veC1tb3otZmlsZScgfHwgYWNjZXB0cyhmaWxlLCBhY2NlcHQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWxlTWF0Y2hTaXplKGZpbGUsIG1heFNpemUsIG1pblNpemUpIHtcbiAgcmV0dXJuIGZpbGUuc2l6ZSA8PSBtYXhTaXplICYmIGZpbGUuc2l6ZSA+PSBtaW5TaXplXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxGaWxlc0FjY2VwdGVkKGZpbGVzLCBhY2NlcHQsIG1heFNpemUsIG1pblNpemUpIHtcbiAgcmV0dXJuIGZpbGVzLmV2ZXJ5KGZpbGUgPT4ge1xuICAgIHJldHVybiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSAmJiBmaWxlTWF0Y2hTaXplKGZpbGUsIG1heFNpemUsIG1pblNpemUpXG4gIH0pXG59XG5cbi8vIFJlYWN0J3Mgc3ludGhldGljIGV2ZW50cyBoYXMgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQsXG4vLyBidXQgdG8gcmVtYWluIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBsaWJzIChQcmVhY3QpIGZhbGwgYmFja1xuLy8gdG8gY2hlY2sgZXZlbnQuY2FuY2VsQnViYmxlXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wYWdhdGlvblN0b3BwZWQoZXZlbnQpIHtcbiAgaWYgKHR5cGVvZiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpXG4gIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZXZlbnQuY2FuY2VsQnViYmxlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V2dFdpdGhGaWxlcyhldmVudCkge1xuICBpZiAoIWV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgIHJldHVybiAhIWV2ZW50LnRhcmdldCAmJiAhIWV2ZW50LnRhcmdldC5maWxlc1xuICB9XG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9EYXRhVHJhbnNmZXIvdHlwZXNcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxfRHJhZ19hbmRfRHJvcF9BUEkvUmVjb21tZW5kZWRfZHJhZ190eXBlcyNmaWxlXG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc29tZS5jYWxsKFxuICAgIGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcyxcbiAgICB0eXBlID0+IHR5cGUgPT09ICdGaWxlcycgfHwgdHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzS2luZEZpbGUoaXRlbSkge1xuICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwgJiYgaXRlbS5raW5kID09PSAnZmlsZSdcbn1cblxuLy8gYWxsb3cgdGhlIGVudGlyZSBkb2N1bWVudCB0byBiZSBhIGRyYWcgdGFyZ2V0XG5leHBvcnQgZnVuY3Rpb24gb25Eb2N1bWVudERyYWdPdmVyKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbn1cblxuZnVuY3Rpb24gaXNJZSh1c2VyQWdlbnQpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgIT09IC0xIHx8IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpICE9PSAtMVxufVxuXG5mdW5jdGlvbiBpc0VkZ2UodXNlckFnZW50KSB7XG4gIHJldHVybiB1c2VyQWdlbnQuaW5kZXhPZignRWRnZS8nKSAhPT0gLTFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSWVPckVkZ2UodXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgcmV0dXJuIGlzSWUodXNlckFnZW50KSB8fCBpc0VkZ2UodXNlckFnZW50KVxufVxuXG4vKipcbiAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBjb21wb3NlIGV2ZW50IGhhbmRsZXJzXG4gKiBUaGV5IGFyZSBleGVjdXRlZCBpbiBvcmRlciB1bnRpbCBvbmUgb2YgdGhlbSBjYWxscyBgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKWAuXG4gKiBOb3RlIHRoYXQgdGhlIGNoZWNrIGlzIGRvbmUgb24gdGhlIGZpcnN0IGludm9rZSB0b28sXG4gKiBtZWFuaW5nIHRoYXQgaWYgcHJvcGFnYXRpb24gd2FzIHN0b3BwZWQgYmVmb3JlIGludm9raW5nIHRoZSBmbnMsXG4gKiBubyBoYW5kbGVycyB3aWxsIGJlIGV4ZWN1dGVkLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZucyB0aGUgZXZlbnQgaGFubGRlciBmdW5jdGlvbnNcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSB0aGUgZXZlbnQgaGFuZGxlciB0byBhZGQgdG8gYW4gZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZUV2ZW50SGFuZGxlcnMoLi4uZm5zKSB7XG4gIHJldHVybiAoZXZlbnQsIC4uLmFyZ3MpID0+XG4gICAgZm5zLnNvbWUoZm4gPT4ge1xuICAgICAgaWYgKCFpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudCkgJiYgZm4pIHtcbiAgICAgICAgZm4oZXZlbnQsIC4uLmFyZ3MpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNQcm9wYWdhdGlvblN0b3BwZWQoZXZlbnQpXG4gICAgfSlcbn1cbiIsIi8qIGVzbGludCBwcmVmZXItdGVtcGxhdGU6IDAgKi9cbmltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICBGcmFnbWVudCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVkdWNlcixcbiAgdXNlUmVmXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAnZmlsZS1zZWxlY3RvcidcbmltcG9ydCB7XG4gIGFsbEZpbGVzQWNjZXB0ZWQsXG4gIGNvbXBvc2VFdmVudEhhbmRsZXJzLFxuICBmaWxlQWNjZXB0ZWQsXG4gIGZpbGVNYXRjaFNpemUsXG4gIGlzRXZ0V2l0aEZpbGVzLFxuICBpc0llT3JFZGdlLFxuICBpc1Byb3BhZ2F0aW9uU3RvcHBlZCxcbiAgb25Eb2N1bWVudERyYWdPdmVyXG59IGZyb20gJy4vdXRpbHMvaW5kZXgnXG5cbi8qKlxuICogQ29udmVuaWVuY2Ugd3JhcHBlciBjb21wb25lbnQgZm9yIHRoZSBgdXNlRHJvcHpvbmVgIGhvb2tcbiAqXG4gKiBgYGBqc3hcbiAqIDxEcm9wem9uZT5cbiAqICAgeyh7Z2V0Um9vdFByb3BzLCBnZXRJbnB1dFByb3BzfSkgPT4gKFxuICogICAgIDxkaXYgey4uLmdldFJvb3RQcm9wcygpfT5cbiAqICAgICAgIDxpbnB1dCB7Li4uZ2V0SW5wdXRQcm9wcygpfSAvPlxuICogICAgICAgPHA+RHJhZyAnbicgZHJvcCBzb21lIGZpbGVzIGhlcmUsIG9yIGNsaWNrIHRvIHNlbGVjdCBmaWxlczwvcD5cbiAqICAgICA8L2Rpdj5cbiAqICAgKX1cbiAqIDwvRHJvcHpvbmU+XG4gKiBgYGBcbiAqL1xuY29uc3QgRHJvcHpvbmUgPSBmb3J3YXJkUmVmKCh7IGNoaWxkcmVuLCAuLi5wYXJhbXMgfSwgcmVmKSA9PiB7XG4gIGNvbnN0IHsgb3BlbiwgLi4ucHJvcHMgfSA9IHVzZURyb3B6b25lKHBhcmFtcylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYoeyBvcGVuIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVmID09PSAnb2JqZWN0JyAmJiByZWYgIT09IG51bGwpIHtcbiAgICAgIHJlZi5jdXJyZW50ID0geyBvcGVuIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVmKG51bGwpXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZWYgPT09ICdvYmplY3QnICYmIHJlZiAhPT0gbnVsbCkge1xuICAgICAgICByZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtyZWZdKVxuXG4gIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IHJlYWN0LXN0eWxlZ3VpZGlzdCBjYW5ub3QgY3JlYXRlIGRvY3MgaWYgd2UgZG9uJ3QgcmV0dXJuIGEganN4IGVsZW1lbnRcbiAgcmV0dXJuIDxGcmFnbWVudD57Y2hpbGRyZW4oeyAuLi5wcm9wcywgb3BlbiB9KX08L0ZyYWdtZW50PlxufSlcblxuRHJvcHpvbmUuZGlzcGxheU5hbWUgPSAnRHJvcHpvbmUnXG5Ecm9wem9uZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBSZW5kZXIgZnVuY3Rpb24gdGhhdCBleHBvc2VzIHRoZSBkcm9wem9uZSBzdGF0ZSBhbmQgcHJvcCBnZXR0ZXIgZm5zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1zLmdldFJvb3RQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIHRoZSByb290IGRyb3AgY29udGFpbmVyIHlvdSByZW5kZXJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1zLmdldElucHV0UHJvcHMgUmV0dXJucyB0aGUgcHJvcHMgeW91IHNob3VsZCBhcHBseSB0byBoaWRkZW4gZmlsZSBpbnB1dCB5b3UgcmVuZGVyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtcy5vcGVuIE9wZW4gdGhlIG5hdGl2ZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2dcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNGb2N1c2VkIERyb3B6b25lIGFyZWEgaXMgaW4gZm9jdXNcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNGaWxlRGlhbG9nQWN0aXZlIEZpbGUgZGlhbG9nIGlzIG9wZW5lZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pc0RyYWdBY3RpdmUgQWN0aXZlIGRyYWcgaXMgaW4gcHJvZ3Jlc3NcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaXNEcmFnQWNjZXB0IERyYWdnZWQgZmlsZXMgYXJlIGFjY2VwdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1zLmlzRHJhZ1JlamVjdCBTb21lIGRyYWdnZWQgZmlsZXMgYXJlIHJlamVjdGVkXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBwYXJhbXMuZHJhZ2dlZEZpbGVzIEZpbGVzIGluIGFjdGl2ZSBkcmFnXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBwYXJhbXMuYWNjZXB0ZWRGaWxlcyBBY2NlcHRlZCBmaWxlc1xuICAgKiBAcGFyYW0ge0ZpbGVbXX0gcGFyYW1zLnJlamVjdGVkRmlsZXMgUmVqZWN0ZWQgZmlsZXNcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogU2V0IGFjY2VwdGVkIGZpbGUgdHlwZXMuXG4gICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vb2tvbmV0L2F0dHItYWNjZXB0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKiBLZWVwIGluIG1pbmQgdGhhdCBtaW1lIHR5cGUgZGV0ZXJtaW5hdGlvbiBpcyBub3QgcmVsaWFibGUgYWNyb3NzIHBsYXRmb3Jtcy4gQ1NWIGZpbGVzLFxuICAgKiBmb3IgZXhhbXBsZSwgYXJlIHJlcG9ydGVkIGFzIHRleHQvcGxhaW4gdW5kZXIgbWFjT1MgYnV0IGFzIGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCB1bmRlclxuICAgKiBXaW5kb3dzLiBJbiBzb21lIGNhc2VzIHRoZXJlIG1pZ2h0IG5vdCBiZSBhIG1pbWUgdHlwZSBzZXQgYXQgYWxsLlxuICAgKiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvMjc2XG4gICAqL1xuICBhY2NlcHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpXSksXG5cbiAgLyoqXG4gICAqIEFsbG93IGRyYWcgJ24nIGRyb3AgKG9yIHNlbGVjdGlvbiBmcm9tIHRoZSBmaWxlIGRpYWxvZykgb2YgbXVsdGlwbGUgZmlsZXNcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgZmFsc2UsIGFsbG93IGRyb3BwZWQgaXRlbXMgdG8gdGFrZSBvdmVyIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93XG4gICAqL1xuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBkaXNhYmxlcyBjbGljayB0byBvcGVuIHRoZSBuYXRpdmUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nXG4gICAqL1xuICBub0NsaWNrOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgZGlzYWJsZXMgU1BBQ0UvRU5URVIgdG8gb3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZy5cbiAgICogTm90ZSB0aGF0IGl0IGFsc28gc3RvcHMgdHJhY2tpbmcgdGhlIGZvY3VzIHN0YXRlLlxuICAgKi9cbiAgbm9LZXlib2FyZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGRpc2FibGVzIGRyYWcgJ24nIGRyb3BcbiAgICovXG4gIG5vRHJhZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHN0b3BzIGRyYWcgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50c1xuICAgKi9cbiAgbm9EcmFnRXZlbnRzQnViYmxpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtaW5TaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtYXhTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSB0aGUgZHJvcHpvbmVcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVXNlIHRoaXMgdG8gcHJvdmlkZSBhIGN1c3RvbSBmaWxlIGFnZ3JlZ2F0b3JcbiAgICpcbiAgICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICAgKi9cbiAgZ2V0RmlsZXNGcm9tRXZlbnQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiBjbG9zaW5nIHRoZSBmaWxlIGRpYWxvZyB3aXRoIG5vIHNlbGVjdGlvblxuICAgKi9cbiAgb25GaWxlRGlhbG9nQ2FuY2VsOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcmFnZW50ZXJgIGV2ZW50IG9jY3Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtEcmFnRXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkRyYWdFbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJhZ2xlYXZlYCBldmVudCBvY2N1cnNcbiAgICpcbiAgICogQHBhcmFtIHtEcmFnRXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkRyYWdMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENiIGZvciB3aGVuIHRoZSBgZHJhZ292ZXJgIGV2ZW50IG9jY3Vyc1xuICAgKlxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uRHJhZ092ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyb3BgIGV2ZW50IG9jY3Vycy5cbiAgICogTm90ZSB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciB0aGUgYGdldEZpbGVzRnJvbUV2ZW50YCBjYWxsYmFjayBpcyBkb25lLlxuICAgKlxuICAgKiBGaWxlcyBhcmUgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQgYmFzZWQgb24gdGhlIGBhY2NlcHRgLCBgbXVsdGlwbGVgLCBgbWluU2l6ZWAgYW5kIGBtYXhTaXplYCBwcm9wcy5cbiAgICogYGFjY2VwdGAgbXVzdCBiZSBhIHZhbGlkIFtNSU1FIHR5cGVdKGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWwpIGFjY29yZGluZyB0byBbaW5wdXQgZWxlbWVudCBzcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy53My5vcmcvd2lraS9IVE1ML0VsZW1lbnRzL2lucHV0L2ZpbGUpIG9yIGEgdmFsaWQgZmlsZSBleHRlbnNpb24uXG4gICAqIElmIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGZhbHNlIGFuZCBhZGRpdGlvbmFsIGZpbGVzIGFyZSBkcm9wcHBlZCxcbiAgICogYWxsIGZpbGVzIGJlc2lkZXMgdGhlIGZpcnN0IHdpbGwgYmUgcmVqZWN0ZWQuXG4gICAqIEFueSBmaWxlIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBzaXplIGluIHRoZSBbYG1pblNpemVgLCBgbWF4U2l6ZWBdIHJhbmdlLCB3aWxsIGJlIHJlamVjdGVkIGFzIHdlbGwuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgYG9uRHJvcGAgY2FsbGJhY2sgd2lsbCBhbHdheXMgYmUgaW52b2tlZCByZWdhcmRsZXNzIGlmIHRoZSBkcm9wcGVkIGZpbGVzIHdlcmUgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQuXG4gICAqIElmIHlvdSdkIGxpa2UgdG8gcmVhY3QgdG8gYSBzcGVjaWZpYyBzY2VuYXJpbywgdXNlIHRoZSBgb25Ecm9wQWNjZXB0ZWRgL2BvbkRyb3BSZWplY3RlZGAgcHJvcHMuXG4gICAqXG4gICAqIGBvbkRyb3BgIHdpbGwgcHJvdmlkZSB5b3Ugd2l0aCBhbiBhcnJheSBvZiBbRmlsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGUpIG9iamVjdHMgd2hpY2ggeW91IGNhbiB0aGVuIHByb2Nlc3MgYW5kIHNlbmQgdG8gYSBzZXJ2ZXIuXG4gICAqIEZvciBleGFtcGxlLCB3aXRoIFtTdXBlckFnZW50XShodHRwczovL2dpdGh1Yi5jb20vdmlzaW9ubWVkaWEvc3VwZXJhZ2VudCkgYXMgYSBodHRwL2FqYXggbGlicmFyeTpcbiAgICpcbiAgICogYGBganNcbiAgICogZnVuY3Rpb24gb25Ecm9wKGFjY2VwdGVkRmlsZXMpIHtcbiAgICogICBjb25zdCByZXEgPSByZXF1ZXN0LnBvc3QoJy91cGxvYWQnKVxuICAgKiAgIGFjY2VwdGVkRmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICogICAgIHJlcS5hdHRhY2goZmlsZS5uYW1lLCBmaWxlKVxuICAgKiAgIH0pXG4gICAqICAgcmVxLmVuZChjYWxsYmFjaylcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtGaWxlW119IGFjY2VwdGVkRmlsZXNcbiAgICogQHBhcmFtIHtGaWxlW119IHJlamVjdGVkRmlsZXNcbiAgICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICAgKi9cbiAgb25Ecm9wOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2IgZm9yIHdoZW4gdGhlIGBkcm9wYCBldmVudCBvY2N1cnMuXG4gICAqIE5vdGUgdGhhdCBpZiBubyBmaWxlcyBhcmUgYWNjZXB0ZWQsIHRoaXMgY2FsbGJhY2sgaXMgbm90IGludm9rZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7RmlsZVtdfSBmaWxlc1xuICAgKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudFxuICAgKi9cbiAgb25Ecm9wQWNjZXB0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYiBmb3Igd2hlbiB0aGUgYGRyb3BgIGV2ZW50IG9jY3Vycy5cbiAgICogTm90ZSB0aGF0IGlmIG5vIGZpbGVzIGFyZSByZWplY3RlZCwgdGhpcyBjYWxsYmFjayBpcyBub3QgaW52b2tlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3RbXX0gZmlsZXNcbiAgICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnRcbiAgICovXG4gIG9uRHJvcFJlamVjdGVkOiBQcm9wVHlwZXMuZnVuY1xufVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wem9uZVxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIGZvciB0aGUgYGRyYWdlbnRlcmAsXG4gKiBgZHJhZ292ZXJgIGFuZCBgZHJhZ2xlYXZlYCBldmVudHMuXG4gKiBJdCBpcyBub3QgaW52b2tlZCBpZiB0aGUgaXRlbXMgYXJlIG5vdCBmaWxlcyAoc3VjaCBhcyBsaW5rLCB0ZXh0LCBldGMuKS5cbiAqXG4gKiBAY2FsbGJhY2sgZHJhZ0NiXG4gKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnRcbiAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIGZvciB0aGUgYGRyb3BgIG9yIGlucHV0IGNoYW5nZSBldmVudC5cbiAqIEl0IGlzIG5vdCBpbnZva2VkIGlmIHRoZSBpdGVtcyBhcmUgbm90IGZpbGVzIChzdWNoIGFzIGxpbmssIHRleHQsIGV0Yy4pLlxuICpcbiAqIEBjYWxsYmFjayBkcm9wQ2JcbiAqIEBwYXJhbSB7RmlsZVtdfSBhY2NlcHRlZEZpbGVzIExpc3Qgb2YgYWNjZXB0ZWQgZmlsZXNcbiAqIEBwYXJhbSB7RmlsZVtdfSByZWplY3RlZEZpbGVzIExpc3Qgb2YgcmVqZWN0ZWQgZmlsZXNcbiAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50IEEgZHJhZyBldmVudCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQgKGlmIGZpbGVzIHdlcmUgc2VsZWN0ZWQgdmlhIHRoZSBmaWxlIGRpYWxvZylcbiAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIGZvciB0aGUgYGRyb3BgIG9yIGlucHV0IGNoYW5nZSBldmVudC5cbiAqIEl0IGlzIG5vdCBpbnZva2VkIGlmIHRoZSBpdGVtcyBhcmUgZmlsZXMgKHN1Y2ggYXMgbGluaywgdGV4dCwgZXRjLikuXG4gKlxuICogQGNhbGxiYWNrIGRyb3BBY2NlcHRlZENiXG4gKiBAcGFyYW0ge0ZpbGVbXX0gZmlsZXMgTGlzdCBvZiBhY2NlcHRlZCBmaWxlcyB0aGF0IG1lZXQgdGhlIGdpdmVuIGNyaXRlcmlhXG4gKiAoYGFjY2VwdGAsIGBtdWx0aXBsZWAsIGBtaW5TaXplYCwgYG1heFNpemVgKVxuICogQHBhcmFtIHsoRHJhZ0V2ZW50fEV2ZW50KX0gZXZlbnQgQSBkcmFnIGV2ZW50IG9yIGlucHV0IGNoYW5nZSBldmVudCAoaWYgZmlsZXMgd2VyZSBzZWxlY3RlZCB2aWEgdGhlIGZpbGUgZGlhbG9nKVxuICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgZm9yIHRoZSBgZHJvcGAgb3IgaW5wdXQgY2hhbmdlIGV2ZW50LlxuICpcbiAqIEBjYWxsYmFjayBkcm9wUmVqZWN0ZWRDYlxuICogQHBhcmFtIHtGaWxlW119IGZpbGVzIExpc3Qgb2YgcmVqZWN0ZWQgZmlsZXMgdGhhdCBkbyBub3QgbWVldCB0aGUgZ2l2ZW4gY3JpdGVyaWFcbiAqIChgYWNjZXB0YCwgYG11bHRpcGxlYCwgYG1pblNpemVgLCBgbWF4U2l6ZWApXG4gKiBAcGFyYW0geyhEcmFnRXZlbnR8RXZlbnQpfSBldmVudCBBIGRyYWcgZXZlbnQgb3IgaW5wdXQgY2hhbmdlIGV2ZW50IChpZiBmaWxlcyB3ZXJlIHNlbGVjdGVkIHZpYSB0aGUgZmlsZSBkaWFsb2cpXG4gKi9cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCBhZ2dyZWdhdGUgZmlsZXMsXG4gKiBpbiBhIGFzeW5jaHJvbm91cyBmYXNoaW9uLCBmcm9tIGRyYWcgb3IgaW5wdXQgY2hhbmdlIGV2ZW50cy5cbiAqXG4gKiBAY2FsbGJhY2sgZ2V0RmlsZXNGcm9tRXZlbnRcbiAqIEBwYXJhbSB7KERyYWdFdmVudHxFdmVudCl9IGV2ZW50IEEgZHJhZyBldmVudCBvciBpbnB1dCBjaGFuZ2UgZXZlbnQgKGlmIGZpbGVzIHdlcmUgc2VsZWN0ZWQgdmlhIHRoZSBmaWxlIGRpYWxvZylcbiAqIEByZXR1cm5zIHsoRmlsZVtdfFByb21pc2U8RmlsZVtdPil9XG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3Qgd2l0aCB0aGUgY3VycmVudCBkcm9wem9uZSBzdGF0ZSBhbmQgc29tZSBoZWxwZXIgZnVuY3Rpb25zLlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERyb3B6b25lU3RhdGVcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldFJvb3RQcm9wcyBSZXR1cm5zIHRoZSBwcm9wcyB5b3Ugc2hvdWxkIGFwcGx5IHRvIHRoZSByb290IGRyb3AgY29udGFpbmVyIHlvdSByZW5kZXJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldElucHV0UHJvcHMgUmV0dXJucyB0aGUgcHJvcHMgeW91IHNob3VsZCBhcHBseSB0byBoaWRkZW4gZmlsZSBpbnB1dCB5b3UgcmVuZGVyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBvcGVuIE9wZW4gdGhlIG5hdGl2ZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2dcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNGb2N1c2VkIERyb3B6b25lIGFyZWEgaXMgaW4gZm9jdXNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNGaWxlRGlhbG9nQWN0aXZlIEZpbGUgZGlhbG9nIGlzIG9wZW5lZFxuICogQHByb3BlcnR5IHtib29sZWFufSBpc0RyYWdBY3RpdmUgQWN0aXZlIGRyYWcgaXMgaW4gcHJvZ3Jlc3NcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNEcmFnQWNjZXB0IERyYWdnZWQgZmlsZXMgYXJlIGFjY2VwdGVkXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzRHJhZ1JlamVjdCBTb21lIGRyYWdnZWQgZmlsZXMgYXJlIHJlamVjdGVkXG4gKiBAcHJvcGVydHkge0ZpbGVbXX0gZHJhZ2dlZEZpbGVzIEZpbGVzIGluIGFjdGl2ZSBkcmFnXG4gKiBAcHJvcGVydHkge0ZpbGVbXX0gYWNjZXB0ZWRGaWxlcyBBY2NlcHRlZCBmaWxlc1xuICogQHByb3BlcnR5IHtGaWxlW119IHJlamVjdGVkRmlsZXMgUmVqZWN0ZWQgZmlsZXNcbiAqL1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGlzRm9jdXNlZDogZmFsc2UsXG4gIGlzRmlsZURpYWxvZ0FjdGl2ZTogZmFsc2UsXG4gIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gIGlzRHJhZ0FjY2VwdDogZmFsc2UsXG4gIGlzRHJhZ1JlamVjdDogZmFsc2UsXG4gIGRyYWdnZWRGaWxlczogW10sXG4gIGFjY2VwdGVkRmlsZXM6IFtdLFxuICByZWplY3RlZEZpbGVzOiBbXVxufVxuXG4vKipcbiAqIEEgUmVhY3QgaG9vayB0aGF0IGNyZWF0ZXMgYSBkcmFnICduJyBkcm9wIGFyZWEuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBNeURyb3B6b25lKHByb3BzKSB7XG4gKiAgIGNvbnN0IHtnZXRSb290UHJvcHMsIGdldElucHV0UHJvcHN9ID0gdXNlRHJvcHpvbmUoe1xuICogICAgIG9uRHJvcDogYWNjZXB0ZWRGaWxlcyA9PiB7XG4gKiAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgRmlsZSBvYmplY3RzLCBlLmcuIHVwbG9hZCB0byBzb21lIHNlcnZlclxuICogICAgIH1cbiAqICAgfSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdiB7Li4uZ2V0Um9vdFByb3BzKCl9PlxuICogICAgICAgPGlucHV0IHsuLi5nZXRJbnB1dFByb3BzKCl9IC8+XG4gKiAgICAgICA8cD5EcmFnIGFuZCBkcm9wIHNvbWUgZmlsZXMgaGVyZSwgb3IgY2xpY2sgdG8gc2VsZWN0IGZpbGVzPC9wPlxuICogICAgIDwvZGl2PlxuICogICApXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZnVuY3Rpb24gdXNlRHJvcHpvbmVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbcHJvcHMuYWNjZXB0XSBTZXQgYWNjZXB0ZWQgZmlsZSB0eXBlcy5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vb2tvbmV0L2F0dHItYWNjZXB0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICogS2VlcCBpbiBtaW5kIHRoYXQgbWltZSB0eXBlIGRldGVybWluYXRpb24gaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBwbGF0Zm9ybXMuIENTViBmaWxlcyxcbiAqIGZvciBleGFtcGxlLCBhcmUgcmVwb3J0ZWQgYXMgdGV4dC9wbGFpbiB1bmRlciBtYWNPUyBidXQgYXMgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIHVuZGVyXG4gKiBXaW5kb3dzLiBJbiBzb21lIGNhc2VzIHRoZXJlIG1pZ2h0IG5vdCBiZSBhIG1pbWUgdHlwZSBzZXQgYXQgYWxsLlxuICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtZHJvcHpvbmUvcmVhY3QtZHJvcHpvbmUvaXNzdWVzLzI3NlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubXVsdGlwbGU9dHJ1ZV0gQWxsb3cgZHJhZyAnbicgZHJvcCAob3Igc2VsZWN0aW9uIGZyb20gdGhlIGZpbGUgZGlhbG9nKSBvZiBtdWx0aXBsZSBmaWxlc1xuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMucHJldmVudERyb3BPbkRvY3VtZW50PXRydWVdIElmIGZhbHNlLCBhbGxvdyBkcm9wcGVkIGl0ZW1zIHRvIHRha2Ugb3ZlciB0aGUgY3VycmVudCBicm93c2VyIHdpbmRvd1xuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9DbGljaz1mYWxzZV0gSWYgdHJ1ZSwgZGlzYWJsZXMgY2xpY2sgdG8gb3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZ1xuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9LZXlib2FyZD1mYWxzZV0gSWYgdHJ1ZSwgZGlzYWJsZXMgU1BBQ0UvRU5URVIgdG8gb3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZy5cbiAqIE5vdGUgdGhhdCBpdCBhbHNvIHN0b3BzIHRyYWNraW5nIHRoZSBmb2N1cyBzdGF0ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLm5vRHJhZz1mYWxzZV0gSWYgdHJ1ZSwgZGlzYWJsZXMgZHJhZyAnbicgZHJvcFxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMubm9EcmFnRXZlbnRzQnViYmxpbmc9ZmFsc2VdIElmIHRydWUsIHN0b3BzIGRyYWcgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50c1xuICogQHBhcmFtIHtudW1iZXJ9IFtwcm9wcy5taW5TaXplPTBdIE1pbmltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJvcHMubWF4U2l6ZT1JbmZpbml0eV0gTWF4aW11bSBmaWxlIHNpemUgKGluIGJ5dGVzKVxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMuZGlzYWJsZWQ9ZmFsc2VdIEVuYWJsZS9kaXNhYmxlIHRoZSBkcm9wem9uZVxuICogQHBhcmFtIHtnZXRGaWxlc0Zyb21FdmVudH0gW3Byb3BzLmdldEZpbGVzRnJvbUV2ZW50XSBVc2UgdGhpcyB0byBwcm92aWRlIGEgY3VzdG9tIGZpbGUgYWdncmVnYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BzLm9uRmlsZURpYWxvZ0NhbmNlbF0gQ2IgZm9yIHdoZW4gY2xvc2luZyB0aGUgZmlsZSBkaWFsb2cgd2l0aCBubyBzZWxlY3Rpb25cbiAqIEBwYXJhbSB7ZHJhZ0NifSBbcHJvcHMub25EcmFnRW50ZXJdIENiIGZvciB3aGVuIHRoZSBgZHJhZ2VudGVyYCBldmVudCBvY2N1cnMuXG4gKiBAcGFyYW0ge2RyYWdDYn0gW3Byb3BzLm9uRHJhZ0xlYXZlXSBDYiBmb3Igd2hlbiB0aGUgYGRyYWdsZWF2ZWAgZXZlbnQgb2NjdXJzXG4gKiBAcGFyYW0ge2RyYWdDYn0gW3Byb3BzLm9uRHJhZ092ZXJdIENiIGZvciB3aGVuIHRoZSBgZHJhZ292ZXJgIGV2ZW50IG9jY3Vyc1xuICogQHBhcmFtIHtkcm9wQ2J9IFtwcm9wcy5vbkRyb3BdIENiIGZvciB3aGVuIHRoZSBgZHJvcGAgZXZlbnQgb2NjdXJzLlxuICogTm90ZSB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciB0aGUgYGdldEZpbGVzRnJvbUV2ZW50YCBjYWxsYmFjayBpcyBkb25lLlxuICpcbiAqIEZpbGVzIGFyZSBhY2NlcHRlZCBvciByZWplY3RlZCBiYXNlZCBvbiB0aGUgYGFjY2VwdGAsIGBtdWx0aXBsZWAsIGBtaW5TaXplYCBhbmQgYG1heFNpemVgIHByb3BzLlxuICogYGFjY2VwdGAgbXVzdCBiZSBhIHZhbGlkIFtNSU1FIHR5cGVdKGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWwpIGFjY29yZGluZyB0byBbaW5wdXQgZWxlbWVudCBzcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy53My5vcmcvd2lraS9IVE1ML0VsZW1lbnRzL2lucHV0L2ZpbGUpIG9yIGEgdmFsaWQgZmlsZSBleHRlbnNpb24uXG4gKiBJZiBgbXVsdGlwbGVgIGlzIHNldCB0byBmYWxzZSBhbmQgYWRkaXRpb25hbCBmaWxlcyBhcmUgZHJvcHBwZWQsXG4gKiBhbGwgZmlsZXMgYmVzaWRlcyB0aGUgZmlyc3Qgd2lsbCBiZSByZWplY3RlZC5cbiAqIEFueSBmaWxlIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBzaXplIGluIHRoZSBbYG1pblNpemVgLCBgbWF4U2l6ZWBdIHJhbmdlLCB3aWxsIGJlIHJlamVjdGVkIGFzIHdlbGwuXG4gKlxuICogTm90ZSB0aGF0IHRoZSBgb25Ecm9wYCBjYWxsYmFjayB3aWxsIGFsd2F5cyBiZSBpbnZva2VkIHJlZ2FyZGxlc3MgaWYgdGhlIGRyb3BwZWQgZmlsZXMgd2VyZSBhY2NlcHRlZCBvciByZWplY3RlZC5cbiAqIElmIHlvdSdkIGxpa2UgdG8gcmVhY3QgdG8gYSBzcGVjaWZpYyBzY2VuYXJpbywgdXNlIHRoZSBgb25Ecm9wQWNjZXB0ZWRgL2BvbkRyb3BSZWplY3RlZGAgcHJvcHMuXG4gKlxuICogYG9uRHJvcGAgd2lsbCBwcm92aWRlIHlvdSB3aXRoIGFuIGFycmF5IG9mIFtGaWxlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZSkgb2JqZWN0cyB3aGljaCB5b3UgY2FuIHRoZW4gcHJvY2VzcyBhbmQgc2VuZCB0byBhIHNlcnZlci5cbiAqIEZvciBleGFtcGxlLCB3aXRoIFtTdXBlckFnZW50XShodHRwczovL2dpdGh1Yi5jb20vdmlzaW9ubWVkaWEvc3VwZXJhZ2VudCkgYXMgYSBodHRwL2FqYXggbGlicmFyeTpcbiAqXG4gKiBgYGBqc1xuICogZnVuY3Rpb24gb25Ecm9wKGFjY2VwdGVkRmlsZXMpIHtcbiAqICAgY29uc3QgcmVxID0gcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgYWNjZXB0ZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICogICAgIHJlcS5hdHRhY2goZmlsZS5uYW1lLCBmaWxlKVxuICogICB9KVxuICogICByZXEuZW5kKGNhbGxiYWNrKVxuICogfVxuICogYGBgXG4gKiBAcGFyYW0ge2Ryb3BBY2NlcHRlZENifSBbcHJvcHMub25Ecm9wQWNjZXB0ZWRdXG4gKiBAcGFyYW0ge2Ryb3BSZWplY3RlZENifSBbcHJvcHMub25Ecm9wUmVqZWN0ZWRdXG4gKlxuICogQHJldHVybnMge0Ryb3B6b25lU3RhdGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEcm9wem9uZSh7XG4gIGFjY2VwdCxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgZ2V0RmlsZXNGcm9tRXZlbnQgPSBmcm9tRXZlbnQsXG4gIG1heFNpemUgPSBJbmZpbml0eSxcbiAgbWluU2l6ZSA9IDAsXG4gIG11bHRpcGxlID0gdHJ1ZSxcbiAgb25EcmFnRW50ZXIsXG4gIG9uRHJhZ0xlYXZlLFxuICBvbkRyYWdPdmVyLFxuICBvbkRyb3AsXG4gIG9uRHJvcEFjY2VwdGVkLFxuICBvbkRyb3BSZWplY3RlZCxcbiAgb25GaWxlRGlhbG9nQ2FuY2VsLFxuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgPSB0cnVlLFxuICBub0NsaWNrID0gZmFsc2UsXG4gIG5vS2V5Ym9hcmQgPSBmYWxzZSxcbiAgbm9EcmFnID0gZmFsc2UsXG4gIG5vRHJhZ0V2ZW50c0J1YmJsaW5nID0gZmFsc2Vcbn0gPSB7fSkge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKG51bGwpXG5cbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSlcbiAgY29uc3QgeyBpc0ZvY3VzZWQsIGlzRmlsZURpYWxvZ0FjdGl2ZSwgZHJhZ2dlZEZpbGVzIH0gPSBzdGF0ZVxuXG4gIC8vIEZuIGZvciBvcGVuaW5nIHRoZSBmaWxlIGRpYWxvZyBwcm9ncmFtbWF0aWNhbGx5XG4gIGNvbnN0IG9wZW5GaWxlRGlhbG9nID0gKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdvcGVuRGlhbG9nJyB9KVxuICAgICAgaW5wdXRSZWYuY3VycmVudC52YWx1ZSA9IG51bGxcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuY2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBmaWxlIGRpYWxvZyBhY3RpdmUgc3RhdGUgd2hlbiB0aGUgd2luZG93IGlzIGZvY3VzZWQgb25cbiAgY29uc3Qgb25XaW5kb3dGb2N1cyA9ICgpID0+IHtcbiAgICAvLyBFeGVjdXRlIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGZpbGUgZGlhbG9nIGlzIG9wZW5lZCBpbiB0aGUgYnJvd3NlclxuICAgIGlmIChpc0ZpbGVEaWFsb2dBY3RpdmUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IGlucHV0UmVmLmN1cnJlbnRcblxuICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdjbG9zZURpYWxvZycgfSlcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvbkZpbGVEaWFsb2dDYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgb25GaWxlRGlhbG9nQ2FuY2VsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDMwMClcbiAgICB9XG4gIH1cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzLCBmYWxzZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgb25XaW5kb3dGb2N1cywgZmFsc2UpXG4gICAgfVxuICB9LCBbaW5wdXRSZWYsIGlzRmlsZURpYWxvZ0FjdGl2ZSwgb25GaWxlRGlhbG9nQ2FuY2VsXSlcblxuICAvLyBDYiB0byBvcGVuIHRoZSBmaWxlIGRpYWxvZyB3aGVuIFNQQUNFL0VOVEVSIG9jY3VycyBvbiB0aGUgZHJvcHpvbmVcbiAgY29uc3Qgb25LZXlEb3duQ2IgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICAvLyBJZ25vcmUga2V5Ym9hcmQgZXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBET00gdHJlZVxuICAgICAgaWYgKCFyb290UmVmLmN1cnJlbnQgfHwgIXJvb3RSZWYuY3VycmVudC5pc0VxdWFsTm9kZShldmVudC50YXJnZXQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMzIgfHwgZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBvcGVuRmlsZURpYWxvZygpXG4gICAgICB9XG4gICAgfSxcbiAgICBbcm9vdFJlZiwgaW5wdXRSZWZdXG4gIClcblxuICAvLyBVcGRhdGUgZm9jdXMgc3RhdGUgZm9yIHRoZSBkcm9wem9uZVxuICBjb25zdCBvbkZvY3VzQ2IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnZm9jdXMnIH0pXG4gIH0sIFtdKVxuICBjb25zdCBvbkJsdXJDYiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdibHVyJyB9KVxuICB9LCBbXSlcblxuICAvLyBDYiB0byBvcGVuIHRoZSBmaWxlIGRpYWxvZyB3aGVuIGNsaWNrIG9jY3VycyBvbiB0aGUgZHJvcHpvbmVcbiAgY29uc3Qgb25DbGlja0NiID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChub0NsaWNrKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJbiBJRTExL0VkZ2UgdGhlIGZpbGUtYnJvd3NlciBkaWFsb2cgaXMgYmxvY2tpbmcsIHRoZXJlZm9yZSwgdXNlIHNldFRpbWVvdXQoKVxuICAgIC8vIHRvIGVuc3VyZSBSZWFjdCBjYW4gaGFuZGxlIHN0YXRlIGNoYW5nZXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvNDUwXG4gICAgaWYgKGlzSWVPckVkZ2UoKSkge1xuICAgICAgc2V0VGltZW91dChvcGVuRmlsZURpYWxvZywgMClcbiAgICB9IGVsc2Uge1xuICAgICAgb3BlbkZpbGVEaWFsb2coKVxuICAgIH1cbiAgfSwgW2lucHV0UmVmLCBub0NsaWNrXSlcblxuICBjb25zdCBkcmFnVGFyZ2V0c1JlZiA9IHVzZVJlZihbXSlcbiAgY29uc3Qgb25Eb2N1bWVudERyb3AgPSBldmVudCA9PiB7XG4gICAgaWYgKHJvb3RSZWYuY3VycmVudCAmJiByb290UmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgLy8gSWYgd2UgaW50ZXJjZXB0ZWQgYW4gZXZlbnQgZm9yIG91ciBpbnN0YW5jZSwgbGV0IGl0IHByb3BhZ2F0ZSBkb3duIHRvIHRoZSBpbnN0YW5jZSdzIG9uRHJvcCBoYW5kbGVyXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQgPSBbXVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRG9jdW1lbnREcmFnT3ZlciwgZmFsc2UpXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgb25Eb2N1bWVudERyb3AsIGZhbHNlKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25Eb2N1bWVudERyYWdPdmVyKVxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgb25Eb2N1bWVudERyb3ApXG4gICAgICB9XG4gICAgfVxuICB9LCBbcm9vdFJlZiwgcHJldmVudERyb3BPbkRvY3VtZW50XSlcblxuICBjb25zdCBvbkRyYWdFbnRlckNiID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgLy8gUGVyc2lzdCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0aGUgZXZlbnQgbGF0ZXIgYWZ0ZXIgZ2V0RmlsZXNGcm9tRXZlbnQoKSBpcyBkb25lXG4gICAgICBldmVudC5wZXJzaXN0KClcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudClcblxuICAgICAgLy8gQ291bnQgdGhlIGRyb3B6b25lIGFuZCBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgZW50ZXJlZC5cbiAgICAgIGlmIChkcmFnVGFyZ2V0c1JlZi5jdXJyZW50LmluZGV4T2YoZXZlbnQudGFyZ2V0KSA9PT0gLTEpIHtcbiAgICAgICAgZHJhZ1RhcmdldHNSZWYuY3VycmVudCA9IFsuLi5kcmFnVGFyZ2V0c1JlZi5jdXJyZW50LCBldmVudC50YXJnZXRdXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0V2dFdpdGhGaWxlcyhldmVudCkpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGdldEZpbGVzRnJvbUV2ZW50KGV2ZW50KSkudGhlbihkcmFnZ2VkRmlsZXMgPT4ge1xuICAgICAgICAgIGlmIChpc1Byb3BhZ2F0aW9uU3RvcHBlZChldmVudCkgJiYgIW5vRHJhZ0V2ZW50c0J1YmJsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICBkcmFnZ2VkRmlsZXMsXG4gICAgICAgICAgICBpc0RyYWdBY3RpdmU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiAnc2V0RHJhZ2dlZEZpbGVzJ1xuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAob25EcmFnRW50ZXIpIHtcbiAgICAgICAgICAgIG9uRHJhZ0VudGVyKGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtnZXRGaWxlc0Zyb21FdmVudCwgb25EcmFnRW50ZXIsIG5vRHJhZ0V2ZW50c0J1YmJsaW5nXVxuICApXG5cbiAgY29uc3Qgb25EcmFnT3ZlckNiID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgZXZlbnQucGVyc2lzdCgpXG4gICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQpXG5cbiAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5J1xuICAgICAgICB9IGNhdGNoIHt9IC8qIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHkgKi9cbiAgICAgIH1cblxuICAgICAgaWYgKGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSAmJiBvbkRyYWdPdmVyKSB7XG4gICAgICAgIG9uRHJhZ092ZXIoZXZlbnQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG4gICAgW29uRHJhZ092ZXIsIG5vRHJhZ0V2ZW50c0J1YmJsaW5nXVxuICApXG5cbiAgY29uc3Qgb25EcmFnTGVhdmVDYiA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIGV2ZW50LnBlcnNpc3QoKVxuICAgICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50KVxuXG4gICAgICAvLyBPbmx5IGRlYWN0aXZhdGUgb25jZSB0aGUgZHJvcHpvbmUgYW5kIGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gbGVmdFxuICAgICAgY29uc3QgdGFyZ2V0cyA9IGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQuZmlsdGVyKFxuICAgICAgICB0YXJnZXQgPT4gdGFyZ2V0ICE9PSBldmVudC50YXJnZXQgJiYgcm9vdFJlZi5jdXJyZW50ICYmIHJvb3RSZWYuY3VycmVudC5jb250YWlucyh0YXJnZXQpXG4gICAgICApXG4gICAgICBkcmFnVGFyZ2V0c1JlZi5jdXJyZW50ID0gdGFyZ2V0c1xuICAgICAgaWYgKHRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICB0eXBlOiAnc2V0RHJhZ2dlZEZpbGVzJyxcbiAgICAgICAgZHJhZ2dlZEZpbGVzOiBbXVxuICAgICAgfSlcblxuICAgICAgaWYgKGlzRXZ0V2l0aEZpbGVzKGV2ZW50KSAmJiBvbkRyYWdMZWF2ZSkge1xuICAgICAgICBvbkRyYWdMZWF2ZShldmVudClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyb290UmVmLCBvbkRyYWdMZWF2ZSwgbm9EcmFnRXZlbnRzQnViYmxpbmddXG4gIClcblxuICBjb25zdCBvbkRyb3BDYiA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIC8vIFBlcnNpc3QgaGVyZSBiZWNhdXNlIHdlIG5lZWQgdGhlIGV2ZW50IGxhdGVyIGFmdGVyIGdldEZpbGVzRnJvbUV2ZW50KCkgaXMgZG9uZVxuICAgICAgZXZlbnQucGVyc2lzdCgpXG4gICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQpXG5cbiAgICAgIGRyYWdUYXJnZXRzUmVmLmN1cnJlbnQgPSBbXVxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pXG5cbiAgICAgIGlmIChpc0V2dFdpdGhGaWxlcyhldmVudCkpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGdldEZpbGVzRnJvbUV2ZW50KGV2ZW50KSkudGhlbihmaWxlcyA9PiB7XG4gICAgICAgICAgaWYgKGlzUHJvcGFnYXRpb25TdG9wcGVkKGV2ZW50KSAmJiAhbm9EcmFnRXZlbnRzQnViYmxpbmcpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGFjY2VwdGVkRmlsZXMgPSBbXVxuICAgICAgICAgIGNvbnN0IHJlamVjdGVkRmlsZXMgPSBbXVxuXG4gICAgICAgICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgICAgIGlmIChmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSAmJiBmaWxlTWF0Y2hTaXplKGZpbGUsIG1heFNpemUsIG1pblNpemUpKSB7XG4gICAgICAgICAgICAgIGFjY2VwdGVkRmlsZXMucHVzaChmaWxlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVqZWN0ZWRGaWxlcy5wdXNoKGZpbGUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmICghbXVsdGlwbGUgJiYgYWNjZXB0ZWRGaWxlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZWplY3RlZEZpbGVzLnB1c2goLi4uYWNjZXB0ZWRGaWxlcy5zcGxpY2UoMCkpIC8vIFJlamVjdCBldmVyeXRoaW5nIGFuZCBlbXB0eSBhY2NlcHRlZCBmaWxlc1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXMsXG4gICAgICAgICAgICByZWplY3RlZEZpbGVzLFxuICAgICAgICAgICAgdHlwZTogJ3NldEZpbGVzJ1xuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAob25Ecm9wKSB7XG4gICAgICAgICAgICBvbkRyb3AoYWNjZXB0ZWRGaWxlcywgcmVqZWN0ZWRGaWxlcywgZXZlbnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlamVjdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BSZWplY3RlZCkge1xuICAgICAgICAgICAgb25Ecm9wUmVqZWN0ZWQocmVqZWN0ZWRGaWxlcywgZXZlbnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BBY2NlcHRlZCkge1xuICAgICAgICAgICAgb25Ecm9wQWNjZXB0ZWQoYWNjZXB0ZWRGaWxlcywgZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgbXVsdGlwbGUsXG4gICAgICBhY2NlcHQsXG4gICAgICBtaW5TaXplLFxuICAgICAgbWF4U2l6ZSxcbiAgICAgIGdldEZpbGVzRnJvbUV2ZW50LFxuICAgICAgb25Ecm9wLFxuICAgICAgb25Ecm9wQWNjZXB0ZWQsXG4gICAgICBvbkRyb3BSZWplY3RlZCxcbiAgICAgIG5vRHJhZ0V2ZW50c0J1YmJsaW5nXG4gICAgXVxuICApXG5cbiAgY29uc3QgY29tcG9zZUhhbmRsZXIgPSBmbiA9PiB7XG4gICAgcmV0dXJuIGRpc2FibGVkID8gbnVsbCA6IGZuXG4gIH1cblxuICBjb25zdCBjb21wb3NlS2V5Ym9hcmRIYW5kbGVyID0gZm4gPT4ge1xuICAgIHJldHVybiBub0tleWJvYXJkID8gbnVsbCA6IGNvbXBvc2VIYW5kbGVyKGZuKVxuICB9XG5cbiAgY29uc3QgY29tcG9zZURyYWdIYW5kbGVyID0gZm4gPT4ge1xuICAgIHJldHVybiBub0RyYWcgPyBudWxsIDogY29tcG9zZUhhbmRsZXIoZm4pXG4gIH1cblxuICBjb25zdCBzdG9wUHJvcGFnYXRpb24gPSBldmVudCA9PiB7XG4gICAgaWYgKG5vRHJhZ0V2ZW50c0J1YmJsaW5nKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdldFJvb3RQcm9wcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHJlZktleSA9ICdyZWYnLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkRyYWdFbnRlcixcbiAgICAgIG9uRHJhZ092ZXIsXG4gICAgICBvbkRyYWdMZWF2ZSxcbiAgICAgIG9uRHJvcCxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0ge30pID0+ICh7XG4gICAgICBvbktleURvd246IGNvbXBvc2VLZXlib2FyZEhhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25LZXlEb3duLCBvbktleURvd25DYikpLFxuICAgICAgb25Gb2N1czogY29tcG9zZUtleWJvYXJkSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkZvY3VzLCBvbkZvY3VzQ2IpKSxcbiAgICAgIG9uQmx1cjogY29tcG9zZUtleWJvYXJkSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkJsdXIsIG9uQmx1ckNiKSksXG4gICAgICBvbkNsaWNrOiBjb21wb3NlSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkNsaWNrLCBvbkNsaWNrQ2IpKSxcbiAgICAgIG9uRHJhZ0VudGVyOiBjb21wb3NlRHJhZ0hhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25EcmFnRW50ZXIsIG9uRHJhZ0VudGVyQ2IpKSxcbiAgICAgIG9uRHJhZ092ZXI6IGNvbXBvc2VEcmFnSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyYWdPdmVyLCBvbkRyYWdPdmVyQ2IpKSxcbiAgICAgIG9uRHJhZ0xlYXZlOiBjb21wb3NlRHJhZ0hhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25EcmFnTGVhdmUsIG9uRHJhZ0xlYXZlQ2IpKSxcbiAgICAgIG9uRHJvcDogY29tcG9zZURyYWdIYW5kbGVyKGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRHJvcCwgb25Ecm9wQ2IpKSxcbiAgICAgIFtyZWZLZXldOiByb290UmVmLFxuICAgICAgLi4uKCFkaXNhYmxlZCAmJiAhbm9LZXlib2FyZCA/IHsgdGFiSW5kZXg6IDAgfSA6IHt9KSxcbiAgICAgIC4uLnJlc3RcbiAgICB9KSxcbiAgICBbXG4gICAgICByb290UmVmLFxuICAgICAgb25LZXlEb3duQ2IsXG4gICAgICBvbkZvY3VzQ2IsXG4gICAgICBvbkJsdXJDYixcbiAgICAgIG9uQ2xpY2tDYixcbiAgICAgIG9uRHJhZ0VudGVyQ2IsXG4gICAgICBvbkRyYWdPdmVyQ2IsXG4gICAgICBvbkRyYWdMZWF2ZUNiLFxuICAgICAgb25Ecm9wQ2IsXG4gICAgICBub0tleWJvYXJkLFxuICAgICAgbm9EcmFnLFxuICAgICAgZGlzYWJsZWRcbiAgICBdXG4gIClcblxuICBjb25zdCBvbklucHV0RWxlbWVudENsaWNrID0gdXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGdldElucHV0UHJvcHMgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7IHJlZktleSA9ICdyZWYnLCBvbkNoYW5nZSwgb25DbGljaywgLi4ucmVzdCB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XG4gICAgICAgIGFjY2VwdCxcbiAgICAgICAgbXVsdGlwbGUsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgc3R5bGU6IHsgZGlzcGxheTogJ25vbmUnIH0sXG4gICAgICAgIG9uQ2hhbmdlOiBjb21wb3NlSGFuZGxlcihjb21wb3NlRXZlbnRIYW5kbGVycyhvbkNoYW5nZSwgb25Ecm9wQ2IpKSxcbiAgICAgICAgb25DbGljazogY29tcG9zZUhhbmRsZXIoY29tcG9zZUV2ZW50SGFuZGxlcnMob25DbGljaywgb25JbnB1dEVsZW1lbnRDbGljaykpLFxuICAgICAgICBhdXRvQ29tcGxldGU6ICdvZmYnLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIFtyZWZLZXldOiBpbnB1dFJlZlxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAuLi5yZXN0XG4gICAgICB9XG4gICAgfSxcbiAgICBbaW5wdXRSZWYsIGFjY2VwdCwgbXVsdGlwbGUsIG9uRHJvcENiLCBkaXNhYmxlZF1cbiAgKVxuXG4gIGNvbnN0IGZpbGVDb3VudCA9IGRyYWdnZWRGaWxlcy5sZW5ndGhcbiAgY29uc3QgaXNNdWx0aXBsZUFsbG93ZWQgPSBtdWx0aXBsZSB8fCBmaWxlQ291bnQgPD0gMVxuICBjb25zdCBpc0RyYWdBY2NlcHQgPSBmaWxlQ291bnQgPiAwICYmIGFsbEZpbGVzQWNjZXB0ZWQoZHJhZ2dlZEZpbGVzLCBhY2NlcHQsIG1heFNpemUsIG1pblNpemUpXG4gIGNvbnN0IGlzRHJhZ1JlamVjdCA9IGZpbGVDb3VudCA+IDAgJiYgKCFpc0RyYWdBY2NlcHQgfHwgIWlzTXVsdGlwbGVBbGxvd2VkKVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgaXNEcmFnQWNjZXB0LFxuICAgIGlzRHJhZ1JlamVjdCxcbiAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZCAmJiAhZGlzYWJsZWQsXG4gICAgZ2V0Um9vdFByb3BzLFxuICAgIGdldElucHV0UHJvcHMsXG4gICAgcm9vdFJlZixcbiAgICBpbnB1dFJlZixcbiAgICBvcGVuOiBjb21wb3NlSGFuZGxlcihvcGVuRmlsZURpYWxvZylcbiAgfVxufVxuXG5mdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ2ZvY3VzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgIH1cbiAgICBjYXNlICdibHVyJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgICB9XG4gICAgY2FzZSAnb3BlbkRpYWxvZyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNGaWxlRGlhbG9nQWN0aXZlOiB0cnVlXG4gICAgICB9XG4gICAgY2FzZSAnY2xvc2VEaWFsb2cnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzRmlsZURpYWxvZ0FjdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICBjYXNlICdzZXREcmFnZ2VkRmlsZXMnOlxuICAgICAgLyogZXNsaW50IG5vLWNhc2UtZGVjbGFyYXRpb25zOiAwICovXG4gICAgICBjb25zdCB7IGlzRHJhZ0FjdGl2ZSwgZHJhZ2dlZEZpbGVzIH0gPSBhY3Rpb25cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBkcmFnZ2VkRmlsZXMsXG4gICAgICAgIGlzRHJhZ0FjdGl2ZVxuICAgICAgfVxuICAgIGNhc2UgJ3NldEZpbGVzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhY2NlcHRlZEZpbGVzOiBhY3Rpb24uYWNjZXB0ZWRGaWxlcyxcbiAgICAgICAgcmVqZWN0ZWRGaWxlczogYWN0aW9uLnJlamVjdGVkRmlsZXNcbiAgICAgIH1cbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgaXNGaWxlRGlhbG9nQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dlZEZpbGVzOiBbXVxuICAgICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGVcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwidmFsdWUiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX2dlbmVyYXRvciIsImJvZHkiLCJmIiwieSIsInQiLCJnIiwiXyIsImxhYmVsIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwidGhyb3ciLCJyZXR1cm4iLCJTeW1ib2wiLCJpdGVyYXRvciIsInRoaXMiLCJuIiwidiIsIm9wIiwiVHlwZUVycm9yIiwiY2FsbCIsInBvcCIsImxlbmd0aCIsInB1c2giLCJfX3JlYWQiLCJvIiwibSIsInIiLCJpIiwiYXIiLCJlcnJvciIsIl9fc3ByZWFkIiwiYXJndW1lbnRzIiwiY29uY2F0IiwiQ09NTU9OX01JTUVfVFlQRVMiLCJNYXAiLCJ0b0ZpbGVXaXRoUGF0aCIsImZpbGUiLCJwYXRoIiwibmFtZSIsImxhc3RJbmRleE9mIiwidHlwZSIsImV4dCIsInNwbGl0IiwidG9Mb3dlckNhc2UiLCJnZXQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndpdGhNaW1lVHlwZSIsIndlYmtpdFJlbGF0aXZlUGF0aCIsIkZJTEVTX1RPX0lHTk9SRSIsImZyb21FdmVudCIsImV2dCIsInRzbGliXzEuX19hd2FpdGVyIiwidHNsaWJfMS5fX2dlbmVyYXRvciIsIl9hIiwiZGF0YVRyYW5zZmVyIiwiaXNEcmFnRXZ0IiwiZHQiLCJpdGVtcyIsImZyb21MaXN0IiwiZmlsdGVyIiwiaXRlbSIsImtpbmQiLCJhbGwiLCJtYXAiLCJ0b0ZpbGVQcm9taXNlcyIsIm5vSWdub3JlZEZpbGVzIiwiZmxhdHRlbiIsInJlZHVjZSIsImFjYyIsImZpbGVzIiwidHNsaWJfMS5fX3NwcmVhZCIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGFUcmFuc2ZlckZpbGVzIiwiaXNJbnB1dCIsInRhcmdldCIsImdldElucHV0RmlsZXMiLCJpbmRleE9mIiwid2Via2l0R2V0QXNFbnRyeSIsImZyb21EYXRhVHJhbnNmZXJJdGVtIiwiZW50cnkiLCJpc0RpcmVjdG9yeSIsImZyb21EaXJFbnRyeSIsImdldEFzRmlsZSIsImZ3cCIsImZyb21FbnRyeSIsImZ1bGxQYXRoIiwiZXJyIiwiZnJvbUZpbGVFbnRyeSIsInJlYWRlciIsImNyZWF0ZVJlYWRlciIsImVudHJpZXMiLCJyZWFkRW50cmllcyIsIl90aGlzIiwiYmF0Y2giLCJlcnJfMSIsImV4cG9ydHMiLCJsIiwibW9kdWxlIiwid2luZG93IiwiTWF0aCIsInNlbGYiLCJGdW5jdGlvbiIsIl9fZyIsInZlcnNpb24iLCJfX2UiLCJhIiwidG9TdHJpbmciLCJzbGljZSIsInUiLCJzdG9yZSIsImMiLCJzIiwicCIsIkYiLCJHIiwiaCIsIlMiLCJkIiwieCIsIkIiLCJwcm90b3R5cGUiLCJiIiwiVSIsImNvcmUiLCJXIiwiUiIsInJhbmRvbSIsIm1pbiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwicmVwbGFjZSIsInNvbWUiLCJ0cmltIiwiY2hhckF0IiwiZW5kc1dpdGgiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ2YWx1ZU9mIiwiaW5zcGVjdFNvdXJjZSIsImpvaW4iLCJTdHJpbmciLCJoYXNPd25Qcm9wZXJ0eSIsInciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwiY29uc3RydWN0b3IiLCJmaWxlQWNjZXB0ZWQiLCJhY2NlcHQiLCJhY2NlcHRzIiwiZmlsZU1hdGNoU2l6ZSIsIm1heFNpemUiLCJtaW5TaXplIiwic2l6ZSIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwiZXZlbnQiLCJjYW5jZWxCdWJibGUiLCJpc0V2dFdpdGhGaWxlcyIsInR5cGVzIiwib25Eb2N1bWVudERyYWdPdmVyIiwicHJldmVudERlZmF1bHQiLCJjb21wb3NlRXZlbnRIYW5kbGVycyIsImZucyIsImFyZ3MiLCJmbiIsIkRyb3B6b25lIiwiZm9yd2FyZFJlZiIsInJlZiIsImNoaWxkcmVuIiwidXNlRHJvcHpvbmUiLCJvcGVuIiwicHJvcHMiLCJ1c2VFZmZlY3QiLCJfdHlwZW9mIiwiY3VycmVudCIsIlJlYWN0IiwiRnJhZ21lbnQiLCJkaXNwbGF5TmFtZSIsImluaXRpYWxTdGF0ZSIsImlzRm9jdXNlZCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImZ1bmMiLCJvbmVPZlR5cGUiLCJzdHJpbmciLCJhcnJheU9mIiwibXVsdGlwbGUiLCJib29sIiwicHJldmVudERyb3BPbkRvY3VtZW50Iiwibm9DbGljayIsIm5vS2V5Ym9hcmQiLCJub0RyYWciLCJub0RyYWdFdmVudHNCdWJibGluZyIsIm51bWJlciIsImRpc2FibGVkIiwiZ2V0RmlsZXNGcm9tRXZlbnQiLCJvbkZpbGVEaWFsb2dDYW5jZWwiLCJvbkRyYWdFbnRlciIsIm9uRHJhZ0xlYXZlIiwib25EcmFnT3ZlciIsIm9uRHJvcCIsIm9uRHJvcEFjY2VwdGVkIiwib25Ecm9wUmVqZWN0ZWQiLCJpc0ZpbGVEaWFsb2dBY3RpdmUiLCJpc0RyYWdBY3RpdmUiLCJpc0RyYWdBY2NlcHQiLCJpc0RyYWdSZWplY3QiLCJkcmFnZ2VkRmlsZXMiLCJhY2NlcHRlZEZpbGVzIiwicmVqZWN0ZWRGaWxlcyIsIm9wZW5GaWxlRGlhbG9nIiwiaW5wdXRSZWYiLCJkaXNwYXRjaCIsImNsaWNrIiwib25XaW5kb3dGb2N1cyIsInNldFRpbWVvdXQiLCJJbmZpbml0eSIsInJvb3RSZWYiLCJ1c2VSZWYiLCJ1c2VSZWR1Y2VyIiwicmVkdWNlciIsInN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbkRvY3VtZW50RHJvcCIsImNvbnRhaW5zIiwiZHJhZ1RhcmdldHNSZWYiLCJvbktleURvd25DYiIsInVzZUNhbGxiYWNrIiwiaXNFcXVhbE5vZGUiLCJrZXlDb2RlIiwib25Gb2N1c0NiIiwib25CbHVyQ2IiLCJvbkNsaWNrQ2IiLCJ1c2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJpc0llIiwiaXNFZGdlIiwiaXNJZU9yRWRnZSIsImNvbXBvc2VIYW5kbGVyIiwiY29tcG9zZUtleWJvYXJkSGFuZGxlciIsImNvbXBvc2VEcmFnSGFuZGxlciIsIm9uRHJhZ0VudGVyQ2IiLCJwZXJzaXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwib25EcmFnT3ZlckNiIiwiZHJvcEVmZmVjdCIsIm9uRHJhZ0xlYXZlQ2IiLCJ0YXJnZXRzIiwib25Ecm9wQ2IiLCJmb3JFYWNoIiwic3BsaWNlIiwiZ2V0Um9vdFByb3BzIiwidXNlTWVtbyIsInJlZktleSIsIm9uS2V5RG93biIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvbkNsaWNrIiwicmVzdCIsInRhYkluZGV4Iiwib25JbnB1dEVsZW1lbnRDbGljayIsImdldElucHV0UHJvcHMiLCJvbkNoYW5nZSIsInN0eWxlIiwiZGlzcGxheSIsImF1dG9Db21wbGV0ZSIsImZpbGVDb3VudCIsImlzTXVsdGlwbGVBbGxvd2VkIiwiZXZlcnkiLCJhbGxGaWxlc0FjY2VwdGVkIiwiYWN0aW9uIl0sIm1hcHBpbmdzIjoiNjRFQW1FTyxTQUFTQSxFQUFVQyxFQUFTQyxFQUFZQyxFQUFHQyxHQUM5QyxPQUFPLElBQVdELEVBQU5BLEdBQVVFLFNBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVUMsR0FBUyxJQUFNQyxFQUFLTixFQUFVTyxLQUFLRixJQUFXLE1BQU9HLEdBQUtMLEVBQU9LLElBQ3BGLFNBQVNDLEVBQVNKLEdBQVMsSUFBTUMsRUFBS04sRUFBaUIsTUFBRUssSUFBVyxNQUFPRyxHQUFLTCxFQUFPSyxJQUN2RixTQUFTRixFQUFLSSxHQUFVQSxFQUFPQyxLQUFPVCxFQUFRUSxFQUFPTCxPQUFTLElBQUlOLEVBQUUsU0FBVUcsR0FBV0EsRUFBUVEsRUFBT0wsU0FBV08sS0FBS1IsRUFBV0ssR0FDbklILEdBQU1OLEVBQVlBLEVBQVVhLE1BQU1oQixFQUFTQyxHQUFjLEtBQUtTLFVBSS9ELFNBQVNPLEVBQVlqQixFQUFTa0IsR0FDakMsSUFBc0dDLEVBQUdDLEVBQUdDLEVBQUdDLEVBQTNHQyxFQUFJLENBQUVDLE1BQU8sRUFBR0MsS0FBTSxXQUFhLEdBQVcsRUFBUEosRUFBRSxHQUFRLE1BQU1BLEVBQUUsR0FBSSxPQUFPQSxFQUFFLElBQU9LLEtBQU0sR0FBSUMsSUFBSyxJQUNoRyxPQUFPTCxFQUFJLENBQUVaLEtBQU1rQixFQUFLLEdBQUlDLE1BQVNELEVBQUssR0FBSUUsT0FBVUYsRUFBSyxJQUF3QixtQkFBWEcsU0FBMEJULEVBQUVTLE9BQU9DLFVBQVksV0FBYSxPQUFPQyxPQUFVWCxFQUN2SixTQUFTTSxFQUFLTSxHQUFLLE9BQU8sU0FBVUMsR0FBSyxPQUN6QyxTQUFjQyxHQUNWLEdBQUlqQixFQUFHLE1BQU0sSUFBSWtCLFVBQVUsbUNBQzNCLEtBQU9kLEdBQUcsSUFDTixHQUFJSixFQUFJLEVBQUdDLElBQU1DLEVBQVksRUFBUmUsRUFBRyxHQUFTaEIsRUFBVSxPQUFJZ0IsRUFBRyxHQUFLaEIsRUFBUyxTQUFPQyxFQUFJRCxFQUFVLFNBQU1DLEVBQUVpQixLQUFLbEIsR0FBSSxHQUFLQSxFQUFFVixTQUFXVyxFQUFJQSxFQUFFaUIsS0FBS2xCLEVBQUdnQixFQUFHLEtBQUt0QixLQUFNLE9BQU9PLEVBRTNKLE9BRElELEVBQUksRUFBR0MsSUFBR2UsRUFBSyxDQUFTLEVBQVJBLEVBQUcsR0FBUWYsRUFBRWIsUUFDekI0QixFQUFHLElBQ1AsS0FBSyxFQUFHLEtBQUssRUFBR2YsRUFBSWUsRUFBSSxNQUN4QixLQUFLLEVBQWMsT0FBWGIsRUFBRUMsUUFBZ0IsQ0FBRWhCLE1BQU80QixFQUFHLEdBQUl0QixNQUFNLEdBQ2hELEtBQUssRUFBR1MsRUFBRUMsUUFBU0osRUFBSWdCLEVBQUcsR0FBSUEsRUFBSyxDQUFDLEdBQUksU0FDeEMsS0FBSyxFQUFHQSxFQUFLYixFQUFFSSxJQUFJWSxNQUFPaEIsRUFBRUcsS0FBS2EsTUFBTyxTQUN4QyxRQUNJLEtBQWtCbEIsRUFBZSxHQUEzQkEsRUFBSUUsRUFBRUcsTUFBWWMsUUFBY25CLEVBQUVBLEVBQUVtQixPQUFTLE1BQWtCLElBQVZKLEVBQUcsSUFBc0IsSUFBVkEsRUFBRyxJQUFXLENBQUViLEVBQUksRUFBRyxTQUNqRyxHQUFjLElBQVZhLEVBQUcsTUFBY2YsR0FBTWUsRUFBRyxHQUFLZixFQUFFLElBQU1lLEVBQUcsR0FBS2YsRUFBRSxJQUFNLENBQUVFLEVBQUVDLE1BQVFZLEVBQUcsR0FBSSxNQUM5RSxHQUFjLElBQVZBLEVBQUcsSUFBWWIsRUFBRUMsTUFBUUgsRUFBRSxHQUFJLENBQUVFLEVBQUVDLE1BQVFILEVBQUUsR0FBSUEsRUFBSWUsRUFBSSxNQUM3RCxHQUFJZixHQUFLRSxFQUFFQyxNQUFRSCxFQUFFLEdBQUksQ0FBRUUsRUFBRUMsTUFBUUgsRUFBRSxHQUFJRSxFQUFFSSxJQUFJYyxLQUFLTCxHQUFLLE1BQ3ZEZixFQUFFLElBQUlFLEVBQUVJLElBQUlZLE1BQ2hCaEIsRUFBRUcsS0FBS2EsTUFBTyxTQUV0QkgsRUFBS2xCLEVBQUtvQixLQUFLdEMsRUFBU3VCLEdBQzFCLE1BQU9aLEdBQUt5QixFQUFLLENBQUMsRUFBR3pCLEdBQUlTLEVBQUksVUFBZUQsRUFBSUUsRUFBSSxFQUN0RCxHQUFZLEVBQVJlLEVBQUcsR0FBUSxNQUFNQSxFQUFHLEdBQUksTUFBTyxDQUFFNUIsTUFBTzRCLEVBQUcsR0FBS0EsRUFBRyxRQUFLLEVBQVF0QixNQUFNLEdBckI5QkwsQ0FBSyxDQUFDeUIsRUFBR0MsTUF3Q3RELFNBQVNPLEVBQU9DLEVBQUdULEdBQ3RCLElBQUlVLEVBQXNCLG1CQUFYYixRQUF5QlksRUFBRVosT0FBT0MsVUFDakQsSUFBS1ksRUFBRyxPQUFPRCxFQUNmLElBQW1CRSxFQUFZbEMsRUFBM0JtQyxFQUFJRixFQUFFTixLQUFLSyxHQUFPSSxFQUFLLEdBQzNCLElBQ0ksV0FBYyxJQUFOYixHQUFzQixFQUFOQSxRQUFjVyxFQUFJQyxFQUFFcEMsUUFBUUksTUFBTWlDLEVBQUdOLEtBQUtJLEVBQUVyQyxPQUV4RSxNQUFPd0MsR0FBU3JDLEVBQUksQ0FBRXFDLE1BQU9BLFdBRXpCLElBQ1FILElBQU1BLEVBQUUvQixPQUFTOEIsRUFBSUUsRUFBVSxTQUFJRixFQUFFTixLQUFLUSxXQUV4QyxHQUFJbkMsRUFBRyxNQUFNQSxFQUFFcUMsT0FFN0IsT0FBT0QsRUFHSixTQUFTRSxJQUNaLElBQUssSUFBSUYsRUFBSyxHQUFJRCxFQUFJLEVBQUdBLEVBQUlJLFVBQVVWLE9BQVFNLElBQzNDQyxFQUFLQSxFQUFHSSxPQUFPVCxFQUFPUSxVQUFVSixLQUNwQyxPQUFPQywrQ0MzSUosSUFBSUssRUFBb0IsSUFBSUMsSUFBSSxDQUNuQyxDQUFDLE1BQU8sYUFDUixDQUFDLE1BQU8sYUFDUixDQUFDLE1BQU8sZ0JBQ1IsQ0FBQyxPQUFRLGNBQ1QsQ0FBQyxNQUFPLGNBQ1IsQ0FBQyxNQUFPLG9CQUNSLENBQUMsTUFBTyxtQkFDUixDQUFDLE1BQU8sYUFDUixDQUFDLE1BQU8sbUJBQ1IsQ0FBQyxNQUFPLGFBQ1IsQ0FBQyxNQUFPLG1CQUNSLENBQUMsTUFBTyxzQkFDUixDQUFDLE9BQVEsNkVBRU4sU0FBU0MsRUFBZUMsRUFBTUMsR0FDakMsSUFBSXJDLEVBbUJSLFNBQXNCb0MsR0FDbEIsSUFBSUUsRUFBT0YsRUFBS0UsS0FFaEIsR0FEbUJBLElBQW1DLElBQTNCQSxFQUFLQyxZQUFZLE9BQ3ZCSCxFQUFLSSxLQUFNLENBQzVCLElBQUlDLEVBQU1ILEVBQUtJLE1BQU0sS0FDaEJ0QixNQUFNdUIsY0FDUEgsRUFBT1AsRUFBa0JXLElBQUlILEdBQzdCRCxHQUNBSyxPQUFPQyxlQUFlVixFQUFNLE9BQVEsQ0FDaEMvQyxNQUFPbUQsRUFDUE8sVUFBVSxFQUNWQyxjQUFjLEVBQ2RDLFlBQVksSUFJeEIsT0FBT2IsRUFuQ0NjLENBQWFkLEdBQ3JCLEdBQXNCLGlCQUFYcEMsRUFBRXFDLEtBQW1CLENBQzVCLElBQUljLEVBQXFCZixFQUFLZSxtQkFDOUJOLE9BQU9DLGVBQWU5QyxFQUFHLE9BQVEsQ0FDN0JYLE1BQXVCLGlCQUFUZ0QsRUFDUkEsRUFJOEIsaUJBQXZCYyxHQUErRCxFQUE1QkEsRUFBbUI5QixPQUN6RDhCLEVBQ0FmLEVBQUtFLEtBQ2ZTLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxZQUFZLElBR3BCLE9BQU9qRCxFQy9CWCxJQUFJb0QsRUFBa0IsQ0FFbEIsWUFDQSxhQVFHLFNBQVNDLEdBQVVDLEdBQ3RCLE9BQU9DLEVBQWtCekMsVUFBTSxPQUFRLEVBQVEsV0FDM0MsT0FBTzBDLEVBQW9CMUMsS0FBTSxTQUFVMkMsR0FDdkMsTUFBTyxDQUFDLEVBTXBCLFNBQW1CcEUsR0FDZixRQUFTQSxFQUFNcUUsYUFQZUMsQ0FBVUwsSUFBUUEsRUFBSUksYUFvQnhELFNBQThCRSxFQUFJcEIsR0FDOUIsT0FBT2UsRUFBa0J6QyxVQUFNLE9BQVEsRUFBUSxXQUMzQyxJQUFJK0MsRUFDSixPQUFPTCxFQUFvQjFDLEtBQU0sU0FBVTJDLEdBQ3ZDLE9BQVFBLEVBQUdwRCxPQUNQLEtBQUssRUFDRCxPQUFLdUQsRUFBR0MsT0FDUkEsRUFBUUMsRUFBU0YsRUFBR0MsT0FDZkUsT0FBTyxTQUFVQyxHQUFRLE1BQXFCLFNBQWRBLEVBQUtDLE9BRzdCLFNBQVR6QixFQUNPLENBQUMsRUFBY3FCLEdBRW5CLENBQUMsRUFBYTVFLFFBQVFpRixJQUFJTCxFQUFNTSxJQUFJQyxNQVJyQixDQUFDLEVBQWEsR0FTeEMsS0FBSyxFQUVELE1BQU8sQ0FBQyxFQUFjQyxFQXFDMUMsU0FBU0MsRUFBUVQsR0FDYixPQUFPQSxFQUFNVSxPQUFPLFNBQVVDLEVBQUtDLEdBQVMsT0FBT0MsRUFBaUJGLEVBQU1HLE1BQU1DLFFBQVFILEdBQVNILEVBQVFHLEdBQVMsQ0FBQ0EsS0FBYSxJQXRDM0VILENBRDdCYixFQUFHbkQsVUFFZixLQUFLLEVBQUcsTUFBTyxDQUFDLEVBQWMrRCxFQUFlUCxFQUFTRixFQUFHYSxPQUNoRE4sSUFBSSxTQUFVL0IsR0FBUSxPQUFPRCxFQUFlQyxZQXRDL0N5QyxDQUFxQnZCLEVBQUlJLGFBQWNKLEVBQUlkLE1BUWpFLFNBQXVCYyxHQU1uQixPQUVKLFNBQWlCakUsR0FDYixPQUFpQixPQUFWQSxFQVJLeUYsQ0FBUXhCLEVBQUl5QixTQUNsQnpCLEVBQUl5QixPQUFPTixNQUNQWCxFQUFTUixFQUFJeUIsT0FBT04sT0FFeEIsSUFDT04sSUFBSSxTQUFVL0IsR0FBUSxPQUFPRCxFQUFlQyxLQWJ2QzRDLENBQWMxQixRQTBDcEMsU0FBU2UsRUFBZUksR0FDcEIsT0FBT0EsRUFBTVYsT0FBTyxTQUFVM0IsR0FBUSxPQUErQyxJQUF4Q2dCLEVBQWdCNkIsUUFBUTdDLEVBQUtFLFFBTTlFLFNBQVN3QixFQUFTRCxHQUdkLElBRkEsSUFBSVksRUFBUSxHQUVIOUMsRUFBSSxFQUFHQSxFQUFJa0MsRUFBTXhDLE9BQVFNLElBQUssQ0FDbkMsSUFBSVMsRUFBT3lCLEVBQU1sQyxHQUNqQjhDLEVBQU1uRCxLQUFLYyxHQUVmLE9BQU9xQyxFQUdYLFNBQVNMLEVBQWVKLEdBQ3BCLEdBQXFDLG1CQUExQkEsRUFBS2tCLGlCQUNaLE9BQU9DLEVBQXFCbkIsR0FFaEMsSUFBSW9CLEVBQVFwQixFQUFLa0IsbUJBSWpCLE9BQUlFLEdBQVNBLEVBQU1DLFlBQ1JDLEVBQWFGLEdBRWpCRCxFQUFxQm5CLEdBS2hDLFNBQVNtQixFQUFxQm5CLEdBQzFCLElBQUk1QixFQUFPNEIsRUFBS3VCLFlBQ2hCLElBQUtuRCxFQUNELE9BQU9uRCxRQUFRRSxPQUFPNkUsRUFBTyxrQkFFakMsSUFBSXdCLEVBQU1yRCxFQUFlQyxHQUN6QixPQUFPbkQsUUFBUUMsUUFBUXNHLEdBRzNCLFNBQVNDLEVBQVVMLEdBQ2YsT0FBTzdCLEVBQWtCekMsVUFBTSxPQUFRLEVBQVEsV0FDM0MsT0FBTzBDLEVBQW9CMUMsS0FBTSxTQUFVMkMsR0FDdkMsTUFBTyxDQUFDLEVBQWMyQixFQUFNQyxZQUFjQyxFQUFhRixHQWlEbkUsU0FBdUJBLEdBQ25CLE9BQU83QixFQUFrQnpDLFVBQU0sT0FBUSxFQUFRLFdBQzNDLE9BQU8wQyxFQUFvQjFDLEtBQU0sU0FBVTJDLEdBQ3ZDLE1BQU8sQ0FBQyxFQUFjLElBQUl4RSxRQUFRLFNBQVVDLEVBQVNDLEdBQzdDaUcsRUFBTWhELEtBQUssU0FBVUEsR0FDakIsSUFBSW9ELEVBQU1yRCxFQUFlQyxFQUFNZ0QsRUFBTU0sVUFDckN4RyxFQUFRc0csSUFDVCxTQUFVRyxHQUNUeEcsRUFBT3dHLFlBekQ2Q0MsQ0FBY1IsUUFLMUYsU0FBU0UsRUFBYUYsR0FDbEIsSUFBSVMsRUFBU1QsRUFBTVUsZUFDbkIsT0FBTyxJQUFJN0csUUFBUSxTQUFVQyxFQUFTQyxHQUNsQyxJQUFJNEcsRUFBVSxJQUNkLFNBQVNDLElBQ0wsSUFBSUMsRUFBUW5GLEtBR1orRSxFQUFPRyxZQUFZLFNBQVVFLEdBQVMsT0FBTzNDLEVBQWtCMEMsT0FBTyxPQUFRLEVBQVEsV0FDbEYsSUFBSXhCLEVBQU8wQixFQUFPdEMsRUFDbEIsT0FBT0wsRUFBb0IxQyxLQUFNLFNBQVUyQyxHQUN2QyxPQUFRQSxFQUFHcEQsT0FDUCxLQUFLLEVBQ0QsR0FBTTZGLEVBQU03RSxPQUFRLE1BQU8sQ0FBQyxFQUFhLEdBQ3pDb0MsRUFBR3BELE1BQVEsRUFDZixLQUFLLEVBRUQsT0FEQW9ELEVBQUdsRCxLQUFLZSxLQUFLLENBQUMsRUFBRyxHQUFLLElBQ2YsQ0FBQyxFQUFhckMsUUFBUWlGLElBQUk2QixJQUNyQyxLQUFLLEVBR0QsT0FGQXRCLEVBQVFoQixFQUFHbkQsT0FDWHBCLEVBQVF1RixHQUNELENBQUMsRUFBYSxHQUN6QixLQUFLLEVBR0QsT0FGQTBCLEVBQVExQyxFQUFHbkQsT0FDWG5CLEVBQU9nSCxHQUNBLENBQUMsRUFBYSxHQUN6QixLQUFLLEVBQUcsTUFBTyxDQUFDLEVBQWEsR0FDN0IsS0FBSyxFQUNEdEMsRUFBUTVFLFFBQVFpRixJQUFJZ0MsRUFBTS9CLElBQUlzQixJQUM5Qk0sRUFBUXpFLEtBQUt1QyxHQUVibUMsSUFDQXZDLEVBQUdwRCxNQUFRLEVBQ2YsS0FBSyxFQUFHLE1BQU8sQ0FBQyxTQUdyQixTQUFVc0YsR0FDYnhHLEVBQU93RyxLQUdmSyw0QkN0Sm1CLFNBQVNqRixFQUFFdkIsR0FBRyxHQUFHa0MsRUFBRWxDLEdBQUcsT0FBT2tDLEVBQUVsQyxHQUFHNEcsUUFBUSxJQUFJNUUsRUFBRUUsRUFBRWxDLEdBQUcsQ0FBQ21DLEVBQUVuQyxFQUFFNkcsR0FBRSxFQUFHRCxRQUFRLElBQUksT0FBT2xHLEVBQUVWLEdBQUcyQixLQUFLSyxFQUFFNEUsUUFBUTVFLEVBQUVBLEVBQUU0RSxRQUFRckYsR0FBR1MsRUFBRTZFLEdBQUUsRUFBRzdFLEVBQUU0RSxRQUExSSxJQUFTbEcsRUFBNkl3QixFQUFySzRFLFdBQXFLNUUsRUFBRSxHQUFVWCxFQUFFVSxFQUEzSnZCLEVBQTBjLENBQUMsU0FBU0EsRUFBRWEsR0FBRyxJQUFJVyxFQUFFeEIsRUFBRWtHLFFBQVEsb0JBQW9CRyxRQUFRQSxPQUFPQyxNQUFNQSxLQUFLRCxPQUFPLG9CQUFvQkUsTUFBTUEsS0FBS0QsTUFBTUEsS0FBS0MsS0FBS0MsU0FBUyxjQUFUQSxHQUEwQixpQkFBaUJDLE1BQU1BLElBQUlqRixJQUFJLFNBQVN4QixFQUFFYSxHQUFHYixFQUFFa0csUUFBUSxTQUFTbEcsR0FBRyxNQUFNLGlCQUFpQkEsRUFBRSxPQUFPQSxFQUFFLG1CQUFtQkEsSUFBSSxTQUFTQSxFQUFFYSxHQUFHLElBQUlXLEVBQUV4QixFQUFFa0csUUFBUSxDQUFDUSxRQUFRLFNBQVMsaUJBQWlCQyxNQUFNQSxJQUFJbkYsSUFBSSxTQUFTeEIsRUFBRWEsRUFBRVcsR0FBR3hCLEVBQUVrRyxTQUFTMUUsRUFBRSxFQUFGQSxDQUFLLFdBQVcsT0FBTyxHQUFHbUIsT0FBT0MsZUFBZSxHQUFHLElBQUksQ0FBQ0YsSUFBSSxXQUFXLE9BQU8sS0FBS2tFLEtBQUssU0FBUzVHLEVBQUVhLEdBQUdiLEVBQUVrRyxRQUFRLFNBQVNsRyxHQUFHLElBQUksUUFBUUEsSUFBSSxNQUFNQSxHQUFHLE9BQU0sS0FBTSxTQUFTQSxFQUFFYSxHQUFHLElBQUlXLEVBQUUsR0FBR3FGLFNBQVM3RyxFQUFFa0csUUFBUSxTQUFTbEcsR0FBRyxPQUFPd0IsRUFBRVAsS0FBS2pCLEdBQUc4RyxNQUFNLEdBQUcsS0FBSyxTQUFTOUcsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsR0FBRkEsQ0FBTSxPQUFPRixFQUFFRSxFQUFFLEdBQUdDLEVBQUVELEVBQUUsR0FBR2QsT0FBT3FHLEVBQUUsbUJBQW1CdEYsR0FBR3pCLEVBQUVrRyxRQUFRLFNBQVNsRyxHQUFHLE9BQU9WLEVBQUVVLEtBQUtWLEVBQUVVLEdBQUcrRyxHQUFHdEYsRUFBRXpCLEtBQUsrRyxFQUFFdEYsRUFBRUgsR0FBRyxVQUFVdEIsTUFBTWdILE1BQU0xSCxHQUFHLFNBQVNVLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUdGLEVBQUVFLEVBQUUsR0FBR0MsRUFBRUQsRUFBRSxHQUFHdUYsRUFBRXZGLEVBQUUsSUFBSXlGLEVBQUV6RixFQUFFLElBQUkxQixFQUFFLFNBQVNFLEVBQUVhLEVBQUVXLEdBQUcsSUFBSW9GLEVBQUVNLEVBQUVDLEVBQUVoQixFQUFFckYsRUFBRWQsRUFBRUYsRUFBRXNILEVBQUVySCxFQUFFQyxFQUFFRixFQUFFdUgsRUFBRUMsRUFBRXRILEVBQUVGLEVBQUV5SCxFQUFFQyxFQUFFeEgsRUFBRUYsRUFBRWpCLEVBQUU0SSxFQUFFekgsRUFBRUYsRUFBRTRILEVBQUV6SCxFQUFFRixFQUFFVCxFQUFFZ0ksRUFBRWhJLEVBQUV1QixLQUFLdkIsRUFBRXVCLEdBQUcsS0FBS3ZCLEVBQUV1QixJQUFJLElBQUk4RyxVQUFVcEcsRUFBRXhCLEVBQUV1QixFQUFFQSxFQUFFVCxLQUFLUyxFQUFFVCxHQUFHLElBQUkrRyxFQUFFckcsRUFBRW9HLFlBQVlwRyxFQUFFb0csVUFBVSxJQUFhLElBQUlmLEtBQWI3RyxJQUFJeUIsRUFBRVgsR0FBWVcsRUFBeUIyRixJQUF2QkQsR0FBR3BHLEdBQUdiLFFBQUcsSUFBU0EsRUFBRTJHLElBQVEzRyxFQUFFdUIsR0FBR29GLEdBQUdULEVBQUVzQixHQUFHUCxFQUFFRCxFQUFFRSxFQUFFN0gsR0FBR2tJLEdBQUcsbUJBQW1CTCxFQUFFRixFQUFFVCxTQUFTdkYsS0FBS2tHLEdBQUdBLEVBQUVsSCxHQUFHOEcsRUFBRTlHLEVBQUUyRyxFQUFFTyxFQUFFbkgsRUFBRUYsRUFBRStILEdBQUd0RyxFQUFFcUYsSUFBSU8sR0FBRzFGLEVBQUVGLEVBQUVxRixFQUFFVCxHQUFHcUIsR0FBR0ksRUFBRWhCLElBQUlPLElBQUlTLEVBQUVoQixHQUFHTyxJQUFJN0gsRUFBRXdJLEtBQUt4RyxFQUFFeEIsRUFBRXNILEVBQUUsRUFBRXRILEVBQUV1SCxFQUFFLEVBQUV2SCxFQUFFeUgsRUFBRSxFQUFFekgsRUFBRWpCLEVBQUUsRUFBRWlCLEVBQUU0SCxFQUFFLEdBQUc1SCxFQUFFaUksRUFBRSxHQUFHakksRUFBRStILEVBQUUsR0FBRy9ILEVBQUVrSSxFQUFFLElBQUloSSxFQUFFa0csUUFBUXBHLEdBQUcsU0FBU0UsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsSUFBSUYsRUFBRUUsRUFBRSxJQUFJeEIsRUFBRWtHLFFBQVExRSxFQUFFLEdBQUcsU0FBU3hCLEVBQUVhLEVBQUVXLEdBQUcsT0FBT2xDLEVBQUVRLEVBQUVFLEVBQUVhLEVBQUVTLEVBQUUsRUFBRUUsS0FBSyxTQUFTeEIsRUFBRWEsRUFBRVcsR0FBRyxPQUFPeEIsRUFBRWEsR0FBR1csRUFBRXhCLElBQUksU0FBU0EsRUFBRWEsR0FBRyxJQUFJVyxFQUFFLEVBQUVsQyxFQUFFZ0gsS0FBSzJCLFNBQVNqSSxFQUFFa0csUUFBUSxTQUFTbEcsR0FBRyxNQUFNLFVBQVU4QixZQUFPLElBQVM5QixFQUFFLEdBQUdBLEVBQUUsUUFBUXdCLEVBQUVsQyxHQUFHdUgsU0FBUyxPQUFPLFNBQVM3RyxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxJQUFJeEIsRUFBRWtHLFFBQVEsU0FBU2xHLEVBQUVhLEVBQUVXLEdBQUcsR0FBR2xDLEVBQUVVLFFBQUcsSUFBU2EsRUFBRSxPQUFPYixFQUFFLE9BQU93QixHQUFHLEtBQUssRUFBRSxPQUFPLFNBQVNBLEdBQUcsT0FBT3hCLEVBQUVpQixLQUFLSixFQUFFVyxJQUFJLEtBQUssRUFBRSxPQUFPLFNBQVNBLEVBQUVsQyxHQUFHLE9BQU9VLEVBQUVpQixLQUFLSixFQUFFVyxFQUFFbEMsSUFBSSxLQUFLLEVBQUUsT0FBTyxTQUFTa0MsRUFBRWxDLEVBQUVnQyxHQUFHLE9BQU90QixFQUFFaUIsS0FBS0osRUFBRVcsRUFBRWxDLEVBQUVnQyxJQUFJLE9BQU8sV0FBVyxPQUFPdEIsRUFBRUwsTUFBTWtCLEVBQUVnQixjQUFjLFNBQVM3QixFQUFFYSxHQUFHYixFQUFFa0csUUFBUSxTQUFTbEcsR0FBRyxHQUFHLE1BQVFBLEVBQUUsTUFBTWdCLFVBQVUseUJBQXlCaEIsR0FBRyxPQUFPQSxJQUFJLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLElBQUlGLEVBQUVnRixLQUFLNEIsSUFBSWxJLEVBQUVrRyxRQUFRLFNBQVNsRyxHQUFHLE9BQVMsRUFBRkEsRUFBSXNCLEVBQUVoQyxFQUFFVSxHQUFHLGtCQUFrQixJQUFJLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUdYLEVBQWVzSCxZQUFXLEVBQUd0SCxFQUFFdUgsUUFBUSxTQUFTcEksRUFBRWEsR0FBRyxHQUFHYixHQUFHYSxFQUFFLENBQUMsSUFBSVcsRUFBRWlELE1BQU1DLFFBQVE3RCxHQUFHQSxFQUFFQSxFQUFFMkIsTUFBTSxLQUFLbEQsRUFBRVUsRUFBRW9DLE1BQU0sR0FBR2QsRUFBRXRCLEVBQUVzQyxNQUFNLEdBQUdiLEVBQUVILEVBQUUrRyxRQUFRLFFBQVEsSUFBSSxPQUFPN0csRUFBRThHLEtBQUssU0FBU3RJLEdBQUcsSUFBSWEsRUFBRWIsRUFBRXVJLE9BQU8sTUFBTSxNQUFNMUgsRUFBRTJILE9BQU8sR0FBR2xKLEVBQUVtRCxjQUFjZ0csU0FBUzVILEVBQUU0QixlQUFlNUIsRUFBRTRILFNBQVMsTUFBTWhILElBQUlaLEVBQUV3SCxRQUFRLFFBQVEsSUFBSS9HLElBQUlULElBQUksT0FBTSxHQUFJVyxFQUFFLElBQUlBLEVBQUUsS0FBSyxTQUFTeEIsRUFBRWEsRUFBRVcsR0FBR0EsRUFBRSxJQUFJeEIsRUFBRWtHLFFBQVExRSxFQUFFLEdBQUdpRCxNQUFNNkQsTUFBTSxTQUFTdEksRUFBRWEsRUFBRVcsR0FBZ0IsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUdGLEVBQUVFLEVBQUUsR0FBRkEsQ0FBTSxHQUFHbEMsRUFBRUEsRUFBRVQsRUFBRVMsRUFBRThILEdBQUc1RixFQUFFLEdBQUZBLENBQU0sR0FBRzhHLE1BQUssR0FBSSxRQUFRLENBQUNBLEtBQUssU0FBU3RJLEdBQUcsT0FBT3NCLEVBQUVWLEtBQUtaLEVBQUU2QixVQUFVLFFBQVEsU0FBUzdCLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLElBQUlGLEVBQUVFLEVBQUUsSUFBSUMsRUFBRUQsRUFBRSxJQUFJdUYsRUFBRXBFLE9BQU9DLGVBQWUvQixFQUFFZixFQUFFMEIsRUFBRSxHQUFHbUIsT0FBT0MsZUFBZSxTQUFTNUMsRUFBRWEsRUFBRVcsR0FBRyxHQUFHbEMsRUFBRVUsR0FBR2EsRUFBRVksRUFBRVosR0FBRSxHQUFJdkIsRUFBRWtDLEdBQUdGLEVBQUUsSUFBSSxPQUFPeUYsRUFBRS9HLEVBQUVhLEVBQUVXLEdBQUcsTUFBTXhCLElBQUksR0FBRyxRQUFRd0IsR0FBRyxRQUFRQSxFQUFFLE1BQU1SLFVBQVUsNEJBQTRCLE1BQU0sVUFBVVEsSUFBSXhCLEVBQUVhLEdBQUdXLEVBQUVyQyxPQUFPYSxJQUFJLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUd4QixFQUFFa0csUUFBUSxTQUFTbEcsR0FBRyxJQUFJVixFQUFFVSxHQUFHLE1BQU1nQixVQUFVaEIsRUFBRSxzQkFBc0IsT0FBT0EsSUFBSSxTQUFTQSxFQUFFYSxFQUFFVyxHQUFHeEIsRUFBRWtHLFNBQVMxRSxFQUFFLEtBQUtBLEVBQUUsRUFBRkEsQ0FBSyxXQUFXLE9BQU8sR0FBR21CLE9BQU9DLGVBQWVwQixFQUFFLEdBQUZBLENBQU0sT0FBTyxJQUFJLENBQUNrQixJQUFJLFdBQVcsT0FBTyxLQUFLa0UsS0FBSyxTQUFTNUcsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsR0FBR0YsRUFBRUUsRUFBRSxHQUFHa0gsU0FBU2pILEVBQUVuQyxFQUFFZ0MsSUFBSWhDLEVBQUVnQyxFQUFFcUgsZUFBZTNJLEVBQUVrRyxRQUFRLFNBQVNsRyxHQUFHLE9BQU95QixFQUFFSCxFQUFFcUgsY0FBYzNJLEdBQUcsS0FBSyxTQUFTQSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxHQUFHeEIsRUFBRWtHLFFBQVEsU0FBU2xHLEVBQUVhLEdBQUcsSUFBSXZCLEVBQUVVLEdBQUcsT0FBT0EsRUFBRSxJQUFJd0IsRUFBRUYsRUFBRSxHQUFHVCxHQUFHLG1CQUFtQlcsRUFBRXhCLEVBQUU2RyxZQUFZdkgsRUFBRWdDLEVBQUVFLEVBQUVQLEtBQUtqQixJQUFJLE9BQU9zQixFQUFFLEdBQUcsbUJBQW1CRSxFQUFFeEIsRUFBRTRJLFdBQVd0SixFQUFFZ0MsRUFBRUUsRUFBRVAsS0FBS2pCLElBQUksT0FBT3NCLEVBQUUsSUFBSVQsR0FBRyxtQkFBbUJXLEVBQUV4QixFQUFFNkcsWUFBWXZILEVBQUVnQyxFQUFFRSxFQUFFUCxLQUFLakIsSUFBSSxPQUFPc0IsRUFBRSxNQUFNTixVQUFVLDZDQUE2QyxTQUFTaEIsRUFBRWEsR0FBR2IsRUFBRWtHLFFBQVEsU0FBU2xHLEVBQUVhLEdBQUcsTUFBTSxDQUFDa0MsYUFBYSxFQUFFL0MsR0FBRzhDLGVBQWUsRUFBRTlDLEdBQUc2QyxXQUFXLEVBQUU3QyxHQUFHYixNQUFNMEIsS0FBSyxTQUFTYixFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxHQUFHRixFQUFFRSxFQUFFLEdBQUdDLEVBQUVELEVBQUUsSUFBSXVGLEVBQUV2RixFQUFFLEVBQUZBLENBQUssT0FBT3lGLEVBQUVULFNBQVNLLFNBQVMvRyxHQUFHLEdBQUdtSCxHQUFHekUsTUFBTSxZQUFZaEIsRUFBRSxHQUFHcUgsY0FBYyxTQUFTN0ksR0FBRyxPQUFPaUgsRUFBRWhHLEtBQUtqQixLQUFLQSxFQUFFa0csUUFBUSxTQUFTbEcsRUFBRWEsRUFBRVcsRUFBRXlGLEdBQUcsSUFBSUwsRUFBRSxtQkFBbUJwRixFQUFFb0YsSUFBSW5GLEVBQUVELEVBQUUsU0FBU0YsRUFBRUUsRUFBRSxPQUFPWCxJQUFJYixFQUFFYSxLQUFLVyxJQUFJb0YsSUFBSW5GLEVBQUVELEVBQUV1RixJQUFJekYsRUFBRUUsRUFBRXVGLEVBQUUvRyxFQUFFYSxHQUFHLEdBQUdiLEVBQUVhLEdBQUdmLEVBQUVnSixLQUFLQyxPQUFPbEksTUFBTWIsSUFBSVYsRUFBRVUsRUFBRWEsR0FBR1csRUFBRXlGLEVBQUVqSCxFQUFFYSxHQUFHYixFQUFFYSxHQUFHVyxFQUFFRixFQUFFdEIsRUFBRWEsRUFBRVcsV0FBV3hCLEVBQUVhLEdBQUdTLEVBQUV0QixFQUFFYSxFQUFFVyxPQUFPZ0YsU0FBU21CLFVBQVUsV0FBVyxXQUFXLE1BQU0sbUJBQW1CL0csTUFBTUEsS0FBS21HLElBQUlFLEVBQUVoRyxLQUFLTCxTQUFTLFNBQVNaLEVBQUVhLEdBQUcsSUFBSVcsRUFBRSxHQUFHd0gsZUFBZWhKLEVBQUVrRyxRQUFRLFNBQVNsRyxFQUFFYSxHQUFHLE9BQU9XLEVBQUVQLEtBQUtqQixFQUFFYSxLQUFLLFNBQVNiLEVBQUVhLEdBQUdiLEVBQUVrRyxRQUFRLFNBQVNsRyxHQUFHLEdBQUcsbUJBQW1CQSxFQUFFLE1BQU1nQixVQUFVaEIsRUFBRSx1QkFBdUIsT0FBT0EsSUFBSSxTQUFTQSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxJQUFJRixFQUFFRSxFQUFFLElBQUlDLEVBQUVELEVBQUUsSUFBSXVGLEVBQUV2RixFQUFFLElBQUl5RixFQUFFekYsRUFBRSxJQUFJeEIsRUFBRWtHLFFBQVEsU0FBU2xHLEVBQUVhLEdBQUcsSUFBSVcsRUFBRSxHQUFHeEIsRUFBRUYsRUFBRSxHQUFHRSxFQUFFNEcsRUFBRSxHQUFHNUcsRUFBRWtILEVBQUUsR0FBR2xILEVBQUVtSCxFQUFFLEdBQUduSCxFQUFFbUcsRUFBRSxHQUFHbkcsR0FBR21ILEVBQUVyRyxFQUFFRCxHQUFHb0csRUFBRSxPQUFPLFNBQVNwRyxFQUFFb0csRUFBRWxILEdBQUcsSUFBSSxJQUFJdUgsRUFBRUUsRUFBRUMsRUFBRWhHLEVBQUVaLEdBQUdaLEVBQUVxQixFQUFFbUcsR0FBR2xHLEVBQUVqQyxFQUFFMkgsRUFBRWxILEVBQUUsR0FBRzZILEVBQUViLEVBQUU5RyxFQUFFa0IsUUFBUWpCLEVBQUUsRUFBRStJLEVBQUV6SCxFQUFFVixFQUFFRCxFQUFFK0csR0FBRzlILEVBQUVnQixFQUFFRCxFQUFFLFFBQUcsRUFBU1gsRUFBRjBILEVBQUkxSCxJQUFJLElBQUlpRyxHQUFHakcsS0FBS0QsS0FBWXVILEVBQUVqRyxFQUFUK0YsRUFBRXJILEVBQUVDLEdBQVNBLEVBQUV1SCxHQUFHekgsR0FBRyxHQUFHd0IsRUFBRXlILEVBQUUvSSxHQUFHc0gsT0FBTyxHQUFHQSxFQUFFLE9BQU94SCxHQUFHLEtBQUssRUFBRSxPQUFNLEVBQUcsS0FBSyxFQUFFLE9BQU9zSCxFQUFFLEtBQUssRUFBRSxPQUFPcEgsRUFBRSxLQUFLLEVBQUUrSSxFQUFFN0gsS0FBS2tHLFFBQVEsR0FBR0osRUFBRSxPQUFNLEVBQUcsT0FBT0MsR0FBRyxFQUFFUCxHQUFHTSxFQUFFQSxFQUFFK0IsS0FBSyxTQUFTakosRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsR0FBR3hCLEVBQUVrRyxRQUFRdkQsT0FBTyxLQUFLdUcscUJBQXFCLEdBQUd2RyxPQUFPLFNBQVMzQyxHQUFHLE1BQU0sVUFBVVYsRUFBRVUsR0FBR0EsRUFBRXdDLE1BQU0sSUFBSUcsT0FBTzNDLEtBQUssU0FBU0EsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsSUFBSXhCLEVBQUVrRyxRQUFRLFNBQVNsRyxHQUFHLE9BQU8yQyxPQUFPckQsRUFBRVUsTUFBTSxTQUFTQSxFQUFFYSxHQUFHLElBQUlXLEVBQUU4RSxLQUFLNkMsS0FBSzdKLEVBQUVnSCxLQUFLOEMsTUFBTXBKLEVBQUVrRyxRQUFRLFNBQVNsRyxHQUFHLE9BQU9xSixNQUFNckosR0FBR0EsR0FBRyxHQUFLLEVBQUZBLEVBQUlWLEVBQUVrQyxHQUFHeEIsS0FBSyxTQUFTQSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxJQUFJeEIsRUFBRWtHLFFBQVEsU0FBU2xHLEVBQUVhLEdBQUcsT0FBTyxJQUFJdkIsRUFBRVUsR0FBTixDQUFVYSxLQUFLLFNBQVNiLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUdGLEVBQUVFLEVBQUUsSUFBSUMsRUFBRUQsRUFBRSxFQUFGQSxDQUFLLFdBQVd4QixFQUFFa0csUUFBUSxTQUFTbEcsR0FBRyxJQUFJYSxFQUFFLE9BQU9TLEVBQUV0QixLQUFxQixtQkFBaEJhLEVBQUViLEVBQUVzSixjQUFrQ3pJLElBQUk0RCxRQUFRbkQsRUFBRVQsRUFBRThHLGFBQWE5RyxPQUFFLEdBQVF2QixFQUFFdUIsSUFBSSxRQUFRQSxFQUFFQSxFQUFFWSxNQUFNWixPQUFFLFNBQVMsSUFBU0EsRUFBRTRELE1BQU01RCxJQUFJLFNBQVNiLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUd4QixFQUFFa0csUUFBUXpCLE1BQU1DLFNBQVMsU0FBUzFFLEdBQUcsTUFBTSxTQUFTVixFQUFFVSxLQUFLLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUdGLEVBQUVoQyxFQUFFLHdCQUF3QkEsRUFBRSxzQkFBc0IsSUFBSVUsRUFBRWtHLFFBQVEsU0FBU2xHLEdBQUcsT0FBT3NCLEVBQUV0QixLQUFLc0IsRUFBRXRCLEdBQUcsTUFBTSxTQUFTQSxFQUFFYSxFQUFFVyxHQUFnQixJQUFJbEMsRUFBRWtDLEVBQUUsR0FBR3hCLEVBQUVrRyxRQUFRLFNBQVNsRyxFQUFFYSxHQUFHLFFBQVFiLEdBQUdWLEVBQUUsV0FBV3VCLEVBQUViLEVBQUVpQixLQUFLLEtBQUssYUFBYSxHQUFHakIsRUFBRWlCLEtBQUssVUFBVSxTQUFTakIsRUFBRWEsRUFBRVcsR0FBR0EsRUFBRSxJQUFJeEIsRUFBRWtHLFFBQVExRSxFQUFFLEdBQUd1SCxPQUFPTixVQUFVLFNBQVN6SSxFQUFFYSxFQUFFVyxHQUFHLElBQWlCbEMsRUFBRWtDLEVBQUUsR0FBR0YsRUFBRUUsRUFBRSxJQUFJQyxFQUFFRCxFQUFFLElBQUl1RixFQUFFLEdBQUcwQixTQUFTbkosRUFBRUEsRUFBRVQsRUFBRVMsRUFBRThILEVBQUU1RixFQUFFLEdBQUZBLENBQU0sWUFBWSxTQUFTLENBQUNpSCxTQUFTLFNBQVN6SSxHQUFHLElBQUlhLEVBQUVZLEVBQUViLEtBQUtaLEVBQUUsWUFBWXdCLEVBQW1CLEVBQWpCSyxVQUFVVixPQUFTVSxVQUFVLFFBQUcsRUFBT3ZDLEVBQUVnQyxFQUFFVCxFQUFFTSxRQUFROEYsT0FBRSxJQUFTekYsRUFBRWxDLEVBQUVnSCxLQUFLNEIsSUFBSTVHLEVBQUVFLEdBQUdsQyxHQUFHUSxFQUFFaUosT0FBTy9JLEdBQUcsT0FBTytHLEVBQUVBLEVBQUU5RixLQUFLSixFQUFFZixFQUFFbUgsR0FBR3BHLEVBQUVpRyxNQUFNRyxFQUFFbkgsRUFBRXFCLE9BQU84RixLQUFLbkgsTUFBTSxTQUFTRSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxJQUFJRixFQUFFRSxFQUFFLElBQUl4QixFQUFFa0csUUFBUSxTQUFTbEcsRUFBRWEsRUFBRVcsR0FBRyxHQUFHbEMsRUFBRXVCLEdBQUcsTUFBTUcsVUFBVSxVQUFVUSxFQUFFLDBCQUEwQixPQUFPdUgsT0FBT3pILEVBQUV0QixNQUFNLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUdGLEVBQUVFLEVBQUUsR0FBR0MsRUFBRUQsRUFBRSxFQUFGQSxDQUFLLFNBQVN4QixFQUFFa0csUUFBUSxTQUFTbEcsR0FBRyxJQUFJYSxFQUFFLE9BQU92QixFQUFFVSxVQUFLLEtBQVVhLEVBQUViLEVBQUV5QixNQUFNWixFQUFFLFVBQVVTLEVBQUV0QixNQUFNLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEVBQUZBLENBQUssU0FBU3hCLEVBQUVrRyxRQUFRLFNBQVNsRyxHQUFHLElBQUlhLEVBQUUsSUFBSSxJQUFJLE1BQU1iLEdBQUdhLEdBQUcsTUFBTVcsR0FBRyxJQUFJLE9BQU9YLEVBQUV2QixJQUFHLEdBQUksTUFBTVUsR0FBR2EsR0FBRyxNQUFNYixLQUFLLE9BQU0sS0FBaG5OYSxFQUFFb0csRUFBRXpGLEVBQUVYLEVBQUUyRyxFQUFFLFNBQVN4SCxFQUFFd0IsRUFBRWxDLEdBQUd1QixFQUFFUyxFQUFFdEIsRUFBRXdCLElBQUltQixPQUFPQyxlQUFlNUMsRUFBRXdCLEVBQUUsQ0FBQ3NCLGNBQWEsRUFBR0MsWUFBVyxFQUFHTCxJQUFJcEQsS0FBS3VCLEVBQUVBLEVBQUUsU0FBU2IsR0FBRyxJQUFJd0IsRUFBRXhCLEdBQUdBLEVBQUVtSSxXQUFXLFdBQVcsT0FBT25JLEVBQUVvSSxTQUFTLFdBQVcsT0FBT3BJLEdBQUcsT0FBT2EsRUFBRTJHLEVBQUVoRyxFQUFFLElBQUlBLEdBQUdBLEdBQUdYLEVBQUVTLEVBQUUsU0FBU3RCLEVBQUVhLEdBQUcsT0FBTzhCLE9BQU9nRixVQUFVcUIsZUFBZS9ILEtBQUtqQixFQUFFYSxJQUFJQSxFQUFFc0csRUFBRSxHQUFHdEcsRUFBRUEsRUFBRXFHLEVBQUUsZ0lDSXRkLFNBQVNxQyxHQUFhckgsRUFBTXNILFNBQ1osMkJBQWR0SCxFQUFLSSxNQUFxQ21ILEVBQVF2SCxFQUFNc0gsR0FHMUQsU0FBU0UsR0FBY3hILEVBQU15SCxFQUFTQyxVQUNwQzFILEVBQUsySCxNQUFRRixHQUFXekgsRUFBSzJILE1BQVFELEVBWXZDLFNBQVNFLEdBQXFCQyxTQUNPLG1CQUEvQkEsRUFBTUQscUJBQ1JDLEVBQU1ELDRCQUMwQixJQUF2QkMsRUFBTUMsY0FDZkQsRUFBTUMsYUFLVixTQUFTQyxHQUFlRixVQUN4QkEsRUFBTXZHLGFBS0ppQixNQUFNa0QsVUFBVVcsS0FBS3JILEtBQzFCOEksRUFBTXZHLGFBQWEwRyxNQUNuQixTQUFBNUgsU0FBaUIsVUFBVEEsR0FBNkIsMkJBQVRBLE1BTm5CeUgsRUFBTWxGLFVBQVlrRixFQUFNbEYsT0FBT04sTUFlckMsU0FBUzRGLEdBQW1CSixHQUNqQ0EsRUFBTUssaUJBeUJELFNBQVNDLGdDQUF3QkMsMkJBQUFBLHlCQUMvQixTQUFDUCw4QkFBVVEsbUNBQUFBLDJCQUNoQkQsRUFBSWhDLEtBQUssU0FBQWtDLFVBQ0ZWLEdBQXFCQyxJQUFVUyxHQUNsQ0EsZ0JBQUdULFVBQVVRLElBRVJULEdBQXFCQyxNQzFDbEMsSUFBTVUsRUFBV0MsY0FBVyxXQUEwQkMsT0FBdkJDLElBQUFBLFdBQ0ZDLHNCQUFuQkMsSUFBQUEsS0FBU0Msd0JBRWpCQyxhQUFVLGlCQUNXLG1CQUFSTCxFQUNUQSxFQUFJLENBQUVHLEtBQUFBLElBQ2tCLFdBQWZHLEVBQU9OLElBQTRCLE9BQVJBLElBQ3BDQSxFQUFJTyxRQUFVLENBQUVKLEtBQUFBLElBR1gsV0FDYyxtQkFBUkgsRUFDVEEsRUFBSSxNQUNvQixXQUFmTSxFQUFPTixJQUE0QixPQUFSQSxJQUNwQ0EsRUFBSU8sUUFBVSxRQUdqQixDQUFDUCxJQUdHUSxnQkFBQ0MsaUJBQVVSLFFBQWNHLEdBQU9ELEtBQUFBLFFBR3pDTCxFQUFTWSxZQUFjLFdBa092QixJQUFNQyxHQUFlLENBQ25CQyxZQWxPRmQsRUFBU2UsVUFBWSxDQWlCbkJaLFNBQVVhLEVBQVVDLEtBVXBCbEMsT0FBUWlDLEVBQVVFLFVBQVUsQ0FBQ0YsRUFBVUcsT0FBUUgsRUFBVUksUUFBUUosRUFBVUcsVUFLM0VFLFNBQVVMLEVBQVVNLEtBS3BCQyxzQkFBdUJQLEVBQVVNLEtBS2pDRSxRQUFTUixFQUFVTSxLQU1uQkcsV0FBWVQsRUFBVU0sS0FLdEJJLE9BQVFWLEVBQVVNLEtBS2xCSyxxQkFBc0JYLEVBQVVNLEtBS2hDbkMsUUFBUzZCLEVBQVVZLE9BS25CMUMsUUFBUzhCLEVBQVVZLE9BS25CQyxTQUFVYixFQUFVTSxLQU9wQlEsa0JBQW1CZCxFQUFVQyxLQUs3QmMsbUJBQW9CZixFQUFVQyxLQU85QmUsWUFBYWhCLEVBQVVDLEtBT3ZCZ0IsWUFBYWpCLEVBQVVDLEtBT3ZCaUIsV0FBWWxCLEVBQVVDLEtBZ0N0QmtCLE9BQVFuQixFQUFVQyxLQVNsQm1CLGVBQWdCcEIsRUFBVUMsS0FTMUJvQixlQUFnQnJCLEVBQVVDLE9BdUUxQnFCLG9CQUFvQixFQUNwQkMsY0FBYyxFQUNkQyxjQUFjLEVBQ2RDLGNBQWMsRUFDZEMsYUFBYyxHQUNkQyxjQUFlLEdBQ2ZDLGNBQWUsSUEyRVYsU0FBU3hDLElBMkJTLFNBQWpCeUMsSUFDQUMsRUFBU3JDLFVBQ1hzQyxFQUFTLENBQUVsTCxLQUFNLGVBQ2pCaUwsRUFBU3JDLFFBQVEvTCxNQUFRLEtBQ3pCb08sRUFBU3JDLFFBQVF1QyxTQUtDLFNBQWhCQyxJQUVBWCxHQUNGWSxXQUFXLFdBQ0xKLEVBQVNyQyxVQUNPcUMsRUFBU3JDLFFBQW5CM0csTUFFR3BELFNBQ1RxTSxFQUFTLENBQUVsTCxLQUFNLGdCQUVpQixtQkFBdkJrSyxHQUNUQSxPQUlMLGtFQWhDTCxHQWxCRmhELElBQUFBLFdBQ0E4QyxTQUFBQSxvQkFDQUMsa0JBQUFBLGFBQW9CcEosU0FDcEJ3RyxRQUFBQSxhQUFVaUUsRUFBQUEsUUFDVmhFLFFBQUFBLGFBQVUsUUFDVmtDLFNBQUFBLGdCQUNBVyxJQUFBQSxZQUNBQyxJQUFBQSxZQUNBQyxJQUFBQSxXQUNBQyxJQUFBQSxPQUNBQyxJQUFBQSxlQUNBQyxJQUFBQSxlQUNBTixJQUFBQSx1QkFDQVIsc0JBQUFBLG9CQUNBQyxRQUFBQSxvQkFDQUMsV0FBQUEsb0JBQ0FDLE9BQUFBLG9CQUNBQyxxQkFBQUEsZ0JBRU15QixFQUFVQyxVQUFPLE1BQ2pCUCxFQUFXTyxVQUFPLFdBRUVDLGNBQVdDLEdBQVMxQyxPQUF2QzJDLE9BQU9ULE9BQ05qQyxFQUFnRDBDLEVBQWhEMUMsVUFBV3dCLEVBQXFDa0IsRUFBckNsQixtQkFBb0JJLEVBQWlCYyxFQUFqQmQsYUE4QnZDbkMsYUFBVSxrQkFDUjNFLE9BQU82SCxpQkFBaUIsUUFBU1IsR0FBZSxHQUN6QyxXQUNMckgsT0FBTzhILG9CQUFvQixRQUFTVCxHQUFlLEtBRXBELENBQUNILEVBQVVSLEVBQW9CUCxJQTJDWCxTQUFqQjRCLEVBQWlCckUsR0FDakI4RCxFQUFRM0MsU0FBVzJDLEVBQVEzQyxRQUFRbUQsU0FBU3RFLEVBQU1sRixVQUl0RGtGLEVBQU1LLGlCQUNOa0UsRUFBZXBELFFBQVUsUUE5Q3JCcUQsRUFBY0MsZUFDbEIsU0FBQXpFLEdBRU84RCxFQUFRM0MsU0FBWTJDLEVBQVEzQyxRQUFRdUQsWUFBWTFFLEVBQU1sRixVQUlyQyxLQUFsQmtGLEVBQU0yRSxTQUFvQyxLQUFsQjNFLEVBQU0yRSxVQUNoQzNFLEVBQU1LLGlCQUNOa0QsT0FHSixDQUFDTyxFQUFTTixJQUlOb0IsRUFBWUgsZUFBWSxXQUM1QmhCLEVBQVMsQ0FBRWxMLEtBQU0sV0FDaEIsSUFDR3NNLEVBQVdKLGVBQVksV0FDM0JoQixFQUFTLENBQUVsTCxLQUFNLFVBQ2hCLElBR0d1TSxFQUFZTCxlQUFZLFdBQ3hCdkMsS0Q3WUQsU0FBQSxPQUFvQjZDLCtCQUFwQixFQUFBLEVBQWdDekksT0FBTzBJLFVBQVVELGlCQVJ4RCxTQUFjQSxVQUMwQixJQUEvQkEsRUFBVS9KLFFBQVEsVUFBcUQsSUFBbkMrSixFQUFVL0osUUFBUSxZQVF0RGlLLENBQUtGLElBTGQsU0FBZ0JBLFVBQ3lCLElBQWhDQSxFQUFVL0osUUFBUSxTQUlDa0ssQ0FBT0gsR0NtWjNCSSxHQUdGNUIsSUFGQUssV0FBV0wsRUFBZ0IsS0FJNUIsQ0FBQ0MsRUFBVXRCLElBRVJxQyxFQUFpQlIsVUFBTyxJQVU5QjlDLGFBQVUsa0JBQ0pnQixJQUNGdEQsU0FBU3dGLGlCQUFpQixXQUFZL0QsSUFBb0IsR0FDMUR6QixTQUFTd0YsaUJBQWlCLE9BQVFFLEdBQWdCLElBRzdDLFdBQ0RwQyxJQUNGdEQsU0FBU3lGLG9CQUFvQixXQUFZaEUsSUFDekN6QixTQUFTeUYsb0JBQW9CLE9BQVFDLE1BR3hDLENBQUNQLEVBQVM3QixJQW9KVSxTQUFqQm1ELEVBQWlCM0UsVUFDZDhCLEVBQVcsS0FBTzlCLEVBR0ksU0FBekI0RSxFQUF5QjVFLFVBQ3RCMEIsRUFBYSxLQUFPaUQsRUFBZTNFLEdBR2pCLFNBQXJCNkUsRUFBcUI3RSxVQUNsQjJCLEVBQVMsS0FBT2dELEVBQWUzRSxPQTNKbEM4RSxFQUFnQmQsZUFDcEIsU0FBQXpFLEdBQ0VBLEVBQU1LLGlCQUVOTCxFQUFNd0YsVUFDTkMsRUFBZ0J6RixJQUdzQyxJQUFsRHVFLEVBQWVwRCxRQUFRbkcsUUFBUWdGLEVBQU1sRixVQUN2Q3lKLEVBQWVwRCxxQkFBY29ELEVBQWVwRCxVQUFTbkIsRUFBTWxGLFVBR3pEb0YsR0FBZUYsSUFDakJoTCxRQUFRQyxRQUFRdU4sRUFBa0J4QyxJQUFRckssS0FBSyxTQUFBeU4sR0FDekNyRCxHQUFxQkMsS0FBV3FDLElBSXBDb0IsRUFBUyxDQUNQTCxhQUFBQSxFQUNBSCxjQUFjLEVBQ2QxSyxLQUFNLG9CQUdKbUssR0FDRkEsRUFBWTFDLE9BS3BCLENBQUN3QyxFQUFtQkUsRUFBYUwsSUFHN0JxRCxFQUFlakIsZUFDbkIsU0FBQXpFLE1BQ0VBLEVBQU1LLGlCQUNOTCxFQUFNd0YsVUFDTkMsRUFBZ0J6RixHQUVaQSxFQUFNdkcsaUJBRU51RyxFQUFNdkcsYUFBYWtNLFdBQWEsT0FDaEMsaUJBR0F6RixHQUFlRixJQUFVNEMsR0FDM0JBLEVBQVc1QyxJQUdOLEdBRVQsQ0FBQzRDLEVBQVlQLElBR1R1RCxFQUFnQm5CLGVBQ3BCLFNBQUF6RSxHQUNFQSxFQUFNSyxpQkFDTkwsRUFBTXdGLFVBQ05DLEVBQWdCekYsT0FHVjZGLEVBQVV0QixFQUFlcEQsUUFBUXJILE9BQ3JDLFNBQUFnQixVQUFVQSxJQUFXa0YsRUFBTWxGLFFBQVVnSixFQUFRM0MsU0FBVzJDLEVBQVEzQyxRQUFRbUQsU0FBU3hKLEtBRzlELEdBRHJCeUosRUFBZXBELFFBQVUwRSxHQUNiek8sU0FJWnFNLEVBQVMsQ0FDUFIsY0FBYyxFQUNkMUssS0FBTSxrQkFDTjZLLGFBQWMsS0FHWmxELEdBQWVGLElBQVUyQyxHQUMzQkEsRUFBWTNDLEtBR2hCLENBQUM4RCxFQUFTbkIsRUFBYU4sSUFHbkJ5RCxFQUFXckIsZUFDZixTQUFBekUsR0FDRUEsRUFBTUssaUJBRU5MLEVBQU13RixVQUNOQyxFQUFnQnpGLEdBRWhCdUUsRUFBZXBELFFBQVUsR0FDekJzQyxFQUFTLENBQUVsTCxLQUFNLFVBRWIySCxHQUFlRixJQUNqQmhMLFFBQVFDLFFBQVF1TixFQUFrQnhDLElBQVFySyxLQUFLLFNBQUE2RSxPQUN6Q3VGLEdBQXFCQyxJQUFXcUMsT0FJOUJnQixFQUFnQixHQUNoQkMsRUFBZ0IsR0FFdEI5SSxFQUFNdUwsUUFBUSxTQUFBNU4sR0FDUnFILEdBQWFySCxFQUFNc0gsSUFBV0UsR0FBY3hILEVBQU15SCxFQUFTQyxHQUM3RHdELEVBQWNoTSxLQUFLYyxHQUVuQm1MLEVBQWNqTSxLQUFLYyxNQUlsQjRKLEdBQW1DLEVBQXZCc0IsRUFBY2pNLFFBQzdCa00sRUFBY2pNLFdBQWRpTSxLQUFzQkQsRUFBYzJDLE9BQU8sS0FHN0N2QyxFQUFTLENBQ1BKLGNBQUFBLEVBQ0FDLGNBQUFBLEVBQ0EvSyxLQUFNLGFBR0pzSyxHQUNGQSxFQUFPUSxFQUFlQyxFQUFldEQsR0FHWixFQUF2QnNELEVBQWNsTSxRQUFjMkwsR0FDOUJBLEVBQWVPLEVBQWV0RCxHQUdMLEVBQXZCcUQsRUFBY2pNLFFBQWMwTCxHQUM5QkEsRUFBZU8sRUFBZXJELE9BS3RDLENBQ0UrQixFQUNBdEMsRUFDQUksRUFDQUQsRUFDQTRDLEVBQ0FLLEVBQ0FDLEVBQ0FDLEVBQ0FWLElBZ0JFb0QsRUFBa0IsU0FBQXpGLEdBQ2xCcUMsR0FDRnJDLEVBQU15RixtQkFJSlEsRUFBZUMsV0FDbkIsa0JBQU0sd0VBV0YsT0FWRkMsT0FBQUEsYUFBUyxRQUNUQyxJQUFBQSxVQUNBQyxJQUFBQSxRQUNBQyxJQUFBQSxPQUNBQyxJQUFBQSxRQUNBN0QsSUFBQUEsWUFDQUUsSUFBQUEsV0FDQUQsSUFBQUEsWUFDQUUsSUFBQUEsT0FDRzJELDRIQUVISixVQUFXZixFQUF1Qi9FLEdBQXFCOEYsRUFBVzVCLElBQ2xFNkIsUUFBU2hCLEVBQXVCL0UsR0FBcUIrRixFQUFTekIsSUFDOUQwQixPQUFRakIsRUFBdUIvRSxHQUFxQmdHLEVBQVF6QixJQUM1RDBCLFFBQVNuQixFQUFlOUUsR0FBcUJpRyxFQUFTekIsSUFDdERwQyxZQUFhNEMsRUFBbUJoRixHQUFxQm9DLEVBQWE2QyxJQUNsRTNDLFdBQVkwQyxFQUFtQmhGLEdBQXFCc0MsRUFBWThDLElBQ2hFL0MsWUFBYTJDLEVBQW1CaEYsR0FBcUJxQyxFQUFhaUQsSUFDbEUvQyxPQUFReUMsRUFBbUJoRixHQUFxQnVDLEVBQVFpRCxLQUN2REssRUFBU3JDLEdBQ0x2QixHQUFhSixFQUErQixHQUFsQixDQUFFc0UsU0FBVSxNQUN4Q0QsS0FFTCxDQUNFMUMsRUFDQVUsRUFDQUksRUFDQUMsRUFDQUMsRUFDQVMsRUFDQUcsRUFDQUUsRUFDQUUsRUFDQTNELEVBQ0FDLEVBQ0FHLElBSUVtRSxHQUFzQmpDLGVBQVksU0FBQXpFLEdBQ3RDQSxFQUFNeUYsbUJBQ0wsSUFFR2tCLEdBQWdCVCxXQUNwQixrQkFBTSx3RUFBa0QsT0FBL0NDLE9BQUFBLGFBQVMsUUFBT1MsSUFBQUEsU0FBVUwsSUFBQUEsUUFBWUMseURBRTNDL0csT0FBQUEsRUFDQXNDLFNBQUFBLEVBQ0F4SixLQUFNLE9BQ05zTyxNQUFPLENBQUVDLFFBQVMsUUFDbEJGLFNBQVV4QixFQUFlOUUsR0FBcUJzRyxFQUFVZCxJQUN4RFMsUUFBU25CLEVBQWU5RSxHQUFxQmlHLEVBQVNHLEtBQ3RESyxhQUFjLE1BQ2ROLFVBQVcsR0FDVk4sRUFBUzNDLE1BS1BnRCxLQUdQLENBQUNoRCxFQUFVL0QsRUFBUXNDLEVBQVUrRCxFQUFVdkQsSUFHbkN5RSxHQUFZNUQsRUFBYWhNLE9BQ3pCNlAsR0FBb0JsRixHQUFZaUYsSUFBYSxFQUM3QzlELEdBQTJCLEVBQVo4RCxJRDNzQmhCLFNBQTBCeE0sRUFBT2lGLEVBQVFHLEVBQVNDLFVBQ2hEckYsRUFBTTBNLE1BQU0sU0FBQS9PLFVBQ1ZxSCxHQUFhckgsRUFBTXNILElBQVdFLEdBQWN4SCxFQUFNeUgsRUFBU0MsS0N5c0I5QnNILENBQWlCL0QsRUFBYzNELEVBQVFHLEVBQVNDLGdCQUlqRnFFLEdBQ0hoQixhQUFBQSxHQUNBQyxhQUwrQixFQUFaNkQsTUFBbUI5RCxLQUFpQitELElBTXZEekYsVUFBV0EsSUFBY2UsRUFDekIwRCxhQUFBQSxFQUNBVSxjQUFBQSxHQUNBN0MsUUFBQUEsRUFDQU4sU0FBQUEsRUFDQXpDLEtBQU1xRSxFQUFlN0IsS0FJekIsU0FBU1UsR0FBUUMsRUFBT2tELFVBRWRBLEVBQU83TyxVQUNSLHFCQUVFMkwsR0FDSDFDLFdBQVcsUUFFVixvQkFFRTBDLEdBQ0gxQyxXQUFXLFFBRVYsMEJBRUUwQyxHQUNIbEIsb0JBQW9CLFFBRW5CLDJCQUVFa0IsR0FDSGxCLG9CQUFvQixRQUVuQixzQkFFS0MsRUFBK0JtRSxFQUEvQm5FLDBCQUVIaUIsR0FDSGQsYUFIcUNnRSxFQUFqQmhFLGFBSXBCSCxhQUFBQSxRQUVDLHdCQUVFaUIsR0FDSGIsY0FBZStELEVBQU8vRCxjQUN0QkMsY0FBZThELEVBQU85RCxvQkFFckIscUJBRUVZLEdBQ0hsQixvQkFBb0IsRUFDcEJDLGNBQWMsRUFDZEcsYUFBYyxvQkFHVGMifQ==
|
package/package.json
CHANGED
|
@@ -112,8 +112,12 @@
|
|
|
112
112
|
"@commitlint/config-angular": "^7.0.1",
|
|
113
113
|
"@commitlint/prompt": "^7.0.0",
|
|
114
114
|
"@commitlint/prompt-cli": "^7.0.0",
|
|
115
|
-
"@
|
|
116
|
-
"@
|
|
115
|
+
"@testing-library/dom": "^6.5.0",
|
|
116
|
+
"@testing-library/jest-dom": "^4.1.0",
|
|
117
|
+
"@testing-library/react": "^9.3.0",
|
|
118
|
+
"@testing-library/react-hooks": "^2.0.3",
|
|
119
|
+
"@types/react": "^16.9.0",
|
|
120
|
+
"@types/react-dom": "^16.9.0",
|
|
117
121
|
"babel-eslint": "*",
|
|
118
122
|
"babel-jest": "^24.1.0",
|
|
119
123
|
"babel-plugin-add-module-exports": "^1.0.0",
|
|
@@ -138,12 +142,10 @@
|
|
|
138
142
|
"lint-staged": "^7.2.2",
|
|
139
143
|
"markdownlint-cli": "^0.13.0",
|
|
140
144
|
"prettier": "*",
|
|
141
|
-
"react": "^16.
|
|
142
|
-
"react-dom": "^16.
|
|
143
|
-
"react-hooks-testing-library": "^0.3.4",
|
|
145
|
+
"react": "^16.9.0",
|
|
146
|
+
"react-dom": "^16.9.0",
|
|
144
147
|
"react-styleguidist": "^9.0.1",
|
|
145
|
-
"react-test-renderer": "^16.
|
|
146
|
-
"react-testing-library": "^6.0.0",
|
|
148
|
+
"react-test-renderer": "^16.9.0",
|
|
147
149
|
"rimraf": "^2.5.2",
|
|
148
150
|
"rollup": "^1.3.0",
|
|
149
151
|
"rollup-plugin-babel": "^4.3.2",
|
|
@@ -165,7 +167,7 @@
|
|
|
165
167
|
"path": "@commitlint/prompt"
|
|
166
168
|
}
|
|
167
169
|
},
|
|
168
|
-
"version": "10.1.
|
|
170
|
+
"version": "10.1.10",
|
|
169
171
|
"engines": {
|
|
170
172
|
"node": ">= 8"
|
|
171
173
|
}
|
package/src/index.js
CHANGED
|
@@ -6,8 +6,7 @@ import React, {
|
|
|
6
6
|
useEffect,
|
|
7
7
|
useMemo,
|
|
8
8
|
useReducer,
|
|
9
|
-
useRef
|
|
10
|
-
useState
|
|
9
|
+
useRef
|
|
11
10
|
} from 'react'
|
|
12
11
|
import PropTypes from 'prop-types'
|
|
13
12
|
import { fromEvent } from 'file-selector'
|
|
@@ -469,14 +468,14 @@ export function useDropzone({
|
|
|
469
468
|
}
|
|
470
469
|
}, [inputRef, noClick])
|
|
471
470
|
|
|
472
|
-
const
|
|
471
|
+
const dragTargetsRef = useRef([])
|
|
473
472
|
const onDocumentDrop = event => {
|
|
474
473
|
if (rootRef.current && rootRef.current.contains(event.target)) {
|
|
475
474
|
// If we intercepted an event for our instance, let it propagate down to the instance's onDrop handler
|
|
476
475
|
return
|
|
477
476
|
}
|
|
478
477
|
event.preventDefault()
|
|
479
|
-
|
|
478
|
+
dragTargetsRef.current = []
|
|
480
479
|
}
|
|
481
480
|
|
|
482
481
|
useEffect(() => {
|
|
@@ -501,8 +500,8 @@ export function useDropzone({
|
|
|
501
500
|
stopPropagation(event)
|
|
502
501
|
|
|
503
502
|
// Count the dropzone and any children that are entered.
|
|
504
|
-
if (
|
|
505
|
-
|
|
503
|
+
if (dragTargetsRef.current.indexOf(event.target) === -1) {
|
|
504
|
+
dragTargetsRef.current = [...dragTargetsRef.current, event.target]
|
|
506
505
|
}
|
|
507
506
|
|
|
508
507
|
if (isEvtWithFiles(event)) {
|
|
@@ -523,7 +522,7 @@ export function useDropzone({
|
|
|
523
522
|
})
|
|
524
523
|
}
|
|
525
524
|
},
|
|
526
|
-
[
|
|
525
|
+
[getFilesFromEvent, onDragEnter, noDragEventsBubbling]
|
|
527
526
|
)
|
|
528
527
|
|
|
529
528
|
const onDragOverCb = useCallback(
|
|
@@ -554,12 +553,10 @@ export function useDropzone({
|
|
|
554
553
|
stopPropagation(event)
|
|
555
554
|
|
|
556
555
|
// Only deactivate once the dropzone and all children have been left
|
|
557
|
-
const targets =
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
]
|
|
562
|
-
setDragTargets(targets)
|
|
556
|
+
const targets = dragTargetsRef.current.filter(
|
|
557
|
+
target => target !== event.target && rootRef.current && rootRef.current.contains(target)
|
|
558
|
+
)
|
|
559
|
+
dragTargetsRef.current = targets
|
|
563
560
|
if (targets.length > 0) {
|
|
564
561
|
return
|
|
565
562
|
}
|
|
@@ -574,7 +571,7 @@ export function useDropzone({
|
|
|
574
571
|
onDragLeave(event)
|
|
575
572
|
}
|
|
576
573
|
},
|
|
577
|
-
[rootRef,
|
|
574
|
+
[rootRef, onDragLeave, noDragEventsBubbling]
|
|
578
575
|
)
|
|
579
576
|
|
|
580
577
|
const onDropCb = useCallback(
|
|
@@ -584,7 +581,7 @@ export function useDropzone({
|
|
|
584
581
|
event.persist()
|
|
585
582
|
stopPropagation(event)
|
|
586
583
|
|
|
587
|
-
|
|
584
|
+
dragTargetsRef.current = []
|
|
588
585
|
dispatch({ type: 'reset' })
|
|
589
586
|
|
|
590
587
|
if (isEvtWithFiles(event)) {
|
|
@@ -681,7 +678,6 @@ export function useDropzone({
|
|
|
681
678
|
onDragLeave: composeDragHandler(composeEventHandlers(onDragLeave, onDragLeaveCb)),
|
|
682
679
|
onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb)),
|
|
683
680
|
[refKey]: rootRef,
|
|
684
|
-
...(rootRef.current && rootRef.current.tagName === 'LABEL' ? { htmlFor: 'noop' } : {}),
|
|
685
681
|
...(!disabled && !noKeyboard ? { tabIndex: 0 } : {}),
|
|
686
682
|
...rest
|
|
687
683
|
}),
|
|
@@ -706,7 +702,7 @@ export function useDropzone({
|
|
|
706
702
|
}, [])
|
|
707
703
|
|
|
708
704
|
const getInputProps = useMemo(
|
|
709
|
-
() => ({ refKey = 'ref', onChange, onClick,
|
|
705
|
+
() => ({ refKey = 'ref', onChange, onClick, ...rest } = {}) => {
|
|
710
706
|
const inputProps = {
|
|
711
707
|
accept,
|
|
712
708
|
multiple,
|
|
@@ -716,7 +712,6 @@ export function useDropzone({
|
|
|
716
712
|
onClick: composeHandler(composeEventHandlers(onClick, onInputElementClick)),
|
|
717
713
|
autoComplete: 'off',
|
|
718
714
|
tabIndex: -1,
|
|
719
|
-
disabled: disabled || noClick,
|
|
720
715
|
[refKey]: inputRef
|
|
721
716
|
}
|
|
722
717
|
|
|
@@ -725,12 +720,12 @@ export function useDropzone({
|
|
|
725
720
|
...rest
|
|
726
721
|
}
|
|
727
722
|
},
|
|
728
|
-
[inputRef, accept, multiple, onDropCb, disabled
|
|
723
|
+
[inputRef, accept, multiple, onDropCb, disabled]
|
|
729
724
|
)
|
|
730
725
|
|
|
731
726
|
const fileCount = draggedFiles.length
|
|
732
727
|
const isMultipleAllowed = multiple || fileCount <= 1
|
|
733
|
-
const isDragAccept = fileCount > 0 && allFilesAccepted(draggedFiles, accept)
|
|
728
|
+
const isDragAccept = fileCount > 0 && allFilesAccepted(draggedFiles, accept, maxSize, minSize)
|
|
734
729
|
const isDragReject = fileCount > 0 && (!isDragAccept || !isMultipleAllowed)
|
|
735
730
|
|
|
736
731
|
return {
|
package/src/index.spec.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/* eslint react/prop-types: 0, jsx-a11y/label-has-for: 0 */
|
|
2
2
|
import React, { createRef } from 'react'
|
|
3
|
-
import { cleanup, fireEvent, render } from '
|
|
4
|
-
import { renderHook } from 'react-hooks
|
|
3
|
+
import { cleanup, fireEvent, render } from '@testing-library/react'
|
|
4
|
+
import { renderHook } from '@testing-library/react-hooks'
|
|
5
|
+
import '@testing-library/jest-dom/extend-expect'
|
|
5
6
|
import { fromEvent } from 'file-selector'
|
|
6
7
|
import * as utils from './utils'
|
|
7
8
|
import Dropzone, { useDropzone } from './index'
|
|
@@ -622,12 +623,12 @@ describe('useDropzone() hook', () => {
|
|
|
622
623
|
const dragEvt = new Event('dragover', { bubbles: true })
|
|
623
624
|
const dragEvtPreventDefaultSpy = jest.spyOn(dragEvt, 'preventDefault')
|
|
624
625
|
fireEvent(document.body, dragEvt)
|
|
625
|
-
expect(dragEvtPreventDefaultSpy).
|
|
626
|
+
expect(dragEvtPreventDefaultSpy).toHaveBeenCalled()
|
|
626
627
|
|
|
627
628
|
const dropEvt = new Event('drop', { bubbles: true })
|
|
628
629
|
const dropEvtPreventDefaultSpy = jest.spyOn(dropEvt, 'preventDefault')
|
|
629
630
|
fireEvent(document.body, dropEvt)
|
|
630
|
-
expect(dropEvtPreventDefaultSpy).
|
|
631
|
+
expect(dropEvtPreventDefaultSpy).toHaveBeenCalled()
|
|
631
632
|
})
|
|
632
633
|
|
|
633
634
|
it('permits drags and drops on elements inside our dropzone', () => {
|
|
@@ -648,7 +649,7 @@ describe('useDropzone() hook', () => {
|
|
|
648
649
|
fireEvent(dropzone, dropEvt)
|
|
649
650
|
// A call is from the onDrop handler for the dropzone,
|
|
650
651
|
// but there should be no more than 1
|
|
651
|
-
expect(dropEvtPreventDefaultSpy).
|
|
652
|
+
expect(dropEvtPreventDefaultSpy).toHaveBeenCalled()
|
|
652
653
|
})
|
|
653
654
|
|
|
654
655
|
it('does not prevent stray drops when {preventDropOnDocument} is false', () => {
|
|
@@ -665,7 +666,7 @@ describe('useDropzone() hook', () => {
|
|
|
665
666
|
const dropEvt = new Event('drop', { bubbles: true })
|
|
666
667
|
const dropEvtPreventDefaultSpy = jest.spyOn(dropEvt, 'preventDefault')
|
|
667
668
|
fireEvent(document.body, dropEvt)
|
|
668
|
-
expect(dropEvtPreventDefaultSpy).
|
|
669
|
+
expect(dropEvtPreventDefaultSpy).toHaveBeenCalledTimes(1) // TODO: Figure out who calls the preventDefault()
|
|
669
670
|
})
|
|
670
671
|
})
|
|
671
672
|
|
|
@@ -1676,7 +1677,7 @@ describe('useDropzone() hook', () => {
|
|
|
1676
1677
|
expect(props.onDrop).toHaveBeenCalled()
|
|
1677
1678
|
})
|
|
1678
1679
|
|
|
1679
|
-
it('sets {isDragActive} and {isDragAccept} if some files are accepted on
|
|
1680
|
+
it('sets {isDragActive} and {isDragAccept} if some files are accepted on dragenter', async () => {
|
|
1680
1681
|
const ui = (
|
|
1681
1682
|
<Dropzone>
|
|
1682
1683
|
{({ getRootProps, getInputProps, isDragActive, isDragAccept, isDragReject }) => (
|
|
@@ -1726,6 +1727,29 @@ describe('useDropzone() hook', () => {
|
|
|
1726
1727
|
expect(dropzone).toHaveTextContent('dragReject')
|
|
1727
1728
|
})
|
|
1728
1729
|
|
|
1730
|
+
it('sets {isDragReject} if some files are too large', async () => {
|
|
1731
|
+
const ui = (
|
|
1732
|
+
<Dropzone maxSize={0}>
|
|
1733
|
+
{({ getRootProps, getInputProps, isDragAccept, isDragReject }) => (
|
|
1734
|
+
<div {...getRootProps()}>
|
|
1735
|
+
<input {...getInputProps()} />
|
|
1736
|
+
{isDragAccept && 'dragAccept'}
|
|
1737
|
+
{isDragReject && 'dragReject'}
|
|
1738
|
+
</div>
|
|
1739
|
+
)}
|
|
1740
|
+
</Dropzone>
|
|
1741
|
+
)
|
|
1742
|
+
const { container } = render(ui)
|
|
1743
|
+
const dropzone = container.querySelector('div')
|
|
1744
|
+
|
|
1745
|
+
const data = createDtWithFiles(files)
|
|
1746
|
+
fireDragEnter(dropzone, data)
|
|
1747
|
+
await flushPromises(ui, container)
|
|
1748
|
+
|
|
1749
|
+
expect(dropzone).not.toHaveTextContent('dragAccept')
|
|
1750
|
+
expect(dropzone).toHaveTextContent('dragReject')
|
|
1751
|
+
})
|
|
1752
|
+
|
|
1729
1753
|
it('sets {isDragActive, isDragAccept, isDragReject} if all files are accepted and {multiple} is false on dragenter', async () => {
|
|
1730
1754
|
const ui = (
|
|
1731
1755
|
<Dropzone accept="image/*" multiple={false}>
|
|
@@ -2483,6 +2507,7 @@ function createDtWithFiles(files = []) {
|
|
|
2483
2507
|
files,
|
|
2484
2508
|
items: files.map(file => ({
|
|
2485
2509
|
kind: 'file',
|
|
2510
|
+
size: file.size,
|
|
2486
2511
|
type: file.type,
|
|
2487
2512
|
getAsFile: () => file
|
|
2488
2513
|
})),
|
package/src/utils/index.js
CHANGED
|
@@ -10,8 +10,10 @@ export function fileMatchSize(file, maxSize, minSize) {
|
|
|
10
10
|
return file.size <= maxSize && file.size >= minSize
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export function allFilesAccepted(files, accept) {
|
|
14
|
-
return files.every(file =>
|
|
13
|
+
export function allFilesAccepted(files, accept, maxSize, minSize) {
|
|
14
|
+
return files.every(file => {
|
|
15
|
+
return fileAccepted(file, accept) && fileMatchSize(file, maxSize, minSize)
|
|
16
|
+
})
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
// React's synthetic events has event.isPropagationStopped,
|