react-dropzone 4.2.7 → 4.2.11

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/.travis.yml CHANGED
@@ -5,8 +5,9 @@ notifications:
5
5
  node_js:
6
6
  - '8'
7
7
  after_success:
8
- - bash <(curl -s https://codecov.io/bash)
9
- - npm run semantic-release
8
+ - 'bash <(curl -s https://codecov.io/bash)'
9
+ - yarn global add travis-deploy-once
10
+ - travis-deploy-once "yarn global add semantic-release@13 && semantic-release"
10
11
  branches:
11
12
  except:
12
13
  - /^v\d+\.\d+\.\d+$/
package/README.md CHANGED
@@ -2,7 +2,10 @@
2
2
 
3
3
  # react-dropzone
4
4
 
5
- [![Build Status](https://travis-ci.org/react-dropzone/react-dropzone.svg?branch=master)](https://travis-ci.org/react-dropzone/react-dropzone) [![npm version](https://badge.fury.io/js/react-dropzone.svg)](https://badge.fury.io/js/react-dropzone) [![codecov](https://codecov.io/gh/react-dropzone/react-dropzone/branch/master/graph/badge.svg)](https://codecov.io/gh/react-dropzone/react-dropzone) [![OpenCollective](https://opencollective.com/react-dropzone/backers/badge.svg)](#backers)
5
+ [![npm](https://img.shields.io/npm/v/react-dropzone.svg)](https://www.npmjs.com/package/react-dropzone)
6
+ [![Build Status](https://travis-ci.org/react-dropzone/react-dropzone.svg?branch=master)](https://travis-ci.org/react-dropzone/react-dropzone)
7
+ [![codecov](https://codecov.io/gh/react-dropzone/react-dropzone/branch/master/graph/badge.svg)](https://codecov.io/gh/react-dropzone/react-dropzone)
8
+ [![OpenCollective](https://opencollective.com/react-dropzone/backers/badge.svg)](#backers)
6
9
  [![OpenCollective](https://opencollective.com/react-dropzone/sponsors/badge.svg)](#sponsors)
7
10
 
8
11
  Simple HTML5-compliant drag'n'drop zone for files built with React.js.
package/dist/es/index.js CHANGED
@@ -16,7 +16,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function"
16
16
 
17
17
  import React from 'react';
18
18
  import PropTypes from 'prop-types';
19
- import { supportMultiple, fileAccepted, allFilesAccepted, fileMatchSize, onDocumentDragOver, getDataTransferItems } from './utils';
19
+ import { supportMultiple, fileAccepted, allFilesAccepted, fileMatchSize, onDocumentDragOver, getDataTransferItems, isIeOrEdge } from './utils';
20
20
  import styles from './utils/styles';
21
21
 
22
22
  var Dropzone = function (_React$Component) {
@@ -74,8 +74,7 @@ var Dropzone = function (_React$Component) {
74
74
  document.addEventListener('drop', this.onDocumentDrop, false);
75
75
  }
76
76
  this.fileInputEl.addEventListener('click', this.onInputElementClick, false);
77
- // Tried implementing addEventListener, but didn't work out
78
- document.body.onfocus = this.onFileDialogCancel;
77
+ window.addEventListener('focus', this.onFileDialogCancel, false);
79
78
  }
80
79
  }, {
81
80
  key: 'componentWillUnmount',
@@ -89,10 +88,7 @@ var Dropzone = function (_React$Component) {
89
88
  if (this.fileInputEl != null) {
90
89
  this.fileInputEl.removeEventListener('click', this.onInputElementClick, false);
91
90
  }
92
- // Can be replaced with removeEventListener, if addEventListener works
93
- if (document != null) {
94
- document.body.onfocus = null;
95
- }
91
+ window.removeEventListener('focus', this.onFileDialogCancel, false);
96
92
  }
97
93
  }, {
98
94
  key: 'composeHandlers',
@@ -272,7 +268,11 @@ var Dropzone = function (_React$Component) {
272
268
  // in IE11/Edge the file-browser dialog is blocking, ensure this is behind setTimeout
273
269
  // this is so react can handle state changes in the onClick prop above above
274
270
  // see: https://github.com/react-dropzone/react-dropzone/issues/450
275
- setTimeout(this.open.bind(this), 0);
271
+ if (isIeOrEdge()) {
272
+ setTimeout(this.open.bind(this), 0);
273
+ } else {
274
+ this.open();
275
+ }
276
276
  }
277
277
  }
278
278
  }, {
@@ -294,12 +294,14 @@ var Dropzone = function (_React$Component) {
294
294
 
295
295
  if (this.isFileDialogActive) {
296
296
  setTimeout(function () {
297
- // Returns an object as FileList
298
- var files = _this4.fileInputEl.files;
297
+ if (_this4.fileInputEl != null) {
298
+ // Returns an object as FileList
299
+ var files = _this4.fileInputEl.files;
299
300
 
300
301
 
301
- if (!files.length) {
302
- _this4.isFileDialogActive = false;
302
+ if (!files.length) {
303
+ _this4.isFileDialogActive = false;
304
+ }
303
305
  }
304
306
 
305
307
  if (typeof onFileDialogCancel === 'function') {
@@ -463,7 +465,7 @@ Dropzone.propTypes = {
463
465
  * Windows. In some cases there might not be a mime type set at all.
464
466
  * See: https://github.com/react-dropzone/react-dropzone/issues/276
465
467
  */
466
- accept: PropTypes.string,
468
+ accept: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),
467
469
 
468
470
  /**
469
471
  * Contents of the dropzone
@@ -476,8 +478,8 @@ Dropzone.propTypes = {
476
478
  disableClick: PropTypes.bool,
477
479
 
478
480
  /**
479
- * Enable/disable the dropzone entirely
480
- */
481
+ * Enable/disable the dropzone entirely
482
+ */
481
483
  disabled: PropTypes.bool,
482
484
 
483
485
  /**
@@ -506,12 +508,12 @@ Dropzone.propTypes = {
506
508
  name: PropTypes.string,
507
509
 
508
510
  /**
509
- * Maximum file size
511
+ * Maximum file size (in bytes)
510
512
  */
511
513
  maxSize: PropTypes.number,
512
514
 
513
515
  /**
514
- * Minimum file size
516
+ * Minimum file size (in bytes)
515
517
  */
516
518
  minSize: PropTypes.number,
517
519
 
@@ -521,22 +523,22 @@ Dropzone.propTypes = {
521
523
  className: PropTypes.string,
522
524
 
523
525
  /**
524
- * className for active state
526
+ * className to apply when drag is active
525
527
  */
526
528
  activeClassName: PropTypes.string,
527
529
 
528
530
  /**
529
- * className for accepted state
531
+ * className to apply when drop will be accepted
530
532
  */
531
533
  acceptClassName: PropTypes.string,
532
534
 
533
535
  /**
534
- * className for rejected state
536
+ * className to apply when drop will be rejected
535
537
  */
536
538
  rejectClassName: PropTypes.string,
537
539
 
538
540
  /**
539
- * className for disabled state
541
+ * className to apply when dropzone is disabled
540
542
  */
541
543
  disabledClassName: PropTypes.string,
542
544
 
@@ -39,4 +39,18 @@ export function allFilesAccepted(files, accept) {
39
39
  // allow the entire document to be a drag target
40
40
  export function onDocumentDragOver(evt) {
41
41
  evt.preventDefault();
42
+ }
43
+
44
+ function isIe(userAgent) {
45
+ return userAgent.indexOf('MSIE') !== -1 || userAgent.indexOf('Trident/') !== -1;
46
+ }
47
+
48
+ function isEdge(userAgent) {
49
+ return userAgent.indexOf('Edge/') !== -1;
50
+ }
51
+
52
+ export function isIeOrEdge() {
53
+ var userAgent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.navigator.userAgent;
54
+
55
+ return isIe(userAgent) || isEdge(userAgent);
42
56
  }
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],t):"object"==typeof exports?exports.Dropzone=t(require("react"),require("prop-types")):e.Dropzone=t(e.react,e["prop-types"])}(this,function(e,t){return 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=0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(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}function i(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)}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(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}function s(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)}Object.defineProperty(t,"__esModule",{value:!0});var l=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(){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}}(),p=n(1),f=r(p),d=n(2),h=r(d),v=n(3),g=n(5),m=r(g),y=function(e){function t(e,n){a(this,t);var r=c(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return r.renderChildren=function(e,t,n,o){return"function"==typeof e?e(l({},r.state,{isDragActive:t,isDragAccept:n,isDragReject:o})):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.setRef=r.setRef.bind(r),r.setRefs=r.setRefs.bind(r),r.isFileDialogActive=!1,r.state={draggedFiles:[],acceptedFiles:[],rejectedFiles:[]},r}return s(t,e),u(t,[{key:"componentDidMount",value:function(){var e=this.props.preventDropOnDocument;this.dragTargets=[],e&&(document.addEventListener("dragover",v.onDocumentDragOver,!1),document.addEventListener("drop",this.onDocumentDrop,!1)),this.fileInputEl.addEventListener("click",this.onInputElementClick,!1),document.body.onfocus=this.onFileDialogCancel}},{key:"componentWillUnmount",value:function(){this.props.preventDropOnDocument&&(document.removeEventListener("dragover",v.onDocumentDragOver),document.removeEventListener("drop",this.onDocumentDrop)),null!=this.fileInputEl&&this.fileInputEl.removeEventListener("click",this.onInputElementClick,!1),null!=document&&(document.body.onfocus=null)}},{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&&this.props.onDragStart.call(this,e)}},{key:"onDragEnter",value:function(e){e.preventDefault(),-1===this.dragTargets.indexOf(e.target)&&this.dragTargets.push(e.target),this.setState({isDragActive:!0,draggedFiles:(0,v.getDataTransferItems)(e)}),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&&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&&this.props.onDragLeave.call(this,e))}},{key:"onDrop",value:function(e){var t=this,n=this.props,r=n.onDrop,o=n.onDropAccepted,a=n.onDropRejected,c=n.multiple,s=n.disablePreview,l=n.accept,u=(0,v.getDataTransferItems)(e),p=[],f=[];e.preventDefault(),this.dragTargets=[],this.isFileDialogActive=!1,u.forEach(function(e){if(!s)try{e.preview=window.URL.createObjectURL(e)}catch(e){}(0,v.fileAccepted)(e,l)&&(0,v.fileMatchSize)(e,t.props.maxSize,t.props.minSize)?p.push(e):f.push(e)}),c||f.push.apply(f,i(p.splice(1))),r&&r.call(this,p,f,e),f.length>0&&a&&a.call(this,f,e),p.length>0&&o&&o.call(this,p,e),this.draggedFiles=null,this.setState({isDragActive:!1,draggedFiles:[],acceptedFiles:p,rejectedFiles:f})}},{key:"onClick",value:function(e){var t=this.props,n=t.onClick;t.disableClick||(e.stopPropagation(),n&&n.call(this,e),setTimeout(this.open.bind(this),0))}},{key:"onInputElementClick",value:function(e){e.stopPropagation(),this.props.inputProps&&this.props.inputProps.onClick&&this.props.inputProps.onClick()}},{key:"onFileDialogCancel",value:function(){var e=this,t=this.props.onFileDialogCancel;this.isFileDialogActive&&setTimeout(function(){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 e=this.props,t=e.accept,n=e.acceptClassName,r=e.activeClassName,i=e.children,a=e.disabled,c=e.disabledClassName,s=e.inputProps,u=e.multiple,p=e.name,d=e.rejectClassName,h=o(e,["accept","acceptClassName","activeClassName","children","disabled","disabledClassName","inputProps","multiple","name","rejectClassName"]),g=h.acceptStyle,y=h.activeStyle,D=h.className,b=void 0===D?"":D,x=h.disabledStyle,S=h.rejectStyle,C=h.style,O=o(h,["acceptStyle","activeStyle","className","disabledStyle","rejectStyle","style"]),j=this.state,k=j.isDragActive,E=j.draggedFiles,w=E.length,P=u||w<=1,F=w>0&&(0,v.allFilesAccepted)(E,this.props.accept),_=w>0&&(!F||!P),A=!(b||C||y||g||S||x);k&&r&&(b+=" "+r),F&&n&&(b+=" "+n),_&&d&&(b+=" "+d),a&&c&&(b+=" "+c),A&&(C=m.default.default,y=m.default.active,g=C.active,S=m.default.rejected,x=m.default.disabled);var T=l({},C);y&&k&&(T=l({},C,y)),g&&F&&(T=l({},T,g)),S&&_&&(T=l({},T,S)),x&&a&&(T=l({},C,x));var M={accept:t,disabled:a,type:"file",style:{display:"none"},multiple:v.supportMultiple&&u,ref:this.setRefs,onChange:this.onDrop,autoComplete:"off"};p&&p.length&&(M.name=p);var N=(O.acceptedFiles,O.preventDropOnDocument,O.disablePreview,O.disableClick,O.onDropAccepted,O.onDropRejected,O.onFileDialogCancel,O.maxSize,O.minSize,o(O,["acceptedFiles","preventDropOnDocument","disablePreview","disableClick","onDropAccepted","onDropRejected","onFileDialogCancel","maxSize","minSize"]));return f.default.createElement("div",l({className:b,style:T},N,{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,k,F,_),f.default.createElement("input",l({},s,M)))}}]),t}(f.default.Component);t.default=y,y.propTypes={accept:h.default.string,children:h.default.oneOfType([h.default.node,h.default.func]),disableClick:h.default.bool,disabled:h.default.bool,disablePreview:h.default.bool,preventDropOnDocument:h.default.bool,inputProps:h.default.object,multiple:h.default.bool,name:h.default.string,maxSize:h.default.number,minSize:h.default.number,className:h.default.string,activeClassName:h.default.string,acceptClassName:h.default.string,rejectClassName:h.default.string,disabledClassName:h.default.string,style:h.default.object,activeStyle:h.default.object,acceptStyle:h.default.object,rejectStyle:h.default.object,disabledStyle:h.default.object,onClick:h.default.func,onDrop:h.default.func,onDropAccepted:h.default.func,onDropRejected:h.default.func,onDragStart:h.default.func,onDragEnter:h.default.func,onDragOver:h.default.func,onDragLeave:h.default.func,onFileDialogCancel:h.default.func},y.defaultProps={preventDropOnDocument:!0,disabled:!1,disablePreview:!1,disableClick:!1,multiple:!0,maxSize:1/0,minSize:0},e.exports=t.default},function(t,n){t.exports=e},function(e,n){e.exports=t},function(e,t,n){"use strict";function r(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)}function o(e,t){return"application/x-moz-file"===e.type||(0,l.default)(e,t)}function i(e,t,n){return e.size<=t&&e.size>=n}function a(e,t){return e.every(function(e){return o(e,t)})}function c(e){e.preventDefault()}Object.defineProperty(t,"__esModule",{value:!0}),t.supportMultiple=void 0,t.getDataTransferItems=r,t.fileAccepted=o,t.fileMatchSize=i,t.allFilesAccepted=a,t.onDocumentDragOver=c;var s=n(4),l=function(e){return e&&e.__esModule?e:{default:e}}(s);t.supportMultiple="undefined"==typeof document||!document||!document.createElement||"multiple"in document.createElement("input")},function(e,t){e.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";t.__esModule=!0,n(8),n(9),t.default=function(e,t){if(e&&t){var n=function(){var n=Array.isArray(t)?t:t.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return{v:n.some(function(e){var t=e.trim();return"."===t.charAt(0)?r.toLowerCase().endsWith(t.toLowerCase()):/\/\*$/.test(t)?i===t.replace(/\/.*$/,""):o===t})}}();if("object"==typeof n)return n.v}return!0},e.exports=t.default},function(e,t){var n=e.exports={version:"1.2.2"};"number"==typeof __e&&(__e=n)},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,n){var r=n(2),o=n(1),i=n(4),a=n(19),c="prototype",s=function(e,t){return function(){return e.apply(t,arguments)}},l=function(e,t,n){var u,p,f,d,h=e&l.G,v=e&l.P,g=h?r:e&l.S?r[t]||(r[t]={}):(r[t]||{})[c],m=h?o:o[t]||(o[t]={});h&&(n=t);for(u in n)p=!(e&l.F)&&g&&u in g,f=(p?g:n)[u],d=e&l.B&&p?s(f,r):v&&"function"==typeof f?s(Function.call,f):f,g&&!p&&a(g,u,f),m[u]!=f&&i(m,u,d),v&&((m[c]||(m[c]={}))[u]=f)};r.core=o,l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,e.exports=l},function(e,t,n){var r=n(5),o=n(18);e.exports=n(22)?function(e,t,n){return r.setDesc(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t){var n=Object;e.exports={create:n.create,getProto:n.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:n.getOwnPropertyDescriptor,setDesc:n.defineProperty,setDescs:n.defineProperties,getKeys:n.keys,getNames:n.getOwnPropertyNames,getSymbols:n.getOwnPropertySymbols,each:[].forEach}},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(20)("wks"),o=n(2).Symbol;e.exports=function(e){return r[e]||(r[e]=o&&o[e]||(o||n(6))("Symbol."+e))}},function(e,t,n){n(26),e.exports=n(1).Array.some},function(e,t,n){n(25),e.exports=n(1).String.endsWith},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(10);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){e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(r){try{return t[n(7)("match")]=!1,!"/./"[e](t)}catch(e){}}return!0}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){var r=n(16),o=n(11),i=n(7)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==o(e))}},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(2),o=n(4),i=n(6)("src"),a="toString",c=Function[a],s=(""+c).split(a);n(1).inspectSource=function(e){return c.call(e)},(e.exports=function(e,t,n,a){"function"==typeof n&&(o(n,i,e[t]?""+e[t]:s.join(String(t))),"name"in n||(n.name=t)),e===r?e[t]=n:(a||delete e[t],o(e,t,n))})(Function.prototype,a,function(){return"function"==typeof this&&this[i]||c.call(this)})},function(e,t,n){var r=n(2),o="__core-js_shared__",i=r[o]||(r[o]={});e.exports=function(e){return i[e]||(i[e]={})}},function(e,t,n){var r=n(17),o=n(13);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){e.exports=!n(15)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},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(23),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t,n){"use strict";var r=n(3),o=n(24),i=n(21),a="endsWith",c=""[a];r(r.P+r.F*n(14)(a),"String",{endsWith:function(e){var t=i(this,e,a),n=arguments,r=n.length>1?n[1]:void 0,s=o(t.length),l=void 0===r?s:Math.min(o(r),s),u=String(e);return c?c.call(t,u,l):t.slice(l-u.length,l)===u}})},function(e,t,n){var r=n(5),o=n(3),i=n(1).Array||Array,a={},c=function(e,t){r.each.call(e.split(","),function(e){void 0==t&&e in i?a[e]=i[e]:e in[]&&(a[e]=n(12)(Function.call,[][e],t))})};c("pop,reverse,shift,keys,values,entries",1),c("indexOf,every,some,forEach,map,filter,find,findIndex,includes",3),c("join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill"),o(o.S,"Array",a)}])},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={rejected:{borderStyle:"solid",borderColor:"#c66",backgroundColor:"#eee"},disabled:{opacity:.5},active:{borderStyle:"solid",borderColor:"#6c6",backgroundColor:"#eee"},default:{width:200,height:200,borderWidth:2,borderColor:"#666",borderStyle:"dashed",borderRadius:5}},e.exports=t.default}])});
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMmJiZGVhNDgyMDNlOTI3YWY4ZjciLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovLy8uL3NyYy91dGlscy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXR0ci1hY2NlcHQvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvc3R5bGVzLmpzIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJ0aGlzIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xX18iLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXyIsIm1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVzIiwiaSIsImwiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJnZXQiLCJuIiwiX19lc01vZHVsZSIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJvYmoiLCJkZWZhdWx0IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwia2V5cyIsInRhcmdldCIsImluZGV4T2YiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIiLCJBcnJheSIsImlzQXJyYXkiLCJhcnIyIiwibGVuZ3RoIiwiZnJvbSIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwidmFsdWUiLCJ3cml0YWJsZSIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJhcmd1bWVudHMiLCJzb3VyY2UiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiX3JlYWN0IiwiX3JlYWN0MiIsIl9wcm9wVHlwZXMiLCJfcHJvcFR5cGVzMiIsIl91dGlscyIsIl9zdHlsZXMiLCJfc3R5bGVzMiIsIkRyb3B6b25lIiwiX1JlYWN0JENvbXBvbmVudCIsImNvbnRleHQiLCJfdGhpcyIsImdldFByb3RvdHlwZU9mIiwicmVuZGVyQ2hpbGRyZW4iLCJjaGlsZHJlbiIsImlzRHJhZ0FjdGl2ZSIsImlzRHJhZ0FjY2VwdCIsImlzRHJhZ1JlamVjdCIsInN0YXRlIiwiY29tcG9zZUhhbmRsZXJzIiwiYmluZCIsIm9uQ2xpY2siLCJvbkRvY3VtZW50RHJvcCIsIm9uRHJhZ0VudGVyIiwib25EcmFnTGVhdmUiLCJvbkRyYWdPdmVyIiwib25EcmFnU3RhcnQiLCJvbkRyb3AiLCJvbkZpbGVEaWFsb2dDYW5jZWwiLCJvbklucHV0RWxlbWVudENsaWNrIiwic2V0UmVmIiwic2V0UmVmcyIsImlzRmlsZURpYWxvZ0FjdGl2ZSIsImRyYWdnZWRGaWxlcyIsImFjY2VwdGVkRmlsZXMiLCJyZWplY3RlZEZpbGVzIiwicHJldmVudERyb3BPbkRvY3VtZW50IiwiZHJhZ1RhcmdldHMiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbkRvY3VtZW50RHJhZ092ZXIiLCJmaWxlSW5wdXRFbCIsImJvZHkiLCJvbmZvY3VzIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZXIiLCJkaXNhYmxlZCIsImV2dCIsIm5vZGUiLCJjb250YWlucyIsInByZXZlbnREZWZhdWx0IiwicHVzaCIsInNldFN0YXRlIiwiZ2V0RGF0YVRyYW5zZmVySXRlbXMiLCJzdG9wUHJvcGFnYXRpb24iLCJkYXRhVHJhbnNmZXIiLCJkcm9wRWZmZWN0IiwiZXJyIiwiX3RoaXMyIiwiZmlsdGVyIiwiZWwiLCJfdGhpczMiLCJfcHJvcHMiLCJvbkRyb3BBY2NlcHRlZCIsIm9uRHJvcFJlamVjdGVkIiwibXVsdGlwbGUiLCJkaXNhYmxlUHJldmlldyIsImFjY2VwdCIsImZpbGVMaXN0IiwiZm9yRWFjaCIsImZpbGUiLCJwcmV2aWV3Iiwid2luZG93IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiZmlsZUFjY2VwdGVkIiwiZmlsZU1hdGNoU2l6ZSIsIm1heFNpemUiLCJtaW5TaXplIiwiYXBwbHkiLCJzcGxpY2UiLCJfcHJvcHMyIiwiZGlzYWJsZUNsaWNrIiwic2V0VGltZW91dCIsIm9wZW4iLCJpbnB1dFByb3BzIiwiX3RoaXM0IiwiZmlsZXMiLCJyZWYiLCJjbGljayIsIl9wcm9wczMiLCJhY2NlcHRDbGFzc05hbWUiLCJhY3RpdmVDbGFzc05hbWUiLCJkaXNhYmxlZENsYXNzTmFtZSIsInJlamVjdENsYXNzTmFtZSIsInJlc3QiLCJhY2NlcHRTdHlsZSIsImFjdGl2ZVN0eWxlIiwiX3Jlc3QkY2xhc3NOYW1lIiwiY2xhc3NOYW1lIiwidW5kZWZpbmVkIiwiZGlzYWJsZWRTdHlsZSIsInJlamVjdFN0eWxlIiwic3R5bGUiLCJfc3RhdGUiLCJmaWxlc0NvdW50IiwiaXNNdWx0aXBsZUFsbG93ZWQiLCJhbGxGaWxlc0FjY2VwdGVkIiwibm9TdHlsZXMiLCJhY3RpdmUiLCJyZWplY3RlZCIsImFwcGxpZWRTdHlsZSIsImlucHV0QXR0cmlidXRlcyIsInR5cGUiLCJkaXNwbGF5Iiwic3VwcG9ydE11bHRpcGxlIiwib25DaGFuZ2UiLCJhdXRvQ29tcGxldGUiLCJkaXZQcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJhcmlhLWRpc2FibGVkIiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwic3RyaW5nIiwib25lT2ZUeXBlIiwiZnVuYyIsImJvb2wiLCJudW1iZXIiLCJkZWZhdWx0UHJvcHMiLCJJbmZpbml0eSIsImV2ZW50IiwiZGF0YVRyYW5zZmVySXRlbXNMaXN0IiwiZHQiLCJpdGVtcyIsInNsaWNlIiwiX2F0dHJBY2NlcHQyIiwic2l6ZSIsImV2ZXJ5IiwiX2F0dHJBY2NlcHQiLCJ0IiwiZSIsInIiLCJpZCIsImxvYWRlZCIsInNwbGl0IiwicmVwbGFjZSIsInYiLCJzb21lIiwidHJpbSIsImNoYXJBdCIsInRvTG93ZXJDYXNlIiwiZW5kc1dpdGgiLCJ0ZXN0IiwidmVyc2lvbiIsIl9fZSIsIk1hdGgiLCJGdW5jdGlvbiIsIl9fZyIsInUiLCJmIiwiYSIsInkiLCJHIiwiaCIsIlAiLCJTIiwieCIsIkYiLCJCIiwiY29yZSIsIlciLCJzZXREZXNjIiwiZ2V0UHJvdG8iLCJpc0VudW0iLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImdldERlc2MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJzZXREZXNjcyIsImdldEtleXMiLCJnZXROYW1lcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZWFjaCIsInJhbmRvbSIsImNvbmNhdCIsInRvU3RyaW5nIiwiU3ltYm9sIiwiU3RyaW5nIiwiaW5zcGVjdFNvdXJjZSIsImpvaW4iLCJjZWlsIiwiZmxvb3IiLCJpc05hTiIsIm1pbiIsImJvcmRlclN0eWxlIiwiYm9yZGVyQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJvcGFjaXR5Iiwid2lkdGgiLCJoZWlnaHQiLCJib3JkZXJXaWR0aCIsImJvcmRlclJhZGl1cyJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBQUEsRUFBQUMsR0FD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SCxPQUFBck0sS0FBQUYsS0FBQVksRUFBQWdOLEVBQUF6TSxHQUFBUCxFQUFBc0wsTUFBQS9LLEVBQUF5TSxFQUFBNUwsT0FBQWIsS0FBQXlNLE1BQW9ELFNBQUFyQixFQUFBM0wsRUFBQTZMLEdBQWlCLEdBQUFELEdBQUFDLEVBQUEsR0FBQW5NLEVBQUFtTSxFQUFBLEdBQUEzTSxFQUFBMk0sRUFBQSxHQUFBNUssYUFBQTZMLEtBQTBDeE4sRUFBQSxTQUFBcU0sRUFBQTNMLEdBQWlCNEwsRUFBQTJDLEtBQUFuUCxLQUFBdU0sRUFBQUssTUFBQSxjQUFBTCxPQUFxQyxJQUFBM0wsR0FBQTJMLElBQUF6TSxHQUFBNE4sRUFBQW5CLEdBQUF6TSxFQUFBeU0sWUFBQW1CLEVBQUFuQixHQUFBRSxFQUFBLElBQUFlLFNBQUF4TixRQUFBdU0sR0FBQTNMLE1BQTJFVixHQUFBLDJDQUFBQSxFQUFBLG1FQUFBQSxFQUFBLDZGQUFBSSxJQUFBMk4sRUFBQSxRQUFBUCxPTnF5QjVvSixTQUFVdk8sRUFBUUQsRUFBU1MsR0FFakMsWUFHQVksUUFBT0MsZUFBZXRCLEVBQVMsY0FDN0I0RCxPQUFPLElBRVQ1RCxFQUFRb0MsU081eUJOb0osVUFDRXFGLFlBQWEsUUFDYkMsWUFBYSxPQUNiQyxnQkFBaUIsUUFFbkJ2SixVQUNFd0osUUFBUyxJQUVYekYsUUFDRXNGLFlBQWEsUUFDYkMsWUFBYSxPQUNiQyxnQkFBaUIsUUFFbkIzTyxTQUNFNk8sTUFBTyxJQUNQQyxPQUFRLElBQ1JDLFlBQWEsRUFDYkwsWUFBYSxPQUNiRCxZQUFhLFNBQ2JPLGFBQWMsSVBnekJsQm5SLEVBQU9ELFFBQVVBLEVBQWlCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCIsIFwicHJvcC10eXBlc1wiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJEcm9wem9uZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiRHJvcHpvbmVcIl0gPSBmYWN0b3J5KHJvb3RbXCJyZWFjdFwiXSwgcm9vdFtcInByb3AtdHlwZXNcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fKSB7XG5yZXR1cm4gXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJyZWFjdFwiLCBcInByb3AtdHlwZXNcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiRHJvcHpvbmVcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkRyb3B6b25lXCJdID0gZmFjdG9yeShyb290W1wicmVhY3RcIl0sIHJvb3RbXCJwcm9wLXR5cGVzXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXykge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9yZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBfdXRpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG52YXIgX3N0eWxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbnZhciBfc3R5bGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0eWxlcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0gLyogZXNsaW50IHByZWZlci10ZW1wbGF0ZTogMCAqL1xuXG52YXIgRHJvcHpvbmUgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRHJvcHpvbmUsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIERyb3B6b25lKHByb3BzLCBjb250ZXh0KSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERyb3B6b25lKTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChEcm9wem9uZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKERyb3B6b25lKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xuXG4gICAgX3RoaXMucmVuZGVyQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGRyZW4sIGlzRHJhZ0FjdGl2ZSwgaXNEcmFnQWNjZXB0LCBpc0RyYWdSZWplY3QpIHtcbiAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuKF9leHRlbmRzKHt9LCBfdGhpcy5zdGF0ZSwge1xuICAgICAgICAgIGlzRHJhZ0FjdGl2ZTogaXNEcmFnQWN0aXZlLFxuICAgICAgICAgIGlzRHJhZ0FjY2VwdDogaXNEcmFnQWNjZXB0LFxuICAgICAgICAgIGlzRHJhZ1JlamVjdDogaXNEcmFnUmVqZWN0XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9O1xuXG4gICAgX3RoaXMuY29tcG9zZUhhbmRsZXJzID0gX3RoaXMuY29tcG9zZUhhbmRsZXJzLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2xpY2sgPSBfdGhpcy5vbkNsaWNrLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uRG9jdW1lbnREcm9wID0gX3RoaXMub25Eb2N1bWVudERyb3AuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25EcmFnRW50ZXIgPSBfdGhpcy5vbkRyYWdFbnRlci5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkRyYWdMZWF2ZSA9IF90aGlzLm9uRHJhZ0xlYXZlLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uRHJhZ092ZXIgPSBfdGhpcy5vbkRyYWdPdmVyLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uRHJhZ1N0YXJ0ID0gX3RoaXMub25EcmFnU3RhcnQuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25Ecm9wID0gX3RoaXMub25Ecm9wLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uRmlsZURpYWxvZ0NhbmNlbCA9IF90aGlzLm9uRmlsZURpYWxvZ0NhbmNlbC5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbklucHV0RWxlbWVudENsaWNrID0gX3RoaXMub25JbnB1dEVsZW1lbnRDbGljay5iaW5kKF90aGlzKTtcblxuICAgIF90aGlzLnNldFJlZiA9IF90aGlzLnNldFJlZi5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5zZXRSZWZzID0gX3RoaXMuc2V0UmVmcy5iaW5kKF90aGlzKTtcblxuICAgIF90aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBkcmFnZ2VkRmlsZXM6IFtdLFxuICAgICAgYWNjZXB0ZWRGaWxlczogW10sXG4gICAgICByZWplY3RlZEZpbGVzOiBbXVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKERyb3B6b25lLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgcHJldmVudERyb3BPbkRvY3VtZW50ID0gdGhpcy5wcm9wcy5wcmV2ZW50RHJvcE9uRG9jdW1lbnQ7XG5cbiAgICAgIHRoaXMuZHJhZ1RhcmdldHMgPSBbXTtcblxuICAgICAgaWYgKHByZXZlbnREcm9wT25Eb2N1bWVudCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIF91dGlscy5vbkRvY3VtZW50RHJhZ092ZXIsIGZhbHNlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMub25Eb2N1bWVudERyb3AsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsZUlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uSW5wdXRFbGVtZW50Q2xpY2ssIGZhbHNlKTtcbiAgICAgIC8vIFRyaWVkIGltcGxlbWVudGluZyBhZGRFdmVudExpc3RlbmVyLCBidXQgZGlkbid0IHdvcmsgb3V0XG4gICAgICBkb2N1bWVudC5ib2R5Lm9uZm9jdXMgPSB0aGlzLm9uRmlsZURpYWxvZ0NhbmNlbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdmFyIHByZXZlbnREcm9wT25Eb2N1bWVudCA9IHRoaXMucHJvcHMucHJldmVudERyb3BPbkRvY3VtZW50O1xuXG4gICAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgX3V0aWxzLm9uRG9jdW1lbnREcmFnT3Zlcik7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLm9uRG9jdW1lbnREcm9wKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpbGVJbnB1dEVsICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5maWxlSW5wdXRFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbnB1dEVsZW1lbnRDbGljaywgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gQ2FuIGJlIHJlcGxhY2VkIHdpdGggcmVtb3ZlRXZlbnRMaXN0ZW5lciwgaWYgYWRkRXZlbnRMaXN0ZW5lciB3b3Jrc1xuICAgICAgaWYgKGRvY3VtZW50ICE9IG51bGwpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5vbmZvY3VzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb3NlSGFuZGxlcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb3NlSGFuZGxlcnMoaGFuZGxlcikge1xuICAgICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYW5kbGVyO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRG9jdW1lbnREcm9wJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Eb2N1bWVudERyb3AoZXZ0KSB7XG4gICAgICBpZiAodGhpcy5ub2RlICYmIHRoaXMubm9kZS5jb250YWlucyhldnQudGFyZ2V0KSkge1xuICAgICAgICAvLyBpZiB3ZSBpbnRlcmNlcHRlZCBhbiBldmVudCBmb3Igb3VyIGluc3RhbmNlLCBsZXQgaXQgcHJvcGFnYXRlIGRvd24gdG8gdGhlIGluc3RhbmNlJ3Mgb25Ecm9wIGhhbmRsZXJcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmRyYWdUYXJnZXRzID0gW107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25EcmFnU3RhcnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkRyYWdTdGFydChldnQpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ1N0YXJ0KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EcmFnU3RhcnQuY2FsbCh0aGlzLCBldnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRHJhZ0VudGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25EcmFnRW50ZXIoZXZ0KSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgLy8gQ291bnQgdGhlIGRyb3B6b25lIGFuZCBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgZW50ZXJlZC5cbiAgICAgIGlmICh0aGlzLmRyYWdUYXJnZXRzLmluZGV4T2YoZXZ0LnRhcmdldCkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuZHJhZ1RhcmdldHMucHVzaChldnQudGFyZ2V0KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRHJhZ0FjdGl2ZTogdHJ1ZSwgLy8gRG8gbm90IHJlbHkgb24gZmlsZXMgZm9yIHRoZSBkcmFnIHN0YXRlLiBJdCBkb2Vzbid0IHdvcmsgaW4gU2FmYXJpLlxuICAgICAgICBkcmFnZ2VkRmlsZXM6ICgwLCBfdXRpbHMuZ2V0RGF0YVRyYW5zZmVySXRlbXMpKGV2dClcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdFbnRlcikge1xuICAgICAgICB0aGlzLnByb3BzLm9uRHJhZ0VudGVyLmNhbGwodGhpcywgZXZ0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkRyYWdPdmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25EcmFnT3ZlcihldnQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGUgZmlsZSBkaWFsb2cgb24gQ2hyb21lIGFsbG93cyB1c2VycyB0byBkcmFnIGZpbGVzIGZyb20gdGhlIGRpYWxvZyBvbnRvXG4gICAgICAgIC8vIHRoZSBkcm9wem9uZSwgY2F1c2luZyB0aGUgYnJvd3NlciB0aGUgY3Jhc2ggd2hlbiB0aGUgZmlsZSBkaWFsb2cgaXMgY2xvc2VkLlxuICAgICAgICAvLyBBIGRyb3AgZWZmZWN0IG9mICdub25lJyBwcmV2ZW50cyB0aGUgZmlsZSBmcm9tIGJlaW5nIGRyb3BwZWRcbiAgICAgICAgZXZ0LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gdGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUgPyAnbm9uZScgOiAnY29weSc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIG9mIGVycm9yXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ092ZXIpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkRyYWdPdmVyLmNhbGwodGhpcywgZXZ0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkRyYWdMZWF2ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRHJhZ0xlYXZlKGV2dCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAvLyBPbmx5IGRlYWN0aXZhdGUgb25jZSB0aGUgZHJvcHpvbmUgYW5kIGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gbGVmdC5cbiAgICAgIHRoaXMuZHJhZ1RhcmdldHMgPSB0aGlzLmRyYWdUYXJnZXRzLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgcmV0dXJuIGVsICE9PSBldnQudGFyZ2V0ICYmIF90aGlzMi5ub2RlLmNvbnRhaW5zKGVsKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZHJhZ1RhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIGRyYWdnaW5nIGZpbGVzIHN0YXRlXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dlZEZpbGVzOiBbXVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ0xlYXZlKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EcmFnTGVhdmUuY2FsbCh0aGlzLCBldnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRHJvcCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRHJvcChldnQpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkRyb3AgPSBfcHJvcHMub25Ecm9wLFxuICAgICAgICAgIG9uRHJvcEFjY2VwdGVkID0gX3Byb3BzLm9uRHJvcEFjY2VwdGVkLFxuICAgICAgICAgIG9uRHJvcFJlamVjdGVkID0gX3Byb3BzLm9uRHJvcFJlamVjdGVkLFxuICAgICAgICAgIG11bHRpcGxlID0gX3Byb3BzLm11bHRpcGxlLFxuICAgICAgICAgIGRpc2FibGVQcmV2aWV3ID0gX3Byb3BzLmRpc2FibGVQcmV2aWV3LFxuICAgICAgICAgIGFjY2VwdCA9IF9wcm9wcy5hY2NlcHQ7XG5cbiAgICAgIHZhciBmaWxlTGlzdCA9ICgwLCBfdXRpbHMuZ2V0RGF0YVRyYW5zZmVySXRlbXMpKGV2dCk7XG4gICAgICB2YXIgYWNjZXB0ZWRGaWxlcyA9IFtdO1xuICAgICAgdmFyIHJlamVjdGVkRmlsZXMgPSBbXTtcblxuICAgICAgLy8gU3RvcCBkZWZhdWx0IGJyb3dzZXIgYmVoYXZpb3JcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAvLyBSZXNldCB0aGUgY291bnRlciBhbG9uZyB3aXRoIHRoZSBkcmFnIG9uIGEgZHJvcC5cbiAgICAgIHRoaXMuZHJhZ1RhcmdldHMgPSBbXTtcbiAgICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgIGZpbGVMaXN0LmZvckVhY2goZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgaWYgKCFkaXNhYmxlUHJldmlldykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaWxlLnByZXZpZXcgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBwcmV2aWV3IGZvciBmaWxlJywgZmlsZSwgZXJyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCgwLCBfdXRpbHMuZmlsZUFjY2VwdGVkKShmaWxlLCBhY2NlcHQpICYmICgwLCBfdXRpbHMuZmlsZU1hdGNoU2l6ZSkoZmlsZSwgX3RoaXMzLnByb3BzLm1heFNpemUsIF90aGlzMy5wcm9wcy5taW5TaXplKSkge1xuICAgICAgICAgIGFjY2VwdGVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3RlZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAgIC8vIGlmIG5vdCBpbiBtdWx0aSBtb2RlIGFkZCBhbnkgZXh0cmEgYWNjZXB0ZWQgZmlsZXMgdG8gcmVqZWN0ZWQuXG4gICAgICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBlbmQgdXNlcnMgdG8gZWFzaWx5IGlnbm9yZSBhIG11bHRpIGZpbGUgZHJvcCBpbiBcInNpbmdsZVwiIG1vZGUuXG4gICAgICAgIHJlamVjdGVkRmlsZXMucHVzaC5hcHBseShyZWplY3RlZEZpbGVzLCBfdG9Db25zdW1hYmxlQXJyYXkoYWNjZXB0ZWRGaWxlcy5zcGxpY2UoMSkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9uRHJvcCkge1xuICAgICAgICBvbkRyb3AuY2FsbCh0aGlzLCBhY2NlcHRlZEZpbGVzLCByZWplY3RlZEZpbGVzLCBldnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVqZWN0ZWRGaWxlcy5sZW5ndGggPiAwICYmIG9uRHJvcFJlamVjdGVkKSB7XG4gICAgICAgIG9uRHJvcFJlamVjdGVkLmNhbGwodGhpcywgcmVqZWN0ZWRGaWxlcywgZXZ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BBY2NlcHRlZCkge1xuICAgICAgICBvbkRyb3BBY2NlcHRlZC5jYWxsKHRoaXMsIGFjY2VwdGVkRmlsZXMsIGV2dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIGZpbGVzIHZhbHVlXG4gICAgICB0aGlzLmRyYWdnZWRGaWxlcyA9IG51bGw7XG5cbiAgICAgIC8vIFJlc2V0IGRyYWcgc3RhdGVcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICBkcmFnZ2VkRmlsZXM6IFtdLFxuICAgICAgICBhY2NlcHRlZEZpbGVzOiBhY2NlcHRlZEZpbGVzLFxuICAgICAgICByZWplY3RlZEZpbGVzOiByZWplY3RlZEZpbGVzXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkNsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DbGljayhldnQpIHtcbiAgICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNsaWNrID0gX3Byb3BzMi5vbkNsaWNrLFxuICAgICAgICAgIGRpc2FibGVDbGljayA9IF9wcm9wczIuZGlzYWJsZUNsaWNrO1xuXG4gICAgICBpZiAoIWRpc2FibGVDbGljaykge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgICBvbkNsaWNrLmNhbGwodGhpcywgZXZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluIElFMTEvRWRnZSB0aGUgZmlsZS1icm93c2VyIGRpYWxvZyBpcyBibG9ja2luZywgZW5zdXJlIHRoaXMgaXMgYmVoaW5kIHNldFRpbWVvdXRcbiAgICAgICAgLy8gdGhpcyBpcyBzbyByZWFjdCBjYW4gaGFuZGxlIHN0YXRlIGNoYW5nZXMgaW4gdGhlIG9uQ2xpY2sgcHJvcCBhYm92ZSBhYm92ZVxuICAgICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvNDUwXG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5vcGVuLmJpbmQodGhpcyksIDApO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uSW5wdXRFbGVtZW50Q2xpY2snLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbklucHV0RWxlbWVudENsaWNrKGV2dCkge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKHRoaXMucHJvcHMuaW5wdXRQcm9wcyAmJiB0aGlzLnByb3BzLmlucHV0UHJvcHMub25DbGljaykge1xuICAgICAgICB0aGlzLnByb3BzLmlucHV0UHJvcHMub25DbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRmlsZURpYWxvZ0NhbmNlbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRmlsZURpYWxvZ0NhbmNlbCgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAvLyB0aW1lb3V0IHdpbGwgbm90IHJlY29nbml6ZSBjb250ZXh0IG9mIHRoaXMgbWV0aG9kXG4gICAgICB2YXIgb25GaWxlRGlhbG9nQ2FuY2VsID0gdGhpcy5wcm9wcy5vbkZpbGVEaWFsb2dDYW5jZWw7XG4gICAgICAvLyBleGVjdXRlIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIEZpbGVEaWFsb2cgaXMgb3BlbmVkIGluIHRoZSBicm93c2VyXG5cbiAgICAgIGlmICh0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBSZXR1cm5zIGFuIG9iamVjdCBhcyBGaWxlTGlzdFxuICAgICAgICAgIHZhciBmaWxlcyA9IF90aGlzNC5maWxlSW5wdXRFbC5maWxlcztcblxuXG4gICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIF90aGlzNC5pc0ZpbGVEaWFsb2dBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9uRmlsZURpYWxvZ0NhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgb25GaWxlRGlhbG9nQ2FuY2VsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAzMDApO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NldFJlZicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFJlZihyZWYpIHtcbiAgICAgIHRoaXMubm9kZSA9IHJlZjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRSZWZzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0UmVmcyhyZWYpIHtcbiAgICAgIHRoaXMuZmlsZUlucHV0RWwgPSByZWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9wZW4gc3lzdGVtIGZpbGUgdXBsb2FkIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnb3BlbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLmZpbGVJbnB1dEVsLnZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMuZmlsZUlucHV0RWwuY2xpY2soKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3Byb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYWNjZXB0ID0gX3Byb3BzMy5hY2NlcHQsXG4gICAgICAgICAgYWNjZXB0Q2xhc3NOYW1lID0gX3Byb3BzMy5hY2NlcHRDbGFzc05hbWUsXG4gICAgICAgICAgYWN0aXZlQ2xhc3NOYW1lID0gX3Byb3BzMy5hY3RpdmVDbGFzc05hbWUsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfcHJvcHMzLmNoaWxkcmVuLFxuICAgICAgICAgIGRpc2FibGVkID0gX3Byb3BzMy5kaXNhYmxlZCxcbiAgICAgICAgICBkaXNhYmxlZENsYXNzTmFtZSA9IF9wcm9wczMuZGlzYWJsZWRDbGFzc05hbWUsXG4gICAgICAgICAgaW5wdXRQcm9wcyA9IF9wcm9wczMuaW5wdXRQcm9wcyxcbiAgICAgICAgICBtdWx0aXBsZSA9IF9wcm9wczMubXVsdGlwbGUsXG4gICAgICAgICAgbmFtZSA9IF9wcm9wczMubmFtZSxcbiAgICAgICAgICByZWplY3RDbGFzc05hbWUgPSBfcHJvcHMzLnJlamVjdENsYXNzTmFtZSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczMsIFsnYWNjZXB0JywgJ2FjY2VwdENsYXNzTmFtZScsICdhY3RpdmVDbGFzc05hbWUnLCAnY2hpbGRyZW4nLCAnZGlzYWJsZWQnLCAnZGlzYWJsZWRDbGFzc05hbWUnLCAnaW5wdXRQcm9wcycsICdtdWx0aXBsZScsICduYW1lJywgJ3JlamVjdENsYXNzTmFtZSddKTtcblxuICAgICAgdmFyIGFjY2VwdFN0eWxlID0gcmVzdC5hY2NlcHRTdHlsZSxcbiAgICAgICAgICBhY3RpdmVTdHlsZSA9IHJlc3QuYWN0aXZlU3R5bGUsXG4gICAgICAgICAgX3Jlc3QkY2xhc3NOYW1lID0gcmVzdC5jbGFzc05hbWUsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3Jlc3QkY2xhc3NOYW1lID09PSB1bmRlZmluZWQgPyAnJyA6IF9yZXN0JGNsYXNzTmFtZSxcbiAgICAgICAgICBkaXNhYmxlZFN0eWxlID0gcmVzdC5kaXNhYmxlZFN0eWxlLFxuICAgICAgICAgIHJlamVjdFN0eWxlID0gcmVzdC5yZWplY3RTdHlsZSxcbiAgICAgICAgICBzdHlsZSA9IHJlc3Quc3R5bGUsXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocmVzdCwgWydhY2NlcHRTdHlsZScsICdhY3RpdmVTdHlsZScsICdjbGFzc05hbWUnLCAnZGlzYWJsZWRTdHlsZScsICdyZWplY3RTdHlsZScsICdzdHlsZSddKTtcblxuICAgICAgdmFyIF9zdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaXNEcmFnQWN0aXZlID0gX3N0YXRlLmlzRHJhZ0FjdGl2ZSxcbiAgICAgICAgICBkcmFnZ2VkRmlsZXMgPSBfc3RhdGUuZHJhZ2dlZEZpbGVzO1xuXG4gICAgICB2YXIgZmlsZXNDb3VudCA9IGRyYWdnZWRGaWxlcy5sZW5ndGg7XG4gICAgICB2YXIgaXNNdWx0aXBsZUFsbG93ZWQgPSBtdWx0aXBsZSB8fCBmaWxlc0NvdW50IDw9IDE7XG4gICAgICB2YXIgaXNEcmFnQWNjZXB0ID0gZmlsZXNDb3VudCA+IDAgJiYgKDAsIF91dGlscy5hbGxGaWxlc0FjY2VwdGVkKShkcmFnZ2VkRmlsZXMsIHRoaXMucHJvcHMuYWNjZXB0KTtcbiAgICAgIHZhciBpc0RyYWdSZWplY3QgPSBmaWxlc0NvdW50ID4gMCAmJiAoIWlzRHJhZ0FjY2VwdCB8fCAhaXNNdWx0aXBsZUFsbG93ZWQpO1xuICAgICAgdmFyIG5vU3R5bGVzID0gIWNsYXNzTmFtZSAmJiAhc3R5bGUgJiYgIWFjdGl2ZVN0eWxlICYmICFhY2NlcHRTdHlsZSAmJiAhcmVqZWN0U3R5bGUgJiYgIWRpc2FibGVkU3R5bGU7XG5cbiAgICAgIGlmIChpc0RyYWdBY3RpdmUgJiYgYWN0aXZlQ2xhc3NOYW1lKSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSAnICcgKyBhY3RpdmVDbGFzc05hbWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNEcmFnQWNjZXB0ICYmIGFjY2VwdENsYXNzTmFtZSkge1xuICAgICAgICBjbGFzc05hbWUgKz0gJyAnICsgYWNjZXB0Q2xhc3NOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKGlzRHJhZ1JlamVjdCAmJiByZWplY3RDbGFzc05hbWUpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9ICcgJyArIHJlamVjdENsYXNzTmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXNhYmxlZCAmJiBkaXNhYmxlZENsYXNzTmFtZSkge1xuICAgICAgICBjbGFzc05hbWUgKz0gJyAnICsgZGlzYWJsZWRDbGFzc05hbWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub1N0eWxlcykge1xuICAgICAgICBzdHlsZSA9IF9zdHlsZXMyLmRlZmF1bHQuZGVmYXVsdDtcbiAgICAgICAgYWN0aXZlU3R5bGUgPSBfc3R5bGVzMi5kZWZhdWx0LmFjdGl2ZTtcbiAgICAgICAgYWNjZXB0U3R5bGUgPSBzdHlsZS5hY3RpdmU7XG4gICAgICAgIHJlamVjdFN0eWxlID0gX3N0eWxlczIuZGVmYXVsdC5yZWplY3RlZDtcbiAgICAgICAgZGlzYWJsZWRTdHlsZSA9IF9zdHlsZXMyLmRlZmF1bHQuZGlzYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcHBsaWVkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgc3R5bGUpO1xuICAgICAgaWYgKGFjdGl2ZVN0eWxlICYmIGlzRHJhZ0FjdGl2ZSkge1xuICAgICAgICBhcHBsaWVkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgc3R5bGUsIGFjdGl2ZVN0eWxlKTtcbiAgICAgIH1cbiAgICAgIGlmIChhY2NlcHRTdHlsZSAmJiBpc0RyYWdBY2NlcHQpIHtcbiAgICAgICAgYXBwbGllZFN0eWxlID0gX2V4dGVuZHMoe30sIGFwcGxpZWRTdHlsZSwgYWNjZXB0U3R5bGUpO1xuICAgICAgfVxuICAgICAgaWYgKHJlamVjdFN0eWxlICYmIGlzRHJhZ1JlamVjdCkge1xuICAgICAgICBhcHBsaWVkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgYXBwbGllZFN0eWxlLCByZWplY3RTdHlsZSk7XG4gICAgICB9XG4gICAgICBpZiAoZGlzYWJsZWRTdHlsZSAmJiBkaXNhYmxlZCkge1xuICAgICAgICBhcHBsaWVkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgc3R5bGUsIGRpc2FibGVkU3R5bGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5wdXRBdHRyaWJ1dGVzID0ge1xuICAgICAgICBhY2NlcHQ6IGFjY2VwdCxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHN0eWxlOiB7IGRpc3BsYXk6ICdub25lJyB9LFxuICAgICAgICBtdWx0aXBsZTogX3V0aWxzLnN1cHBvcnRNdWx0aXBsZSAmJiBtdWx0aXBsZSxcbiAgICAgICAgcmVmOiB0aGlzLnNldFJlZnMsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uRHJvcCxcbiAgICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJ1xuICAgICAgfTtcblxuICAgICAgaWYgKG5hbWUgJiYgbmFtZS5sZW5ndGgpIHtcbiAgICAgICAgaW5wdXRBdHRyaWJ1dGVzLm5hbWUgPSBuYW1lO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXN0cnVjdHVyZSBjdXN0b20gcHJvcHMgYXdheSBmcm9tIHByb3BzIHVzZWQgZm9yIHRoZSBkaXYgZWxlbWVudFxuXG4gICAgICB2YXIgYWNjZXB0ZWRGaWxlcyA9IHByb3BzLmFjY2VwdGVkRmlsZXMsXG4gICAgICAgICAgcHJldmVudERyb3BPbkRvY3VtZW50ID0gcHJvcHMucHJldmVudERyb3BPbkRvY3VtZW50LFxuICAgICAgICAgIGRpc2FibGVQcmV2aWV3ID0gcHJvcHMuZGlzYWJsZVByZXZpZXcsXG4gICAgICAgICAgZGlzYWJsZUNsaWNrID0gcHJvcHMuZGlzYWJsZUNsaWNrLFxuICAgICAgICAgIG9uRHJvcEFjY2VwdGVkID0gcHJvcHMub25Ecm9wQWNjZXB0ZWQsXG4gICAgICAgICAgb25Ecm9wUmVqZWN0ZWQgPSBwcm9wcy5vbkRyb3BSZWplY3RlZCxcbiAgICAgICAgICBvbkZpbGVEaWFsb2dDYW5jZWwgPSBwcm9wcy5vbkZpbGVEaWFsb2dDYW5jZWwsXG4gICAgICAgICAgbWF4U2l6ZSA9IHByb3BzLm1heFNpemUsXG4gICAgICAgICAgbWluU2l6ZSA9IHByb3BzLm1pblNpemUsXG4gICAgICAgICAgZGl2UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFsnYWNjZXB0ZWRGaWxlcycsICdwcmV2ZW50RHJvcE9uRG9jdW1lbnQnLCAnZGlzYWJsZVByZXZpZXcnLCAnZGlzYWJsZUNsaWNrJywgJ29uRHJvcEFjY2VwdGVkJywgJ29uRHJvcFJlamVjdGVkJywgJ29uRmlsZURpYWxvZ0NhbmNlbCcsICdtYXhTaXplJywgJ21pblNpemUnXSk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgICBzdHlsZTogYXBwbGllZFN0eWxlXG4gICAgICAgIH0sIGRpdlByb3BzIC8qIGV4cGFuZCB1c2VyIHByb3ZpZGVkIHByb3BzIGZpcnN0IHNvIGV2ZW50IGhhbmRsZXJzIGFyZSBuZXZlciBvdmVycmlkZGVuICovLCB7XG4gICAgICAgICAgb25DbGljazogdGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkNsaWNrKSxcbiAgICAgICAgICBvbkRyYWdTdGFydDogdGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdTdGFydCksXG4gICAgICAgICAgb25EcmFnRW50ZXI6IHRoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnRW50ZXIpLFxuICAgICAgICAgIG9uRHJhZ092ZXI6IHRoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnT3ZlciksXG4gICAgICAgICAgb25EcmFnTGVhdmU6IHRoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnTGVhdmUpLFxuICAgICAgICAgIG9uRHJvcDogdGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyb3ApLFxuICAgICAgICAgIHJlZjogdGhpcy5zZXRSZWYsXG4gICAgICAgICAgJ2FyaWEtZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgICB9KSxcbiAgICAgICAgdGhpcy5yZW5kZXJDaGlsZHJlbihjaGlsZHJlbiwgaXNEcmFnQWN0aXZlLCBpc0RyYWdBY2NlcHQsIGlzRHJhZ1JlamVjdCksXG4gICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdpbnB1dCcsIF9leHRlbmRzKHt9LCBpbnB1dFByb3BzIC8qIGV4cGFuZCB1c2VyIHByb3ZpZGVkIGlucHV0UHJvcHMgZmlyc3Qgc28gaW5wdXRBdHRyaWJ1dGVzIG92ZXJyaWRlIHRoZW0gKi8sIGlucHV0QXR0cmlidXRlcykpXG4gICAgICApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBEcm9wem9uZTtcbn0oX3JlYWN0Mi5kZWZhdWx0LkNvbXBvbmVudCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IERyb3B6b25lO1xuXG5cbkRyb3B6b25lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIEFsbG93IHNwZWNpZmljIHR5cGVzIG9mIGZpbGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL29rb25ldC9hdHRyLWFjY2VwdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICogS2VlcCBpbiBtaW5kIHRoYXQgbWltZSB0eXBlIGRldGVybWluYXRpb24gaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBwbGF0Zm9ybXMuIENTViBmaWxlcyxcbiAgICogZm9yIGV4YW1wbGUsIGFyZSByZXBvcnRlZCBhcyB0ZXh0L3BsYWluIHVuZGVyIG1hY09TIGJ1dCBhcyBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwgdW5kZXJcbiAgICogV2luZG93cy4gSW4gc29tZSBjYXNlcyB0aGVyZSBtaWdodCBub3QgYmUgYSBtaW1lIHR5cGUgc2V0IGF0IGFsbC5cbiAgICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtZHJvcHpvbmUvcmVhY3QtZHJvcHpvbmUvaXNzdWVzLzI3NlxuICAgKi9cbiAgYWNjZXB0OiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcblxuICAvKipcbiAgICogQ29udGVudHMgb2YgdGhlIGRyb3B6b25lXG4gICAqL1xuICBjaGlsZHJlbjogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMyLmRlZmF1bHQubm9kZSwgX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jXSksXG5cbiAgLyoqXG4gICAqIERpc2FsbG93IGNsaWNraW5nIG9uIHRoZSBkcm9wem9uZSBjb250YWluZXIgdG8gb3BlbiBmaWxlIGRpYWxvZ1xuICAgKi9cbiAgZGlzYWJsZUNsaWNrOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG5cbiAgLyoqXG4gICogRW5hYmxlL2Rpc2FibGUgdGhlIGRyb3B6b25lIGVudGlyZWx5XG4gICovXG4gIGRpc2FibGVkOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIHByZXZpZXcgZ2VuZXJhdGlvblxuICAgKi9cbiAgZGlzYWJsZVByZXZpZXc6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcblxuICAvKipcbiAgICogSWYgZmFsc2UsIGFsbG93IGRyb3BwZWQgaXRlbXMgdG8gdGFrZSBvdmVyIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93XG4gICAqL1xuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcblxuICAvKipcbiAgICogUGFzcyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgdG8gdGhlIGA8aW5wdXQgdHlwZT1cImZpbGVcIi8+YCB0YWdcbiAgICovXG4gIGlucHV0UHJvcHM6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBBbGxvdyBkcm9wcGluZyBtdWx0aXBsZSBmaWxlc1xuICAgKi9cbiAgbXVsdGlwbGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcblxuICAvKipcbiAgICogYG5hbWVgIGF0dHJpYnV0ZSBmb3IgdGhlIGlucHV0IHRhZ1xuICAgKi9cbiAgbmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIE1heGltdW0gZmlsZSBzaXplXG4gICAqL1xuICBtYXhTaXplOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlcixcblxuICAvKipcbiAgICogTWluaW11bSBmaWxlIHNpemVcbiAgICovXG4gIG1pblNpemU6IF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWVcbiAgICovXG4gIGNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZSBmb3IgYWN0aXZlIHN0YXRlXG4gICAqL1xuICBhY3RpdmVDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgZm9yIGFjY2VwdGVkIHN0YXRlXG4gICAqL1xuICBhY2NlcHRDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgZm9yIHJlamVjdGVkIHN0YXRlXG4gICAqL1xuICByZWplY3RDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgZm9yIGRpc2FibGVkIHN0YXRlXG4gICAqL1xuICBkaXNhYmxlZENsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHlcbiAgICovXG4gIHN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseSB3aGVuIGRyYWcgaXMgYWN0aXZlXG4gICAqL1xuICBhY3RpdmVTdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHkgd2hlbiBkcm9wIHdpbGwgYmUgYWNjZXB0ZWRcbiAgICovXG4gIGFjY2VwdFN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseSB3aGVuIGRyb3Agd2lsbCBiZSByZWplY3RlZFxuICAgKi9cbiAgcmVqZWN0U3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5IHdoZW4gZHJvcHpvbmUgaXMgZGlzYWJsZWRcbiAgICovXG4gIGRpc2FibGVkU3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBvbkNsaWNrIGNhbGxiYWNrXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkNsaWNrOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcCBjYWxsYmFja1xuICAgKi9cbiAgb25Ecm9wOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcEFjY2VwdGVkIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyb3BBY2NlcHRlZDogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyb3BSZWplY3RlZCBjYWxsYmFja1xuICAgKi9cbiAgb25Ecm9wUmVqZWN0ZWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcblxuICAvKipcbiAgICogb25EcmFnU3RhcnQgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ1N0YXJ0OiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ0VudGVyIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdFbnRlcjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyYWdPdmVyIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdPdmVyOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ0xlYXZlIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdMZWF2ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgY2FsbGJhY2sgb24gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b24gb2YgdGhlIGZpbGUgZGlhbG9nXG4gICAqL1xuICBvbkZpbGVEaWFsb2dDYW5jZWw6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuY1xufTtcblxuRHJvcHpvbmUuZGVmYXVsdFByb3BzID0ge1xuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6IHRydWUsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgZGlzYWJsZVByZXZpZXc6IGZhbHNlLFxuICBkaXNhYmxlQ2xpY2s6IGZhbHNlLFxuICBtdWx0aXBsZTogdHJ1ZSxcbiAgbWF4U2l6ZTogSW5maW5pdHksXG4gIG1pblNpemU6IDBcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xX187XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fO1xuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VwcG9ydE11bHRpcGxlID0gdW5kZWZpbmVkO1xuZXhwb3J0cy5nZXREYXRhVHJhbnNmZXJJdGVtcyA9IGdldERhdGFUcmFuc2Zlckl0ZW1zO1xuZXhwb3J0cy5maWxlQWNjZXB0ZWQgPSBmaWxlQWNjZXB0ZWQ7XG5leHBvcnRzLmZpbGVNYXRjaFNpemUgPSBmaWxlTWF0Y2hTaXplO1xuZXhwb3J0cy5hbGxGaWxlc0FjY2VwdGVkID0gYWxsRmlsZXNBY2NlcHRlZDtcbmV4cG9ydHMub25Eb2N1bWVudERyYWdPdmVyID0gb25Eb2N1bWVudERyYWdPdmVyO1xuXG52YXIgX2F0dHJBY2NlcHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG52YXIgX2F0dHJBY2NlcHQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXR0ckFjY2VwdCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBzdXBwb3J0TXVsdGlwbGUgPSBleHBvcnRzLnN1cHBvcnRNdWx0aXBsZSA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCA/ICdtdWx0aXBsZScgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSA6IHRydWU7XG5cbmZ1bmN0aW9uIGdldERhdGFUcmFuc2Zlckl0ZW1zKGV2ZW50KSB7XG4gIHZhciBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBbXTtcbiAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgIHZhciBkdCA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICBpZiAoZHQuZmlsZXMgJiYgZHQuZmlsZXMubGVuZ3RoKSB7XG4gICAgICBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBkdC5maWxlcztcbiAgICB9IGVsc2UgaWYgKGR0Lml0ZW1zICYmIGR0Lml0ZW1zLmxlbmd0aCkge1xuICAgICAgLy8gRHVyaW5nIHRoZSBkcmFnIGV2ZW4gdGhlIGRhdGFUcmFuc2Zlci5maWxlcyBpcyBudWxsXG4gICAgICAvLyBidXQgQ2hyb21lIGltcGxlbWVudHMgc29tZSBkcmFnIHN0b3JlLCB3aGljaCBpcyBhY2Nlc2libGUgdmlhIGRhdGFUcmFuc2Zlci5pdGVtc1xuICAgICAgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gZHQuaXRlbXM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuZmlsZXMpIHtcbiAgICBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBldmVudC50YXJnZXQuZmlsZXM7XG4gIH1cbiAgLy8gQ29udmVydCBmcm9tIERhdGFUcmFuc2Zlckl0ZW1zTGlzdCB0byB0aGUgbmF0aXZlIEFycmF5XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkYXRhVHJhbnNmZXJJdGVtc0xpc3QpO1xufVxuXG4vLyBGaXJlZm94IHZlcnNpb25zIHByaW9yIHRvIDUzIHJldHVybiBhIGJvZ3VzIE1JTUUgdHlwZSBmb3IgZXZlcnkgZmlsZSBkcmFnLCBzbyBkcmFnb3ZlcnMgd2l0aFxuLy8gdGhhdCBNSU1FIHR5cGUgd2lsbCBhbHdheXMgYmUgYWNjZXB0ZWRcbmZ1bmN0aW9uIGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpIHtcbiAgcmV0dXJuIGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnIHx8ICgwLCBfYXR0ckFjY2VwdDIuZGVmYXVsdCkoZmlsZSwgYWNjZXB0KTtcbn1cblxuZnVuY3Rpb24gZmlsZU1hdGNoU2l6ZShmaWxlLCBtYXhTaXplLCBtaW5TaXplKSB7XG4gIHJldHVybiBmaWxlLnNpemUgPD0gbWF4U2l6ZSAmJiBmaWxlLnNpemUgPj0gbWluU2l6ZTtcbn1cblxuZnVuY3Rpb24gYWxsRmlsZXNBY2NlcHRlZChmaWxlcywgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlcy5ldmVyeShmdW5jdGlvbiAoZmlsZSkge1xuICAgIHJldHVybiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KTtcbiAgfSk7XG59XG5cbi8vIGFsbG93IHRoZSBlbnRpcmUgZG9jdW1lbnQgdG8gYmUgYSBkcmFnIHRhcmdldFxuZnVuY3Rpb24gb25Eb2N1bWVudERyYWdPdmVyKGV2dCkge1xuICBldnQucHJldmVudERlZmF1bHQoKTtcbn1cblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7aWYocltlXSlyZXR1cm4gcltlXS5leHBvcnRzO3ZhciBvPXJbZV09e2V4cG9ydHM6e30saWQ6ZSxsb2FkZWQ6ITF9O3JldHVybiB0W2VdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLG4pLG8ubG9hZGVkPSEwLG8uZXhwb3J0c312YXIgcj17fTtyZXR1cm4gbi5tPXQsbi5jPXIsbi5wPVwiXCIsbigwKX0oW2Z1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjtuLl9fZXNNb2R1bGU9ITAscig4KSxyKDkpLG5bXCJkZWZhdWx0XCJdPWZ1bmN0aW9uKHQsbil7aWYodCYmbil7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgcj1BcnJheS5pc0FycmF5KG4pP246bi5zcGxpdChcIixcIiksZT10Lm5hbWV8fFwiXCIsbz10LnR5cGV8fFwiXCIsaT1vLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik7cmV0dXJue3Y6ci5zb21lKGZ1bmN0aW9uKHQpe3ZhciBuPXQudHJpbSgpO3JldHVyblwiLlwiPT09bi5jaGFyQXQoMCk/ZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKG4udG9Mb3dlckNhc2UoKSk6L1xcL1xcKiQvLnRlc3Qobik/aT09PW4ucmVwbGFjZSgvXFwvLiokLyxcIlwiKTpvPT09bn0pfX0oKTtpZihcIm9iamVjdFwiPT10eXBlb2YgcilyZXR1cm4gci52fXJldHVybiEwfSx0LmV4cG9ydHM9bltcImRlZmF1bHRcIl19LGZ1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMS4yLjJcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMiksbz1yKDEpLGk9cig0KSx1PXIoMTkpLGM9XCJwcm90b3R5cGVcIixmPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpfX0scz1mdW5jdGlvbih0LG4scil7dmFyIGEscCxsLHksZD10JnMuRyxoPXQmcy5QLHY9ZD9lOnQmcy5TP2Vbbl18fChlW25dPXt9KTooZVtuXXx8e30pW2NdLHg9ZD9vOm9bbl18fChvW25dPXt9KTtkJiYocj1uKTtmb3IoYSBpbiByKXA9ISh0JnMuRikmJnYmJmEgaW4gdixsPShwP3Y6cilbYV0seT10JnMuQiYmcD9mKGwsZSk6aCYmXCJmdW5jdGlvblwiPT10eXBlb2YgbD9mKEZ1bmN0aW9uLmNhbGwsbCk6bCx2JiYhcCYmdSh2LGEsbCkseFthXSE9bCYmaSh4LGEseSksaCYmKCh4W2NdfHwoeFtjXT17fSkpW2FdPWwpfTtlLmNvcmU9byxzLkY9MSxzLkc9MixzLlM9NCxzLlA9OCxzLkI9MTYscy5XPTMyLHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KSxvPXIoMTgpO3QuZXhwb3J0cz1yKDIyKT9mdW5jdGlvbih0LG4scil7cmV0dXJuIGUuc2V0RGVzYyh0LG4sbygxLHIpKX06ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0W25dPXIsdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9T2JqZWN0O3QuZXhwb3J0cz17Y3JlYXRlOnIuY3JlYXRlLGdldFByb3RvOnIuZ2V0UHJvdG90eXBlT2YsaXNFbnVtOnt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLGdldERlc2M6ci5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isc2V0RGVzYzpyLmRlZmluZVByb3BlcnR5LHNldERlc2NzOnIuZGVmaW5lUHJvcGVydGllcyxnZXRLZXlzOnIua2V5cyxnZXROYW1lczpyLmdldE93blByb3BlcnR5TmFtZXMsZ2V0U3ltYm9sczpyLmdldE93blByb3BlcnR5U3ltYm9scyxlYWNoOltdLmZvckVhY2h9fSxmdW5jdGlvbih0LG4pe3ZhciByPTAsZT1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09dD9cIlwiOnQsXCIpX1wiLCgrK3IrZSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDIwKShcIndrc1wiKSxvPXIoMikuU3ltYm9sO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZVt0XXx8KGVbdF09byYmb1t0XXx8KG98fHIoNikpKFwiU3ltYm9sLlwiK3QpKX19LGZ1bmN0aW9uKHQsbixyKXtyKDI2KSx0LmV4cG9ydHM9cigxKS5BcnJheS5zb21lfSxmdW5jdGlvbih0LG4scil7cigyNSksdC5leHBvcnRzPXIoMSkuU3RyaW5nLmVuZHNXaXRofSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtpZihlKHQpLHZvaWQgMD09PW4pcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbChuLHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsZSl7cmV0dXJuIHQuY2FsbChuLHIsZSl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixlLG8pe3JldHVybiB0LmNhbGwobixyLGUsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KG4sYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PXQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiK3QpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj0vLi87dHJ5e1wiLy4vXCJbdF0obil9Y2F0Y2goZSl7dHJ5e3JldHVybiBuW3IoNykoXCJtYXRjaFwiKV09ITEsIVwiLy4vXCJbdF0obil9Y2F0Y2gobyl7fX1yZXR1cm4hMH19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaChuKXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdD9udWxsIT09dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTYpLG89cigxMSksaT1yKDcpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBlKHQpJiYodm9pZCAwIT09KG49dFtpXSk/ISFuOlwiUmVnRXhwXCI9PW8odCkpfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6bn19fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyKSxvPXIoNCksaT1yKDYpKFwic3JjXCIpLHU9XCJ0b1N0cmluZ1wiLGM9RnVuY3Rpb25bdV0sZj0oXCJcIitjKS5zcGxpdCh1KTtyKDEpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbCh0KX0sKHQuZXhwb3J0cz1mdW5jdGlvbih0LG4scix1KXtcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYobyhyLGksdFtuXT9cIlwiK3Rbbl06Zi5qb2luKFN0cmluZyhuKSkpLFwibmFtZVwiaW4gcnx8KHIubmFtZT1uKSksdD09PWU/dFtuXT1yOih1fHxkZWxldGUgdFtuXSxvKHQsbixyKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsdSxmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJnRoaXNbaV18fGMuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyKSxvPVwiX19jb3JlLWpzX3NoYXJlZF9fXCIsaT1lW29dfHwoZVtvXT17fSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpW3RdfHwoaVt0XT17fSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxNyksbz1yKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUobikpdGhyb3cgVHlwZUVycm9yKFwiU3RyaW5nI1wiK3IrXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO3JldHVybiBTdHJpbmcobyh0KSl9fSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDE1KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuKXt2YXIgcj1NYXRoLmNlaWwsZT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP2U6cikodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyMyksbz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD9vKGUodCksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDMpLG89cigyNCksaT1yKDIxKSx1PVwiZW5kc1dpdGhcIixjPVwiXCJbdV07ZShlLlArZS5GKnIoMTQpKHUpLFwiU3RyaW5nXCIse2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBuPWkodGhpcyx0LHUpLHI9YXJndW1lbnRzLGU9ci5sZW5ndGg+MT9yWzFdOnZvaWQgMCxmPW8obi5sZW5ndGgpLHM9dm9pZCAwPT09ZT9mOk1hdGgubWluKG8oZSksZiksYT1TdHJpbmcodCk7cmV0dXJuIGM/Yy5jYWxsKG4sYSxzKTpuLnNsaWNlKHMtYS5sZW5ndGgscyk9PT1hfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KSxvPXIoMyksaT1yKDEpLkFycmF5fHxBcnJheSx1PXt9LGM9ZnVuY3Rpb24odCxuKXtlLmVhY2guY2FsbCh0LnNwbGl0KFwiLFwiKSxmdW5jdGlvbih0KXt2b2lkIDA9PW4mJnQgaW4gaT91W3RdPWlbdF06dCBpbltdJiYodVt0XT1yKDEyKShGdW5jdGlvbi5jYWxsLFtdW3RdLG4pKX0pfTtjKFwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllc1wiLDEpLGMoXCJpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzXCIsMyksYyhcImpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIpLG8oby5TLFwiQXJyYXlcIix1KX1dKTtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIHJlamVjdGVkOiB7XG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyQ29sb3I6ICcjYzY2JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZWVlJ1xuICB9LFxuICBkaXNhYmxlZDoge1xuICAgIG9wYWNpdHk6IDAuNVxuICB9LFxuICBhY3RpdmU6IHtcbiAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJDb2xvcjogJyM2YzYnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWUnXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICB3aWR0aDogMjAwLFxuICAgIGhlaWdodDogMjAwLFxuICAgIGJvcmRlcldpZHRoOiAyLFxuICAgIGJvcmRlckNvbG9yOiAnIzY2NicsXG4gICAgYm9yZGVyU3R5bGU6ICdkYXNoZWQnLFxuICAgIGJvcmRlclJhZGl1czogNVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBpbmRleC5qcyIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDJiYmRlYTQ4MjAzZTkyN2FmOGY3IiwiLyogZXNsaW50IHByZWZlci10ZW1wbGF0ZTogMCAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQge1xuICBzdXBwb3J0TXVsdGlwbGUsXG4gIGZpbGVBY2NlcHRlZCxcbiAgYWxsRmlsZXNBY2NlcHRlZCxcbiAgZmlsZU1hdGNoU2l6ZSxcbiAgb25Eb2N1bWVudERyYWdPdmVyLFxuICBnZXREYXRhVHJhbnNmZXJJdGVtc1xufSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3V0aWxzL3N0eWxlcydcblxuY2xhc3MgRHJvcHpvbmUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcywgY29udGV4dCkge1xuICAgIHN1cGVyKHByb3BzLCBjb250ZXh0KVxuICAgIHRoaXMuY29tcG9zZUhhbmRsZXJzID0gdGhpcy5jb21wb3NlSGFuZGxlcnMuYmluZCh0aGlzKVxuICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRvY3VtZW50RHJvcCA9IHRoaXMub25Eb2N1bWVudERyb3AuYmluZCh0aGlzKVxuICAgIHRoaXMub25EcmFnRW50ZXIgPSB0aGlzLm9uRHJhZ0VudGVyLmJpbmQodGhpcylcbiAgICB0aGlzLm9uRHJhZ0xlYXZlID0gdGhpcy5vbkRyYWdMZWF2ZS5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRyYWdPdmVyID0gdGhpcy5vbkRyYWdPdmVyLmJpbmQodGhpcylcbiAgICB0aGlzLm9uRHJhZ1N0YXJ0ID0gdGhpcy5vbkRyYWdTdGFydC5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRyb3AgPSB0aGlzLm9uRHJvcC5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwgPSB0aGlzLm9uRmlsZURpYWxvZ0NhbmNlbC5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbklucHV0RWxlbWVudENsaWNrID0gdGhpcy5vbklucHV0RWxlbWVudENsaWNrLmJpbmQodGhpcylcblxuICAgIHRoaXMuc2V0UmVmID0gdGhpcy5zZXRSZWYuYmluZCh0aGlzKVxuICAgIHRoaXMuc2V0UmVmcyA9IHRoaXMuc2V0UmVmcy5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlXG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZHJhZ2dlZEZpbGVzOiBbXSxcbiAgICAgIGFjY2VwdGVkRmlsZXM6IFtdLFxuICAgICAgcmVqZWN0ZWRGaWxlczogW11cbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IHByZXZlbnREcm9wT25Eb2N1bWVudCB9ID0gdGhpcy5wcm9wc1xuICAgIHRoaXMuZHJhZ1RhcmdldHMgPSBbXVxuXG4gICAgaWYgKHByZXZlbnREcm9wT25Eb2N1bWVudCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBvbkRvY3VtZW50RHJhZ092ZXIsIGZhbHNlKVxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMub25Eb2N1bWVudERyb3AsIGZhbHNlKVxuICAgIH1cbiAgICB0aGlzLmZpbGVJbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbklucHV0RWxlbWVudENsaWNrLCBmYWxzZSlcbiAgICAvLyBUcmllZCBpbXBsZW1lbnRpbmcgYWRkRXZlbnRMaXN0ZW5lciwgYnV0IGRpZG4ndCB3b3JrIG91dFxuICAgIGRvY3VtZW50LmJvZHkub25mb2N1cyA9IHRoaXMub25GaWxlRGlhbG9nQ2FuY2VsXG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBjb25zdCB7IHByZXZlbnREcm9wT25Eb2N1bWVudCB9ID0gdGhpcy5wcm9wc1xuICAgIGlmIChwcmV2ZW50RHJvcE9uRG9jdW1lbnQpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25Eb2N1bWVudERyYWdPdmVyKVxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMub25Eb2N1bWVudERyb3ApXG4gICAgfVxuICAgIGlmICh0aGlzLmZpbGVJbnB1dEVsICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZmlsZUlucHV0RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uSW5wdXRFbGVtZW50Q2xpY2ssIGZhbHNlKVxuICAgIH1cbiAgICAvLyBDYW4gYmUgcmVwbGFjZWQgd2l0aCByZW1vdmVFdmVudExpc3RlbmVyLCBpZiBhZGRFdmVudExpc3RlbmVyIHdvcmtzXG4gICAgaWYgKGRvY3VtZW50ICE9IG51bGwpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkub25mb2N1cyA9IG51bGxcbiAgICB9XG4gIH1cblxuICBjb21wb3NlSGFuZGxlcnMoaGFuZGxlcikge1xuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGVyXG4gIH1cblxuICBvbkRvY3VtZW50RHJvcChldnQpIHtcbiAgICBpZiAodGhpcy5ub2RlICYmIHRoaXMubm9kZS5jb250YWlucyhldnQudGFyZ2V0KSkge1xuICAgICAgLy8gaWYgd2UgaW50ZXJjZXB0ZWQgYW4gZXZlbnQgZm9yIG91ciBpbnN0YW5jZSwgbGV0IGl0IHByb3BhZ2F0ZSBkb3duIHRvIHRoZSBpbnN0YW5jZSdzIG9uRHJvcCBoYW5kbGVyXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KClcbiAgICB0aGlzLmRyYWdUYXJnZXRzID0gW11cbiAgfVxuXG4gIG9uRHJhZ1N0YXJ0KGV2dCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ1N0YXJ0KSB7XG4gICAgICB0aGlzLnByb3BzLm9uRHJhZ1N0YXJ0LmNhbGwodGhpcywgZXZ0KVxuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ0VudGVyKGV2dCkge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyBDb3VudCB0aGUgZHJvcHpvbmUgYW5kIGFueSBjaGlsZHJlbiB0aGF0IGFyZSBlbnRlcmVkLlxuICAgIGlmICh0aGlzLmRyYWdUYXJnZXRzLmluZGV4T2YoZXZ0LnRhcmdldCkgPT09IC0xKSB7XG4gICAgICB0aGlzLmRyYWdUYXJnZXRzLnB1c2goZXZ0LnRhcmdldClcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzRHJhZ0FjdGl2ZTogdHJ1ZSwgLy8gRG8gbm90IHJlbHkgb24gZmlsZXMgZm9yIHRoZSBkcmFnIHN0YXRlLiBJdCBkb2Vzbid0IHdvcmsgaW4gU2FmYXJpLlxuICAgICAgZHJhZ2dlZEZpbGVzOiBnZXREYXRhVHJhbnNmZXJJdGVtcyhldnQpXG4gICAgfSlcblxuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ0VudGVyKSB7XG4gICAgICB0aGlzLnByb3BzLm9uRHJhZ0VudGVyLmNhbGwodGhpcywgZXZ0KVxuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZ0KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KClcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB0cnkge1xuICAgICAgLy8gVGhlIGZpbGUgZGlhbG9nIG9uIENocm9tZSBhbGxvd3MgdXNlcnMgdG8gZHJhZyBmaWxlcyBmcm9tIHRoZSBkaWFsb2cgb250b1xuICAgICAgLy8gdGhlIGRyb3B6b25lLCBjYXVzaW5nIHRoZSBicm93c2VyIHRoZSBjcmFzaCB3aGVuIHRoZSBmaWxlIGRpYWxvZyBpcyBjbG9zZWQuXG4gICAgICAvLyBBIGRyb3AgZWZmZWN0IG9mICdub25lJyBwcmV2ZW50cyB0aGUgZmlsZSBmcm9tIGJlaW5nIGRyb3BwZWRcbiAgICAgIGV2dC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9IHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID8gJ25vbmUnIDogJ2NvcHknIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGNvbnRpbnVlIHJlZ2FyZGxlc3Mgb2YgZXJyb3JcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdPdmVyKSB7XG4gICAgICB0aGlzLnByb3BzLm9uRHJhZ092ZXIuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25EcmFnTGVhdmUoZXZ0KSB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIE9ubHkgZGVhY3RpdmF0ZSBvbmNlIHRoZSBkcm9wem9uZSBhbmQgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBsZWZ0LlxuICAgIHRoaXMuZHJhZ1RhcmdldHMgPSB0aGlzLmRyYWdUYXJnZXRzLmZpbHRlcihlbCA9PiBlbCAhPT0gZXZ0LnRhcmdldCAmJiB0aGlzLm5vZGUuY29udGFpbnMoZWwpKVxuICAgIGlmICh0aGlzLmRyYWdUYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENsZWFyIGRyYWdnaW5nIGZpbGVzIHN0YXRlXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgZHJhZ2dlZEZpbGVzOiBbXVxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdMZWF2ZSkge1xuICAgICAgdGhpcy5wcm9wcy5vbkRyYWdMZWF2ZS5jYWxsKHRoaXMsIGV2dClcbiAgICB9XG4gIH1cblxuICBvbkRyb3AoZXZ0KSB7XG4gICAgY29uc3QgeyBvbkRyb3AsIG9uRHJvcEFjY2VwdGVkLCBvbkRyb3BSZWplY3RlZCwgbXVsdGlwbGUsIGRpc2FibGVQcmV2aWV3LCBhY2NlcHQgfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBmaWxlTGlzdCA9IGdldERhdGFUcmFuc2Zlckl0ZW1zKGV2dClcbiAgICBjb25zdCBhY2NlcHRlZEZpbGVzID0gW11cbiAgICBjb25zdCByZWplY3RlZEZpbGVzID0gW11cblxuICAgIC8vIFN0b3AgZGVmYXVsdCBicm93c2VyIGJlaGF2aW9yXG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIFJlc2V0IHRoZSBjb3VudGVyIGFsb25nIHdpdGggdGhlIGRyYWcgb24gYSBkcm9wLlxuICAgIHRoaXMuZHJhZ1RhcmdldHMgPSBbXVxuICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gZmFsc2VcblxuICAgIGZpbGVMaXN0LmZvckVhY2goZmlsZSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVQcmV2aWV3KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZmlsZS5wcmV2aWV3ID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIHByZXZpZXcgZm9yIGZpbGUnLCBmaWxlLCBlcnIpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpICYmXG4gICAgICAgIGZpbGVNYXRjaFNpemUoZmlsZSwgdGhpcy5wcm9wcy5tYXhTaXplLCB0aGlzLnByb3BzLm1pblNpemUpXG4gICAgICApIHtcbiAgICAgICAgYWNjZXB0ZWRGaWxlcy5wdXNoKGZpbGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3RlZEZpbGVzLnB1c2goZmlsZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYgKCFtdWx0aXBsZSkge1xuICAgICAgLy8gaWYgbm90IGluIG11bHRpIG1vZGUgYWRkIGFueSBleHRyYSBhY2NlcHRlZCBmaWxlcyB0byByZWplY3RlZC5cbiAgICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBlbmQgdXNlcnMgdG8gZWFzaWx5IGlnbm9yZSBhIG11bHRpIGZpbGUgZHJvcCBpbiBcInNpbmdsZVwiIG1vZGUuXG4gICAgICByZWplY3RlZEZpbGVzLnB1c2goLi4uYWNjZXB0ZWRGaWxlcy5zcGxpY2UoMSkpXG4gICAgfVxuXG4gICAgaWYgKG9uRHJvcCkge1xuICAgICAgb25Ecm9wLmNhbGwodGhpcywgYWNjZXB0ZWRGaWxlcywgcmVqZWN0ZWRGaWxlcywgZXZ0KVxuICAgIH1cblxuICAgIGlmIChyZWplY3RlZEZpbGVzLmxlbmd0aCA+IDAgJiYgb25Ecm9wUmVqZWN0ZWQpIHtcbiAgICAgIG9uRHJvcFJlamVjdGVkLmNhbGwodGhpcywgcmVqZWN0ZWRGaWxlcywgZXZ0KVxuICAgIH1cblxuICAgIGlmIChhY2NlcHRlZEZpbGVzLmxlbmd0aCA+IDAgJiYgb25Ecm9wQWNjZXB0ZWQpIHtcbiAgICAgIG9uRHJvcEFjY2VwdGVkLmNhbGwodGhpcywgYWNjZXB0ZWRGaWxlcywgZXZ0KVxuICAgIH1cblxuICAgIC8vIENsZWFyIGZpbGVzIHZhbHVlXG4gICAgdGhpcy5kcmFnZ2VkRmlsZXMgPSBudWxsXG5cbiAgICAvLyBSZXNldCBkcmFnIHN0YXRlXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0RyYWdBY3RpdmU6IGZhbHNlLFxuICAgICAgZHJhZ2dlZEZpbGVzOiBbXSxcbiAgICAgIGFjY2VwdGVkRmlsZXMsXG4gICAgICByZWplY3RlZEZpbGVzXG4gICAgfSlcbiAgfVxuXG4gIG9uQ2xpY2soZXZ0KSB7XG4gICAgY29uc3QgeyBvbkNsaWNrLCBkaXNhYmxlQ2xpY2sgfSA9IHRoaXMucHJvcHNcbiAgICBpZiAoIWRpc2FibGVDbGljaykge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgIG9uQ2xpY2suY2FsbCh0aGlzLCBldnQpXG4gICAgICB9XG5cbiAgICAgIC8vIGluIElFMTEvRWRnZSB0aGUgZmlsZS1icm93c2VyIGRpYWxvZyBpcyBibG9ja2luZywgZW5zdXJlIHRoaXMgaXMgYmVoaW5kIHNldFRpbWVvdXRcbiAgICAgIC8vIHRoaXMgaXMgc28gcmVhY3QgY2FuIGhhbmRsZSBzdGF0ZSBjaGFuZ2VzIGluIHRoZSBvbkNsaWNrIHByb3AgYWJvdmUgYWJvdmVcbiAgICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy80NTBcbiAgICAgIHNldFRpbWVvdXQodGhpcy5vcGVuLmJpbmQodGhpcyksIDApXG4gICAgfVxuICB9XG5cbiAgb25JbnB1dEVsZW1lbnRDbGljayhldnQpIHtcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAodGhpcy5wcm9wcy5pbnB1dFByb3BzICYmIHRoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNsaWNrKSB7XG4gICAgICB0aGlzLnByb3BzLmlucHV0UHJvcHMub25DbGljaygpXG4gICAgfVxuICB9XG5cbiAgb25GaWxlRGlhbG9nQ2FuY2VsKCkge1xuICAgIC8vIHRpbWVvdXQgd2lsbCBub3QgcmVjb2duaXplIGNvbnRleHQgb2YgdGhpcyBtZXRob2RcbiAgICBjb25zdCB7IG9uRmlsZURpYWxvZ0NhbmNlbCB9ID0gdGhpcy5wcm9wc1xuICAgIC8vIGV4ZWN1dGUgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgRmlsZURpYWxvZyBpcyBvcGVuZWQgaW4gdGhlIGJyb3dzZXJcbiAgICBpZiAodGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyBSZXR1cm5zIGFuIG9iamVjdCBhcyBGaWxlTGlzdFxuICAgICAgICBjb25zdCB7IGZpbGVzIH0gPSB0aGlzLmZpbGVJbnB1dEVsXG5cbiAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9uRmlsZURpYWxvZ0NhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uRmlsZURpYWxvZ0NhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH0sIDMwMClcbiAgICB9XG4gIH1cblxuICBzZXRSZWYocmVmKSB7XG4gICAgdGhpcy5ub2RlID0gcmVmXG4gIH1cblxuICBzZXRSZWZzKHJlZikge1xuICAgIHRoaXMuZmlsZUlucHV0RWwgPSByZWZcbiAgfVxuICAvKipcbiAgICogT3BlbiBzeXN0ZW0gZmlsZSB1cGxvYWQgZGlhbG9nLlxuICAgKlxuICAgKiBAcHVibGljXG4gICAqL1xuICBvcGVuKCkge1xuICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gdHJ1ZVxuICAgIHRoaXMuZmlsZUlucHV0RWwudmFsdWUgPSBudWxsXG4gICAgdGhpcy5maWxlSW5wdXRFbC5jbGljaygpXG4gIH1cblxuICByZW5kZXJDaGlsZHJlbiA9IChjaGlsZHJlbiwgaXNEcmFnQWN0aXZlLCBpc0RyYWdBY2NlcHQsIGlzRHJhZ1JlamVjdCkgPT4ge1xuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbih7XG4gICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgIGlzRHJhZ0FjdGl2ZSxcbiAgICAgICAgaXNEcmFnQWNjZXB0LFxuICAgICAgICBpc0RyYWdSZWplY3RcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlblxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFjY2VwdCxcbiAgICAgIGFjY2VwdENsYXNzTmFtZSxcbiAgICAgIGFjdGl2ZUNsYXNzTmFtZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNhYmxlZENsYXNzTmFtZSxcbiAgICAgIGlucHV0UHJvcHMsXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIG5hbWUsXG4gICAgICByZWplY3RDbGFzc05hbWUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIGxldCB7XG4gICAgICBhY2NlcHRTdHlsZSxcbiAgICAgIGFjdGl2ZVN0eWxlLFxuICAgICAgY2xhc3NOYW1lID0gJycsXG4gICAgICBkaXNhYmxlZFN0eWxlLFxuICAgICAgcmVqZWN0U3R5bGUsXG4gICAgICBzdHlsZSxcbiAgICAgIC4uLnByb3BzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgfSA9IHJlc3RcblxuICAgIGNvbnN0IHsgaXNEcmFnQWN0aXZlLCBkcmFnZ2VkRmlsZXMgfSA9IHRoaXMuc3RhdGVcbiAgICBjb25zdCBmaWxlc0NvdW50ID0gZHJhZ2dlZEZpbGVzLmxlbmd0aFxuICAgIGNvbnN0IGlzTXVsdGlwbGVBbGxvd2VkID0gbXVsdGlwbGUgfHwgZmlsZXNDb3VudCA8PSAxXG4gICAgY29uc3QgaXNEcmFnQWNjZXB0ID0gZmlsZXNDb3VudCA+IDAgJiYgYWxsRmlsZXNBY2NlcHRlZChkcmFnZ2VkRmlsZXMsIHRoaXMucHJvcHMuYWNjZXB0KVxuICAgIGNvbnN0IGlzRHJhZ1JlamVjdCA9IGZpbGVzQ291bnQgPiAwICYmICghaXNEcmFnQWNjZXB0IHx8ICFpc011bHRpcGxlQWxsb3dlZClcbiAgICBjb25zdCBub1N0eWxlcyA9XG4gICAgICAhY2xhc3NOYW1lICYmICFzdHlsZSAmJiAhYWN0aXZlU3R5bGUgJiYgIWFjY2VwdFN0eWxlICYmICFyZWplY3RTdHlsZSAmJiAhZGlzYWJsZWRTdHlsZVxuXG4gICAgaWYgKGlzRHJhZ0FjdGl2ZSAmJiBhY3RpdmVDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnICcgKyBhY3RpdmVDbGFzc05hbWVcbiAgICB9XG4gICAgaWYgKGlzRHJhZ0FjY2VwdCAmJiBhY2NlcHRDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnICcgKyBhY2NlcHRDbGFzc05hbWVcbiAgICB9XG4gICAgaWYgKGlzRHJhZ1JlamVjdCAmJiByZWplY3RDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnICcgKyByZWplY3RDbGFzc05hbWVcbiAgICB9XG4gICAgaWYgKGRpc2FibGVkICYmIGRpc2FibGVkQ2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gJyAnICsgZGlzYWJsZWRDbGFzc05hbWVcbiAgICB9XG5cbiAgICBpZiAobm9TdHlsZXMpIHtcbiAgICAgIHN0eWxlID0gc3R5bGVzLmRlZmF1bHRcbiAgICAgIGFjdGl2ZVN0eWxlID0gc3R5bGVzLmFjdGl2ZVxuICAgICAgYWNjZXB0U3R5bGUgPSBzdHlsZS5hY3RpdmVcbiAgICAgIHJlamVjdFN0eWxlID0gc3R5bGVzLnJlamVjdGVkXG4gICAgICBkaXNhYmxlZFN0eWxlID0gc3R5bGVzLmRpc2FibGVkXG4gICAgfVxuXG4gICAgbGV0IGFwcGxpZWRTdHlsZSA9IHsgLi4uc3R5bGUgfVxuICAgIGlmIChhY3RpdmVTdHlsZSAmJiBpc0RyYWdBY3RpdmUpIHtcbiAgICAgIGFwcGxpZWRTdHlsZSA9IHtcbiAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgIC4uLmFjdGl2ZVN0eWxlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY2NlcHRTdHlsZSAmJiBpc0RyYWdBY2NlcHQpIHtcbiAgICAgIGFwcGxpZWRTdHlsZSA9IHtcbiAgICAgICAgLi4uYXBwbGllZFN0eWxlLFxuICAgICAgICAuLi5hY2NlcHRTdHlsZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVqZWN0U3R5bGUgJiYgaXNEcmFnUmVqZWN0KSB7XG4gICAgICBhcHBsaWVkU3R5bGUgPSB7XG4gICAgICAgIC4uLmFwcGxpZWRTdHlsZSxcbiAgICAgICAgLi4ucmVqZWN0U3R5bGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRpc2FibGVkU3R5bGUgJiYgZGlzYWJsZWQpIHtcbiAgICAgIGFwcGxpZWRTdHlsZSA9IHtcbiAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgIC4uLmRpc2FibGVkU3R5bGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dEF0dHJpYnV0ZXMgPSB7XG4gICAgICBhY2NlcHQsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgIHN0eWxlOiB7IGRpc3BsYXk6ICdub25lJyB9LFxuICAgICAgbXVsdGlwbGU6IHN1cHBvcnRNdWx0aXBsZSAmJiBtdWx0aXBsZSxcbiAgICAgIHJlZjogdGhpcy5zZXRSZWZzLFxuICAgICAgb25DaGFuZ2U6IHRoaXMub25Ecm9wLFxuICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJ1xuICAgIH1cblxuICAgIGlmIChuYW1lICYmIG5hbWUubGVuZ3RoKSB7XG4gICAgICBpbnB1dEF0dHJpYnV0ZXMubmFtZSA9IG5hbWVcbiAgICB9XG5cbiAgICAvLyBEZXN0cnVjdHVyZSBjdXN0b20gcHJvcHMgYXdheSBmcm9tIHByb3BzIHVzZWQgZm9yIHRoZSBkaXYgZWxlbWVudFxuICAgIGNvbnN0IHtcbiAgICAgIGFjY2VwdGVkRmlsZXMsXG4gICAgICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQsXG4gICAgICBkaXNhYmxlUHJldmlldyxcbiAgICAgIGRpc2FibGVDbGljayxcbiAgICAgIG9uRHJvcEFjY2VwdGVkLFxuICAgICAgb25Ecm9wUmVqZWN0ZWQsXG4gICAgICBvbkZpbGVEaWFsb2dDYW5jZWwsXG4gICAgICBtYXhTaXplLFxuICAgICAgbWluU2l6ZSxcbiAgICAgIC4uLmRpdlByb3BzXG4gICAgfSA9IHByb3BzXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgc3R5bGU9e2FwcGxpZWRTdHlsZX1cbiAgICAgICAgey4uLmRpdlByb3BzIC8qIGV4cGFuZCB1c2VyIHByb3ZpZGVkIHByb3BzIGZpcnN0IHNvIGV2ZW50IGhhbmRsZXJzIGFyZSBuZXZlciBvdmVycmlkZGVuICovfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uQ2xpY2spfVxuICAgICAgICBvbkRyYWdTdGFydD17dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdTdGFydCl9XG4gICAgICAgIG9uRHJhZ0VudGVyPXt0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJhZ0VudGVyKX1cbiAgICAgICAgb25EcmFnT3Zlcj17dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdPdmVyKX1cbiAgICAgICAgb25EcmFnTGVhdmU9e3RoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnTGVhdmUpfVxuICAgICAgICBvbkRyb3A9e3RoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25Ecm9wKX1cbiAgICAgICAgcmVmPXt0aGlzLnNldFJlZn1cbiAgICAgICAgYXJpYS1kaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlckNoaWxkcmVuKGNoaWxkcmVuLCBpc0RyYWdBY3RpdmUsIGlzRHJhZ0FjY2VwdCwgaXNEcmFnUmVqZWN0KX1cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgey4uLmlucHV0UHJvcHMgLyogZXhwYW5kIHVzZXIgcHJvdmlkZWQgaW5wdXRQcm9wcyBmaXJzdCBzbyBpbnB1dEF0dHJpYnV0ZXMgb3ZlcnJpZGUgdGhlbSAqL31cbiAgICAgICAgICB7Li4uaW5wdXRBdHRyaWJ1dGVzfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyb3B6b25lXG5cbkRyb3B6b25lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIEFsbG93IHNwZWNpZmljIHR5cGVzIG9mIGZpbGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL29rb25ldC9hdHRyLWFjY2VwdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICogS2VlcCBpbiBtaW5kIHRoYXQgbWltZSB0eXBlIGRldGVybWluYXRpb24gaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBwbGF0Zm9ybXMuIENTViBmaWxlcyxcbiAgICogZm9yIGV4YW1wbGUsIGFyZSByZXBvcnRlZCBhcyB0ZXh0L3BsYWluIHVuZGVyIG1hY09TIGJ1dCBhcyBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwgdW5kZXJcbiAgICogV2luZG93cy4gSW4gc29tZSBjYXNlcyB0aGVyZSBtaWdodCBub3QgYmUgYSBtaW1lIHR5cGUgc2V0IGF0IGFsbC5cbiAgICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtZHJvcHpvbmUvcmVhY3QtZHJvcHpvbmUvaXNzdWVzLzI3NlxuICAgKi9cbiAgYWNjZXB0OiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBDb250ZW50cyBvZiB0aGUgZHJvcHpvbmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogRGlzYWxsb3cgY2xpY2tpbmcgb24gdGhlIGRyb3B6b25lIGNvbnRhaW5lciB0byBvcGVuIGZpbGUgZGlhbG9nXG4gICAqL1xuICBkaXNhYmxlQ2xpY2s6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICogRW5hYmxlL2Rpc2FibGUgdGhlIGRyb3B6b25lIGVudGlyZWx5XG4gKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSBwcmV2aWV3IGdlbmVyYXRpb25cbiAgICovXG4gIGRpc2FibGVQcmV2aWV3OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgZmFsc2UsIGFsbG93IGRyb3BwZWQgaXRlbXMgdG8gdGFrZSBvdmVyIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93XG4gICAqL1xuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBQYXNzIGFkZGl0aW9uYWwgYXR0cmlidXRlcyB0byB0aGUgYDxpbnB1dCB0eXBlPVwiZmlsZVwiLz5gIHRhZ1xuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQWxsb3cgZHJvcHBpbmcgbXVsdGlwbGUgZmlsZXNcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogYG5hbWVgIGF0dHJpYnV0ZSBmb3IgdGhlIGlucHV0IHRhZ1xuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogTWF4aW11bSBmaWxlIHNpemVcbiAgICovXG4gIG1heFNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIE1pbmltdW0gZmlsZSBzaXplXG4gICAqL1xuICBtaW5TaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogY2xhc3NOYW1lIGZvciBhY3RpdmUgc3RhdGVcbiAgICovXG4gIGFjdGl2ZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogY2xhc3NOYW1lIGZvciBhY2NlcHRlZCBzdGF0ZVxuICAgKi9cbiAgYWNjZXB0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgZm9yIHJlamVjdGVkIHN0YXRlXG4gICAqL1xuICByZWplY3RDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZSBmb3IgZGlzYWJsZWQgc3RhdGVcbiAgICovXG4gIGRpc2FibGVkQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5XG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseSB3aGVuIGRyYWcgaXMgYWN0aXZlXG4gICAqL1xuICBhY3RpdmVTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseSB3aGVuIGRyb3Agd2lsbCBiZSBhY2NlcHRlZFxuICAgKi9cbiAgYWNjZXB0U3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHkgd2hlbiBkcm9wIHdpbGwgYmUgcmVqZWN0ZWRcbiAgICovXG4gIHJlamVjdFN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5IHdoZW4gZHJvcHpvbmUgaXMgZGlzYWJsZWRcbiAgICovXG4gIGRpc2FibGVkU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIG9uQ2xpY2sgY2FsbGJhY2tcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyb3AgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJvcDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcEFjY2VwdGVkIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyb3BBY2NlcHRlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcFJlamVjdGVkIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyb3BSZWplY3RlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ1N0YXJ0IGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ0VudGVyIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdFbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ092ZXIgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ092ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyYWdMZWF2ZSBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgY2FsbGJhY2sgb24gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b24gb2YgdGhlIGZpbGUgZGlhbG9nXG4gICAqL1xuICBvbkZpbGVEaWFsb2dDYW5jZWw6IFByb3BUeXBlcy5mdW5jXG59XG5cbkRyb3B6b25lLmRlZmF1bHRQcm9wcyA9IHtcbiAgcHJldmVudERyb3BPbkRvY3VtZW50OiB0cnVlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGRpc2FibGVQcmV2aWV3OiBmYWxzZSxcbiAgZGlzYWJsZUNsaWNrOiBmYWxzZSxcbiAgbXVsdGlwbGU6IHRydWUsXG4gIG1heFNpemU6IEluZmluaXR5LFxuICBtaW5TaXplOiAwXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvaW5kZXguanMiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMV9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicmVhY3RcIlxuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicHJvcC10eXBlc1wiXG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBhY2NlcHRzIGZyb20gJ2F0dHItYWNjZXB0J1xuXG5leHBvcnQgY29uc3Qgc3VwcG9ydE11bHRpcGxlID1cbiAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFbGVtZW50XG4gICAgPyAnbXVsdGlwbGUnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICA6IHRydWVcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFUcmFuc2Zlckl0ZW1zKGV2ZW50KSB7XG4gIGxldCBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBbXVxuICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgY29uc3QgZHQgPSBldmVudC5kYXRhVHJhbnNmZXJcbiAgICBpZiAoZHQuZmlsZXMgJiYgZHQuZmlsZXMubGVuZ3RoKSB7XG4gICAgICBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBkdC5maWxlc1xuICAgIH0gZWxzZSBpZiAoZHQuaXRlbXMgJiYgZHQuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAvLyBEdXJpbmcgdGhlIGRyYWcgZXZlbiB0aGUgZGF0YVRyYW5zZmVyLmZpbGVzIGlzIG51bGxcbiAgICAgIC8vIGJ1dCBDaHJvbWUgaW1wbGVtZW50cyBzb21lIGRyYWcgc3RvcmUsIHdoaWNoIGlzIGFjY2VzaWJsZSB2aWEgZGF0YVRyYW5zZmVyLml0ZW1zXG4gICAgICBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBkdC5pdGVtc1xuICAgIH1cbiAgfSBlbHNlIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmZpbGVzKSB7XG4gICAgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gZXZlbnQudGFyZ2V0LmZpbGVzXG4gIH1cbiAgLy8gQ29udmVydCBmcm9tIERhdGFUcmFuc2Zlckl0ZW1zTGlzdCB0byB0aGUgbmF0aXZlIEFycmF5XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkYXRhVHJhbnNmZXJJdGVtc0xpc3QpXG59XG5cbi8vIEZpcmVmb3ggdmVyc2lvbnMgcHJpb3IgdG8gNTMgcmV0dXJuIGEgYm9ndXMgTUlNRSB0eXBlIGZvciBldmVyeSBmaWxlIGRyYWcsIHNvIGRyYWdvdmVycyB3aXRoXG4vLyB0aGF0IE1JTUUgdHlwZSB3aWxsIGFsd2F5cyBiZSBhY2NlcHRlZFxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpIHtcbiAgcmV0dXJuIGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnIHx8IGFjY2VwdHMoZmlsZSwgYWNjZXB0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsZU1hdGNoU2l6ZShmaWxlLCBtYXhTaXplLCBtaW5TaXplKSB7XG4gIHJldHVybiBmaWxlLnNpemUgPD0gbWF4U2l6ZSAmJiBmaWxlLnNpemUgPj0gbWluU2l6ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsRmlsZXNBY2NlcHRlZChmaWxlcywgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlcy5ldmVyeShmaWxlID0+IGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpKVxufVxuXG4vLyBhbGxvdyB0aGUgZW50aXJlIGRvY3VtZW50IHRvIGJlIGEgZHJhZyB0YXJnZXRcbmV4cG9ydCBmdW5jdGlvbiBvbkRvY3VtZW50RHJhZ092ZXIoZXZ0KSB7XG4gIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdXRpbHMvaW5kZXguanMiLCJtb2R1bGUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUpe2lmKHJbZV0pcmV0dXJuIHJbZV0uZXhwb3J0czt2YXIgbz1yW2VdPXtleHBvcnRzOnt9LGlkOmUsbG9hZGVkOiExfTtyZXR1cm4gdFtlXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxuKSxvLmxvYWRlZD0hMCxvLmV4cG9ydHN9dmFyIHI9e307cmV0dXJuIG4ubT10LG4uYz1yLG4ucD1cIlwiLG4oMCl9KFtmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7bi5fX2VzTW9kdWxlPSEwLHIoOCkscig5KSxuW1wiZGVmYXVsdFwiXT1mdW5jdGlvbih0LG4pe2lmKHQmJm4pe3ZhciByPWZ1bmN0aW9uKCl7dmFyIHI9QXJyYXkuaXNBcnJheShuKT9uOm4uc3BsaXQoXCIsXCIpLGU9dC5uYW1lfHxcIlwiLG89dC50eXBlfHxcIlwiLGk9by5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpO3JldHVybnt2OnIuc29tZShmdW5jdGlvbih0KXt2YXIgbj10LnRyaW0oKTtyZXR1cm5cIi5cIj09PW4uY2hhckF0KDApP2UudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChuLnRvTG93ZXJDYXNlKCkpOi9cXC9cXCokLy50ZXN0KG4pP2k9PT1uLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik6bz09PW59KX19KCk7aWYoXCJvYmplY3RcIj09dHlwZW9mIHIpcmV0dXJuIHIudn1yZXR1cm4hMH0sdC5leHBvcnRzPW5bXCJkZWZhdWx0XCJdfSxmdW5jdGlvbih0LG4pe3ZhciByPXQuZXhwb3J0cz17dmVyc2lvbjpcIjEuMi4yXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9cil9LGZ1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDIpLG89cigxKSxpPXIoNCksdT1yKDE5KSxjPVwicHJvdG90eXBlXCIsZj1mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KG4sYXJndW1lbnRzKX19LHM9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLHAsbCx5LGQ9dCZzLkcsaD10JnMuUCx2PWQ/ZTp0JnMuUz9lW25dfHwoZVtuXT17fSk6KGVbbl18fHt9KVtjXSx4PWQ/bzpvW25dfHwob1tuXT17fSk7ZCYmKHI9bik7Zm9yKGEgaW4gcilwPSEodCZzLkYpJiZ2JiZhIGluIHYsbD0ocD92OnIpW2FdLHk9dCZzLkImJnA/ZihsLGUpOmgmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGw/ZihGdW5jdGlvbi5jYWxsLGwpOmwsdiYmIXAmJnUodixhLGwpLHhbYV0hPWwmJmkoeCxhLHkpLGgmJigoeFtjXXx8KHhbY109e30pKVthXT1sKX07ZS5jb3JlPW8scy5GPTEscy5HPTIscy5TPTQscy5QPTgscy5CPTE2LHMuVz0zMix0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNSksbz1yKDE4KTt0LmV4cG9ydHM9cigyMik/ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLnNldERlc2ModCxuLG8oMSxyKSl9OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFtuXT1yLHR9fSxmdW5jdGlvbih0LG4pe3ZhciByPU9iamVjdDt0LmV4cG9ydHM9e2NyZWF0ZTpyLmNyZWF0ZSxnZXRQcm90bzpyLmdldFByb3RvdHlwZU9mLGlzRW51bTp7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxnZXREZXNjOnIuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHNldERlc2M6ci5kZWZpbmVQcm9wZXJ0eSxzZXREZXNjczpyLmRlZmluZVByb3BlcnRpZXMsZ2V0S2V5czpyLmtleXMsZ2V0TmFtZXM6ci5nZXRPd25Qcm9wZXJ0eU5hbWVzLGdldFN5bWJvbHM6ci5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsZWFjaDpbXS5mb3JFYWNofX0sZnVuY3Rpb24odCxuKXt2YXIgcj0wLGU9TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJTeW1ib2woXCIuY29uY2F0KHZvaWQgMD09PXQ/XCJcIjp0LFwiKV9cIiwoKytyK2UpLnRvU3RyaW5nKDM2KSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyMCkoXCJ3a3NcIiksbz1yKDIpLlN5bWJvbDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF18fChlW3RdPW8mJm9bdF18fChvfHxyKDYpKShcIlN5bWJvbC5cIit0KSl9fSxmdW5jdGlvbih0LG4scil7cigyNiksdC5leHBvcnRzPXIoMSkuQXJyYXkuc29tZX0sZnVuY3Rpb24odCxuLHIpe3IoMjUpLHQuZXhwb3J0cz1yKDEpLlN0cmluZy5lbmRzV2l0aH0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4pe3ZhciByPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gci5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7aWYoZSh0KSx2b2lkIDA9PT1uKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwobixyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLGUpe3JldHVybiB0LmNhbGwobixyLGUpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsZSxvKXtyZXR1cm4gdC5jYWxsKG4scixlLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShuLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT10KXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIit0KTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49Ly4vO3RyeXtcIi8uL1wiW3RdKG4pfWNhdGNoKGUpe3RyeXtyZXR1cm4gbltyKDcpKFwibWF0Y2hcIildPSExLCFcIi8uL1wiW3RdKG4pfWNhdGNoKG8pe319cmV0dXJuITB9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2gobil7cmV0dXJuITB9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE2KSxvPXIoMTEpLGk9cig3KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gZSh0KSYmKHZvaWQgMCE9PShuPXRbaV0pPyEhbjpcIlJlZ0V4cFwiPT1vKHQpKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOm59fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMiksbz1yKDQpLGk9cig2KShcInNyY1wiKSx1PVwidG9TdHJpbmdcIixjPUZ1bmN0aW9uW3VdLGY9KFwiXCIrYykuc3BsaXQodSk7cigxKS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBjLmNhbGwodCl9LCh0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIsdSl7XCJmdW5jdGlvblwiPT10eXBlb2YgciYmKG8ocixpLHRbbl0/XCJcIit0W25dOmYuam9pbihTdHJpbmcobikpKSxcIm5hbWVcImluIHJ8fChyLm5hbWU9bikpLHQ9PT1lP3Rbbl09cjoodXx8ZGVsZXRlIHRbbl0sbyh0LG4scikpfSkoRnVuY3Rpb24ucHJvdG90eXBlLHUsZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzJiZ0aGlzW2ldfHxjLmNhbGwodGhpcyl9KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMiksbz1cIl9fY29yZS1qc19zaGFyZWRfX1wiLGk9ZVtvXXx8KGVbb109e30pO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaVt0XXx8KGlbdF09e30pfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTcpLG89cigxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtpZihlKG4pKXRocm93IFR5cGVFcnJvcihcIlN0cmluZyNcIityK1wiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtyZXR1cm4gU3RyaW5nKG8odCkpfX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz0hcigxNSkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbil7dmFyIHI9TWF0aC5jZWlsLGU9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9lOnIpKHQpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjMpLG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/byhlKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9cigzKSxvPXIoMjQpLGk9cigyMSksdT1cImVuZHNXaXRoXCIsYz1cIlwiW3VdO2UoZS5QK2UuRipyKDE0KSh1KSxcIlN0cmluZ1wiLHtlbmRzV2l0aDpmdW5jdGlvbih0KXt2YXIgbj1pKHRoaXMsdCx1KSxyPWFyZ3VtZW50cyxlPXIubGVuZ3RoPjE/clsxXTp2b2lkIDAsZj1vKG4ubGVuZ3RoKSxzPXZvaWQgMD09PWU/ZjpNYXRoLm1pbihvKGUpLGYpLGE9U3RyaW5nKHQpO3JldHVybiBjP2MuY2FsbChuLGEscyk6bi5zbGljZShzLWEubGVuZ3RoLHMpPT09YX19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNSksbz1yKDMpLGk9cigxKS5BcnJheXx8QXJyYXksdT17fSxjPWZ1bmN0aW9uKHQsbil7ZS5lYWNoLmNhbGwodC5zcGxpdChcIixcIiksZnVuY3Rpb24odCl7dm9pZCAwPT1uJiZ0IGluIGk/dVt0XT1pW3RdOnQgaW5bXSYmKHVbdF09cigxMikoRnVuY3Rpb24uY2FsbCxbXVt0XSxuKSl9KX07YyhcInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXNcIiwxKSxjKFwiaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlc1wiLDMpLGMoXCJqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiKSxvKG8uUyxcIkFycmF5XCIsdSl9XSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXR0ci1hY2NlcHQvZGlzdC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJleHBvcnQgZGVmYXVsdCB7XG4gIHJlamVjdGVkOiB7XG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyQ29sb3I6ICcjYzY2JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZWVlJ1xuICB9LFxuICBkaXNhYmxlZDoge1xuICAgIG9wYWNpdHk6IDAuNVxuICB9LFxuICBhY3RpdmU6IHtcbiAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJDb2xvcjogJyM2YzYnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWUnXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICB3aWR0aDogMjAwLFxuICAgIGhlaWdodDogMjAwLFxuICAgIGJvcmRlcldpZHRoOiAyLFxuICAgIGJvcmRlckNvbG9yOiAnIzY2NicsXG4gICAgYm9yZGVyU3R5bGU6ICdkYXNoZWQnLFxuICAgIGJvcmRlclJhZGl1czogNVxuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdXRpbHMvc3R5bGVzLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],t):"object"==typeof exports?exports.Dropzone=t(require("react"),require("prop-types")):e.Dropzone=t(e.React,e.PropTypes)}(this,function(e,t){return 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=0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(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}function i(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)}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(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}function l(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)}Object.defineProperty(t,"__esModule",{value:!0});var 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(){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}}(),p=n(1),f=r(p),d=n(2),h=r(d),v=n(3),g=n(5),y=r(g),m=function(e){function t(e,n){a(this,t);var r=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return r.renderChildren=function(e,t,n,o){return"function"==typeof e?e(c({},r.state,{isDragActive:t,isDragAccept:n,isDragReject:o})):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.setRef=r.setRef.bind(r),r.setRefs=r.setRefs.bind(r),r.isFileDialogActive=!1,r.state={draggedFiles:[],acceptedFiles:[],rejectedFiles:[]},r}return l(t,e),u(t,[{key:"componentDidMount",value:function(){var e=this.props.preventDropOnDocument;this.dragTargets=[],e&&(document.addEventListener("dragover",v.onDocumentDragOver,!1),document.addEventListener("drop",this.onDocumentDrop,!1)),this.fileInputEl.addEventListener("click",this.onInputElementClick,!1),window.addEventListener("focus",this.onFileDialogCancel,!1)}},{key:"componentWillUnmount",value:function(){this.props.preventDropOnDocument&&(document.removeEventListener("dragover",v.onDocumentDragOver),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&&this.props.onDragStart.call(this,e)}},{key:"onDragEnter",value:function(e){e.preventDefault(),-1===this.dragTargets.indexOf(e.target)&&this.dragTargets.push(e.target),this.setState({isDragActive:!0,draggedFiles:(0,v.getDataTransferItems)(e)}),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&&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&&this.props.onDragLeave.call(this,e))}},{key:"onDrop",value:function(e){var t=this,n=this.props,r=n.onDrop,o=n.onDropAccepted,a=n.onDropRejected,s=n.multiple,l=n.disablePreview,c=n.accept,u=(0,v.getDataTransferItems)(e),p=[],f=[];e.preventDefault(),this.dragTargets=[],this.isFileDialogActive=!1,u.forEach(function(e){if(!l)try{e.preview=window.URL.createObjectURL(e)}catch(e){}(0,v.fileAccepted)(e,c)&&(0,v.fileMatchSize)(e,t.props.maxSize,t.props.minSize)?p.push(e):f.push(e)}),s||f.push.apply(f,i(p.splice(1))),r&&r.call(this,p,f,e),f.length>0&&a&&a.call(this,f,e),p.length>0&&o&&o.call(this,p,e),this.draggedFiles=null,this.setState({isDragActive:!1,draggedFiles:[],acceptedFiles:p,rejectedFiles:f})}},{key:"onClick",value:function(e){var t=this.props,n=t.onClick;t.disableClick||(e.stopPropagation(),n&&n.call(this,e),(0,v.isIeOrEdge)()?setTimeout(this.open.bind(this),0):this.open())}},{key:"onInputElementClick",value:function(e){e.stopPropagation(),this.props.inputProps&&this.props.inputProps.onClick&&this.props.inputProps.onClick()}},{key:"onFileDialogCancel",value:function(){var e=this,t=this.props.onFileDialogCancel;this.isFileDialogActive&&setTimeout(function(){if(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 e=this.props,t=e.accept,n=e.acceptClassName,r=e.activeClassName,i=e.children,a=e.disabled,s=e.disabledClassName,l=e.inputProps,u=e.multiple,p=e.name,d=e.rejectClassName,h=o(e,["accept","acceptClassName","activeClassName","children","disabled","disabledClassName","inputProps","multiple","name","rejectClassName"]),g=h.acceptStyle,m=h.activeStyle,D=h.className,b=void 0===D?"":D,x=h.disabledStyle,S=h.rejectStyle,O=h.style,C=o(h,["acceptStyle","activeStyle","className","disabledStyle","rejectStyle","style"]),E=this.state,j=E.isDragActive,k=E.draggedFiles,w=k.length,P=u||w<=1,F=w>0&&(0,v.allFilesAccepted)(k,this.props.accept),_=w>0&&(!F||!P),A=!(b||O||m||g||S||x);j&&r&&(b+=" "+r),F&&n&&(b+=" "+n),_&&d&&(b+=" "+d),a&&s&&(b+=" "+s),A&&(O=y.default.default,m=y.default.active,g=O.active,S=y.default.rejected,x=y.default.disabled);var T=c({},O);m&&j&&(T=c({},O,m)),g&&F&&(T=c({},T,g)),S&&_&&(T=c({},T,S)),x&&a&&(T=c({},O,x));var M={accept:t,disabled:a,type:"file",style:{display:"none"},multiple:v.supportMultiple&&u,ref:this.setRefs,onChange:this.onDrop,autoComplete:"off"};p&&p.length&&(M.name=p);var I=(C.acceptedFiles,C.preventDropOnDocument,C.disablePreview,C.disableClick,C.onDropAccepted,C.onDropRejected,C.onFileDialogCancel,C.maxSize,C.minSize,o(C,["acceptedFiles","preventDropOnDocument","disablePreview","disableClick","onDropAccepted","onDropRejected","onFileDialogCancel","maxSize","minSize"]));return f.default.createElement("div",c({className:b,style:T},I,{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,j,F,_),f.default.createElement("input",c({},l,M)))}}]),t}(f.default.Component);t.default=m,m.propTypes={accept:h.default.oneOfType([h.default.string,h.default.arrayOf(h.default.string)]),children:h.default.oneOfType([h.default.node,h.default.func]),disableClick:h.default.bool,disabled:h.default.bool,disablePreview:h.default.bool,preventDropOnDocument:h.default.bool,inputProps:h.default.object,multiple:h.default.bool,name:h.default.string,maxSize:h.default.number,minSize:h.default.number,className:h.default.string,activeClassName:h.default.string,acceptClassName:h.default.string,rejectClassName:h.default.string,disabledClassName:h.default.string,style:h.default.object,activeStyle:h.default.object,acceptStyle:h.default.object,rejectStyle:h.default.object,disabledStyle:h.default.object,onClick:h.default.func,onDrop:h.default.func,onDropAccepted:h.default.func,onDropRejected:h.default.func,onDragStart:h.default.func,onDragEnter:h.default.func,onDragOver:h.default.func,onDragLeave:h.default.func,onFileDialogCancel:h.default.func},m.defaultProps={preventDropOnDocument:!0,disabled:!1,disablePreview:!1,disableClick:!1,multiple:!0,maxSize:1/0,minSize:0},e.exports=t.default},function(t,n){t.exports=e},function(e,n){e.exports=t},function(e,t,n){"use strict";function r(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)}function o(e,t){return"application/x-moz-file"===e.type||(0,f.default)(e,t)}function i(e,t,n){return e.size<=t&&e.size>=n}function a(e,t){return e.every(function(e){return o(e,t)})}function s(e){e.preventDefault()}function l(e){return-1!==e.indexOf("MSIE")||-1!==e.indexOf("Trident/")}function c(e){return-1!==e.indexOf("Edge/")}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.navigator.userAgent;return l(e)||c(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.supportMultiple=void 0,t.getDataTransferItems=r,t.fileAccepted=o,t.fileMatchSize=i,t.allFilesAccepted=a,t.onDocumentDragOver=s,t.isIeOrEdge=u;var p=n(4),f=function(e){return e&&e.__esModule?e:{default:e}}(p);t.supportMultiple="undefined"==typeof document||!document||!document.createElement||"multiple"in document.createElement("input")},function(e,t){e.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";t.__esModule=!0,n(8),n(9),t.default=function(e,t){if(e&&t){var n=function(){var n=Array.isArray(t)?t:t.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return{v:n.some(function(e){var t=e.trim();return"."===t.charAt(0)?r.toLowerCase().endsWith(t.toLowerCase()):/\/\*$/.test(t)?i===t.replace(/\/.*$/,""):o===t})}}();if("object"==typeof n)return n.v}return!0},e.exports=t.default},function(e,t){var n=e.exports={version:"1.2.2"};"number"==typeof __e&&(__e=n)},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,n){var r=n(2),o=n(1),i=n(4),a=n(19),s="prototype",l=function(e,t){return function(){return e.apply(t,arguments)}},c=function(e,t,n){var u,p,f,d,h=e&c.G,v=e&c.P,g=h?r:e&c.S?r[t]||(r[t]={}):(r[t]||{})[s],y=h?o:o[t]||(o[t]={});h&&(n=t);for(u in n)p=!(e&c.F)&&g&&u in g,f=(p?g:n)[u],d=e&c.B&&p?l(f,r):v&&"function"==typeof f?l(Function.call,f):f,g&&!p&&a(g,u,f),y[u]!=f&&i(y,u,d),v&&((y[s]||(y[s]={}))[u]=f)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,e.exports=c},function(e,t,n){var r=n(5),o=n(18);e.exports=n(22)?function(e,t,n){return r.setDesc(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t){var n=Object;e.exports={create:n.create,getProto:n.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:n.getOwnPropertyDescriptor,setDesc:n.defineProperty,setDescs:n.defineProperties,getKeys:n.keys,getNames:n.getOwnPropertyNames,getSymbols:n.getOwnPropertySymbols,each:[].forEach}},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(20)("wks"),o=n(2).Symbol;e.exports=function(e){return r[e]||(r[e]=o&&o[e]||(o||n(6))("Symbol."+e))}},function(e,t,n){n(26),e.exports=n(1).Array.some},function(e,t,n){n(25),e.exports=n(1).String.endsWith},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(10);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){e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(r){try{return t[n(7)("match")]=!1,!"/./"[e](t)}catch(e){}}return!0}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){var r=n(16),o=n(11),i=n(7)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==o(e))}},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(2),o=n(4),i=n(6)("src"),a="toString",s=Function[a],l=(""+s).split(a);n(1).inspectSource=function(e){return s.call(e)},(e.exports=function(e,t,n,a){"function"==typeof n&&(o(n,i,e[t]?""+e[t]:l.join(String(t))),"name"in n||(n.name=t)),e===r?e[t]=n:(a||delete e[t],o(e,t,n))})(Function.prototype,a,function(){return"function"==typeof this&&this[i]||s.call(this)})},function(e,t,n){var r=n(2),o="__core-js_shared__",i=r[o]||(r[o]={});e.exports=function(e){return i[e]||(i[e]={})}},function(e,t,n){var r=n(17),o=n(13);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){e.exports=!n(15)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},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(23),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t,n){"use strict";var r=n(3),o=n(24),i=n(21),a="endsWith",s=""[a];r(r.P+r.F*n(14)(a),"String",{endsWith:function(e){var t=i(this,e,a),n=arguments,r=n.length>1?n[1]:void 0,l=o(t.length),c=void 0===r?l:Math.min(o(r),l),u=String(e);return s?s.call(t,u,c):t.slice(c-u.length,c)===u}})},function(e,t,n){var r=n(5),o=n(3),i=n(1).Array||Array,a={},s=function(e,t){r.each.call(e.split(","),function(e){void 0==t&&e in i?a[e]=i[e]:e in[]&&(a[e]=n(12)(Function.call,[][e],t))})};s("pop,reverse,shift,keys,values,entries",1),s("indexOf,every,some,forEach,map,filter,find,findIndex,includes",3),s("join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill"),o(o.S,"Array",a)}])},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={rejected:{borderStyle:"solid",borderColor:"#c66",backgroundColor:"#eee"},disabled:{opacity:.5},active:{borderStyle:"solid",borderColor:"#6c6",backgroundColor:"#eee"},default:{width:200,height:200,borderWidth:2,borderColor:"#666",borderStyle:"dashed",borderRadius:5}},e.exports=t.default}])});
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZThhMzU2ZjczZjk0ZWJjMzYzZWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJQcm9wVHlwZXNcIixcImNvbW1vbmpzMlwiOlwicHJvcC10eXBlc1wiLFwiY29tbW9uanNcIjpcInByb3AtdHlwZXNcIixcImFtZFwiOlwicHJvcC10eXBlc1wifSIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F0dHItYWNjZXB0L2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL3N0eWxlcy5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMV9fIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yX18iLCJtb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaW5zdGFsbGVkTW9kdWxlcyIsImkiLCJsIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwibiIsIl9fZXNNb2R1bGUiLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwib2JqIiwiZGVmYXVsdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsImtleXMiLCJ0YXJnZXQiLCJpbmRleE9mIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYXJyIiwiQXJyYXkiLCJpc0FycmF5IiwiYXJyMiIsImxlbmd0aCIsImZyb20iLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsInZhbHVlIiwid3JpdGFibGUiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9leHRlbmRzIiwiYXNzaWduIiwiYXJndW1lbnRzIiwic291cmNlIiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsInByb3BzIiwiZGVzY3JpcHRvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl9yZWFjdCIsIl9yZWFjdDIiLCJfcHJvcFR5cGVzIiwiX3Byb3BUeXBlczIiLCJfdXRpbHMiLCJfc3R5bGVzIiwiX3N0eWxlczIiLCJEcm9wem9uZSIsIl9SZWFjdCRDb21wb25lbnQiLCJjb250ZXh0IiwiX3RoaXMiLCJnZXRQcm90b3R5cGVPZiIsInJlbmRlckNoaWxkcmVuIiwiY2hpbGRyZW4iLCJpc0RyYWdBY3RpdmUiLCJpc0RyYWdBY2NlcHQiLCJpc0RyYWdSZWplY3QiLCJzdGF0ZSIsImNvbXBvc2VIYW5kbGVycyIsImJpbmQiLCJvbkNsaWNrIiwib25Eb2N1bWVudERyb3AiLCJvbkRyYWdFbnRlciIsIm9uRHJhZ0xlYXZlIiwib25EcmFnT3ZlciIsIm9uRHJhZ1N0YXJ0Iiwib25Ecm9wIiwib25GaWxlRGlhbG9nQ2FuY2VsIiwib25JbnB1dEVsZW1lbnRDbGljayIsInNldFJlZiIsInNldFJlZnMiLCJpc0ZpbGVEaWFsb2dBY3RpdmUiLCJkcmFnZ2VkRmlsZXMiLCJhY2NlcHRlZEZpbGVzIiwicmVqZWN0ZWRGaWxlcyIsInByZXZlbnREcm9wT25Eb2N1bWVudCIsImRyYWdUYXJnZXRzIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwib25Eb2N1bWVudERyYWdPdmVyIiwiZmlsZUlucHV0RWwiLCJ3aW5kb3ciLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlciIsImRpc2FibGVkIiwiZXZ0Iiwibm9kZSIsImNvbnRhaW5zIiwicHJldmVudERlZmF1bHQiLCJwdXNoIiwic2V0U3RhdGUiLCJnZXREYXRhVHJhbnNmZXJJdGVtcyIsInN0b3BQcm9wYWdhdGlvbiIsImRhdGFUcmFuc2ZlciIsImRyb3BFZmZlY3QiLCJlcnIiLCJfdGhpczIiLCJmaWx0ZXIiLCJlbCIsIl90aGlzMyIsIl9wcm9wcyIsIm9uRHJvcEFjY2VwdGVkIiwib25Ecm9wUmVqZWN0ZWQiLCJtdWx0aXBsZSIsImRpc2FibGVQcmV2aWV3IiwiYWNjZXB0IiwiZmlsZUxpc3QiLCJmb3JFYWNoIiwiZmlsZSIsInByZXZpZXciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJmaWxlQWNjZXB0ZWQiLCJmaWxlTWF0Y2hTaXplIiwibWF4U2l6ZSIsIm1pblNpemUiLCJhcHBseSIsInNwbGljZSIsIl9wcm9wczIiLCJkaXNhYmxlQ2xpY2siLCJpc0llT3JFZGdlIiwic2V0VGltZW91dCIsIm9wZW4iLCJpbnB1dFByb3BzIiwiX3RoaXM0IiwiZmlsZXMiLCJyZWYiLCJjbGljayIsIl9wcm9wczMiLCJhY2NlcHRDbGFzc05hbWUiLCJhY3RpdmVDbGFzc05hbWUiLCJkaXNhYmxlZENsYXNzTmFtZSIsInJlamVjdENsYXNzTmFtZSIsInJlc3QiLCJhY2NlcHRTdHlsZSIsImFjdGl2ZVN0eWxlIiwiX3Jlc3QkY2xhc3NOYW1lIiwiY2xhc3NOYW1lIiwidW5kZWZpbmVkIiwiZGlzYWJsZWRTdHlsZSIsInJlamVjdFN0eWxlIiwic3R5bGUiLCJfc3RhdGUiLCJmaWxlc0NvdW50IiwiaXNNdWx0aXBsZUFsbG93ZWQiLCJhbGxGaWxlc0FjY2VwdGVkIiwibm9TdHlsZXMiLCJhY3RpdmUiLCJyZWplY3RlZCIsImFwcGxpZWRTdHlsZSIsImlucHV0QXR0cmlidXRlcyIsInR5cGUiLCJkaXNwbGF5Iiwic3VwcG9ydE11bHRpcGxlIiwib25DaGFuZ2UiLCJhdXRvQ29tcGxldGUiLCJkaXZQcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJhcmlhLWRpc2FibGVkIiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwib25lT2ZUeXBlIiwic3RyaW5nIiwiYXJyYXlPZiIsImZ1bmMiLCJib29sIiwibnVtYmVyIiwiZGVmYXVsdFByb3BzIiwiSW5maW5pdHkiLCJldmVudCIsImRhdGFUcmFuc2Zlckl0ZW1zTGlzdCIsImR0IiwiaXRlbXMiLCJzbGljZSIsIl9hdHRyQWNjZXB0MiIsInNpemUiLCJldmVyeSIsImlzSWUiLCJ1c2VyQWdlbnQiLCJpc0VkZ2UiLCJuYXZpZ2F0b3IiLCJfYXR0ckFjY2VwdCIsInQiLCJlIiwiciIsImlkIiwibG9hZGVkIiwic3BsaXQiLCJyZXBsYWNlIiwidiIsInNvbWUiLCJ0cmltIiwiY2hhckF0IiwidG9Mb3dlckNhc2UiLCJlbmRzV2l0aCIsInRlc3QiLCJ2ZXJzaW9uIiwiX19lIiwiTWF0aCIsIkZ1bmN0aW9uIiwiX19nIiwidSIsImYiLCJhIiwieSIsIkciLCJoIiwiUCIsIlMiLCJ4IiwiRiIsIkIiLCJjb3JlIiwiVyIsInNldERlc2MiLCJnZXRQcm90byIsImlzRW51bSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiZ2V0RGVzYyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInNldERlc2NzIiwiZ2V0S2V5cyIsImdldE5hbWVzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldFN5bWJvbHMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJlYWNoIiwicmFuZG9tIiwiY29uY2F0IiwidG9TdHJpbmciLCJTeW1ib2wiLCJTdHJpbmciLCJpbnNwZWN0U291cmNlIiwiam9pbiIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwibWluIiwiYm9yZGVyU3R5bGUiLCJib3JkZXJDb2xvciIsImJhY2tncm91bmRDb2xvciIsIm9wYWNpdHkiLCJ3aWR0aCIsImhlaWdodCIsImJvcmRlcldpZHRoIiwiYm9yZGVyUmFkaXVzIl0sIm1hcHBpbmdzIjoiQ0FBQSxTQUFBQSxFQUFBQyxHQUNBLGdCQUFBQyxVQUFBLGdCQUFBQyxRQUNBQSxPQUFBRCxRQUFBRCxFQUFBRyxRQUFBLFNBQUFBLFFBQUEsZUFDQSxrQkFBQUMsZ0JBQUFDLElBQ0FELFFBQUEsc0JBQUFKLEdBQ0EsZ0JBQUFDLFNBQ0FBLFFBQUEsU0FBQUQsRUFBQUcsUUFBQSxTQUFBQSxRQUFBLGVBRUFKLEVBQUEsU0FBQUMsRUFBQUQsRUFBQSxNQUFBQSxFQUFBLFlBQ0NPLEtBQUEsU0FBQUMsRUFBQUMsR0FDRCxNQ0FnQixVQUFVQyxHQ04xQixRQUFBQyxHQUFBQyxHQUdBLEdBQUFDLEVBQUFELEdBQ0EsTUFBQUMsR0FBQUQsR0FBQVYsT0FHQSxJQUFBQyxHQUFBVSxFQUFBRCxJQUNBRSxFQUFBRixFQUNBRyxHQUFBLEVBQ0FiLFdBVUEsT0FOQVEsR0FBQUUsR0FBQUksS0FBQWIsRUFBQUQsUUFBQUMsSUFBQUQsUUFBQVMsR0FHQVIsRUFBQVksR0FBQSxFQUdBWixFQUFBRCxRQXZCQSxHQUFBVyxLQTREQSxPQWhDQUYsR0FBQU0sRUFBQVAsRUFHQUMsRUFBQU8sRUFBQUwsRUFHQUYsRUFBQVEsRUFBQSxTQUFBakIsRUFBQWtCLEVBQUFDLEdBQ0FWLEVBQUFXLEVBQUFwQixFQUFBa0IsSUFDQUcsT0FBQUMsZUFBQXRCLEVBQUFrQixHQUNBSyxjQUFBLEVBQ0FDLFlBQUEsRUFDQUMsSUFBQU4sS0FNQVYsRUFBQWlCLEVBQUEsU0FBQXpCLEdBQ0EsR0FBQWtCLEdBQUFsQixLQUFBMEIsV0FDQSxXQUEyQixNQUFBMUIsR0FBQSxTQUMzQixXQUFpQyxNQUFBQSxHQUVqQyxPQURBUSxHQUFBUSxFQUFBRSxFQUFBLElBQUFBLEdBQ0FBLEdBSUFWLEVBQUFXLEVBQUEsU0FBQVEsRUFBQUMsR0FBc0QsTUFBQVIsUUFBQVMsVUFBQUMsZUFBQWpCLEtBQUFjLEVBQUFDLElBR3REcEIsRUFBQXVCLEVBQUEsR0FHQXZCLElBQUF3QixFQUFBLEtEZ0JNLFNBQVVoQyxFQUFRRCxFQUFTUyxHQUVqQyxZQXlCQSxTQUFTeUIsR0FBdUJDLEdBQU8sTUFBT0EsSUFBT0EsRUFBSVIsV0FBYVEsR0FBUUMsUUFBU0QsR0FFdkYsUUFBU0UsR0FBeUJGLEVBQUtHLEdBQVEsR0FBSUMsS0FBYSxLQUFLLEdBQUkzQixLQUFLdUIsR0FBV0csRUFBS0UsUUFBUTVCLElBQU0sR0FBa0JTLE9BQU9TLFVBQVVDLGVBQWVqQixLQUFLcUIsRUFBS3ZCLEtBQWMyQixFQUFPM0IsR0FBS3VCLEVBQUl2QixHQUFNLE9BQU8yQixHQUVuTixRQUFTRSxHQUFtQkMsR0FBTyxHQUFJQyxNQUFNQyxRQUFRRixHQUFNLENBQUUsSUFBSyxHQUFJOUIsR0FBSSxFQUFHaUMsRUFBT0YsTUFBTUQsRUFBSUksUUFBU2xDLEVBQUk4QixFQUFJSSxPQUFRbEMsSUFBT2lDLEVBQUtqQyxHQUFLOEIsRUFBSTlCLEVBQU0sT0FBT2lDLEdBQWUsTUFBT0YsT0FBTUksS0FBS0wsR0FFMUwsUUFBU00sR0FBZ0JDLEVBQVVDLEdBQWUsS0FBTUQsWUFBb0JDLElBQWdCLEtBQU0sSUFBSUMsV0FBVSxxQ0FFaEgsUUFBU0MsR0FBMkJDLEVBQU12QyxHQUFRLElBQUt1QyxFQUFRLEtBQU0sSUFBSUMsZ0JBQWUsNERBQWdFLFFBQU94QyxHQUF5QixnQkFBVEEsSUFBcUMsa0JBQVRBLEdBQThCdUMsRUFBUHZDLEVBRWxPLFFBQVN5QyxHQUFVQyxFQUFVQyxHQUFjLEdBQTBCLGtCQUFmQSxJQUE0QyxPQUFmQSxFQUF1QixLQUFNLElBQUlOLFdBQVUsaUVBQW9FTSxHQUFlRCxHQUFTMUIsVUFBWVQsT0FBT3FDLE9BQU9ELEdBQWNBLEVBQVczQixXQUFhNkIsYUFBZUMsTUFBT0osRUFBVWhDLFlBQVksRUFBT3FDLFVBQVUsRUFBTXRDLGNBQWMsS0FBZWtDLElBQVlwQyxPQUFPeUMsZUFBaUJ6QyxPQUFPeUMsZUFBZU4sRUFBVUMsR0FBY0QsRUFBU08sVUFBWU4sR0FoQ2plcEMsT0FBT0MsZUFBZXRCLEVBQVMsY0FDN0I0RCxPQUFPLEdBR1QsSUFBSUksR0FBVzNDLE9BQU80QyxRQUFVLFNBQVUxQixHQUFVLElBQUssR0FBSTNCLEdBQUksRUFBR0EsRUFBSXNELFVBQVVwQixPQUFRbEMsSUFBSyxDQUFFLEdBQUl1RCxHQUFTRCxVQUFVdEQsRUFBSSxLQUFLLEdBQUl3RCxLQUFPRCxHQUFjOUMsT0FBT1MsVUFBVUMsZUFBZWpCLEtBQUtxRCxFQUFRQyxLQUFRN0IsRUFBTzZCLEdBQU9ELEVBQU9DLElBQVksTUFBTzdCLElBRW5QOEIsRUFBZSxXQUFjLFFBQVNDLEdBQWlCL0IsRUFBUWdDLEdBQVMsSUFBSyxHQUFJM0QsR0FBSSxFQUFHQSxFQUFJMkQsRUFBTXpCLE9BQVFsQyxJQUFLLENBQUUsR0FBSTRELEdBQWFELEVBQU0zRCxFQUFJNEQsR0FBV2hELFdBQWFnRCxFQUFXaEQsYUFBYyxFQUFPZ0QsRUFBV2pELGNBQWUsRUFBVSxTQUFXaUQsS0FBWUEsRUFBV1gsVUFBVyxHQUFNeEMsT0FBT0MsZUFBZWlCLEVBQVFpQyxFQUFXSixJQUFLSSxJQUFpQixNQUFPLFVBQVV0QixFQUFhdUIsRUFBWUMsR0FBaUosTUFBOUhELElBQVlILEVBQWlCcEIsRUFBWXBCLFVBQVcyQyxHQUFpQkMsR0FBYUosRUFBaUJwQixFQUFhd0IsR0FBcUJ4QixNRXRGaGlCeUIsRUFBQWxFLEVBQUEsR0YwRkltRSxFQUFVMUMsRUFBdUJ5QyxHRXpGckNFLEVBQUFwRSxFQUFBLEdGNkZJcUUsRUFBYzVDLEVBQXVCMkMsR0U1RnpDRSxFQUFBdEUsRUFBQSxHQVNBdUUsRUFBQXZFLEVBQUEsR0Z5Rkl3RSxFQUFXL0MsRUFBdUI4QyxHRXZGaENFLEVGcUdTLFNBQVVDLEdFcEd2QixRQUFBRCxHQUFZWCxFQUFPYSxHQUFTcEMsRUFBQTNDLEtBQUE2RSxFQUFBLElBQUFHLEdBQUFqQyxFQUFBL0MsTUFBQTZFLEVBQUFuQixXQUFBMUMsT0FBQWlFLGVBQUFKLElBQUFwRSxLQUFBVCxLQUNwQmtFLEVBQU9hLEdBRGEsT0FBQUMsR0FvUTVCRSxlQUFpQixTQUFDQyxFQUFVQyxFQUFjQyxFQUFjQyxHQUN0RCxNQUF3QixrQkFBYkgsR0FDRkEsT0FDRkgsRUFBS08sT0FDUkgsZUFDQUMsZUFDQUMsa0JBR0dILEdBM1FQSCxFQUFLUSxnQkFBa0JSLEVBQUtRLGdCQUFnQkMsS0FBckJULEdBQ3ZCQSxFQUFLVSxRQUFVVixFQUFLVSxRQUFRRCxLQUFiVCxHQUNmQSxFQUFLVyxlQUFpQlgsRUFBS1csZUFBZUYsS0FBcEJULEdBQ3RCQSxFQUFLWSxZQUFjWixFQUFLWSxZQUFZSCxLQUFqQlQsR0FDbkJBLEVBQUthLFlBQWNiLEVBQUthLFlBQVlKLEtBQWpCVCxHQUNuQkEsRUFBS2MsV0FBYWQsRUFBS2MsV0FBV0wsS0FBaEJULEdBQ2xCQSxFQUFLZSxZQUFjZixFQUFLZSxZQUFZTixLQUFqQlQsR0FDbkJBLEVBQUtnQixPQUFTaEIsRUFBS2dCLE9BQU9QLEtBQVpULEdBQ2RBLEVBQUtpQixtQkFBcUJqQixFQUFLaUIsbUJBQW1CUixLQUF4QlQsR0FDMUJBLEVBQUtrQixvQkFBc0JsQixFQUFLa0Isb0JBQW9CVCxLQUF6QlQsR0FFM0JBLEVBQUttQixPQUFTbkIsRUFBS21CLE9BQU9WLEtBQVpULEdBQ2RBLEVBQUtvQixRQUFVcEIsRUFBS29CLFFBQVFYLEtBQWJULEdBRWZBLEVBQUtxQixvQkFBcUIsRUFFMUJyQixFQUFLTyxPQUNIZSxnQkFDQUMsaUJBQ0FDLGtCQXJCd0J4QixFRnFoQjVCLE1BaGJBOUIsR0FBVTJCLEVBQVVDLEdBMENwQmQsRUFBYWEsSUFDWGQsSUFBSyxvQkFDTFIsTUFBTyxXRXhIVyxHQUNWa0QsR0FBMEJ6RyxLQUFLa0UsTUFBL0J1QyxxQkFDUnpHLE1BQUswRyxlQUVERCxJQUNGRSxTQUFTQyxpQkFBaUIsV0FBMUJsQyxFQUFBbUMsb0JBQTBELEdBQzFERixTQUFTQyxpQkFBaUIsT0FBUTVHLEtBQUsyRixnQkFBZ0IsSUFFekQzRixLQUFLOEcsWUFBWUYsaUJBQWlCLFFBQVM1RyxLQUFLa0cscUJBQXFCLEdBQ3JFYSxPQUFPSCxpQkFBaUIsUUFBUzVHLEtBQUtpRyxvQkFBb0IsTUY0SDFEbEMsSUFBSyx1QkFDTFIsTUFBTyxXRXpIMkJ2RCxLQUFLa0UsTUFBL0J1Qyx3QkFFTkUsU0FBU0ssb0JBQW9CLFdBQTdCdEMsRUFBQW1DLG9CQUNBRixTQUFTSyxvQkFBb0IsT0FBUWhILEtBQUsyRixpQkFFcEIsTUFBcEIzRixLQUFLOEcsYUFDUDlHLEtBQUs4RyxZQUFZRSxvQkFBb0IsUUFBU2hILEtBQUtrRyxxQkFBcUIsR0FFMUVhLE9BQU9DLG9CQUFvQixRQUFTaEgsS0FBS2lHLG9CQUFvQixNRjhIN0RsQyxJQUFLLGtCQUNMUixNQUFPLFNFNUhPMEQsR0FDZCxNQUFJakgsTUFBS2tFLE1BQU1nRCxTQUNOLEtBR0ZELEtGK0hQbEQsSUFBSyxpQkFDTFIsTUFBTyxTRTdITTRELEdBQ1RuSCxLQUFLb0gsTUFBUXBILEtBQUtvSCxLQUFLQyxTQUFTRixFQUFJakYsVUFJeENpRixFQUFJRyxpQkFDSnRILEtBQUswRyxtQkZnSUwzQyxJQUFLLGNBQ0xSLE1BQU8sU0U5SEc0RCxHQUNObkgsS0FBS2tFLE1BQU02QixhQUNiL0YsS0FBS2tFLE1BQU02QixZQUFZdEYsS0FBS1QsS0FBTW1ILE1Ga0lwQ3BELElBQUssY0FDTFIsTUFBTyxTRS9IRzRELEdBQ1ZBLEVBQUlHLGtCQUcwQyxJQUExQ3RILEtBQUswRyxZQUFZdkUsUUFBUWdGLEVBQUlqRixTQUMvQmxDLEtBQUswRyxZQUFZYSxLQUFLSixFQUFJakYsUUFHNUJsQyxLQUFLd0gsVUFDSHBDLGNBQWMsRUFDZGtCLGNBQWMsRUFBQTVCLEVBQUErQyxzQkFBcUJOLEtBR2pDbkgsS0FBS2tFLE1BQU0wQixhQUNiNUYsS0FBS2tFLE1BQU0wQixZQUFZbkYsS0FBS1QsS0FBTW1ILE1GbUlwQ3BELElBQUssYUFDTFIsTUFBTyxTRWhJRTRELEdBRVRBLEVBQUlHLGlCQUNKSCxFQUFJTyxpQkFDSixLQUlFUCxFQUFJUSxhQUFhQyxXQUFhNUgsS0FBS3FHLG1CQUFxQixPQUFTLE9BQ2pFLE1BQU93QixJQU9ULE1BSEk3SCxNQUFLa0UsTUFBTTRCLFlBQ2I5RixLQUFLa0UsTUFBTTRCLFdBQVdyRixLQUFLVCxLQUFNbUgsSUFFNUIsS0ZtSVBwRCxJQUFLLGNBQ0xSLE1BQU8sU0VqSUc0RCxHQUFLLEdBQUFXLEdBQUE5SCxJQUNmbUgsR0FBSUcsaUJBR0p0SCxLQUFLMEcsWUFBYzFHLEtBQUswRyxZQUFZcUIsT0FBTyxTQUFBQyxHQUFBLE1BQU1BLEtBQU9iLEVBQUlqRixRQUFVNEYsRUFBS1YsS0FBS0MsU0FBU1csS0FDckZoSSxLQUFLMEcsWUFBWWpFLE9BQVMsSUFLOUJ6QyxLQUFLd0gsVUFDSHBDLGNBQWMsRUFDZGtCLGtCQUdFdEcsS0FBS2tFLE1BQU0yQixhQUNiN0YsS0FBS2tFLE1BQU0yQixZQUFZcEYsS0FBS1QsS0FBTW1ILE9GeUlwQ3BELElBQUssU0FDTFIsTUFBTyxTRXRJRjRELEdBQUssR0FBQWMsR0FBQWpJLEtBQUFrSSxFQUMyRWxJLEtBQUtrRSxNQUFsRjhCLEVBREVrQyxFQUNGbEMsT0FBUW1DLEVBRE5ELEVBQ01DLGVBQWdCQyxFQUR0QkYsRUFDc0JFLGVBQWdCQyxFQUR0Q0gsRUFDc0NHLFNBQVVDLEVBRGhESixFQUNnREksZUFBZ0JDLEVBRGhFTCxFQUNnRUssT0FDcEVDLEdBQVcsRUFBQTlELEVBQUErQyxzQkFBcUJOLEdBQ2hDWixLQUNBQyxJQUdOVyxHQUFJRyxpQkFHSnRILEtBQUswRyxlQUNMMUcsS0FBS3FHLG9CQUFxQixFQUUxQm1DLEVBQVNDLFFBQVEsU0FBQUMsR0FDZixJQUFLSixFQUNILElBQ0VJLEVBQUtDLFFBQVU1QixPQUFPNkIsSUFBSUMsZ0JBQWdCSCxHQUMxQyxNQUFPYixLQVFULEVBQUFuRCxFQUFBb0UsY0FBYUosRUFBTUgsS0FDbkIsRUFBQTdELEVBQUFxRSxlQUFjTCxFQUFNVCxFQUFLL0QsTUFBTThFLFFBQVNmLEVBQUsvRCxNQUFNK0UsU0FFbkQxQyxFQUFjZ0IsS0FBS21CLEdBRW5CbEMsRUFBY2UsS0FBS21CLEtBSWxCTCxHQUdIN0IsRUFBY2UsS0FBZDJCLE1BQUExQyxFQUFBcEUsRUFBc0JtRSxFQUFjNEMsT0FBTyxLQUd6Q25ELEdBQ0ZBLEVBQU92RixLQUFLVCxLQUFNdUcsRUFBZUMsRUFBZVcsR0FHOUNYLEVBQWMvRCxPQUFTLEdBQUsyRixHQUM5QkEsRUFBZTNILEtBQUtULEtBQU13RyxFQUFlVyxHQUd2Q1osRUFBYzlELE9BQVMsR0FBSzBGLEdBQzlCQSxFQUFlMUgsS0FBS1QsS0FBTXVHLEVBQWVZLEdBSTNDbkgsS0FBS3NHLGFBQWUsS0FHcEJ0RyxLQUFLd0gsVUFDSHBDLGNBQWMsRUFDZGtCLGdCQUNBQyxnQkFDQUMscUJGZ0pGekMsSUFBSyxVQUNMUixNQUFPLFNFN0lENEQsR0FBSyxHQUFBaUMsR0FDdUJwSixLQUFLa0UsTUFBL0J3QixFQURHMEQsRUFDSDFELE9BREcwRCxHQUNNQyxlQUVmbEMsRUFBSU8sa0JBRUFoQyxHQUNGQSxFQUFRakYsS0FBS1QsS0FBTW1ILElBTWpCLEVBQUF6QyxFQUFBNEUsY0FDRkMsV0FBV3ZKLEtBQUt3SixLQUFLL0QsS0FBS3pGLE1BQU8sR0FFakNBLEtBQUt3SixXRnFKVHpGLElBQUssc0JBQ0xSLE1BQU8sU0VqSlc0RCxHQUNsQkEsRUFBSU8sa0JBQ0ExSCxLQUFLa0UsTUFBTXVGLFlBQWN6SixLQUFLa0UsTUFBTXVGLFdBQVcvRCxTQUNqRDFGLEtBQUtrRSxNQUFNdUYsV0FBVy9ELGFGcUp4QjNCLElBQUsscUJBQ0xSLE1BQU8sV0VsSlksR0FBQW1HLEdBQUExSixLQUVYaUcsRUFBdUJqRyxLQUFLa0UsTUFBNUIrQixrQkFFSmpHLE1BQUtxRyxvQkFDUGtELFdBQVcsV0FDVCxHQUF3QixNQUFwQkcsRUFBSzVDLFlBQXFCLENBRVY0QyxFQUFLNUMsWUFBZjZDLE1BRUdsSCxTQUNUaUgsRUFBS3JELG9CQUFxQixHQUlJLGtCQUF2QkosSUFDVEEsS0FFRCxRRjBKTGxDLElBQUssU0FDTFIsTUFBTyxTRXZKRnFHLEdBQ0w1SixLQUFLb0gsS0FBT3dDLEtGMEpaN0YsSUFBSyxVQUNMUixNQUFPLFNFeEpEcUcsR0FDTjVKLEtBQUs4RyxZQUFjOEMsS0ZpS25CN0YsSUFBSyxPQUNMUixNQUFPLFdFMUpQdkQsS0FBS3FHLG9CQUFxQixFQUMxQnJHLEtBQUs4RyxZQUFZdkQsTUFBUSxLQUN6QnZELEtBQUs4RyxZQUFZK0MsV0Y4SmpCOUYsSUFBSyxTQUNMUixNQUFPLFdFaEpBLEdBQUF1RyxHQWFIOUosS0FBS2tFLE1BWFBxRSxFQUZLdUIsRUFFTHZCLE9BQ0F3QixFQUhLRCxFQUdMQyxnQkFDQUMsRUFKS0YsRUFJTEUsZ0JBQ0E3RSxFQUxLMkUsRUFLTDNFLFNBQ0ErQixFQU5LNEMsRUFNTDVDLFNBQ0ErQyxFQVBLSCxFQU9MRyxrQkFDQVIsRUFSS0ssRUFRTEwsV0FDQXBCLEVBVEt5QixFQVNMekIsU0FDQXhILEVBVktpSixFQVVMakosS0FDQXFKLEVBWEtKLEVBV0xJLGdCQUNHQyxFQVpFbkksRUFBQThILEdBQUEsMElBZ0JMTSxFQU9FRCxFQVBGQyxZQUNBQyxFQU1FRixFQU5GRSxZQWpCS0MsRUF1QkhILEVBTEZJLGdCQWxCS0MsS0FBQUYsRUFrQk8sR0FsQlBBLEVBbUJMRyxFQUlFTixFQUpGTSxjQUNBQyxFQUdFUCxFQUhGTyxZQUNBQyxFQUVFUixFQUZGUSxNQUNHekcsRUF0QkVsQyxFQXVCSG1JLEdBdkJHLGdGQUFBUyxFQXlCZ0M1SyxLQUFLdUYsTUFBcENILEVBekJEd0YsRUF5QkN4RixhQUFja0IsRUF6QmZzRSxFQXlCZXRFLGFBQ2hCdUUsRUFBYXZFLEVBQWE3RCxPQUMxQnFJLEVBQW9CekMsR0FBWXdDLEdBQWMsRUFDOUN4RixFQUFld0YsRUFBYSxJQUFLLEVBQUFuRyxFQUFBcUcsa0JBQWlCekUsRUFBY3RHLEtBQUtrRSxNQUFNcUUsUUFDM0VqRCxFQUFldUYsRUFBYSxLQUFPeEYsSUFBaUJ5RixHQUNwREUsSUFDSFQsR0FBY0ksR0FBVU4sR0FBZ0JELEdBQWdCTSxHQUFnQkQsRUFFdkVyRixJQUFnQjRFLElBQ2xCTyxHQUFhLElBQU1QLEdBRWpCM0UsR0FBZ0IwRSxJQUNsQlEsR0FBYSxJQUFNUixHQUVqQnpFLEdBQWdCNEUsSUFDbEJLLEdBQWEsSUFBTUwsR0FFakJoRCxHQUFZK0MsSUFDZE0sR0FBYSxJQUFNTixHQUdqQmUsSUFDRkwsRUFBUS9GLEVBQUE3QyxRQUFPQSxRQUNmc0ksRUFBY3pGLEVBQUE3QyxRQUFPa0osT0FDckJiLEVBQWNPLEVBQU1NLE9BQ3BCUCxFQUFjOUYsRUFBQTdDLFFBQU9tSixTQUNyQlQsRUFBZ0I3RixFQUFBN0MsUUFBT21GLFNBR3pCLElBQUlpRSxRQUFvQlIsRUFDcEJOLElBQWVqRixJQUNqQitGLE9BQ0tSLEVBQ0FOLElBR0hELEdBQWUvRSxJQUNqQjhGLE9BQ0tBLEVBQ0FmLElBR0hNLEdBQWVwRixJQUNqQjZGLE9BQ0tBLEVBQ0FULElBR0hELEdBQWlCdkQsSUFDbkJpRSxPQUNLUixFQUNBRixHQUlQLElBQU1XLElBQ0o3QyxTQUNBckIsV0FDQW1FLEtBQU0sT0FDTlYsT0FBU1csUUFBUyxRQUNsQmpELFNBQVUzRCxFQUFBNkcsaUJBQW1CbEQsRUFDN0J1QixJQUFLNUosS0FBS29HLFFBQ1ZvRixTQUFVeEwsS0FBS2dHLE9BQ2Z5RixhQUFjLE1BR1o1SyxJQUFRQSxFQUFLNEIsU0FDZjJJLEVBQWdCdkssS0FBT0EsRUE1RmxCLElBMEdGNkssSUFDRHhILEVBVkZxQyxjQVVFckMsRUFURnVDLHNCQVNFdkMsRUFSRm9FLGVBUUVwRSxFQVBGbUYsYUFPRW5GLEVBTkZpRSxlQU1FakUsRUFMRmtFLGVBS0VsRSxFQUpGK0IsbUJBSUUvQixFQUhGOEUsUUFHRTlFLEVBRkYrRSxRQXpHS2pILEVBMkdIa0MsR0EzR0cscUpBNkdQLE9BQ0VLLEdBQUF4QyxRQUFBNEosY0FBQSxNQUFBaEksR0FDRTRHLFVBQVdBLEVBQ1hJLE1BQU9RLEdBQ0hPLEdBQ0poRyxRQUFTMUYsS0FBS3dGLGdCQUFnQnhGLEtBQUswRixTQUNuQ0ssWUFBYS9GLEtBQUt3RixnQkFBZ0J4RixLQUFLK0YsYUFDdkNILFlBQWE1RixLQUFLd0YsZ0JBQWdCeEYsS0FBSzRGLGFBQ3ZDRSxXQUFZOUYsS0FBS3dGLGdCQUFnQnhGLEtBQUs4RixZQUN0Q0QsWUFBYTdGLEtBQUt3RixnQkFBZ0J4RixLQUFLNkYsYUFDdkNHLE9BQVFoRyxLQUFLd0YsZ0JBQWdCeEYsS0FBS2dHLFFBQ2xDNEQsSUFBSzVKLEtBQUttRyxPQUNWeUYsZ0JBQWUxRSxJQUVkbEgsS0FBS2tGLGVBQWVDLEVBQVVDLEVBQWNDLEVBQWNDLEdBQzNEZixFQUFBeEMsUUFBQTRKLGNBQUEsUUFBQWhJLEtBQ004RixFQUNBMkIsU0Z1SUx2RyxHRXRoQmNOLEVBQUF4QyxRQUFNOEosVUZ5aEI3QmxNLEdBQVFvQyxRRW5JTzhDLEVBRWZBLEVBQVNpSCxXQVFQdkQsT0FBUTlELEVBQUExQyxRQUFVZ0ssV0FBV3RILEVBQUExQyxRQUFVaUssT0FBUXZILEVBQUExQyxRQUFVa0ssUUFBUXhILEVBQUExQyxRQUFVaUssVUFLM0U3RyxTQUFVVixFQUFBMUMsUUFBVWdLLFdBQVd0SCxFQUFBMUMsUUFBVXFGLEtBQU0zQyxFQUFBMUMsUUFBVW1LLE9BS3pEN0MsYUFBYzVFLEVBQUExQyxRQUFVb0ssS0FLeEJqRixTQUFVekMsRUFBQTFDLFFBQVVvSyxLQUtwQjdELGVBQWdCN0QsRUFBQTFDLFFBQVVvSyxLQUsxQjFGLHNCQUF1QmhDLEVBQUExQyxRQUFVb0ssS0FLakMxQyxXQUFZaEYsRUFBQTFDLFFBQVVSLE9BS3RCOEcsU0FBVTVELEVBQUExQyxRQUFVb0ssS0FLcEJ0TCxLQUFNNEQsRUFBQTFDLFFBQVVpSyxPQUtoQmhELFFBQVN2RSxFQUFBMUMsUUFBVXFLLE9BS25CbkQsUUFBU3hFLEVBQUExQyxRQUFVcUssT0FLbkI3QixVQUFXOUYsRUFBQTFDLFFBQVVpSyxPQUtyQmhDLGdCQUFpQnZGLEVBQUExQyxRQUFVaUssT0FLM0JqQyxnQkFBaUJ0RixFQUFBMUMsUUFBVWlLLE9BSzNCOUIsZ0JBQWlCekYsRUFBQTFDLFFBQVVpSyxPQUszQi9CLGtCQUFtQnhGLEVBQUExQyxRQUFVaUssT0FLN0JyQixNQUFPbEcsRUFBQTFDLFFBQVVSLE9BS2pCOEksWUFBYTVGLEVBQUExQyxRQUFVUixPQUt2QjZJLFlBQWEzRixFQUFBMUMsUUFBVVIsT0FLdkJtSixZQUFhakcsRUFBQTFDLFFBQVVSLE9BS3ZCa0osY0FBZWhHLEVBQUExQyxRQUFVUixPQU16Qm1FLFFBQVNqQixFQUFBMUMsUUFBVW1LLEtBS25CbEcsT0FBUXZCLEVBQUExQyxRQUFVbUssS0FLbEIvRCxlQUFnQjFELEVBQUExQyxRQUFVbUssS0FLMUI5RCxlQUFnQjNELEVBQUExQyxRQUFVbUssS0FLMUJuRyxZQUFhdEIsRUFBQTFDLFFBQVVtSyxLQUt2QnRHLFlBQWFuQixFQUFBMUMsUUFBVW1LLEtBS3ZCcEcsV0FBWXJCLEVBQUExQyxRQUFVbUssS0FLdEJyRyxZQUFhcEIsRUFBQTFDLFFBQVVtSyxLQUt2QmpHLG1CQUFvQnhCLEVBQUExQyxRQUFVbUssTUFHaENySCxFQUFTd0gsY0FDUDVGLHVCQUF1QixFQUN2QlMsVUFBVSxFQUNWb0IsZ0JBQWdCLEVBQ2hCZSxjQUFjLEVBQ2RoQixVQUFVLEVBQ1ZXLFFBQVNzRCxJQUNUckQsUUFBUyxHRnNJWHJKLEVBQU9ELFFBQVVBLEVBQWlCLFNBSTVCLFNBQVVDLEVBQVFELEdHcnRCeEJDLEVBQUFELFFBQUFNLEdIMnRCTSxTQUFVTCxFQUFRRCxHSTN0QnhCQyxFQUFBRCxRQUFBTyxHSml1Qk0sU0FBVU4sRUFBUUQsRUFBU1MsR0FFakMsWUs1dEJPLFNBQVNxSCxHQUFxQjhFLEdBQ25DLEdBQUlDLEtBQ0osSUFBSUQsRUFBTTVFLGFBQWMsQ0FDdEIsR0FBTThFLEdBQUtGLEVBQU01RSxZQUNiOEUsR0FBRzlDLE9BQVM4QyxFQUFHOUMsTUFBTWxILE9BQ3ZCK0osRUFBd0JDLEVBQUc5QyxNQUNsQjhDLEVBQUdDLE9BQVNELEVBQUdDLE1BQU1qSyxTQUc5QitKLEVBQXdCQyxFQUFHQyxXQUVwQkgsR0FBTXJLLFFBQVVxSyxFQUFNckssT0FBT3lILFFBQ3RDNkMsRUFBd0JELEVBQU1ySyxPQUFPeUgsTUFHdkMsT0FBT3JILE9BQU1iLFVBQVVrTCxNQUFNbE0sS0FBSytMLEdBSzdCLFFBQVMxRCxHQUFhSixFQUFNSCxHQUNqQyxNQUFxQiwyQkFBZEcsRUFBSzJDLE9BQXFDLEVBQUF1QixFQUFBN0ssU0FBUTJHLEVBQU1ILEdBRzFELFFBQVNRLEdBQWNMLEVBQU1NLEVBQVNDLEdBQzNDLE1BQU9QLEdBQUttRSxNQUFRN0QsR0FBV04sRUFBS21FLE1BQVE1RCxFQUd2QyxRQUFTOEIsR0FBaUJwQixFQUFPcEIsR0FDdEMsTUFBT29CLEdBQU1tRCxNQUFNLFNBQUFwRSxHQUFBLE1BQVFJLEdBQWFKLEVBQU1ILEtBSXpDLFFBQVMxQixHQUFtQk0sR0FDakNBLEVBQUlHLGlCQUdOLFFBQVN5RixHQUFLQyxHQUNaLE9BQXNDLElBQS9CQSxFQUFVN0ssUUFBUSxVQUFxRCxJQUFuQzZLLEVBQVU3SyxRQUFRLFlBRy9ELFFBQVM4SyxHQUFPRCxHQUNkLE9BQXVDLElBQWhDQSxFQUFVN0ssUUFBUSxTQUdwQixRQUFTbUgsS0FBbUQsR0FBeEMwRCxHQUF3Q25KLFVBQUFwQixPQUFBLE9BQUErSCxLQUFBM0csVUFBQSxHQUFBQSxVQUFBLEdBQTVCa0QsT0FBT21HLFVBQVVGLFNBQ3RELE9BQU9ELEdBQUtDLElBQWNDLEVBQU9ELEdMaXJCbkNoTSxPQUFPQyxlQUFldEIsRUFBUyxjQUM3QjRELE9BQU8sSUFFVDVELEVBQVE0TCxvQkFBa0JmLEdBQzFCN0ssRUtudUJnQjhILHVCTG91QmhCOUgsRUtodEJnQm1KLGVMaXRCaEJuSixFSzdzQmdCb0osZ0JMOHNCaEJwSixFSzFzQmdCb0wsbUJMMnNCaEJwTCxFS3RzQmdCa0gscUJMdXNCaEJsSCxFSzNyQmdCMkosWUFwRGhCLElBQUE2RCxHQUFBL00sRUFBQSxHTG12Qkl3TSxFQUVKLFNBQWdDOUssR0FBTyxNQUFPQSxJQUFPQSxFQUFJUixXQUFhUSxHQUFRQyxRQUFTRCxJQUY3Q3FMLEVLanZCN0I1QixtQkFDUyxtQkFBYjVFLFlBQTRCQSxXQUFZQSxTQUFTZ0YsZUFDcEQsWUFBY2hGLFVBQVNnRixjQUFjLFVMNHlCckMsU0FBVS9MLEVBQVFELEdNaHpCeEJDLEVBQUFELFFBQUEsU0FBQXlOLEdBQTJCLFFBQUEvTCxHQUFBZ00sR0FBYyxHQUFBQyxFQUFBRCxHQUFBLE1BQUFDLEdBQUFELEdBQUExTixPQUE0QixJQUFBb0IsR0FBQXVNLEVBQUFELElBQVkxTixXQUFVNE4sR0FBQUYsRUFBQUcsUUFBQSxFQUFpQixPQUFBSixHQUFBQyxHQUFBNU0sS0FBQU0sRUFBQXBCLFFBQUFvQixJQUFBcEIsUUFBQTBCLEdBQUFOLEVBQUF5TSxRQUFBLEVBQUF6TSxFQUFBcEIsUUFBZ0UsR0FBQTJOLEtBQVMsT0FBQWpNLEdBQUFYLEVBQUEwTSxFQUFBL0wsRUFBQVYsRUFBQTJNLEVBQUFqTSxFQUFBTSxFQUFBLEdBQUFOLEVBQUEsS0FBK0IsU0FBQStMLEVBQUEvTCxFQUFBaU0sR0FBa0IsWUFBYWpNLEdBQUFDLFlBQUEsRUFBQWdNLEVBQUEsR0FBQUEsRUFBQSxHQUFBak0sRUFBQSxpQkFBQStMLEVBQUEvTCxHQUFxRCxHQUFBK0wsR0FBQS9MLEVBQUEsQ0FBUyxHQUFBaU0sR0FBQSxXQUFpQixHQUFBQSxHQUFBaEwsTUFBQUMsUUFBQWxCLE9BQUFvTSxNQUFBLEtBQUFKLEVBQUFELEVBQUF2TSxNQUFBLEdBQUFFLEVBQUFxTSxFQUFBL0IsTUFBQSxHQUFBOUssRUFBQVEsRUFBQTJNLFFBQUEsV0FBd0YsUUFBT0MsRUFBQUwsRUFBQU0sS0FBQSxTQUFBUixHQUFxQixHQUFBL0wsR0FBQStMLEVBQUFTLE1BQWUsYUFBQXhNLEVBQUF5TSxPQUFBLEdBQUFULEVBQUFVLGNBQUFDLFNBQUEzTSxFQUFBME0sZUFBQSxRQUFBRSxLQUFBNU0sR0FBQWQsSUFBQWMsRUFBQXFNLFFBQUEsWUFBQTNNLElBQUFNLE9BQXdILG9CQUFBaU0sR0FBQSxNQUFBQSxHQUFBSyxFQUFpQyxVQUFTUCxFQUFBek4sUUFBQTBCLEVBQUEsU0FBd0IsU0FBQStMLEVBQUEvTCxHQUFlLEdBQUFpTSxHQUFBRixFQUFBek4sU0FBaUJ1TyxRQUFBLFFBQWlCLGlCQUFBQyxXQUFBYixJQUE4QixTQUFBRixFQUFBL0wsR0FBZSxHQUFBaU0sR0FBQUYsRUFBQXpOLFFBQUEsbUJBQUFvSCxnQkFBQXFILFdBQUFySCxPQUFBLG1CQUFBL0QsWUFBQW9MLFdBQUFwTCxLQUFBcUwsU0FBQSxnQkFBOEksaUJBQUFDLFdBQUFoQixJQUE4QixTQUFBRixFQUFBL0wsRUFBQWlNLEdBQWlCLEdBQUFELEdBQUFDLEVBQUEsR0FBQXZNLEVBQUF1TSxFQUFBLEdBQUEvTSxFQUFBK00sRUFBQSxHQUFBaUIsRUFBQWpCLEVBQUEsSUFBQTNNLEVBQUEsWUFBQTZOLEVBQUEsU0FBQXBCLEVBQUEvTCxHQUErRCxrQkFBa0IsTUFBQStMLEdBQUFsRSxNQUFBN0gsRUFBQXdDLGFBQTZCakMsRUFBQSxTQUFBd0wsRUFBQS9MLEVBQUFpTSxHQUFtQixHQUFBbUIsR0FBQTlNLEVBQUFuQixFQUFBa08sRUFBQTlOLEVBQUF3TSxFQUFBeEwsRUFBQStNLEVBQUFDLEVBQUF4QixFQUFBeEwsRUFBQWlOLEVBQUFsQixFQUFBL00sRUFBQXlNLEVBQUFELEVBQUF4TCxFQUFBa04sRUFBQXpCLEVBQUFoTSxLQUFBZ00sRUFBQWhNLFFBQXNEZ00sRUFBQWhNLFFBQVdWLEdBQUFvTyxFQUFBbk8sRUFBQUcsSUFBQU0sS0FBQU4sRUFBQU0sTUFBMkJULEtBQUEwTSxFQUFBak0sRUFBUyxLQUFBb04sSUFBQW5CLEdBQUEzTCxJQUFBeUwsRUFBQXhMLEVBQUFvTixJQUFBckIsR0FBQWMsSUFBQWQsR0FBQW5OLEdBQUFtQixFQUFBZ00sRUFBQUwsR0FBQW1CLEdBQUFDLEVBQUF0QixFQUFBeEwsRUFBQXFOLEdBQUF0TixFQUFBNk0sRUFBQWhPLEVBQUE2TSxHQUFBdUIsR0FBQSxrQkFBQXBPLEdBQUFnTyxFQUFBSCxTQUFBNU4sS0FBQUQsS0FBQW1OLElBQUFoTSxHQUFBNE0sRUFBQVosRUFBQWMsRUFBQWpPLEdBQUF1TyxFQUFBTixJQUFBak8sR0FBQUQsRUFBQXdPLEVBQUFOLEVBQUFDLEdBQUFFLEtBQUFHLEVBQUFwTyxLQUFBb08sRUFBQXBPLFFBQWtLOE4sR0FBQWpPLEdBQVU2TSxHQUFBNkIsS0FBQW5PLEVBQUFhLEVBQUFvTixFQUFBLEVBQUFwTixFQUFBK00sRUFBQSxFQUFBL00sRUFBQWtOLEVBQUEsRUFBQWxOLEVBQUFpTixFQUFBLEVBQUFqTixFQUFBcU4sRUFBQSxHQUFBck4sRUFBQXVOLEVBQUEsR0FBQS9CLEVBQUF6TixRQUFBaUMsR0FBMkQsU0FBQXdMLEVBQUEvTCxFQUFBaU0sR0FBaUIsR0FBQUQsR0FBQUMsRUFBQSxHQUFBdk0sRUFBQXVNLEVBQUEsR0FBbUJGLEdBQUF6TixRQUFBMk4sRUFBQSxhQUFBRixFQUFBL0wsRUFBQWlNLEdBQWdDLE1BQUFELEdBQUErQixRQUFBaEMsRUFBQS9MLEVBQUFOLEVBQUEsRUFBQXVNLEtBQTZCLFNBQUFGLEVBQUEvTCxFQUFBaU0sR0FBaUIsTUFBQUYsR0FBQS9MLEdBQUFpTSxFQUFBRixJQUFpQixTQUFBQSxFQUFBL0wsR0FBZSxHQUFBaU0sR0FBQXRNLE1BQWFvTSxHQUFBek4sU0FBVzBELE9BQUFpSyxFQUFBakssT0FBQWdNLFNBQUEvQixFQUFBckksZUFBQXFLLFVBQW1EQyxxQkFBQUMsUUFBQWxDLEVBQUFtQyx5QkFBQUwsUUFBQTlCLEVBQUFyTSxlQUFBeU8sU0FBQXBDLEVBQUFySixpQkFBQTBMLFFBQUFyQyxFQUFBckwsS0FBQTJOLFNBQUF0QyxFQUFBdUMsb0JBQUFDLFdBQUF4QyxFQUFBeUMsc0JBQUFDLFFBQUF2SCxVQUFnTixTQUFBMkUsRUFBQS9MLEdBQWUsR0FBQWlNLEdBQUEsRUFBQUQsRUFBQWUsS0FBQTZCLFFBQXdCN0MsR0FBQXpOLFFBQUEsU0FBQXlOLEdBQXNCLGdCQUFBOEMsV0FBQSxLQUFBOUMsRUFBQSxHQUFBQSxFQUFBLFFBQUFFLEVBQUFELEdBQUE4QyxTQUFBLE9BQW1FLFNBQUEvQyxFQUFBL0wsRUFBQWlNLEdBQWlCLEdBQUFELEdBQUFDLEVBQUEsV0FBQXZNLEVBQUF1TSxFQUFBLEdBQUE4QyxNQUFpQ2hELEdBQUF6TixRQUFBLFNBQUF5TixHQUFzQixNQUFBQyxHQUFBRCxLQUFBQyxFQUFBRCxHQUFBck0sS0FBQXFNLEtBQUFyTSxHQUFBdU0sRUFBQSxjQUFBRixNQUFxRCxTQUFBQSxFQUFBL0wsRUFBQWlNLEdBQWlCQSxFQUFBLElBQUFGLEVBQUF6TixRQUFBMk4sRUFBQSxHQUFBaEwsTUFBQXNMLE1BQWdDLFNBQUFSLEVBQUEvTCxFQUFBaU0sR0FBaUJBLEVBQUEsSUFBQUYsRUFBQXpOLFFBQUEyTixFQUFBLEdBQUErQyxPQUFBckMsVUFBcUMsU0FBQVosRUFBQS9MLEdBQWUrTCxFQUFBek4sUUFBQSxTQUFBeU4sR0FBc0IscUJBQUFBLEdBQUEsS0FBQXRLLFdBQUFzSyxFQUFBLHNCQUFpRSxPQUFBQSxLQUFVLFNBQUFBLEVBQUEvTCxHQUFlLEdBQUFpTSxNQUFRNkMsUUFBVS9DLEdBQUF6TixRQUFBLFNBQUF5TixHQUFzQixNQUFBRSxHQUFBN00sS0FBQTJNLEdBQUFULE1BQUEsUUFBOEIsU0FBQVMsRUFBQS9MLEVBQUFpTSxHQUFpQixHQUFBRCxHQUFBQyxFQUFBLEdBQVlGLEdBQUF6TixRQUFBLFNBQUF5TixFQUFBL0wsRUFBQWlNLEdBQTBCLEdBQUFELEVBQUFELE9BQUEsS0FBQS9MLEVBQUEsTUFBQStMLEVBQTRCLFFBQUFFLEdBQVUsdUJBQUFBLEdBQTBCLE1BQUFGLEdBQUEzTSxLQUFBWSxFQUFBaU0sR0FBb0Isd0JBQUFBLEVBQUFELEdBQTRCLE1BQUFELEdBQUEzTSxLQUFBWSxFQUFBaU0sRUFBQUQsR0FBc0Isd0JBQUFDLEVBQUFELEVBQUF0TSxHQUE4QixNQUFBcU0sR0FBQTNNLEtBQUFZLEVBQUFpTSxFQUFBRCxFQUFBdE0sSUFBd0Isa0JBQWtCLE1BQUFxTSxHQUFBbEUsTUFBQTdILEVBQUF3QyxjQUE4QixTQUFBdUosRUFBQS9MLEdBQWUrTCxFQUFBek4sUUFBQSxTQUFBeU4sR0FBc0IsV0FBQUEsRUFBQSxLQUFBdEssV0FBQSx5QkFBQXNLLEVBQXlELE9BQUFBLEtBQVUsU0FBQUEsRUFBQS9MLEVBQUFpTSxHQUFpQkYsRUFBQXpOLFFBQUEsU0FBQXlOLEdBQXNCLEdBQUEvTCxHQUFBLEdBQVUsS0FBSSxNQUFBK0wsR0FBQS9MLEdBQVksTUFBQWdNLEdBQVMsSUFBSSxNQUFBaE0sR0FBQWlNLEVBQUEsdUJBQUFGLEdBQUEvTCxHQUF3QyxNQUFBTixLQUFXLFdBQVUsU0FBQXFNLEVBQUEvTCxHQUFlK0wsRUFBQXpOLFFBQUEsU0FBQXlOLEdBQXNCLElBQUksUUFBQUEsSUFBWSxNQUFBL0wsR0FBUyxZQUFXLFNBQUErTCxFQUFBL0wsR0FBZStMLEVBQUF6TixRQUFBLFNBQUF5TixHQUFzQixzQkFBQUEsR0FBQSxPQUFBQSxFQUFBLGtCQUFBQSxLQUF3RCxTQUFBQSxFQUFBL0wsRUFBQWlNLEdBQWlCLEdBQUFELEdBQUFDLEVBQUEsSUFBQXZNLEVBQUF1TSxFQUFBLElBQUEvTSxFQUFBK00sRUFBQSxXQUFvQ0YsR0FBQXpOLFFBQUEsU0FBQXlOLEdBQXNCLEdBQUEvTCxFQUFNLE9BQUFnTSxHQUFBRCxTQUFBLE1BQUEvTCxFQUFBK0wsRUFBQTdNLE1BQUFjLEVBQUEsVUFBQU4sRUFBQXFNLE1BQXFELFNBQUFBLEVBQUEvTCxHQUFlK0wsRUFBQXpOLFFBQUEsU0FBQXlOLEVBQUEvTCxHQUF3QixPQUFPRixhQUFBLEVBQUFpTSxHQUFBbE0sZUFBQSxFQUFBa00sR0FBQTVKLFdBQUEsRUFBQTRKLEdBQUE3SixNQUFBbEMsS0FBZ0UsU0FBQStMLEVBQUEvTCxFQUFBaU0sR0FBaUIsR0FBQUQsR0FBQUMsRUFBQSxHQUFBdk0sRUFBQXVNLEVBQUEsR0FBQS9NLEVBQUErTSxFQUFBLFVBQUFpQixFQUFBLFdBQUE1TixFQUFBME4sU0FBQUUsR0FBQUMsR0FBQSxHQUFBN04sR0FBQThNLE1BQUFjLEVBQTZFakIsR0FBQSxHQUFBZ0QsY0FBQSxTQUFBbEQsR0FBK0IsTUFBQXpNLEdBQUFGLEtBQUEyTSxLQUFpQkEsRUFBQXpOLFFBQUEsU0FBQXlOLEVBQUEvTCxFQUFBaU0sRUFBQWlCLEdBQThCLGtCQUFBakIsS0FBQXZNLEVBQUF1TSxFQUFBL00sRUFBQTZNLEVBQUEvTCxHQUFBLEdBQUErTCxFQUFBL0wsR0FBQW1OLEVBQUErQixLQUFBRixPQUFBaFAsS0FBQSxRQUFBaU0sT0FBQXpNLEtBQUFRLElBQUErTCxJQUFBQyxFQUFBRCxFQUFBL0wsR0FBQWlNLEdBQUFpQixTQUFBbkIsR0FBQS9MLEdBQUFOLEVBQUFxTSxFQUFBL0wsRUFBQWlNLE1BQTRIZSxTQUFBNU0sVUFBQThNLEVBQUEsV0FBa0Msd0JBQUF2TyxZQUFBTyxJQUFBSSxFQUFBRixLQUFBVCxTQUF1RCxTQUFBb04sRUFBQS9MLEVBQUFpTSxHQUFpQixHQUFBRCxHQUFBQyxFQUFBLEdBQUF2TSxFQUFBLHFCQUFBUixFQUFBOE0sRUFBQXRNLEtBQUFzTSxFQUFBdE0sTUFBb0RxTSxHQUFBek4sUUFBQSxTQUFBeU4sR0FBc0IsTUFBQTdNLEdBQUE2TSxLQUFBN00sRUFBQTZNLFNBQXdCLFNBQUFBLEVBQUEvTCxFQUFBaU0sR0FBaUIsR0FBQUQsR0FBQUMsRUFBQSxJQUFBdk0sRUFBQXVNLEVBQUEsR0FBb0JGLEdBQUF6TixRQUFBLFNBQUF5TixFQUFBL0wsRUFBQWlNLEdBQTBCLEdBQUFELEVBQUFoTSxHQUFBLEtBQUF5QixXQUFBLFVBQUF3SyxFQUFBLHlCQUE4RCxPQUFBK0MsUUFBQXRQLEVBQUFxTSxNQUFxQixTQUFBQSxFQUFBL0wsRUFBQWlNLEdBQWlCRixFQUFBek4sU0FBQTJOLEVBQUEsZUFBNEIsVUFBQXRNLE9BQUFDLGtCQUFrQyxLQUFNRyxJQUFBLFdBQWUsWUFBVXFOLEtBQU0sU0FBQXJCLEVBQUEvTCxHQUFlLEdBQUFpTSxHQUFBYyxLQUFBb0MsS0FBQW5ELEVBQUFlLEtBQUFxQyxLQUE2QnJELEdBQUF6TixRQUFBLFNBQUF5TixHQUFzQixNQUFBc0QsT0FBQXRELE1BQUEsR0FBQUEsRUFBQSxFQUFBQyxFQUFBQyxHQUFBRixLQUFtQyxTQUFBQSxFQUFBL0wsRUFBQWlNLEdBQWlCLEdBQUFELEdBQUFDLEVBQUEsSUFBQXZNLEVBQUFxTixLQUFBdUMsR0FBdUJ2RCxHQUFBek4sUUFBQSxTQUFBeU4sR0FBc0IsTUFBQUEsR0FBQSxFQUFBck0sRUFBQXNNLEVBQUFELEdBQUEsc0JBQXVDLFNBQUFBLEVBQUEvTCxFQUFBaU0sR0FBaUIsWUFBYSxJQUFBRCxHQUFBQyxFQUFBLEdBQUF2TSxFQUFBdU0sRUFBQSxJQUFBL00sRUFBQStNLEVBQUEsSUFBQWlCLEVBQUEsV0FBQTVOLEVBQUEsR0FBQTROLEVBQWdEbEIsS0FBQXdCLEVBQUF4QixFQUFBMkIsRUFBQTFCLEVBQUEsSUFBQWlCLEdBQUEsVUFBNkJQLFNBQUEsU0FBQVosR0FBcUIsR0FBQS9MLEdBQUFkLEVBQUFQLEtBQUFvTixFQUFBbUIsR0FBQWpCLEVBQUF6SixVQUFBd0osRUFBQUMsRUFBQTdLLE9BQUEsRUFBQTZLLEVBQUEsVUFBQWtCLEVBQUF6TixFQUFBTSxFQUFBb0IsUUFBQWIsTUFBQSxLQUFBeUwsRUFBQW1CLEVBQUFKLEtBQUF1QyxJQUFBNVAsRUFBQXNNLEdBQUFtQixHQUFBQyxFQUFBNEIsT0FBQWpELEVBQWlILE9BQUF6TSxLQUFBRixLQUFBWSxFQUFBb04sRUFBQTdNLEdBQUFQLEVBQUFzTCxNQUFBL0ssRUFBQTZNLEVBQUFoTSxPQUFBYixLQUFBNk0sTUFBb0QsU0FBQXJCLEVBQUEvTCxFQUFBaU0sR0FBaUIsR0FBQUQsR0FBQUMsRUFBQSxHQUFBdk0sRUFBQXVNLEVBQUEsR0FBQS9NLEVBQUErTSxFQUFBLEdBQUFoTCxhQUFBaU0sS0FBMEM1TixFQUFBLFNBQUF5TSxFQUFBL0wsR0FBaUJnTSxFQUFBMkMsS0FBQXZQLEtBQUEyTSxFQUFBSyxNQUFBLGNBQUFMLE9BQXFDLElBQUEvTCxHQUFBK0wsSUFBQTdNLEdBQUFnTyxFQUFBbkIsR0FBQTdNLEVBQUE2TSxZQUFBbUIsRUFBQW5CLEdBQUFFLEVBQUEsSUFBQWUsU0FBQTVOLFFBQUEyTSxHQUFBL0wsTUFBMkVWLEdBQUEsMkNBQUFBLEVBQUEsbUVBQUFBLEVBQUEsNkZBQUFJLElBQUErTixFQUFBLFFBQUFQLE9Oc3pCNW9KLFNBQVUzTyxFQUFRRCxFQUFTUyxHQUVqQyxZQUdBWSxRQUFPQyxlQUFldEIsRUFBUyxjQUM3QjRELE9BQU8sSUFFVDVELEVBQVFvQyxTTzd6Qk5tSixVQUNFMEYsWUFBYSxRQUNiQyxZQUFhLE9BQ2JDLGdCQUFpQixRQUVuQjVKLFVBQ0U2SixRQUFTLElBRVg5RixRQUNFMkYsWUFBYSxRQUNiQyxZQUFhLE9BQ2JDLGdCQUFpQixRQUVuQi9PLFNBQ0VpUCxNQUFPLElBQ1BDLE9BQVEsSUFDUkMsWUFBYSxFQUNiTCxZQUFhLE9BQ2JELFlBQWEsU0FDYk8sYUFBYyxJUGkwQmxCdlIsRUFBT0QsUUFBVUEsRUFBaUIiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIiwgXCJwcm9wLXR5cGVzXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkRyb3B6b25lXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJEcm9wem9uZVwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUHJvcFR5cGVzXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXykge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIiwgXCJwcm9wLXR5cGVzXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkRyb3B6b25lXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJEcm9wem9uZVwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUHJvcFR5cGVzXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXykge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9yZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbnZhciBfdXRpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG52YXIgX3N0eWxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbnZhciBfc3R5bGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0eWxlcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0gLyogZXNsaW50IHByZWZlci10ZW1wbGF0ZTogMCAqL1xuXG52YXIgRHJvcHpvbmUgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRHJvcHpvbmUsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIERyb3B6b25lKHByb3BzLCBjb250ZXh0KSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERyb3B6b25lKTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChEcm9wem9uZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKERyb3B6b25lKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xuXG4gICAgX3RoaXMucmVuZGVyQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGRyZW4sIGlzRHJhZ0FjdGl2ZSwgaXNEcmFnQWNjZXB0LCBpc0RyYWdSZWplY3QpIHtcbiAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuKF9leHRlbmRzKHt9LCBfdGhpcy5zdGF0ZSwge1xuICAgICAgICAgIGlzRHJhZ0FjdGl2ZTogaXNEcmFnQWN0aXZlLFxuICAgICAgICAgIGlzRHJhZ0FjY2VwdDogaXNEcmFnQWNjZXB0LFxuICAgICAgICAgIGlzRHJhZ1JlamVjdDogaXNEcmFnUmVqZWN0XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9O1xuXG4gICAgX3RoaXMuY29tcG9zZUhhbmRsZXJzID0gX3RoaXMuY29tcG9zZUhhbmRsZXJzLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2xpY2sgPSBfdGhpcy5vbkNsaWNrLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uRG9jdW1lbnREcm9wID0gX3RoaXMub25Eb2N1bWVudERyb3AuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25EcmFnRW50ZXIgPSBfdGhpcy5vbkRyYWdFbnRlci5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkRyYWdMZWF2ZSA9IF90aGlzLm9uRHJhZ0xlYXZlLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uRHJhZ092ZXIgPSBfdGhpcy5vbkRyYWdPdmVyLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uRHJhZ1N0YXJ0ID0gX3RoaXMub25EcmFnU3RhcnQuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25Ecm9wID0gX3RoaXMub25Ecm9wLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uRmlsZURpYWxvZ0NhbmNlbCA9IF90aGlzLm9uRmlsZURpYWxvZ0NhbmNlbC5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbklucHV0RWxlbWVudENsaWNrID0gX3RoaXMub25JbnB1dEVsZW1lbnRDbGljay5iaW5kKF90aGlzKTtcblxuICAgIF90aGlzLnNldFJlZiA9IF90aGlzLnNldFJlZi5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5zZXRSZWZzID0gX3RoaXMuc2V0UmVmcy5iaW5kKF90aGlzKTtcblxuICAgIF90aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBkcmFnZ2VkRmlsZXM6IFtdLFxuICAgICAgYWNjZXB0ZWRGaWxlczogW10sXG4gICAgICByZWplY3RlZEZpbGVzOiBbXVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKERyb3B6b25lLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgcHJldmVudERyb3BPbkRvY3VtZW50ID0gdGhpcy5wcm9wcy5wcmV2ZW50RHJvcE9uRG9jdW1lbnQ7XG5cbiAgICAgIHRoaXMuZHJhZ1RhcmdldHMgPSBbXTtcblxuICAgICAgaWYgKHByZXZlbnREcm9wT25Eb2N1bWVudCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIF91dGlscy5vbkRvY3VtZW50RHJhZ092ZXIsIGZhbHNlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMub25Eb2N1bWVudERyb3AsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsZUlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uSW5wdXRFbGVtZW50Q2xpY2ssIGZhbHNlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25GaWxlRGlhbG9nQ2FuY2VsLCBmYWxzZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHZhciBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgPSB0aGlzLnByb3BzLnByZXZlbnREcm9wT25Eb2N1bWVudDtcblxuICAgICAgaWYgKHByZXZlbnREcm9wT25Eb2N1bWVudCkge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIF91dGlscy5vbkRvY3VtZW50RHJhZ092ZXIpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5vbkRvY3VtZW50RHJvcCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maWxlSW5wdXRFbCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZmlsZUlucHV0RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uSW5wdXRFbGVtZW50Q2xpY2ssIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25GaWxlRGlhbG9nQ2FuY2VsLCBmYWxzZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9zZUhhbmRsZXJzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9zZUhhbmRsZXJzKGhhbmRsZXIpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFuZGxlcjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkRvY3VtZW50RHJvcCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRG9jdW1lbnREcm9wKGV2dCkge1xuICAgICAgaWYgKHRoaXMubm9kZSAmJiB0aGlzLm5vZGUuY29udGFpbnMoZXZ0LnRhcmdldCkpIHtcbiAgICAgICAgLy8gaWYgd2UgaW50ZXJjZXB0ZWQgYW4gZXZlbnQgZm9yIG91ciBpbnN0YW5jZSwgbGV0IGl0IHByb3BhZ2F0ZSBkb3duIHRvIHRoZSBpbnN0YW5jZSdzIG9uRHJvcCBoYW5kbGVyXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5kcmFnVGFyZ2V0cyA9IFtdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRHJhZ1N0YXJ0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25EcmFnU3RhcnQoZXZ0KSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdTdGFydCkge1xuICAgICAgICB0aGlzLnByb3BzLm9uRHJhZ1N0YXJ0LmNhbGwodGhpcywgZXZ0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkRyYWdFbnRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRHJhZ0VudGVyKGV2dCkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIC8vIENvdW50IHRoZSBkcm9wem9uZSBhbmQgYW55IGNoaWxkcmVuIHRoYXQgYXJlIGVudGVyZWQuXG4gICAgICBpZiAodGhpcy5kcmFnVGFyZ2V0cy5pbmRleE9mKGV2dC50YXJnZXQpID09PSAtMSkge1xuICAgICAgICB0aGlzLmRyYWdUYXJnZXRzLnB1c2goZXZ0LnRhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0RyYWdBY3RpdmU6IHRydWUsIC8vIERvIG5vdCByZWx5IG9uIGZpbGVzIGZvciB0aGUgZHJhZyBzdGF0ZS4gSXQgZG9lc24ndCB3b3JrIGluIFNhZmFyaS5cbiAgICAgICAgZHJhZ2dlZEZpbGVzOiAoMCwgX3V0aWxzLmdldERhdGFUcmFuc2Zlckl0ZW1zKShldnQpXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25EcmFnRW50ZXIpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkRyYWdFbnRlci5jYWxsKHRoaXMsIGV2dCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25EcmFnT3ZlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uRHJhZ092ZXIoZXZ0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhlIGZpbGUgZGlhbG9nIG9uIENocm9tZSBhbGxvd3MgdXNlcnMgdG8gZHJhZyBmaWxlcyBmcm9tIHRoZSBkaWFsb2cgb250b1xuICAgICAgICAvLyB0aGUgZHJvcHpvbmUsIGNhdXNpbmcgdGhlIGJyb3dzZXIgdGhlIGNyYXNoIHdoZW4gdGhlIGZpbGUgZGlhbG9nIGlzIGNsb3NlZC5cbiAgICAgICAgLy8gQSBkcm9wIGVmZmVjdCBvZiAnbm9uZScgcHJldmVudHMgdGhlIGZpbGUgZnJvbSBiZWluZyBkcm9wcGVkXG4gICAgICAgIGV2dC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9IHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID8gJ25vbmUnIDogJ2NvcHknOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBvZiBlcnJvclxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdPdmVyKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EcmFnT3Zlci5jYWxsKHRoaXMsIGV2dCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25EcmFnTGVhdmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkRyYWdMZWF2ZShldnQpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgLy8gT25seSBkZWFjdGl2YXRlIG9uY2UgdGhlIGRyb3B6b25lIGFuZCBhbGwgY2hpbGRyZW4gaGF2ZSBiZWVuIGxlZnQuXG4gICAgICB0aGlzLmRyYWdUYXJnZXRzID0gdGhpcy5kcmFnVGFyZ2V0cy5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHJldHVybiBlbCAhPT0gZXZ0LnRhcmdldCAmJiBfdGhpczIubm9kZS5jb250YWlucyhlbCk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmRyYWdUYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciBkcmFnZ2luZyBmaWxlcyBzdGF0ZVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gICAgICAgIGRyYWdnZWRGaWxlczogW11cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdMZWF2ZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9uRHJhZ0xlYXZlLmNhbGwodGhpcywgZXZ0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkRyb3AnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkRyb3AoZXZ0KSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgb25Ecm9wID0gX3Byb3BzLm9uRHJvcCxcbiAgICAgICAgICBvbkRyb3BBY2NlcHRlZCA9IF9wcm9wcy5vbkRyb3BBY2NlcHRlZCxcbiAgICAgICAgICBvbkRyb3BSZWplY3RlZCA9IF9wcm9wcy5vbkRyb3BSZWplY3RlZCxcbiAgICAgICAgICBtdWx0aXBsZSA9IF9wcm9wcy5tdWx0aXBsZSxcbiAgICAgICAgICBkaXNhYmxlUHJldmlldyA9IF9wcm9wcy5kaXNhYmxlUHJldmlldyxcbiAgICAgICAgICBhY2NlcHQgPSBfcHJvcHMuYWNjZXB0O1xuXG4gICAgICB2YXIgZmlsZUxpc3QgPSAoMCwgX3V0aWxzLmdldERhdGFUcmFuc2Zlckl0ZW1zKShldnQpO1xuICAgICAgdmFyIGFjY2VwdGVkRmlsZXMgPSBbXTtcbiAgICAgIHZhciByZWplY3RlZEZpbGVzID0gW107XG5cbiAgICAgIC8vIFN0b3AgZGVmYXVsdCBicm93c2VyIGJlaGF2aW9yXG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgLy8gUmVzZXQgdGhlIGNvdW50ZXIgYWxvbmcgd2l0aCB0aGUgZHJhZyBvbiBhIGRyb3AuXG4gICAgICB0aGlzLmRyYWdUYXJnZXRzID0gW107XG4gICAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICBmaWxlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgIGlmICghZGlzYWJsZVByZXZpZXcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZS5wcmV2aWV3ID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgcHJldmlldyBmb3IgZmlsZScsIGZpbGUsIGVycik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoMCwgX3V0aWxzLmZpbGVBY2NlcHRlZCkoZmlsZSwgYWNjZXB0KSAmJiAoMCwgX3V0aWxzLmZpbGVNYXRjaFNpemUpKGZpbGUsIF90aGlzMy5wcm9wcy5tYXhTaXplLCBfdGhpczMucHJvcHMubWluU2l6ZSkpIHtcbiAgICAgICAgICBhY2NlcHRlZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0ZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFtdWx0aXBsZSkge1xuICAgICAgICAvLyBpZiBub3QgaW4gbXVsdGkgbW9kZSBhZGQgYW55IGV4dHJhIGFjY2VwdGVkIGZpbGVzIHRvIHJlamVjdGVkLlxuICAgICAgICAvLyBUaGlzIHdpbGwgYWxsb3cgZW5kIHVzZXJzIHRvIGVhc2lseSBpZ25vcmUgYSBtdWx0aSBmaWxlIGRyb3AgaW4gXCJzaW5nbGVcIiBtb2RlLlxuICAgICAgICByZWplY3RlZEZpbGVzLnB1c2guYXBwbHkocmVqZWN0ZWRGaWxlcywgX3RvQ29uc3VtYWJsZUFycmF5KGFjY2VwdGVkRmlsZXMuc3BsaWNlKDEpKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvbkRyb3ApIHtcbiAgICAgICAgb25Ecm9wLmNhbGwodGhpcywgYWNjZXB0ZWRGaWxlcywgcmVqZWN0ZWRGaWxlcywgZXZ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlamVjdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BSZWplY3RlZCkge1xuICAgICAgICBvbkRyb3BSZWplY3RlZC5jYWxsKHRoaXMsIHJlamVjdGVkRmlsZXMsIGV2dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhY2NlcHRlZEZpbGVzLmxlbmd0aCA+IDAgJiYgb25Ecm9wQWNjZXB0ZWQpIHtcbiAgICAgICAgb25Ecm9wQWNjZXB0ZWQuY2FsbCh0aGlzLCBhY2NlcHRlZEZpbGVzLCBldnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciBmaWxlcyB2YWx1ZVxuICAgICAgdGhpcy5kcmFnZ2VkRmlsZXMgPSBudWxsO1xuXG4gICAgICAvLyBSZXNldCBkcmFnIHN0YXRlXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dlZEZpbGVzOiBbXSxcbiAgICAgICAgYWNjZXB0ZWRGaWxlczogYWNjZXB0ZWRGaWxlcyxcbiAgICAgICAgcmVqZWN0ZWRGaWxlczogcmVqZWN0ZWRGaWxlc1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25DbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2xpY2soZXZ0KSB7XG4gICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgb25DbGljayA9IF9wcm9wczIub25DbGljayxcbiAgICAgICAgICBkaXNhYmxlQ2xpY2sgPSBfcHJvcHMyLmRpc2FibGVDbGljaztcblxuICAgICAgaWYgKCFkaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgb25DbGljay5jYWxsKHRoaXMsIGV2dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbiBJRTExL0VkZ2UgdGhlIGZpbGUtYnJvd3NlciBkaWFsb2cgaXMgYmxvY2tpbmcsIGVuc3VyZSB0aGlzIGlzIGJlaGluZCBzZXRUaW1lb3V0XG4gICAgICAgIC8vIHRoaXMgaXMgc28gcmVhY3QgY2FuIGhhbmRsZSBzdGF0ZSBjaGFuZ2VzIGluIHRoZSBvbkNsaWNrIHByb3AgYWJvdmUgYWJvdmVcbiAgICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtZHJvcHpvbmUvcmVhY3QtZHJvcHpvbmUvaXNzdWVzLzQ1MFxuICAgICAgICBpZiAoKDAsIF91dGlscy5pc0llT3JFZGdlKSgpKSB7XG4gICAgICAgICAgc2V0VGltZW91dCh0aGlzLm9wZW4uYmluZCh0aGlzKSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbklucHV0RWxlbWVudENsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25JbnB1dEVsZW1lbnRDbGljayhldnQpIHtcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmICh0aGlzLnByb3BzLmlucHV0UHJvcHMgJiYgdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2xpY2spIHtcbiAgICAgICAgdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdvbkZpbGVEaWFsb2dDYW5jZWwnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkZpbGVEaWFsb2dDYW5jZWwoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgLy8gdGltZW91dCB3aWxsIG5vdCByZWNvZ25pemUgY29udGV4dCBvZiB0aGlzIG1ldGhvZFxuICAgICAgdmFyIG9uRmlsZURpYWxvZ0NhbmNlbCA9IHRoaXMucHJvcHMub25GaWxlRGlhbG9nQ2FuY2VsO1xuICAgICAgLy8gZXhlY3V0ZSB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBGaWxlRGlhbG9nIGlzIG9wZW5lZCBpbiB0aGUgYnJvd3NlclxuXG4gICAgICBpZiAodGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKF90aGlzNC5maWxlSW5wdXRFbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBSZXR1cm5zIGFuIG9iamVjdCBhcyBGaWxlTGlzdFxuICAgICAgICAgICAgdmFyIGZpbGVzID0gX3RoaXM0LmZpbGVJbnB1dEVsLmZpbGVzO1xuXG5cbiAgICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIF90aGlzNC5pc0ZpbGVEaWFsb2dBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9uRmlsZURpYWxvZ0NhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgb25GaWxlRGlhbG9nQ2FuY2VsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAzMDApO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3NldFJlZicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFJlZihyZWYpIHtcbiAgICAgIHRoaXMubm9kZSA9IHJlZjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRSZWZzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0UmVmcyhyZWYpIHtcbiAgICAgIHRoaXMuZmlsZUlucHV0RWwgPSByZWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9wZW4gc3lzdGVtIGZpbGUgdXBsb2FkIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnb3BlbicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLmZpbGVJbnB1dEVsLnZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMuZmlsZUlucHV0RWwuY2xpY2soKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3Byb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYWNjZXB0ID0gX3Byb3BzMy5hY2NlcHQsXG4gICAgICAgICAgYWNjZXB0Q2xhc3NOYW1lID0gX3Byb3BzMy5hY2NlcHRDbGFzc05hbWUsXG4gICAgICAgICAgYWN0aXZlQ2xhc3NOYW1lID0gX3Byb3BzMy5hY3RpdmVDbGFzc05hbWUsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfcHJvcHMzLmNoaWxkcmVuLFxuICAgICAgICAgIGRpc2FibGVkID0gX3Byb3BzMy5kaXNhYmxlZCxcbiAgICAgICAgICBkaXNhYmxlZENsYXNzTmFtZSA9IF9wcm9wczMuZGlzYWJsZWRDbGFzc05hbWUsXG4gICAgICAgICAgaW5wdXRQcm9wcyA9IF9wcm9wczMuaW5wdXRQcm9wcyxcbiAgICAgICAgICBtdWx0aXBsZSA9IF9wcm9wczMubXVsdGlwbGUsXG4gICAgICAgICAgbmFtZSA9IF9wcm9wczMubmFtZSxcbiAgICAgICAgICByZWplY3RDbGFzc05hbWUgPSBfcHJvcHMzLnJlamVjdENsYXNzTmFtZSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczMsIFsnYWNjZXB0JywgJ2FjY2VwdENsYXNzTmFtZScsICdhY3RpdmVDbGFzc05hbWUnLCAnY2hpbGRyZW4nLCAnZGlzYWJsZWQnLCAnZGlzYWJsZWRDbGFzc05hbWUnLCAnaW5wdXRQcm9wcycsICdtdWx0aXBsZScsICduYW1lJywgJ3JlamVjdENsYXNzTmFtZSddKTtcblxuICAgICAgdmFyIGFjY2VwdFN0eWxlID0gcmVzdC5hY2NlcHRTdHlsZSxcbiAgICAgICAgICBhY3RpdmVTdHlsZSA9IHJlc3QuYWN0aXZlU3R5bGUsXG4gICAgICAgICAgX3Jlc3QkY2xhc3NOYW1lID0gcmVzdC5jbGFzc05hbWUsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3Jlc3QkY2xhc3NOYW1lID09PSB1bmRlZmluZWQgPyAnJyA6IF9yZXN0JGNsYXNzTmFtZSxcbiAgICAgICAgICBkaXNhYmxlZFN0eWxlID0gcmVzdC5kaXNhYmxlZFN0eWxlLFxuICAgICAgICAgIHJlamVjdFN0eWxlID0gcmVzdC5yZWplY3RTdHlsZSxcbiAgICAgICAgICBzdHlsZSA9IHJlc3Quc3R5bGUsXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocmVzdCwgWydhY2NlcHRTdHlsZScsICdhY3RpdmVTdHlsZScsICdjbGFzc05hbWUnLCAnZGlzYWJsZWRTdHlsZScsICdyZWplY3RTdHlsZScsICdzdHlsZSddKTtcblxuICAgICAgdmFyIF9zdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaXNEcmFnQWN0aXZlID0gX3N0YXRlLmlzRHJhZ0FjdGl2ZSxcbiAgICAgICAgICBkcmFnZ2VkRmlsZXMgPSBfc3RhdGUuZHJhZ2dlZEZpbGVzO1xuXG4gICAgICB2YXIgZmlsZXNDb3VudCA9IGRyYWdnZWRGaWxlcy5sZW5ndGg7XG4gICAgICB2YXIgaXNNdWx0aXBsZUFsbG93ZWQgPSBtdWx0aXBsZSB8fCBmaWxlc0NvdW50IDw9IDE7XG4gICAgICB2YXIgaXNEcmFnQWNjZXB0ID0gZmlsZXNDb3VudCA+IDAgJiYgKDAsIF91dGlscy5hbGxGaWxlc0FjY2VwdGVkKShkcmFnZ2VkRmlsZXMsIHRoaXMucHJvcHMuYWNjZXB0KTtcbiAgICAgIHZhciBpc0RyYWdSZWplY3QgPSBmaWxlc0NvdW50ID4gMCAmJiAoIWlzRHJhZ0FjY2VwdCB8fCAhaXNNdWx0aXBsZUFsbG93ZWQpO1xuICAgICAgdmFyIG5vU3R5bGVzID0gIWNsYXNzTmFtZSAmJiAhc3R5bGUgJiYgIWFjdGl2ZVN0eWxlICYmICFhY2NlcHRTdHlsZSAmJiAhcmVqZWN0U3R5bGUgJiYgIWRpc2FibGVkU3R5bGU7XG5cbiAgICAgIGlmIChpc0RyYWdBY3RpdmUgJiYgYWN0aXZlQ2xhc3NOYW1lKSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSAnICcgKyBhY3RpdmVDbGFzc05hbWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNEcmFnQWNjZXB0ICYmIGFjY2VwdENsYXNzTmFtZSkge1xuICAgICAgICBjbGFzc05hbWUgKz0gJyAnICsgYWNjZXB0Q2xhc3NOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKGlzRHJhZ1JlamVjdCAmJiByZWplY3RDbGFzc05hbWUpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9ICcgJyArIHJlamVjdENsYXNzTmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXNhYmxlZCAmJiBkaXNhYmxlZENsYXNzTmFtZSkge1xuICAgICAgICBjbGFzc05hbWUgKz0gJyAnICsgZGlzYWJsZWRDbGFzc05hbWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub1N0eWxlcykge1xuICAgICAgICBzdHlsZSA9IF9zdHlsZXMyLmRlZmF1bHQuZGVmYXVsdDtcbiAgICAgICAgYWN0aXZlU3R5bGUgPSBfc3R5bGVzMi5kZWZhdWx0LmFjdGl2ZTtcbiAgICAgICAgYWNjZXB0U3R5bGUgPSBzdHlsZS5hY3RpdmU7XG4gICAgICAgIHJlamVjdFN0eWxlID0gX3N0eWxlczIuZGVmYXVsdC5yZWplY3RlZDtcbiAgICAgICAgZGlzYWJsZWRTdHlsZSA9IF9zdHlsZXMyLmRlZmF1bHQuZGlzYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcHBsaWVkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgc3R5bGUpO1xuICAgICAgaWYgKGFjdGl2ZVN0eWxlICYmIGlzRHJhZ0FjdGl2ZSkge1xuICAgICAgICBhcHBsaWVkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgc3R5bGUsIGFjdGl2ZVN0eWxlKTtcbiAgICAgIH1cbiAgICAgIGlmIChhY2NlcHRTdHlsZSAmJiBpc0RyYWdBY2NlcHQpIHtcbiAgICAgICAgYXBwbGllZFN0eWxlID0gX2V4dGVuZHMoe30sIGFwcGxpZWRTdHlsZSwgYWNjZXB0U3R5bGUpO1xuICAgICAgfVxuICAgICAgaWYgKHJlamVjdFN0eWxlICYmIGlzRHJhZ1JlamVjdCkge1xuICAgICAgICBhcHBsaWVkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgYXBwbGllZFN0eWxlLCByZWplY3RTdHlsZSk7XG4gICAgICB9XG4gICAgICBpZiAoZGlzYWJsZWRTdHlsZSAmJiBkaXNhYmxlZCkge1xuICAgICAgICBhcHBsaWVkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgc3R5bGUsIGRpc2FibGVkU3R5bGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5wdXRBdHRyaWJ1dGVzID0ge1xuICAgICAgICBhY2NlcHQ6IGFjY2VwdCxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHN0eWxlOiB7IGRpc3BsYXk6ICdub25lJyB9LFxuICAgICAgICBtdWx0aXBsZTogX3V0aWxzLnN1cHBvcnRNdWx0aXBsZSAmJiBtdWx0aXBsZSxcbiAgICAgICAgcmVmOiB0aGlzLnNldFJlZnMsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uRHJvcCxcbiAgICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJ1xuICAgICAgfTtcblxuICAgICAgaWYgKG5hbWUgJiYgbmFtZS5sZW5ndGgpIHtcbiAgICAgICAgaW5wdXRBdHRyaWJ1dGVzLm5hbWUgPSBuYW1lO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXN0cnVjdHVyZSBjdXN0b20gcHJvcHMgYXdheSBmcm9tIHByb3BzIHVzZWQgZm9yIHRoZSBkaXYgZWxlbWVudFxuXG4gICAgICB2YXIgYWNjZXB0ZWRGaWxlcyA9IHByb3BzLmFjY2VwdGVkRmlsZXMsXG4gICAgICAgICAgcHJldmVudERyb3BPbkRvY3VtZW50ID0gcHJvcHMucHJldmVudERyb3BPbkRvY3VtZW50LFxuICAgICAgICAgIGRpc2FibGVQcmV2aWV3ID0gcHJvcHMuZGlzYWJsZVByZXZpZXcsXG4gICAgICAgICAgZGlzYWJsZUNsaWNrID0gcHJvcHMuZGlzYWJsZUNsaWNrLFxuICAgICAgICAgIG9uRHJvcEFjY2VwdGVkID0gcHJvcHMub25Ecm9wQWNjZXB0ZWQsXG4gICAgICAgICAgb25Ecm9wUmVqZWN0ZWQgPSBwcm9wcy5vbkRyb3BSZWplY3RlZCxcbiAgICAgICAgICBvbkZpbGVEaWFsb2dDYW5jZWwgPSBwcm9wcy5vbkZpbGVEaWFsb2dDYW5jZWwsXG4gICAgICAgICAgbWF4U2l6ZSA9IHByb3BzLm1heFNpemUsXG4gICAgICAgICAgbWluU2l6ZSA9IHByb3BzLm1pblNpemUsXG4gICAgICAgICAgZGl2UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFsnYWNjZXB0ZWRGaWxlcycsICdwcmV2ZW50RHJvcE9uRG9jdW1lbnQnLCAnZGlzYWJsZVByZXZpZXcnLCAnZGlzYWJsZUNsaWNrJywgJ29uRHJvcEFjY2VwdGVkJywgJ29uRHJvcFJlamVjdGVkJywgJ29uRmlsZURpYWxvZ0NhbmNlbCcsICdtYXhTaXplJywgJ21pblNpemUnXSk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgICBzdHlsZTogYXBwbGllZFN0eWxlXG4gICAgICAgIH0sIGRpdlByb3BzIC8qIGV4cGFuZCB1c2VyIHByb3ZpZGVkIHByb3BzIGZpcnN0IHNvIGV2ZW50IGhhbmRsZXJzIGFyZSBuZXZlciBvdmVycmlkZGVuICovLCB7XG4gICAgICAgICAgb25DbGljazogdGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkNsaWNrKSxcbiAgICAgICAgICBvbkRyYWdTdGFydDogdGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdTdGFydCksXG4gICAgICAgICAgb25EcmFnRW50ZXI6IHRoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnRW50ZXIpLFxuICAgICAgICAgIG9uRHJhZ092ZXI6IHRoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnT3ZlciksXG4gICAgICAgICAgb25EcmFnTGVhdmU6IHRoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnTGVhdmUpLFxuICAgICAgICAgIG9uRHJvcDogdGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyb3ApLFxuICAgICAgICAgIHJlZjogdGhpcy5zZXRSZWYsXG4gICAgICAgICAgJ2FyaWEtZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgICB9KSxcbiAgICAgICAgdGhpcy5yZW5kZXJDaGlsZHJlbihjaGlsZHJlbiwgaXNEcmFnQWN0aXZlLCBpc0RyYWdBY2NlcHQsIGlzRHJhZ1JlamVjdCksXG4gICAgICAgIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdpbnB1dCcsIF9leHRlbmRzKHt9LCBpbnB1dFByb3BzIC8qIGV4cGFuZCB1c2VyIHByb3ZpZGVkIGlucHV0UHJvcHMgZmlyc3Qgc28gaW5wdXRBdHRyaWJ1dGVzIG92ZXJyaWRlIHRoZW0gKi8sIGlucHV0QXR0cmlidXRlcykpXG4gICAgICApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBEcm9wem9uZTtcbn0oX3JlYWN0Mi5kZWZhdWx0LkNvbXBvbmVudCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IERyb3B6b25lO1xuXG5cbkRyb3B6b25lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIEFsbG93IHNwZWNpZmljIHR5cGVzIG9mIGZpbGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL29rb25ldC9hdHRyLWFjY2VwdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICogS2VlcCBpbiBtaW5kIHRoYXQgbWltZSB0eXBlIGRldGVybWluYXRpb24gaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBwbGF0Zm9ybXMuIENTViBmaWxlcyxcbiAgICogZm9yIGV4YW1wbGUsIGFyZSByZXBvcnRlZCBhcyB0ZXh0L3BsYWluIHVuZGVyIG1hY09TIGJ1dCBhcyBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwgdW5kZXJcbiAgICogV2luZG93cy4gSW4gc29tZSBjYXNlcyB0aGVyZSBtaWdodCBub3QgYmUgYSBtaW1lIHR5cGUgc2V0IGF0IGFsbC5cbiAgICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtZHJvcHpvbmUvcmVhY3QtZHJvcHpvbmUvaXNzdWVzLzI3NlxuICAgKi9cbiAgYWNjZXB0OiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIF9wcm9wVHlwZXMyLmRlZmF1bHQuYXJyYXlPZihfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyldKSxcblxuICAvKipcbiAgICogQ29udGVudHMgb2YgdGhlIGRyb3B6b25lXG4gICAqL1xuICBjaGlsZHJlbjogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMyLmRlZmF1bHQubm9kZSwgX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jXSksXG5cbiAgLyoqXG4gICAqIERpc2FsbG93IGNsaWNraW5nIG9uIHRoZSBkcm9wem9uZSBjb250YWluZXIgdG8gb3BlbiBmaWxlIGRpYWxvZ1xuICAgKi9cbiAgZGlzYWJsZUNsaWNrOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIHRoZSBkcm9wem9uZSBlbnRpcmVseVxuICAgKi9cbiAgZGlzYWJsZWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlL2Rpc2FibGUgcHJldmlldyBnZW5lcmF0aW9uXG4gICAqL1xuICBkaXNhYmxlUHJldmlldzogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBmYWxzZSwgYWxsb3cgZHJvcHBlZCBpdGVtcyB0byB0YWtlIG92ZXIgdGhlIGN1cnJlbnQgYnJvd3NlciB3aW5kb3dcbiAgICovXG4gIHByZXZlbnREcm9wT25Eb2N1bWVudDogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuXG4gIC8qKlxuICAgKiBQYXNzIGFkZGl0aW9uYWwgYXR0cmlidXRlcyB0byB0aGUgYDxpbnB1dCB0eXBlPVwiZmlsZVwiLz5gIHRhZ1xuICAgKi9cbiAgaW5wdXRQcm9wczogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEFsbG93IGRyb3BwaW5nIG11bHRpcGxlIGZpbGVzXG4gICAqL1xuICBtdWx0aXBsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLFxuXG4gIC8qKlxuICAgKiBgbmFtZWAgYXR0cmlidXRlIGZvciB0aGUgaW5wdXQgdGFnXG4gICAqL1xuICBuYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcblxuICAvKipcbiAgICogTWF4aW11bSBmaWxlIHNpemUgKGluIGJ5dGVzKVxuICAgKi9cbiAgbWF4U2l6ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsXG5cbiAgLyoqXG4gICAqIE1pbmltdW0gZmlsZSBzaXplIChpbiBieXRlcylcbiAgICovXG4gIG1pblNpemU6IF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWVcbiAgICovXG4gIGNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZSB0byBhcHBseSB3aGVuIGRyYWcgaXMgYWN0aXZlXG4gICAqL1xuICBhY3RpdmVDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgdG8gYXBwbHkgd2hlbiBkcm9wIHdpbGwgYmUgYWNjZXB0ZWRcbiAgICovXG4gIGFjY2VwdENsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZSB0byBhcHBseSB3aGVuIGRyb3Agd2lsbCBiZSByZWplY3RlZFxuICAgKi9cbiAgcmVqZWN0Q2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcblxuICAvKipcbiAgICogY2xhc3NOYW1lIHRvIGFwcGx5IHdoZW4gZHJvcHpvbmUgaXMgZGlzYWJsZWRcbiAgICovXG4gIGRpc2FibGVkQ2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZyxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseVxuICAgKi9cbiAgc3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5IHdoZW4gZHJhZyBpcyBhY3RpdmVcbiAgICovXG4gIGFjdGl2ZVN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseSB3aGVuIGRyb3Agd2lsbCBiZSBhY2NlcHRlZFxuICAgKi9cbiAgYWNjZXB0U3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5IHdoZW4gZHJvcCB3aWxsIGJlIHJlamVjdGVkXG4gICAqL1xuICByZWplY3RTdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHkgd2hlbiBkcm9wem9uZSBpcyBkaXNhYmxlZFxuICAgKi9cbiAgZGlzYWJsZWRTdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsXG5cbiAgLyoqXG4gICAqIG9uQ2xpY2sgY2FsbGJhY2tcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uQ2xpY2s6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcblxuICAvKipcbiAgICogb25Ecm9wIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyb3A6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcblxuICAvKipcbiAgICogb25Ecm9wQWNjZXB0ZWQgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJvcEFjY2VwdGVkOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcFJlamVjdGVkIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyb3BSZWplY3RlZDogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyYWdTdGFydCBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnU3RhcnQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcblxuICAvKipcbiAgICogb25EcmFnRW50ZXIgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ0VudGVyOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ092ZXIgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ092ZXI6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYyxcblxuICAvKipcbiAgICogb25EcmFnTGVhdmUgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ0xlYXZlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsXG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYSBjYWxsYmFjayBvbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvbiBvZiB0aGUgZmlsZSBkaWFsb2dcbiAgICovXG4gIG9uRmlsZURpYWxvZ0NhbmNlbDogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jXG59O1xuXG5Ecm9wem9uZS5kZWZhdWx0UHJvcHMgPSB7XG4gIHByZXZlbnREcm9wT25Eb2N1bWVudDogdHJ1ZSxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBkaXNhYmxlUHJldmlldzogZmFsc2UsXG4gIGRpc2FibGVDbGljazogZmFsc2UsXG4gIG11bHRpcGxlOiB0cnVlLFxuICBtYXhTaXplOiBJbmZpbml0eSxcbiAgbWluU2l6ZTogMFxufTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzFfXztcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yX187XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdXBwb3J0TXVsdGlwbGUgPSB1bmRlZmluZWQ7XG5leHBvcnRzLmdldERhdGFUcmFuc2Zlckl0ZW1zID0gZ2V0RGF0YVRyYW5zZmVySXRlbXM7XG5leHBvcnRzLmZpbGVBY2NlcHRlZCA9IGZpbGVBY2NlcHRlZDtcbmV4cG9ydHMuZmlsZU1hdGNoU2l6ZSA9IGZpbGVNYXRjaFNpemU7XG5leHBvcnRzLmFsbEZpbGVzQWNjZXB0ZWQgPSBhbGxGaWxlc0FjY2VwdGVkO1xuZXhwb3J0cy5vbkRvY3VtZW50RHJhZ092ZXIgPSBvbkRvY3VtZW50RHJhZ092ZXI7XG5leHBvcnRzLmlzSWVPckVkZ2UgPSBpc0llT3JFZGdlO1xuXG52YXIgX2F0dHJBY2NlcHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG52YXIgX2F0dHJBY2NlcHQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXR0ckFjY2VwdCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBzdXBwb3J0TXVsdGlwbGUgPSBleHBvcnRzLnN1cHBvcnRNdWx0aXBsZSA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCA/ICdtdWx0aXBsZScgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSA6IHRydWU7XG5cbmZ1bmN0aW9uIGdldERhdGFUcmFuc2Zlckl0ZW1zKGV2ZW50KSB7XG4gIHZhciBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBbXTtcbiAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgIHZhciBkdCA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICBpZiAoZHQuZmlsZXMgJiYgZHQuZmlsZXMubGVuZ3RoKSB7XG4gICAgICBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBkdC5maWxlcztcbiAgICB9IGVsc2UgaWYgKGR0Lml0ZW1zICYmIGR0Lml0ZW1zLmxlbmd0aCkge1xuICAgICAgLy8gRHVyaW5nIHRoZSBkcmFnIGV2ZW4gdGhlIGRhdGFUcmFuc2Zlci5maWxlcyBpcyBudWxsXG4gICAgICAvLyBidXQgQ2hyb21lIGltcGxlbWVudHMgc29tZSBkcmFnIHN0b3JlLCB3aGljaCBpcyBhY2Nlc2libGUgdmlhIGRhdGFUcmFuc2Zlci5pdGVtc1xuICAgICAgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gZHQuaXRlbXM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuZmlsZXMpIHtcbiAgICBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBldmVudC50YXJnZXQuZmlsZXM7XG4gIH1cbiAgLy8gQ29udmVydCBmcm9tIERhdGFUcmFuc2Zlckl0ZW1zTGlzdCB0byB0aGUgbmF0aXZlIEFycmF5XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkYXRhVHJhbnNmZXJJdGVtc0xpc3QpO1xufVxuXG4vLyBGaXJlZm94IHZlcnNpb25zIHByaW9yIHRvIDUzIHJldHVybiBhIGJvZ3VzIE1JTUUgdHlwZSBmb3IgZXZlcnkgZmlsZSBkcmFnLCBzbyBkcmFnb3ZlcnMgd2l0aFxuLy8gdGhhdCBNSU1FIHR5cGUgd2lsbCBhbHdheXMgYmUgYWNjZXB0ZWRcbmZ1bmN0aW9uIGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpIHtcbiAgcmV0dXJuIGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnIHx8ICgwLCBfYXR0ckFjY2VwdDIuZGVmYXVsdCkoZmlsZSwgYWNjZXB0KTtcbn1cblxuZnVuY3Rpb24gZmlsZU1hdGNoU2l6ZShmaWxlLCBtYXhTaXplLCBtaW5TaXplKSB7XG4gIHJldHVybiBmaWxlLnNpemUgPD0gbWF4U2l6ZSAmJiBmaWxlLnNpemUgPj0gbWluU2l6ZTtcbn1cblxuZnVuY3Rpb24gYWxsRmlsZXNBY2NlcHRlZChmaWxlcywgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlcy5ldmVyeShmdW5jdGlvbiAoZmlsZSkge1xuICAgIHJldHVybiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KTtcbiAgfSk7XG59XG5cbi8vIGFsbG93IHRoZSBlbnRpcmUgZG9jdW1lbnQgdG8gYmUgYSBkcmFnIHRhcmdldFxuZnVuY3Rpb24gb25Eb2N1bWVudERyYWdPdmVyKGV2dCkge1xuICBldnQucHJldmVudERlZmF1bHQoKTtcbn1cblxuZnVuY3Rpb24gaXNJZSh1c2VyQWdlbnQpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgIT09IC0xIHx8IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gaXNFZGdlKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ0VkZ2UvJykgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBpc0llT3JFZGdlKCkge1xuICB2YXIgdXNlckFnZW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICByZXR1cm4gaXNJZSh1c2VyQWdlbnQpIHx8IGlzRWRnZSh1c2VyQWdlbnQpO1xufVxuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXtpZihyW2VdKXJldHVybiByW2VdLmV4cG9ydHM7dmFyIG89cltlXT17ZXhwb3J0czp7fSxpZDplLGxvYWRlZDohMX07cmV0dXJuIHRbZV0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsbiksby5sb2FkZWQ9ITAsby5leHBvcnRzfXZhciByPXt9O3JldHVybiBuLm09dCxuLmM9cixuLnA9XCJcIixuKDApfShbZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO24uX19lc01vZHVsZT0hMCxyKDgpLHIoOSksbltcImRlZmF1bHRcIl09ZnVuY3Rpb24odCxuKXtpZih0JiZuKXt2YXIgcj1mdW5jdGlvbigpe3ZhciByPUFycmF5LmlzQXJyYXkobik/bjpuLnNwbGl0KFwiLFwiKSxlPXQubmFtZXx8XCJcIixvPXQudHlwZXx8XCJcIixpPW8ucmVwbGFjZSgvXFwvLiokLyxcIlwiKTtyZXR1cm57djpyLnNvbWUoZnVuY3Rpb24odCl7dmFyIG49dC50cmltKCk7cmV0dXJuXCIuXCI9PT1uLmNoYXJBdCgwKT9lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgobi50b0xvd2VyQ2FzZSgpKTovXFwvXFwqJC8udGVzdChuKT9pPT09bi5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpOm89PT1ufSl9fSgpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiByKXJldHVybiByLnZ9cmV0dXJuITB9LHQuZXhwb3J0cz1uW1wiZGVmYXVsdFwiXX0sZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9e3ZlcnNpb246XCIxLjIuMlwifTtcIm51bWJlclwiPT10eXBlb2YgX19lJiYoX19lPXIpfSxmdW5jdGlvbih0LG4pe3ZhciByPXQuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcIm51bWJlclwiPT10eXBlb2YgX19nJiYoX19nPXIpfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyKSxvPXIoMSksaT1yKDQpLHU9cigxOSksYz1cInByb3RvdHlwZVwiLGY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShuLGFyZ3VtZW50cyl9fSxzPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxwLGwseSxkPXQmcy5HLGg9dCZzLlAsdj1kP2U6dCZzLlM/ZVtuXXx8KGVbbl09e30pOihlW25dfHx7fSlbY10seD1kP286b1tuXXx8KG9bbl09e30pO2QmJihyPW4pO2ZvcihhIGluIHIpcD0hKHQmcy5GKSYmdiYmYSBpbiB2LGw9KHA/djpyKVthXSx5PXQmcy5CJiZwP2YobCxlKTpoJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBsP2YoRnVuY3Rpb24uY2FsbCxsKTpsLHYmJiFwJiZ1KHYsYSxsKSx4W2FdIT1sJiZpKHgsYSx5KSxoJiYoKHhbY118fCh4W2NdPXt9KSlbYV09bCl9O2UuY29yZT1vLHMuRj0xLHMuRz0yLHMuUz00LHMuUD04LHMuQj0xNixzLlc9MzIsdC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDUpLG89cigxOCk7dC5leHBvcnRzPXIoMjIpP2Z1bmN0aW9uKHQsbixyKXtyZXR1cm4gZS5zZXREZXNjKHQsbixvKDEscikpfTpmdW5jdGlvbih0LG4scil7cmV0dXJuIHRbbl09cix0fX0sZnVuY3Rpb24odCxuKXt2YXIgcj1PYmplY3Q7dC5leHBvcnRzPXtjcmVhdGU6ci5jcmVhdGUsZ2V0UHJvdG86ci5nZXRQcm90b3R5cGVPZixpc0VudW06e30ucHJvcGVydHlJc0VudW1lcmFibGUsZ2V0RGVzYzpyLmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzZXREZXNjOnIuZGVmaW5lUHJvcGVydHksc2V0RGVzY3M6ci5kZWZpbmVQcm9wZXJ0aWVzLGdldEtleXM6ci5rZXlzLGdldE5hbWVzOnIuZ2V0T3duUHJvcGVydHlOYW1lcyxnZXRTeW1ib2xzOnIuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGVhY2g6W10uZm9yRWFjaH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9MCxlPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ltYm9sKFwiLmNvbmNhdCh2b2lkIDA9PT10P1wiXCI6dCxcIilfXCIsKCsrcitlKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMjApKFwid2tzXCIpLG89cigyKS5TeW1ib2w7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfHwoZVt0XT1vJiZvW3RdfHwob3x8cig2KSkoXCJTeW1ib2wuXCIrdCkpfX0sZnVuY3Rpb24odCxuLHIpe3IoMjYpLHQuZXhwb3J0cz1yKDEpLkFycmF5LnNvbWV9LGZ1bmN0aW9uKHQsbixyKXtyKDI1KSx0LmV4cG9ydHM9cigxKS5TdHJpbmcuZW5kc1dpdGh9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuKXt2YXIgcj17fS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUodCksdm9pZCAwPT09bilyZXR1cm4gdDtzd2l0Y2gocil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5jYWxsKG4scil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24ocixlKXtyZXR1cm4gdC5jYWxsKG4scixlKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihyLGUsbyl7cmV0dXJuIHQuY2FsbChuLHIsZSxvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPS8uLzt0cnl7XCIvLi9cIlt0XShuKX1jYXRjaChlKXt0cnl7cmV0dXJuIG5bcig3KShcIm1hdGNoXCIpXT0hMSwhXCIvLi9cIlt0XShuKX1jYXRjaChvKXt9fXJldHVybiEwfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKG4pe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxNiksbz1yKDExKSxpPXIoNykoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIGUodCkmJih2b2lkIDAhPT0obj10W2ldKT8hIW46XCJSZWdFeHBcIj09byh0KSl9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTpufX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDIpLG89cig0KSxpPXIoNikoXCJzcmNcIiksdT1cInRvU3RyaW5nXCIsYz1GdW5jdGlvblt1XSxmPShcIlwiK2MpLnNwbGl0KHUpO3IoMSkuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYy5jYWxsKHQpfSwodC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyLHUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIHImJihvKHIsaSx0W25dP1wiXCIrdFtuXTpmLmpvaW4oU3RyaW5nKG4pKSksXCJuYW1lXCJpbiByfHwoci5uYW1lPW4pKSx0PT09ZT90W25dPXI6KHV8fGRlbGV0ZSB0W25dLG8odCxuLHIpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSx1LGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcyYmdGhpc1tpXXx8Yy5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDIpLG89XCJfX2NvcmUtanNfc2hhcmVkX19cIixpPWVbb118fChlW29dPXt9KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlbdF18fChpW3RdPXt9KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE3KSxvPXIoMTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7aWYoZShuKSl0aHJvdyBUeXBlRXJyb3IoXCJTdHJpbmcjXCIrcitcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7cmV0dXJuIFN0cmluZyhvKHQpKX19LGZ1bmN0aW9uKHQsbixyKXt0LmV4cG9ydHM9IXIoMTUpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4pe3ZhciByPU1hdGguY2VpbCxlPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/ZTpyKSh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDIzKSxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP28oZSh0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoMyksbz1yKDI0KSxpPXIoMjEpLHU9XCJlbmRzV2l0aFwiLGM9XCJcIlt1XTtlKGUuUCtlLkYqcigxNCkodSksXCJTdHJpbmdcIix7ZW5kc1dpdGg6ZnVuY3Rpb24odCl7dmFyIG49aSh0aGlzLHQsdSkscj1hcmd1bWVudHMsZT1yLmxlbmd0aD4xP3JbMV06dm9pZCAwLGY9byhuLmxlbmd0aCkscz12b2lkIDA9PT1lP2Y6TWF0aC5taW4obyhlKSxmKSxhPVN0cmluZyh0KTtyZXR1cm4gYz9jLmNhbGwobixhLHMpOm4uc2xpY2Uocy1hLmxlbmd0aCxzKT09PWF9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDUpLG89cigzKSxpPXIoMSkuQXJyYXl8fEFycmF5LHU9e30sYz1mdW5jdGlvbih0LG4pe2UuZWFjaC5jYWxsKHQuc3BsaXQoXCIsXCIpLGZ1bmN0aW9uKHQpe3ZvaWQgMD09biYmdCBpbiBpP3VbdF09aVt0XTp0IGluW10mJih1W3RdPXIoMTIpKEZ1bmN0aW9uLmNhbGwsW11bdF0sbikpfSl9O2MoXCJwb3AscmV2ZXJzZSxzaGlmdCxrZXlzLHZhbHVlcyxlbnRyaWVzXCIsMSksYyhcImluZGV4T2YsZXZlcnksc29tZSxmb3JFYWNoLG1hcCxmaWx0ZXIsZmluZCxmaW5kSW5kZXgsaW5jbHVkZXNcIiwzKSxjKFwiam9pbixzbGljZSxjb25jYXQscHVzaCxzcGxpY2UsdW5zaGlmdCxzb3J0LGxhc3RJbmRleE9mLHJlZHVjZSxyZWR1Y2VSaWdodCxjb3B5V2l0aGluLGZpbGxcIiksbyhvLlMsXCJBcnJheVwiLHUpfV0pO1xuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgcmVqZWN0ZWQ6IHtcbiAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJDb2xvcjogJyNjNjYnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWUnXG4gIH0sXG4gIGRpc2FibGVkOiB7XG4gICAgb3BhY2l0eTogMC41XG4gIH0sXG4gIGFjdGl2ZToge1xuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIGJvcmRlckNvbG9yOiAnIzZjNicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZSdcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHdpZHRoOiAyMDAsXG4gICAgaGVpZ2h0OiAyMDAsXG4gICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgYm9yZGVyQ29sb3I6ICcjNjY2JyxcbiAgICBib3JkZXJTdHlsZTogJ2Rhc2hlZCcsXG4gICAgYm9yZGVyUmFkaXVzOiA1XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSlcbi8qKioqKiovIF0pO1xufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGluZGV4LmpzIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZThhMzU2ZjczZjk0ZWJjMzYzZWUiLCIvKiBlc2xpbnQgcHJlZmVyLXRlbXBsYXRlOiAwICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7XG4gIHN1cHBvcnRNdWx0aXBsZSxcbiAgZmlsZUFjY2VwdGVkLFxuICBhbGxGaWxlc0FjY2VwdGVkLFxuICBmaWxlTWF0Y2hTaXplLFxuICBvbkRvY3VtZW50RHJhZ092ZXIsXG4gIGdldERhdGFUcmFuc2Zlckl0ZW1zLFxuICBpc0llT3JFZGdlXG59IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vdXRpbHMvc3R5bGVzJ1xuXG5jbGFzcyBEcm9wem9uZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KSB7XG4gICAgc3VwZXIocHJvcHMsIGNvbnRleHQpXG4gICAgdGhpcy5jb21wb3NlSGFuZGxlcnMgPSB0aGlzLmNvbXBvc2VIYW5kbGVycy5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcylcbiAgICB0aGlzLm9uRG9jdW1lbnREcm9wID0gdGhpcy5vbkRvY3VtZW50RHJvcC5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRyYWdFbnRlciA9IHRoaXMub25EcmFnRW50ZXIuYmluZCh0aGlzKVxuICAgIHRoaXMub25EcmFnTGVhdmUgPSB0aGlzLm9uRHJhZ0xlYXZlLmJpbmQodGhpcylcbiAgICB0aGlzLm9uRHJhZ092ZXIgPSB0aGlzLm9uRHJhZ092ZXIuYmluZCh0aGlzKVxuICAgIHRoaXMub25EcmFnU3RhcnQgPSB0aGlzLm9uRHJhZ1N0YXJ0LmJpbmQodGhpcylcbiAgICB0aGlzLm9uRHJvcCA9IHRoaXMub25Ecm9wLmJpbmQodGhpcylcbiAgICB0aGlzLm9uRmlsZURpYWxvZ0NhbmNlbCA9IHRoaXMub25GaWxlRGlhbG9nQ2FuY2VsLmJpbmQodGhpcylcbiAgICB0aGlzLm9uSW5wdXRFbGVtZW50Q2xpY2sgPSB0aGlzLm9uSW5wdXRFbGVtZW50Q2xpY2suYmluZCh0aGlzKVxuXG4gICAgdGhpcy5zZXRSZWYgPSB0aGlzLnNldFJlZi5iaW5kKHRoaXMpXG4gICAgdGhpcy5zZXRSZWZzID0gdGhpcy5zZXRSZWZzLmJpbmQodGhpcylcblxuICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gZmFsc2VcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkcmFnZ2VkRmlsZXM6IFtdLFxuICAgICAgYWNjZXB0ZWRGaWxlczogW10sXG4gICAgICByZWplY3RlZEZpbGVzOiBbXVxuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgcHJldmVudERyb3BPbkRvY3VtZW50IH0gPSB0aGlzLnByb3BzXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IFtdXG5cbiAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRG9jdW1lbnREcmFnT3ZlciwgZmFsc2UpXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5vbkRvY3VtZW50RHJvcCwgZmFsc2UpXG4gICAgfVxuICAgIHRoaXMuZmlsZUlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uSW5wdXRFbGVtZW50Q2xpY2ssIGZhbHNlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25GaWxlRGlhbG9nQ2FuY2VsLCBmYWxzZSlcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGNvbnN0IHsgcHJldmVudERyb3BPbkRvY3VtZW50IH0gPSB0aGlzLnByb3BzXG4gICAgaWYgKHByZXZlbnREcm9wT25Eb2N1bWVudCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBvbkRvY3VtZW50RHJhZ092ZXIpXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5vbkRvY3VtZW50RHJvcClcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsZUlucHV0RWwgIT0gbnVsbCkge1xuICAgICAgdGhpcy5maWxlSW5wdXRFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbnB1dEVsZW1lbnRDbGljaywgZmFsc2UpXG4gICAgfVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25GaWxlRGlhbG9nQ2FuY2VsLCBmYWxzZSlcbiAgfVxuXG4gIGNvbXBvc2VIYW5kbGVycyhoYW5kbGVyKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZXJcbiAgfVxuXG4gIG9uRG9jdW1lbnREcm9wKGV2dCkge1xuICAgIGlmICh0aGlzLm5vZGUgJiYgdGhpcy5ub2RlLmNvbnRhaW5zKGV2dC50YXJnZXQpKSB7XG4gICAgICAvLyBpZiB3ZSBpbnRlcmNlcHRlZCBhbiBldmVudCBmb3Igb3VyIGluc3RhbmNlLCBsZXQgaXQgcHJvcGFnYXRlIGRvd24gdG8gdGhlIGluc3RhbmNlJ3Mgb25Ecm9wIGhhbmRsZXJcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuICAgIHRoaXMuZHJhZ1RhcmdldHMgPSBbXVxuICB9XG5cbiAgb25EcmFnU3RhcnQoZXZ0KSB7XG4gICAgaWYgKHRoaXMucHJvcHMub25EcmFnU3RhcnQpIHtcbiAgICAgIHRoaXMucHJvcHMub25EcmFnU3RhcnQuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuICB9XG5cbiAgb25EcmFnRW50ZXIoZXZ0KSB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIENvdW50IHRoZSBkcm9wem9uZSBhbmQgYW55IGNoaWxkcmVuIHRoYXQgYXJlIGVudGVyZWQuXG4gICAgaWYgKHRoaXMuZHJhZ1RhcmdldHMuaW5kZXhPZihldnQudGFyZ2V0KSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZHJhZ1RhcmdldHMucHVzaChldnQudGFyZ2V0KVxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNEcmFnQWN0aXZlOiB0cnVlLCAvLyBEbyBub3QgcmVseSBvbiBmaWxlcyBmb3IgdGhlIGRyYWcgc3RhdGUuIEl0IGRvZXNuJ3Qgd29yayBpbiBTYWZhcmkuXG4gICAgICBkcmFnZ2VkRmlsZXM6IGdldERhdGFUcmFuc2Zlckl0ZW1zKGV2dClcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25EcmFnRW50ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMub25EcmFnRW50ZXIuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuICB9XG5cbiAgb25EcmFnT3ZlcihldnQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHRyeSB7XG4gICAgICAvLyBUaGUgZmlsZSBkaWFsb2cgb24gQ2hyb21lIGFsbG93cyB1c2VycyB0byBkcmFnIGZpbGVzIGZyb20gdGhlIGRpYWxvZyBvbnRvXG4gICAgICAvLyB0aGUgZHJvcHpvbmUsIGNhdXNpbmcgdGhlIGJyb3dzZXIgdGhlIGNyYXNoIHdoZW4gdGhlIGZpbGUgZGlhbG9nIGlzIGNsb3NlZC5cbiAgICAgIC8vIEEgZHJvcCBlZmZlY3Qgb2YgJ25vbmUnIHByZXZlbnRzIHRoZSBmaWxlIGZyb20gYmVpbmcgZHJvcHBlZFxuICAgICAgZXZ0LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gdGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUgPyAnbm9uZScgOiAnY29weScgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBvZiBlcnJvclxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ092ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMub25EcmFnT3Zlci5jYWxsKHRoaXMsIGV2dClcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRyYWdMZWF2ZShldnQpIHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gT25seSBkZWFjdGl2YXRlIG9uY2UgdGhlIGRyb3B6b25lIGFuZCBhbGwgY2hpbGRyZW4gaGF2ZSBiZWVuIGxlZnQuXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IHRoaXMuZHJhZ1RhcmdldHMuZmlsdGVyKGVsID0+IGVsICE9PSBldnQudGFyZ2V0ICYmIHRoaXMubm9kZS5jb250YWlucyhlbCkpXG4gICAgaWYgKHRoaXMuZHJhZ1RhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgZHJhZ2dpbmcgZmlsZXMgc3RhdGVcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gICAgICBkcmFnZ2VkRmlsZXM6IFtdXG4gICAgfSlcblxuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ0xlYXZlKSB7XG4gICAgICB0aGlzLnByb3BzLm9uRHJhZ0xlYXZlLmNhbGwodGhpcywgZXZ0KVxuICAgIH1cbiAgfVxuXG4gIG9uRHJvcChldnQpIHtcbiAgICBjb25zdCB7IG9uRHJvcCwgb25Ecm9wQWNjZXB0ZWQsIG9uRHJvcFJlamVjdGVkLCBtdWx0aXBsZSwgZGlzYWJsZVByZXZpZXcsIGFjY2VwdCB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IGZpbGVMaXN0ID0gZ2V0RGF0YVRyYW5zZmVySXRlbXMoZXZ0KVxuICAgIGNvbnN0IGFjY2VwdGVkRmlsZXMgPSBbXVxuICAgIGNvbnN0IHJlamVjdGVkRmlsZXMgPSBbXVxuXG4gICAgLy8gU3RvcCBkZWZhdWx0IGJyb3dzZXIgYmVoYXZpb3JcbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gUmVzZXQgdGhlIGNvdW50ZXIgYWxvbmcgd2l0aCB0aGUgZHJhZyBvbiBhIGRyb3AuXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IFtdXG4gICAgdGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUgPSBmYWxzZVxuXG4gICAgZmlsZUxpc3QuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGlmICghZGlzYWJsZVByZXZpZXcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmaWxlLnByZXZpZXcgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgcHJldmlldyBmb3IgZmlsZScsIGZpbGUsIGVycikgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmlsZUFjY2VwdGVkKGZpbGUsIGFjY2VwdCkgJiZcbiAgICAgICAgZmlsZU1hdGNoU2l6ZShmaWxlLCB0aGlzLnByb3BzLm1heFNpemUsIHRoaXMucHJvcHMubWluU2l6ZSlcbiAgICAgICkge1xuICAgICAgICBhY2NlcHRlZEZpbGVzLnB1c2goZmlsZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdGVkRmlsZXMucHVzaChmaWxlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAvLyBpZiBub3QgaW4gbXVsdGkgbW9kZSBhZGQgYW55IGV4dHJhIGFjY2VwdGVkIGZpbGVzIHRvIHJlamVjdGVkLlxuICAgICAgLy8gVGhpcyB3aWxsIGFsbG93IGVuZCB1c2VycyB0byBlYXNpbHkgaWdub3JlIGEgbXVsdGkgZmlsZSBkcm9wIGluIFwic2luZ2xlXCIgbW9kZS5cbiAgICAgIHJlamVjdGVkRmlsZXMucHVzaCguLi5hY2NlcHRlZEZpbGVzLnNwbGljZSgxKSlcbiAgICB9XG5cbiAgICBpZiAob25Ecm9wKSB7XG4gICAgICBvbkRyb3AuY2FsbCh0aGlzLCBhY2NlcHRlZEZpbGVzLCByZWplY3RlZEZpbGVzLCBldnQpXG4gICAgfVxuXG4gICAgaWYgKHJlamVjdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BSZWplY3RlZCkge1xuICAgICAgb25Ecm9wUmVqZWN0ZWQuY2FsbCh0aGlzLCByZWplY3RlZEZpbGVzLCBldnQpXG4gICAgfVxuXG4gICAgaWYgKGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBvbkRyb3BBY2NlcHRlZCkge1xuICAgICAgb25Ecm9wQWNjZXB0ZWQuY2FsbCh0aGlzLCBhY2NlcHRlZEZpbGVzLCBldnQpXG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgZmlsZXMgdmFsdWVcbiAgICB0aGlzLmRyYWdnZWRGaWxlcyA9IG51bGxcblxuICAgIC8vIFJlc2V0IGRyYWcgc3RhdGVcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gICAgICBkcmFnZ2VkRmlsZXM6IFtdLFxuICAgICAgYWNjZXB0ZWRGaWxlcyxcbiAgICAgIHJlamVjdGVkRmlsZXNcbiAgICB9KVxuICB9XG5cbiAgb25DbGljayhldnQpIHtcbiAgICBjb25zdCB7IG9uQ2xpY2ssIGRpc2FibGVDbGljayB9ID0gdGhpcy5wcm9wc1xuICAgIGlmICghZGlzYWJsZUNsaWNrKSB7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgb25DbGljay5jYWxsKHRoaXMsIGV2dClcbiAgICAgIH1cblxuICAgICAgLy8gaW4gSUUxMS9FZGdlIHRoZSBmaWxlLWJyb3dzZXIgZGlhbG9nIGlzIGJsb2NraW5nLCBlbnN1cmUgdGhpcyBpcyBiZWhpbmQgc2V0VGltZW91dFxuICAgICAgLy8gdGhpcyBpcyBzbyByZWFjdCBjYW4gaGFuZGxlIHN0YXRlIGNoYW5nZXMgaW4gdGhlIG9uQ2xpY2sgcHJvcCBhYm92ZSBhYm92ZVxuICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtZHJvcHpvbmUvcmVhY3QtZHJvcHpvbmUvaXNzdWVzLzQ1MFxuICAgICAgaWYgKGlzSWVPckVkZ2UoKSkge1xuICAgICAgICBzZXRUaW1lb3V0KHRoaXMub3Blbi5iaW5kKHRoaXMpLCAwKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGVuKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbklucHV0RWxlbWVudENsaWNrKGV2dCkge1xuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGlmICh0aGlzLnByb3BzLmlucHV0UHJvcHMgJiYgdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2xpY2spIHtcbiAgICAgIHRoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNsaWNrKClcbiAgICB9XG4gIH1cblxuICBvbkZpbGVEaWFsb2dDYW5jZWwoKSB7XG4gICAgLy8gdGltZW91dCB3aWxsIG5vdCByZWNvZ25pemUgY29udGV4dCBvZiB0aGlzIG1ldGhvZFxuICAgIGNvbnN0IHsgb25GaWxlRGlhbG9nQ2FuY2VsIH0gPSB0aGlzLnByb3BzXG4gICAgLy8gZXhlY3V0ZSB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBGaWxlRGlhbG9nIGlzIG9wZW5lZCBpbiB0aGUgYnJvd3NlclxuICAgIGlmICh0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZpbGVJbnB1dEVsICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBSZXR1cm5zIGFuIG9iamVjdCBhcyBGaWxlTGlzdFxuICAgICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IHRoaXMuZmlsZUlucHV0RWxcblxuICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvbkZpbGVEaWFsb2dDYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbkZpbGVEaWFsb2dDYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9LCAzMDApXG4gICAgfVxuICB9XG5cbiAgc2V0UmVmKHJlZikge1xuICAgIHRoaXMubm9kZSA9IHJlZlxuICB9XG5cbiAgc2V0UmVmcyhyZWYpIHtcbiAgICB0aGlzLmZpbGVJbnB1dEVsID0gcmVmXG4gIH1cbiAgLyoqXG4gICAqIE9wZW4gc3lzdGVtIGZpbGUgdXBsb2FkIGRpYWxvZy5cbiAgICpcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgb3BlbigpIHtcbiAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IHRydWVcbiAgICB0aGlzLmZpbGVJbnB1dEVsLnZhbHVlID0gbnVsbFxuICAgIHRoaXMuZmlsZUlucHV0RWwuY2xpY2soKVxuICB9XG5cbiAgcmVuZGVyQ2hpbGRyZW4gPSAoY2hpbGRyZW4sIGlzRHJhZ0FjdGl2ZSwgaXNEcmFnQWNjZXB0LCBpc0RyYWdSZWplY3QpID0+IHtcbiAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gY2hpbGRyZW4oe1xuICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICBpc0RyYWdBY3RpdmUsXG4gICAgICAgIGlzRHJhZ0FjY2VwdCxcbiAgICAgICAgaXNEcmFnUmVqZWN0XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW5cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY2NlcHQsXG4gICAgICBhY2NlcHRDbGFzc05hbWUsXG4gICAgICBhY3RpdmVDbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzYWJsZWRDbGFzc05hbWUsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgbXVsdGlwbGUsXG4gICAgICBuYW1lLFxuICAgICAgcmVqZWN0Q2xhc3NOYW1lLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzXG5cbiAgICBsZXQge1xuICAgICAgYWNjZXB0U3R5bGUsXG4gICAgICBhY3RpdmVTdHlsZSxcbiAgICAgIGNsYXNzTmFtZSA9ICcnLFxuICAgICAgZGlzYWJsZWRTdHlsZSxcbiAgICAgIHJlamVjdFN0eWxlLFxuICAgICAgc3R5bGUsXG4gICAgICAuLi5wcm9wcyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1jb25zdFxuICAgIH0gPSByZXN0XG5cbiAgICBjb25zdCB7IGlzRHJhZ0FjdGl2ZSwgZHJhZ2dlZEZpbGVzIH0gPSB0aGlzLnN0YXRlXG4gICAgY29uc3QgZmlsZXNDb3VudCA9IGRyYWdnZWRGaWxlcy5sZW5ndGhcbiAgICBjb25zdCBpc011bHRpcGxlQWxsb3dlZCA9IG11bHRpcGxlIHx8IGZpbGVzQ291bnQgPD0gMVxuICAgIGNvbnN0IGlzRHJhZ0FjY2VwdCA9IGZpbGVzQ291bnQgPiAwICYmIGFsbEZpbGVzQWNjZXB0ZWQoZHJhZ2dlZEZpbGVzLCB0aGlzLnByb3BzLmFjY2VwdClcbiAgICBjb25zdCBpc0RyYWdSZWplY3QgPSBmaWxlc0NvdW50ID4gMCAmJiAoIWlzRHJhZ0FjY2VwdCB8fCAhaXNNdWx0aXBsZUFsbG93ZWQpXG4gICAgY29uc3Qgbm9TdHlsZXMgPVxuICAgICAgIWNsYXNzTmFtZSAmJiAhc3R5bGUgJiYgIWFjdGl2ZVN0eWxlICYmICFhY2NlcHRTdHlsZSAmJiAhcmVqZWN0U3R5bGUgJiYgIWRpc2FibGVkU3R5bGVcblxuICAgIGlmIChpc0RyYWdBY3RpdmUgJiYgYWN0aXZlQ2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gJyAnICsgYWN0aXZlQ2xhc3NOYW1lXG4gICAgfVxuICAgIGlmIChpc0RyYWdBY2NlcHQgJiYgYWNjZXB0Q2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gJyAnICsgYWNjZXB0Q2xhc3NOYW1lXG4gICAgfVxuICAgIGlmIChpc0RyYWdSZWplY3QgJiYgcmVqZWN0Q2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gJyAnICsgcmVqZWN0Q2xhc3NOYW1lXG4gICAgfVxuICAgIGlmIChkaXNhYmxlZCAmJiBkaXNhYmxlZENsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9ICcgJyArIGRpc2FibGVkQ2xhc3NOYW1lXG4gICAgfVxuXG4gICAgaWYgKG5vU3R5bGVzKSB7XG4gICAgICBzdHlsZSA9IHN0eWxlcy5kZWZhdWx0XG4gICAgICBhY3RpdmVTdHlsZSA9IHN0eWxlcy5hY3RpdmVcbiAgICAgIGFjY2VwdFN0eWxlID0gc3R5bGUuYWN0aXZlXG4gICAgICByZWplY3RTdHlsZSA9IHN0eWxlcy5yZWplY3RlZFxuICAgICAgZGlzYWJsZWRTdHlsZSA9IHN0eWxlcy5kaXNhYmxlZFxuICAgIH1cblxuICAgIGxldCBhcHBsaWVkU3R5bGUgPSB7IC4uLnN0eWxlIH1cbiAgICBpZiAoYWN0aXZlU3R5bGUgJiYgaXNEcmFnQWN0aXZlKSB7XG4gICAgICBhcHBsaWVkU3R5bGUgPSB7XG4gICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAuLi5hY3RpdmVTdHlsZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWNjZXB0U3R5bGUgJiYgaXNEcmFnQWNjZXB0KSB7XG4gICAgICBhcHBsaWVkU3R5bGUgPSB7XG4gICAgICAgIC4uLmFwcGxpZWRTdHlsZSxcbiAgICAgICAgLi4uYWNjZXB0U3R5bGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlamVjdFN0eWxlICYmIGlzRHJhZ1JlamVjdCkge1xuICAgICAgYXBwbGllZFN0eWxlID0ge1xuICAgICAgICAuLi5hcHBsaWVkU3R5bGUsXG4gICAgICAgIC4uLnJlamVjdFN0eWxlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkaXNhYmxlZFN0eWxlICYmIGRpc2FibGVkKSB7XG4gICAgICBhcHBsaWVkU3R5bGUgPSB7XG4gICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAuLi5kaXNhYmxlZFN0eWxlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRBdHRyaWJ1dGVzID0ge1xuICAgICAgYWNjZXB0LFxuICAgICAgZGlzYWJsZWQsXG4gICAgICB0eXBlOiAnZmlsZScsXG4gICAgICBzdHlsZTogeyBkaXNwbGF5OiAnbm9uZScgfSxcbiAgICAgIG11bHRpcGxlOiBzdXBwb3J0TXVsdGlwbGUgJiYgbXVsdGlwbGUsXG4gICAgICByZWY6IHRoaXMuc2V0UmVmcyxcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uRHJvcCxcbiAgICAgIGF1dG9Db21wbGV0ZTogJ29mZidcbiAgICB9XG5cbiAgICBpZiAobmFtZSAmJiBuYW1lLmxlbmd0aCkge1xuICAgICAgaW5wdXRBdHRyaWJ1dGVzLm5hbWUgPSBuYW1lXG4gICAgfVxuXG4gICAgLy8gRGVzdHJ1Y3R1cmUgY3VzdG9tIHByb3BzIGF3YXkgZnJvbSBwcm9wcyB1c2VkIGZvciB0aGUgZGl2IGVsZW1lbnRcbiAgICBjb25zdCB7XG4gICAgICBhY2NlcHRlZEZpbGVzLFxuICAgICAgcHJldmVudERyb3BPbkRvY3VtZW50LFxuICAgICAgZGlzYWJsZVByZXZpZXcsXG4gICAgICBkaXNhYmxlQ2xpY2ssXG4gICAgICBvbkRyb3BBY2NlcHRlZCxcbiAgICAgIG9uRHJvcFJlamVjdGVkLFxuICAgICAgb25GaWxlRGlhbG9nQ2FuY2VsLFxuICAgICAgbWF4U2l6ZSxcbiAgICAgIG1pblNpemUsXG4gICAgICAuLi5kaXZQcm9wc1xuICAgIH0gPSBwcm9wc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXthcHBsaWVkU3R5bGV9XG4gICAgICAgIHsuLi5kaXZQcm9wcyAvKiBleHBhbmQgdXNlciBwcm92aWRlZCBwcm9wcyBmaXJzdCBzbyBldmVudCBoYW5kbGVycyBhcmUgbmV2ZXIgb3ZlcnJpZGRlbiAqL31cbiAgICAgICAgb25DbGljaz17dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkNsaWNrKX1cbiAgICAgICAgb25EcmFnU3RhcnQ9e3RoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnU3RhcnQpfVxuICAgICAgICBvbkRyYWdFbnRlcj17dGhpcy5jb21wb3NlSGFuZGxlcnModGhpcy5vbkRyYWdFbnRlcil9XG4gICAgICAgIG9uRHJhZ092ZXI9e3RoaXMuY29tcG9zZUhhbmRsZXJzKHRoaXMub25EcmFnT3Zlcil9XG4gICAgICAgIG9uRHJhZ0xlYXZlPXt0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJhZ0xlYXZlKX1cbiAgICAgICAgb25Ecm9wPXt0aGlzLmNvbXBvc2VIYW5kbGVycyh0aGlzLm9uRHJvcCl9XG4gICAgICAgIHJlZj17dGhpcy5zZXRSZWZ9XG4gICAgICAgIGFyaWEtZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJDaGlsZHJlbihjaGlsZHJlbiwgaXNEcmFnQWN0aXZlLCBpc0RyYWdBY2NlcHQsIGlzRHJhZ1JlamVjdCl9XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHsuLi5pbnB1dFByb3BzIC8qIGV4cGFuZCB1c2VyIHByb3ZpZGVkIGlucHV0UHJvcHMgZmlyc3Qgc28gaW5wdXRBdHRyaWJ1dGVzIG92ZXJyaWRlIHRoZW0gKi99XG4gICAgICAgICAgey4uLmlucHV0QXR0cmlidXRlc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wem9uZVxuXG5Ecm9wem9uZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBBbGxvdyBzcGVjaWZpYyB0eXBlcyBvZiBmaWxlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9va29uZXQvYXR0ci1hY2NlcHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqIEtlZXAgaW4gbWluZCB0aGF0IG1pbWUgdHlwZSBkZXRlcm1pbmF0aW9uIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgcGxhdGZvcm1zLiBDU1YgZmlsZXMsXG4gICAqIGZvciBleGFtcGxlLCBhcmUgcmVwb3J0ZWQgYXMgdGV4dC9wbGFpbiB1bmRlciBtYWNPUyBidXQgYXMgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIHVuZGVyXG4gICAqIFdpbmRvd3MuIEluIHNvbWUgY2FzZXMgdGhlcmUgbWlnaHQgbm90IGJlIGEgbWltZSB0eXBlIHNldCBhdCBhbGwuXG4gICAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy8yNzZcbiAgICovXG4gIGFjY2VwdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyldKSxcblxuICAvKipcbiAgICogQ29udGVudHMgb2YgdGhlIGRyb3B6b25lXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5mdW5jXSksXG5cbiAgLyoqXG4gICAqIERpc2FsbG93IGNsaWNraW5nIG9uIHRoZSBkcm9wem9uZSBjb250YWluZXIgdG8gb3BlbiBmaWxlIGRpYWxvZ1xuICAgKi9cbiAgZGlzYWJsZUNsaWNrOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlL2Rpc2FibGUgdGhlIGRyb3B6b25lIGVudGlyZWx5XG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIHByZXZpZXcgZ2VuZXJhdGlvblxuICAgKi9cbiAgZGlzYWJsZVByZXZpZXc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBmYWxzZSwgYWxsb3cgZHJvcHBlZCBpdGVtcyB0byB0YWtlIG92ZXIgdGhlIGN1cnJlbnQgYnJvd3NlciB3aW5kb3dcbiAgICovXG4gIHByZXZlbnREcm9wT25Eb2N1bWVudDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFBhc3MgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHRvIHRoZSBgPGlucHV0IHR5cGU9XCJmaWxlXCIvPmAgdGFnXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBBbGxvdyBkcm9wcGluZyBtdWx0aXBsZSBmaWxlc1xuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBgbmFtZWAgYXR0cmlidXRlIGZvciB0aGUgaW5wdXQgdGFnXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtYXhTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtaW5TaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogY2xhc3NOYW1lIHRvIGFwcGx5IHdoZW4gZHJhZyBpcyBhY3RpdmVcbiAgICovXG4gIGFjdGl2ZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogY2xhc3NOYW1lIHRvIGFwcGx5IHdoZW4gZHJvcCB3aWxsIGJlIGFjY2VwdGVkXG4gICAqL1xuICBhY2NlcHRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIGNsYXNzTmFtZSB0byBhcHBseSB3aGVuIGRyb3Agd2lsbCBiZSByZWplY3RlZFxuICAgKi9cbiAgcmVqZWN0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBjbGFzc05hbWUgdG8gYXBwbHkgd2hlbiBkcm9wem9uZSBpcyBkaXNhYmxlZFxuICAgKi9cbiAgZGlzYWJsZWRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHlcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5IHdoZW4gZHJhZyBpcyBhY3RpdmVcbiAgICovXG4gIGFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBDU1Mgc3R5bGVzIHRvIGFwcGx5IHdoZW4gZHJvcCB3aWxsIGJlIGFjY2VwdGVkXG4gICAqL1xuICBhY2NlcHRTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQ1NTIHN0eWxlcyB0byBhcHBseSB3aGVuIGRyb3Agd2lsbCBiZSByZWplY3RlZFxuICAgKi9cbiAgcmVqZWN0U3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIENTUyBzdHlsZXMgdG8gYXBwbHkgd2hlbiBkcm9wem9uZSBpcyBkaXNhYmxlZFxuICAgKi9cbiAgZGlzYWJsZWRTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogb25DbGljayBjYWxsYmFja1xuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcCBjYWxsYmFja1xuICAgKi9cbiAgb25Ecm9wOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25Ecm9wQWNjZXB0ZWQgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJvcEFjY2VwdGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25Ecm9wUmVqZWN0ZWQgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJvcFJlamVjdGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25EcmFnU3RhcnQgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ1N0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25EcmFnRW50ZXIgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ0VudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25EcmFnT3ZlciBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnT3ZlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ0xlYXZlIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYSBjYWxsYmFjayBvbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvbiBvZiB0aGUgZmlsZSBkaWFsb2dcbiAgICovXG4gIG9uRmlsZURpYWxvZ0NhbmNlbDogUHJvcFR5cGVzLmZ1bmNcbn1cblxuRHJvcHpvbmUuZGVmYXVsdFByb3BzID0ge1xuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6IHRydWUsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgZGlzYWJsZVByZXZpZXc6IGZhbHNlLFxuICBkaXNhYmxlQ2xpY2s6IGZhbHNlLFxuICBtdWx0aXBsZTogdHJ1ZSxcbiAgbWF4U2l6ZTogSW5maW5pdHksXG4gIG1pblNpemU6IDBcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9pbmRleC5qcyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xX187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifVxuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIlByb3BUeXBlc1wiLFwiY29tbW9uanMyXCI6XCJwcm9wLXR5cGVzXCIsXCJjb21tb25qc1wiOlwicHJvcC10eXBlc1wiLFwiYW1kXCI6XCJwcm9wLXR5cGVzXCJ9XG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBhY2NlcHRzIGZyb20gJ2F0dHItYWNjZXB0J1xuXG5leHBvcnQgY29uc3Qgc3VwcG9ydE11bHRpcGxlID1cbiAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFbGVtZW50XG4gICAgPyAnbXVsdGlwbGUnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICA6IHRydWVcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFUcmFuc2Zlckl0ZW1zKGV2ZW50KSB7XG4gIGxldCBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBbXVxuICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgY29uc3QgZHQgPSBldmVudC5kYXRhVHJhbnNmZXJcbiAgICBpZiAoZHQuZmlsZXMgJiYgZHQuZmlsZXMubGVuZ3RoKSB7XG4gICAgICBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBkdC5maWxlc1xuICAgIH0gZWxzZSBpZiAoZHQuaXRlbXMgJiYgZHQuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAvLyBEdXJpbmcgdGhlIGRyYWcgZXZlbiB0aGUgZGF0YVRyYW5zZmVyLmZpbGVzIGlzIG51bGxcbiAgICAgIC8vIGJ1dCBDaHJvbWUgaW1wbGVtZW50cyBzb21lIGRyYWcgc3RvcmUsIHdoaWNoIGlzIGFjY2VzaWJsZSB2aWEgZGF0YVRyYW5zZmVyLml0ZW1zXG4gICAgICBkYXRhVHJhbnNmZXJJdGVtc0xpc3QgPSBkdC5pdGVtc1xuICAgIH1cbiAgfSBlbHNlIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmZpbGVzKSB7XG4gICAgZGF0YVRyYW5zZmVySXRlbXNMaXN0ID0gZXZlbnQudGFyZ2V0LmZpbGVzXG4gIH1cbiAgLy8gQ29udmVydCBmcm9tIERhdGFUcmFuc2Zlckl0ZW1zTGlzdCB0byB0aGUgbmF0aXZlIEFycmF5XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkYXRhVHJhbnNmZXJJdGVtc0xpc3QpXG59XG5cbi8vIEZpcmVmb3ggdmVyc2lvbnMgcHJpb3IgdG8gNTMgcmV0dXJuIGEgYm9ndXMgTUlNRSB0eXBlIGZvciBldmVyeSBmaWxlIGRyYWcsIHNvIGRyYWdvdmVycyB3aXRoXG4vLyB0aGF0IE1JTUUgdHlwZSB3aWxsIGFsd2F5cyBiZSBhY2NlcHRlZFxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpIHtcbiAgcmV0dXJuIGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtbW96LWZpbGUnIHx8IGFjY2VwdHMoZmlsZSwgYWNjZXB0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsZU1hdGNoU2l6ZShmaWxlLCBtYXhTaXplLCBtaW5TaXplKSB7XG4gIHJldHVybiBmaWxlLnNpemUgPD0gbWF4U2l6ZSAmJiBmaWxlLnNpemUgPj0gbWluU2l6ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsRmlsZXNBY2NlcHRlZChmaWxlcywgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlcy5ldmVyeShmaWxlID0+IGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpKVxufVxuXG4vLyBhbGxvdyB0aGUgZW50aXJlIGRvY3VtZW50IHRvIGJlIGEgZHJhZyB0YXJnZXRcbmV4cG9ydCBmdW5jdGlvbiBvbkRvY3VtZW50RHJhZ092ZXIoZXZ0KSB7XG4gIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG59XG5cbmZ1bmN0aW9uIGlzSWUodXNlckFnZW50KSB7XG4gIHJldHVybiB1c2VyQWdlbnQuaW5kZXhPZignTVNJRScpICE9PSAtMSB8fCB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKSAhPT0gLTFcbn1cblxuZnVuY3Rpb24gaXNFZGdlKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ0VkZ2UvJykgIT09IC0xXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0llT3JFZGdlKHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gIHJldHVybiBpc0llKHVzZXJBZ2VudCkgfHwgaXNFZGdlKHVzZXJBZ2VudClcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy9pbmRleC5qcyIsIm1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7aWYocltlXSlyZXR1cm4gcltlXS5leHBvcnRzO3ZhciBvPXJbZV09e2V4cG9ydHM6e30saWQ6ZSxsb2FkZWQ6ITF9O3JldHVybiB0W2VdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLG4pLG8ubG9hZGVkPSEwLG8uZXhwb3J0c312YXIgcj17fTtyZXR1cm4gbi5tPXQsbi5jPXIsbi5wPVwiXCIsbigwKX0oW2Z1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjtuLl9fZXNNb2R1bGU9ITAscig4KSxyKDkpLG5bXCJkZWZhdWx0XCJdPWZ1bmN0aW9uKHQsbil7aWYodCYmbil7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgcj1BcnJheS5pc0FycmF5KG4pP246bi5zcGxpdChcIixcIiksZT10Lm5hbWV8fFwiXCIsbz10LnR5cGV8fFwiXCIsaT1vLnJlcGxhY2UoL1xcLy4qJC8sXCJcIik7cmV0dXJue3Y6ci5zb21lKGZ1bmN0aW9uKHQpe3ZhciBuPXQudHJpbSgpO3JldHVyblwiLlwiPT09bi5jaGFyQXQoMCk/ZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKG4udG9Mb3dlckNhc2UoKSk6L1xcL1xcKiQvLnRlc3Qobik/aT09PW4ucmVwbGFjZSgvXFwvLiokLyxcIlwiKTpvPT09bn0pfX0oKTtpZihcIm9iamVjdFwiPT10eXBlb2YgcilyZXR1cm4gci52fXJldHVybiEwfSx0LmV4cG9ydHM9bltcImRlZmF1bHRcIl19LGZ1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMS4yLjJcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxuKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMiksbz1yKDEpLGk9cig0KSx1PXIoMTkpLGM9XCJwcm90b3R5cGVcIixmPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpfX0scz1mdW5jdGlvbih0LG4scil7dmFyIGEscCxsLHksZD10JnMuRyxoPXQmcy5QLHY9ZD9lOnQmcy5TP2Vbbl18fChlW25dPXt9KTooZVtuXXx8e30pW2NdLHg9ZD9vOm9bbl18fChvW25dPXt9KTtkJiYocj1uKTtmb3IoYSBpbiByKXA9ISh0JnMuRikmJnYmJmEgaW4gdixsPShwP3Y6cilbYV0seT10JnMuQiYmcD9mKGwsZSk6aCYmXCJmdW5jdGlvblwiPT10eXBlb2YgbD9mKEZ1bmN0aW9uLmNhbGwsbCk6bCx2JiYhcCYmdSh2LGEsbCkseFthXSE9bCYmaSh4LGEseSksaCYmKCh4W2NdfHwoeFtjXT17fSkpW2FdPWwpfTtlLmNvcmU9byxzLkY9MSxzLkc9MixzLlM9NCxzLlA9OCxzLkI9MTYscy5XPTMyLHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KSxvPXIoMTgpO3QuZXhwb3J0cz1yKDIyKT9mdW5jdGlvbih0LG4scil7cmV0dXJuIGUuc2V0RGVzYyh0LG4sbygxLHIpKX06ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0W25dPXIsdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9T2JqZWN0O3QuZXhwb3J0cz17Y3JlYXRlOnIuY3JlYXRlLGdldFByb3RvOnIuZ2V0UHJvdG90eXBlT2YsaXNFbnVtOnt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLGdldERlc2M6ci5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isc2V0RGVzYzpyLmRlZmluZVByb3BlcnR5LHNldERlc2NzOnIuZGVmaW5lUHJvcGVydGllcyxnZXRLZXlzOnIua2V5cyxnZXROYW1lczpyLmdldE93blByb3BlcnR5TmFtZXMsZ2V0U3ltYm9sczpyLmdldE93blByb3BlcnR5U3ltYm9scyxlYWNoOltdLmZvckVhY2h9fSxmdW5jdGlvbih0LG4pe3ZhciByPTAsZT1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09dD9cIlwiOnQsXCIpX1wiLCgrK3IrZSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDIwKShcIndrc1wiKSxvPXIoMikuU3ltYm9sO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZVt0XXx8KGVbdF09byYmb1t0XXx8KG98fHIoNikpKFwiU3ltYm9sLlwiK3QpKX19LGZ1bmN0aW9uKHQsbixyKXtyKDI2KSx0LmV4cG9ydHM9cigxKS5BcnJheS5zb21lfSxmdW5jdGlvbih0LG4scil7cigyNSksdC5leHBvcnRzPXIoMSkuU3RyaW5nLmVuZHNXaXRofSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbil7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtpZihlKHQpLHZvaWQgMD09PW4pcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbChuLHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsZSl7cmV0dXJuIHQuY2FsbChuLHIsZSl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixlLG8pe3JldHVybiB0LmNhbGwobixyLGUsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KG4sYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PXQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiK3QpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj0vLi87dHJ5e1wiLy4vXCJbdF0obil9Y2F0Y2goZSl7dHJ5e3JldHVybiBuW3IoNykoXCJtYXRjaFwiKV09ITEsIVwiLy4vXCJbdF0obil9Y2F0Y2gobyl7fX1yZXR1cm4hMH19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaChuKXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdD9udWxsIT09dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTYpLG89cigxMSksaT1yKDcpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBlKHQpJiYodm9pZCAwIT09KG49dFtpXSk/ISFuOlwiUmVnRXhwXCI9PW8odCkpfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6bn19fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyKSxvPXIoNCksaT1yKDYpKFwic3JjXCIpLHU9XCJ0b1N0cmluZ1wiLGM9RnVuY3Rpb25bdV0sZj0oXCJcIitjKS5zcGxpdCh1KTtyKDEpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbCh0KX0sKHQuZXhwb3J0cz1mdW5jdGlvbih0LG4scix1KXtcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYobyhyLGksdFtuXT9cIlwiK3Rbbl06Zi5qb2luKFN0cmluZyhuKSkpLFwibmFtZVwiaW4gcnx8KHIubmFtZT1uKSksdD09PWU/dFtuXT1yOih1fHxkZWxldGUgdFtuXSxvKHQsbixyKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsdSxmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJnRoaXNbaV18fGMuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyKSxvPVwiX19jb3JlLWpzX3NoYXJlZF9fXCIsaT1lW29dfHwoZVtvXT17fSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpW3RdfHwoaVt0XT17fSl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxNyksbz1yKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUobikpdGhyb3cgVHlwZUVycm9yKFwiU3RyaW5nI1wiK3IrXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO3JldHVybiBTdHJpbmcobyh0KSl9fSxmdW5jdGlvbih0LG4scil7dC5leHBvcnRzPSFyKDE1KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuKXt2YXIgcj1NYXRoLmNlaWwsZT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP2U6cikodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyMyksbz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD9vKGUodCksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDMpLG89cigyNCksaT1yKDIxKSx1PVwiZW5kc1dpdGhcIixjPVwiXCJbdV07ZShlLlArZS5GKnIoMTQpKHUpLFwiU3RyaW5nXCIse2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBuPWkodGhpcyx0LHUpLHI9YXJndW1lbnRzLGU9ci5sZW5ndGg+MT9yWzFdOnZvaWQgMCxmPW8obi5sZW5ndGgpLHM9dm9pZCAwPT09ZT9mOk1hdGgubWluKG8oZSksZiksYT1TdHJpbmcodCk7cmV0dXJuIGM/Yy5jYWxsKG4sYSxzKTpuLnNsaWNlKHMtYS5sZW5ndGgscyk9PT1hfX0pfSxmdW5jdGlvbih0LG4scil7dmFyIGU9cig1KSxvPXIoMyksaT1yKDEpLkFycmF5fHxBcnJheSx1PXt9LGM9ZnVuY3Rpb24odCxuKXtlLmVhY2guY2FsbCh0LnNwbGl0KFwiLFwiKSxmdW5jdGlvbih0KXt2b2lkIDA9PW4mJnQgaW4gaT91W3RdPWlbdF06dCBpbltdJiYodVt0XT1yKDEyKShGdW5jdGlvbi5jYWxsLFtdW3RdLG4pKX0pfTtjKFwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllc1wiLDEpLGMoXCJpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzXCIsMyksYyhcImpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIpLG8oby5TLFwiQXJyYXlcIix1KX1dKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydCBkZWZhdWx0IHtcbiAgcmVqZWN0ZWQ6IHtcbiAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJDb2xvcjogJyNjNjYnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWUnXG4gIH0sXG4gIGRpc2FibGVkOiB7XG4gICAgb3BhY2l0eTogMC41XG4gIH0sXG4gIGFjdGl2ZToge1xuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIGJvcmRlckNvbG9yOiAnIzZjNicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZSdcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHdpZHRoOiAyMDAsXG4gICAgaGVpZ2h0OiAyMDAsXG4gICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgYm9yZGVyQ29sb3I6ICcjNjY2JyxcbiAgICBib3JkZXJTdHlsZTogJ2Rhc2hlZCcsXG4gICAgYm9yZGVyUmFkaXVzOiA1XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy9zdHlsZXMuanMiXSwic291cmNlUm9vdCI6IiJ9
File without changes
package/package.json CHANGED
@@ -18,7 +18,6 @@
18
18
  "commitmsg": "commitlint -e",
19
19
  "precommit": "lint-staged",
20
20
  "prepublish": "npm run build && npm run test:umd && npm run test:es",
21
- "semantic-release": "semantic-release pre && npm publish && semantic-release post",
22
21
  "logo": "cd logo && sketchtool export artboards logo.sketch",
23
22
  "imagemin": "imagemin --out-dir=logo --plugin=pngquant --plugin=svgo",
24
23
  "size": "size-limit",
@@ -114,7 +113,6 @@
114
113
  "react-styleguidist": "^6.0.23",
115
114
  "react-test-renderer": "^15.6.1",
116
115
  "rimraf": "^2.5.2",
117
- "semantic-release": "^7.0.2",
118
116
  "sinon": "^3.2.1",
119
117
  "size-limit": "^0.11.0",
120
118
  "style-loader": "^0.18.2",
@@ -125,5 +123,5 @@
125
123
  "path": "@commitlint/prompt"
126
124
  }
127
125
  },
128
- "version": "4.2.7"
129
- }
126
+ "version": "4.2.11"
127
+ }
package/src/index.js CHANGED
@@ -8,7 +8,8 @@ import {
8
8
  allFilesAccepted,
9
9
  fileMatchSize,
10
10
  onDocumentDragOver,
11
- getDataTransferItems
11
+ getDataTransferItems,
12
+ isIeOrEdge
12
13
  } from './utils'
13
14
  import styles from './utils/styles'
14
15
 
@@ -47,8 +48,7 @@ class Dropzone extends React.Component {
47
48
  document.addEventListener('drop', this.onDocumentDrop, false)
48
49
  }
49
50
  this.fileInputEl.addEventListener('click', this.onInputElementClick, false)
50
- // Tried implementing addEventListener, but didn't work out
51
- document.body.onfocus = this.onFileDialogCancel
51
+ window.addEventListener('focus', this.onFileDialogCancel, false)
52
52
  }
53
53
 
54
54
  componentWillUnmount() {
@@ -60,10 +60,7 @@ class Dropzone extends React.Component {
60
60
  if (this.fileInputEl != null) {
61
61
  this.fileInputEl.removeEventListener('click', this.onInputElementClick, false)
62
62
  }
63
- // Can be replaced with removeEventListener, if addEventListener works
64
- if (document != null) {
65
- document.body.onfocus = null
66
- }
63
+ window.removeEventListener('focus', this.onFileDialogCancel, false)
67
64
  }
68
65
 
69
66
  composeHandlers(handler) {
@@ -222,7 +219,11 @@ class Dropzone extends React.Component {
222
219
  // in IE11/Edge the file-browser dialog is blocking, ensure this is behind setTimeout
223
220
  // this is so react can handle state changes in the onClick prop above above
224
221
  // see: https://github.com/react-dropzone/react-dropzone/issues/450
225
- setTimeout(this.open.bind(this), 0)
222
+ if (isIeOrEdge()) {
223
+ setTimeout(this.open.bind(this), 0)
224
+ } else {
225
+ this.open()
226
+ }
226
227
  }
227
228
  }
228
229
 
@@ -239,11 +240,13 @@ class Dropzone extends React.Component {
239
240
  // execute the timeout only if the FileDialog is opened in the browser
240
241
  if (this.isFileDialogActive) {
241
242
  setTimeout(() => {
242
- // Returns an object as FileList
243
- const { files } = this.fileInputEl
243
+ if (this.fileInputEl != null) {
244
+ // Returns an object as FileList
245
+ const { files } = this.fileInputEl
244
246
 
245
- if (!files.length) {
246
- this.isFileDialogActive = false
247
+ if (!files.length) {
248
+ this.isFileDialogActive = false
249
+ }
247
250
  }
248
251
 
249
252
  if (typeof onFileDialogCancel === 'function') {
@@ -426,7 +429,7 @@ Dropzone.propTypes = {
426
429
  * Windows. In some cases there might not be a mime type set at all.
427
430
  * See: https://github.com/react-dropzone/react-dropzone/issues/276
428
431
  */
429
- accept: PropTypes.string,
432
+ accept: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),
430
433
 
431
434
  /**
432
435
  * Contents of the dropzone
@@ -439,8 +442,8 @@ Dropzone.propTypes = {
439
442
  disableClick: PropTypes.bool,
440
443
 
441
444
  /**
442
- * Enable/disable the dropzone entirely
443
- */
445
+ * Enable/disable the dropzone entirely
446
+ */
444
447
  disabled: PropTypes.bool,
445
448
 
446
449
  /**
@@ -469,12 +472,12 @@ Dropzone.propTypes = {
469
472
  name: PropTypes.string,
470
473
 
471
474
  /**
472
- * Maximum file size
475
+ * Maximum file size (in bytes)
473
476
  */
474
477
  maxSize: PropTypes.number,
475
478
 
476
479
  /**
477
- * Minimum file size
480
+ * Minimum file size (in bytes)
478
481
  */
479
482
  minSize: PropTypes.number,
480
483
 
@@ -484,22 +487,22 @@ Dropzone.propTypes = {
484
487
  className: PropTypes.string,
485
488
 
486
489
  /**
487
- * className for active state
490
+ * className to apply when drag is active
488
491
  */
489
492
  activeClassName: PropTypes.string,
490
493
 
491
494
  /**
492
- * className for accepted state
495
+ * className to apply when drop will be accepted
493
496
  */
494
497
  acceptClassName: PropTypes.string,
495
498
 
496
499
  /**
497
- * className for rejected state
500
+ * className to apply when drop will be rejected
498
501
  */
499
502
  rejectClassName: PropTypes.string,
500
503
 
501
504
  /**
502
- * className for disabled state
505
+ * className to apply when dropzone is disabled
503
506
  */
504
507
  disabledClassName: PropTypes.string,
505
508
 
package/src/index.spec.js CHANGED
@@ -969,10 +969,10 @@ describe('Dropzone', () => {
969
969
  expect(component.instance().open.callCount).toEqual(1)
970
970
 
971
971
  // Simulated DOM event - onfocus
972
- document.body.addEventListener('focus', () => {})
972
+ window.addEventListener('focus', () => {})
973
973
  const evt = document.createEvent('HTMLEvents')
974
974
  evt.initEvent('focus', false, true)
975
- document.body.dispatchEvent(evt)
975
+ window.dispatchEvent(evt)
976
976
 
977
977
  // setTimeout to match the event callback from actual Component
978
978
  setTimeout(() => {
@@ -993,7 +993,7 @@ describe('Dropzone', () => {
993
993
 
994
994
  const evt = document.createEvent('HTMLEvents')
995
995
  evt.initEvent('focus', false, true)
996
- document.body.dispatchEvent(evt)
996
+ window.dispatchEvent(evt)
997
997
 
998
998
  setTimeout(() => {
999
999
  expect(component.instance().isFileDialogActive).toEqual(false)
@@ -41,3 +41,15 @@ export function allFilesAccepted(files, accept) {
41
41
  export function onDocumentDragOver(evt) {
42
42
  evt.preventDefault()
43
43
  }
44
+
45
+ function isIe(userAgent) {
46
+ return userAgent.indexOf('MSIE') !== -1 || userAgent.indexOf('Trident/') !== -1
47
+ }
48
+
49
+ function isEdge(userAgent) {
50
+ return userAgent.indexOf('Edge/') !== -1
51
+ }
52
+
53
+ export function isIeOrEdge(userAgent = window.navigator.userAgent) {
54
+ return isIe(userAgent) || isEdge(userAgent)
55
+ }
@@ -1,4 +1,4 @@
1
- import { getDataTransferItems } from './'
1
+ import { getDataTransferItems, isIeOrEdge } from './'
2
2
 
3
3
  const files = [
4
4
  {
@@ -87,3 +87,32 @@ describe('getDataTransferItems', () => {
87
87
  expect(Object.keys(files[2])).toHaveLength(3)
88
88
  })
89
89
  })
90
+
91
+ describe('isIeOrEdge', () => {
92
+ it('should return true for IE10', () => {
93
+ const userAgent =
94
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)'
95
+
96
+ expect(isIeOrEdge(userAgent)).toBe(true)
97
+ })
98
+
99
+ it('should return true for IE11', () => {
100
+ const userAgent =
101
+ 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko'
102
+ expect(isIeOrEdge(userAgent)).toBe(true)
103
+ })
104
+
105
+ it('should return true for Edge', () => {
106
+ const userAgent =
107
+ 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16258'
108
+
109
+ expect(isIeOrEdge(userAgent)).toBe(true)
110
+ })
111
+
112
+ it('should return false for Chrome', () => {
113
+ const userAgent =
114
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'
115
+
116
+ expect(isIeOrEdge(userAgent)).toBe(false)
117
+ })
118
+ })
@@ -35,7 +35,7 @@ module.exports = {
35
35
  },
36
36
  {
37
37
  name: 'Opening File Dialog Programmatically',
38
- content: 'examples/File Dialog/Readme.md'
38
+ content: 'examples/FileDialog/Readme.md'
39
39
  },
40
40
  {
41
41
  name: 'Full Screen Dropzone',
package/webpack.config.js CHANGED
@@ -26,8 +26,18 @@ module.exports = env => {
26
26
  extensions: ['.js', '.json']
27
27
  },
28
28
  externals: {
29
- react: 'react',
30
- 'prop-types': 'prop-types'
29
+ react: {
30
+ root: 'React',
31
+ commonjs2: 'react',
32
+ commonjs: 'react',
33
+ amd: 'react'
34
+ },
35
+ 'prop-types': {
36
+ root: 'PropTypes',
37
+ commonjs2: 'prop-types',
38
+ commonjs: 'prop-types',
39
+ amd: 'prop-types'
40
+ }
31
41
  }
32
42
  }
33
43
  }