UNPKG

@exoplay/exobot-db-s3

Version:
2 lines 33.3 kB
require("source-map-support").install(),require("regenerator-runtime/runtime"),function(e,r){for(var t in r)e[t]=r[t]}(exports,function(e){function r(n){if(t[n])return t[n].exports;var u=t[n]={i:n,l:!1,exports:{}};return e[n].call(u.exports,u,u.exports,r),u.l=!0,u.exports}var t={};return r.m=e,r.c=t,r.i=function(e){return e},r.d=function(e,r,t){Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r(r.s=1)}([function(e,r){e.exports=require("aws-sdk")},function(e,r,t){"use strict";function n(e){return function(){var r=e.apply(this,arguments);return new Promise(function(e,t){function n(u,o){try{var c=r[u](o),a=c.value}catch(e){return void t(e)}return c.done?void e(a):Promise.resolve(a).then(function(e){n("next",e)},function(e){n("throw",e)})}return n("next")})}}function u(e,r,t,u){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return function(){var c=n(regeneratorRuntime.mark(function n(c){var f,p=this;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.delegateYield(regeneratorRuntime.mark(function n(){var i;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(!o){n.next=3;break}return n.next=3,s(e,r,t,u);case 3:return i=new a.a.S3({region:e,accessKeyId:r,secretAccessKey:t,params:{Bucket:u}}),n.abrupt("return",{v:new Promise(function(e,r){i.getObject({Bucket:u,Key:c},function(t,n){return t&&404===t.statusCode?e(""):t?r(t):e(n.Body.toString())})})});case 5:case"end":return n.stop()}},n,p)})(),"t0",2);case 2:if(f=n.t0,"object"!==("undefined"==typeof f?"undefined":i(f))){n.next=5;break}return n.abrupt("return",f.v);case 5:n.next=10;break;case 7:n.prev=7,n.t1=n.catch(0),console.log(n.t1);case 10:case"end":return n.stop()}},n,this,[[0,7]])}));return function(e){return c.apply(this,arguments)}}()}function o(e,r,t,u){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return function(){var c=n(regeneratorRuntime.mark(function n(c,f){var p,v=this;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.delegateYield(regeneratorRuntime.mark(function n(){var i;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(!o){n.next=3;break}return n.next=3,s(e,r,t,u);case 3:return i=new a.a.S3({region:e,accessKeyId:r,secretAccessKey:t,params:{Bucket:u,Key:c}}),n.abrupt("return",{v:new Promise(function(e,r){i.upload({Body:f},function(t,n){return t?r(t):void e(n)})})});case 5:case"end":return n.stop()}},n,v)})(),"t0",2);case 2:if(p=n.t0,"object"!==("undefined"==typeof p?"undefined":i(p))){n.next=5;break}return n.abrupt("return",p.v);case 5:n.next=10;break;case 7:n.prev=7,n.t1=n.catch(0),console.log(n.t1);case 10:case"end":return n.stop()}},n,this,[[0,7]])}));return function(e,r){return c.apply(this,arguments)}}()}var c=t(0),a=t.n(c);r.readS3=u,r.writeS3=o,t.d(r,"createS3Bucket",function(){return s});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=function(){var e=n(regeneratorRuntime.mark(function e(r,t,n,u){var o;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,o=function(){var e=new a.a.S3({region:r,accessKeyId:t,secretAccessKey:n,params:{Bucket:u}});return{v:new Promise(function(r){return e.createBucket(r)})}}(),"object"!==("undefined"==typeof o?"undefined":i(o))){e.next=4;break}return e.abrupt("return",o.v);case 4:e.next=9;break;case 6:e.prev=6,e.t0=e.catch(0),console.log(e.t0);case 9:case"end":return e.stop()}},e,this,[[0,6]])}));return function(r,t,n,u){return e.apply(this,arguments)}}()}])); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vczMuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIDhhOWEzMTE1Yzg2M2NiODFkNmJkIiwid2VicGFjazovLy9leHRlcm5hbCBcImF3cy1zZGtcIiIsIndlYnBhY2s6Ly8vLi9zMy5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlIiwiaW5zdGFsbCIsImUiLCJhIiwiaSIsImV4cG9ydHMiLCJtb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaW5zdGFsbGVkTW9kdWxlcyIsIm1vZHVsZSIsImwiLCJjYWxsIiwibSIsImMiLCJ2YWx1ZSIsImQiLCJuYW1lIiwiZ2V0dGVyIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwibiIsIl9fZXNNb2R1bGUiLCJvIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJmbiIsImdlbiIsImFwcGx5IiwidGhpcyIsImFyZ3VtZW50cyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic3RlcCIsImtleSIsImFyZyIsImluZm8iLCJlcnJvciIsImRvbmUiLCJ0aGVuIiwiZXJyIiwicmVhZFMzIiwicmVnaW9uIiwiYWNjZXNzS2V5SWQiLCJzZWNyZXRBY2Nlc3NLZXkiLCJidWNrZXQiLCJjcmVhdGVCdWNrZXQiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJfcmVmIiwicmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUyIiwicGF0aCIsIl9yZXQiLCJfdGhpcyIsIndyYXAiLCJfY29udGV4dDIiLCJwcmV2IiwibmV4dCIsImRlbGVnYXRlWWllbGQiLCJfY2FsbGVlIiwiczNidWNrZXQiLCJfY29udGV4dCIsImNyZWF0ZVMzQnVja2V0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2F3c19zZGtfX19kZWZhdWx0IiwiUzMiLCJwYXJhbXMiLCJCdWNrZXQiLCJhYnJ1cHQiLCJ2IiwiZ2V0T2JqZWN0IiwiS2V5IiwiZGF0YSIsInN0YXR1c0NvZGUiLCJCb2R5IiwidG9TdHJpbmciLCJzdG9wIiwidDAiLCJfdHlwZW9mIiwidDEiLCJjb25zb2xlIiwibG9nIiwiX3gyIiwid3JpdGVTMyIsIl9yZWYyIiwiX2NhbGxlZTQiLCJfcmV0MiIsIl90aGlzMiIsIl9jb250ZXh0NCIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwidXBsb2FkIiwiX3g0IiwiX3g1IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2F3c19zZGtfXyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwib2JqIiwiY29uc3RydWN0b3IiLCJfcmVmMyIsIl9jYWxsZWU1IiwiX3JldDMiLCJfY29udGV4dDUiLCJuZXdCdWNrZXQiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiXSwibWFwcGluZ3MiOiJBQUFBQSxRQUFRLHNCQUFzQkMsVUFBVUQsUUFBUSwrQkFDL0MsU0FBU0UsRUFBR0MsR0FBSyxJQUFJLEdBQUlDLEtBQUtELEdBQUdELEVBQUVFLEdBQUtELEVBQUVDLElBQU1DLFFBQWtCLFNBQVVDLEdDRzdFLFFBQUFDLEdBQUFDLEdBR0EsR0FBQUMsRUFBQUQsR0FDQSxNQUFBQyxHQUFBRCxHQUFBSCxPQUdBLElBQUFLLEdBQUFELEVBQUFELElBQ0FKLEVBQUFJLEVBQ0FHLEdBQUEsRUFDQU4sV0FVQSxPQU5BQyxHQUFBRSxHQUFBSSxLQUFBRixFQUFBTCxRQUFBSyxJQUFBTCxRQUFBRSxHQUdBRyxFQUFBQyxHQUFBLEVBR0FELEVBQUFMLFFBdkJBLEdBQUFJLEtBNkRBLE9BakNBRixHQUFBTSxFQUFBUCxFQUdBQyxFQUFBTyxFQUFBTCxFQUdBRixFQUFBSCxFQUFBLFNBQUFXLEdBQTJDLE1BQUFBLElBRzNDUixFQUFBUyxFQUFBLFNBQUFYLEVBQUFZLEVBQUFDLEdBQ0FDLE9BQUFDLGVBQUFmLEVBQUFZLEdBQ0FJLGNBQUEsRUFDQUMsWUFBQSxFQUNB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QkFBQTZFLEVBQUFDLEVBQUFDLEVBQUFDLEdBQUEsTUFBQVIsR0FBQXpFLE1BQUFDLEtBQUFDIiwiZmlsZSI6InMzLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZShcInNvdXJjZS1tYXAtc3VwcG9ydFwiKS5pbnN0YWxsKCk7cmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcbihmdW5jdGlvbihlLCBhKSB7IGZvcih2YXIgaSBpbiBhKSBlW2ldID0gYVtpXTsgfShleHBvcnRzLCAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vcnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9yeSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4vKioqKioqLyBcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdGdldDogZ2V0dGVyXG4vKioqKioqLyBcdFx0fSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYXdzLXNka1wiKTtcblxuLyoqKi8gfSxcbi8qIDEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYXdzX3Nka19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYXdzX3Nka19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2F3c19zZGtfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBleHBvcnRzW1wicmVhZFMzXCJdID0gcmVhZFMzO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gZXhwb3J0c1tcIndyaXRlUzNcIl0gPSB3cml0ZVMzO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChleHBvcnRzLCBcImNyZWF0ZVMzQnVja2V0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUzNCdWNrZXQ7IH0pO1xudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgZnVuY3Rpb24gc3RlcChrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkgeyBzdGVwKFwibmV4dFwiLCB2YWx1ZSk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgc3RlcChcInRocm93XCIsIGVycik7IH0pOyB9IH0gcmV0dXJuIHN0ZXAoXCJuZXh0XCIpOyB9KTsgfTsgfVxuXG5cblxuZnVuY3Rpb24gcmVhZFMzKHJlZ2lvbiwgYWNjZXNzS2V5SWQsIHNlY3JldEFjY2Vzc0tleSwgYnVja2V0KSB7XG4gIHZhciBjcmVhdGVCdWNrZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZhbHNlO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9yZWYgPSBfYXN5bmNUb0dlbmVyYXRvcihyZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBfY2FsbGVlMihwYXRoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3JldDtcblxuICAgICAgcmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgX2NvbnRleHQyLnByZXYgPSAwO1xuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmRlbGVnYXRlWWllbGQocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgczNidWNrZXQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjcmVhdGVCdWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVTM0J1Y2tldChyZWdpb24sIGFjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIGJ1Y2tldCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBzM2J1Y2tldCA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYXdzX3Nka19fX2RlZmF1bHQuYS5TMyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbjogcmVnaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NLZXlJZDogYWNjZXNzS2V5SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleTogc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoJ3JldHVybicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdjogbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzYnVja2V0LmdldE9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleTogcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgJiYgZXJyLnN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGRhdGEuQm9keS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgX2NhbGxlZSwgX3RoaXMpO1xuICAgICAgICAgICAgICB9KSgpLCAndDAnLCAyKTtcblxuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBfcmV0ID0gX2NvbnRleHQyLnQwO1xuXG4gICAgICAgICAgICAgIGlmICghKCh0eXBlb2YgX3JldCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoX3JldCkpID09PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCdyZXR1cm4nLCBfcmV0LnYpO1xuXG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgIF9jb250ZXh0Mi5wcmV2ID0gNztcbiAgICAgICAgICAgICAgX2NvbnRleHQyLnQxID0gX2NvbnRleHQyWydjYXRjaCddKDApO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhfY29udGV4dDIudDEpO1xuICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgX2NhbGxlZTIsIHRoaXMsIFtbMCwgN11dKTtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKF94Mikge1xuICAgICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9KCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlUzMocmVnaW9uLCBhY2Nlc3NLZXlJZCwgc2VjcmV0QWNjZXNzS2V5LCBidWNrZXQpIHtcbiAgdmFyIGNyZWF0ZUJ1Y2tldCA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogZmFsc2U7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3JlZjIgPSBfYXN5bmNUb0dlbmVyYXRvcihyZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBfY2FsbGVlNChwYXRoLCBkYXRhKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF9yZXQyO1xuXG4gICAgICByZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkge1xuICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQ0LnByZXYgPSBfY29udGV4dDQubmV4dCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBfY29udGV4dDQucHJldiA9IDA7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuZGVsZWdhdGVZaWVsZChyZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBfY2FsbGVlMygpIHtcbiAgICAgICAgICAgICAgICB2YXIgczNidWNrZXQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHtcbiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQzLnByZXYgPSBfY29udGV4dDMubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3JlYXRlQnVja2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVTM0J1Y2tldChyZWdpb24sIGFjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIGJ1Y2tldCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBzM2J1Y2tldCA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYXdzX3Nka19fX2RlZmF1bHQuYS5TMyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbjogcmVnaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NLZXlJZDogYWNjZXNzS2V5SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleTogc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXk6IHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgncmV0dXJuJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2OiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczNidWNrZXQudXBsb2FkKHsgQm9keTogZGF0YSB9LCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMywgX3RoaXMyKTtcbiAgICAgICAgICAgICAgfSkoKSwgJ3QwJywgMik7XG5cbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgX3JldDIgPSBfY29udGV4dDQudDA7XG5cbiAgICAgICAgICAgICAgaWYgKCEoKHR5cGVvZiBfcmV0MiA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoX3JldDIpKSA9PT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LmFicnVwdCgncmV0dXJuJywgX3JldDIudik7XG5cbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAxMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgX2NvbnRleHQ0LnByZXYgPSA3O1xuICAgICAgICAgICAgICBfY29udGV4dDQudDEgPSBfY29udGV4dDRbJ2NhdGNoJ10oMCk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKF9jb250ZXh0NC50MSk7XG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBfY2FsbGVlNCwgdGhpcywgW1swLCA3XV0pO1xuICAgIH0pKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoX3g0LCBfeDUpIHtcbiAgICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH0oKTtcbn1cblxudmFyIGNyZWF0ZVMzQnVja2V0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjMgPSBfYXN5bmNUb0dlbmVyYXRvcihyZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBfY2FsbGVlNShyZWdpb24sIGFjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIGJ1Y2tldCkge1xuICAgIHZhciBfcmV0MztcblxuICAgIHJldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBfY2FsbGVlNSQoX2NvbnRleHQ1KSB7XG4gICAgICB3aGlsZSAoMSkge1xuICAgICAgICBzd2l0Y2ggKF9jb250ZXh0NS5wcmV2ID0gX2NvbnRleHQ1Lm5leHQpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBfY29udGV4dDUucHJldiA9IDA7XG5cbiAgICAgICAgICAgIF9yZXQzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgbmV3QnVja2V0ID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9hd3Nfc2RrX19fZGVmYXVsdC5hLlMzKHtcbiAgICAgICAgICAgICAgICByZWdpb246IHJlZ2lvbixcbiAgICAgICAgICAgICAgICBhY2Nlc3NLZXlJZDogYWNjZXNzS2V5SWQsXG4gICAgICAgICAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBzZWNyZXRBY2Nlc3NLZXksXG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2OiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0J1Y2tldC5jcmVhdGVCdWNrZXQocmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgaWYgKCEoKHR5cGVvZiBfcmV0MyA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoX3JldDMpKSA9PT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSA0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5hYnJ1cHQoJ3JldHVybicsIF9yZXQzLnYpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSA5O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBfY29udGV4dDUucHJldiA9IDY7XG4gICAgICAgICAgICBfY29udGV4dDUudDAgPSBfY29udGV4dDVbJ2NhdGNoJ10oMCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhfY29udGV4dDUudDApO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBfY2FsbGVlNSwgdGhpcywgW1swLCA2XV0pO1xuICB9KSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVMzQnVja2V0KF94NiwgX3g3LCBfeDgsIF94OSkge1xuICAgIHJldHVybiBfcmVmMy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuXG4vKioqLyB9XG4vKioqKioqLyBdKSkpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzMy5qcyIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb3J5IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vcnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdH0pO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA4YTlhMzExNWM4NjNjYjgxZDZiZCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImF3cy1zZGtcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJhd3Mtc2RrXCJcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IEFXUyBmcm9tICdhd3Mtc2RrJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTMyAocmVnaW9uLCBhY2Nlc3NLZXlJZCwgc2VjcmV0QWNjZXNzS2V5LCBidWNrZXQsIGNyZWF0ZUJ1Y2tldD1mYWxzZSkge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKHBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGNyZWF0ZUJ1Y2tldCkge1xuICAgICAgICBhd2FpdCBjcmVhdGVTM0J1Y2tldChyZWdpb24sIGFjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIGJ1Y2tldCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHMzYnVja2V0ID0gbmV3IEFXUy5TMyh7XG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgYWNjZXNzS2V5SWQsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleSxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgQnVja2V0OiBidWNrZXQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgczNidWNrZXQuZ2V0T2JqZWN0KHtcbiAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICBLZXk6IHBhdGgsXG4gICAgICAgIH0sIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoZXJyICYmIGVyci5zdGF0dXNDb2RlID09PSA0MDQpIHsgcmV0dXJuIHJlc29sdmUgKCcnKTsgfVxuICAgICAgICAgIGlmIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGF0YS5Cb2R5LnRvU3RyaW5nKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHsgY29uc29sZS5sb2coZSk7IH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUzMgKHJlZ2lvbiwgYWNjZXNzS2V5SWQsIHNlY3JldEFjY2Vzc0tleSwgYnVja2V0LCBjcmVhdGVCdWNrZXQ9ZmFsc2UpIHtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIChwYXRoLCBkYXRhKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChjcmVhdGVCdWNrZXQpIHtcbiAgICAgICAgYXdhaXQgY3JlYXRlUzNCdWNrZXQocmVnaW9uLCBhY2Nlc3NLZXlJZCwgc2VjcmV0QWNjZXNzS2V5LCBidWNrZXQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzM2J1Y2tldCA9IG5ldyBBV1MuUzMoe1xuICAgICAgICByZWdpb24sXG4gICAgICAgIGFjY2Vzc0tleUlkLFxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXksXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIEJ1Y2tldDogYnVja2V0LFxuICAgICAgICAgIEtleTogcGF0aCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzM2J1Y2tldC51cGxvYWQoeyBCb2R5OiBkYXRhIH0sIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfVxuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaChlKSB7IGNvbnNvbGUubG9nKGUpOyB9XG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTM0J1Y2tldCAocmVnaW9uLCBhY2Nlc3NLZXlJZCwgc2VjcmV0QWNjZXNzS2V5LCBidWNrZXQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuZXdCdWNrZXQgPSBuZXcgQVdTLlMzKHtcbiAgICAgIHJlZ2lvbixcbiAgICAgIGFjY2Vzc0tleUlkLFxuICAgICAgc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIEJ1Y2tldDogYnVja2V0LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IG5ld0J1Y2tldC5jcmVhdGVCdWNrZXQocmVzb2x2ZSkpO1xuICB9IGNhdGNoKGUpIHsgY29uc29sZS5sb2coZSk7IH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3MzLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==