Skip to content

Instantly share code, notes, and snippets.

@airportyh
Created May 4, 2013 03:06
Show Gist options
  • Save airportyh/5515944 to your computer and use it in GitHub Desktop.
Save airportyh/5515944 to your computer and use it in GitHub Desktop.
An example inlined sourcemap
//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlcyI6WyIvVXNlcnMvYWlycG9ydHloL0hvbWUvQ29kZS9yb3Zlci9jb250ZW50c2NyaXB0L2luZGV4LmpzIiwiL1VzZXJzL2FpcnBvcnR5aC9Ib21lL0NvZGUvcm92ZXIvY29udGVudHNjcmlwdC9vZmZzZXRzLmpzIiwiL1VzZXJzL2FpcnBvcnR5aC9Ib21lL0NvZGUvcm92ZXIvY29udGVudHNjcmlwdC91bmlxdWVfc2VsZWN0b3IuanMiLCIvVXNlcnMvYWlycG9ydHloL0hvbWUvQ29kZS9yb3Zlci9jb250ZW50c2NyaXB0L2Nocm9tZWV4dC5qcyIsIi91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9pbnNlcnQtbW9kdWxlLWdsb2JhbHMvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIi91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXJlc29sdmUvYnVpbHRpbi9ldmVudHMuanMiLCIvVXNlcnMvYWlycG9ydHloL0hvbWUvQ29kZS9yb3Zlci9jb250ZW50c2NyaXB0L2ZyaWVuZGx5X3RhZy5qcyIsIi9Vc2Vycy9haXJwb3J0eWgvSG9tZS9Db2RlL3JvdmVyL2NvbnRlbnRzY3JpcHQvaW50ZXJhY3RpdmVfbW9kZS5qcyIsIi9Vc2Vycy9haXJwb3J0eWgvSG9tZS9Db2RlL3JvdmVyL2NvbnRlbnRzY3JpcHQvZGltZW5zaW9ucy5qcyIsIi9Vc2Vycy9haXJwb3J0eWgvSG9tZS9Db2RlL3JvdmVyL2NvbnRlbnRzY3JpcHQvZXh0ZW5kLmpzIiwiL1VzZXJzL2FpcnBvcnR5aC9Ib21lL0NvZGUvcm92ZXIvY29udGVudHNjcmlwdC9kb2N1bWVudF9saXN0ZW5lci5qcyIsIi9Vc2Vycy9haXJwb3J0eWgvSG9tZS9Db2RlL3JvdmVyL2NvbnRlbnRzY3JpcHQvY2FwaXRhbGl6ZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdldE9mZnNldHMgPSByZXF1aXJlKCcuL29mZnNldHMnKVxudmFyIGZyaWVuZGx5VGFnTmFtZSA9IHJlcXVpcmUoJy4vZnJpZW5kbHlfdGFnJylcbnZhciB1bmlxdWVTZWxlY3RvciA9IHJlcXVpcmUoJy4vdW5pcXVlX3NlbGVjdG9yJylcbnZhciBjaHJvbWVleHQgPSByZXF1aXJlKCcuL2Nocm9tZWV4dCcpXG52YXIgSW50ZXJhY3RpdmVNb2RlID0gcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZV9tb2RlJylcblxudmFyIHNlbGVjdGVkRWxlbWVudFxuXG52YXIgYXBpID0ge1xuICBkYXRhQXV0b1N1Z2dlc3Q6IGRhdGFBdXRvU3VnZ2VzdCxcbiAgc3RhcnRFbGVtZW50U2VsZWN0aW9uTW9kZTogc3RhcnRFbGVtZW50U2VsZWN0aW9uTW9kZSxcbiAgZW5kRWxlbWVudFNlbGVjdGlvbk1vZGU6IGVuZEVsZW1lbnRTZWxlY3Rpb25Nb2RlLFxuICBnZXRVcmw6IGdldFVybCxcbiAgb25EZXZQYW5lbFNob3duOiBvbkRldlBhbmVsU2hvd24sXG4gIG9uRGV2UGFuZWxIaWRkZW46IG9uRGV2UGFuZWxIaWRkZW5cbn1cblxuZnVuY3Rpb24gc2V0VXBNZXNzYWdlUmVjZWl2ZXIoKXtcbiAgY2hyb21lZXh0Lm9uKCdtZXNzYWdlJywgZnVuY3Rpb24obXNnKXtcbiAgICB2YXIgZnVuYyA9IGFwaVttc2cudHlwZV1cbiAgICBpZiAoZnVuYyl7XG4gICAgICBmdW5jKG1zZylcbiAgICB9ZWxzZXtcbiAgICAgIC8vY29uc29sZS5sb2coJ1Vua25vd24gbWV0aG9kICcgKyBtZXRob2QgKyAnIHJlY2VpdmVkLicpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBzZXR1cFdpbmRvd0xpc3RlbmVyKCl7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24oZSl7XG4gICAgY2hyb21lZXh0LnNlbmQoe1xuICAgICAgdHlwZTogJ2RhdGFBdXRvU3VnZ2VzdCcsXG4gICAgICBkYXRhOiBlLmRhdGFcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiAkc2VuZEF1dG9TdWdnZXN0SW5mbygpe1xuICB2YXIgZ2xvYmFscyA9IE9iamVjdC5rZXlzKHdpbmRvdykuc29ydCgpXG4gIHZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JykubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLnNwbGl0KCc9JylbMF19KS5zb3J0KClcbiAgdmFyIHBhcmFtcyA9IGxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoJyYnKS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAuc3BsaXQoJz0nKVswXSB9KS5zb3J0KClcbiAgd2luZG93LnBvc3RNZXNzYWdlKHtcbiAgICBnbG9iYWxzOiBnbG9iYWxzLFxuICAgIGNvb2tpZXM6IGNvb2tpZXMsXG4gICAgcGFyYW1zOiBwYXJhbXNcbiAgfSwgJyonKVxufVxuXG5mdW5jdGlvbiBkYXRhQXV0b1N1Z2dlc3QoKXtcbiAgdmFyIGNvZGUgPSAnKCcgKyAkc2VuZEF1dG9TdWdnZXN0SW5mbyArICcoKSknXG4gIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKVxuICBzY3JpcHQudGV4dCA9IGNvZGVcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICBkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHNjcmlwdClcbiAgfSwgMClcbn1cblxuZnVuY3Rpb24gc3RhcnRFbGVtZW50U2VsZWN0aW9uTW9kZSgpe1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBvbk1vdXNlT3ZlciwgZmFsc2UpXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0Jywgb25Nb3VzZU91dCwgZmFsc2UpXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25DbGljaywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGVuZEVsZW1lbnRTZWxlY3Rpb25Nb2RlKCl7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIG9uTW91c2VPdmVyKVxuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIG9uTW91c2VPdXQpXG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25DbGljaylcbn1cblxuZnVuY3Rpb24gaGlnaGxpZ2h0QWxsKHNlbGVjdG9yKXtcbiAgdmFyIGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcbiAgdmFyIG51bUVsZW1lbnRzID0gZWxlbWVudHMubGVuZ3RoXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKyl7XG4gICAgdmFyIGVsbSA9IGVsZW1lbnRzW2ldXG4gICAgaGlnaGxpZ2h0KGVsbSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkNsaWNrKGUpe1xuICBlLnByZXZlbnREZWZhdWx0KClcbiAgdW5oaWdobGlnaHQoZS50YXJnZXQpXG4gIGNocm9tZWV4dC5zZW5kKHtcbiAgICBzZWxlY3RlZEVsZW1lbnQ6IHVuaXF1ZVNlbGVjdG9yKHNlbGVjdGVkRWxlbWVudClcbiAgfSlcbn1cblxuZnVuY3Rpb24gb25Nb3VzZU92ZXIoZSl7XG4gIGhpZ2hsaWdodChlLnRhcmdldClcbn1cblxuZnVuY3Rpb24gb25Nb3VzZU91dChlKXtcbiAgdW5oaWdobGlnaHQoZS50YXJnZXQpXG59XG5cbmZ1bmN0aW9uIGhpZ2hsaWdodChlbG0pe1xuICBlbG0uX29yaWdpbmFsQmFja2dyb3VuZENvbG9yID0gd2luZG93XG4gICAgLmdldENvbXB1dGVkU3R5bGUoZWxtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kQ29sb3InKVxuICBlbG0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoMCwgMCwgMjU1LCAwLjQpJ1xuICBzZWxlY3RlZEVsZW1lbnQgPSBlbG1cbn1cblxuZnVuY3Rpb24gdW5oaWdobGlnaHQoZWxtKXtcbiAgZWxtLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGVsbS5fb3JpZ2luYWxCYWNrZ3JvdW5kQ29sb3Jcbn1cblxuZnVuY3Rpb24gZ2V0VXJsKCl7XG4gIHZhciB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuICBjaHJvbWVleHQuc2VuZCh7XG4gICAgdHlwZTogJ2dldFVybCcsXG4gICAgdXJsOiB1cmxcbiAgfSlcbn1cblxuZnVuY3Rpb24gb25EZXZQYW5lbFNob3duKCl7XG4gIGludGVyYWN0aXZlTW9kZS5hY3RpdmF0ZSgpXG4gIHBpbmcuc3RhcnQoKVxufVxuXG5mdW5jdGlvbiBvbkRldlBhbmVsSGlkZGVuKCl7XG4gIGludGVyYWN0aXZlTW9kZS5kZWFjdGl2YXRlKClcbiAgcGluZy5zdG9wKClcbn1cblxuXG5cbmZ1bmN0aW9uIFBpbmcoZG9jKXtcbiAgdGhpcy5kb2MgPSBkb2MgfHwgZG9jdW1lbnRcbiAgdGhpcy5kb2NFbG0gPSB0aGlzLmRvYy5kb2N1bWVudEVsZW1lbnRcbiAgdGhpcy5waW5nQ291bnQgPSAwXG4gIHRoaXMuc2V0SW50ZXJ2YWxJZCA9IG51bGxcbiAgdGhpcy5jcmVhdGUoKVxufVxuXG5QaW5nLnByb3RvdHlwZSA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbigpe1xuICAgIHRoaXMuZGl2ID0gdGhpcy5kb2MuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLmRpdi5jbGFzc05hbWUgPSAnX19yb3Zlcl9zdGF0dXNfXydcbiAgICB0aGlzLmRpdi50ZXh0Q29udGVudCA9IHRoaXMucGluZ0NvdW50XG4gICAgdGhpcy5kaXYuc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjogZml4ZWQ7IHRvcDogMHB4OyByaWdodDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgY29sb3I6IHdoaXRlOydcbiAgICB0aGlzLmRvY0VsbS5hcHBlbmRDaGlsZCh0aGlzLmRpdilcbiAgfSxcbiAgc3RhcnQ6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy5zZXRJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtcbiAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHt0eXBlOiAncGluZyd9KVxuICAgIH0sIDIwMDApXG4gICAgY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGZ1bmN0aW9uKG1zZyl7XG4gICAgICBpZiAobXNnLnR5cGUgPT09ICdwaW5nJyl7XG4gICAgICAgIHRoaXMucGluZ0NvdW50KytcbiAgICAgICAgdGhpcy5kaXYudGV4dENvbnRlbnQgPSB0aGlzLnBpbmdDb3VudFxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSlcbiAgfSxcbiAgc3RvcDogZnVuY3Rpb24oKXtcbiAgICBpZiAodGhpcy5zZXRJbnRlcnZhbElkKXtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5zZXRJbnRlcnZhbElkKVxuICAgICAgdGhpcy5zZXRJbnRlcnZhbElkID0gbnVsbFxuICAgIH1cbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGluaXRpYWxpemUoKXtcbiAgc2V0VXBNZXNzYWdlUmVjZWl2ZXIoKVxuICBzZXR1cFdpbmRvd0xpc3RlbmVyKClcbiAgd2luZG93LmludGVyYWN0aXZlTW9kZSA9IG5ldyBJbnRlcmFjdGl2ZU1vZGVcbiAgd2luZG93LnBpbmcgPSBuZXcgUGluZygpXG5cbn1cblxuaWYgKHdpbmRvdy5jaHJvbWUgJiYgd2luZG93LmNocm9tZS5leHRlbnNpb24pe1xuICBpbml0aWFsaXplKClcbn1cbiIsIlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPZmZzZXRzKGVsbSl7XG4gICAgdmFyIGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHlcbiAgICB2YXIgd2luID0gd2luZG93XG4gICAgdmFyIGJveCA9IGVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIHZhciBjbGllbnRUb3AgID0gZG9jRWxlbS5jbGllbnRUb3AgIHx8IGJvZHkuY2xpZW50VG9wICB8fCAwXG4gICAgdmFyIGNsaWVudExlZnQgPSBkb2NFbGVtLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDBcbiAgICB2YXIgc2Nyb2xsVG9wICA9IHdpbi5wYWdlWU9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbFRvcFxuICAgIHZhciBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0IHx8IGRvY0VsZW0uc2Nyb2xsTGVmdFxuICAgIHZhciB0b3AgID0gYm94LnRvcCAgKyBzY3JvbGxUb3AgIC0gY2xpZW50VG9wXG4gICAgdmFyIGxlZnQgPSBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0XG4gICAgcmV0dXJuIHt0b3A6IHRvcCwgbGVmdDogbGVmdH1cbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHVuaXF1ZVNlbGVjdG9yXG5mdW5jdGlvbiB1bmlxdWVTZWxlY3RvcihlbGVtZW50LCB1c2VBdHRycykge1xuICB2YXIgY2hhaW4gPSBsaW5lYWdlKGVsZW1lbnQpO1xuICB2YXIgY3NzU2VnbWVudHMgPSBbXTtcbiAgLy8gd2FsayB0aGlzIGNoYWluIHRvIHNlZSBpZiB3ZSBjYW4gZmluZCBhbiBlbGVtZW50IHdpdGhcbiAgLy8gYW4gZWFzeSB3YXkgdG8gdW5pcXVlXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhaW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxtID0gY2hhaW5baV07XG4gICAgdmFyIHRhZyA9IGVsbS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHRhZ0NsYXNzQXR0cnM7XG4gICAgaWYgKGVsbS5pZCkge1xuICAgICAgY3NzU2VnbWVudHMgPSBbJyMnICsgZWxtLmlkXTtcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2JvZHknKSB7XG4gICAgICBjc3NTZWdtZW50cy5wdXNoKHRhZyk7XG4gICAgfSBlbHNlIGlmIChpc1VuaXF1ZSh0YWdDbGFzc0F0dHJzID0gdGFnQ2xhc3NBdHRyc0NzcyhlbG0sIHVzZUF0dHJzKSkpIHtcbiAgICAgIGNzc1NlZ21lbnRzID0gW3RhZ0NsYXNzQXR0cnNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjc3NTZWdtZW50cy5wdXNoKHRhZyArICc6bnRoLWNoaWxkKCcgKyBudGhDaGlsZChlbG0pICsgJyknKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNzc1NlZ21lbnRzLmpvaW4oJyA+ICcpO1xufVxuXG5mdW5jdGlvbiBsaW5lYWdlKGVsbSkge1xuICBpZiAoZWxtID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHJldHVybiBbXTtcbiAgcmV0dXJuIGxpbmVhZ2UoZWxtLnBhcmVudE5vZGUpLmNvbmNhdChlbG0pO1xufVxuXG5cbi8vIHN0b2xlbiBmcm9tIHNlbGVjdG9yIGdhZGdldFxuZnVuY3Rpb24gbnRoQ2hpbGQoZWxlbSkge1xuICB2YXIgY291bnQgPSAwO1xuICB3aGlsZSAoZWxlbS5wcmV2aW91c1NpYmxpbmcgJiYgKGVsZW0gPSBlbGVtLnByZXZpb3VzU2libGluZykpIHtcbiAgICBpZiAoZWxlbS5ub2RlVHlwZSA9PSAxKSBjb3VudCsrO1xuICB9XG4gIHJldHVybiBjb3VudCArIDE7XG59XG5cbmZ1bmN0aW9uIGlzVW5pcXVlKGNzcykge1xuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjc3MpLmxlbmd0aCA9PT0gMTtcbn1cblxuZnVuY3Rpb24gdGFnQ2xhc3NBdHRyc0NzcyhlbG0sIHVzZUF0dHJzKSB7XG4gIHZhciBjc3MgPSBlbG0udGFnTmFtZS50b0xvd2VyQ2FzZSgpICsgKFxuICBlbG0uY2xhc3NOYW1lID8gJy4nICsgZWxtLmNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pLmpvaW4oJy4nKSA6ICcnKTtcblxuICBpZiAodXNlQXR0cnMpIHtcbiAgICB2YXIgYXR0cnMgPSAnaHJlZiB0aXRsZSByZWwgc3JjIGFsdCBuYW1lIHR5cGUnLnNwbGl0KCcgJyk7XG4gICAgZm9yICh2YXIgaSA9IGF0dHJzLmxlbmd0aDsgaS0tOykge1xuICAgICAgdmFyIGF0dHIgPSBhdHRyc1tpXTtcbiAgICAgIHZhciB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSA9IGVsbS5nZXRBdHRyaWJ1dGUoYXR0cikpIHtcbiAgICAgICAgY3NzICs9ICdbJyArIGF0dHIgKyAnPVwiJyArIHZhbHVlICsgJ1wiXSc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjc3M7XG59XG5cblxuIiwidmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuXG52YXIgY2hyb21lZXh0ID0ge1xuICBfX3Byb3RvX186IEV2ZW50RW1pdHRlci5wcm90b3R5cGVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaHJvbWVleHRcblxuZnVuY3Rpb24gc2VuZChtc2csIGNhbGxiYWNrKXtcbiAgY2hyb21lLmV4dGVuc2lvbi5zZW5kTWVzc2FnZShtc2cpXG59XG5cbmZ1bmN0aW9uIG9uTWVzc2FnZShtc2cpe1xuICBjaHJvbWVleHQuZW1pdCgnbWVzc2FnZScsIG1zZylcbn1cblxuaWYgKGNocm9tZS5leHRlbnNpb24pe1xuICBjaHJvbWUuZXh0ZW5zaW9uLm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihvbk1lc3NhZ2UpXG4gIGNocm9tZWV4dC5zZW5kID0gc2VuZFxufWVsc2V7XG4gIGNocm9tZWV4dC5zZW5kID0gZnVuY3Rpb24oKXt9XG59IiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxucHJvY2Vzcy5uZXh0VGljayA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNhblNldEltbWVkaWF0ZSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgJiYgd2luZG93LnNldEltbWVkaWF0ZTtcbiAgICB2YXIgY2FuUG9zdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgJiYgd2luZG93LnBvc3RNZXNzYWdlICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyXG4gICAgO1xuXG4gICAgaWYgKGNhblNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIHdpbmRvdy5zZXRJbW1lZGlhdGUoZikgfTtcbiAgICB9XG5cbiAgICBpZiAoY2FuUG9zdCkge1xuICAgICAgICB2YXIgcXVldWUgPSBbXTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIGlmIChldi5zb3VyY2UgPT09IHdpbmRvdyAmJiBldi5kYXRhID09PSAncHJvY2Vzcy10aWNrJykge1xuICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dFRpY2soZm4pIHtcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goZm4pO1xuICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKCdwcm9jZXNzLXRpY2snLCAnKicpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0VGljayhmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xufSkoKTtcblxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufVxuXG4vLyBUT0RPKHNodHlsbWFuKVxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG4iLCIoZnVuY3Rpb24ocHJvY2Vzcyl7aWYgKCFwcm9jZXNzLkV2ZW50RW1pdHRlcikgcHJvY2Vzcy5FdmVudEVtaXR0ZXIgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIEV2ZW50RW1pdHRlciA9IGV4cG9ydHMuRXZlbnRFbWl0dGVyID0gcHJvY2Vzcy5FdmVudEVtaXR0ZXI7XG52YXIgaXNBcnJheSA9IHR5cGVvZiBBcnJheS5pc0FycmF5ID09PSAnZnVuY3Rpb24nXG4gICAgPyBBcnJheS5pc0FycmF5XG4gICAgOiBmdW5jdGlvbiAoeHMpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSdcbiAgICB9XG47XG5mdW5jdGlvbiBpbmRleE9mICh4cywgeCkge1xuICAgIGlmICh4cy5pbmRleE9mKSByZXR1cm4geHMuaW5kZXhPZih4KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh4ID09PSB4c1tpXSkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhblxuLy8gMTAgbGlzdGVuZXJzIGFyZSBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoXG4vLyBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbi8vXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0ge307XG4gIHRoaXMuX2V2ZW50cy5tYXhMaXN0ZW5lcnMgPSBuO1xufTtcblxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbih0eXBlKSB7XG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzLmVycm9yIHx8XG4gICAgICAgIChpc0FycmF5KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKVxuICAgIHtcbiAgICAgIGlmIChhcmd1bWVudHNbMV0gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBhcmd1bWVudHNbMV07IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmNhdWdodCwgdW5zcGVjaWZpZWQgJ2Vycm9yJyBldmVudC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHJldHVybiBmYWxzZTtcbiAgdmFyIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIGlmICghaGFuZGxlcikgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBmYXN0IGNhc2VzXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBzbG93ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmIChpc0FycmF5KGhhbmRsZXIpKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8vIEV2ZW50RW1pdHRlciBpcyBkZWZpbmVkIGluIHNyYy9ub2RlX2V2ZW50cy5jY1xuLy8gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0KCkgaXMgYWxzbyBkZWZpbmVkIHRoZXJlLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICgnZnVuY3Rpb24nICE9PSB0eXBlb2YgbGlzdGVuZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZExpc3RlbmVyIG9ubHkgdGFrZXMgaW5zdGFuY2VzIG9mIEZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PSBcIm5ld0xpc3RlbmVyc1wiISBCZWZvcmVcbiAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lcnNcIi5cbiAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1t0eXBlXSkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodGhpcy5fZXZlbnRzW3R5cGVdKSkge1xuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHtcbiAgICAgIHZhciBtO1xuICAgICAgaWYgKHRoaXMuX2V2ZW50cy5tYXhMaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtID0gdGhpcy5fZXZlbnRzLm1heExpc3RlbmVycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG0gPSBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICAgICAgfVxuXG4gICAgICBpZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkge1xuICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkID0gdHJ1ZTtcbiAgICAgICAgY29uc29sZS5lcnJvcignKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCk7XG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuICB9IGVsc2Uge1xuICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxpc3RlbmVyXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5vbih0eXBlLCBmdW5jdGlvbiBnKCkge1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7XG4gICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgaWYgKCdmdW5jdGlvbicgIT09IHR5cGVvZiBsaXN0ZW5lcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVtb3ZlTGlzdGVuZXIgb25seSB0YWtlcyBpbnN0YW5jZXMgb2YgRnVuY3Rpb24nKTtcbiAgfVxuXG4gIC8vIGRvZXMgbm90IHVzZSBsaXN0ZW5lcnMoKSwgc28gbm8gc2lkZSBlZmZlY3Qgb2YgY3JlYXRpbmcgX2V2ZW50c1t0eXBlXVxuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNBcnJheShsaXN0KSkge1xuICAgIHZhciBpID0gaW5kZXhPZihsaXN0LCBsaXN0ZW5lcik7XG4gICAgaWYgKGkgPCAwKSByZXR1cm4gdGhpcztcbiAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICBpZiAobGlzdC5sZW5ndGggPT0gMClcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIH0gZWxzZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdID09PSBsaXN0ZW5lcikge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZG9lcyBub3QgdXNlIGxpc3RlbmVycygpLCBzbyBubyBzaWRlIGVmZmVjdCBvZiBjcmVhdGluZyBfZXZlbnRzW3R5cGVdXG4gIGlmICh0eXBlICYmIHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbdHlwZV0pIHRoaXMuX2V2ZW50c1t0eXBlXSA9IG51bGw7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSB7fTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFtdO1xuICBpZiAoIWlzQXJyYXkodGhpcy5fZXZlbnRzW3R5cGVdKSkge1xuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV1dO1xuICB9XG4gIHJldHVybiB0aGlzLl9ldmVudHNbdHlwZV07XG59O1xuXG59KShyZXF1aXJlKFwiX19icm93c2VyaWZ5X3Byb2Nlc3NcIikpIiwiXG52YXIgY2FwaXRhbGl6ZSA9IHJlcXVpcmUoJy4vY2FwaXRhbGl6ZScpXG5cblxudmFyIHRhZ1RvRnJpZW5kbHlNYXBwaW5nID0ge1xuICBhOiBcImFuY2hvclwiLFxuICBoMTogXCJoZWFkaW5nIDFcIixcbiAgaDI6IFwiaGVhZGluZyAyXCIsXG4gIGgzOiBcImhlYWRpbmcgM1wiLFxuICBoNDogXCJoZWFkaW5nIDRcIixcbiAgaDU6IFwiaGVhZGluZyA1XCIsXG4gIGg2OiBcImhlYWRpbmcgNlwiLFxuICBsaTogXCJsaXN0IGl0ZW1cIixcbiAgdWw6IFwibGlzdCBjb250YWluZXJcIixcbiAgb2w6IFwibGlzdCBjb250YWluZXJcIixcbiAgaW1nOiBcImltYWdlXCIsXG4gIGRsOiBcImRlZmluaXRpb24gbGlzdFwiLFxuICBkdDogXCJkZWZpbml0aW9uIHRlcm1cIixcbiAgZGQ6IFwiZGVmaW5pdGlvbiBkZXNjcmlwdGlvblwiLFxuICBlbTogXCJlbXBoYXNpcyB0ZXh0XCIsXG4gIGk6IFwiaXRhbGljIHRleHRcIixcbiAgc3Ryb25nOiBcInN0cm9uZyB0ZXh0XCIsXG4gIGI6IFwiYm9sZCB0ZXh0XCIsXG4gIHU6IFwidW5kZXJsaW5lZCB0ZXh0XCIsXG4gIHM6IFwic3RyaWtldGhyb3VnaCB0ZXh0XCIsXG4gIG1hcms6IFwibWFya2VkIHRleHRcIixcbiAgaGdyb3VwOiBcImhlYWRpbmcgZ3JvdXBcIixcbiAgZmlnY2FwdGlvbjogXCJmaWd1cmUgY2FwdGlvblwiLFxuICBwOiBcInBhcmFncmFwaFwiLFxuICB0cjogXCJ0YWJsZSByb3dcIixcbiAgdGQ6IFwidGFibGUgY2VsbFwiLFxuICB0aDogXCJ0YWJsZSBoZWFkaW5nXCIsXG4gIHRoZWFkOiBcInRhYmxlIGhlYWRlclwiLFxuICB0Ym9keTogXCJ0YWJsZSBib2R5XCIsXG4gIHRmb290OiBcInRhYmxlIGZvb3RcIixcbiAgY29sOiBcInRhYmxlIGNvbHVtblwiLFxuICBjb2xncm91cDogXCJ0YWJsZSBjb2x1bW4gZ3JvdXBcIixcbiAgYWJicjogXCJhYmJyZXZpYXRpb25cIixcbiAgYmRvOiBcImJpZGlyZWN0aW9uIG92ZXJyaWRlXCIsXG4gIGJyOiBcImxpbmUgYnJlYWtcIixcbiAgaHI6IFwiaG9yaXpvbnRhbCBydWxlXCIsXG4gIGNhcHRpb246IFwidGFibGUgY2FwdGlvblwiLFxuICBkZWw6IFwiZGVsZXRlZCB0ZXh0XCIsXG4gIGluczogXCJpbnNlcnRlZCB0ZXh0XCIsXG4gIGRmbjogXCJpbnN0YW5jZSBkZWZpbml0aW9uXCIsXG4gIHE6IFwiaW5saW5lIHF1b3RlXCIsXG4gIHN0cmlrZTogXCJzdHJpa2V0aHJvdWdoIHRleHRcIixcbiAgc3ViOiBcInN1YnNjcmlwdFwiLFxuICBzdXA6IFwic3VwZXJzY3JpcHRcIixcbiAgdHQ6IFwidGVsZXR5cGVcIixcbiAgbmF2OiBcIm5hdmlnYXRpb24gYmxvY2tcIixcbiAgcHJlOiBcInByZWZvcm1hdHRlZCBibG9ja1wiLFxuICBrYmQ6IFwia2V5Ym9hcmQgaW5wdXRcIixcbiAgcnVieTogXCJydWJ5IGFubm90YXRpb25cIixcbiAgcnQ6IFwicnVieSB0ZXh0XCIsXG4gIHJwOiBcInJ1YnkgcGFyZW50aGVzZXNcIixcbiAgYmRpOiBcImlubGluZSBiaWRpcmVjdGlvbmFsIG92ZXJyaWRlXCIsXG4gIHdicjogXCJsaW5lIGJyZWFrIG9wcG9ydHVuaXR5XCJcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcmllbmRseVRhZ05hbWUodGFnKXtcbiAgcmV0dXJuIGNhcGl0YWxpemUodGFnVG9GcmllbmRseU1hcHBpbmdbdGFnXSB8fCAnJylcbn1cbiIsInZhciBnZXRPZmZzZXRzID0gcmVxdWlyZSgnLi9vZmZzZXRzJylcbnZhciBnZXREaW1lbnNpb25zID0gcmVxdWlyZSgnLi9kaW1lbnNpb25zJylcbnZhciBmcmllbmRseVRhZ05hbWUgPSByZXF1aXJlKCcuL2ZyaWVuZGx5X3RhZycpXG52YXIgZXh0ZW5kID0gcmVxdWlyZSgnLi9leHRlbmQnKVxudmFyIERvY0xpc3RlbmVyID0gcmVxdWlyZSgnLi9kb2N1bWVudF9saXN0ZW5lcicpXG52YXIgdW5pcXVlU2VsZWN0b3IgPSByZXF1aXJlKCcuL3VuaXF1ZV9zZWxlY3RvcicpXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG52YXIgY2hyb21lZXh0ID0gcmVxdWlyZSgnLi9jaHJvbWVleHQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7XG4gIHJldHVybiBuZXcgSW50ZXJhY3RpdmVNb2RlXG59XG5cbmZ1bmN0aW9uIEludGVyYWN0aXZlTW9kZShkb2Mpe1xuICB0aGlzLmRvYyA9IGRvYyB8fCBkb2N1bWVudFxuICB0aGlzLmRvY0VsbSA9IHRoaXMuZG9jLmRvY3VtZW50RWxlbWVudFxuICB0aGlzLmJveCA9IG5ldyBCb3godGhpcy5kb2MpXG4gIHRoaXMuYnViYmxlID0gbmV3IEJ1YmJsZSh0aGlzLmRvYylcbiAgdGhpcy5idWJibGUub24oJ2NsaWNrJywgZnVuY3Rpb24odGFyZ2V0KXtcbiAgICB0aGlzLm9uQnViYmxlQ2xpY2tlZCh0YXJnZXQpXG4gIH0uYmluZCh0aGlzKSlcbiAgdGhpcy5tb2RlSW5kaWNhdG9yID0gbmV3IE1vZGVJbmRpY2F0b3IoKVxuICB0aGlzLmNocm9tZWV4dCA9IGNocm9tZWV4dFxuICB0aGlzLnRpbWVvdXRJRCA9IG51bGxcbiAgdGhpcy50aW1lb3V0ID0gMjAwXG59XG5cbmV4dGVuZChJbnRlcmFjdGl2ZU1vZGUucHJvdG90eXBlLCBEb2NMaXN0ZW5lcilcbmV4dGVuZChJbnRlcmFjdGl2ZU1vZGUucHJvdG90eXBlLCB7XG5cbiAgYmluZEV2ZW50czogWydNb3VzZU92ZXInLCAnTW91c2VNb3ZlJywgJ01vdXNlT3V0J10sXG5cbiAgb25Nb3VzZU92ZXI6IGZ1bmN0aW9uKGUpe1xuICAgIHRoaXMub25Ib3ZlcihlKVxuICAgIFxuICB9LFxuXG4gIG9uTW91c2VNb3ZlOiBmdW5jdGlvbihlKXtcbiAgICB0aGlzLm9uSG92ZXIoZSlcbiAgfSxcblxuICBvbkhvdmVyOiBmdW5jdGlvbihlKXtcbiAgICBpZiAoZS50YXJnZXQgPT09IHRoaXMuYnViYmxlRWxtKCkpe1xuICAgICAgdGhpcy5jbGVhclRpbWVvdXQoKVxuICAgICAgdGhpcy5oaWRlQm94KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZS50eXBlID09PSAnbW91c2VvdmVyJykgdGhpcy51cGRhdGVCb3goZSlcbiAgICB0aGlzLnF1ZXVlVXBkYXRlQnViYmxlKGUpXG4gIH0sXG5cbiAgb25Nb3VzZU91dDogZnVuY3Rpb24oZSl7XG4gICAgdmFyIGZyb20gPSBlLnJlbGF0ZWRUYXJnZXRcbiAgICBpZiAoIWZyb20gfHwgZnJvbS5ub2RlTmFtZSA9PT0gJ0hUTUwnKXtcbiAgICAgIHRoaXMub25Nb3VzZUxlZnRXaW5kb3coKVxuICAgIH1cbiAgfSxcblxuICBvbk1vdXNlTGVmdFdpbmRvdzogZnVuY3Rpb24oKXtcbiAgICB0aGlzLmhpZGVCdWJibGUoKVxuICAgIHRoaXMuaGlkZUJveCgpXG4gIH0sXG5cbiAgbW9kZUluZGljYXRvckVsbTogZnVuY3Rpb24oKXtcbiAgICByZXR1cm4gdGhpcy5tb2RlSW5kaWNhdG9yLmVsbVxuICB9LFxuXG4gIGhpZGVCb3g6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy5ib3guaGlkZSgpXG4gIH0sXG5cbiAgdXBkYXRlQm94OiBmdW5jdGlvbihlKXtcbiAgICB0aGlzLmJveC51cGRhdGUoZS50YXJnZXQpXG4gIH0sXG5cbiAgb25CdWJibGVDbGlja2VkOiBmdW5jdGlvbihlbG0pe1xuICAgIHRoaXMuYnViYmxlRWxtKCkuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBub25lJ1xuICAgIHRoaXMuaGlkZUJveCgpXG4gICAgdGhpcy5jaHJvbWVleHQuc2VuZCh7XG4gICAgICB0eXBlOiAnZWxlbWVudERldGFpbCcsXG4gICAgICBlbGVtZW50OiB7XG4gICAgICAgIHNlbGVjdG9yOiB1bmlxdWVTZWxlY3RvcihlbG0pLFxuICAgICAgICBpbm5lckhUTUw6IGVsbS5pbm5lckhUTUwsXG4gICAgICAgIG91dGVySFRNTDogZWxtLm91dGVySFRNTCxcbiAgICAgICAgdGFnTmFtZTogZWxtLnRhZ05hbWVcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHF1ZXVlVXBkYXRlQnViYmxlOiBmdW5jdGlvbihlKXtcbiAgICB0aGlzLmNsZWFyVGltZW91dCgpXG4gICAgdGhpcy50aW1lb3V0SUQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICB0aGlzLnRpbWVvdXRJRCA9IG51bGxcbiAgICAgIHRoaXMudXBkYXRlQnViYmxlKGUpXG4gICAgfS5iaW5kKHRoaXMpLCB0aGlzLnRpbWVvdXQpXG4gIH0sXG5cbiAgdXBkYXRlQnViYmxlOiBmdW5jdGlvbihlKXtcbiAgICB0aGlzLmJ1YmJsZS51cGRhdGUoZSlcbiAgfSxcblxuICBoaWRlQnViYmxlOiBmdW5jdGlvbigpe1xuICAgIHRoaXMuYnViYmxlLmhpZGUoKVxuICAgIHRoaXMuY2xlYXJUaW1lb3V0KClcbiAgfSxcblxuICBidWJibGVFbG06IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIHRoaXMuYnViYmxlLmJ1YmJsZVxuICB9LFxuXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oKXtcbiAgICBpZiAodGhpcy50aW1lb3V0SUQpe1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElEKVxuICAgICAgdGhpcy50aW1lb3V0SUQgPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGFjdGl2YXRlOiBmdW5jdGlvbigpe1xuICAgIHRoaXMuYmluZExpc3RlbmVycygpXG4gICAgdGhpcy5tb2RlSW5kaWNhdG9yLnNob3coKVxuICB9LFxuXG4gIGRlYWN0aXZhdGU6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy51bmJpbmRMaXN0ZW5lcnMoKVxuICAgIHRoaXMuaGlkZUJ1YmJsZSgpXG4gICAgdGhpcy5oaWRlQm94KClcbiAgICB0aGlzLm1vZGVJbmRpY2F0b3IuaGlkZSgpXG4gIH0sXG5cbiAgY2xlYW51cDogZnVuY3Rpb24oKXtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKVxuICAgIHRoaXMuYnViYmxlLmNsZWFudXAoKVxuICAgIHRoaXMuYm94LmNsZWFudXAoKVxuICAgIHRoaXMubW9kZUluZGljYXRvci5jbGVhbnVwKClcbiAgfVxufSlcblxuZnVuY3Rpb24gTW9kZUluZGljYXRvcihkb2Mpe1xuICB0aGlzLmRvYyA9IGRvYyB8fCBkb2N1bWVudFxuICB0aGlzLmRvY0VsbSA9IHRoaXMuZG9jLmRvY3VtZW50RWxlbWVudFxuICB0aGlzLmNyZWF0ZSgpXG59XG5cbk1vZGVJbmRpY2F0b3IucHJvdG90eXBlID0ge1xuICBjcmVhdGU6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy5lbG0gPSB0aGlzLmRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuZWxtLnRleHRDb250ZW50ID0gJ0ludGVyYWN0aXZlJ1xuICAgIHRoaXMuZWxtLmNsYXNzTmFtZSA9ICdfX3JvdmVyX21vZGVfaW5kX18nXG4gICAgdGhpcy5lbG0uc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgIHRoaXMuZG9jRWxtLmluc2VydEJlZm9yZSh0aGlzLmVsbSwgdGhpcy5kb2MuYm9keSlcbiAgfSxcblxuICBzaG93OiBmdW5jdGlvbigpe1xuICAgIHRoaXMuZWxtLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gIH0sXG5cbiAgaGlkZTogZnVuY3Rpb24oKXtcbiAgICB0aGlzLmVsbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gIH0sXG5cbiAgY2xlYW51cDogZnVuY3Rpb24oKXtcbiAgICB0aGlzLmRvY0VsbS5yZW1vdmVDaGlsZCh0aGlzLmVsbSlcbiAgfVxufVxuXG5mdW5jdGlvbiBCb3goZG9jKXtcbiAgdGhpcy5kb2MgPSBkb2MgfHwgZG9jdW1lbnRcbiAgdGhpcy5kb2NFbG0gPSB0aGlzLmRvYy5kb2N1bWVudEVsZW1lbnRcbiAgdGhpcy5jcmVhdGVPdmVybGF5cygpXG59XG5cbkJveC5wcm90b3R5cGUgPSB7XG4gIGNyZWF0ZU92ZXJsYXlzOiBmdW5jdGlvbigpe1xuICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lciA9IHRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5vdmVybGF5Q29udGFpbmVyLmNsYXNzTmFtZSA9ICdfX3JvdmVyX2JveF9fJ1xuICAgIFxuICAgIHRoaXMuY3JlYXRlQmFyKCdsZWZ0JylcbiAgICB0aGlzLmNyZWF0ZUJhcigndG9wJylcbiAgICB0aGlzLmNyZWF0ZUJhcigncmlnaHQnKVxuICAgIHRoaXMuY3JlYXRlQmFyKCdib3R0b20nKVxuICAgIFxuICAgIHRoaXMuZG9jRWxtLmFwcGVuZENoaWxkKHRoaXMub3ZlcmxheUNvbnRhaW5lcilcbiAgfSxcblxuICB1cGRhdGU6IGZ1bmN0aW9uKGVsbSl7XG4gICAgdmFyIG9mZnNldCA9IGdldE9mZnNldHMoZWxtKVxuICAgIHZhciBkaW1lbnNpb25zID0gZ2V0RGltZW5zaW9ucyhlbG0pXG4gICAgdGhpcy5zZXREaW1lbnNpb25zKHRoaXMubGVmdEJhciwgXG4gICAgICBvZmZzZXQudG9wLCBvZmZzZXQubGVmdCwgZGltZW5zaW9ucy5oZWlnaHQsIDEpXG4gICAgdGhpcy5zZXREaW1lbnNpb25zKHRoaXMudG9wQmFyLCBcbiAgICAgIG9mZnNldC50b3AsIG9mZnNldC5sZWZ0LCAxLCBkaW1lbnNpb25zLndpZHRoKVxuICAgIHRoaXMuc2V0RGltZW5zaW9ucyh0aGlzLnJpZ2h0QmFyLFxuICAgICAgb2Zmc2V0LnRvcCwgb2Zmc2V0LmxlZnQgKyBkaW1lbnNpb25zLndpZHRoLCBkaW1lbnNpb25zLmhlaWdodCwgMSlcbiAgICB0aGlzLnNldERpbWVuc2lvbnModGhpcy5ib3R0b21CYXIsXG4gICAgICBvZmZzZXQudG9wICsgZGltZW5zaW9ucy5oZWlnaHQsIG9mZnNldC5sZWZ0LCAxLCBkaW1lbnNpb25zLndpZHRoKVxuICB9LFxuXG4gIGhpZGU6IGZ1bmN0aW9uKCl7XG4gICAgJ2xlZnQgcmlnaHQgdG9wIGJvdHRvbScuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uKGRpcil7XG4gICAgICB0aGlzW2RpciArICdCYXInXS5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6IG5vbmUnXG4gICAgfSwgdGhpcylcbiAgfSxcblxuICBzZXREaW1lbnNpb25zOiBmdW5jdGlvbihlbG0sIHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCl7XG4gICAgdmFyIGNzc1RleHQgPSBcbiAgICAgICd0b3A6ICcgKyB0b3AgKyAncHg7JyArXG4gICAgICAnbGVmdDogJyArIGxlZnQgKyAncHg7JyArXG4gICAgICAnaGVpZ2h0OiAnICsgaGVpZ2h0ICsgJ3B4OycgK1xuICAgICAgJ3dpZHRoOiAnICsgd2lkdGggKyAncHg7JyArXG4gICAgICAnZGlzcGxheTogYmxvY2snXG4gICAgZWxtLnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0XG4gIH0sXG5cbiAgY3JlYXRlQmFyOiBmdW5jdGlvbihiYXIpe1xuICAgIHZhciBiYXJOYW1lID0gYmFyICsgJ0JhcidcbiAgICB2YXIgYmFyID0gdGhpc1tiYXJOYW1lXSA9IHRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5vdmVybGF5Q29udGFpbmVyLmFwcGVuZENoaWxkKGJhcilcbiAgfSxcblxuICBjbGVhbnVwOiBmdW5jdGlvbigpe1xuICAgIHRoaXMuZG9jRWxtLnJlbW92ZUNoaWxkKHRoaXMub3ZlcmxheUNvbnRhaW5lcilcbiAgfVxufVxuXG5mdW5jdGlvbiBCdWJibGUoZG9jKXtcbiAgdGhpcy5kb2MgPSBkb2MgfHwgZG9jdW1lbnRcbiAgdGhpcy5kb2NFbG0gPSBkb2MuZG9jdW1lbnRFbGVtZW50XG4gIHRoaXMuY3VycmVudEVsbSA9IG51bGxcbiAgdGhpcy5jcmVhdGUoKVxufVxuZXh0ZW5kKEJ1YmJsZS5wcm90b3R5cGUsIEV2ZW50RW1pdHRlci5wcm90b3R5cGUpXG5leHRlbmQoQnViYmxlLnByb3RvdHlwZSwge1xuXG4gIG9uQ2xpY2s6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy5lbWl0KCdjbGljaycsIHRoaXMuY3VycmVudEVsbSlcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy5idWJibGUgPSB0aGlzLmRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuYnViYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrLmJpbmQodGhpcykpXG4gICAgdGhpcy5idWJibGUuY2xhc3NOYW1lID0gJ19fcm92ZXJfYnViYmxlX18nXG4gICAgdGhpcy5idWJibGUuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBub25lJ1xuICAgIHRoaXMuZG9jRWxtLmFwcGVuZENoaWxkKHRoaXMuYnViYmxlKVxuICB9LFxuXG4gIHVwZGF0ZTogZnVuY3Rpb24oZSl7XG4gICAgdmFyIGVsbSA9IHRoaXMuY3VycmVudEVsbSA9IGUudGFyZ2V0XG4gICAgdmFyIGJ1YmJsZUhlaWdodCA9IDUwICsgKDE1ICogMilcbiAgICB2YXIgb2Zmc2V0cyA9IGdldE9mZnNldHMoZWxtKVxuICAgIHZhciB0YWcgPSBlbG0udGFnTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgdGhpcy5idWJibGUudGV4dENvbnRlbnQgPSBcbiAgICAgIGZyaWVuZGx5VGFnTmFtZSh0YWcpICsgJyA8JyArIHRhZyArICc+J1xuICAgIHRoaXMuYnViYmxlLnN0eWxlLmNzc1RleHQgPSBcbiAgICAgICd0b3A6ICcgKyAob2Zmc2V0cy50b3AgLSBidWJibGVIZWlnaHQpICsgJ3B4OycgK1xuICAgICAgJ2xlZnQ6ICcgKyAoZS5wYWdlWCAtIDY0KSArICdweDsnICsgXG4gICAgICAnZGlzcGxheTogYmxvY2s7J1xuICB9LFxuXG4gIGhpZGU6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy5idWJibGUuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICB9LFxuXG4gIGNsZWFudXA6IGZ1bmN0aW9uKCl7XG4gICAgdGhpcy5kb2NFbG0ucmVtb3ZlQ2hpbGQodGhpcy5idWJibGUpXG4gIH1cblxufSlcbiIsIm1vZHVsZS5leHBvcnRzID0gZGltZW5zaW9uc1xuZnVuY3Rpb24gZGltZW5zaW9ucyhlbG0pe1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBlbG0ub2Zmc2V0V2lkdGgsXG4gICAgaGVpZ2h0OiBlbG0ub2Zmc2V0SGVpZ2h0XG4gIH1cbn0iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRzdCwgc3JjKXtcbiAgZm9yICh2YXIgcHJvcCBpbiBzcmMpe1xuICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXVxuICB9XG59IiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGJpbmRMaXN0ZW5lcnM6IGZ1bmN0aW9uKCl7XG4gICAgaWYgKCF0aGlzLmJpbmRFdmVudHMpIHJldHVyblxuICAgIGlmICghdGhpcy5fX2JvdW5kTGlzdGVuZXJzKXtcbiAgICAgIHRoaXMuX19ib3VuZExpc3RlbmVycyA9IHt9XG4gICAgICB0aGlzLmJpbmRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldnQpe1xuICAgICAgICB0aGlzLl9fYm91bmRMaXN0ZW5lcnNbZXZ0XSA9IGZ1bmN0aW9uKGUpe1xuICAgICAgICAgIHRoaXNbJ29uJyArIGV2dF0oZSlcbiAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICB9LCB0aGlzKVxuICAgIH1cbiAgICB0aGlzLmJpbmRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldnQpe1xuICAgICAgdGhpcy5kb2MuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgZXZ0LnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHRoaXMuX19ib3VuZExpc3RlbmVyc1tldnRdKVxuICAgIH0sIHRoaXMpXG4gIH0sXG5cbiAgdW5iaW5kTGlzdGVuZXJzOiBmdW5jdGlvbigpe1xuICAgIGlmICghdGhpcy5iaW5kRXZlbnRzIHx8ICF0aGlzLl9fYm91bmRMaXN0ZW5lcnMpIHJldHVyblxuICAgIHRoaXMuYmluZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2dCl7XG4gICAgICB0aGlzLmRvYy5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICBldnQudG9Mb3dlckNhc2UoKSwgXG4gICAgICAgIHRoaXMuX19ib3VuZExpc3RlbmVyc1tldnRdKVxuICAgIH0sIHRoaXMpXG4gIH1cbn1cbiIsIlxubW9kdWxlLmV4cG9ydHMgPSBjYXBpdGFsaXplXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cil7XG4gIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpXG59Il19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment