react-dropzone 6.2.2 → 7.0.1
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 +8 -12
- package/dist/es/index.js +17 -18
- package/dist/index.js +2 -2
- package/examples/Basic/Readme.md +10 -1
- package/examples/Nesting/Readme.md +93 -0
- package/examples/Previews/Readme.md +94 -0
- package/package.json +6 -2
- package/src/index.js +16 -17
- package/src/index.spec.js +89 -47
- package/styleguide.config.js +8 -0
- package/testSetup.js +0 -6
- package/typings/react-dropzone.d.ts +8 -12
- package/typings/tests/all.tsx +0 -1
- package/typings/tests/plugin.tsx +37 -2
package/README.md
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
# react-dropzone
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/react-dropzone)
|
|
6
|
-
[](https://travis-ci.org/react-dropzone/react-dropzone)
|
|
7
|
-
[](https://codecov.io/gh/react-dropzone/react-dropzone)
|
|
8
|
-
[](#backers)
|
|
6
|
+
[](https://travis-ci.org/react-dropzone/react-dropzone)
|
|
7
|
+
[](https://codecov.io/gh/react-dropzone/react-dropzone)
|
|
8
|
+
[](#backers)
|
|
9
9
|
[](#sponsors)
|
|
10
10
|
|
|
11
11
|
Simple HTML5-compliant drag'n'drop zone for files built with React.js.
|
|
@@ -37,15 +37,15 @@ Import `Dropzone` in your React component:
|
|
|
37
37
|
|
|
38
38
|
```javascript static
|
|
39
39
|
import Dropzone from 'react-dropzone'
|
|
40
|
-
```
|
|
41
|
-
|
|
40
|
+
```
|
|
41
|
+
|
|
42
42
|
and specify the `onDrop` method that accepts two arguments. The first argument represents the accepted files and the second argument the rejected files.
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
```javascript static
|
|
45
45
|
function onDrop(acceptedFiles, rejectedFiles) {
|
|
46
46
|
// do stuff with files...
|
|
47
47
|
}
|
|
48
|
-
```
|
|
48
|
+
```
|
|
49
49
|
|
|
50
50
|
Files accepted or rejected based on `accept` prop. This 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).
|
|
51
51
|
|
|
@@ -88,10 +88,6 @@ onDrop: acceptedFiles => {
|
|
|
88
88
|
|
|
89
89
|
See https://react-dropzone.netlify.com/#proptypes
|
|
90
90
|
|
|
91
|
-
### Word of caution when working with previews
|
|
92
|
-
|
|
93
|
-
*Important*: `react-dropzone` doesn't manage dropped files. You need to destroy the object URL yourself whenever you don't need the `preview` by calling `window.URL.revokeObjectURL(file.preview);` to avoid memory leaks.
|
|
94
|
-
|
|
95
91
|
### Testing
|
|
96
92
|
|
|
97
93
|
*Important*: `react-dropzone` makes its drag'n'drop callbacks asynchronous to enable promise based getDataTransfer functions. In order to properly test this, you may want to utilize a helper function to run all promises like this:
|
|
@@ -112,7 +108,7 @@ it('tests drag state', async () => {
|
|
|
112
108
|
})
|
|
113
109
|
await flushPromises(dropzone)
|
|
114
110
|
dropzone.update()
|
|
115
|
-
|
|
111
|
+
|
|
116
112
|
const child = updatedDropzone.find(DummyChildComponent)
|
|
117
113
|
expect(child).toHaveProp('isDragActive', true)
|
|
118
114
|
expect(child).toHaveProp('isDragAccept', false)
|
package/dist/es/index.js
CHANGED
|
@@ -116,6 +116,7 @@ var Dropzone = function (_React$Component) {
|
|
|
116
116
|
}, {
|
|
117
117
|
key: 'onDragStart',
|
|
118
118
|
value: function onDragStart(evt) {
|
|
119
|
+
evt.persist();
|
|
119
120
|
if (this.props.onDragStart && isDragDataWithFiles(evt)) {
|
|
120
121
|
this.props.onDragStart.call(this, evt);
|
|
121
122
|
}
|
|
@@ -136,6 +137,10 @@ var Dropzone = function (_React$Component) {
|
|
|
136
137
|
|
|
137
138
|
if (isDragDataWithFiles(evt)) {
|
|
138
139
|
Promise.resolve(this.props.getDataTransferItems(evt)).then(function (draggedFiles) {
|
|
140
|
+
if (evt.isPropagationStopped()) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
|
|
139
144
|
_this2.setState({
|
|
140
145
|
draggedFiles: draggedFiles,
|
|
141
146
|
// Do not rely on files for the drag state. It doesn't work in Safari.
|
|
@@ -153,7 +158,8 @@ var Dropzone = function (_React$Component) {
|
|
|
153
158
|
value: function onDragOver(evt) {
|
|
154
159
|
// eslint-disable-line class-methods-use-this
|
|
155
160
|
evt.preventDefault();
|
|
156
|
-
evt.
|
|
161
|
+
evt.persist();
|
|
162
|
+
|
|
157
163
|
try {
|
|
158
164
|
// The file dialog on Chrome allows users to drag files from the dialog onto
|
|
159
165
|
// the dropzone, causing the browser the crash when the file dialog is closed.
|
|
@@ -175,6 +181,7 @@ var Dropzone = function (_React$Component) {
|
|
|
175
181
|
var _this3 = this;
|
|
176
182
|
|
|
177
183
|
evt.preventDefault();
|
|
184
|
+
evt.persist();
|
|
178
185
|
|
|
179
186
|
// Only deactivate once the dropzone and all children have been left.
|
|
180
187
|
this.dragTargets = this.dragTargets.filter(function (el) {
|
|
@@ -204,7 +211,6 @@ var Dropzone = function (_React$Component) {
|
|
|
204
211
|
onDropAccepted = _props.onDropAccepted,
|
|
205
212
|
onDropRejected = _props.onDropRejected,
|
|
206
213
|
multiple = _props.multiple,
|
|
207
|
-
disablePreview = _props.disablePreview,
|
|
208
214
|
accept = _props.accept,
|
|
209
215
|
getDataTransferItems = _props.getDataTransferItems;
|
|
210
216
|
|
|
@@ -233,11 +239,11 @@ var Dropzone = function (_React$Component) {
|
|
|
233
239
|
var acceptedFiles = [];
|
|
234
240
|
var rejectedFiles = [];
|
|
235
241
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
}
|
|
242
|
+
if (evt.isPropagationStopped()) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
240
245
|
|
|
246
|
+
fileList.forEach(function (file) {
|
|
241
247
|
if (fileAccepted(file, accept) && fileMatchSize(file, _this4.props.maxSize, _this4.props.minSize)) {
|
|
242
248
|
acceptedFiles.push(file);
|
|
243
249
|
} else {
|
|
@@ -324,11 +330,11 @@ var Dropzone = function (_React$Component) {
|
|
|
324
330
|
|
|
325
331
|
if (!files.length) {
|
|
326
332
|
_this5.isFileDialogActive = false;
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
333
|
|
|
330
|
-
|
|
331
|
-
|
|
334
|
+
if (typeof onFileDialogCancel === 'function') {
|
|
335
|
+
onFileDialogCancel();
|
|
336
|
+
}
|
|
337
|
+
}
|
|
332
338
|
}
|
|
333
339
|
}, 300);
|
|
334
340
|
}
|
|
@@ -454,7 +460,6 @@ var Dropzone = function (_React$Component) {
|
|
|
454
460
|
|
|
455
461
|
var acceptedFiles = props.acceptedFiles,
|
|
456
462
|
preventDropOnDocument = props.preventDropOnDocument,
|
|
457
|
-
disablePreview = props.disablePreview,
|
|
458
463
|
disableClick = props.disableClick,
|
|
459
464
|
onDropAccepted = props.onDropAccepted,
|
|
460
465
|
onDropRejected = props.onDropRejected,
|
|
@@ -462,7 +467,7 @@ var Dropzone = function (_React$Component) {
|
|
|
462
467
|
maxSize = props.maxSize,
|
|
463
468
|
minSize = props.minSize,
|
|
464
469
|
getDataTransferItems = props.getDataTransferItems,
|
|
465
|
-
divProps = _objectWithoutProperties(props, ['acceptedFiles', 'preventDropOnDocument', '
|
|
470
|
+
divProps = _objectWithoutProperties(props, ['acceptedFiles', 'preventDropOnDocument', 'disableClick', 'onDropAccepted', 'onDropRejected', 'onFileDialogCancel', 'maxSize', 'minSize', 'getDataTransferItems']);
|
|
466
471
|
/* eslint-enable no-unused-vars */
|
|
467
472
|
|
|
468
473
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
@@ -522,11 +527,6 @@ Dropzone.propTypes = {
|
|
|
522
527
|
*/
|
|
523
528
|
disabled: PropTypes.bool,
|
|
524
529
|
|
|
525
|
-
/**
|
|
526
|
-
* Enable/disable preview generation
|
|
527
|
-
*/
|
|
528
|
-
disablePreview: PropTypes.bool,
|
|
529
|
-
|
|
530
530
|
/**
|
|
531
531
|
* If false, allow dropped items to take over the current browser window
|
|
532
532
|
*/
|
|
@@ -664,7 +664,6 @@ Dropzone.propTypes = {
|
|
|
664
664
|
Dropzone.defaultProps = {
|
|
665
665
|
preventDropOnDocument: true,
|
|
666
666
|
disabled: false,
|
|
667
|
-
disablePreview: false,
|
|
668
667
|
disableClick: false,
|
|
669
668
|
inputProps: {},
|
|
670
669
|
multiple: true,
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],t):e.Dropzone=t(e.React,e.PropTypes)}(this,function(e,t){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e,t=t&&t.hasOwnProperty("default")?t.default:t;var n,r,o=(function(e){e.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=13)}([function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){var n=e.exports={version:"2.5.0"};"number"==typeof __e&&(__e=n)},function(e,t,n){e.exports=!n(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(32)("wks"),o=n(9),i=n(0).Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},function(e,t,n){var r=n(0),o=n(2),i=n(8),a=n(22),s=n(10),c=function(e,t,n){var u,l,p,f,d=e&c.F,v=e&c.G,h=e&c.S,g=e&c.P,y=e&c.B,m=v?r:h?r[t]||(r[t]={}):(r[t]||{}).prototype,b=v?o:o[t]||(o[t]={}),D=b.prototype||(b.prototype={});for(u in v&&(n=t),n)p=((l=!d&&m&&void 0!==m[u])?m:n)[u],f=y&&l?s(p,r):g&&"function"==typeof p?s(Function.call,p):p,m&&a(m,u,p,e&c.U),b[u]!=p&&i(b,u,f),g&&D[u]!=p&&(D[u]=p)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t,n){var r=n(16),o=n(21);e.exports=n(3)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t,n){var r=n(24);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var r=n(28),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t,n){t.__esModule=!0,t.default=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return n.some(function(e){var t=e.trim();return"."===t.charAt(0)?r.toLowerCase().endsWith(t.toLowerCase()):t.endsWith("/*")?i===t.replace(/\/.*$/,""):o===t})}return!0},n(14),n(34)},function(e,t,n){n(15),e.exports=n(2).Array.some},function(e,t,n){var r=n(7),o=n(25)(3);r(r.P+r.F*!n(33)([].some,!0),"Array",{some:function(e){return o(this,e,arguments[1])}})},function(e,t,n){var r=n(17),o=n(18),i=n(20),a=Object.defineProperty;t.f=n(3)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(1);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t,n){e.exports=!n(3)&&!n(4)(function(){return 7!=Object.defineProperty(n(19)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var r=n(1),o=n(0).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t,n){var r=n(1);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(0),o=n(8),i=n(23),a=n(9)("src"),s=Function.toString,c=(""+s).split("toString");n(2).inspectSource=function(e){return s.call(e)},(e.exports=function(e,t,n,s){var u="function"==typeof n;u&&(i(n,"name")||o(n,"name",t)),e[t]!==n&&(u&&(i(n,a)||o(n,a,e[t]?""+e[t]:c.join(String(t)))),e===r?e[t]=n:s?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||s.call(this)})},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var r=n(10),o=n(26),i=n(27),a=n(12),s=n(29);e.exports=function(e,t){var n=1==e,c=2==e,u=3==e,l=4==e,p=6==e,f=5==e||p,d=t||s;return function(t,s,v){for(var h,g,y=i(t),m=o(y),b=r(s,v,3),D=a(m.length),x=0,S=n?d(t,D):c?d(t,0):void 0;D>x;x++)if((f||x in m)&&(g=b(h=m[x],x,y),e))if(n)S[x]=g;else if(g)switch(e){case 3:return!0;case 5:return h;case 6:return x;case 2:S.push(h)}else if(l)return!1;return p?-1:u||l?l:S}}},function(e,t,n){var r=n(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){var r=n(11);e.exports=function(e){return Object(r(e))}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){var r=n(30);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,n){var r=n(1),o=n(31),i=n(6)("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},function(e,t,n){var r=n(5);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,t,n){var r=n(4);e.exports=function(e,t){return!!e&&r(function(){t?e.call(null,function(){},1):e.call(null)})}},function(e,t,n){n(35),e.exports=n(2).String.endsWith},function(e,t,n){var r=n(7),o=n(12),i=n(36),a="".endsWith;r(r.P+r.F*n(38)("endsWith"),"String",{endsWith:function(e){var t=i(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,r=o(t.length),s=void 0===n?r:Math.min(o(n),r),c=String(e);return a?a.call(t,c,s):t.slice(s-c.length,s)===c}})},function(e,t,n){var r=n(37),o=n(11);e.exports=function(e,t,n){if(r(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(e))}},function(e,t,n){var r=n(1),o=n(5),i=n(6)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==o(e))}},function(e,t,n){var r=n(6)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,!"/./"[e](t)}catch(e){}}return!0}}])}(n={exports:{}},n.exports),n.exports),i=(r=o)&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r,a=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),c=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},l=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},p="undefined"==typeof document||!document||!document.createElement||"multiple"in document.createElement("input");function f(e,t){return"application/x-moz-file"===e.type||i(e,t)}function d(e){return!e.dataTransfer||Array.prototype.every.call(e.dataTransfer.types,function(e){return"Files"===e||"application/x-moz-file"===e})}function v(e){e.preventDefault()}var h={borderStyle:"solid",backgroundColor:"#eee"},g={borderStyle:"solid",borderColor:"#6c6",backgroundColor:"#eee"},y={borderStyle:"solid",borderColor:"#c66",backgroundColor:"#eee"},m={width:200,height:200,borderWidth:2,borderColor:"#666",borderStyle:"dashed",borderRadius:5},b={opacity:.5},D=function(t){function n(e,t){a(this,n);var r=l(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e,t));return r.renderChildren=function(e,t,n,o){return"function"==typeof e?e(c({},r.state,{isDragActive:t,isDragAccept:n,isDragReject:o,open:r.open})):e},r.composeHandlers=r.composeHandlers.bind(r),r.onClick=r.onClick.bind(r),r.onDocumentDrop=r.onDocumentDrop.bind(r),r.onDragEnter=r.onDragEnter.bind(r),r.onDragLeave=r.onDragLeave.bind(r),r.onDragOver=r.onDragOver.bind(r),r.onDragStart=r.onDragStart.bind(r),r.onDrop=r.onDrop.bind(r),r.onFileDialogCancel=r.onFileDialogCancel.bind(r),r.onInputElementClick=r.onInputElementClick.bind(r),r.open=r.open.bind(r),r.setRef=r.setRef.bind(r),r.setRefs=r.setRefs.bind(r),r.isFileDialogActive=!1,r.state={draggedFiles:[],acceptedFiles:[],rejectedFiles:[]},r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(n,e.Component),s(n,[{key:"componentDidMount",value:function(){var e=this.props.preventDropOnDocument;this.dragTargets=[],e&&(document.addEventListener("dragover",v,!1),document.addEventListener("drop",this.onDocumentDrop,!1)),null!=this.fileInputEl&&this.fileInputEl.addEventListener("click",this.onInputElementClick,!1),window.addEventListener("focus",this.onFileDialogCancel,!1)}},{key:"componentWillUnmount",value:function(){this.props.preventDropOnDocument&&(document.removeEventListener("dragover",v),document.removeEventListener("drop",this.onDocumentDrop)),null!=this.fileInputEl&&this.fileInputEl.removeEventListener("click",this.onInputElementClick,!1),window.removeEventListener("focus",this.onFileDialogCancel,!1)}},{key:"composeHandlers",value:function(e){return this.props.disabled?null:e}},{key:"onDocumentDrop",value:function(e){this.node&&this.node.contains(e.target)||(e.preventDefault(),this.dragTargets=[])}},{key:"onDragStart",value:function(e){this.props.onDragStart&&d(e)&&this.props.onDragStart.call(this,e)}},{key:"onDragEnter",value:function(e){var t=this;e.preventDefault(),-1===this.dragTargets.indexOf(e.target)&&this.dragTargets.push(e.target),e.persist(),d(e)&&(Promise.resolve(this.props.getDataTransferItems(e)).then(function(e){t.setState({draggedFiles:e,isDragActive:!0})}),this.props.onDragEnter&&this.props.onDragEnter.call(this,e))}},{key:"onDragOver",value:function(e){e.preventDefault(),e.stopPropagation();try{e.dataTransfer.dropEffect=this.isFileDialogActive?"none":"copy"}catch(e){}return this.props.onDragOver&&d(e)&&this.props.onDragOver.call(this,e),!1}},{key:"onDragLeave",value:function(e){var t=this;e.preventDefault(),this.dragTargets=this.dragTargets.filter(function(n){return n!==e.target&&t.node.contains(n)}),this.dragTargets.length>0||(this.setState({isDragActive:!1,draggedFiles:[]}),this.props.onDragLeave&&d(e)&&this.props.onDragLeave.call(this,e))}},{key:"onDrop",value:function(e){var t=this,n=this.props,r=n.onDrop,o=n.onDropAccepted,i=n.onDropRejected,a=n.multiple,s=n.disablePreview,c=n.accept,u=n.getDataTransferItems;e.preventDefault(),e.persist(),this.dragTargets=[],this.isFileDialogActive=!1,this.draggedFiles=null,this.setState({isDragActive:!1,draggedFiles:[]}),d(e)&&Promise.resolve(u(e)).then(function(n){var u=[],l=[];n.forEach(function(e){s||(e.preview=window.URL.createObjectURL(e)),f(e,c)&&function(e,t,n){return e.size<=t&&e.size>=n}(e,t.props.maxSize,t.props.minSize)?u.push(e):l.push(e)}),!a&&u.length>1&&l.push.apply(l,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(u.splice(0))),t.setState({acceptedFiles:u,rejectedFiles:l},function(){r&&r.call(t,u,l,e),l.length>0&&i&&i.call(t,l,e),u.length>0&&o&&o.call(t,u,e)})})}},{key:"onClick",value:function(e){var t=this.props,n=t.onClick,r=t.disableClick;n&&n.call(this,e),r||e.isDefaultPrevented()||(e.stopPropagation(),!function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.navigator.userAgent;return function(e){return-1!==e.indexOf("MSIE")||-1!==e.indexOf("Trident/")}(e)||function(e){return-1!==e.indexOf("Edge/")}(e)}()?this.open():setTimeout(this.open,0))}},{key:"onInputElementClick",value:function(e){e.stopPropagation(),this.props.inputProps&&this.props.inputProps.onClick&&this.props.inputProps.onClick(e)}},{key:"onFileDialogCancel",value:function(){var e=this,t=this.props.onFileDialogCancel;this.isFileDialogActive&&setTimeout(function(){null!=e.fileInputEl&&(e.fileInputEl.files.length||(e.isFileDialogActive=!1));"function"==typeof t&&t()},300)}},{key:"setRef",value:function(e){this.node=e}},{key:"setRefs",value:function(e){this.fileInputEl=e}},{key:"open",value:function(){this.isFileDialogActive=!0,this.fileInputEl.value=null,this.fileInputEl.click()}},{key:"render",value:function(){var t=this.props,n=t.accept,r=t.acceptClassName,o=t.activeClassName,i=t.children,a=t.disabled,s=t.disabledClassName,l=t.inputProps,d=t.multiple,v=t.name,D=t.rejectClassName,x=u(t,["accept","acceptClassName","activeClassName","children","disabled","disabledClassName","inputProps","multiple","name","rejectClassName"]),S=x.acceptStyle,C=x.activeStyle,E=x.className,O=void 0===E?"":E,w=x.disabledStyle,j=x.rejectStyle,k=x.style,P=u(x,["acceptStyle","activeStyle","className","disabledStyle","rejectStyle","style"]),F=this.state,A=F.isDragActive,T=F.draggedFiles,_=T.length,I=d||_<=1,L=_>0&&function(e,t){return e.every(function(e){return f(e,t)})}(T,this.props.accept),R=_>0&&(!L||!I),N=!(O||k||C||S||j||w);A&&o&&(O+=" "+o),L&&r&&(O+=" "+r),R&&D&&(O+=" "+D),a&&s&&(O+=" "+s),N&&(k=m,C=h,S=g,j=y,w=b);var z=c({position:"relative"},k);C&&A&&(z=c({},z,C)),S&&L&&(z=c({},z,S)),j&&R&&(z=c({},z,j)),w&&a&&(z=c({},z,w));var M={accept:n,disabled:a,type:"file",style:c({position:"absolute",top:0,right:0,bottom:0,left:0,opacity:1e-5,pointerEvents:"none"},l.style),multiple:p&&d,ref:this.setRefs,onChange:this.onDrop,autoComplete:"off"};v&&v.length&&(M.name=v);var W=u(P,["acceptedFiles","preventDropOnDocument","disablePreview","disableClick","onDropAccepted","onDropRejected","onFileDialogCancel","maxSize","minSize","getDataTransferItems"]);return e.createElement("div",c({className:O,style:z},W,{onClick:this.composeHandlers(this.onClick),onDragStart:this.composeHandlers(this.onDragStart),onDragEnter:this.composeHandlers(this.onDragEnter),onDragOver:this.composeHandlers(this.onDragOver),onDragLeave:this.composeHandlers(this.onDragLeave),onDrop:this.composeHandlers(this.onDrop),ref:this.setRef,"aria-disabled":a}),this.renderChildren(i,A,L,R),e.createElement("input",c({},l,M)))}}]),n}();return D.propTypes={accept:t.oneOfType([t.string,t.arrayOf(t.string)]),children:t.oneOfType([t.node,t.func]),disableClick:t.bool,disabled:t.bool,disablePreview:t.bool,preventDropOnDocument:t.bool,inputProps:t.object,multiple:t.bool,name:t.string,maxSize:t.number,minSize:t.number,className:t.string,activeClassName:t.string,acceptClassName:t.string,rejectClassName:t.string,disabledClassName:t.string,style:t.object,activeStyle:t.object,acceptStyle:t.object,rejectStyle:t.object,disabledStyle:t.object,getDataTransferItems:t.func,onClick:t.func,onDrop:t.func,onDropAccepted:t.func,onDropRejected:t.func,onDragStart:t.func,onDragEnter:t.func,onDragOver:t.func,onDragLeave:t.func,onFileDialogCancel:t.func},D.defaultProps={preventDropOnDocument:!0,disabled:!1,disablePreview:!1,disableClick:!1,inputProps:{},multiple:!0,maxSize:1/0,minSize:0,getDataTransferItems:function(e){var t=[];if(e.dataTransfer){var n=e.dataTransfer;n.files&&n.files.length?t=n.files:n.items&&n.items.length&&(t=n.items)}else e.target&&e.target.files&&(t=e.target.files);return Array.prototype.slice.call(t)}},D});
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL3N0eWxlcy5qcyIsIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUpe2lmKHJbZV0pcmV0dXJuIHJbZV0uZXhwb3J0czt2YXIgbz1yW2VdPXtpOmUsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxuKSxvLmw9ITAsby5leHBvcnRzfXZhciByPXt9O3JldHVybiBuLm09dCxuLmM9cixuLmQ9ZnVuY3Rpb24odCxyLGUpe24ubyh0LHIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6ZX0pfSxuLm49ZnVuY3Rpb24odCl7dmFyIHI9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChyLFwiYVwiLHIpLHJ9LG4ubz1mdW5jdGlvbih0LG4pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKX0sbi5wPVwiXCIsbihuLnM9MTMpfShbZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi41LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz0hcig0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzMikoXCJ3a3NcIiksbz1yKDkpLGk9cigwKS5TeW1ib2wsdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF18fChlW3RdPXUmJmlbdF18fCh1P2k6bykoXCJTeW1ib2wuXCIrdCkpfSkuc3RvcmU9ZX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1yKDIpLGk9cig4KSx1PXIoMjIpLGM9cigxMCksZj1mdW5jdGlvbih0LG4scil7dmFyIGEscyxwLGwsdj10JmYuRix5PXQmZi5HLGg9dCZmLlMsZD10JmYuUCx4PXQmZi5CLGc9eT9lOmg/ZVtuXXx8KGVbbl09e30pOihlW25dfHx7fSkucHJvdG90eXBlLG09eT9vOm9bbl18fChvW25dPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO3kmJihyPW4pO2ZvcihhIGluIHIpcz0hdiYmZyYmdm9pZCAwIT09Z1thXSxwPShzP2c6cilbYV0sbD14JiZzP2MocCxlKTpkJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwP2MoRnVuY3Rpb24uY2FsbCxwKTpwLGcmJnUoZyxhLHAsdCZmLlUpLG1bYV0hPXAmJmkobSxhLGwpLGQmJmJbYV0hPXAmJihiW2FdPXApfTtlLmNvcmU9byxmLkY9MSxmLkc9MixmLlM9NCxmLlA9OCxmLkI9MTYsZi5XPTMyLGYuVT02NCxmLlI9MTI4LHQuZXhwb3J0cz1mfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxNiksbz1yKDIxKTt0LmV4cG9ydHM9cigzKT9mdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZih0LG4sbygxLHIpKX06ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0W25dPXIsdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9MCxlPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ltYm9sKFwiLmNvbmNhdCh2b2lkIDA9PT10P1wiXCI6dCxcIilfXCIsKCsrcitlKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7aWYoZSh0KSx2b2lkIDA9PT1uKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwobixyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLGUpe3JldHVybiB0LmNhbGwobixyLGUpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsZSxvKXtyZXR1cm4gdC5jYWxsKG4scixlLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShuLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT10KXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIit0KTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI4KSxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP28oZSh0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO24uX19lc01vZHVsZT0hMCxuLmRlZmF1bHQ9ZnVuY3Rpb24odCxuKXtpZih0JiZuKXt2YXIgcj1BcnJheS5pc0FycmF5KG4pP246bi5zcGxpdChcIixcIiksZT10Lm5hbWV8fFwiXCIsbz10LnR5cGV8fFwiXCIsaT1vLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik7cmV0dXJuIHIuc29tZShmdW5jdGlvbih0KXt2YXIgbj10LnRyaW0oKTtyZXR1cm5cIi5cIj09PW4uY2hhckF0KDApP2UudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChuLnRvTG93ZXJDYXNlKCkpOm4uZW5kc1dpdGgoXCIvKlwiKT9pPT09bi5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpOm89PT1ufSl9cmV0dXJuITB9LHIoMTQpLHIoMzQpfSxmdW5jdGlvbih0LG4scil7cigxNSksdC5leHBvcnRzPXIoMikuQXJyYXkuc29tZX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNyksbz1yKDI1KSgzKTtlKGUuUCtlLkYqIXIoMzMpKFtdLnNvbWUsITApLFwiQXJyYXlcIix7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTcpLG89cigxOCksaT1yKDIwKSx1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuLmY9cigzKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxuLHIpe2lmKGUodCksbj1pKG4sITApLGUociksbyl0cnl7cmV0dXJuIHUodCxuLHIpfWNhdGNoKHQpe31pZihcImdldFwiaW4gcnx8XCJzZXRcImluIHIpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIHImJih0W25dPXIudmFsdWUpLHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWUodCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDMpJiYhcig0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigxOSkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDApLmRvY3VtZW50LGk9ZShvKSYmZShvLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighZSh0KSlyZXR1cm4gdDt2YXIgcixvO2lmKG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudmFsdWVPZikmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbztpZighbiYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIWUobz1yLmNhbGwodCkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOm59fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1yKDgpLGk9cigyMyksdT1yKDkpKFwic3JjXCIpLGM9RnVuY3Rpb24udG9TdHJpbmcsZj0oXCJcIitjKS5zcGxpdChcInRvU3RyaW5nXCIpO3IoMikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYy5jYWxsKHQpfSwodC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGMpe3ZhciBhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI7YSYmKGkocixcIm5hbWVcIil8fG8ocixcIm5hbWVcIixuKSksdFtuXSE9PXImJihhJiYoaShyLHUpfHxvKHIsdSx0W25dP1wiXCIrdFtuXTpmLmpvaW4oU3RyaW5nKG4pKSkpLHQ9PT1lP3Rbbl09cjpjP3Rbbl0/dFtuXT1yOm8odCxuLHIpOihkZWxldGUgdFtuXSxvKHQsbixyKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLFwidG9TdHJpbmdcIixmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJnRoaXNbdV18fGMuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LG4pe3ZhciByPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiByLmNhbGwodCxuKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTApLG89cigyNiksaT1yKDI3KSx1PXIoMTIpLGM9cigyOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIHI9MT09dCxmPTI9PXQsYT0zPT10LHM9ND09dCxwPTY9PXQsbD01PT10fHxwLHY9bnx8YztyZXR1cm4gZnVuY3Rpb24obixjLHkpe2Zvcih2YXIgaCxkLHg9aShuKSxnPW8oeCksbT1lKGMseSwzKSxiPXUoZy5sZW5ndGgpLF89MCx3PXI/dihuLGIpOmY/dihuLDApOnZvaWQgMDtiPl87XysrKWlmKChsfHxfIGluIGcpJiYoaD1nW19dLGQ9bShoLF8seCksdCkpaWYocil3W19dPWQ7ZWxzZSBpZihkKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBoO2Nhc2UgNjpyZXR1cm4gXztjYXNlIDI6dy5wdXNoKGgpfWVsc2UgaWYocylyZXR1cm4hMTtyZXR1cm4gcD8tMTphfHxzP3M6d319fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09ZSh0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChlKHQpKX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9TWF0aC5jZWlsLGU9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9lOnIpKHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcoZSh0KSkobil9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoMzEpLGk9cig2KShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBvKHQpJiYobj10LmNvbnN0cnVjdG9yLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG58fG4hPT1BcnJheSYmIW8obi5wcm90b3R5cGUpfHwobj12b2lkIDApLGUobikmJm51bGw9PT0obj1uW2ldKSYmKG49dm9pZCAwKSksdm9pZCAwPT09bj9BcnJheTpufX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNSk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVyblwiQXJyYXlcIj09ZSh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89ZVtcIl9fY29yZS1qc19zaGFyZWRfX1wiXXx8KGVbXCJfX2NvcmUtanNfc2hhcmVkX19cIl09e30pO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gb1t0XXx8KG9bdF09e30pfX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuISF0JiZlKGZ1bmN0aW9uKCl7bj90LmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6dC5jYWxsKG51bGwpfSl9fSxmdW5jdGlvbih0LG4scil7cigzNSksdC5leHBvcnRzPXIoMikuU3RyaW5nLmVuZHNXaXRofSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cig3KSxvPXIoMTIpLGk9cigzNiksdT1cIlwiLmVuZHNXaXRoO2UoZS5QK2UuRipyKDM4KShcImVuZHNXaXRoXCIpLFwiU3RyaW5nXCIse2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBuPWkodGhpcyx0LFwiZW5kc1dpdGhcIikscj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlPW8obi5sZW5ndGgpLGM9dm9pZCAwPT09cj9lOk1hdGgubWluKG8ociksZSksZj1TdHJpbmcodCk7cmV0dXJuIHU/dS5jYWxsKG4sZixjKTpuLnNsaWNlKGMtZi5sZW5ndGgsYyk9PT1mfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzNyksbz1yKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUobikpdGhyb3cgVHlwZUVycm9yKFwiU3RyaW5nI1wiK3IrXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO3JldHVybiBTdHJpbmcobyh0KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoNSksaT1yKDYpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBlKHQpJiYodm9pZCAwIT09KG49dFtpXSk/ISFuOlwiUmVnRXhwXCI9PW8odCkpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNikoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49Ly4vO3RyeXtcIi8uL1wiW3RdKG4pfWNhdGNoKHIpe3RyeXtyZXR1cm4gbltlXT0hMSwhXCIvLi9cIlt0XShuKX1jYXRjaCh0KXt9fXJldHVybiEwfX1dKTsiLCJpbXBvcnQgYWNjZXB0cyBmcm9tICdhdHRyLWFjY2VwdCdcblxuZXhwb3J0IGNvbnN0IHN1cHBvcnRNdWx0aXBsZSA9XG4gIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgID8gJ211bHRpcGxlJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG4gICAgOiB0cnVlXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhVHJhbnNmZXJJdGVtcyhldmVudCkge1xuICBsZXQgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gW11cbiAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgIGNvbnN0IGR0ID0gZXZlbnQuZGF0YVRyYW5zZmVyXG5cbiAgICAvLyBOT1RFOiBPbmx5IHRoZSAnZHJvcCcgZXZlbnQgaGFzIGFjY2VzcyB0byBEYXRhVHJhbnNmZXIuZmlsZXMsXG4gICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgYWx3YXlzIGJlIGVtcHR5XG4gICAgaWYgKGR0LmZpbGVzICYmIGR0LmZpbGVzLmxlbmd0aCkge1xuICAgICAgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gZHQuZmlsZXNcbiAgICB9IGVsc2UgaWYgKGR0Lml0ZW1zICYmIGR0Lml0ZW1zLmxlbmd0aCkge1xuICAgICAgLy8gRHVyaW5nIHRoZSBkcmFnIGV2ZW4gdGhlIGRhdGFUcmFuc2Zlci5maWxlcyBpcyBudWxsXG4gICAgICAvLyBidXQgQ2hyb21lIGltcGxlbWVudHMgc29tZSBkcmFnIHN0b3JlLCB3aGljaCBpcyBhY2Nlc2libGUgdmlhIGRhdGFUcmFuc2Zlci5pdGVtc1xuICAgICAgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gZHQuaXRlbXNcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5maWxlcykge1xuICAgIGRhdGFUcmFuc2Zlckl0ZW1zTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlc1xuICB9XG5cbiAgLy8gQ29udmVydCBmcm9tIERhdGFUcmFuc2Zlckl0ZW1zTGlzdCB0byB0aGUgbmF0aXZlIEFycmF5XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkYXRhVHJhbnNmZXJJdGVtc0xpc3QpXG59XG5cbi8vIEZpcmVmb3ggdmVyc2lvbnMgcHJpb3IgdG8gNTMgcmV0dXJuIGEgYm9ndXMgTUlNRSB0eXBlIGZvciBldmVyeSBmaWxlIGRyYWcsIHNvIGRyYWdvdmVycyB3aXRoXG4vLyB0aGF0IE1JTUUgdHlwZSB3aWxsIGFsd2F5cyBiZSBhY2NlcHRlZFxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpIHtcbiAgcmV0dXJuIGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnIHx8IGFjY2VwdHMoZmlsZSwgYWNjZXB0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsZU1hdGNoU2l6ZShmaWxlLCBtYXhTaXplLCBtaW5TaXplKSB7XG4gIHJldHVybiBmaWxlLnNpemUgPD0gbWF4U2l6ZSAmJiBmaWxlLnNpemUgPj0gbWluU2l6ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsRmlsZXNBY2NlcHRlZChmaWxlcywgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlcy5ldmVyeShmaWxlID0+IGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpIHtcbiAgaWYgKCFldnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRGF0YVRyYW5zZmVyL3R5cGVzXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MX0RyYWdfYW5kX0Ryb3BfQVBJL1JlY29tbWVuZGVkX2RyYWdfdHlwZXMjZmlsZVxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmV2ZXJ5LmNhbGwoXG4gICAgZXZ0LmRhdGFUcmFuc2Zlci50eXBlcyxcbiAgICB0eXBlID0+IHR5cGUgPT09ICdGaWxlcycgfHwgdHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzS2luZEZpbGUoaXRlbSkge1xuICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwgJiYgaXRlbS5raW5kID09PSAnZmlsZSdcbn1cblxuLy8gYWxsb3cgdGhlIGVudGlyZSBkb2N1bWVudCB0byBiZSBhIGRyYWcgdGFyZ2V0XG5leHBvcnQgZnVuY3Rpb24gb25Eb2N1bWVudERyYWdPdmVyKGV2dCkge1xuICBldnQucHJldmVudERlZmF1bHQoKVxufVxuXG5mdW5jdGlvbiBpc0llKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSAhPT0gLTEgfHwgdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJykgIT09IC0xXG59XG5cbmZ1bmN0aW9uIGlzRWRnZSh1c2VyQWdlbnQpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5pbmRleE9mKCdFZGdlLycpICE9PSAtMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJZU9yRWRnZSh1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICByZXR1cm4gaXNJZSh1c2VyQWdlbnQpIHx8IGlzRWRnZSh1c2VyQWdlbnQpXG59XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIGFjdGl2ZToge1xuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWUnXG4gIH0sXG4gIGFjY2VwdGVkOiB7XG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyQ29sb3I6ICcjNmM2JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZWVlJ1xuICB9LFxuICByZWplY3RlZDoge1xuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIGJvcmRlckNvbG9yOiAnI2M2NicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZSdcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHdpZHRoOiAyMDAsXG4gICAgaGVpZ2h0OiAyMDAsXG4gICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgYm9yZGVyQ29sb3I6ICcjNjY2JyxcbiAgICBib3JkZXJTdHlsZTogJ2Rhc2hlZCcsXG4gICAgYm9yZGVyUmFkaXVzOiA1XG4gIH0sXG4gIGRpc2FibGVkOiB7XG4gICAgb3BhY2l0eTogMC41XG4gIH1cbn1cbiIsIi8qIGVzbGludCBwcmVmZXItdGVtcGxhdGU6IDAgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHtcbiAgaXNEcmFnRGF0YVdpdGhGaWxlcyxcbiAgc3VwcG9ydE11bHRpcGxlLFxuICBmaWxlQWNjZXB0ZWQsXG4gIGFsbEZpbGVzQWNjZXB0ZWQsXG4gIGZpbGVNYXRjaFNpemUsXG4gIG9uRG9jdW1lbnREcmFnT3ZlcixcbiAgZ2V0RGF0YVRyYW5zZmVySXRlbXMgYXMgZGVmYXVsdEdldERhdGFUcmFuc2Zlckl0ZW0sXG4gIGlzSWVPckVkZ2Vcbn0gZnJvbSAnLi91dGlscydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi91dGlscy9zdHlsZXMnXG5cbmNsYXNzIERyb3B6b25lIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMsIGNvbnRleHQpIHtcbiAgICBzdXBlcihwcm9wcywgY29udGV4dClcbiAgICB0aGlzLmNvbXBvc2VIYW5kbGVycyA9IHRoaXMuY29tcG9zZUhhbmRsZXJzLmJpbmQodGhpcylcbiAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKVxuICAgIHRoaXMub25Eb2N1bWVudERyb3AgPSB0aGlzLm9uRG9jdW1lbnREcm9wLmJpbmQodGhpcylcbiAgICB0aGlzLm9uRHJhZ0VudGVyID0gdGhpcy5vbkRyYWdFbnRlci5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRyYWdMZWF2ZSA9IHRoaXMub25EcmFnTGVhdmUuYmluZCh0aGlzKVxuICAgIHRoaXMub25EcmFnT3ZlciA9IHRoaXMub25EcmFnT3Zlci5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRyYWdTdGFydCA9IHRoaXMub25EcmFnU3RhcnQuYmluZCh0aGlzKVxuICAgIHRoaXMub25Ecm9wID0gdGhpcy5vbkRyb3AuYmluZCh0aGlzKVxuICAgIHRoaXMub25GaWxlRGlhbG9nQ2FuY2VsID0gdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwuYmluZCh0aGlzKVxuICAgIHRoaXMub25JbnB1dEVsZW1lbnRDbGljayA9IHRoaXMub25JbnB1dEVsZW1lbnRDbGljay5iaW5kKHRoaXMpXG4gICAgdGhpcy5vcGVuID0gdGhpcy5vcGVuLmJpbmQodGhpcylcblxuICAgIHRoaXMuc2V0UmVmID0gdGhpcy5zZXRSZWYuYmluZCh0aGlzKVxuICAgIHRoaXMuc2V0UmVmcyA9IHRoaXMuc2V0UmVmcy5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlXG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZHJhZ2dlZEZpbGVzOiBbXSxcbiAgICAgIGFjY2VwdGVkRmlsZXM6IFtdLFxuICAgICAgcmVqZWN0ZWRGaWxlczogW11cbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IHByZXZlbnREcm9wT25Eb2N1bWVudCB9ID0gdGhpcy5wcm9wc1xuICAgIHRoaXMuZHJhZ1RhcmdldHMgPSBbXVxuXG4gICAgaWYgKHByZXZlbnREcm9wT25Eb2N1bWVudCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBvbkRvY3VtZW50RHJhZ092ZXIsIGZhbHNlKVxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMub25Eb2N1bWVudERyb3AsIGZhbHNlKVxuICAgIH1cbiAgICBpZiAodGhpcy5maWxlSW5wdXRFbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmZpbGVJbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbklucHV0RWxlbWVudENsaWNrLCBmYWxzZSlcbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwsIGZhbHNlKVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgY29uc3QgeyBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgfSA9IHRoaXMucHJvcHNcbiAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRG9jdW1lbnREcmFnT3ZlcilcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLm9uRG9jdW1lbnREcm9wKVxuICAgIH1cbiAgICBpZiAodGhpcy5maWxlSW5wdXRFbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmZpbGVJbnB1dEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbklucHV0RWxlbWVudENsaWNrLCBmYWxzZSlcbiAgICB9XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwsIGZhbHNlKVxuICB9XG5cbiAgY29tcG9zZUhhbmRsZXJzKGhhbmRsZXIpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlclxuICB9XG5cbiAgb25Eb2N1bWVudERyb3AoZXZ0KSB7XG4gICAgaWYgKHRoaXMubm9kZSAmJiB0aGlzLm5vZGUuY29udGFpbnMoZXZ0LnRhcmdldCkpIHtcbiAgICAgIC8vIGlmIHdlIGludGVyY2VwdGVkIGFuIGV2ZW50IGZvciBvdXIgaW5zdGFuY2UsIGxldCBpdCBwcm9wYWdhdGUgZG93biB0byB0aGUgaW5zdGFuY2UncyBvbkRyb3AgaGFuZGxlclxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IFtdXG4gIH1cblxuICBvbkRyYWdTdGFydChldnQpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdTdGFydCAmJiBpc0RyYWdEYXRhV2l0aEZpbGVzKGV2dCkpIHtcbiAgICAgIHRoaXMucHJvcHMub25EcmFnU3RhcnQuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuICB9XG5cbiAgb25EcmFnRW50ZXIoZXZ0KSB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIENvdW50IHRoZSBkcm9wem9uZSBhbmQgYW55IGNoaWxkcmVuIHRoYXQgYXJlIGVudGVyZWQuXG4gICAgaWYgKHRoaXMuZHJhZ1RhcmdldHMuaW5kZXhPZihldnQudGFyZ2V0KSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZHJhZ1RhcmdldHMucHVzaChldnQudGFyZ2V0KVxuICAgIH1cblxuICAgIGV2dC5wZXJzaXN0KClcblxuICAgIGlmIChpc0RyYWdEYXRhV2l0aEZpbGVzKGV2dCkpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSh0aGlzLnByb3BzLmdldERhdGFUcmFuc2Zlckl0ZW1zKGV2dCkpLnRoZW4oZHJhZ2dlZEZpbGVzID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgZHJhZ2dlZEZpbGVzLFxuICAgICAgICAgIC8vIERvIG5vdCByZWx5IG9uIGZpbGVzIGZvciB0aGUgZHJhZyBzdGF0ZS4gSXQgZG9lc24ndCB3b3JrIGluIFNhZmFyaS5cbiAgICAgICAgICBpc0RyYWdBY3RpdmU6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0pXG5cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ0VudGVyKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EcmFnRW50ZXIuY2FsbCh0aGlzLCBldnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EcmFnT3ZlcihldnQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHRyeSB7XG4gICAgICAvLyBUaGUgZmlsZSBkaWFsb2cgb24gQ2hyb21lIGFsbG93cyB1c2VycyB0byBkcmFnIGZpbGVzIGZyb20gdGhlIGRpYWxvZyBvbnRvXG4gICAgICAvLyB0aGUgZHJvcHpvbmUsIGNhdXNpbmcgdGhlIGJyb3dzZXIgdGhlIGNyYXNoIHdoZW4gdGhlIGZpbGUgZGlhbG9nIGlzIGNsb3NlZC5cbiAgICAgIC8vIEEgZHJvcCBlZmZlY3Qgb2YgJ25vbmUnIHByZXZlbnRzIHRoZSBmaWxlIGZyb20gYmVpbmcgZHJvcHBlZFxuICAgICAgZXZ0LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gdGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUgPyAnbm9uZScgOiAnY29weScgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBvZiBlcnJvclxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ092ZXIgJiYgaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpKSB7XG4gICAgICB0aGlzLnByb3BzLm9uRHJhZ092ZXIuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRyYWdMZWF2ZShldnQpIHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gT25seSBkZWFjdGl2YXRlIG9uY2UgdGhlIGRyb3B6b25lIGFuZCBhbGwgY2hpbGRyZW4gaGF2ZSBiZWVuIGxlZnQuXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IHRoaXMuZHJhZ1RhcmdldHMuZmlsdGVyKGVsID0+IGVsICE9PSBldnQudGFyZ2V0ICYmIHRoaXMubm9kZS5jb250YWlucyhlbCkpXG4gICAgaWYgKHRoaXMuZHJhZ1RhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgZHJhZ2dpbmcgZmlsZXMgc3RhdGVcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gICAgICBkcmFnZ2VkRmlsZXM6IFtdXG4gICAgfSlcblxuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ0xlYXZlICYmIGlzRHJhZ0RhdGFXaXRoRmlsZXMoZXZ0KSkge1xuICAgICAgdGhpcy5wcm9wcy5vbkRyYWdMZWF2ZS5jYWxsKHRoaXMsIGV2dClcbiAgICB9XG4gIH1cblxuICBvbkRyb3AoZXZ0KSB7XG4gICAgY29uc3Qge1xuICAgICAgb25Ecm9wLFxuICAgICAgb25Ecm9wQWNjZXB0ZWQsXG4gICAgICBvbkRyb3BSZWplY3RlZCxcbiAgICAgIG11bHRpcGxlLFxuICAgICAgZGlzYWJsZVByZXZpZXcsXG4gICAgICBhY2NlcHQsXG4gICAgICBnZXREYXRhVHJhbnNmZXJJdGVtc1xuICAgIH0gPSB0aGlzLnByb3BzXG5cbiAgICAvLyBTdG9wIGRlZmF1bHQgYnJvd3NlciBiZWhhdmlvclxuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyBQZXJzaXN0IGV2ZW50IGZvciBsYXRlciB1c2FnZVxuICAgIGV2dC5wZXJzaXN0KClcblxuICAgIC8vIFJlc2V0IHRoZSBjb3VudGVyIGFsb25nIHdpdGggdGhlIGRyYWcgb24gYSBkcm9wLlxuICAgIHRoaXMuZHJhZ1RhcmdldHMgPSBbXVxuICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gZmFsc2VcblxuICAgIC8vIENsZWFyIGZpbGVzIHZhbHVlXG4gICAgdGhpcy5kcmFnZ2VkRmlsZXMgPSBudWxsXG5cbiAgICAvLyBSZXNldCBkcmFnIHN0YXRlXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgZHJhZ2dlZEZpbGVzOiBbXVxuICAgIH0pXG5cbiAgICBpZiAoaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpKSB7XG4gICAgICBQcm9taXNlLnJlc29sdmUoZ2V0RGF0YVRyYW5zZmVySXRlbXMoZXZ0KSkudGhlbihmaWxlTGlzdCA9PiB7XG4gICAgICAgIGNvbnN0IGFjY2VwdGVkRmlsZXMgPSBbXVxuICAgICAgICBjb25zdCByZWplY3RlZEZpbGVzID0gW11cblxuICAgICAgICBmaWxlTGlzdC5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgICAgIGlmICghZGlzYWJsZVByZXZpZXcpIHtcbiAgICAgICAgICAgIGZpbGUucHJldmlldyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSAmJlxuICAgICAgICAgICAgZmlsZU1hdGNoU2l6ZShmaWxlLCB0aGlzLnByb3BzLm1heFNpemUsIHRoaXMucHJvcHMubWluU2l6ZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXMucHVzaChmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3RlZEZpbGVzLnB1c2goZmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFtdWx0aXBsZSAmJiBhY2NlcHRlZEZpbGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyBpZiBub3QgaW4gbXVsdGkgbW9kZSBhZGQgYW55IGV4dHJhIGFjY2VwdGVkIGZpbGVzIHRvIHJlamVjdGVkLlxuICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBlbmQgdXNlcnMgdG8gZWFzaWx5IGlnbm9yZSBhIG11bHRpIGZpbGUgZHJvcCBpbiBcInNpbmdsZVwiIG1vZGUuXG4gICAgICAgICAgcmVqZWN0ZWRGaWxlcy5wdXNoKC4uLmFjY2VwdGVkRmlsZXMuc3BsaWNlKDApKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGBhY2NlcHRlZEZpbGVzYCBhbmQgYHJlamVjdGVkRmlsZXNgIHN0YXRlXG4gICAgICAgIC8vIFRoaXMgd2lsbCBtYWtlIGNoaWxkcmVuIHJlbmRlciBmdW5jdGlvbnMgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGVcbiAgICAgICAgLy8gdmFsdWVzXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBhY2NlcHRlZEZpbGVzLCByZWplY3RlZEZpbGVzIH0sICgpID0+IHtcbiAgICAgICAgICBpZiAob25Ecm9wKSB7XG4gICAgICAgICAgICBvbkRyb3AuY2FsbCh0aGlzLCBhY2NlcHRlZEZpbGVzLCByZWplY3RlZEZpbGVzLCBldnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlamVjdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BSZWplY3RlZCkge1xuICAgICAgICAgICAgb25Ecm9wUmVqZWN0ZWQuY2FsbCh0aGlzLCByZWplY3RlZEZpbGVzLCBldnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BBY2NlcHRlZCkge1xuICAgICAgICAgICAgb25Ecm9wQWNjZXB0ZWQuY2FsbCh0aGlzLCBhY2NlcHRlZEZpbGVzLCBldnQpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBvbkNsaWNrKGV2dCkge1xuICAgIGNvbnN0IHsgb25DbGljaywgZGlzYWJsZUNsaWNrIH0gPSB0aGlzLnByb3BzXG5cbiAgICAvLyBpZiBvbkNsaWNrIHByb3AgaXMgZ2l2ZW4sIHJ1biBpdCBmaXJzdFxuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICBvbkNsaWNrLmNhbGwodGhpcywgZXZ0KVxuICAgIH1cblxuICAgIC8vIGlmIGRpc2FibGVDbGljayBpcyBub3Qgc2V0IGFuZCB0aGUgZXZlbnQgaGFzbid0IGJlZW4gZGVmYXVsdCBwcmVmZW50ZWQgd2l0aGluXG4gICAgLy8gdGhlIG9uQ2xpY2sgbGlzdGVuZXIsIG9wZW4gdGhlIGZpbGUgZGlhbG9nXG4gICAgaWYgKCFkaXNhYmxlQ2xpY2sgJiYgIWV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAgIC8vIGluIElFMTEvRWRnZSB0aGUgZmlsZS1icm93c2VyIGRpYWxvZyBpcyBibG9ja2luZywgZW5zdXJlIHRoaXMgaXMgYmVoaW5kIHNldFRpbWVvdXRcbiAgICAgIC8vIHRoaXMgaXMgc28gcmVhY3QgY2FuIGhhbmRsZSBzdGF0ZSBjaGFuZ2VzIGluIHRoZSBvbkNsaWNrIHByb3AgYWJvdmUgYWJvdmVcbiAgICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy80NTBcbiAgICAgIGlmIChpc0llT3JFZGdlKCkpIHtcbiAgICAgICAgc2V0VGltZW91dCh0aGlzLm9wZW4sIDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wZW4oKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXRFbGVtZW50Q2xpY2soZXZ0KSB7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHRoaXMucHJvcHMuaW5wdXRQcm9wcyAmJiB0aGlzLnByb3BzLmlucHV0UHJvcHMub25DbGljaykge1xuICAgICAgdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2xpY2soZXZ0KVxuICAgIH1cbiAgfVxuXG4gIG9uRmlsZURpYWxvZ0NhbmNlbCgpIHtcbiAgICAvLyB0aW1lb3V0IHdpbGwgbm90IHJlY29nbml6ZSBjb250ZXh0IG9mIHRoaXMgbWV0aG9kXG4gICAgY29uc3QgeyBvbkZpbGVEaWFsb2dDYW5jZWwgfSA9IHRoaXMucHJvcHNcbiAgICAvLyBleGVjdXRlIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIEZpbGVEaWFsb2cgaXMgb3BlbmVkIGluIHRoZSBicm93c2VyXG4gICAgaWYgKHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlucHV0RWwgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIFJldHVybnMgYW4gb2JqZWN0IGFzIEZpbGVMaXN0XG4gICAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gdGhpcy5maWxlSW5wdXRFbFxuXG4gICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9uRmlsZURpYWxvZ0NhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uRmlsZURpYWxvZ0NhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH0sIDMwMClcbiAgICB9XG4gIH1cblxuICBzZXRSZWYocmVmKSB7XG4gICAgdGhpcy5ub2RlID0gcmVmXG4gIH1cblxuICBzZXRSZWZzKHJlZikge1xuICAgIHRoaXMuZmlsZUlucHV0RWwgPSByZWZcbiAgfVxuICAvKipcbiAgICogT3BlbiBzeXN0ZW0gZmlsZSB1cGxvYWQgZGlhbG9nLlxuICAgKlxuICAgKiBAcHVibGljXG4gICAqL1xuICBvcGVuKCkge1xuICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gdHJ1ZVxuICAgIHRoaXMuZmlsZUlucHV0RWwudmFsdWUgPSBudWxsXG4gICAgdGhpcy5maWxlSW5wdXRFbC5jbGljaygpXG4gIH1cblxuICByZW5kZXJDaGlsZHJlbiA9IChjaGlsZHJlbiwgaXNEcmFnQWN0aXZlLCBpc0RyYWdBY2NlcHQsIGlzRHJhZ1JlamVjdCkgPT4ge1xuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbih7XG4gICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgIGlzRHJhZ0FjdGl2ZSxcbiAgICAgICAgaXNEcmFnQWNjZXB0LFxuICAgICAgICBpc0RyYWdSZWplY3QsXG4gICAgICAgIG9wZW46IHRoaXMub3BlblxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWNjZXB0LFxuICAgICAgYWNjZXB0Q2xhc3NOYW1lLFxuICAgICAgYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc2FibGVkQ2xhc3NOYW1lLFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIG11bHRpcGxlLFxuICAgICAgbmFtZSxcbiAgICAgIHJlamVjdENsYXNzTmFtZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgbGV0IHtcbiAgICAgIGFjY2VwdFN0eWxlLFxuICAgICAgYWN0aXZlU3R5bGUsXG4gICAgICBjbGFzc05hbWUgPSAnJyxcbiAgICAgIGRpc2FibGVkU3R5bGUsXG4gICAgICByZWplY3RTdHlsZSxcbiAgICAgIHN0eWxlLFxuICAgICAgLi4ucHJvcHMgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItY29uc3RcbiAgICB9ID0gcmVzdFxuXG4gICAgY29uc3QgeyBpc0RyYWdBY3RpdmUsIGRyYWdnZWRGaWxlcyB9ID0gdGhpcy5zdGF0ZVxuICAgIGNvbnN0IGZpbGVzQ291bnQgPSBkcmFnZ2VkRmlsZXMubGVuZ3RoXG4gICAgY29uc3QgaXNNdWx0aXBsZUFsbG93ZWQgPSBtdWx0aXBsZSB8fCBmaWxlc0NvdW50IDw9IDFcbiAgICBjb25zdCBpc0RyYWdBY2NlcHQgPSBmaWxlc0NvdW50ID4gMCAmJiBhbGxGaWxlc0FjY2VwdGVkKGRyYWdnZWRGaWxlcywgdGhpcy5wcm9wcy5hY2NlcHQpXG4gICAgY29uc3QgaXNEcmFnUmVqZWN0ID0gZmlsZXNDb3VudCA+IDAgJiYgKCFpc0RyYWdBY2NlcHQgfHwgIWlzTXVsdGlwbGVBbGxvd2VkKVxuICAgIGNvbnN0IG5vU3R5bGVzID1cbiAgICAgICFjbGFzc05hbWUgJiYgIXN0eWxlICYmICFhY3RpdmVTdHlsZSAmJiAhYWNjZXB0U3R5bGUgJiYgIXJlamVjdFN0eWxlICYmICFkaXNhYmxlZFN0eWxlXG5cbiAgICBpZiAoaXNEcmFnQWN0aXZlICYmIGFjdGl2ZUNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9ICcgJyArIGFjdGl2ZUNsYXNzTmFtZVxuICAgIH1cbiAgICBpZiAoaXNEcmFnQWNjZXB0ICYmIGFjY2VwdENsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9ICcgJyArIGFjY2VwdENsYXNzTmFtZVxuICAgIH1cbiAgICBpZiAoaXNEcmFnUmVqZWN0ICYmIHJlamVjdENsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9ICcgJyArIHJlamVjdENsYXNzTmFtZVxuICAgIH1cbiAgICBpZiAoZGlzYWJsZWQgJiYgZGlzYWJsZWRDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnICcgKyBkaXNhYmxlZENsYXNzTmFtZVxuICAgIH1cblxuICAgIGlmIChub1N0eWxlcykge1xuICAgICAgc3R5bGUgPSBzdHlsZXMuZGVmYXVsdFxuICAgICAgYWN0aXZlU3R5bGUgPSBzdHlsZXMuYWN0aXZlXG4gICAgICBhY2NlcHRTdHlsZSA9IHN0eWxlcy5hY2NlcHRlZFxuICAgICAgcmVqZWN0U3R5bGUgPSBzdHlsZXMucmVqZWN0ZWRcbiAgICAgIGRpc2FibGVkU3R5bGUgPSBzdHlsZXMuZGlzYWJsZWRcbiAgICB9XG5cbiAgICBsZXQgYXBwbGllZFN0eWxlID0geyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgLi4uc3R5bGUgfVxuICAgIGlmIChhY3RpdmVTdHlsZSAmJiBpc0RyYWdBY3RpdmUpIHtcbiAgICAgIGFwcGxpZWRTdHlsZSA9IHtcbiAgICAgICAgLi4uYXBwbGllZFN0eWxlLFxuICAgICAgICAuLi5hY3RpdmVTdHlsZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWNjZXB0U3R5bGUgJiYgaXNEcmFnQWNjZXB0KSB7XG4gICAgICBhcHBsaWVkU3R5bGUgPSB7XG4gICAgICAgIC4uLmFwcGxpZWRTdHlsZSxcbiAgICAgICAgLi4uYWNjZXB0U3R5bGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlamVjdFN0eWxlICYmIGlzRHJhZ1JlamVjdCkge1xuICAgICAgYXBwbGllZFN0eWxlID0ge1xuICAgICAgICAuLi5hcHBsaWVkU3R5bGUsXG4gICAgICAgIC4uLnJlamVjdFN0eWxlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkaXNhYmxlZFN0eWxlICYmIGRpc2FibGVkKSB7XG4gICAgICBhcHBsaWVkU3R5bGUgPSB7XG4gICAgICAgIC4uLmFwcGxpZWRTdHlsZSxcbiAgICAgICAgLi4uZGlzYWJsZWRTdHlsZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlucHV0QXR0cmlidXRlcyA9IHtcbiAgICAgIGFjY2VwdCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgb3BhY2l0eTogMC4wMDAwMSxcbiAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAuLi5pbnB1dFByb3BzLnN0eWxlXG4gICAgICB9LFxuICAgICAgbXVsdGlwbGU6IHN1cHBvcnRNdWx0aXBsZSAmJiBtdWx0aXBsZSxcbiAgICAgIHJlZjogdGhpcy5zZXRSZWZzLFxuICAgICAgb25DaGFuZ2U6IHRoaXMub25Ecm9wLFxuICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJ1xuICAgIH1cblxuICAgIGlmIChuYW1lICYmIG5hbWUubGVuZ3RoKSB7XG4gICAgICBpbnB1dEF0dHJpYnV0ZXMubmFtZSA9IG5hbWVcbiAgICB9XG5cbiAgICAvLyBEZXN0cnVjdHVyZSBjdXN0b20gcHJvcHMgYXdheSBmcm9tIHByb3BzIHVzZWQgZm9yIHRoZSBkaXYgZWxlbWVudFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgY29uc3Qge1xuICAgICAgYWNjZXB0ZWRGaWxlcyxcbiAgICAgIHByZXZlbnREcm9wT25Eb2N1bWVudCxcbiAgICAgIGRpc2FibGVQcmV2aWV3LFxuICAgICAgZGlzYWJsZUNsaWNrLFxuICAgICAgb25Ecm9wQWNjZXB0ZWQsXG4gICAgICBvbkRyb3BSZWplY3RlZCxcbiAgICAgIG9uRmlsZURpYWxvZ0NhbmNlbCxcbiAgICAgIG1heFNpemUsXG4gICAgICBtaW5TaXplLFxuICAgICAgZ2V0RGF0YVRyYW5zZmVySXRlbXMsXG4gICAgICAuLi5kaXZQcm9wc1xuICAgIH0gPSBwcm9wc1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuICAgIC8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgc3R5bGU9e2FwcGxpZWRTdHlsZX1cbiAgICAgICAge1xuICAgICAgICAgIC4uLmRpdlByb3BzIC8qIGV4cGFuZCB1c2VyIHByb3ZpZGVkIHByb3BzIGZpcnN0IHNvIGV2ZW50IGhhbmRsZXJzIGFyZSBuZXZlciBvdmVycmlkZGVuICovXG4gICAgICAgIH1cbiAgICAgICAgb25DbGljaz17dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkNsaWNrKX1cbiAgICAgICAgb25EcmFnU3RhcnQ9e3RoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnU3RhcnQpfVxuICAgICAgICBvbkRyYWdFbnRlcj17dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdFbnRlcil9XG4gICAgICAgIG9uRHJhZ092ZXI9e3RoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnT3Zlcil9XG4gICAgICAgIG9uRHJhZ0xlYXZlPXt0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJhZ0xlYXZlKX1cbiAgICAgICAgb25Ecm9wPXt0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJvcCl9XG4gICAgICAgIHJlZj17dGhpcy5zZXRSZWZ9XG4gICAgICAgIGFyaWEtZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJDaGlsZHJlbihjaGlsZHJlbiwgaXNEcmFnQWN0aXZlLCBpc0RyYWdBY2NlcHQsIGlzRHJhZ1JlamVjdCl9XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmlucHV0UHJvcHMgLyogZXhwYW5kIHVzZXIgcHJvdmlkZWQgaW5wdXRQcm9wcyBmaXJzdCBzbyBpbnB1dEF0dHJpYnV0ZXMgb3ZlcnJpZGUgdGhlbSAqL1xuICAgICAgICAgIH1cbiAgICAgICAgICB7Li4uaW5wdXRBdHRyaWJ1dGVzfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyb3B6b25lXG5cbkRyb3B6b25lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIEFsbG93IHNwZWNpZmljIHR5cGVzIG9mIGZpbGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL29rb25ldC9hdHRyLWFjY2VwdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICogS2VlcCBpbiBtaW5kIHRoYXQgbWltZSB0eXBlIGRldGVybWluYXRpb24gaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBwbGF0Zm9ybXMuIENTViBmaWxlcyxcbiAgICogZm9yIGV4YW1wbGUsIGFyZSByZXBvcnRlZCBhcyB0ZXh0L3BsYWluIHVuZGVyIG1hY09TIGJ1dCBhcyBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwgdW5kZXJcbiAgICogV2luZG93cy4gSW4gc29tZSBjYXNlcyB0aGVyZSBtaWdodCBub3QgYmUgYSBtaW1lIHR5cGUgc2V0IGF0IGFsbC5cbiAgICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtZHJvcHpvbmUvcmVhY3QtZHJvcHpvbmUvaXNzdWVzLzI3NlxuICAgKi9cbiAgYWNjZXB0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKV0pLFxuXG4gIC8qKlxuICAgKiBDb250ZW50cyBvZiB0aGUgZHJvcHpvbmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogRGlzYWxsb3cgY2xpY2tpbmcgb24gdGhlIGRyb3B6b25lIGNvbnRhaW5lciB0byBvcGVuIGZpbGUgZGlhbG9nXG4gICAqL1xuICBkaXNhYmxlQ2xpY2s6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSB0aGUgZHJvcHpvbmUgZW50aXJlbHlcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlL2Rpc2FibGUgcHJldmlldyBnZW5lcmF0aW9uXG4gICAqL1xuICBkaXNhYmxlUHJldmlldzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGZhbHNlLCBhbGxvdyBkcm9wcGVkIGl0ZW1zIHRvIHRha2Ugb3ZlciB0aGUgY3VycmVudCBicm93c2VyIHdpbmRvd1xuICAgKi9cbiAgcHJldmVudERyb3BPbkRvY3VtZW50OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogUGFzcyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgdG8gdGhlIGA8aW5wdXQgdHlwZT1cImZpbGVcIi8+YCB0YWdcbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEFsbG93IGRyb3BwaW5nIG11bHRpcGxlIGZpbGVzXG4gICAqL1xuICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIGBuYW1lYCBhdHRyaWJ1dGUgZm9yIHRoZSBpbnB1dCB0YWdcbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIE1heGltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAgICovXG4gIG1heFNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIE1pbmltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAgICovXG4gIG1pblNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgdG8gYXBwbHkgd2hlbiBkcmFnIGlzIGFjdGl2ZVxuICAgKi9cbiAgYWN0aXZlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgdG8gYXBwbHkgd2hlbiBkcm9wIHdpbGwgYmUgYWNjZXB0ZWRcbiAgICovXG4gIGFjY2VwdENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogY2xhc3NOYW1lIHRvIGFwcGx5IHdoZW4gZHJvcCB3aWxsIGJlIHJlamVjdGVkXG4gICAqL1xuICByZWplY3RDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZSB0byBhcHBseSB3aGVuIGRyb3B6b25lIGlzIGRpc2FibGVkXG4gICAqL1xuICBkaXNhYmxlZENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHkgd2hlbiBkcmFnIGlzIGFjdGl2ZVxuICAgKi9cbiAgYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHkgd2hlbiBkcm9wIHdpbGwgYmUgYWNjZXB0ZWRcbiAgICovXG4gIGFjY2VwdFN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5IHdoZW4gZHJvcCB3aWxsIGJlIHJlamVjdGVkXG4gICAqL1xuICByZWplY3RTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseSB3aGVuIGRyb3B6b25lIGlzIGRpc2FibGVkXG4gICAqL1xuICBkaXNhYmxlZFN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBnZXREYXRhVHJhbnNmZXJJdGVtcyBoYW5kbGVyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXkgb2YgRmlsZSBvYmplY3RzXG4gICAqL1xuICBnZXREYXRhVHJhbnNmZXJJdGVtczogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uQ2xpY2sgY2FsbGJhY2tcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyb3AgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJvcDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcEFjY2VwdGVkIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyb3BBY2NlcHRlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcFJlamVjdGVkIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyb3BSZWplY3RlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ1N0YXJ0IGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ0VudGVyIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdFbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ092ZXIgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ092ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyYWdMZWF2ZSBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgY2FsbGJhY2sgb24gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b24gb2YgdGhlIGZpbGUgZGlhbG9nXG4gICAqL1xuICBvbkZpbGVEaWFsb2dDYW5jZWw6IFByb3BUeXBlcy5mdW5jXG59XG5cbkRyb3B6b25lLmRlZmF1bHRQcm9wcyA9IHtcbiAgcHJldmVudERyb3BPbkRvY3VtZW50OiB0cnVlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGRpc2FibGVQcmV2aWV3OiBmYWxzZSxcbiAgZGlzYWJsZUNsaWNrOiBmYWxzZSxcbiAgaW5wdXRQcm9wczoge30sXG4gIG11bHRpcGxlOiB0cnVlLFxuICBtYXhTaXplOiBJbmZpbml0eSxcbiAgbWluU2l6ZTogMCxcbiAgZ2V0RGF0YVRyYW5zZmVySXRlbXM6IGRlZmF1bHRHZXREYXRhVHJhbnNmZXJJdGVtXG59XG4iXSwibmFtZXMiOlsibW9kdWxlIiwidCIsIm4iLCJlIiwiciIsImV4cG9ydHMiLCJvIiwiaSIsImwiLCJjYWxsIiwibSIsImMiLCJkIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwid2luZG93IiwiTWF0aCIsInNlbGYiLCJGdW5jdGlvbiIsIl9fZyIsInZlcnNpb24iLCJfX2UiLCJhIiwidG9TdHJpbmciLCJzbGljZSIsIlN5bWJvbCIsInUiLCJzdG9yZSIsImYiLCJ2IiwiRiIsInkiLCJHIiwiaCIsIlMiLCJQIiwieCIsIkIiLCJnIiwiYiIsIlUiLCJjb3JlIiwiVyIsIlIiLCJyYW5kb20iLCJjb25jYXQiLCJhcHBseSIsImFyZ3VtZW50cyIsIlR5cGVFcnJvciIsIm1pbiIsIkFycmF5IiwiaXNBcnJheSIsInNwbGl0IiwibmFtZSIsInR5cGUiLCJyZXBsYWNlIiwic29tZSIsInRyaW0iLCJjaGFyQXQiLCJ0b0xvd2VyQ2FzZSIsImVuZHNXaXRoIiwidGhpcyIsInZhbHVlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidmFsdWVPZiIsIndyaXRhYmxlIiwiaW5zcGVjdFNvdXJjZSIsImpvaW4iLCJTdHJpbmciLCJsZW5ndGgiLCJfIiwidyIsInB1c2giLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwiY29uc3RydWN0b3IiLCJzdXBwb3J0TXVsdGlwbGUiLCJmaWxlQWNjZXB0ZWQiLCJmaWxlIiwiYWNjZXB0IiwiYWNjZXB0cyIsImlzRHJhZ0RhdGFXaXRoRmlsZXMiLCJldnQiLCJkYXRhVHJhbnNmZXIiLCJldmVyeSIsInR5cGVzIiwib25Eb2N1bWVudERyYWdPdmVyIiwicHJldmVudERlZmF1bHQiLCJEcm9wem9uZSIsInByb3BzIiwiY29udGV4dCIsInJlbmRlckNoaWxkcmVuIiwiY2hpbGRyZW4iLCJpc0RyYWdBY3RpdmUiLCJpc0RyYWdBY2NlcHQiLCJpc0RyYWdSZWplY3QiLCJfdGhpcyIsInN0YXRlIiwib3BlbiIsImNvbXBvc2VIYW5kbGVycyIsImJpbmQiLCJvbkNsaWNrIiwib25Eb2N1bWVudERyb3AiLCJvbkRyYWdFbnRlciIsIm9uRHJhZ0xlYXZlIiwib25EcmFnT3ZlciIsIm9uRHJhZ1N0YXJ0Iiwib25Ecm9wIiwib25GaWxlRGlhbG9nQ2FuY2VsIiwib25JbnB1dEVsZW1lbnRDbGljayIsInNldFJlZiIsInNldFJlZnMiLCJpc0ZpbGVEaWFsb2dBY3RpdmUiLCJSZWFjdCIsIkNvbXBvbmVudCIsInByZXZlbnREcm9wT25Eb2N1bWVudCIsImRyYWdUYXJnZXRzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImZpbGVJbnB1dEVsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZXIiLCJkaXNhYmxlZCIsIm5vZGUiLCJjb250YWlucyIsInRhcmdldCIsImluZGV4T2YiLCJwZXJzaXN0IiwicmVzb2x2ZSIsImdldERhdGFUcmFuc2Zlckl0ZW1zIiwidGhlbiIsInNldFN0YXRlIiwic3RvcFByb3BhZ2F0aW9uIiwiZHJvcEVmZmVjdCIsImVyciIsImZpbHRlciIsImVsIiwiX3RoaXMzIiwib25Ecm9wQWNjZXB0ZWQiLCJvbkRyb3BSZWplY3RlZCIsIm11bHRpcGxlIiwiZGlzYWJsZVByZXZpZXciLCJkcmFnZ2VkRmlsZXMiLCJhY2NlcHRlZEZpbGVzIiwicmVqZWN0ZWRGaWxlcyIsImZvckVhY2giLCJwcmV2aWV3IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwibWF4U2l6ZSIsIm1pblNpemUiLCJzaXplIiwiZmlsZU1hdGNoU2l6ZSIsIl90aGlzNCIsInNwbGljZSIsImRpc2FibGVDbGljayIsImlzRGVmYXVsdFByZXZlbnRlZCIsInVzZXJBZ2VudCIsIm5hdmlnYXRvciIsImlzSWUiLCJpc0VkZ2UiLCJpc0llT3JFZGdlIiwiaW5wdXRQcm9wcyIsIl90aGlzNSIsImZpbGVzIiwicmVmIiwiY2xpY2siLCJhY2NlcHRDbGFzc05hbWUiLCJhY3RpdmVDbGFzc05hbWUiLCJkaXNhYmxlZENsYXNzTmFtZSIsInJlamVjdENsYXNzTmFtZSIsInJlc3QiLCJhY2NlcHRTdHlsZSIsImFjdGl2ZVN0eWxlIiwiY2xhc3NOYW1lIiwiZGlzYWJsZWRTdHlsZSIsInJlamVjdFN0eWxlIiwic3R5bGUiLCJmaWxlc0NvdW50IiwiaXNNdWx0aXBsZUFsbG93ZWQiLCJhbGxGaWxlc0FjY2VwdGVkIiwibm9TdHlsZXMiLCJzdHlsZXMiLCJhcHBsaWVkU3R5bGUiLCJwb3NpdGlvbiIsImlucHV0QXR0cmlidXRlcyIsImRpdlByb3BzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwib25lT2ZUeXBlIiwic3RyaW5nIiwiYXJyYXlPZiIsImZ1bmMiLCJib29sIiwib2JqZWN0IiwibnVtYmVyIiwiZGVmYXVsdFByb3BzIiwiSW5maW5pdHkiLCJldmVudCIsImRhdGFUcmFuc2Zlckl0ZW1zTGlzdCIsImR0IiwiaXRlbXMiXSwibWFwcGluZ3MiOiJ3WEFBQUEsVUFBZSxTQUFTQyxHQUFHLFNBQVNDLEVBQUVDLEdBQUcsR0FBR0MsRUFBRUQsR0FBRyxPQUFPQyxFQUFFRCxHQUFHRSxRQUFRLElBQUlDLEVBQUVGLEVBQUVELElBQUlJLEVBQUVKLEVBQUVLLEdBQUUsRUFBR0gsWUFBWSxPQUFPSixFQUFFRSxHQUFHTSxLQUFLSCxFQUFFRCxRQUFRQyxFQUFFQSxFQUFFRCxRQUFRSCxHQUFHSSxFQUFFRSxHQUFFLEVBQUdGLEVBQUVELFFBQVEsSUFBSUQsS0FBSyxPQUFPRixFQUFFUSxFQUFFVCxFQUFFQyxFQUFFUyxFQUFFUCxFQUFFRixFQUFFVSxFQUFFLFNBQVNYLEVBQUVHLEVBQUVELEdBQUdELEVBQUVJLEVBQUVMLEVBQUVHLElBQUlTLE9BQU9DLGVBQWViLEVBQUVHLEdBQUdXLGNBQWEsRUFBR0MsWUFBVyxFQUFHQyxJQUFJZCxLQUFLRCxFQUFFQSxFQUFFLFNBQVNELEdBQUcsSUFBSUcsRUFBRUgsR0FBR0EsRUFBRWlCLFdBQVcsV0FBVyxPQUFPakIsRUFBRWtCLFNBQVMsV0FBVyxPQUFPbEIsR0FBRyxPQUFPQyxFQUFFVSxFQUFFUixFQUFFLElBQUlBLEdBQUdBLEdBQUdGLEVBQUVJLEVBQUUsU0FBU0wsRUFBRUMsR0FBRyxPQUFPVyxPQUFPTyxVQUFVQyxlQUFlWixLQUFLUixFQUFFQyxJQUFJQSxFQUFFb0IsRUFBRSxHQUFHcEIsRUFBRUEsRUFBRXFCLEVBQUUsSUFBOWMsRUFBb2QsU0FBU3RCLEVBQUVDLEdBQUcsSUFBSUUsRUFBRUgsRUFBRUksUUFBUSxvQkFBb0JtQixRQUFRQSxPQUFPQyxNQUFNQSxLQUFLRCxPQUFPLG9CQUFvQkUsTUFBTUEsS0FBS0QsTUFBTUEsS0FBS0MsS0FBS0MsU0FBUyxjQUFUQSxHQUEwQixpQkFBaUJDLE1BQU1BLElBQUl4QixJQUFJLFNBQVNILEVBQUVDLEdBQUdELEVBQUVJLFFBQVEsU0FBU0osR0FBRyxNQUFNLGlCQUFpQkEsRUFBRSxPQUFPQSxFQUFFLG1CQUFtQkEsSUFBSSxTQUFTQSxFQUFFQyxHQUFHLElBQUlFLEVBQUVILEVBQUVJLFNBQVN3QixRQUFRLFNBQVMsaUJBQWlCQyxNQUFNQSxJQUFJMUIsSUFBSSxTQUFTSCxFQUFFQyxFQUFFRSxHQUFHSCxFQUFFSSxTQUFTRCxFQUFFLEVBQUZBLENBQUssV0FBVyxPQUFPLEdBQUdTLE9BQU9DLGtCQUFrQixLQUFLRyxJQUFJLFdBQVcsT0FBTyxLQUFLYyxLQUFLLFNBQVM5QixFQUFFQyxHQUFHRCxFQUFFSSxRQUFRLFNBQVNKLEdBQUcsSUFBSSxRQUFRQSxJQUFJLE1BQU1BLEdBQUcsT0FBTSxLQUFNLFNBQVNBLEVBQUVDLEdBQUcsSUFBSUUsS0FBSzRCLFNBQVMvQixFQUFFSSxRQUFRLFNBQVNKLEdBQUcsT0FBT0csRUFBRUssS0FBS1IsR0FBR2dDLE1BQU0sR0FBRyxLQUFLLFNBQVNoQyxFQUFFQyxFQUFFRSxHQUFHLElBQUlELEVBQUVDLEVBQUUsR0FBRkEsQ0FBTSxPQUFPRSxFQUFFRixFQUFFLEdBQUdHLEVBQUVILEVBQUUsR0FBRzhCLE9BQU9DLEVBQUUsbUJBQW1CNUIsR0FBR04sRUFBRUksUUFBUSxTQUFTSixHQUFHLE9BQU9FLEVBQUVGLEtBQUtFLEVBQUVGLEdBQUdrQyxHQUFHNUIsRUFBRU4sS0FBS2tDLEVBQUU1QixFQUFFRCxHQUFHLFVBQVVMLE1BQU1tQyxNQUFNakMsR0FBRyxTQUFTRixFQUFFQyxFQUFFRSxHQUFHLElBQUlELEVBQUVDLEVBQUUsR0FBR0UsRUFBRUYsRUFBRSxHQUFHRyxFQUFFSCxFQUFFLEdBQUcrQixFQUFFL0IsRUFBRSxJQUFJTyxFQUFFUCxFQUFFLElBQUlpQyxFQUFFLFNBQVNwQyxFQUFFQyxFQUFFRSxHQUFHLElBQUkyQixFQUFFUixFQUFFRCxFQUFFZCxFQUFFOEIsRUFBRXJDLEVBQUVvQyxFQUFFRSxFQUFFQyxFQUFFdkMsRUFBRW9DLEVBQUVJLEVBQUVDLEVBQUV6QyxFQUFFb0MsRUFBRU0sRUFBRS9CLEVBQUVYLEVBQUVvQyxFQUFFTyxFQUFFQyxFQUFFNUMsRUFBRW9DLEVBQUVTLEVBQUVDLEVBQUVQLEVBQUVyQyxFQUFFdUMsRUFBRXZDLEVBQUVELEtBQUtDLEVBQUVELFFBQVFDLEVBQUVELFFBQVFrQixVQUFVVixFQUFFOEIsRUFBRWxDLEVBQUVBLEVBQUVKLEtBQUtJLEVBQUVKLE9BQU84QyxFQUFFdEMsRUFBRVUsWUFBWVYsRUFBRVUsY0FBdUIsSUFBSVcsS0FBYlMsSUFBSXBDLEVBQUVGLEdBQVlFLEVBQXlCa0IsSUFBdkJDLEdBQUdlLEdBQUdTLFFBQUcsSUFBU0EsRUFBRWhCLElBQVFnQixFQUFFM0MsR0FBRzJCLEdBQUd2QixFQUFFcUMsR0FBR3RCLEVBQUVaLEVBQUVXLEVBQUVuQixHQUFHUyxHQUFHLG1CQUFtQlUsRUFBRVgsRUFBRWdCLFNBQVNsQixLQUFLYSxHQUFHQSxFQUFFeUIsR0FBR1osRUFBRVksRUFBRWhCLEVBQUVULEVBQUVyQixFQUFFb0MsRUFBRVksR0FBR3ZDLEVBQUVxQixJQUFJVCxHQUFHZixFQUFFRyxFQUFFcUIsRUFBRXZCLEdBQUdJLEdBQUdvQyxFQUFFakIsSUFBSVQsSUFBSTBCLEVBQUVqQixHQUFHVCxJQUFJbkIsRUFBRStDLEtBQUs1QyxFQUFFK0IsRUFBRUUsRUFBRSxFQUFFRixFQUFFSSxFQUFFLEVBQUVKLEVBQUVNLEVBQUUsRUFBRU4sRUFBRU8sRUFBRSxFQUFFUCxFQUFFUyxFQUFFLEdBQUdULEVBQUVjLEVBQUUsR0FBR2QsRUFBRVksRUFBRSxHQUFHWixFQUFFZSxFQUFFLElBQUluRCxFQUFFSSxRQUFRZ0MsR0FBRyxTQUFTcEMsRUFBRUMsRUFBRUUsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLElBQUlFLEVBQUVGLEVBQUUsSUFBSUgsRUFBRUksUUFBUUQsRUFBRSxHQUFHLFNBQVNILEVBQUVDLEVBQUVFLEdBQUcsT0FBT0QsRUFBRWtDLEVBQUVwQyxFQUFFQyxFQUFFSSxFQUFFLEVBQUVGLEtBQUssU0FBU0gsRUFBRUMsRUFBRUUsR0FBRyxPQUFPSCxFQUFFQyxHQUFHRSxFQUFFSCxJQUFJLFNBQVNBLEVBQUVDLEdBQUcsSUFBSUUsRUFBRSxFQUFFRCxFQUFFc0IsS0FBSzRCLFNBQVNwRCxFQUFFSSxRQUFRLFNBQVNKLEdBQUcsTUFBTSxVQUFVcUQsWUFBTyxJQUFTckQsRUFBRSxHQUFHQSxFQUFFLFFBQVFHLEVBQUVELEdBQUc2QixTQUFTLE9BQU8sU0FBUy9CLEVBQUVDLEVBQUVFLEdBQUcsSUFBSUQsRUFBRUMsRUFBRSxJQUFJSCxFQUFFSSxRQUFRLFNBQVNKLEVBQUVDLEVBQUVFLEdBQUcsR0FBR0QsRUFBRUYsUUFBRyxJQUFTQyxFQUFFLE9BQU9ELEVBQUUsT0FBT0csR0FBRyxLQUFLLEVBQUUsT0FBTyxTQUFTQSxHQUFHLE9BQU9ILEVBQUVRLEtBQUtQLEVBQUVFLElBQUksS0FBSyxFQUFFLE9BQU8sU0FBU0EsRUFBRUQsR0FBRyxPQUFPRixFQUFFUSxLQUFLUCxFQUFFRSxFQUFFRCxJQUFJLEtBQUssRUFBRSxPQUFPLFNBQVNDLEVBQUVELEVBQUVHLEdBQUcsT0FBT0wsRUFBRVEsS0FBS1AsRUFBRUUsRUFBRUQsRUFBRUcsSUFBSSxPQUFPLFdBQVcsT0FBT0wsRUFBRXNELE1BQU1yRCxFQUFFc0QsY0FBYyxTQUFTdkQsRUFBRUMsR0FBR0QsRUFBRUksUUFBUSxTQUFTSixHQUFHLFFBQUcsR0FBUUEsRUFBRSxNQUFNd0QsVUFBVSx5QkFBeUJ4RCxHQUFHLE9BQU9BLElBQUksU0FBU0EsRUFBRUMsRUFBRUUsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLElBQUlFLEVBQUVtQixLQUFLaUMsSUFBSXpELEVBQUVJLFFBQVEsU0FBU0osR0FBRyxPQUFPQSxFQUFFLEVBQUVLLEVBQUVILEVBQUVGLEdBQUcsa0JBQWtCLElBQUksU0FBU0EsRUFBRUMsRUFBRUUsR0FBR0YsRUFBZWdCLFlBQVcsRUFBR2hCLEVBQUVpQixRQUFRLFNBQVNsQixFQUFFQyxHQUFHLEdBQUdELEdBQUdDLEVBQUUsQ0FBQyxJQUFJRSxFQUFFdUQsTUFBTUMsUUFBUTFELEdBQUdBLEVBQUVBLEVBQUUyRCxNQUFNLEtBQUsxRCxFQUFFRixFQUFFNkQsTUFBTSxHQUFHeEQsRUFBRUwsRUFBRThELE1BQU0sR0FBR3hELEVBQUVELEVBQUUwRCxRQUFRLFFBQVEsSUFBSSxPQUFPNUQsRUFBRTZELEtBQUssU0FBU2hFLEdBQUcsSUFBSUMsRUFBRUQsRUFBRWlFLE9BQU8sTUFBTSxNQUFNaEUsRUFBRWlFLE9BQU8sR0FBR2hFLEVBQUVpRSxjQUFjQyxTQUFTbkUsRUFBRWtFLGVBQWVsRSxFQUFFbUUsU0FBUyxNQUFNOUQsSUFBSUwsRUFBRThELFFBQVEsUUFBUSxJQUFJMUQsSUFBSUosSUFBSSxPQUFNLEdBQUlFLEVBQUUsSUFBSUEsRUFBRSxLQUFLLFNBQVNILEVBQUVDLEVBQUVFLEdBQUdBLEVBQUUsSUFBSUgsRUFBRUksUUFBUUQsRUFBRSxHQUFHdUQsTUFBTU0sTUFBTSxTQUFTaEUsRUFBRUMsRUFBRUUsR0FBRyxJQUFpQkQsRUFBRUMsRUFBRSxHQUFHRSxFQUFFRixFQUFFLEdBQUZBLENBQU0sR0FBR0QsRUFBRUEsRUFBRXlDLEVBQUV6QyxFQUFFb0MsR0FBR25DLEVBQUUsR0FBRkEsSUFBUzZELE1BQUssR0FBSSxTQUFTQSxLQUFLLFNBQVNoRSxHQUFHLE9BQU9LLEVBQUVnRSxLQUFLckUsRUFBRXVELFVBQVUsUUFBUSxTQUFTdkQsRUFBRUMsRUFBRUUsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLElBQUlFLEVBQUVGLEVBQUUsSUFBSUcsRUFBRUgsRUFBRSxJQUFJK0IsRUFBRXRCLE9BQU9DLGVBQWVaLEVBQUVtQyxFQUFFakMsRUFBRSxHQUFHUyxPQUFPQyxlQUFlLFNBQVNiLEVBQUVDLEVBQUVFLEdBQUcsR0FBR0QsRUFBRUYsR0FBR0MsRUFBRUssRUFBRUwsR0FBRSxHQUFJQyxFQUFFQyxHQUFHRSxFQUFFLElBQUksT0FBTzZCLEVBQUVsQyxFQUFFQyxFQUFFRSxHQUFHLE1BQU1ILElBQUksR0FBRyxRQUFRRyxHQUFHLFFBQVFBLEVBQUUsTUFBTXFELFVBQVUsNEJBQTRCLE1BQU0sVUFBVXJELElBQUlILEVBQUVDLEdBQUdFLEVBQUVtRSxPQUFPdEUsSUFBSSxTQUFTQSxFQUFFQyxFQUFFRSxHQUFHLElBQUlELEVBQUVDLEVBQUUsR0FBR0gsRUFBRUksUUFBUSxTQUFTSixHQUFHLElBQUlFLEVBQUVGLEdBQUcsTUFBTXdELFVBQVV4RCxFQUFFLHNCQUFzQixPQUFPQSxJQUFJLFNBQVNBLEVBQUVDLEVBQUVFLEdBQUdILEVBQUVJLFNBQVNELEVBQUUsS0FBS0EsRUFBRSxFQUFGQSxDQUFLLFdBQVcsT0FBTyxHQUFHUyxPQUFPQyxlQUFlVixFQUFFLEdBQUZBLENBQU0sT0FBTyxLQUFLYSxJQUFJLFdBQVcsT0FBTyxLQUFLYyxLQUFLLFNBQVM5QixFQUFFQyxFQUFFRSxHQUFHLElBQUlELEVBQUVDLEVBQUUsR0FBR0UsRUFBRUYsRUFBRSxHQUFHb0UsU0FBU2pFLEVBQUVKLEVBQUVHLElBQUlILEVBQUVHLEVBQUVtRSxlQUFleEUsRUFBRUksUUFBUSxTQUFTSixHQUFHLE9BQU9NLEVBQUVELEVBQUVtRSxjQUFjeEUsUUFBUSxTQUFTQSxFQUFFQyxFQUFFRSxHQUFHLElBQUlELEVBQUVDLEVBQUUsR0FBR0gsRUFBRUksUUFBUSxTQUFTSixFQUFFQyxHQUFHLElBQUlDLEVBQUVGLEdBQUcsT0FBT0EsRUFBRSxJQUFJRyxFQUFFRSxFQUFFLEdBQUdKLEdBQUcsbUJBQW1CRSxFQUFFSCxFQUFFK0IsWUFBWTdCLEVBQUVHLEVBQUVGLEVBQUVLLEtBQUtSLElBQUksT0FBT0ssRUFBRSxHQUFHLG1CQUFtQkYsRUFBRUgsRUFBRXlFLFdBQVd2RSxFQUFFRyxFQUFFRixFQUFFSyxLQUFLUixJQUFJLE9BQU9LLEVBQUUsSUFBSUosR0FBRyxtQkFBbUJFLEVBQUVILEVBQUUrQixZQUFZN0IsRUFBRUcsRUFBRUYsRUFBRUssS0FBS1IsSUFBSSxPQUFPSyxFQUFFLE1BQU1tRCxVQUFVLDZDQUE2QyxTQUFTeEQsRUFBRUMsR0FBR0QsRUFBRUksUUFBUSxTQUFTSixFQUFFQyxHQUFHLE9BQU9jLGFBQWEsRUFBRWYsR0FBR2MsZUFBZSxFQUFFZCxHQUFHMEUsV0FBVyxFQUFFMUUsR0FBR3NFLE1BQU1yRSxLQUFLLFNBQVNELEVBQUVDLEVBQUVFLEdBQUcsSUFBSUQsRUFBRUMsRUFBRSxHQUFHRSxFQUFFRixFQUFFLEdBQUdHLEVBQUVILEVBQUUsSUFBSStCLEVBQUUvQixFQUFFLEVBQUZBLENBQUssT0FBT08sRUFBRWdCLFNBQVNLLFNBQVNLLEdBQUcsR0FBRzFCLEdBQUdrRCxNQUFNLFlBQVl6RCxFQUFFLEdBQUd3RSxjQUFjLFNBQVMzRSxHQUFHLE9BQU9VLEVBQUVGLEtBQUtSLEtBQUtBLEVBQUVJLFFBQVEsU0FBU0osRUFBRUMsRUFBRUUsRUFBRU8sR0FBRyxJQUFJb0IsRUFBRSxtQkFBbUIzQixFQUFFMkIsSUFBSXhCLEVBQUVILEVBQUUsU0FBU0UsRUFBRUYsRUFBRSxPQUFPRixJQUFJRCxFQUFFQyxLQUFLRSxJQUFJMkIsSUFBSXhCLEVBQUVILEVBQUUrQixJQUFJN0IsRUFBRUYsRUFBRStCLEVBQUVsQyxFQUFFQyxHQUFHLEdBQUdELEVBQUVDLEdBQUdtQyxFQUFFd0MsS0FBS0MsT0FBTzVFLE1BQU1ELElBQUlFLEVBQUVGLEVBQUVDLEdBQUdFLEVBQUVPLEVBQUVWLEVBQUVDLEdBQUdELEVBQUVDLEdBQUdFLEVBQUVFLEVBQUVMLEVBQUVDLEVBQUVFLFdBQVdILEVBQUVDLEdBQUdJLEVBQUVMLEVBQUVDLEVBQUVFLE9BQU91QixTQUFTUCxVQUFVLFdBQVcsV0FBVyxNQUFNLG1CQUFtQmtELE1BQU1BLEtBQUtuQyxJQUFJeEIsRUFBRUYsS0FBSzZELFNBQVMsU0FBU3JFLEVBQUVDLEdBQUcsSUFBSUUsS0FBS2lCLGVBQWVwQixFQUFFSSxRQUFRLFNBQVNKLEVBQUVDLEdBQUcsT0FBT0UsRUFBRUssS0FBS1IsRUFBRUMsS0FBSyxTQUFTRCxFQUFFQyxHQUFHRCxFQUFFSSxRQUFRLFNBQVNKLEdBQUcsR0FBRyxtQkFBbUJBLEVBQUUsTUFBTXdELFVBQVV4RCxFQUFFLHVCQUF1QixPQUFPQSxJQUFJLFNBQVNBLEVBQUVDLEVBQUVFLEdBQUcsSUFBSUQsRUFBRUMsRUFBRSxJQUFJRSxFQUFFRixFQUFFLElBQUlHLEVBQUVILEVBQUUsSUFBSStCLEVBQUUvQixFQUFFLElBQUlPLEVBQUVQLEVBQUUsSUFBSUgsRUFBRUksUUFBUSxTQUFTSixFQUFFQyxHQUFHLElBQUlFLEVBQUUsR0FBR0gsRUFBRW9DLEVBQUUsR0FBR3BDLEVBQUU4QixFQUFFLEdBQUc5QixFQUFFc0IsRUFBRSxHQUFHdEIsRUFBRXFCLEVBQUUsR0FBR3JCLEVBQUVPLEVBQUUsR0FBR1AsR0FBR3FCLEVBQUVnQixFQUFFcEMsR0FBR1MsRUFBRSxPQUFPLFNBQVNULEVBQUVTLEVBQUU2QixHQUFHLElBQUksSUFBSUUsRUFBRTlCLEVBQUVpQyxFQUFFdEMsRUFBRUwsR0FBRzZDLEVBQUV6QyxFQUFFdUMsR0FBR25DLEVBQUVQLEVBQUVRLEVBQUU2QixFQUFFLEdBQUdRLEVBQUViLEVBQUVZLEVBQUVnQyxRQUFRQyxFQUFFLEVBQUVDLEVBQUU3RSxFQUFFa0MsRUFBRXBDLEVBQUU4QyxHQUFHWCxFQUFFQyxFQUFFcEMsRUFBRSxRQUFHLEVBQU84QyxFQUFFZ0MsRUFBRUEsSUFBSSxJQUFJeEUsR0FBR3dFLEtBQUtqQyxLQUFZbkMsRUFBRUYsRUFBVGdDLEVBQUVLLEVBQUVpQyxHQUFTQSxFQUFFbkMsR0FBRzVDLEdBQUcsR0FBR0csRUFBRTZFLEVBQUVELEdBQUdwRSxPQUFPLEdBQUdBLEVBQUUsT0FBT1gsR0FBRyxLQUFLLEVBQUUsT0FBTSxFQUFHLEtBQUssRUFBRSxPQUFPeUMsRUFBRSxLQUFLLEVBQUUsT0FBT3NDLEVBQUUsS0FBSyxFQUFFQyxFQUFFQyxLQUFLeEMsUUFBUSxHQUFHbkIsRUFBRSxPQUFNLEVBQUcsT0FBT0QsR0FBRyxFQUFFUyxHQUFHUixFQUFFQSxFQUFFMEQsS0FBSyxTQUFTaEYsRUFBRUMsRUFBRUUsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLEdBQUdILEVBQUVJLFFBQVFRLE9BQU8sS0FBS3NFLHFCQUFxQixHQUFHdEUsT0FBTyxTQUFTWixHQUFHLE1BQU0sVUFBVUUsRUFBRUYsR0FBR0EsRUFBRTRELE1BQU0sSUFBSWhELE9BQU9aLEtBQUssU0FBU0EsRUFBRUMsRUFBRUUsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLElBQUlILEVBQUVJLFFBQVEsU0FBU0osR0FBRyxPQUFPWSxPQUFPVixFQUFFRixNQUFNLFNBQVNBLEVBQUVDLEdBQUcsSUFBSUUsRUFBRXFCLEtBQUsyRCxLQUFLakYsRUFBRXNCLEtBQUs0RCxNQUFNcEYsRUFBRUksUUFBUSxTQUFTSixHQUFHLE9BQU9xRixNQUFNckYsR0FBR0EsR0FBRyxHQUFHQSxFQUFFLEVBQUVFLEVBQUVDLEdBQUdILEtBQUssU0FBU0EsRUFBRUMsRUFBRUUsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLElBQUlILEVBQUVJLFFBQVEsU0FBU0osRUFBRUMsR0FBRyxPQUFPLElBQUlDLEVBQUVGLEdBQU4sQ0FBVUMsS0FBSyxTQUFTRCxFQUFFQyxFQUFFRSxHQUFHLElBQUlELEVBQUVDLEVBQUUsR0FBR0UsRUFBRUYsRUFBRSxJQUFJRyxFQUFFSCxFQUFFLEVBQUZBLENBQUssV0FBV0gsRUFBRUksUUFBUSxTQUFTSixHQUFHLElBQUlDLEVBQUUsT0FBT0ksRUFBRUwsS0FBcUIsbUJBQWhCQyxFQUFFRCxFQUFFc0YsY0FBa0NyRixJQUFJeUQsUUFBUXJELEVBQUVKLEVBQUVrQixhQUFhbEIsT0FBRSxHQUFRQyxFQUFFRCxJQUFJLFFBQVFBLEVBQUVBLEVBQUVLLE1BQU1MLE9BQUUsU0FBUyxJQUFTQSxFQUFFeUQsTUFBTXpELElBQUksU0FBU0QsRUFBRUMsRUFBRUUsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLEdBQUdILEVBQUVJLFFBQVFzRCxNQUFNQyxTQUFTLFNBQVMzRCxHQUFHLE1BQU0sU0FBU0UsRUFBRUYsS0FBSyxTQUFTQSxFQUFFQyxFQUFFRSxHQUFHLElBQUlELEVBQUVDLEVBQUUsR0FBR0UsRUFBRUgsRUFBRSx3QkFBd0JBLEVBQUUsMEJBQTBCRixFQUFFSSxRQUFRLFNBQVNKLEdBQUcsT0FBT0ssRUFBRUwsS0FBS0ssRUFBRUwsU0FBUyxTQUFTQSxFQUFFQyxFQUFFRSxHQUFHLElBQWlCRCxFQUFFQyxFQUFFLEdBQUdILEVBQUVJLFFBQVEsU0FBU0osRUFBRUMsR0FBRyxRQUFRRCxHQUFHRSxFQUFFLFdBQVdELEVBQUVELEVBQUVRLEtBQUssS0FBSyxhQUFhLEdBQUdSLEVBQUVRLEtBQUssVUFBVSxTQUFTUixFQUFFQyxFQUFFRSxHQUFHQSxFQUFFLElBQUlILEVBQUVJLFFBQVFELEVBQUUsR0FBRzBFLE9BQU9ULFVBQVUsU0FBU3BFLEVBQUVDLEVBQUVFLEdBQUcsSUFBaUJELEVBQUVDLEVBQUUsR0FBR0UsRUFBRUYsRUFBRSxJQUFJRyxFQUFFSCxFQUFFLElBQUkrQixFQUFFLEdBQUdrQyxTQUFTbEUsRUFBRUEsRUFBRXlDLEVBQUV6QyxFQUFFb0MsRUFBRW5DLEVBQUUsR0FBRkEsQ0FBTSxZQUFZLFVBQVVpRSxTQUFTLFNBQVNwRSxHQUFHLElBQUlDLEVBQUVLLEVBQUUrRCxLQUFLckUsRUFBRSxZQUFZRyxFQUFFb0QsVUFBVXVCLE9BQU8sRUFBRXZCLFVBQVUsUUFBRyxFQUFPckQsRUFBRUcsRUFBRUosRUFBRTZFLFFBQVFwRSxPQUFFLElBQVNQLEVBQUVELEVBQUVzQixLQUFLaUMsSUFBSXBELEVBQUVGLEdBQUdELEdBQUdrQyxFQUFFeUMsT0FBTzdFLEdBQUcsT0FBT2tDLEVBQUVBLEVBQUUxQixLQUFLUCxFQUFFbUMsRUFBRTFCLEdBQUdULEVBQUUrQixNQUFNdEIsRUFBRTBCLEVBQUUwQyxPQUFPcEUsS0FBSzBCLE1BQU0sU0FBU3BDLEVBQUVDLEVBQUVFLEdBQUcsSUFBSUQsRUFBRUMsRUFBRSxJQUFJRSxFQUFFRixFQUFFLElBQUlILEVBQUVJLFFBQVEsU0FBU0osRUFBRUMsRUFBRUUsR0FBRyxHQUFHRCxFQUFFRCxHQUFHLE1BQU11RCxVQUFVLFVBQVVyRCxFQUFFLDBCQUEwQixPQUFPMEUsT0FBT3hFLEVBQUVMLE1BQU0sU0FBU0EsRUFBRUMsRUFBRUUsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLEdBQUdFLEVBQUVGLEVBQUUsR0FBR0csRUFBRUgsRUFBRSxFQUFGQSxDQUFLLFNBQVNILEVBQUVJLFFBQVEsU0FBU0osR0FBRyxJQUFJQyxFQUFFLE9BQU9DLEVBQUVGLFVBQUssS0FBVUMsRUFBRUQsRUFBRU0sTUFBTUwsRUFBRSxVQUFVSSxFQUFFTCxNQUFNLFNBQVNBLEVBQUVDLEVBQUVFLEdBQUcsSUFBSUQsRUFBRUMsRUFBRSxFQUFGQSxDQUFLLFNBQVNILEVBQUVJLFFBQVEsU0FBU0osR0FBRyxJQUFJQyxFQUFFLElBQUksSUFBSSxNQUFNRCxHQUFHQyxHQUFHLE1BQU1FLEdBQUcsSUFBSSxPQUFPRixFQUFFQyxJQUFHLEdBQUksTUFBTUYsR0FBR0MsR0FBRyxNQUFNRCxLQUFLLE9BQU0sdTVCQ0UxeE51RixFQUNTLG9CQUFiaEIsV0FBNEJBLFdBQVlBLFNBQVNDLGVBQ3BELGFBQWNELFNBQVNDLGNBQWMsU0EyQnBDLFNBQVNnQixFQUFhQyxFQUFNQyxTQUNaLDJCQUFkRCxFQUFLM0IsTUFBcUM2QixFQUFRRixFQUFNQyxHQVcxRCxTQUFTRSxFQUFvQkMsVUFDN0JBLEVBQUlDLGNBS0ZwQyxNQUFNdkMsVUFBVTRFLE1BQU12RixLQUMzQnFGLEVBQUlDLGFBQWFFLE1BQ2pCLGtCQUFpQixVQUFUbEMsR0FBNkIsMkJBQVRBLElBU3pCLFNBQVNtQyxFQUFtQkosS0FDN0JLLG9DQzNEVyx3QkFDSSx1QkFHSixvQkFDQSx1QkFDSSx1QkFHSixvQkFDQSx1QkFDSSxpQkFHVixXQUNDLGdCQUNLLGNBQ0EsbUJBQ0Esc0JBQ0MsY0FHTCxJQ1JQQyx5QkFDUUMsRUFBT0MsNEVBQ1hELEVBQU9DLGFBOFJmQyxlQUFpQixTQUFDQyxFQUFVQyxFQUFjQyxFQUFjQyxTQUM5QixtQkFBYkgsRUFDRkEsT0FDRkksRUFBS0MseURBSUZELEVBQUtFLFFBR1JOLEtBdlNGTyxnQkFBa0JILEVBQUtHLGdCQUFnQkMsVUFDdkNDLFFBQVVMLEVBQUtLLFFBQVFELFVBQ3ZCRSxlQUFpQk4sRUFBS00sZUFBZUYsVUFDckNHLFlBQWNQLEVBQUtPLFlBQVlILFVBQy9CSSxZQUFjUixFQUFLUSxZQUFZSixVQUMvQkssV0FBYVQsRUFBS1MsV0FBV0wsVUFDN0JNLFlBQWNWLEVBQUtVLFlBQVlOLFVBQy9CTyxPQUFTWCxFQUFLVyxPQUFPUCxVQUNyQlEsbUJBQXFCWixFQUFLWSxtQkFBbUJSLFVBQzdDUyxvQkFBc0JiLEVBQUthLG9CQUFvQlQsVUFDL0NGLEtBQU9GLEVBQUtFLEtBQUtFLFVBRWpCVSxPQUFTZCxFQUFLYyxPQUFPVixVQUNyQlcsUUFBVWYsRUFBS2UsUUFBUVgsVUFFdkJZLG9CQUFxQixJQUVyQmYsK1hBcEJjZ0IsRUFBTUMsOERBNEJqQkMsRUFBMEJ6RCxLQUFLK0IsTUFBL0IwQiwyQkFDSEMsZUFFREQsYUFDT0UsaUJBQWlCLFdBQVkvQixHQUFvQixZQUNqRCtCLGlCQUFpQixPQUFRM0QsS0FBSzRDLGdCQUFnQixJQUVqQyxNQUFwQjVDLEtBQUs0RCxrQkFDRkEsWUFBWUQsaUJBQWlCLFFBQVMzRCxLQUFLbUQscUJBQXFCLFVBRWhFUSxpQkFBaUIsUUFBUzNELEtBQUtrRCxvQkFBb0Isa0RBSXhCbEQsS0FBSytCLE1BQS9CMEIsaUNBRUdJLG9CQUFvQixXQUFZakMsWUFDaENpQyxvQkFBb0IsT0FBUTdELEtBQUs0QyxpQkFFcEIsTUFBcEI1QyxLQUFLNEQsa0JBQ0ZBLFlBQVlDLG9CQUFvQixRQUFTN0QsS0FBS21ELHFCQUFxQixVQUVuRVUsb0JBQW9CLFFBQVM3RCxLQUFLa0Qsb0JBQW9CLDJDQUcvQ1ksVUFDVjlELEtBQUsrQixNQUFNZ0MsU0FDTixLQUdGRCx5Q0FHTXRDLEdBQ1R4QixLQUFLZ0UsTUFBUWhFLEtBQUtnRSxLQUFLQyxTQUFTekMsRUFBSTBDLFlBSXBDckMsc0JBQ0M2QixvREFHS2xDLEdBQ054QixLQUFLK0IsTUFBTWlCLGFBQWV6QixFQUFvQkMsU0FDM0NPLE1BQU1pQixZQUFZN0csS0FBSzZELEtBQU13Qix1Q0FJMUJBLGdCQUNOSyxrQkFHMEMsSUFBMUM3QixLQUFLMEQsWUFBWVMsUUFBUTNDLEVBQUkwQyxjQUMxQlIsWUFBWTlDLEtBQUtZLEVBQUkwQyxVQUd4QkUsVUFFQTdDLEVBQW9CQyxhQUNkNkMsUUFBUXJFLEtBQUsrQixNQUFNdUMscUJBQXFCOUMsSUFBTStDLEtBQUssY0FDcERDLHVDQUdXLE1BSWR4RSxLQUFLK0IsTUFBTWMsa0JBQ1JkLE1BQU1jLFlBQVkxRyxLQUFLNkQsS0FBTXdCLHVDQUs3QkEsS0FFTEssbUJBQ0E0Qyx3QkFLRWhELGFBQWFpRCxXQUFhMUUsS0FBS3NELG1CQUFxQixPQUFTLE9BQ2pFLE1BQU9xQixXQUlMM0UsS0FBSytCLE1BQU1nQixZQUFjeEIsRUFBb0JDLFNBQzFDTyxNQUFNZ0IsV0FBVzVHLEtBQUs2RCxLQUFNd0IsSUFHNUIsc0NBR0dBLGdCQUNOSyxzQkFHQzZCLFlBQWMxRCxLQUFLMEQsWUFBWWtCLE9BQU8sbUJBQU1DLElBQU9yRCxFQUFJMEMsUUFBVVksRUFBS2QsS0FBS0MsU0FBU1ksS0FDckY3RSxLQUFLMEQsWUFBWWpELE9BQVMsU0FLekIrRCx3QkFDVyxvQkFJWnhFLEtBQUsrQixNQUFNZSxhQUFldkIsRUFBb0JDLFNBQzNDTyxNQUFNZSxZQUFZM0csS0FBSzZELEtBQU13QixtQ0FJL0JBLGdCQVNEeEIsS0FBSytCLE1BUFBrQixJQUFBQSxPQUNBOEIsSUFBQUEsZUFDQUMsSUFBQUEsZUFDQUMsSUFBQUEsU0FDQUMsSUFBQUEsZUFDQTdELElBQUFBLE9BQ0FpRCxJQUFBQSx1QkFJRXpDLG1CQUdBdUMsZUFHQ1Ysb0JBQ0FKLG9CQUFxQixPQUdyQjZCLGFBQWUsVUFHZlgsd0JBQ1csb0JBSVpqRCxFQUFvQkMsWUFDZDZDLFFBQVFDLEVBQXFCOUMsSUFBTStDLEtBQUssZ0JBQ3hDYSxLQUNBQyxPQUVHQyxRQUFRLFlBQ1ZKLE1BQ0VLLFFBQVVySSxPQUFPc0ksSUFBSUMsZ0JBQWdCckUsSUFJMUNELEVBQWFDLEVBQU1DLElGbkt4QixTQUF1QkQsRUFBTXNFLEVBQVNDLFVBQ3BDdkUsRUFBS3dFLE1BQVFGLEdBQVd0RSxFQUFLd0UsTUFBUUQsRUVtS2xDRSxDQUFjekUsRUFBTTBFLEVBQUsvRCxNQUFNMkQsUUFBU0ksRUFBSy9ELE1BQU00RCxXQUVyQy9FLEtBQUtRLEtBRUxSLEtBQUtRLE1BSWxCNkQsR0FBWUcsRUFBYzNFLE9BQVMsS0FHeEJHLG9JQUFRd0UsRUFBY1csT0FBTyxPQU14Q3ZCLFVBQVdZLGdCQUFlQyxpQkFBaUIsV0FDMUNwQyxLQUNLOUcsS0FBSzJKLEVBQU1WLEVBQWVDLEVBQWU3RCxHQUc5QzZELEVBQWM1RSxPQUFTLEdBQUt1RSxLQUNmN0ksS0FBSzJKLEVBQU1ULEVBQWU3RCxHQUd2QzRELEVBQWMzRSxPQUFTLEdBQUtzRSxLQUNmNUksS0FBSzJKLEVBQU1WLEVBQWU1RCx1Q0FPM0NBLFNBQzRCeEIsS0FBSytCLE1BQS9CWSxJQUFBQSxRQUFTcUQsSUFBQUEsYUFHYnJELEtBQ014RyxLQUFLNkQsS0FBTXdCLEdBS2hCd0UsR0FBaUJ4RSxFQUFJeUUseUJBQ3BCeEIsbUJGNUtILGVBQW9CeUIseURBQVloSixPQUFPaUosVUFBVUQsaUJBUnhELFNBQWNBLFVBQzBCLElBQS9CQSxFQUFVL0IsUUFBUSxVQUFxRCxJQUFuQytCLEVBQVUvQixRQUFRLFlBUXREaUMsQ0FBS0YsSUFMZCxTQUFnQkEsVUFDeUIsSUFBaENBLEVBQVUvQixRQUFRLFNBSUNrQyxDQUFPSCxHRWdMekJJLFFBR0c5RCxrQkFGTXhDLEtBQUt3QyxLQUFNLGdEQU9SaEIsS0FDZGlELGtCQUNBekUsS0FBSytCLE1BQU13RSxZQUFjdkcsS0FBSytCLE1BQU13RSxXQUFXNUQsY0FDNUNaLE1BQU13RSxXQUFXNUQsUUFBUW5CLDJEQU14QjBCLEVBQXVCbEQsS0FBSytCLE1BQTVCbUIsbUJBRUpsRCxLQUFLc0QsK0JBQ0ksV0FDZSxNQUFwQmtELEVBQUs1QyxjQUVXNEMsRUFBSzVDLFlBQWY2QyxNQUVHaEcsV0FDSjZDLG9CQUFxQixJQUlJLG1CQUF2QkosUUFHVixvQ0FJQXdELFFBQ0ExQyxLQUFPMEMsa0NBR05BLFFBQ0Q5QyxZQUFjOEMsc0NBUWRwRCxvQkFBcUIsT0FDckJNLFlBQVkzRCxNQUFRLFVBQ3BCMkQsWUFBWStDLCtDQTZCYjNHLEtBQUsrQixNQVhQVixJQUFBQSxPQUNBdUYsSUFBQUEsZ0JBQ0FDLElBQUFBLGdCQUNBM0UsSUFBQUEsU0FDQTZCLElBQUFBLFNBQ0ErQyxJQUFBQSxrQkFDQVAsSUFBQUEsV0FDQXRCLElBQUFBLFNBQ0F6RixJQUFBQSxLQUNBdUgsSUFBQUEsZ0JBQ0dDLGlKQUlIQyxFQU9FRCxFQVBGQyxZQUNBQyxFQU1FRixFQU5GRSxjQU1FRixFQUxGRyxVQUFBQSxhQUFZLEtBQ1pDLEVBSUVKLEVBSkZJLGNBQ0FDLEVBR0VMLEVBSEZLLFlBQ0FDLEVBRUVOLEVBRkZNLE1BQ0d2RixJQUNEaUYscUZBRW1DaEgsS0FBS3VDLE1BQXBDSixJQUFBQSxhQUFjZ0QsSUFBQUEsYUFDaEJvQyxFQUFhcEMsRUFBYTFFLE9BQzFCK0csRUFBb0J2QyxHQUFZc0MsR0FBYyxFQUM5Q25GLEVBQWVtRixFQUFhLEdGbFQvQixTQUEwQmQsRUFBT3BGLFVBQy9Cb0YsRUFBTS9FLE1BQU0sbUJBQVFQLEVBQWFDLEVBQU1DLEtFaVRMb0csQ0FBaUJ0QyxFQUFjbkYsS0FBSytCLE1BQU1WLFFBQzNFZ0IsRUFBZWtGLEVBQWEsS0FBT25GLElBQWlCb0YsR0FDcERFLElBQ0hQLEdBQWNHLEdBQVVKLEdBQWdCRCxHQUFnQkksR0FBZ0JELEdBRXZFakYsR0FBZ0IwRSxPQUNMLElBQU1BLEdBRWpCekUsR0FBZ0J3RSxPQUNMLElBQU1BLEdBRWpCdkUsR0FBZ0IwRSxPQUNMLElBQU1BLEdBRWpCaEQsR0FBWStDLE9BQ0QsSUFBTUEsR0FHakJZLE1BQ01DLElBQ01BLElBQ0FBLElBQ0FBLElBQ0VBLE9BR2RDLEtBQWlCQyxTQUFVLFlBQWVQLEdBQzFDSixHQUFlL0UsV0FFWnlGLEVBQ0FWLElBR0hELEdBQWU3RSxXQUVad0YsRUFDQVgsSUFHSEksR0FBZWhGLFdBRVp1RixFQUNBUCxJQUdIRCxHQUFpQnJELFdBRWQ2RCxFQUNBUixRQUlEVSw0QkFHRSx5QkFFTSxlQUNMLFFBQ0UsU0FDQyxPQUNGLFVBQ0csbUJBQ00sUUFDWnZCLEVBQVdlLGdCQUVOcEcsR0FBbUIrRCxNQUN4QmpGLEtBQUtxRCxpQkFDQXJELEtBQUtpRCxvQkFDRCxPQUdaekQsR0FBUUEsRUFBS2lCLFdBQ0NqQixLQUFPQSxPQWdCcEJ1SSxJQUNEaEcsc0xBTUZ3QixtQ0FDYTRELFFBQ0pTLEdBRUZHLFdBRUkvSCxLQUFLeUMsZ0JBQWdCekMsS0FBSzJDLHFCQUN0QjNDLEtBQUt5QyxnQkFBZ0J6QyxLQUFLZ0QseUJBQzFCaEQsS0FBS3lDLGdCQUFnQnpDLEtBQUs2Qyx3QkFDM0I3QyxLQUFLeUMsZ0JBQWdCekMsS0FBSytDLHdCQUN6Qi9DLEtBQUt5QyxnQkFBZ0J6QyxLQUFLOEMsb0JBQy9COUMsS0FBS3lDLGdCQUFnQnpDLEtBQUtpRCxZQUM3QmpELEtBQUtvRCx1QkFDS1csU0FFVDlCLGVBQWVDLEVBQVVDLEVBQWNDLEVBQWNDLGdDQUdwRGtFLEVBRUR1QixxQkFTZGhHLEVBQVNrRyxrQkFRQ0MsRUFBVUMsV0FBV0QsRUFBVUUsT0FBUUYsRUFBVUcsUUFBUUgsRUFBVUUsbUJBS2pFRixFQUFVQyxXQUFXRCxFQUFVakUsS0FBTWlFLEVBQVVJLG9CQUszQ0osRUFBVUssY0FLZEwsRUFBVUssb0JBS0pMLEVBQVVLLDJCQUtITCxFQUFVSyxnQkFLckJMLEVBQVVNLGdCQUtaTixFQUFVSyxVQUtkTCxFQUFVRSxlQUtQRixFQUFVTyxlQUtWUCxFQUFVTyxpQkFLUlAsRUFBVUUsdUJBS0pGLEVBQVVFLHVCQUtWRixFQUFVRSx1QkFLVkYsRUFBVUUseUJBS1JGLEVBQVVFLGFBS3RCRixFQUFVTSxtQkFLSk4sRUFBVU0sbUJBS1ZOLEVBQVVNLG1CQUtWTixFQUFVTSxxQkFLUk4sRUFBVU0sNEJBT0hOLEVBQVVJLGFBTXZCSixFQUFVSSxZQUtYSixFQUFVSSxvQkFLRkosRUFBVUksb0JBS1ZKLEVBQVVJLGlCQUtiSixFQUFVSSxpQkFLVkosRUFBVUksZ0JBS1hKLEVBQVVJLGlCQUtUSixFQUFVSSx3QkFLSEosRUFBVUksTUFHaEN2RyxFQUFTMkcscUNBQ2dCLFlBQ2Isa0JBQ00sZ0JBQ0YsMEJBRUosVUFDREMsRUFBQUEsVUFDQSx1QkYzbkJKLFNBQThCQyxPQUMvQkMsUUFDQUQsRUFBTWxILGFBQWMsS0FDaEJvSCxFQUFLRixFQUFNbEgsYUFJYm9ILEVBQUdwQyxPQUFTb0MsRUFBR3BDLE1BQU1oRyxTQUNDb0ksRUFBR3BDLE1BQ2xCb0MsRUFBR0MsT0FBU0QsRUFBR0MsTUFBTXJJLFdBR05vSSxFQUFHQyxZQUVwQkgsRUFBTXpFLFFBQVV5RSxFQUFNekUsT0FBT3VDLFVBQ2RrQyxFQUFNekUsT0FBT3VDLGNBSWhDcEgsTUFBTXZDLFVBQVVhLE1BQU14QixLQUFLeU0ifQ==
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],t):e.Dropzone=t(e.React,e.PropTypes)}(this,function(e,t){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e,t=t&&t.hasOwnProperty("default")?t.default:t;var n,r,o=(function(e){e.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=13)}([function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){var n=e.exports={version:"2.5.0"};"number"==typeof __e&&(__e=n)},function(e,t,n){e.exports=!n(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(32)("wks"),o=n(9),i=n(0).Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},function(e,t,n){var r=n(0),o=n(2),i=n(8),a=n(22),s=n(10),c=function(e,t,n){var u,l,p,f,d=e&c.F,h=e&c.G,v=e&c.S,g=e&c.P,y=e&c.B,m=h?r:v?r[t]||(r[t]={}):(r[t]||{}).prototype,b=h?o:o[t]||(o[t]={}),D=b.prototype||(b.prototype={});for(u in h&&(n=t),n)p=((l=!d&&m&&void 0!==m[u])?m:n)[u],f=y&&l?s(p,r):g&&"function"==typeof p?s(Function.call,p):p,m&&a(m,u,p,e&c.U),b[u]!=p&&i(b,u,f),g&&D[u]!=p&&(D[u]=p)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t,n){var r=n(16),o=n(21);e.exports=n(3)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t,n){var r=n(24);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var r=n(28),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t,n){t.__esModule=!0,t.default=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return n.some(function(e){var t=e.trim();return"."===t.charAt(0)?r.toLowerCase().endsWith(t.toLowerCase()):t.endsWith("/*")?i===t.replace(/\/.*$/,""):o===t})}return!0},n(14),n(34)},function(e,t,n){n(15),e.exports=n(2).Array.some},function(e,t,n){var r=n(7),o=n(25)(3);r(r.P+r.F*!n(33)([].some,!0),"Array",{some:function(e){return o(this,e,arguments[1])}})},function(e,t,n){var r=n(17),o=n(18),i=n(20),a=Object.defineProperty;t.f=n(3)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(1);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t,n){e.exports=!n(3)&&!n(4)(function(){return 7!=Object.defineProperty(n(19)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var r=n(1),o=n(0).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t,n){var r=n(1);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(0),o=n(8),i=n(23),a=n(9)("src"),s=Function.toString,c=(""+s).split("toString");n(2).inspectSource=function(e){return s.call(e)},(e.exports=function(e,t,n,s){var u="function"==typeof n;u&&(i(n,"name")||o(n,"name",t)),e[t]!==n&&(u&&(i(n,a)||o(n,a,e[t]?""+e[t]:c.join(String(t)))),e===r?e[t]=n:s?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||s.call(this)})},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var r=n(10),o=n(26),i=n(27),a=n(12),s=n(29);e.exports=function(e,t){var n=1==e,c=2==e,u=3==e,l=4==e,p=6==e,f=5==e||p,d=t||s;return function(t,s,h){for(var v,g,y=i(t),m=o(y),b=r(s,h,3),D=a(m.length),x=0,S=n?d(t,D):c?d(t,0):void 0;D>x;x++)if((f||x in m)&&(g=b(v=m[x],x,y),e))if(n)S[x]=g;else if(g)switch(e){case 3:return!0;case 5:return v;case 6:return x;case 2:S.push(v)}else if(l)return!1;return p?-1:u||l?l:S}}},function(e,t,n){var r=n(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){var r=n(11);e.exports=function(e){return Object(r(e))}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){var r=n(30);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,n){var r=n(1),o=n(31),i=n(6)("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},function(e,t,n){var r=n(5);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,t,n){var r=n(4);e.exports=function(e,t){return!!e&&r(function(){t?e.call(null,function(){},1):e.call(null)})}},function(e,t,n){n(35),e.exports=n(2).String.endsWith},function(e,t,n){var r=n(7),o=n(12),i=n(36),a="".endsWith;r(r.P+r.F*n(38)("endsWith"),"String",{endsWith:function(e){var t=i(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,r=o(t.length),s=void 0===n?r:Math.min(o(n),r),c=String(e);return a?a.call(t,c,s):t.slice(s-c.length,s)===c}})},function(e,t,n){var r=n(37),o=n(11);e.exports=function(e,t,n){if(r(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(e))}},function(e,t,n){var r=n(1),o=n(5),i=n(6)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==o(e))}},function(e,t,n){var r=n(6)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,!"/./"[e](t)}catch(e){}}return!0}}])}(n={exports:{}},n.exports),n.exports),i=(r=o)&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r,a=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),c=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},l=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},p="undefined"==typeof document||!document||!document.createElement||"multiple"in document.createElement("input");function f(e,t){return"application/x-moz-file"===e.type||i(e,t)}function d(e){return!e.dataTransfer||Array.prototype.every.call(e.dataTransfer.types,function(e){return"Files"===e||"application/x-moz-file"===e})}function h(e){e.preventDefault()}var v={borderStyle:"solid",backgroundColor:"#eee"},g={borderStyle:"solid",borderColor:"#6c6",backgroundColor:"#eee"},y={borderStyle:"solid",borderColor:"#c66",backgroundColor:"#eee"},m={width:200,height:200,borderWidth:2,borderColor:"#666",borderStyle:"dashed",borderRadius:5},b={opacity:.5},D=function(t){function n(e,t){a(this,n);var r=l(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e,t));return r.renderChildren=function(e,t,n,o){return"function"==typeof e?e(c({},r.state,{isDragActive:t,isDragAccept:n,isDragReject:o,open:r.open})):e},r.composeHandlers=r.composeHandlers.bind(r),r.onClick=r.onClick.bind(r),r.onDocumentDrop=r.onDocumentDrop.bind(r),r.onDragEnter=r.onDragEnter.bind(r),r.onDragLeave=r.onDragLeave.bind(r),r.onDragOver=r.onDragOver.bind(r),r.onDragStart=r.onDragStart.bind(r),r.onDrop=r.onDrop.bind(r),r.onFileDialogCancel=r.onFileDialogCancel.bind(r),r.onInputElementClick=r.onInputElementClick.bind(r),r.open=r.open.bind(r),r.setRef=r.setRef.bind(r),r.setRefs=r.setRefs.bind(r),r.isFileDialogActive=!1,r.state={draggedFiles:[],acceptedFiles:[],rejectedFiles:[]},r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(n,e.Component),s(n,[{key:"componentDidMount",value:function(){var e=this.props.preventDropOnDocument;this.dragTargets=[],e&&(document.addEventListener("dragover",h,!1),document.addEventListener("drop",this.onDocumentDrop,!1)),null!=this.fileInputEl&&this.fileInputEl.addEventListener("click",this.onInputElementClick,!1),window.addEventListener("focus",this.onFileDialogCancel,!1)}},{key:"componentWillUnmount",value:function(){this.props.preventDropOnDocument&&(document.removeEventListener("dragover",h),document.removeEventListener("drop",this.onDocumentDrop)),null!=this.fileInputEl&&this.fileInputEl.removeEventListener("click",this.onInputElementClick,!1),window.removeEventListener("focus",this.onFileDialogCancel,!1)}},{key:"composeHandlers",value:function(e){return this.props.disabled?null:e}},{key:"onDocumentDrop",value:function(e){this.node&&this.node.contains(e.target)||(e.preventDefault(),this.dragTargets=[])}},{key:"onDragStart",value:function(e){e.persist(),this.props.onDragStart&&d(e)&&this.props.onDragStart.call(this,e)}},{key:"onDragEnter",value:function(e){var t=this;e.preventDefault(),-1===this.dragTargets.indexOf(e.target)&&this.dragTargets.push(e.target),e.persist(),d(e)&&(Promise.resolve(this.props.getDataTransferItems(e)).then(function(n){e.isPropagationStopped()||t.setState({draggedFiles:n,isDragActive:!0})}),this.props.onDragEnter&&this.props.onDragEnter.call(this,e))}},{key:"onDragOver",value:function(e){e.preventDefault(),e.persist();try{e.dataTransfer.dropEffect=this.isFileDialogActive?"none":"copy"}catch(e){}return this.props.onDragOver&&d(e)&&this.props.onDragOver.call(this,e),!1}},{key:"onDragLeave",value:function(e){var t=this;e.preventDefault(),e.persist(),this.dragTargets=this.dragTargets.filter(function(n){return n!==e.target&&t.node.contains(n)}),this.dragTargets.length>0||(this.setState({isDragActive:!1,draggedFiles:[]}),this.props.onDragLeave&&d(e)&&this.props.onDragLeave.call(this,e))}},{key:"onDrop",value:function(e){var t=this,n=this.props,r=n.onDrop,o=n.onDropAccepted,i=n.onDropRejected,a=n.multiple,s=n.accept,c=n.getDataTransferItems;e.preventDefault(),e.persist(),this.dragTargets=[],this.isFileDialogActive=!1,this.draggedFiles=null,this.setState({isDragActive:!1,draggedFiles:[]}),d(e)&&Promise.resolve(c(e)).then(function(n){var c=[],u=[];e.isPropagationStopped()||(n.forEach(function(e){f(e,s)&&function(e,t,n){return e.size<=t&&e.size>=n}(e,t.props.maxSize,t.props.minSize)?c.push(e):u.push(e)}),!a&&c.length>1&&u.push.apply(u,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(c.splice(0))),t.setState({acceptedFiles:c,rejectedFiles:u},function(){r&&r.call(t,c,u,e),u.length>0&&i&&i.call(t,u,e),c.length>0&&o&&o.call(t,c,e)}))})}},{key:"onClick",value:function(e){var t=this.props,n=t.onClick,r=t.disableClick;n&&n.call(this,e),r||e.isDefaultPrevented()||(e.stopPropagation(),!function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.navigator.userAgent;return function(e){return-1!==e.indexOf("MSIE")||-1!==e.indexOf("Trident/")}(e)||function(e){return-1!==e.indexOf("Edge/")}(e)}()?this.open():setTimeout(this.open,0))}},{key:"onInputElementClick",value:function(e){e.stopPropagation(),this.props.inputProps&&this.props.inputProps.onClick&&this.props.inputProps.onClick(e)}},{key:"onFileDialogCancel",value:function(){var e=this,t=this.props.onFileDialogCancel;this.isFileDialogActive&&setTimeout(function(){null!=e.fileInputEl&&(e.fileInputEl.files.length||(e.isFileDialogActive=!1,"function"==typeof t&&t()))},300)}},{key:"setRef",value:function(e){this.node=e}},{key:"setRefs",value:function(e){this.fileInputEl=e}},{key:"open",value:function(){this.isFileDialogActive=!0,this.fileInputEl.value=null,this.fileInputEl.click()}},{key:"render",value:function(){var t=this.props,n=t.accept,r=t.acceptClassName,o=t.activeClassName,i=t.children,a=t.disabled,s=t.disabledClassName,l=t.inputProps,d=t.multiple,h=t.name,D=t.rejectClassName,x=u(t,["accept","acceptClassName","activeClassName","children","disabled","disabledClassName","inputProps","multiple","name","rejectClassName"]),S=x.acceptStyle,C=x.activeStyle,E=x.className,O=void 0===E?"":E,j=x.disabledStyle,k=x.rejectStyle,w=x.style,P=u(x,["acceptStyle","activeStyle","className","disabledStyle","rejectStyle","style"]),F=this.state,A=F.isDragActive,T=F.draggedFiles,_=T.length,I=d||_<=1,L=_>0&&function(e,t){return e.every(function(e){return f(e,t)})}(T,this.props.accept),N=_>0&&(!L||!I),R=!(O||w||C||S||k||j);A&&o&&(O+=" "+o),L&&r&&(O+=" "+r),N&&D&&(O+=" "+D),a&&s&&(O+=" "+s),R&&(w=m,C=v,S=g,k=y,j=b);var z=c({position:"relative"},w);C&&A&&(z=c({},z,C)),S&&L&&(z=c({},z,S)),k&&N&&(z=c({},z,k)),j&&a&&(z=c({},z,j));var M={accept:n,disabled:a,type:"file",style:c({position:"absolute",top:0,right:0,bottom:0,left:0,opacity:1e-5,pointerEvents:"none"},l.style),multiple:p&&d,ref:this.setRefs,onChange:this.onDrop,autoComplete:"off"};h&&h.length&&(M.name=h);var W=u(P,["acceptedFiles","preventDropOnDocument","disableClick","onDropAccepted","onDropRejected","onFileDialogCancel","maxSize","minSize","getDataTransferItems"]);return e.createElement("div",c({className:O,style:z},W,{onClick:this.composeHandlers(this.onClick),onDragStart:this.composeHandlers(this.onDragStart),onDragEnter:this.composeHandlers(this.onDragEnter),onDragOver:this.composeHandlers(this.onDragOver),onDragLeave:this.composeHandlers(this.onDragLeave),onDrop:this.composeHandlers(this.onDrop),ref:this.setRef,"aria-disabled":a}),this.renderChildren(i,A,L,N),e.createElement("input",c({},l,M)))}}]),n}();return D.propTypes={accept:t.oneOfType([t.string,t.arrayOf(t.string)]),children:t.oneOfType([t.node,t.func]),disableClick:t.bool,disabled:t.bool,preventDropOnDocument:t.bool,inputProps:t.object,multiple:t.bool,name:t.string,maxSize:t.number,minSize:t.number,className:t.string,activeClassName:t.string,acceptClassName:t.string,rejectClassName:t.string,disabledClassName:t.string,style:t.object,activeStyle:t.object,acceptStyle:t.object,rejectStyle:t.object,disabledStyle:t.object,getDataTransferItems:t.func,onClick:t.func,onDrop:t.func,onDropAccepted:t.func,onDropRejected:t.func,onDragStart:t.func,onDragEnter:t.func,onDragOver:t.func,onDragLeave:t.func,onFileDialogCancel:t.func},D.defaultProps={preventDropOnDocument:!0,disabled:!1,disableClick:!1,inputProps:{},multiple:!0,maxSize:1/0,minSize:0,getDataTransferItems:function(e){var t=[];if(e.dataTransfer){var n=e.dataTransfer;n.files&&n.files.length?t=n.files:n.items&&n.items.length&&(t=n.items)}else e.target&&e.target.files&&(t=e.target.files);return Array.prototype.slice.call(t)}},D});
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL3N0eWxlcy5qcyIsIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUpe2lmKHJbZV0pcmV0dXJuIHJbZV0uZXhwb3J0czt2YXIgbz1yW2VdPXtpOmUsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxuKSxvLmw9ITAsby5leHBvcnRzfXZhciByPXt9O3JldHVybiBuLm09dCxuLmM9cixuLmQ9ZnVuY3Rpb24odCxyLGUpe24ubyh0LHIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6ZX0pfSxuLm49ZnVuY3Rpb24odCl7dmFyIHI9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChyLFwiYVwiLHIpLHJ9LG4ubz1mdW5jdGlvbih0LG4pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKX0sbi5wPVwiXCIsbihuLnM9MTMpfShbZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi41LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz0hcig0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzMikoXCJ3a3NcIiksbz1yKDkpLGk9cigwKS5TeW1ib2wsdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF18fChlW3RdPXUmJmlbdF18fCh1P2k6bykoXCJTeW1ib2wuXCIrdCkpfSkuc3RvcmU9ZX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1yKDIpLGk9cig4KSx1PXIoMjIpLGM9cigxMCksZj1mdW5jdGlvbih0LG4scil7dmFyIGEscyxwLGwsdj10JmYuRix5PXQmZi5HLGg9dCZmLlMsZD10JmYuUCx4PXQmZi5CLGc9eT9lOmg/ZVtuXXx8KGVbbl09e30pOihlW25dfHx7fSkucHJvdG90eXBlLG09eT9vOm9bbl18fChvW25dPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO3kmJihyPW4pO2ZvcihhIGluIHIpcz0hdiYmZyYmdm9pZCAwIT09Z1thXSxwPShzP2c6cilbYV0sbD14JiZzP2MocCxlKTpkJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwP2MoRnVuY3Rpb24uY2FsbCxwKTpwLGcmJnUoZyxhLHAsdCZmLlUpLG1bYV0hPXAmJmkobSxhLGwpLGQmJmJbYV0hPXAmJihiW2FdPXApfTtlLmNvcmU9byxmLkY9MSxmLkc9MixmLlM9NCxmLlA9OCxmLkI9MTYsZi5XPTMyLGYuVT02NCxmLlI9MTI4LHQuZXhwb3J0cz1mfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxNiksbz1yKDIxKTt0LmV4cG9ydHM9cigzKT9mdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZih0LG4sbygxLHIpKX06ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0W25dPXIsdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9MCxlPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ltYm9sKFwiLmNvbmNhdCh2b2lkIDA9PT10P1wiXCI6dCxcIilfXCIsKCsrcitlKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7aWYoZSh0KSx2b2lkIDA9PT1uKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwobixyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLGUpe3JldHVybiB0LmNhbGwobixyLGUpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsZSxvKXtyZXR1cm4gdC5jYWxsKG4scixlLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShuLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT10KXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIit0KTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI4KSxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP28oZSh0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO24uX19lc01vZHVsZT0hMCxuLmRlZmF1bHQ9ZnVuY3Rpb24odCxuKXtpZih0JiZuKXt2YXIgcj1BcnJheS5pc0FycmF5KG4pP246bi5zcGxpdChcIixcIiksZT10Lm5hbWV8fFwiXCIsbz10LnR5cGV8fFwiXCIsaT1vLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik7cmV0dXJuIHIuc29tZShmdW5jdGlvbih0KXt2YXIgbj10LnRyaW0oKTtyZXR1cm5cIi5cIj09PW4uY2hhckF0KDApP2UudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChuLnRvTG93ZXJDYXNlKCkpOm4uZW5kc1dpdGgoXCIvKlwiKT9pPT09bi5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpOm89PT1ufSl9cmV0dXJuITB9LHIoMTQpLHIoMzQpfSxmdW5jdGlvbih0LG4scil7cigxNSksdC5leHBvcnRzPXIoMikuQXJyYXkuc29tZX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNyksbz1yKDI1KSgzKTtlKGUuUCtlLkYqIXIoMzMpKFtdLnNvbWUsITApLFwiQXJyYXlcIix7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTcpLG89cigxOCksaT1yKDIwKSx1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuLmY9cigzKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxuLHIpe2lmKGUodCksbj1pKG4sITApLGUociksbyl0cnl7cmV0dXJuIHUodCxuLHIpfWNhdGNoKHQpe31pZihcImdldFwiaW4gcnx8XCJzZXRcImluIHIpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIHImJih0W25dPXIudmFsdWUpLHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWUodCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDMpJiYhcig0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigxOSkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDApLmRvY3VtZW50LGk9ZShvKSYmZShvLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighZSh0KSlyZXR1cm4gdDt2YXIgcixvO2lmKG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudmFsdWVPZikmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbztpZighbiYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIWUobz1yLmNhbGwodCkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOm59fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMCksbz1yKDgpLGk9cigyMyksdT1yKDkpKFwic3JjXCIpLGM9RnVuY3Rpb24udG9TdHJpbmcsZj0oXCJcIitjKS5zcGxpdChcInRvU3RyaW5nXCIpO3IoMikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYy5jYWxsKHQpfSwodC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLGMpe3ZhciBhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI7YSYmKGkocixcIm5hbWVcIil8fG8ocixcIm5hbWVcIixuKSksdFtuXSE9PXImJihhJiYoaShyLHUpfHxvKHIsdSx0W25dP1wiXCIrdFtuXTpmLmpvaW4oU3RyaW5nKG4pKSkpLHQ9PT1lP3Rbbl09cjpjP3Rbbl0/dFtuXT1yOm8odCxuLHIpOihkZWxldGUgdFtuXSxvKHQsbixyKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLFwidG9TdHJpbmdcIixmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJnRoaXNbdV18fGMuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LG4pe3ZhciByPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiByLmNhbGwodCxuKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTApLG89cigyNiksaT1yKDI3KSx1PXIoMTIpLGM9cigyOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIHI9MT09dCxmPTI9PXQsYT0zPT10LHM9ND09dCxwPTY9PXQsbD01PT10fHxwLHY9bnx8YztyZXR1cm4gZnVuY3Rpb24obixjLHkpe2Zvcih2YXIgaCxkLHg9aShuKSxnPW8oeCksbT1lKGMseSwzKSxiPXUoZy5sZW5ndGgpLF89MCx3PXI/dihuLGIpOmY/dihuLDApOnZvaWQgMDtiPl87XysrKWlmKChsfHxfIGluIGcpJiYoaD1nW19dLGQ9bShoLF8seCksdCkpaWYocil3W19dPWQ7ZWxzZSBpZihkKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBoO2Nhc2UgNjpyZXR1cm4gXztjYXNlIDI6dy5wdXNoKGgpfWVsc2UgaWYocylyZXR1cm4hMTtyZXR1cm4gcD8tMTphfHxzP3M6d319fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09ZSh0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChlKHQpKX19LGZ1bmN0aW9uKHQsbil7dmFyIHI9TWF0aC5jZWlsLGU9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9lOnIpKHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcoZSh0KSkobil9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoMzEpLGk9cig2KShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBvKHQpJiYobj10LmNvbnN0cnVjdG9yLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG58fG4hPT1BcnJheSYmIW8obi5wcm90b3R5cGUpfHwobj12b2lkIDApLGUobikmJm51bGw9PT0obj1uW2ldKSYmKG49dm9pZCAwKSksdm9pZCAwPT09bj9BcnJheTpufX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNSk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVyblwiQXJyYXlcIj09ZSh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89ZVtcIl9fY29yZS1qc19zaGFyZWRfX1wiXXx8KGVbXCJfX2NvcmUtanNfc2hhcmVkX19cIl09e30pO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gb1t0XXx8KG9bdF09e30pfX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuISF0JiZlKGZ1bmN0aW9uKCl7bj90LmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6dC5jYWxsKG51bGwpfSl9fSxmdW5jdGlvbih0LG4scil7cigzNSksdC5leHBvcnRzPXIoMikuU3RyaW5nLmVuZHNXaXRofSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cig3KSxvPXIoMTIpLGk9cigzNiksdT1cIlwiLmVuZHNXaXRoO2UoZS5QK2UuRipyKDM4KShcImVuZHNXaXRoXCIpLFwiU3RyaW5nXCIse2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBuPWkodGhpcyx0LFwiZW5kc1dpdGhcIikscj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlPW8obi5sZW5ndGgpLGM9dm9pZCAwPT09cj9lOk1hdGgubWluKG8ociksZSksZj1TdHJpbmcodCk7cmV0dXJuIHU/dS5jYWxsKG4sZixjKTpuLnNsaWNlKGMtZi5sZW5ndGgsYyk9PT1mfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigzNyksbz1yKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUobikpdGhyb3cgVHlwZUVycm9yKFwiU3RyaW5nI1wiK3IrXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO3JldHVybiBTdHJpbmcobyh0KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxKSxvPXIoNSksaT1yKDYpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBlKHQpJiYodm9pZCAwIT09KG49dFtpXSk/ISFuOlwiUmVnRXhwXCI9PW8odCkpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNikoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49Ly4vO3RyeXtcIi8uL1wiW3RdKG4pfWNhdGNoKHIpe3RyeXtyZXR1cm4gbltlXT0hMSwhXCIvLi9cIlt0XShuKX1jYXRjaCh0KXt9fXJldHVybiEwfX1dKTsiLCJpbXBvcnQgYWNjZXB0cyBmcm9tICdhdHRyLWFjY2VwdCdcblxuZXhwb3J0IGNvbnN0IHN1cHBvcnRNdWx0aXBsZSA9XG4gIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgID8gJ211bHRpcGxlJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG4gICAgOiB0cnVlXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhVHJhbnNmZXJJdGVtcyhldmVudCkge1xuICBsZXQgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gW11cbiAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgIGNvbnN0IGR0ID0gZXZlbnQuZGF0YVRyYW5zZmVyXG5cbiAgICAvLyBOT1RFOiBPbmx5IHRoZSAnZHJvcCcgZXZlbnQgaGFzIGFjY2VzcyB0byBEYXRhVHJhbnNmZXIuZmlsZXMsXG4gICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgYWx3YXlzIGJlIGVtcHR5XG4gICAgaWYgKGR0LmZpbGVzICYmIGR0LmZpbGVzLmxlbmd0aCkge1xuICAgICAgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gZHQuZmlsZXNcbiAgICB9IGVsc2UgaWYgKGR0Lml0ZW1zICYmIGR0Lml0ZW1zLmxlbmd0aCkge1xuICAgICAgLy8gRHVyaW5nIHRoZSBkcmFnIGV2ZW4gdGhlIGRhdGFUcmFuc2Zlci5maWxlcyBpcyBudWxsXG4gICAgICAvLyBidXQgQ2hyb21lIGltcGxlbWVudHMgc29tZSBkcmFnIHN0b3JlLCB3aGljaCBpcyBhY2Nlc2libGUgdmlhIGRhdGFUcmFuc2Zlci5pdGVtc1xuICAgICAgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gZHQuaXRlbXNcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5maWxlcykge1xuICAgIGRhdGFUcmFuc2Zlckl0ZW1zTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlc1xuICB9XG5cbiAgLy8gQ29udmVydCBmcm9tIERhdGFUcmFuc2Zlckl0ZW1zTGlzdCB0byB0aGUgbmF0aXZlIEFycmF5XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkYXRhVHJhbnNmZXJJdGVtc0xpc3QpXG59XG5cbi8vIEZpcmVmb3ggdmVyc2lvbnMgcHJpb3IgdG8gNTMgcmV0dXJuIGEgYm9ndXMgTUlNRSB0eXBlIGZvciBldmVyeSBmaWxlIGRyYWcsIHNvIGRyYWdvdmVycyB3aXRoXG4vLyB0aGF0IE1JTUUgdHlwZSB3aWxsIGFsd2F5cyBiZSBhY2NlcHRlZFxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpIHtcbiAgcmV0dXJuIGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnIHx8IGFjY2VwdHMoZmlsZSwgYWNjZXB0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsZU1hdGNoU2l6ZShmaWxlLCBtYXhTaXplLCBtaW5TaXplKSB7XG4gIHJldHVybiBmaWxlLnNpemUgPD0gbWF4U2l6ZSAmJiBmaWxlLnNpemUgPj0gbWluU2l6ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsRmlsZXNBY2NlcHRlZChmaWxlcywgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlcy5ldmVyeShmaWxlID0+IGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpIHtcbiAgaWYgKCFldnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRGF0YVRyYW5zZmVyL3R5cGVzXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MX0RyYWdfYW5kX0Ryb3BfQVBJL1JlY29tbWVuZGVkX2RyYWdfdHlwZXMjZmlsZVxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmV2ZXJ5LmNhbGwoXG4gICAgZXZ0LmRhdGFUcmFuc2Zlci50eXBlcyxcbiAgICB0eXBlID0+IHR5cGUgPT09ICdGaWxlcycgfHwgdHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzS2luZEZpbGUoaXRlbSkge1xuICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwgJiYgaXRlbS5raW5kID09PSAnZmlsZSdcbn1cblxuLy8gYWxsb3cgdGhlIGVudGlyZSBkb2N1bWVudCB0byBiZSBhIGRyYWcgdGFyZ2V0XG5leHBvcnQgZnVuY3Rpb24gb25Eb2N1bWVudERyYWdPdmVyKGV2dCkge1xuICBldnQucHJldmVudERlZmF1bHQoKVxufVxuXG5mdW5jdGlvbiBpc0llKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSAhPT0gLTEgfHwgdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJykgIT09IC0xXG59XG5cbmZ1bmN0aW9uIGlzRWRnZSh1c2VyQWdlbnQpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5pbmRleE9mKCdFZGdlLycpICE9PSAtMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJZU9yRWRnZSh1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICByZXR1cm4gaXNJZSh1c2VyQWdlbnQpIHx8IGlzRWRnZSh1c2VyQWdlbnQpXG59XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIGFjdGl2ZToge1xuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWUnXG4gIH0sXG4gIGFjY2VwdGVkOiB7XG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyQ29sb3I6ICcjNmM2JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZWVlJ1xuICB9LFxuICByZWplY3RlZDoge1xuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIGJvcmRlckNvbG9yOiAnI2M2NicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZSdcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHdpZHRoOiAyMDAsXG4gICAgaGVpZ2h0OiAyMDAsXG4gICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgYm9yZGVyQ29sb3I6ICcjNjY2JyxcbiAgICBib3JkZXJTdHlsZTogJ2Rhc2hlZCcsXG4gICAgYm9yZGVyUmFkaXVzOiA1XG4gIH0sXG4gIGRpc2FibGVkOiB7XG4gICAgb3BhY2l0eTogMC41XG4gIH1cbn1cbiIsIi8qIGVzbGludCBwcmVmZXItdGVtcGxhdGU6IDAgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHtcbiAgaXNEcmFnRGF0YVdpdGhGaWxlcyxcbiAgc3VwcG9ydE11bHRpcGxlLFxuICBmaWxlQWNjZXB0ZWQsXG4gIGFsbEZpbGVzQWNjZXB0ZWQsXG4gIGZpbGVNYXRjaFNpemUsXG4gIG9uRG9jdW1lbnREcmFnT3ZlcixcbiAgZ2V0RGF0YVRyYW5zZmVySXRlbXMgYXMgZGVmYXVsdEdldERhdGFUcmFuc2Zlckl0ZW0sXG4gIGlzSWVPckVkZ2Vcbn0gZnJvbSAnLi91dGlscydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi91dGlscy9zdHlsZXMnXG5cbmNsYXNzIERyb3B6b25lIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMsIGNvbnRleHQpIHtcbiAgICBzdXBlcihwcm9wcywgY29udGV4dClcbiAgICB0aGlzLmNvbXBvc2VIYW5kbGVycyA9IHRoaXMuY29tcG9zZUhhbmRsZXJzLmJpbmQodGhpcylcbiAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKVxuICAgIHRoaXMub25Eb2N1bWVudERyb3AgPSB0aGlzLm9uRG9jdW1lbnREcm9wLmJpbmQodGhpcylcbiAgICB0aGlzLm9uRHJhZ0VudGVyID0gdGhpcy5vbkRyYWdFbnRlci5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRyYWdMZWF2ZSA9IHRoaXMub25EcmFnTGVhdmUuYmluZCh0aGlzKVxuICAgIHRoaXMub25EcmFnT3ZlciA9IHRoaXMub25EcmFnT3Zlci5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRyYWdTdGFydCA9IHRoaXMub25EcmFnU3RhcnQuYmluZCh0aGlzKVxuICAgIHRoaXMub25Ecm9wID0gdGhpcy5vbkRyb3AuYmluZCh0aGlzKVxuICAgIHRoaXMub25GaWxlRGlhbG9nQ2FuY2VsID0gdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwuYmluZCh0aGlzKVxuICAgIHRoaXMub25JbnB1dEVsZW1lbnRDbGljayA9IHRoaXMub25JbnB1dEVsZW1lbnRDbGljay5iaW5kKHRoaXMpXG4gICAgdGhpcy5vcGVuID0gdGhpcy5vcGVuLmJpbmQodGhpcylcblxuICAgIHRoaXMuc2V0UmVmID0gdGhpcy5zZXRSZWYuYmluZCh0aGlzKVxuICAgIHRoaXMuc2V0UmVmcyA9IHRoaXMuc2V0UmVmcy5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlXG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZHJhZ2dlZEZpbGVzOiBbXSxcbiAgICAgIGFjY2VwdGVkRmlsZXM6IFtdLFxuICAgICAgcmVqZWN0ZWRGaWxlczogW11cbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IHByZXZlbnREcm9wT25Eb2N1bWVudCB9ID0gdGhpcy5wcm9wc1xuICAgIHRoaXMuZHJhZ1RhcmdldHMgPSBbXVxuXG4gICAgaWYgKHByZXZlbnREcm9wT25Eb2N1bWVudCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBvbkRvY3VtZW50RHJhZ092ZXIsIGZhbHNlKVxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMub25Eb2N1bWVudERyb3AsIGZhbHNlKVxuICAgIH1cbiAgICBpZiAodGhpcy5maWxlSW5wdXRFbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmZpbGVJbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbklucHV0RWxlbWVudENsaWNrLCBmYWxzZSlcbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwsIGZhbHNlKVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgY29uc3QgeyBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgfSA9IHRoaXMucHJvcHNcbiAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRG9jdW1lbnREcmFnT3ZlcilcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLm9uRG9jdW1lbnREcm9wKVxuICAgIH1cbiAgICBpZiAodGhpcy5maWxlSW5wdXRFbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmZpbGVJbnB1dEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbklucHV0RWxlbWVudENsaWNrLCBmYWxzZSlcbiAgICB9XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwsIGZhbHNlKVxuICB9XG5cbiAgY29tcG9zZUhhbmRsZXJzKGhhbmRsZXIpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlclxuICB9XG5cbiAgb25Eb2N1bWVudERyb3AoZXZ0KSB7XG4gICAgaWYgKHRoaXMubm9kZSAmJiB0aGlzLm5vZGUuY29udGFpbnMoZXZ0LnRhcmdldCkpIHtcbiAgICAgIC8vIGlmIHdlIGludGVyY2VwdGVkIGFuIGV2ZW50IGZvciBvdXIgaW5zdGFuY2UsIGxldCBpdCBwcm9wYWdhdGUgZG93biB0byB0aGUgaW5zdGFuY2UncyBvbkRyb3AgaGFuZGxlclxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IFtdXG4gIH1cblxuICBvbkRyYWdTdGFydChldnQpIHtcbiAgICBldnQucGVyc2lzdCgpXG4gICAgaWYgKHRoaXMucHJvcHMub25EcmFnU3RhcnQgJiYgaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpKSB7XG4gICAgICB0aGlzLnByb3BzLm9uRHJhZ1N0YXJ0LmNhbGwodGhpcywgZXZ0KVxuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ0VudGVyKGV2dCkge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyBDb3VudCB0aGUgZHJvcHpvbmUgYW5kIGFueSBjaGlsZHJlbiB0aGF0IGFyZSBlbnRlcmVkLlxuICAgIGlmICh0aGlzLmRyYWdUYXJnZXRzLmluZGV4T2YoZXZ0LnRhcmdldCkgPT09IC0xKSB7XG4gICAgICB0aGlzLmRyYWdUYXJnZXRzLnB1c2goZXZ0LnRhcmdldClcbiAgICB9XG5cbiAgICBldnQucGVyc2lzdCgpXG5cbiAgICBpZiAoaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpKSB7XG4gICAgICBQcm9taXNlLnJlc29sdmUodGhpcy5wcm9wcy5nZXREYXRhVHJhbnNmZXJJdGVtcyhldnQpKS50aGVuKGRyYWdnZWRGaWxlcyA9PiB7XG4gICAgICAgIGlmIChldnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgZHJhZ2dlZEZpbGVzLFxuICAgICAgICAgIC8vIERvIG5vdCByZWx5IG9uIGZpbGVzIGZvciB0aGUgZHJhZyBzdGF0ZS4gSXQgZG9lc24ndCB3b3JrIGluIFNhZmFyaS5cbiAgICAgICAgICBpc0RyYWdBY3RpdmU6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0pXG5cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ0VudGVyKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EcmFnRW50ZXIuY2FsbCh0aGlzLCBldnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EcmFnT3ZlcihldnQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2dC5wZXJzaXN0KClcblxuICAgIHRyeSB7XG4gICAgICAvLyBUaGUgZmlsZSBkaWFsb2cgb24gQ2hyb21lIGFsbG93cyB1c2VycyB0byBkcmFnIGZpbGVzIGZyb20gdGhlIGRpYWxvZyBvbnRvXG4gICAgICAvLyB0aGUgZHJvcHpvbmUsIGNhdXNpbmcgdGhlIGJyb3dzZXIgdGhlIGNyYXNoIHdoZW4gdGhlIGZpbGUgZGlhbG9nIGlzIGNsb3NlZC5cbiAgICAgIC8vIEEgZHJvcCBlZmZlY3Qgb2YgJ25vbmUnIHByZXZlbnRzIHRoZSBmaWxlIGZyb20gYmVpbmcgZHJvcHBlZFxuICAgICAgZXZ0LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gdGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUgPyAnbm9uZScgOiAnY29weScgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBvZiBlcnJvclxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ092ZXIgJiYgaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpKSB7XG4gICAgICB0aGlzLnByb3BzLm9uRHJhZ092ZXIuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRyYWdMZWF2ZShldnQpIHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2dC5wZXJzaXN0KClcblxuICAgIC8vIE9ubHkgZGVhY3RpdmF0ZSBvbmNlIHRoZSBkcm9wem9uZSBhbmQgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBsZWZ0LlxuICAgIHRoaXMuZHJhZ1RhcmdldHMgPSB0aGlzLmRyYWdUYXJnZXRzLmZpbHRlcihlbCA9PiBlbCAhPT0gZXZ0LnRhcmdldCAmJiB0aGlzLm5vZGUuY29udGFpbnMoZWwpKVxuICAgIGlmICh0aGlzLmRyYWdUYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENsZWFyIGRyYWdnaW5nIGZpbGVzIHN0YXRlXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgZHJhZ2dlZEZpbGVzOiBbXVxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdMZWF2ZSAmJiBpc0RyYWdEYXRhV2l0aEZpbGVzKGV2dCkpIHtcbiAgICAgIHRoaXMucHJvcHMub25EcmFnTGVhdmUuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuICB9XG5cbiAgb25Ecm9wKGV2dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9uRHJvcCxcbiAgICAgIG9uRHJvcEFjY2VwdGVkLFxuICAgICAgb25Ecm9wUmVqZWN0ZWQsXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIGFjY2VwdCxcbiAgICAgIGdldERhdGFUcmFuc2Zlckl0ZW1zXG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIC8vIFN0b3AgZGVmYXVsdCBicm93c2VyIGJlaGF2aW9yXG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIFBlcnNpc3QgZXZlbnQgZm9yIGxhdGVyIHVzYWdlXG4gICAgZXZ0LnBlcnNpc3QoKVxuXG4gICAgLy8gUmVzZXQgdGhlIGNvdW50ZXIgYWxvbmcgd2l0aCB0aGUgZHJhZyBvbiBhIGRyb3AuXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IFtdXG4gICAgdGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUgPSBmYWxzZVxuXG4gICAgLy8gQ2xlYXIgZmlsZXMgdmFsdWVcbiAgICB0aGlzLmRyYWdnZWRGaWxlcyA9IG51bGxcblxuICAgIC8vIFJlc2V0IGRyYWcgc3RhdGVcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gICAgICBkcmFnZ2VkRmlsZXM6IFtdXG4gICAgfSlcblxuICAgIGlmIChpc0RyYWdEYXRhV2l0aEZpbGVzKGV2dCkpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZShnZXREYXRhVHJhbnNmZXJJdGVtcyhldnQpKS50aGVuKGZpbGVMaXN0ID0+IHtcbiAgICAgICAgY29uc3QgYWNjZXB0ZWRGaWxlcyA9IFtdXG4gICAgICAgIGNvbnN0IHJlamVjdGVkRmlsZXMgPSBbXVxuXG4gICAgICAgIGlmIChldnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgZmlsZUxpc3QuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSAmJlxuICAgICAgICAgICAgZmlsZU1hdGNoU2l6ZShmaWxlLCB0aGlzLnByb3BzLm1heFNpemUsIHRoaXMucHJvcHMubWluU2l6ZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXMucHVzaChmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3RlZEZpbGVzLnB1c2goZmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFtdWx0aXBsZSAmJiBhY2NlcHRlZEZpbGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyBpZiBub3QgaW4gbXVsdGkgbW9kZSBhZGQgYW55IGV4dHJhIGFjY2VwdGVkIGZpbGVzIHRvIHJlamVjdGVkLlxuICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBlbmQgdXNlcnMgdG8gZWFzaWx5IGlnbm9yZSBhIG11bHRpIGZpbGUgZHJvcCBpbiBcInNpbmdsZVwiIG1vZGUuXG4gICAgICAgICAgcmVqZWN0ZWRGaWxlcy5wdXNoKC4uLmFjY2VwdGVkRmlsZXMuc3BsaWNlKDApKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGBhY2NlcHRlZEZpbGVzYCBhbmQgYHJlamVjdGVkRmlsZXNgIHN0YXRlXG4gICAgICAgIC8vIFRoaXMgd2lsbCBtYWtlIGNoaWxkcmVuIHJlbmRlciBmdW5jdGlvbnMgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGVcbiAgICAgICAgLy8gdmFsdWVzXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBhY2NlcHRlZEZpbGVzLCByZWplY3RlZEZpbGVzIH0sICgpID0+IHtcbiAgICAgICAgICBpZiAob25Ecm9wKSB7XG4gICAgICAgICAgICBvbkRyb3AuY2FsbCh0aGlzLCBhY2NlcHRlZEZpbGVzLCByZWplY3RlZEZpbGVzLCBldnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlamVjdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BSZWplY3RlZCkge1xuICAgICAgICAgICAgb25Ecm9wUmVqZWN0ZWQuY2FsbCh0aGlzLCByZWplY3RlZEZpbGVzLCBldnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BBY2NlcHRlZCkge1xuICAgICAgICAgICAgb25Ecm9wQWNjZXB0ZWQuY2FsbCh0aGlzLCBhY2NlcHRlZEZpbGVzLCBldnQpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBvbkNsaWNrKGV2dCkge1xuICAgIGNvbnN0IHsgb25DbGljaywgZGlzYWJsZUNsaWNrIH0gPSB0aGlzLnByb3BzXG5cbiAgICAvLyBpZiBvbkNsaWNrIHByb3AgaXMgZ2l2ZW4sIHJ1biBpdCBmaXJzdFxuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICBvbkNsaWNrLmNhbGwodGhpcywgZXZ0KVxuICAgIH1cblxuICAgIC8vIGlmIGRpc2FibGVDbGljayBpcyBub3Qgc2V0IGFuZCB0aGUgZXZlbnQgaGFzbid0IGJlZW4gZGVmYXVsdCBwcmVmZW50ZWQgd2l0aGluXG4gICAgLy8gdGhlIG9uQ2xpY2sgbGlzdGVuZXIsIG9wZW4gdGhlIGZpbGUgZGlhbG9nXG4gICAgaWYgKCFkaXNhYmxlQ2xpY2sgJiYgIWV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAgIC8vIGluIElFMTEvRWRnZSB0aGUgZmlsZS1icm93c2VyIGRpYWxvZyBpcyBibG9ja2luZywgZW5zdXJlIHRoaXMgaXMgYmVoaW5kIHNldFRpbWVvdXRcbiAgICAgIC8vIHRoaXMgaXMgc28gcmVhY3QgY2FuIGhhbmRsZSBzdGF0ZSBjaGFuZ2VzIGluIHRoZSBvbkNsaWNrIHByb3AgYWJvdmUgYWJvdmVcbiAgICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy80NTBcbiAgICAgIGlmIChpc0llT3JFZGdlKCkpIHtcbiAgICAgICAgc2V0VGltZW91dCh0aGlzLm9wZW4sIDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wZW4oKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXRFbGVtZW50Q2xpY2soZXZ0KSB7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHRoaXMucHJvcHMuaW5wdXRQcm9wcyAmJiB0aGlzLnByb3BzLmlucHV0UHJvcHMub25DbGljaykge1xuICAgICAgdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2xpY2soZXZ0KVxuICAgIH1cbiAgfVxuXG4gIG9uRmlsZURpYWxvZ0NhbmNlbCgpIHtcbiAgICAvLyB0aW1lb3V0IHdpbGwgbm90IHJlY29nbml6ZSBjb250ZXh0IG9mIHRoaXMgbWV0aG9kXG4gICAgY29uc3QgeyBvbkZpbGVEaWFsb2dDYW5jZWwgfSA9IHRoaXMucHJvcHNcbiAgICAvLyBleGVjdXRlIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIEZpbGVEaWFsb2cgaXMgb3BlbmVkIGluIHRoZSBicm93c2VyXG4gICAgaWYgKHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlucHV0RWwgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIFJldHVybnMgYW4gb2JqZWN0IGFzIEZpbGVMaXN0XG4gICAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gdGhpcy5maWxlSW5wdXRFbFxuXG4gICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gZmFsc2VcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvbkZpbGVEaWFsb2dDYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgb25GaWxlRGlhbG9nQ2FuY2VsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDMwMClcbiAgICB9XG4gIH1cblxuICBzZXRSZWYocmVmKSB7XG4gICAgdGhpcy5ub2RlID0gcmVmXG4gIH1cblxuICBzZXRSZWZzKHJlZikge1xuICAgIHRoaXMuZmlsZUlucHV0RWwgPSByZWZcbiAgfVxuICAvKipcbiAgICogT3BlbiBzeXN0ZW0gZmlsZSB1cGxvYWQgZGlhbG9nLlxuICAgKlxuICAgKiBAcHVibGljXG4gICAqL1xuICBvcGVuKCkge1xuICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gdHJ1ZVxuICAgIHRoaXMuZmlsZUlucHV0RWwudmFsdWUgPSBudWxsXG4gICAgdGhpcy5maWxlSW5wdXRFbC5jbGljaygpXG4gIH1cblxuICByZW5kZXJDaGlsZHJlbiA9IChjaGlsZHJlbiwgaXNEcmFnQWN0aXZlLCBpc0RyYWdBY2NlcHQsIGlzRHJhZ1JlamVjdCkgPT4ge1xuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbih7XG4gICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgIGlzRHJhZ0FjdGl2ZSxcbiAgICAgICAgaXNEcmFnQWNjZXB0LFxuICAgICAgICBpc0RyYWdSZWplY3QsXG4gICAgICAgIG9wZW46IHRoaXMub3BlblxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWNjZXB0LFxuICAgICAgYWNjZXB0Q2xhc3NOYW1lLFxuICAgICAgYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc2FibGVkQ2xhc3NOYW1lLFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIG11bHRpcGxlLFxuICAgICAgbmFtZSxcbiAgICAgIHJlamVjdENsYXNzTmFtZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgbGV0IHtcbiAgICAgIGFjY2VwdFN0eWxlLFxuICAgICAgYWN0aXZlU3R5bGUsXG4gICAgICBjbGFzc05hbWUgPSAnJyxcbiAgICAgIGRpc2FibGVkU3R5bGUsXG4gICAgICByZWplY3RTdHlsZSxcbiAgICAgIHN0eWxlLFxuICAgICAgLi4ucHJvcHMgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItY29uc3RcbiAgICB9ID0gcmVzdFxuXG4gICAgY29uc3QgeyBpc0RyYWdBY3RpdmUsIGRyYWdnZWRGaWxlcyB9ID0gdGhpcy5zdGF0ZVxuICAgIGNvbnN0IGZpbGVzQ291bnQgPSBkcmFnZ2VkRmlsZXMubGVuZ3RoXG4gICAgY29uc3QgaXNNdWx0aXBsZUFsbG93ZWQgPSBtdWx0aXBsZSB8fCBmaWxlc0NvdW50IDw9IDFcbiAgICBjb25zdCBpc0RyYWdBY2NlcHQgPSBmaWxlc0NvdW50ID4gMCAmJiBhbGxGaWxlc0FjY2VwdGVkKGRyYWdnZWRGaWxlcywgdGhpcy5wcm9wcy5hY2NlcHQpXG4gICAgY29uc3QgaXNEcmFnUmVqZWN0ID0gZmlsZXNDb3VudCA+IDAgJiYgKCFpc0RyYWdBY2NlcHQgfHwgIWlzTXVsdGlwbGVBbGxvd2VkKVxuICAgIGNvbnN0IG5vU3R5bGVzID1cbiAgICAgICFjbGFzc05hbWUgJiYgIXN0eWxlICYmICFhY3RpdmVTdHlsZSAmJiAhYWNjZXB0U3R5bGUgJiYgIXJlamVjdFN0eWxlICYmICFkaXNhYmxlZFN0eWxlXG5cbiAgICBpZiAoaXNEcmFnQWN0aXZlICYmIGFjdGl2ZUNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9ICcgJyArIGFjdGl2ZUNsYXNzTmFtZVxuICAgIH1cbiAgICBpZiAoaXNEcmFnQWNjZXB0ICYmIGFjY2VwdENsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9ICcgJyArIGFjY2VwdENsYXNzTmFtZVxuICAgIH1cbiAgICBpZiAoaXNEcmFnUmVqZWN0ICYmIHJlamVjdENsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9ICcgJyArIHJlamVjdENsYXNzTmFtZVxuICAgIH1cbiAgICBpZiAoZGlzYWJsZWQgJiYgZGlzYWJsZWRDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnICcgKyBkaXNhYmxlZENsYXNzTmFtZVxuICAgIH1cblxuICAgIGlmIChub1N0eWxlcykge1xuICAgICAgc3R5bGUgPSBzdHlsZXMuZGVmYXVsdFxuICAgICAgYWN0aXZlU3R5bGUgPSBzdHlsZXMuYWN0aXZlXG4gICAgICBhY2NlcHRTdHlsZSA9IHN0eWxlcy5hY2NlcHRlZFxuICAgICAgcmVqZWN0U3R5bGUgPSBzdHlsZXMucmVqZWN0ZWRcbiAgICAgIGRpc2FibGVkU3R5bGUgPSBzdHlsZXMuZGlzYWJsZWRcbiAgICB9XG5cbiAgICBsZXQgYXBwbGllZFN0eWxlID0geyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgLi4uc3R5bGUgfVxuICAgIGlmIChhY3RpdmVTdHlsZSAmJiBpc0RyYWdBY3RpdmUpIHtcbiAgICAgIGFwcGxpZWRTdHlsZSA9IHtcbiAgICAgICAgLi4uYXBwbGllZFN0eWxlLFxuICAgICAgICAuLi5hY3RpdmVTdHlsZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWNjZXB0U3R5bGUgJiYgaXNEcmFnQWNjZXB0KSB7XG4gICAgICBhcHBsaWVkU3R5bGUgPSB7XG4gICAgICAgIC4uLmFwcGxpZWRTdHlsZSxcbiAgICAgICAgLi4uYWNjZXB0U3R5bGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlamVjdFN0eWxlICYmIGlzRHJhZ1JlamVjdCkge1xuICAgICAgYXBwbGllZFN0eWxlID0ge1xuICAgICAgICAuLi5hcHBsaWVkU3R5bGUsXG4gICAgICAgIC4uLnJlamVjdFN0eWxlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkaXNhYmxlZFN0eWxlICYmIGRpc2FibGVkKSB7XG4gICAgICBhcHBsaWVkU3R5bGUgPSB7XG4gICAgICAgIC4uLmFwcGxpZWRTdHlsZSxcbiAgICAgICAgLi4uZGlzYWJsZWRTdHlsZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlucHV0QXR0cmlidXRlcyA9IHtcbiAgICAgIGFjY2VwdCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgb3BhY2l0eTogMC4wMDAwMSxcbiAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAuLi5pbnB1dFByb3BzLnN0eWxlXG4gICAgICB9LFxuICAgICAgbXVsdGlwbGU6IHN1cHBvcnRNdWx0aXBsZSAmJiBtdWx0aXBsZSxcbiAgICAgIHJlZjogdGhpcy5zZXRSZWZzLFxuICAgICAgb25DaGFuZ2U6IHRoaXMub25Ecm9wLFxuICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJ1xuICAgIH1cblxuICAgIGlmIChuYW1lICYmIG5hbWUubGVuZ3RoKSB7XG4gICAgICBpbnB1dEF0dHJpYnV0ZXMubmFtZSA9IG5hbWVcbiAgICB9XG5cbiAgICAvLyBEZXN0cnVjdHVyZSBjdXN0b20gcHJvcHMgYXdheSBmcm9tIHByb3BzIHVzZWQgZm9yIHRoZSBkaXYgZWxlbWVudFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgY29uc3Qge1xuICAgICAgYWNjZXB0ZWRGaWxlcyxcbiAgICAgIHByZXZlbnREcm9wT25Eb2N1bWVudCxcbiAgICAgIGRpc2FibGVDbGljayxcbiAgICAgIG9uRHJvcEFjY2VwdGVkLFxuICAgICAgb25Ecm9wUmVqZWN0ZWQsXG4gICAgICBvbkZpbGVEaWFsb2dDYW5jZWwsXG4gICAgICBtYXhTaXplLFxuICAgICAgbWluU2l6ZSxcbiAgICAgIGdldERhdGFUcmFuc2Zlckl0ZW1zLFxuICAgICAgLi4uZGl2UHJvcHNcbiAgICB9ID0gcHJvcHNcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXthcHBsaWVkU3R5bGV9XG4gICAgICAgIHtcbiAgICAgICAgICAuLi5kaXZQcm9wcyAvKiBleHBhbmQgdXNlciBwcm92aWRlZCBwcm9wcyBmaXJzdCBzbyBldmVudCBoYW5kbGVycyBhcmUgbmV2ZXIgb3ZlcnJpZGRlbiAqL1xuICAgICAgICB9XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25DbGljayl9XG4gICAgICAgIG9uRHJhZ1N0YXJ0PXt0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJhZ1N0YXJ0KX1cbiAgICAgICAgb25EcmFnRW50ZXI9e3RoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnRW50ZXIpfVxuICAgICAgICBvbkRyYWdPdmVyPXt0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJhZ092ZXIpfVxuICAgICAgICBvbkRyYWdMZWF2ZT17dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdMZWF2ZSl9XG4gICAgICAgIG9uRHJvcD17dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyb3ApfVxuICAgICAgICByZWY9e3RoaXMuc2V0UmVmfVxuICAgICAgICBhcmlhLWRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVyQ2hpbGRyZW4oY2hpbGRyZW4sIGlzRHJhZ0FjdGl2ZSwgaXNEcmFnQWNjZXB0LCBpc0RyYWdSZWplY3QpfVxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5pbnB1dFByb3BzIC8qIGV4cGFuZCB1c2VyIHByb3ZpZGVkIGlucHV0UHJvcHMgZmlyc3Qgc28gaW5wdXRBdHRyaWJ1dGVzIG92ZXJyaWRlIHRoZW0gKi9cbiAgICAgICAgICB9XG4gICAgICAgICAgey4uLmlucHV0QXR0cmlidXRlc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wem9uZVxuXG5Ecm9wem9uZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBBbGxvdyBzcGVjaWZpYyB0eXBlcyBvZiBmaWxlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9va29uZXQvYXR0ci1hY2NlcHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqIEtlZXAgaW4gbWluZCB0aGF0IG1pbWUgdHlwZSBkZXRlcm1pbmF0aW9uIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgcGxhdGZvcm1zLiBDU1YgZmlsZXMsXG4gICAqIGZvciBleGFtcGxlLCBhcmUgcmVwb3J0ZWQgYXMgdGV4dC9wbGFpbiB1bmRlciBtYWNPUyBidXQgYXMgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIHVuZGVyXG4gICAqIFdpbmRvd3MuIEluIHNvbWUgY2FzZXMgdGhlcmUgbWlnaHQgbm90IGJlIGEgbWltZSB0eXBlIHNldCBhdCBhbGwuXG4gICAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy8yNzZcbiAgICovXG4gIGFjY2VwdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyldKSxcblxuICAvKipcbiAgICogQ29udGVudHMgb2YgdGhlIGRyb3B6b25lXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5mdW5jXSksXG5cbiAgLyoqXG4gICAqIERpc2FsbG93IGNsaWNraW5nIG9uIHRoZSBkcm9wem9uZSBjb250YWluZXIgdG8gb3BlbiBmaWxlIGRpYWxvZ1xuICAgKi9cbiAgZGlzYWJsZUNsaWNrOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlL2Rpc2FibGUgdGhlIGRyb3B6b25lIGVudGlyZWx5XG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGZhbHNlLCBhbGxvdyBkcm9wcGVkIGl0ZW1zIHRvIHRha2Ugb3ZlciB0aGUgY3VycmVudCBicm93c2VyIHdpbmRvd1xuICAgKi9cbiAgcHJldmVudERyb3BPbkRvY3VtZW50OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogUGFzcyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgdG8gdGhlIGA8aW5wdXQgdHlwZT1cImZpbGVcIi8+YCB0YWdcbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEFsbG93IGRyb3BwaW5nIG11bHRpcGxlIGZpbGVzXG4gICAqL1xuICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIGBuYW1lYCBhdHRyaWJ1dGUgZm9yIHRoZSBpbnB1dCB0YWdcbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIE1heGltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAgICovXG4gIG1heFNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIE1pbmltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAgICovXG4gIG1pblNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgdG8gYXBwbHkgd2hlbiBkcmFnIGlzIGFjdGl2ZVxuICAgKi9cbiAgYWN0aXZlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgdG8gYXBwbHkgd2hlbiBkcm9wIHdpbGwgYmUgYWNjZXB0ZWRcbiAgICovXG4gIGFjY2VwdENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogY2xhc3NOYW1lIHRvIGFwcGx5IHdoZW4gZHJvcCB3aWxsIGJlIHJlamVjdGVkXG4gICAqL1xuICByZWplY3RDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZSB0byBhcHBseSB3aGVuIGRyb3B6b25lIGlzIGRpc2FibGVkXG4gICAqL1xuICBkaXNhYmxlZENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHkgd2hlbiBkcmFnIGlzIGFjdGl2ZVxuICAgKi9cbiAgYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHkgd2hlbiBkcm9wIHdpbGwgYmUgYWNjZXB0ZWRcbiAgICovXG4gIGFjY2VwdFN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5IHdoZW4gZHJvcCB3aWxsIGJlIHJlamVjdGVkXG4gICAqL1xuICByZWplY3RTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseSB3aGVuIGRyb3B6b25lIGlzIGRpc2FibGVkXG4gICAqL1xuICBkaXNhYmxlZFN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBnZXREYXRhVHJhbnNmZXJJdGVtcyBoYW5kbGVyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXkgb2YgRmlsZSBvYmplY3RzXG4gICAqL1xuICBnZXREYXRhVHJhbnNmZXJJdGVtczogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uQ2xpY2sgY2FsbGJhY2tcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyb3AgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJvcDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcEFjY2VwdGVkIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyb3BBY2NlcHRlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcFJlamVjdGVkIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyb3BSZWplY3RlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ1N0YXJ0IGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ0VudGVyIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdFbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ092ZXIgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ092ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyYWdMZWF2ZSBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgY2FsbGJhY2sgb24gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b24gb2YgdGhlIGZpbGUgZGlhbG9nXG4gICAqL1xuICBvbkZpbGVEaWFsb2dDYW5jZWw6IFByb3BUeXBlcy5mdW5jXG59XG5cbkRyb3B6b25lLmRlZmF1bHRQcm9wcyA9IHtcbiAgcHJldmVudERyb3BPbkRvY3VtZW50OiB0cnVlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGRpc2FibGVDbGljazogZmFsc2UsXG4gIGlucHV0UHJvcHM6IHt9LFxuICBtdWx0aXBsZTogdHJ1ZSxcbiAgbWF4U2l6ZTogSW5maW5pdHksXG4gIG1pblNpemU6IDAsXG4gIGdldERhdGFUcmFuc2Zlckl0ZW1zOiBkZWZhdWx0R2V0RGF0YVRyYW5zZmVySXRlbVxufVxuIl0sIm5hbWVzIjpbIm1vZHVsZSIsInQiLCJuIiwiZSIsInIiLCJleHBvcnRzIiwibyIsImkiLCJsIiwiY2FsbCIsIm0iLCJjIiwiZCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIndpbmRvdyIsIk1hdGgiLCJzZWxmIiwiRnVuY3Rpb24iLCJfX2ciLCJ2ZXJzaW9uIiwiX19lIiwiYSIsInRvU3RyaW5nIiwic2xpY2UiLCJTeW1ib2wiLCJ1Iiwic3RvcmUiLCJmIiwidiIsIkYiLCJ5IiwiRyIsImgiLCJTIiwiUCIsIngiLCJCIiwiZyIsImIiLCJVIiwiY29yZSIsIlciLCJSIiwicmFuZG9tIiwiY29uY2F0IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJUeXBlRXJyb3IiLCJtaW4iLCJBcnJheSIsImlzQXJyYXkiLCJzcGxpdCIsIm5hbWUiLCJ0eXBlIiwicmVwbGFjZSIsInNvbWUiLCJ0cmltIiwiY2hhckF0IiwidG9Mb3dlckNhc2UiLCJlbmRzV2l0aCIsInRoaXMiLCJ2YWx1ZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInZhbHVlT2YiLCJ3cml0YWJsZSIsImluc3BlY3RTb3VyY2UiLCJqb2luIiwiU3RyaW5nIiwibGVuZ3RoIiwiXyIsInciLCJwdXNoIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjZWlsIiwiZmxvb3IiLCJpc05hTiIsImNvbnN0cnVjdG9yIiwic3VwcG9ydE11bHRpcGxlIiwiZmlsZUFjY2VwdGVkIiwiZmlsZSIsImFjY2VwdCIsImFjY2VwdHMiLCJpc0RyYWdEYXRhV2l0aEZpbGVzIiwiZXZ0IiwiZGF0YVRyYW5zZmVyIiwiZXZlcnkiLCJ0eXBlcyIsIm9uRG9jdW1lbnREcmFnT3ZlciIsInByZXZlbnREZWZhdWx0IiwiRHJvcHpvbmUiLCJwcm9wcyIsImNvbnRleHQiLCJyZW5kZXJDaGlsZHJlbiIsImNoaWxkcmVuIiwiaXNEcmFnQWN0aXZlIiwiaXNEcmFnQWNjZXB0IiwiaXNEcmFnUmVqZWN0IiwiX3RoaXMiLCJzdGF0ZSIsIm9wZW4iLCJjb21wb3NlSGFuZGxlcnMiLCJiaW5kIiwib25DbGljayIsIm9uRG9jdW1lbnREcm9wIiwib25EcmFnRW50ZXIiLCJvbkRyYWdMZWF2ZSIsIm9uRHJhZ092ZXIiLCJvbkRyYWdTdGFydCIsIm9uRHJvcCIsIm9uRmlsZURpYWxvZ0NhbmNlbCIsIm9uSW5wdXRFbGVtZW50Q2xpY2siLCJzZXRSZWYiLCJzZXRSZWZzIiwiaXNGaWxlRGlhbG9nQWN0aXZlIiwiUmVhY3QiLCJDb21wb25lbnQiLCJwcmV2ZW50RHJvcE9uRG9jdW1lbnQiLCJkcmFnVGFyZ2V0cyIsImFkZEV2ZW50TGlzdGVuZXIiLCJmaWxlSW5wdXRFbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVyIiwiZGlzYWJsZWQiLCJub2RlIiwiY29udGFpbnMiLCJ0YXJnZXQiLCJwZXJzaXN0IiwiaW5kZXhPZiIsInJlc29sdmUiLCJnZXREYXRhVHJhbnNmZXJJdGVtcyIsInRoZW4iLCJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsInNldFN0YXRlIiwiZHJvcEVmZmVjdCIsImVyciIsImZpbHRlciIsImVsIiwiX3RoaXMzIiwib25Ecm9wQWNjZXB0ZWQiLCJvbkRyb3BSZWplY3RlZCIsIm11bHRpcGxlIiwiZHJhZ2dlZEZpbGVzIiwiYWNjZXB0ZWRGaWxlcyIsInJlamVjdGVkRmlsZXMiLCJmb3JFYWNoIiwibWF4U2l6ZSIsIm1pblNpemUiLCJzaXplIiwiZmlsZU1hdGNoU2l6ZSIsIl90aGlzNCIsInNwbGljZSIsImRpc2FibGVDbGljayIsImlzRGVmYXVsdFByZXZlbnRlZCIsInN0b3BQcm9wYWdhdGlvbiIsInVzZXJBZ2VudCIsIm5hdmlnYXRvciIsImlzSWUiLCJpc0VkZ2UiLCJpc0llT3JFZGdlIiwiaW5wdXRQcm9wcyIsIl90aGlzNSIsImZpbGVzIiwicmVmIiwiY2xpY2siLCJhY2NlcHRDbGFzc05hbWUiLCJhY3RpdmVDbGFzc05hbWUiLCJkaXNhYmxlZENsYXNzTmFtZSIsInJlamVjdENsYXNzTmFtZSIsInJlc3QiLCJhY2NlcHRTdHlsZSIsImFjdGl2ZVN0eWxlIiwiY2xhc3NOYW1lIiwiZGlzYWJsZWRTdHlsZSIsInJlamVjdFN0eWxlIiwic3R5bGUiLCJmaWxlc0NvdW50IiwiaXNNdWx0aXBsZUFsbG93ZWQiLCJhbGxGaWxlc0FjY2VwdGVkIiwibm9TdHlsZXMiLCJzdHlsZXMiLCJhcHBsaWVkU3R5bGUiLCJwb3NpdGlvbiIsImlucHV0QXR0cmlidXRlcyIsImRpdlByb3BzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwib25lT2ZUeXBlIiwic3RyaW5nIiwiYXJyYXlPZiIsImZ1bmMiLCJib29sIiwib2JqZWN0IiwibnVtYmVyIiwiZGVmYXVsdFByb3BzIiwiSW5maW5pdHkiLCJldmVudCIsImRhdGFUcmFuc2Zlckl0ZW1zTGlzdCIsImR0IiwiaXRlbXMiXSwibWFwcGluZ3MiOiJ3WEFBQUEsVUFBZSxTQUFTQyxHQUFHLFNBQVNDLEVBQUVDLEdBQUcsR0FBR0MsRUFBRUQsR0FBRyxPQUFPQyxFQUFFRCxHQUFHRSxRQUFRLElBQUlDLEVBQUVGLEVBQUVELElBQUlJLEVBQUVKLEVBQUVLLEdBQUUsRUFBR0gsWUFBWSxPQUFPSixFQUFFRSxHQUFHTSxLQUFLSCxFQUFFRCxRQUFRQyxFQUFFQSxFQUFFRCxRQUFRSCxHQUFHSSxFQUFFRSxHQUFFLEVBQUdGLEVBQUVELFFBQVEsSUFBSUQsS0FBSyxPQUFPRixFQUFFUSxFQUFFVCxFQUFFQyxFQUFFUyxFQUFFUCxFQUFFRixFQUFFVSxFQUFFLFNBQVNYLEVBQUVHLEVBQUVELEdBQUdELEVBQUVJLEVBQUVMLEVBQUVHLElBQUlTLE9BQU9DLGVBQWViLEVBQUVHLEdBQUdXLGNBQWEsRUFBR0MsWUFBVyxFQUFHQyxJQUFJZCxLQUFLRCxFQUFFQSxFQUFFLFNBQVNELEdBQUcsSUFBSUcsRUFBRUgsR0FBR0EsRUFBRWlCLFdBQVcsV0FBVyxPQUFPakIsRUFBRWtCLFNBQVMsV0FBVyxPQUFPbEIsR0FBRyxPQUFPQyxF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
|
package/examples/Basic/Readme.md
CHANGED
|
@@ -13,11 +13,20 @@ class Basic extends React.Component {
|
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
onCancel() {
|
|
17
|
+
this.setState({
|
|
18
|
+
files: []
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
16
22
|
render() {
|
|
17
23
|
return (
|
|
18
24
|
<section>
|
|
19
25
|
<div className="dropzone">
|
|
20
|
-
<Dropzone
|
|
26
|
+
<Dropzone
|
|
27
|
+
onDrop={this.onDrop.bind(this)}
|
|
28
|
+
onFileDialogCancel={this.onCancel.bind(this)}
|
|
29
|
+
>
|
|
21
30
|
<p>Try dropping some files here, or click to select files to upload.</p>
|
|
22
31
|
</Dropzone>
|
|
23
32
|
</div>
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
In case you need to nest dropzone components and prevent any drag events from the child propagate to the parent, it can easily be achieved by using `.stopPropagation()` in the child dropzone.
|
|
2
|
+
|
|
3
|
+
```jsx harmony
|
|
4
|
+
const parentStyle = {
|
|
5
|
+
width: 200,
|
|
6
|
+
height: 200,
|
|
7
|
+
border: '2px dashed #888'
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const childStyle = {
|
|
11
|
+
width: 160,
|
|
12
|
+
height: 160,
|
|
13
|
+
margin: 20,
|
|
14
|
+
border: '2px dashed #ccc'
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
class NestedDropzone extends React.Component {
|
|
18
|
+
constructor() {
|
|
19
|
+
super()
|
|
20
|
+
this.state = {
|
|
21
|
+
parent: {},
|
|
22
|
+
child: {}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
createDragHandler(eventType, node) {
|
|
27
|
+
const updater = this.createStateUpdater(eventType, node)
|
|
28
|
+
return (evt) => {
|
|
29
|
+
evt.preventDefault();
|
|
30
|
+
if (node === 'child') {
|
|
31
|
+
evt.stopPropagation()
|
|
32
|
+
}
|
|
33
|
+
this.setState(updater)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
createDropHandler(node) {
|
|
38
|
+
const updater = this.createStateUpdater('drop', node)
|
|
39
|
+
return (accepted, rejected, evt) => {
|
|
40
|
+
evt.preventDefault();
|
|
41
|
+
if (node === 'child') {
|
|
42
|
+
evt.stopPropagation()
|
|
43
|
+
}
|
|
44
|
+
this.setState(updater)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
createStateUpdater(eventType, node) {
|
|
49
|
+
return state => {
|
|
50
|
+
const events = {...state[node]};
|
|
51
|
+
if (eventType !== events.current) {
|
|
52
|
+
events.previous = events.current;
|
|
53
|
+
}
|
|
54
|
+
events.current = eventType;
|
|
55
|
+
return {
|
|
56
|
+
[node]: events
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
render() {
|
|
62
|
+
return (
|
|
63
|
+
<section>
|
|
64
|
+
<div className="dropzone">
|
|
65
|
+
<Dropzone
|
|
66
|
+
onDragStart={this.createDragHandler('dragstart', 'parent')}
|
|
67
|
+
onDragEnter={this.createDragHandler('dragenter', 'parent')}
|
|
68
|
+
onDragOver={this.createDragHandler('dragover', 'parent')}
|
|
69
|
+
onDragLeave={this.createDragHandler('dragleave', 'parent')}
|
|
70
|
+
onDrop={this.createDropHandler('parent')}
|
|
71
|
+
style={parentStyle}
|
|
72
|
+
>
|
|
73
|
+
<Dropzone
|
|
74
|
+
onDragStart={this.createDragHandler('dragstart', 'child')}
|
|
75
|
+
onDragEnter={this.createDragHandler('dragenter', 'child')}
|
|
76
|
+
onDragOver={this.createDragHandler('dragover', 'child')}
|
|
77
|
+
onDragLeave={this.createDragHandler('dragleave', 'child')}
|
|
78
|
+
onDrop={this.createDropHandler('child')}
|
|
79
|
+
style={childStyle}
|
|
80
|
+
/>
|
|
81
|
+
</Dropzone>
|
|
82
|
+
</div>
|
|
83
|
+
<aside>
|
|
84
|
+
<p>Parent: {JSON.stringify(this.state.parent)}</p>
|
|
85
|
+
<p>Child: {JSON.stringify(this.state.child)}</p>
|
|
86
|
+
</aside>
|
|
87
|
+
</section>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
<NestedDropzone />
|
|
93
|
+
```
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
Starting with version 7.0.0, the `{preview}` property generation on the [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects and the `{disablePreview}` property on the `<Dropzone>` have been removed.
|
|
2
|
+
|
|
3
|
+
If you need need the `{preview}`, it can be easily achieved in the `onDrop()` callback:
|
|
4
|
+
|
|
5
|
+
```jsx harmony
|
|
6
|
+
const thumbsContainer = {
|
|
7
|
+
display: 'flex',
|
|
8
|
+
flexDirection: 'row',
|
|
9
|
+
flexWrap: 'wrap',
|
|
10
|
+
marginTop: 16
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const thumb = {
|
|
14
|
+
display: 'inline-flex',
|
|
15
|
+
borderRadius: 2,
|
|
16
|
+
border: '1px solid #eaeaea',
|
|
17
|
+
marginBottom: 8,
|
|
18
|
+
marginRight: 8,
|
|
19
|
+
width: 100,
|
|
20
|
+
height: 100,
|
|
21
|
+
padding: 4,
|
|
22
|
+
boxSizing: 'border-box'
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const thumbInner = {
|
|
26
|
+
display: 'flex',
|
|
27
|
+
minWidth: 0,
|
|
28
|
+
overflow: 'hidden'
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const img = {
|
|
32
|
+
display: 'block',
|
|
33
|
+
width: 'auto',
|
|
34
|
+
height: '100%'
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
class DropzoneWithPreview extends React.Component {
|
|
38
|
+
constructor() {
|
|
39
|
+
super()
|
|
40
|
+
this.state = {
|
|
41
|
+
files: []
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
onDrop(files) {
|
|
46
|
+
this.setState({
|
|
47
|
+
files: files.map(file => ({
|
|
48
|
+
...file,
|
|
49
|
+
preview: URL.createObjectURL(file)
|
|
50
|
+
}))
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
componentWillUnmount() {
|
|
55
|
+
// Make sure to revoke the data uris to avoid memory leaks
|
|
56
|
+
const {files} = this.state;
|
|
57
|
+
for (let i = files.length; i >= 0; i--) {
|
|
58
|
+
const file = files[0];
|
|
59
|
+
URL.revokeObjectURL(file.preview);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
render() {
|
|
64
|
+
const {files} = this.state;
|
|
65
|
+
|
|
66
|
+
const thumbs = files.map(file => (
|
|
67
|
+
<div style={thumb}>
|
|
68
|
+
<div style={thumbInner}>
|
|
69
|
+
<img
|
|
70
|
+
src={file.preview}
|
|
71
|
+
style={img}
|
|
72
|
+
/>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
));
|
|
76
|
+
|
|
77
|
+
return (
|
|
78
|
+
<section>
|
|
79
|
+
<div className="dropzone">
|
|
80
|
+
<Dropzone
|
|
81
|
+
accept="image/*"
|
|
82
|
+
onDrop={this.onDrop.bind(this)}
|
|
83
|
+
/>
|
|
84
|
+
</div>
|
|
85
|
+
<aside style={thumbsContainer}>
|
|
86
|
+
{thumbs}
|
|
87
|
+
</aside>
|
|
88
|
+
</section>
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
<DropzoneWithPreview />
|
|
94
|
+
```
|
package/package.json
CHANGED
|
@@ -47,7 +47,11 @@
|
|
|
47
47
|
},
|
|
48
48
|
"jest": {
|
|
49
49
|
"setupTestFrameworkScriptFile": "<rootDir>/testSetup.js",
|
|
50
|
-
"clearMocks": true
|
|
50
|
+
"clearMocks": true,
|
|
51
|
+
"coveragePathIgnorePatterns": [
|
|
52
|
+
"/node_modules/",
|
|
53
|
+
"<rootDir>/testSetup.js"
|
|
54
|
+
]
|
|
51
55
|
},
|
|
52
56
|
"keywords": [
|
|
53
57
|
"react-component",
|
|
@@ -143,7 +147,7 @@
|
|
|
143
147
|
"path": "@commitlint/prompt"
|
|
144
148
|
}
|
|
145
149
|
},
|
|
146
|
-
"version": "
|
|
150
|
+
"version": "7.0.1",
|
|
147
151
|
"engines": {
|
|
148
152
|
"node": ">= 6"
|
|
149
153
|
}
|
package/src/index.js
CHANGED
|
@@ -85,6 +85,7 @@ class Dropzone extends React.Component {
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
onDragStart(evt) {
|
|
88
|
+
evt.persist()
|
|
88
89
|
if (this.props.onDragStart && isDragDataWithFiles(evt)) {
|
|
89
90
|
this.props.onDragStart.call(this, evt)
|
|
90
91
|
}
|
|
@@ -102,6 +103,10 @@ class Dropzone extends React.Component {
|
|
|
102
103
|
|
|
103
104
|
if (isDragDataWithFiles(evt)) {
|
|
104
105
|
Promise.resolve(this.props.getDataTransferItems(evt)).then(draggedFiles => {
|
|
106
|
+
if (evt.isPropagationStopped()) {
|
|
107
|
+
return
|
|
108
|
+
}
|
|
109
|
+
|
|
105
110
|
this.setState({
|
|
106
111
|
draggedFiles,
|
|
107
112
|
// Do not rely on files for the drag state. It doesn't work in Safari.
|
|
@@ -118,7 +123,8 @@ class Dropzone extends React.Component {
|
|
|
118
123
|
onDragOver(evt) {
|
|
119
124
|
// eslint-disable-line class-methods-use-this
|
|
120
125
|
evt.preventDefault()
|
|
121
|
-
evt.
|
|
126
|
+
evt.persist()
|
|
127
|
+
|
|
122
128
|
try {
|
|
123
129
|
// The file dialog on Chrome allows users to drag files from the dialog onto
|
|
124
130
|
// the dropzone, causing the browser the crash when the file dialog is closed.
|
|
@@ -137,6 +143,7 @@ class Dropzone extends React.Component {
|
|
|
137
143
|
|
|
138
144
|
onDragLeave(evt) {
|
|
139
145
|
evt.preventDefault()
|
|
146
|
+
evt.persist()
|
|
140
147
|
|
|
141
148
|
// Only deactivate once the dropzone and all children have been left.
|
|
142
149
|
this.dragTargets = this.dragTargets.filter(el => el !== evt.target && this.node.contains(el))
|
|
@@ -161,7 +168,6 @@ class Dropzone extends React.Component {
|
|
|
161
168
|
onDropAccepted,
|
|
162
169
|
onDropRejected,
|
|
163
170
|
multiple,
|
|
164
|
-
disablePreview,
|
|
165
171
|
accept,
|
|
166
172
|
getDataTransferItems
|
|
167
173
|
} = this.props
|
|
@@ -190,11 +196,11 @@ class Dropzone extends React.Component {
|
|
|
190
196
|
const acceptedFiles = []
|
|
191
197
|
const rejectedFiles = []
|
|
192
198
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
199
|
+
if (evt.isPropagationStopped()) {
|
|
200
|
+
return
|
|
201
|
+
}
|
|
197
202
|
|
|
203
|
+
fileList.forEach(file => {
|
|
198
204
|
if (
|
|
199
205
|
fileAccepted(file, accept) &&
|
|
200
206
|
fileMatchSize(file, this.props.maxSize, this.props.minSize)
|
|
@@ -274,11 +280,11 @@ class Dropzone extends React.Component {
|
|
|
274
280
|
|
|
275
281
|
if (!files.length) {
|
|
276
282
|
this.isFileDialogActive = false
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
283
|
|
|
280
|
-
|
|
281
|
-
|
|
284
|
+
if (typeof onFileDialogCancel === 'function') {
|
|
285
|
+
onFileDialogCancel()
|
|
286
|
+
}
|
|
287
|
+
}
|
|
282
288
|
}
|
|
283
289
|
}, 300)
|
|
284
290
|
}
|
|
@@ -424,7 +430,6 @@ class Dropzone extends React.Component {
|
|
|
424
430
|
const {
|
|
425
431
|
acceptedFiles,
|
|
426
432
|
preventDropOnDocument,
|
|
427
|
-
disablePreview,
|
|
428
433
|
disableClick,
|
|
429
434
|
onDropAccepted,
|
|
430
435
|
onDropRejected,
|
|
@@ -493,11 +498,6 @@ Dropzone.propTypes = {
|
|
|
493
498
|
*/
|
|
494
499
|
disabled: PropTypes.bool,
|
|
495
500
|
|
|
496
|
-
/**
|
|
497
|
-
* Enable/disable preview generation
|
|
498
|
-
*/
|
|
499
|
-
disablePreview: PropTypes.bool,
|
|
500
|
-
|
|
501
501
|
/**
|
|
502
502
|
* If false, allow dropped items to take over the current browser window
|
|
503
503
|
*/
|
|
@@ -635,7 +635,6 @@ Dropzone.propTypes = {
|
|
|
635
635
|
Dropzone.defaultProps = {
|
|
636
636
|
preventDropOnDocument: true,
|
|
637
637
|
disabled: false,
|
|
638
|
-
disablePreview: false,
|
|
639
638
|
disableClick: false,
|
|
640
639
|
inputProps: {},
|
|
641
640
|
multiple: true,
|
package/src/index.spec.js
CHANGED
|
@@ -27,7 +27,7 @@ const createFile = (name, size, type) => {
|
|
|
27
27
|
return file
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
const createDtWithFiles = files => {
|
|
30
|
+
const createDtWithFiles = (files = []) => {
|
|
31
31
|
return {
|
|
32
32
|
dataTransfer: {
|
|
33
33
|
files,
|
|
@@ -384,6 +384,7 @@ describe('Dropzone', () => {
|
|
|
384
384
|
|
|
385
385
|
// Using Proxy we'll emulate IE throwing when setting dataTransfer.dropEffect
|
|
386
386
|
const eventProxy = {
|
|
387
|
+
persist() {},
|
|
387
388
|
preventDefault() {},
|
|
388
389
|
stopPropagation() {},
|
|
389
390
|
dataTransfer: new Proxy(
|
|
@@ -790,6 +791,7 @@ describe('Dropzone', () => {
|
|
|
790
791
|
const evt = {
|
|
791
792
|
target: { files },
|
|
792
793
|
preventDefault() {},
|
|
794
|
+
isPropagationStopped: () => false,
|
|
793
795
|
persist() {}
|
|
794
796
|
}
|
|
795
797
|
input.props().onChange(evt)
|
|
@@ -1039,51 +1041,6 @@ describe('Dropzone', () => {
|
|
|
1039
1041
|
})
|
|
1040
1042
|
})
|
|
1041
1043
|
|
|
1042
|
-
describe('preview', () => {
|
|
1043
|
-
const expectedEvent = expect.anything()
|
|
1044
|
-
|
|
1045
|
-
it('should generate previews for non-images', async () => {
|
|
1046
|
-
const onDrop = jest.fn()
|
|
1047
|
-
const dropzone = mount(<Dropzone onDrop={onDrop} />)
|
|
1048
|
-
await dropzone.simulate('drop', createDtWithFiles(files))
|
|
1049
|
-
expect(onDrop).toHaveBeenCalledWith(
|
|
1050
|
-
expect.arrayContaining([expect.objectContaining({ preview: 'data://file1.pdf' })]),
|
|
1051
|
-
[],
|
|
1052
|
-
expectedEvent
|
|
1053
|
-
)
|
|
1054
|
-
})
|
|
1055
|
-
|
|
1056
|
-
it('should generate previews for images', async () => {
|
|
1057
|
-
const onDrop = jest.fn()
|
|
1058
|
-
const dropzone = mount(<Dropzone onDrop={onDrop} />)
|
|
1059
|
-
await dropzone.simulate('drop', createDtWithFiles(images))
|
|
1060
|
-
expect(onDrop).toHaveBeenCalledWith(
|
|
1061
|
-
expect.arrayContaining([expect.objectContaining({ preview: 'data://cats.gif' })]),
|
|
1062
|
-
[],
|
|
1063
|
-
expectedEvent
|
|
1064
|
-
)
|
|
1065
|
-
})
|
|
1066
|
-
|
|
1067
|
-
it('should not generate previews if disablePreview is true', async () => {
|
|
1068
|
-
const onDrop = jest.fn()
|
|
1069
|
-
const dropzone = mount(<Dropzone disablePreview onDrop={onDrop} />)
|
|
1070
|
-
await dropzone.simulate('drop', createDtWithFiles(images))
|
|
1071
|
-
expect(onDrop).not.toHaveBeenCalledWith(
|
|
1072
|
-
expect.arrayContaining([expect.objectContaining({ preview: expect.anything() })]),
|
|
1073
|
-
[],
|
|
1074
|
-
expectedEvent
|
|
1075
|
-
)
|
|
1076
|
-
onDrop.mockClear()
|
|
1077
|
-
|
|
1078
|
-
await dropzone.simulate('drop', createDtWithFiles(files))
|
|
1079
|
-
expect(onDrop).not.toHaveBeenCalledWith(
|
|
1080
|
-
expect.arrayContaining([expect.objectContaining({ preview: expect.anything() })]),
|
|
1081
|
-
[],
|
|
1082
|
-
expectedEvent
|
|
1083
|
-
)
|
|
1084
|
-
})
|
|
1085
|
-
})
|
|
1086
|
-
|
|
1087
1044
|
describe('onCancel', () => {
|
|
1088
1045
|
beforeEach(() => {
|
|
1089
1046
|
jest.useFakeTimers(true)
|
|
@@ -1105,7 +1062,23 @@ describe('Dropzone', () => {
|
|
|
1105
1062
|
expect(onFileDialogCancel).not.toHaveBeenCalled()
|
|
1106
1063
|
})
|
|
1107
1064
|
|
|
1108
|
-
it('should invoke onFileDialogCancel
|
|
1065
|
+
it('should not invoke onFileDialogCancel if input does not exist', () => {
|
|
1066
|
+
const onFileDialogCancel = jest.fn()
|
|
1067
|
+
const component = mount(
|
|
1068
|
+
<Dropzone id="on-cancel-example" onFileDialogCancel={onFileDialogCancel} />
|
|
1069
|
+
)
|
|
1070
|
+
|
|
1071
|
+
component.instance().setRefs(null)
|
|
1072
|
+
|
|
1073
|
+
document.body.addEventListener('focus', () => {})
|
|
1074
|
+
const evt = document.createEvent('HTMLEvents')
|
|
1075
|
+
evt.initEvent('focus', false, true)
|
|
1076
|
+
document.body.dispatchEvent(evt)
|
|
1077
|
+
jest.runAllTimers()
|
|
1078
|
+
expect(onFileDialogCancel).not.toHaveBeenCalled()
|
|
1079
|
+
})
|
|
1080
|
+
|
|
1081
|
+
it('should invoke onFileDialogCancel when window receives focus via cancel button and there were no files selected', () => {
|
|
1109
1082
|
const onFileDialogCancel = jest.fn()
|
|
1110
1083
|
const component = mount(
|
|
1111
1084
|
<Dropzone className="dropzone-content" onFileDialogCancel={onFileDialogCancel} />
|
|
@@ -1127,6 +1100,34 @@ describe('Dropzone', () => {
|
|
|
1127
1100
|
expect(onFileDialogCancel).toHaveBeenCalled()
|
|
1128
1101
|
})
|
|
1129
1102
|
|
|
1103
|
+
it('should not invoke onFileDialogCancel when window receives focus via cancel button and there were files selected', () => {
|
|
1104
|
+
const onFileDialogCancel = jest.fn()
|
|
1105
|
+
const component = mount(
|
|
1106
|
+
<Dropzone className="dropzone-content" onFileDialogCancel={onFileDialogCancel} />
|
|
1107
|
+
)
|
|
1108
|
+
|
|
1109
|
+
// Test / invoke the click event
|
|
1110
|
+
const open = jest.spyOn(component.instance(), 'open')
|
|
1111
|
+
component.simulate('click')
|
|
1112
|
+
|
|
1113
|
+
expect(open).toHaveBeenCalled()
|
|
1114
|
+
|
|
1115
|
+
const input = component.find('input').getDOMNode()
|
|
1116
|
+
|
|
1117
|
+
Object.defineProperty(input, 'files', {
|
|
1118
|
+
value: images
|
|
1119
|
+
})
|
|
1120
|
+
|
|
1121
|
+
// Simulated DOM event - onfocus
|
|
1122
|
+
window.addEventListener('focus', () => {})
|
|
1123
|
+
const evt = document.createEvent('HTMLEvents')
|
|
1124
|
+
evt.initEvent('focus', false, true)
|
|
1125
|
+
window.dispatchEvent(evt)
|
|
1126
|
+
|
|
1127
|
+
jest.runAllTimers()
|
|
1128
|
+
expect(onFileDialogCancel).not.toHaveBeenCalled()
|
|
1129
|
+
})
|
|
1130
|
+
|
|
1130
1131
|
it('should restore isFileDialogActive to false after the FileDialog was closed', () => {
|
|
1131
1132
|
const component = mount(<Dropzone />)
|
|
1132
1133
|
|
|
@@ -1238,6 +1239,47 @@ describe('Dropzone', () => {
|
|
|
1238
1239
|
expect(innerDropzone).toHaveProp('isDragActive', false)
|
|
1239
1240
|
expect(innerDropzone).toHaveProp('isDragReject', false)
|
|
1240
1241
|
})
|
|
1242
|
+
|
|
1243
|
+
it('does not invoke any drag event cbs on parent if child stopped event propagation', async () => {
|
|
1244
|
+
const parentProps = {
|
|
1245
|
+
onDragEnter: jest.fn(),
|
|
1246
|
+
onDragOver: jest.fn(),
|
|
1247
|
+
onDragLeave: jest.fn(),
|
|
1248
|
+
onDrop: jest.fn()
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
const InnerDropzone = () => (
|
|
1252
|
+
<Dropzone
|
|
1253
|
+
onDragEnter={evt => evt.stopPropagation()}
|
|
1254
|
+
onDragOver={evt => evt.stopPropagation()}
|
|
1255
|
+
onDragLeave={evt => evt.stopPropagation()}
|
|
1256
|
+
onDrop={(accepted, rejected, evt) => evt.stopPropagation()}
|
|
1257
|
+
/>
|
|
1258
|
+
)
|
|
1259
|
+
|
|
1260
|
+
const outerDropzone = mount(
|
|
1261
|
+
<Dropzone {...parentProps}>
|
|
1262
|
+
<InnerDropzone />
|
|
1263
|
+
</Dropzone>
|
|
1264
|
+
)
|
|
1265
|
+
|
|
1266
|
+
outerDropzone.find(InnerDropzone).simulate('dragEnter', createDtWithFiles())
|
|
1267
|
+
await flushPromises(outerDropzone)
|
|
1268
|
+
|
|
1269
|
+
outerDropzone.find(InnerDropzone).simulate('dragOver', createDtWithFiles())
|
|
1270
|
+
await flushPromises(outerDropzone)
|
|
1271
|
+
|
|
1272
|
+
outerDropzone.find(InnerDropzone).simulate('dragLeave', createDtWithFiles())
|
|
1273
|
+
await flushPromises(outerDropzone)
|
|
1274
|
+
|
|
1275
|
+
outerDropzone.find(InnerDropzone).simulate('drop', createDtWithFiles(images))
|
|
1276
|
+
await flushPromises(outerDropzone)
|
|
1277
|
+
|
|
1278
|
+
expect(parentProps.onDragEnter).not.toHaveBeenCalled()
|
|
1279
|
+
expect(parentProps.onDragOver).not.toHaveBeenCalled()
|
|
1280
|
+
expect(parentProps.onDragLeave).not.toHaveBeenCalled()
|
|
1281
|
+
expect(parentProps.onDrop).not.toHaveBeenCalled()
|
|
1282
|
+
})
|
|
1241
1283
|
})
|
|
1242
1284
|
})
|
|
1243
1285
|
|
package/styleguide.config.js
CHANGED
|
@@ -37,6 +37,14 @@ module.exports = {
|
|
|
37
37
|
name: 'Accepting specific file types',
|
|
38
38
|
content: 'examples/Accept/Readme.md'
|
|
39
39
|
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Previews',
|
|
42
|
+
content: 'examples/Previews/Readme.md'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Nested Dropzone',
|
|
46
|
+
content: 'examples/Nesting/Readme.md'
|
|
47
|
+
},
|
|
40
48
|
{
|
|
41
49
|
name: 'Opening File Dialog Programmatically',
|
|
42
50
|
content: 'examples/FileDialog/Readme.md'
|
package/testSetup.js
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
|
|
3
|
-
export interface FileWithPreview extends File {
|
|
4
|
-
preview?: string;
|
|
5
|
-
}
|
|
2
|
+
import {func} from "prop-types";
|
|
6
3
|
|
|
7
4
|
export type DropFileEventHandler = (
|
|
8
|
-
acceptedOrRejected:
|
|
5
|
+
acceptedOrRejected: File[],
|
|
9
6
|
event: React.DragEvent<HTMLDivElement>
|
|
10
7
|
) => void;
|
|
11
8
|
export type DropFilesEventHandler = (
|
|
12
|
-
accepted:
|
|
13
|
-
rejected:
|
|
9
|
+
accepted: File[],
|
|
10
|
+
rejected: File[],
|
|
14
11
|
event: React.DragEvent<HTMLDivElement>
|
|
15
12
|
) => void;
|
|
16
13
|
|
|
17
14
|
type DropzoneRenderArgs = {
|
|
18
|
-
draggedFiles:
|
|
19
|
-
acceptedFiles:
|
|
20
|
-
rejectedFiles:
|
|
15
|
+
draggedFiles: File[];
|
|
16
|
+
acceptedFiles: File[];
|
|
17
|
+
rejectedFiles: File[];
|
|
21
18
|
isDragActive: boolean;
|
|
22
19
|
isDragAccept: boolean;
|
|
23
20
|
isDragReject: boolean;
|
|
@@ -31,7 +28,6 @@ type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
|
|
|
31
28
|
export type DropzoneProps = Omit<React.HTMLProps<HTMLDivElement>, "onDrop" | "ref"> & {
|
|
32
29
|
disableClick?: boolean;
|
|
33
30
|
disabled?: boolean;
|
|
34
|
-
disablePreview?: boolean;
|
|
35
31
|
preventDropOnDocument?: boolean;
|
|
36
32
|
inputProps?: React.InputHTMLAttributes<HTMLInputElement>;
|
|
37
33
|
maxSize?: number;
|
|
@@ -48,7 +44,7 @@ export type DropzoneProps = Omit<React.HTMLProps<HTMLDivElement>, "onDrop" | "re
|
|
|
48
44
|
onDropAccepted?: DropFileEventHandler;
|
|
49
45
|
onDropRejected?: DropFileEventHandler;
|
|
50
46
|
onFileDialogCancel?(): void;
|
|
51
|
-
getDataTransferItems?(event: React.DragEvent<HTMLDivElement> | DragEvent): Promise<Array<File | DataTransferItem>>;
|
|
47
|
+
getDataTransferItems?(event: React.DragEvent<HTMLDivElement> | React.ChangeEvent<HTMLInputElement> | DragEvent | Event): Promise<Array<File | DataTransferItem>>;
|
|
52
48
|
children?: React.ReactNode | DropzoneRenderFunction;
|
|
53
49
|
ref?: React.Ref<Dropzone>;
|
|
54
50
|
};
|
package/typings/tests/all.tsx
CHANGED
package/typings/tests/plugin.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, {Component} from "react";
|
|
2
2
|
import Dropzone from "../../";
|
|
3
3
|
|
|
4
|
-
export class
|
|
4
|
+
export class TestReactDragEvt extends Component {
|
|
5
5
|
getFiles = async (evt: React.DragEvent<HTMLDivElement>) => {
|
|
6
6
|
const files = Array.from(evt.dataTransfer.files);
|
|
7
7
|
return files;
|
|
@@ -35,7 +35,7 @@ export class TestDataTransferItems extends Component {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
export class
|
|
38
|
+
export class TestNativeDragEventEvt extends Component {
|
|
39
39
|
getFiles = async (evt: DragEvent) => {
|
|
40
40
|
const files = Array.from(evt.dataTransfer.files);
|
|
41
41
|
return files;
|
|
@@ -51,3 +51,38 @@ export class TestNativeEvt extends Component {
|
|
|
51
51
|
);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
+
|
|
55
|
+
export class TestChangeEvt extends Component {
|
|
56
|
+
getFiles = async (evt: React.ChangeEvent<HTMLInputElement>) => {
|
|
57
|
+
const files = Array.from(evt.target.files);
|
|
58
|
+
return files;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
render() {
|
|
62
|
+
return (
|
|
63
|
+
<div>
|
|
64
|
+
<Dropzone getDataTransferItems={this.getFiles}>
|
|
65
|
+
Hi
|
|
66
|
+
</Dropzone>
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
export class TestNativeEvt extends Component {
|
|
74
|
+
getFiles = async (evt: Event) => {
|
|
75
|
+
const files = Array.from((evt.target as HTMLInputElement).files);
|
|
76
|
+
return files;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
render() {
|
|
80
|
+
return (
|
|
81
|
+
<div>
|
|
82
|
+
<Dropzone getDataTransferItems={this.getFiles}>
|
|
83
|
+
Hi
|
|
84
|
+
</Dropzone>
|
|
85
|
+
</div>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
}
|