landxml/bundles/landxml.browser.js

3 lines
2.4 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*! For license information please see landxml.browser.js.LICENSE.txt */
var landxml;landxml=(()=>{var t={9831:(t,e,r)=>{"use strict";var n=r(6507),i=6378137;function o(t){var e=0;if(t&&t.length>0){e+=Math.abs(s(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(s(t[r]))}return e}function s(t){var e,r,n,o,s,h,u=0,c=t.length;if(c>2){for(h=0;h<c;h++)h===c-2?(n=c-2,o=c-1,s=0):h===c-1?(n=c-1,o=0,s=1):(n=h,o=h+1,s=h+2),e=t[n],r=t[o],u+=(a(t[s][0])-a(e[0]))*Math.sin(a(r[1]));u=u*i*i/2}return u}function a(t){return t*Math.PI/180}e.Z=function(t){return n.geomReduce(t,(function(t,e){return t+function(t){var e,r=0;switch(t.type){case"Polygon":return o(t.coordinates);case"MultiPolygon":for(e=0;e<t.coordinates.length;e++)r+=o(t.coordinates[e]);return r;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0}return 0}(e)}),0)}},9118:(t,e)=>{"use strict";function r(t){var e={type:"Feature"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"properties":case"geometry":return;default:e[r]=t[r]}})),e.properties=n(t.properties),e.geometry=i(t.geometry),e}function n(t){var e={};return t?(Object.keys(t).forEach((function(r){var i=t[r];"object"==typeof i?null===i?e[r]=null:Array.isArray(i)?e[r]=i.map((function(t){return t})):e[r]=n(i):e[r]=i})),e):e}function i(t){var e={type:t.type};return t.bbox&&(e.bbox=t.bbox),"GeometryCollection"===t.type?(e.geometries=t.geometries.map((function(t){return i(t)})),e):(e.coordinates=o(t.coordinates),e)}function o(t){var e=t;return"object"!=typeof e[0]?e.slice():e.map((function(t){return o(t)}))}e.Z=function(t){if(!t)throw new Error("geojson is required");switch(t.type){case"Feature":return r(t);case"FeatureCollection":return function(t){var e={type:"FeatureCollection"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"features":return;default:e[r]=t[r]}})),e.features=t.features.map((function(t){return r(t)})),e}(t);case"Point":case"LineString":case"Polygon":case"MultiPoint":case"MultiLineString":case"MultiPolygon":case"GeometryCollection":return i(t);default:throw new Error("unknown GeoJSON type")}}},5300:(t,e)=>{"use strict";function r(t,e,r){void 0===r&&(r={});var n={type:"Feature"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){return void 0===n&&(n={}),r({type:"Point",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,o=t;i<o.length;i++){var s=o[i];if(s.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");for(var a=0;a<s[s.length-1].length;a++)if(s[s.length-1][a]!==s[0][a])throw new Error("First and last Position are not equivalent.")}return r({type:"Polygon",coordinates:t},e,n)}function o(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error("coordinates must be an array of two or more positions");return r({type:"LineString",coordinates:t},e,n)}function s(t,e){void 0===e&&(e={});var r={type:"FeatureCollection"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function a(t,e,n){return void 0===n&&(n={}),r({type:"MultiLineString",coordinates:t},e,n)}function h(t,e,n){return void 0===n&&(n={}),r({type:"MultiPoint",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:"MultiPolygon",coordinates:t},e,n)}function c(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t*n}function l(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t/n}function f(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)&&!/^\s*$/.test(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:e.earthRadius/1.0936},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1/1.0936},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case"Point":return n(e).geometry;case"LineString":return o(e).geometry;case"Polygon":return i(e).geometry;case"MultiPoint":return h(e).geometry;case"MultiLineString":return a(e).geometry;case"MultiPolygon":return u(e).geometry;default:throw new Error(t+" is invalid")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),s(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),s(t.map((function(t){return i(t,e)})),r)},e.lineString=o,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),s(t.map((function(t){return o(t,e)})),r)},e.featureCollection=s,e.multiLineString=a,e.multiPoint=h,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:"GeometryCollection",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error("precision must be a positive number");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=l,e.lengthToDegrees=function(t,e){return f(l(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=f,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e="kilometers"),void 0===r&&(r="kilometers"),!(t>=0))throw new Error("length must be a positive number");return c(l(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r="meters"),void 0===n&&(n="kilometers"),!(t>=0))throw new Error("area must be a positive number");var i=e.areaFactors[r];if(!i)throw new Error("invalid original units");var o=e.areaFactors[n];if(!o)throw new Error("invalid final units");return t/i*o},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error("bbox is required");if(!Array.isArray(t))throw new Error("bbox must be an Array");if(4!==t.length&&6!==t.length)throw new Error("bbox must be an Array of 4 or 6 numbers");t.forEach((function(t){if(!p(t))throw new Error("bbox must only contain numbers")}))},e.validateId=function(t){if(!t)throw new Error("id is required");if(-1===["string","number"].indexOf(typeof t))throw new Error("id must be a number or a string")},e.radians2degrees=function(){throw new Error("method has been renamed to `radiansToDegrees`")},e.degrees2radians=function(){throw new Error("method has been renamed to `degreesToRadians`")},e.distanceToDegrees=function(){throw new Error("method has been renamed to `lengthToDegrees`")},e.distanceToRadians=function(){throw new Error("method has been renamed to `lengthToRadians`")},e.radiansToDistance=function(){throw new Error("method has been renamed to `radiansToLength`")},e.bearingToAngle=function(){throw new Error("method has been renamed to `bearingToAzimuth`")},e.convertDistance=function(){throw new Error("method has been renamed to `convertLength`")}},6507:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(5300);function i(t,e,r){if(null!==t)for(var n,o,s,a,h,u,c,l,f=0,p=0,d=t.type,y="FeatureCollection"===d,g="Feature"===d,m=y?t.features.length:1,v=0;v<m;v++){h=(l=!!(c=y?t.features[v].geometry:g?t.geometry:t)&&"GeometryCollection"===c.type)?c.geometries.length:1;for(var w=0;w<h;w++){var b=0,M=0;if(null!==(a=l?c.geometries[w]:c)){u=a.coordinates;var _=a.type;switch(f=!r||"Polygon"!==_&&"MultiPolygon"!==_?0:1,_){case null:break;case"Point":if(!1===e(u,p,v,b,M))return!1;p++,b++;break;case"LineString":case"MultiPoint":for(n=0;n<u.length;n++){if(!1===e(u[n],p,v,b,M))return!1;p++,"MultiPoint"===_&&b++}"LineString"===_&&b++;break;case"Polygon":case"MultiLineString":for(n=0;n<u.length;n++){for(o=0;o<u[n].length-f;o++){if(!1===e(u[n][o],p,v,b,M))return!1;p++}"MultiLineString"===_&&b++,"Polygon"===_&&M++}"Polygon"===_&&b++;break;case"MultiPolygon":for(n=0;n<u.length;n++){for(M=0,o=0;o<u[n].length;o++){for(s=0;s<u[n][o].length-f;s++){if(!1===e(u[n][o][s],p,v,b,M))return!1;p++}M++}b++}break;case"GeometryCollection":for(n=0;n<a.geometries.length;n++)if(!1===i(a.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function o(t,e){var r;switch(t.type){case"FeatureCollection":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case"Feature":e(t.properties,0)}}function s(t,e){if("Feature"===t.type)e(t,0);else if("FeatureCollection"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function a(t,e){var r,n,i,o,s,a,h,u,c,l,f=0,p="FeatureCollection"===t.type,d="Feature"===t.type,y=p?t.features.length:1;for(r=0;r<y;r++){for(a=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,l=p?t.features[r].id:d?t.id:void 0,s=(h=!!a&&"GeometryCollection"===a.type)?a.geometries.length:1,i=0;i<s;i++)if(null!==(o=h?a.geometries[i]:a))switch(o.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===e(o,f,u,c,l))return!1;break;case"GeometryCollection":for(n=0;n<o.geometries.length;n++)if(!1===e(o.geometries[n],f,u,c,l))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===e(null,f,u,c,l))return!1;f++}}function h(t,e){a(t,(function(t,r,i,o,s){var a,h=null===t?null:t.type;switch(h){case null:case"Point":case"LineString":case"Polygon":return!1!==e(n.feature(t,i,{bbox:o,id:s}),r,0)&&void 0}switch(h){case"MultiPoint":a="Point";break;case"MultiLineString":a="LineString";break;case"MultiPolygon":a="Polygon"}for(var u=0;u<t.coordinates.length;u++){var c={type:a,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){h(t,(function(t,r,o){var s=0;if(t.geometry){var a=t.geometry.type;if("Point"!==a&&"MultiPoint"!==a){var h,u=0,c=0,l=0;return!1!==i(t,(function(i,a,f,p,d){if(void 0===h||r>u||p>c||d>l)return h=i,u=r,c=p,l=d,void(s=0);var y=n.lineString([h,i],t.properties);if(!1===e(y,r,o,d,s))return!1;s++,h=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error("geojson is required");h(t,(function(t,r,i){if(null!==t.geometry){var o=t.geometry.type,s=t.geometry.coordinates;switch(o){case"LineString":if(!1===e(t,r,i,0,0))return!1;break;case"Polygon":for(var a=0;a<s.length;a++)if(!1===e(n.lineString(s[a],t.properties),r,i,a))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var o=r;return i(t,(function(t,n,i,s,a){o=0===n&&void 0===r?t:e(o,t,n,i,s,a)}),n),o},e.propEach=o,e.propReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=s,e.featureReduce=function(t,e,r){var n=r;return s(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=a,e.geomReduce=function(t,e,r){var n=r;return a(t,(function(t,i,o,s,a){n=0===i&&void 0===r?t:e(n,t,i,o,s,a)})),n},e.flattenEach=h,e.flattenReduce=function(t,e,r){var n=r;return h(t,(function(t,i,o){n=0===i&&0===o&&void 0===r?t:e(n,t,i,o)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,o,s,a,h){n=!1===i&&void 0===r?t:e(n,t,o,s,a,h),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,o,s){n=0===i&&void 0===r?t:e(n,t,i,o,s)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,o=e.multiFeatureIndex||0,s=e.geometryIndex||0,a=e.segmentIndex||0,h=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),h=h||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":h=h||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":case"MultiPoint":return null;case"LineString":return a<0&&(a=u.length+a-1),n.lineString([u[a],u[a+1]],h,e);case"Polygon":return s<0&&(s=u.length+s),a<0&&(a=u[s].length+a-1),n.lineString([u[s][a],u[s][a+1]],h,e);case"MultiLineString":return o<0&&(o=u.length+o),a<0&&(a=u[o].length+a-1),n.lineString([u[o][a],u[o][a+1]],h,e);case"MultiPolygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),a<0&&(a=u[o][s].length-a-1),n.lineString([u[o][s][a],u[o][s][a+1]],h,e)}throw new Error("geojson is invalid")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,o=e.multiFeatureIndex||0,s=e.geometryIndex||0,a=e.coordIndex||0,h=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),h=h||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":h=h||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":return n.point(u,h,e);case"MultiPoint":return o<0&&(o=u.length+o),n.point(u[o],h,e);case"LineString":return a<0&&(a=u.length+a),n.point(u[a],h,e);case"Polygon":return s<0&&(s=u.length+s),a<0&&(a=u[s].length+a),n.point(u[s][a],h,e);case"MultiLineString":return o<0&&(o=u.length+o),a<0&&(a=u[o].length+a),n.point(u[o][a],h,e);case"MultiPolygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),a<0&&(a=u[o][s].length-a),n.point(u[o][s][a],h,e)}throw new Error("geojson is invalid")}},6934:(t,e,r)=>{"use strict";var n=r(4213),i=r(562),o=r(5300);e.Z=function(t,e,r){void 0===r&&(r={});var s=i.getGeom(t).coordinates,a=i.getGeom(e).coordinates,h=n.union(s,a);return 0===h.length?null:1===h.length?o.polygon(h[0],r.properties):o.multiPolygon(h,r.properties)}},562:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(5300);e.getCoord=function(t){if(!t)throw new Error("coord is required");if(!Array.isArray(t)){if("Feature"===t.type&&null!==t.geometry&&"Point"===t.geometry.type)return t.geometry.coordinates;if("Point"===t.type)return t.coordinates}if(Array.isArray(t)&&t.length>=2&&!Array.isArray(t[0])&&!Array.isArray(t[1]))return t;throw new Error("coord must be GeoJSON Point or an Array of numbers")},e.getCoords=function(t){if(Array.isArray(t))return t;if("Feature"===t.type){if(null!==t.geometry)return t.geometry.coordinates}else if(t.coordinates)return t.coordinates;throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")},e.containsNumber=function t(e){if(e.length>1&&n.isNumber(e[0])&&n.isNumber(e[1]))return!0;if(Array.isArray(e[0])&&e[0].length)return t(e[0]);throw new Error("coordinates must only contain numbers")},e.geojsonType=function(t,e,r){if(!e||!r)throw new Error("type and name required");if(!t||t.type!==e)throw new Error("Invalid input to "+r+": must be a "+e+", given "+t.type)},e.featureOf=function(t,e,r){if(!t)throw new Error("No feature passed");if(!r)throw new Error(".featureOf() requires a name");if(!t||"Feature"!==t.type||!t.geometry)throw new Error("Invalid input to "+r+", Feature with geometry required");if(!t.geometry||t.geometry.type!==e)throw new Error("Invalid input to "+r+": must be a "+e+", given "+t.geometry.type)},e.collectionOf=function(t,e,r){if(!t)throw new Error("No featureCollection passed");if(!r)throw new Error(".collectionOf() requires a name");if(!t||"FeatureCollection"!==t.type)throw new Error("Invalid input to "+r+", FeatureCollection required");for(var n=0,i=t.features;n<i.length;n++){var o=i[n];if(!o||"Feature"!==o.type||!o.geometry)throw new Error("Invalid input to "+r+", Feature with geometry required");if(!o.geometry||o.geometry.type!==e)throw new Error("Invalid input to "+r+": must be a "+e+", given "+o.geometry.type)}},e.getGeom=function(t){return"Feature"===t.type?t.geometry:t},e.getType=function(t,e){return"FeatureCollection"===t.type?"FeatureCollection":"GeometryCollection"===t.type?"GeometryCollection":"Feature"===t.type&&null!==t.geometry?t.geometry.type:t.type}},6007:(t,e,r)=>{"use strict";if(r(5706),r(3714),r(5994),r.g._babelPolyfill)throw new Error("only one instance of babel-polyfill is allowed");function n(t,e,r){t[e]||Object.defineProperty(t,e,{writable:!0,configurable:!0,value:r})}r.g._babelPolyfill=!0,n(String.prototype,"padLeft","".padStart),n(String.prototype,"padRight","".padEnd),"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach((function(t){[][t]&&n(Array,t,Function.call.bind([][t]))}))},3714:function(t,e,r){!function(e){"use strict";var r,n=Object.prototype,i=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",h=o.toStringTag||"@@toStringTag",u=e.regeneratorRuntime;if(u)t.exports=u;else{(u=e.regeneratorRuntime=t.exports).wrap=w;var c="suspendedStart",l="suspendedYield",f="executing",p="completed",d={},y={};y[s]=function(){return this};var g=Object.getPrototypeOf,m=g&&g(g(P([])));m&&m!==n&&i.call(m,s)&&(y=m);var v=x.prototype=M.prototype=Object.create(y);_.prototype=v.constructor=x,x.constructor=_,x[h]=_.displayName="GeneratorFunction",u.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===_||"GeneratorFunction"===(e.displayName||e.name))},u.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,x):(t.__proto__=x,h in t||(t[h]="GeneratorFunction")),t.prototype=Object.create(v),t},u.awrap=function(t){return{__await:t}},E(S.prototype),S.prototype[a]=function(){return this},u.AsyncIterator=S,u.async=function(t,e,r,n){var i=new S(w(t,e,r,n));return u.isGeneratorFunction(e)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},E(v),v[h]="Generator",v[s]=function(){return this},v.toString=function(){return"[object Generator]"},u.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},u.values=P,N.prototype={constructor:N,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(I),!t)for(var e in this)"t"===e.charAt(0)&&i.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=r)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(n,i){return a.type="throw",a.arg=t,e.next=n,i&&(e.method="next",e.arg=r),!!i}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return n("end");if(s.tryLoc<=this.prev){var h=i.call(s,"catchLoc"),u=i.call(s,"finallyLoc");if(h&&u){if(this.prev<s.catchLoc)return n(s.catchLoc,!0);if(this.prev<s.finallyLoc)return n(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return n(s.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return n(s.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var o=n;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=t,s.arg=e,o?(this.method="next",this.next=o.finallyLoc,d):this.complete(s)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),d},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),I(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;I(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:P(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),d}}}function w(t,e,r,n){var i=e&&e.prototype instanceof M?e:M,o=Object.create(i.prototype),s=new N(n||[]);return o._invoke=function(t,e,r){var n=c;return function(i,o){if(n===f)throw new Error("Generator is already running");if(n===p){if("throw"===i)throw o;return A()}for(r.method=i,r.arg=o;;){var s=r.delegate;if(s){var a=O(s,r);if(a){if(a===d)continue;return a}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===c)throw n=p,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=f;var h=b(t,e,r);if("normal"===h.type){if(n=r.done?p:l,h.arg===d)continue;return{value:h.arg,done:r.done}}"throw"===h.type&&(n=p,r.method="throw",r.arg=h.arg)}}}(t,r,s),o}function b(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function M(){}function _(){}function x(){}function E(t){["next","throw","return"].forEach((function(e){t[e]=function(t){return this._invoke(e,t)}}))}function S(t){function r(e,n,o,s){var a=b(t[e],t,n);if("throw"!==a.type){var h=a.arg,u=h.value;return u&&"object"==typeof u&&i.call(u,"__await")?Promise.resolve(u.__await).then((function(t){r("next",t,o,s)}),(function(t){r("throw",t,o,s)})):Promise.resolve(u).then((function(t){h.value=t,o(h)}),s)}s(a.arg)}var n;"object"==typeof e.process&&e.process.domain&&(r=e.process.domain.bind(r)),this._invoke=function(t,e){function i(){return new Promise((function(n,i){r(t,e,n,i)}))}return n=n?n.then(i,i):i()}}function O(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,O(t,e),"throw"===e.method))return d;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var i=b(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,d):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function T(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function I(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function N(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(T,this),this.reset(!0)}function P(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n<t.length;)if(i.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=r,e.done=!0,e};return o.next=o}}return{next:A}}function A(){return{value:r,done:!0}}}("object"==typeof r.g?r.g:"object"==typeof window?window:"object"==typeof self?self:this)},9584:(t,e)=>{"use strict";e.byteLength=function(t){var e=h(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,o=h(t),s=o[0],a=o[1],u=new i(function(t,e,r){return 3*(e+r)/4-r}(0,s,a)),c=0,l=a>0?s-4:s;for(r=0;r<l;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],u[c++]=e>>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===a&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,u[c++]=255&e),1===a&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],s=16383,a=0,h=n-i;a<h;a+=s)o.push(u(t,a,a+s>h?h:a+s));return 1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,a=o.length;s<a;++s)r[s]=o[s],n[o.charCodeAt(s)]=s;function h(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function u(t,e,n){for(var i,o,s=[],a=e;a<n;a+=3)i=(t[a]<<16&16711680)+(t[a+1]<<8&65280)+(255&t[a+2]),s.push(r[(o=i)>>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},1666:(t,e,r)=>{"use strict";var n=r(9584),i=r(7701);e.Buffer=a,e.SlowBuffer=function(t){return+t!=t&&(t=0),a.alloc(+t)},e.INSPECT_MAX_BYTES=50;var o=2147483647;function s(t){if(t>o)throw new RangeError("Invalid typed array length");var e=new Uint8Array(t);return e.__proto__=a.prototype,e}function a(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return c(t)}return h(t,e,r)}function h(t,e,r){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return G(t)?function(t,e,r){if(e<0||t.byteLength<e)throw new RangeError("'offset' is out of bounds");if(t.byteLength<e+(r||0))throw new RangeError("'length' is out of bounds");var n;return(n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r)).__proto__=a.prototype,n}(t,e,r):"string"==typeof t?function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!a.isEncoding(e))throw new TypeError('"encoding" must be a valid string encoding');var r=0|p(t,e),n=s(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e):function(t){if(a.isBuffer(t)){var e=0|f(t.length),r=s(e);return 0===r.length||t.copy(r,0,0,e),r}if(t){if(U(t)||"length"in t)return"number"!=typeof t.length||q(t.length)?s(0):l(t);if("Buffer"===t.type&&Array.isArray(t.data))return l(t.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t)}function u(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function c(t){return u(t),s(t<0?0:0|f(t))}function l(t){for(var e=t.length<0?0:0|f(t.length),r=s(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function f(t){if(t>=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|t}function p(t,e){if(a.isBuffer(t))return t.length;if(U(t)||G(t))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return R(t).length;default:if(n)return F(t).length;e=(""+e).toLowerCase(),n=!0}}function d(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return N(this,e,r);case"utf8":case"utf-8":return S(this,e,r);case"ascii":return T(this,e,r);case"latin1":case"binary":return I(this,e,r);case"base64":return E(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function y(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function g(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),q(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,i){var o,s=1,a=t.length,h=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,h/=2,r/=2}function u(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var c=-1;for(o=r;o<a;o++)if(u(t,o)===u(e,-1===c?0:o-c)){if(-1===c&&(c=o),o-c+1===h)return c*s}else-1!==c&&(o-=o-c),c=-1}else for(r+h>a&&(r=a-h),o=r;o>=0;o--){for(var l=!0,f=0;f<h;f++)if(u(t,o+f)!==u(e,f)){l=!1;break}if(l)return o}return-1}function v(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s<n;++s){var a=parseInt(e.substr(2*s,2),16);if(q(a))return s;t[r+s]=a}return s}function w(t,e,r,n){return B(F(e,t.length-r),t,r,n)}function b(t,e,r,n){return B(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function M(t,e,r,n){return b(t,e,r,n)}function _(t,e,r,n){return B(R(e),t,r,n)}function x(t,e,r,n){return B(function(t,e){for(var r,n,i,o=[],s=0;s<t.length&&!((e-=2)<0);++s)n=(r=t.charCodeAt(s))>>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function E(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function S(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var o,s,a,h,u=t[i],c=null,l=u>239?4:u>223?3:u>191?2:1;if(i+l<=r)switch(l){case 1:u<128&&(c=u);break;case 2:128==(192&(o=t[i+1]))&&(h=(31&u)<<6|63&o)>127&&(c=h);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(h=(15&u)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(c=h);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(c=h)}null===c?(c=65533,l=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=l}return function(t){var e=t.length;if(e<=O)return String.fromCharCode.apply(String,t);for(var r="",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=O));return r}(n)}e.kMaxLength=o,a.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()}catch(t){return!1}}(),a.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),"undefined"!=typeof Symbol&&Symbol.species&&a[Symbol.species]===a&&Object.defineProperty(a,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),a.poolSize=8192,a.from=function(t,e,r){return h(t,e,r)},a.prototype.__proto__=Uint8Array.prototype,a.__proto__=Uint8Array,a.alloc=function(t,e,r){return function(t,e,r){return u(t),t<=0?s(t):void 0!==e?"string"==typeof r?s(t).fill(e,r):s(t).fill(e):s(t)}(t,e,r)},a.allocUnsafe=function(t){return c(t)},a.allocUnsafeSlow=function(t){return c(t)},a.isBuffer=function(t){return null!=t&&!0===t._isBuffer},a.compare=function(t,e){if(!a.isBuffer(t)||!a.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var r=t.length,n=e.length,i=0,o=Math.min(r,n);i<o;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},a.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},a.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return a.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=a.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var o=t[r];if(!a.isBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,i),i+=o.length}return n},a.byteLength=p,a.prototype._isBuffer=!0,a.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)y(this,e,e+1);return this},a.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)y(this,e,e+3),y(this,e+1,e+2);return this},a.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)y(this,e,e+7),y(this,e+1,e+6),y(this,e+2,e+5),y(this,e+3,e+4);return this},a.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?S(this,0,t):d.apply(this,arguments)},a.prototype.equals=function(t){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===a.compare(this,t)},a.prototype.inspect=function(){var t="",r=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),"<Buffer "+t+">"},a.prototype.compare=function(t,e,r,n,i){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(e>>>=0),h=Math.min(o,s),u=this.slice(n,i),c=t.slice(e,r),l=0;l<h;++l)if(u[l]!==c[l]){o=u[l],s=c[l];break}return o<s?-1:s<o?1:0},a.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},a.prototype.indexOf=function(t,e,r){return g(this,t,e,r,!0)},a.prototype.lastIndexOf=function(t,e,r){return g(this,t,e,r,!1)},a.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return v(this,t,e,r);case"utf8":case"utf-8":return w(this,t,e,r);case"ascii":return b(this,t,e,r);case"latin1":case"binary":return M(this,t,e,r);case"base64":return _(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;function T(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function I(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function N(t,e,r){var n,i=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>i)&&(r=i);for(var o="",s=e;s<r;++s)o+=(n=t[s])<16?"0"+n.toString(16):n.toString(16);return o}function P(t,e,r){for(var n=t.slice(e,r),i="",o=0;o<n.length;o+=2)i+=String.fromCharCode(n[o]+256*n[o+1]);return i}function A(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function C(t,e,r,n,i,o){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<o)throw new RangeError('"value" argument is out of bounds');if(r+n>t.length)throw new RangeError("Index out of range")}function D(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function k(t,e,r,n,o){return e=+e,r>>>=0,o||D(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function L(t,e,r,n,o){return e=+e,r>>>=0,o||D(t,0,r,8),i.write(t,e,r,n,52,8),r+8}a.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return n.__proto__=a.prototype,n},a.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return n},a.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},a.prototype.readUInt8=function(t,e){return t>>>=0,e||A(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return t>>>=0,e||A(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return t>>>=0,e||A(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return t>>>=0,e||A(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,e){return t>>>=0,e||A(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},a.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},a.prototype.readInt8=function(t,e){return t>>>=0,e||A(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){t>>>=0,e||A(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,e){t>>>=0,e||A(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,e){return t>>>=0,e||A(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return t>>>=0,e||A(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,e){return t>>>=0,e||A(t,4,this.length),i.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return t>>>=0,e||A(t,4,this.length),i.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return t>>>=0,e||A(t,8,this.length),i.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return t>>>=0,e||A(t,8,this.length),i.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||C(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o<r&&(i*=256);)this[e+o]=t/i&255;return e+r},a.prototype.writeUIntBE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||C(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},a.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,1,255,0),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},a.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);C(this,t,e,r,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o<r&&(s*=256);)t<0&&0===a&&0!==this[e+o-1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},a.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);C(this,t,e,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},a.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},a.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeFloatLE=function(t,e,r){return k(this,t,e,!0,r)},a.prototype.writeFloatBE=function(t,e,r){return k(this,t,e,!1,r)},a.prototype.writeDoubleLE=function(t,e,r){return L(this,t,e,!0,r)},a.prototype.writeDoubleBE=function(t,e,r){return L(this,t,e,!1,r)},a.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i,o=n-r;if(this===t&&r<e&&e<n)for(i=o-1;i>=0;--i)t[i+e]=this[i+r];else if(o<1e3)for(i=0;i<o;++i)t[i+e]=this[i+r];else Uint8Array.prototype.set.call(t,this.subarray(r,r+o),e);return o},a.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!a.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;var o;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o<r;++o)this[o]=t;else{var s=a.isBuffer(t)?t:new a(t,n),h=s.length;for(o=0;o<r-e;++o)this[o+e]=s[o%h]}return this};var j=/[^+/0-9A-Za-z-_]/g;function F(t,e){var r;e=e||1/0;for(var n=t.length,i=null,o=[],s=0;s<n;++s){if((r=t.charCodeAt(s))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function R(t){return n.toByteArray(function(t){if((t=t.trim().replace(j,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function B(t,e,r,n){for(var i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function G(t){return t instanceof ArrayBuffer||null!=t&&null!=t.constructor&&"ArrayBuffer"===t.constructor.name&&"number"==typeof t.byteLength}function U(t){return"function"==typeof ArrayBuffer.isView&&ArrayBuffer.isView(t)}function q(t){return t!=t}},5994:(t,e,r)=>{r(6581),t.exports=r(5042).RegExp.escape},5266:t=>{t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},437:(t,e,r)=>{var n=r(9641);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(e);return+t}},9854:(t,e,r)=>{var n=r(1379)("unscopables"),i=Array.prototype;null==i[n]&&r(342)(i,n,{}),t.exports=function(t){i[n][t]=!0}},1703:(t,e,r)=>{"use strict";var n=r(8840)(!0);t.exports=function(t,e,r){return e+(r?n(t,e).length:1)}},9151:t=>{t.exports=function(t,e,r,n){if(!(t instanceof e)||void 0!==n&&n in t)throw TypeError(r+": incorrect invocation!");return t}},4883:(t,e,r)=>{var n=r(2962);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},4248:(t,e,r)=>{"use strict";var n=r(9542),i=r(3693),o=r(1721);t.exports=[].copyWithin||function(t,e){var r=n(this),s=o(r.length),a=i(t,s),h=i(e,s),u=arguments.length>2?arguments[2]:void 0,c=Math.min((void 0===u?s:i(u,s))-h,s-a),l=1;for(h<a&&a<h+c&&(l=-1,h+=c-1,a+=c-1);c-- >0;)h in r?r[a]=r[h]:delete r[a],a+=l,h+=l;return r}},6101:(t,e,r)=>{"use strict";var n=r(9542),i=r(3693),o=r(1721);t.exports=function(t){for(var e=n(this),r=o(e.length),s=arguments.length,a=i(s>1?arguments[1]:void 0,r),h=s>2?arguments[2]:void 0,u=void 0===h?r:i(h,r);u>a;)e[a++]=t;return e}},4181:(t,e,r)=>{var n=r(8372);t.exports=function(t,e){var r=[];return n(t,!1,r.push,r,e),r}},9699:(t,e,r)=>{var n=r(7931),i=r(1721),o=r(3693);t.exports=function(t){return function(e,r,s){var a,h=n(e),u=i(h.length),c=o(s,u);if(t&&r!=r){for(;u>c;)if((a=h[c++])!=a)return!0}else for(;u>c;c++)if((t||c in h)&&h[c]===r)return t||c||0;return!t&&-1}}},4195:(t,e,r)=>{var n=r(9756),i=r(8650),o=r(9542),s=r(1721),a=r(2997);t.exports=function(t,e){var r=1==t,h=2==t,u=3==t,c=4==t,l=6==t,f=5==t||l,p=e||a;return function(e,a,d){for(var y,g,m=o(e),v=i(m),w=n(a,d,3),b=s(v.length),M=0,_=r?p(e,b):h?p(e,0):void 0;b>M;M++)if((f||M in v)&&(g=w(y=v[M],M,m),t))if(r)_[M]=g;else if(g)switch(t){case 3:return!0;case 5:return y;case 6:return M;case 2:_.push(y)}else if(c)return!1;return l?-1:u||c?c:_}}},3780:(t,e,r)=>{var n=r(5266),i=r(9542),o=r(8650),s=r(1721);t.exports=function(t,e,r,a,h){n(e);var u=i(t),c=o(u),l=s(u.length),f=h?l-1:0,p=h?-1:1;if(r<2)for(;;){if(f in c){a=c[f],f+=p;break}if(f+=p,h?f<0:l<=f)throw TypeError("Reduce of empty array with no initial value")}for(;h?f>=0:l>f;f+=p)f in c&&(a=e(a,c[f],f,u));return a}},4046:(t,e,r)=>{var n=r(2962),i=r(5159),o=r(1379)("species");t.exports=function(t){var e;return i(t)&&("function"!=typeof(e=t.constructor)||e!==Array&&!i(e.prototype)||(e=void 0),n(e)&&null===(e=e[o])&&(e=void 0)),void 0===e?Array:e}},2997:(t,e,r)=>{var n=r(4046);t.exports=function(t,e){return new(n(t))(e)}},7591:(t,e,r)=>{"use strict";var n=r(5266),i=r(2962),o=r(6386),s=[].slice,a={},h=function(t,e,r){if(!(e in a)){for(var n=[],i=0;i<e;i++)n[i]="a["+i+"]";a[e]=Function("F,a","return new F("+n.join(",")+")")}return a[e](t,r)};t.exports=Function.bind||function(t){var e=n(this),r=s.call(arguments,1),a=function(){var n=r.concat(s.call(arguments));return this instanceof a?h(e,n.length,n):o(e,n,t)};return i(e.prototype)&&(a.prototype=e.prototype),a}},3753:(t,e,r)=>{var n=r(9641),i=r(1379)("toStringTag"),o="Arguments"==n(function(){return arguments}());t.exports=function(t){var e,r,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),i))?r:o?n(e):"Object"==(s=n(e))&&"function"==typeof e.callee?"Arguments":s}},9641:t=>{var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},9888:(t,e,r)=>{"use strict";var n=r(3269).f,i=r(8765),o=r(9490),s=r(9756),a=r(9151),h=r(8372),u=r(2711),c=r(2612),l=r(1955),f=r(4421),p=r(5687).fastKey,d=r(4136),y=f?"_s":"size",g=function(t,e){var r,n=p(e);if("F"!==n)return t._i[n];for(r=t._f;r;r=r.n)if(r.k==e)return r};t.exports={getConstructor:function(t,e,r,u){var c=t((function(t,n){a(t,c,e,"_i"),t._t=e,t._i=i(null),t._f=void 0,t._l=void 0,t[y]=0,null!=n&&h(n,r,t[u],t)}));return o(c.prototype,{clear:function(){for(var t=d(this,e),r=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete r[n.i];t._f=t._l=void 0,t[y]=0},delete:function(t){var r=d(this,e),n=g(r,t);if(n){var i=n.n,o=n.p;delete r._i[n.i],n.r=!0,o&&(o.n=i),i&&(i.p=o),r._f==n&&(r._f=i),r._l==n&&(r._l=o),r[y]--}return!!n},forEach:function(t){d(this,e);for(var r,n=s(t,arguments.length>1?arguments[1]:void 0,3);r=r?r.n:this._f;)for(n(r.v,r.k,this);r&&r.r;)r=r.p},has:function(t){return!!g(d(this,e),t)}}),f&&n(c.prototype,"size",{get:function(){return d(this,e)[y]}}),c},def:function(t,e,r){var n,i,o=g(t,e);return o?o.v=r:(t._l=o={i:i=p(e,!0),k:e,v:r,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[y]++,"F"!==i&&(t._i[i]=o)),t},getEntry:g,setStrong:function(t,e,r){u(t,e,(function(t,r){this._t=d(t,e),this._k=r,this._l=void 0}),(function(){for(var t=this,e=t._k,r=t._l;r&&r.r;)r=r.p;return t._t&&(t._l=r=r?r.n:t._t._f)?c(0,"keys"==e?r.k:"values"==e?r.v:[r.k,r.v]):(t._t=void 0,c(1))}),r?"entries":"values",!r,!0),l(e)}}},7337:(t,e,r)=>{var n=r(3753),i=r(4181);t.exports=function(t){return function(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},3366:(t,e,r)=>{"use strict";var n=r(9490),i=r(5687).getWeak,o=r(4883),s=r(2962),a=r(9151),h=r(8372),u=r(4195),c=r(3132),l=r(4136),f=u(5),p=u(6),d=0,y=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},m=function(t,e){return f(t.a,(function(t){return t[0]===e}))};g.prototype={get:function(t){var e=m(this,t);if(e)return e[1]},has:function(t){return!!m(this,t)},set:function(t,e){var r=m(this,t);r?r[1]=e:this.a.push([t,e])},delete:function(t){var e=p(this.a,(function(e){return e[0]===t}));return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,r,o){var u=t((function(t,n){a(t,u,e,"_i"),t._t=e,t._i=d++,t._l=void 0,null!=n&&h(n,r,t[o],t)}));return n(u.prototype,{delete:function(t){if(!s(t))return!1;var r=i(t);return!0===r?y(l(this,e)).delete(t):r&&c(r,this._i)&&delete r[this._i]},has:function(t){if(!s(t))return!1;var r=i(t);return!0===r?y(l(this,e)).has(t):r&&c(r,this._i)}}),u},def:function(t,e,r){var n=i(o(e),!0);return!0===n?y(t).set(e,r):n[t._i]=r,t},ufstore:y}},6909:(t,e,r)=>{"use strict";var n=r(7626),i=r(3310),o=r(3682),s=r(9490),a=r(5687),h=r(8372),u=r(9151),c=r(2962),l=r(6099),f=r(3762),p=r(889),d=r(7432);t.exports=function(t,e,r,y,g,m){var v=n[t],w=v,b=g?"set":"add",M=w&&w.prototype,_={},x=function(t){var e=M[t];o(M,t,"delete"==t||"has"==t?function(t){return!(m&&!c(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,r){return e.call(this,0===t?0:t,r),this})};if("function"==typeof w&&(m||M.forEach&&!l((function(){(new w).entries().next()})))){var E=new w,S=E[b](m?{}:-0,1)!=E,O=l((function(){E.has(1)})),T=f((function(t){new w(t)})),I=!m&&l((function(){for(var t=new w,e=5;e--;)t[b](e,e);return!t.has(-0)}));T||((w=e((function(e,r){u(e,w,t);var n=d(new v,e,w);return null!=r&&h(r,g,n[b],n),n}))).prototype=M,M.constructor=w),(O||I)&&(x("delete"),x("has"),g&&x("get")),(I||S)&&x(b),m&&M.clear&&delete M.clear}else w=y.getConstructor(e,t,g,b),s(w.prototype,r),a.NEED=!0;return p(w,t),_[t]=w,i(i.G+i.W+i.F*(w!=v),_),m||y.setStrong(w,t,g),w}},5042:t=>{var e=t.exports={version:"2.6.12"};"number"==typeof __e&&(__e=e)},7492:(t,e,r)=>{"use strict";var n=r(3269),i=r(1519);t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},9756:(t,e,r)=>{var n=r(5266);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},1686:(t,e,r)=>{"use strict";var n=r(6099),i=Date.prototype.getTime,o=Date.prototype.toISOString,s=function(t){return t>9?t:"0"+t};t.exports=n((function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-50000000000001))}))||!n((function(){o.call(new Date(NaN))}))?function(){if(!isFinite(i.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),r=t.getUTCMilliseconds(),n=e<0?"-":e>9999?"+":"";return n+("00000"+Math.abs(e)).slice(n?-6:-4)+"-"+s(t.getUTCMonth()+1)+"-"+s(t.getUTCDate())+"T"+s(t.getUTCHours())+":"+s(t.getUTCMinutes())+":"+s(t.getUTCSeconds())+"."+(r>99?r:"0"+s(r))+"Z"}:o},3603:(t,e,r)=>{"use strict";var n=r(4883),i=r(2851),o="number";t.exports=function(t){if("string"!==t&&t!==o&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),t!=o)}},4821:t=>{t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},4421:(t,e,r)=>{t.exports=!r(6099)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},5468:(t,e,r)=>{var n=r(2962),i=r(7626).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},5348:t=>{t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},989:(t,e,r)=>{var n=r(5304),i=r(4365),o=r(4498);t.exports=function(t){var e=n(t),r=i.f;if(r)for(var s,a=r(t),h=o.f,u=0;a.length>u;)h.call(t,s=a[u++])&&e.push(s);return e}},3310:(t,e,r)=>{var n=r(7626),i=r(5042),o=r(342),s=r(3682),a=r(9756),h=function(t,e,r){var u,c,l,f,p=t&h.F,d=t&h.G,y=t&h.S,g=t&h.P,m=t&h.B,v=d?n:y?n[e]||(n[e]={}):(n[e]||{}).prototype,w=d?i:i[e]||(i[e]={}),b=w.prototype||(w.prototype={});for(u in d&&(r=e),r)l=((c=!p&&v&&void 0!==v[u])?v:r)[u],f=m&&c?a(l,n):g&&"function"==typeof l?a(Function.call,l):l,v&&s(v,u,l,t&h.U),w[u]!=l&&o(w,u,f),g&&b[u]!=l&&(b[u]=l)};n.core=i,h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,h.U=64,h.R=128,t.exports=h},9569:(t,e,r)=>{var n=r(1379)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,!"/./"[t](e)}catch(t){}}return!0}},6099:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},7627:(t,e,r)=>{"use strict";r(1196);var n=r(3682),i=r(342),o=r(6099),s=r(4821),a=r(1379),h=r(942),u=a("species"),c=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),l=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2===r.length&&"a"===r[0]&&"b"===r[1]}();t.exports=function(t,e,r){var f=a(t),p=!o((function(){var e={};return e[f]=function(){return 7},7!=""[t](e)})),d=p?!o((function(){var e=!1,r=/a/;return r.exec=function(){return e=!0,null},"split"===t&&(r.constructor={},r.constructor[u]=function(){return r}),r[f](""),!e})):void 0;if(!p||!d||"replace"===t&&!c||"split"===t&&!l){var y=/./[f],g=r(s,f,""[t],(function(t,e,r,n,i){return e.exec===h?p&&!i?{done:!0,value:y.call(e,r,n)}:{done:!0,value:t.call(r,e,n)}:{done:!1}})),m=g[0],v=g[1];n(String.prototype,t,m),i(RegExp.prototype,f,2==e?function(t,e){return v.call(t,this,e)}:function(t){return v.call(t,this)})}}},6403:(t,e,r)=>{"use strict";var n=r(4883);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},2342:(t,e,r)=>{"use strict";var n=r(5159),i=r(2962),o=r(1721),s=r(9756),a=r(1379)("isConcatSpreadable");t.exports=function t(e,r,h,u,c,l,f,p){for(var d,y,g=c,m=0,v=!!f&&s(f,p,3);m<u;){if(m in h){if(d=v?v(h[m],m,r):h[m],y=!1,i(d)&&(y=void 0!==(y=d[a])?!!y:n(d)),y&&l>0)g=t(e,r,d,o(d.length),g,l-1)-1;else{if(g>=9007199254740991)throw TypeError();e[g]=d}g++}m++}return g}},8372:(t,e,r)=>{var n=r(9756),i=r(7418),o=r(8244),s=r(4883),a=r(1721),h=r(172),u={},c={},l=t.exports=function(t,e,r,l,f){var p,d,y,g,m=f?function(){return t}:h(t),v=n(r,l,e?2:1),w=0;if("function"!=typeof m)throw TypeError(t+" is not iterable!");if(o(m)){for(p=a(t.length);p>w;w++)if((g=e?v(s(d=t[w])[0],d[1]):v(t[w]))===u||g===c)return g}else for(y=m.call(t);!(d=y.next()).done;)if((g=i(y,v,d.value,e))===u||g===c)return g};l.BREAK=u,l.RETURN=c},982:(t,e,r)=>{t.exports=r(6948)("native-function-to-string",Function.toString)},7626:t=>{var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},3132:t=>{var e={}.hasOwnProperty;t.exports=function(t,r){return e.call(t,r)}},342:(t,e,r)=>{var n=r(3269),i=r(1519);t.exports=r(4421)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},5696:(t,e,r)=>{var n=r(7626).document;t.exports=n&&n.documentElement},626:(t,e,r)=>{t.exports=!r(4421)&&!r(6099)((function(){return 7!=Object.defineProperty(r(5468)("div"),"a",{get:function(){return 7}}).a}))},7432:(t,e,r)=>{var n=r(2962),i=r(9298).set;t.exports=function(t,e,r){var o,s=e.constructor;return s!==r&&"function"==typeof s&&(o=s.prototype)!==r.prototype&&n(o)&&i&&i(t,o),t}},6386:t=>{t.exports=function(t,e,r){var n=void 0===r;switch(e.length){case 0:return n?t():t.call(r);case 1:return n?t(e[0]):t.call(r,e[0]);case 2:return n?t(e[0],e[1]):t.call(r,e[0],e[1]);case 3:return n?t(e[0],e[1],e[2]):t.call(r,e[0],e[1],e[2]);case 4:return n?t(e[0],e[1],e[2],e[3]):t.call(r,e[0],e[1],e[2],e[3])}return t.apply(r,e)}},8650:(t,e,r)=>{var n=r(9641);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},8244:(t,e,r)=>{var n=r(568),i=r(1379)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},5159:(t,e,r)=>{var n=r(9641);t.exports=Array.isArray||function(t){return"Array"==n(t)}},4697:(t,e,r)=>{var n=r(2962),i=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&i(t)===t}},2962:t=>{t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},2432:(t,e,r)=>{var n=r(2962),i=r(9641),o=r(1379)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},7418:(t,e,r)=>{var n=r(4883);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&n(o.call(t)),e}}},1700:(t,e,r)=>{"use strict";var n=r(8765),i=r(1519),o=r(889),s={};r(342)(s,r(1379)("iterator"),(function(){return this})),t.exports=function(t,e,r){t.prototype=n(s,{next:i(1,r)}),o(t,e+" Iterator")}},2711:(t,e,r)=>{"use strict";var n=r(7423),i=r(3310),o=r(3682),s=r(342),a=r(568),h=r(1700),u=r(889),c=r(4550),l=r(1379)("iterator"),f=!([].keys&&"next"in[].keys()),p="keys",d="values",y=function(){return this};t.exports=function(t,e,r,g,m,v,w){h(r,e,g);var b,M,_,x=function(t){if(!f&&t in T)return T[t];switch(t){case p:case d:return function(){return new r(this,t)}}return function(){return new r(this,t)}},E=e+" Iterator",S=m==d,O=!1,T=t.prototype,I=T[l]||T["@@iterator"]||m&&T[m],N=I||x(m),P=m?S?x("entries"):N:void 0,A="Array"==e&&T.entries||I;if(A&&(_=c(A.call(new t)))!==Object.prototype&&_.next&&(u(_,E,!0),n||"function"==typeof _[l]||s(_,l,y)),S&&I&&I.name!==d&&(O=!0,N=function(){return I.call(this)}),n&&!w||!f&&!O&&T[l]||s(T,l,N),a[e]=N,a[E]=y,m)if(b={values:S?N:x(d),keys:v?N:x(p),entries:P},w)for(M in b)M in T||o(T,M,b[M]);else i(i.P+i.F*(f||O),e,b);return b}},3762:(t,e,r)=>{var n=r(1379)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var o=[7],s=o[n]();s.next=function(){return{done:r=!0}},o[n]=function(){return s},t(o)}catch(t){}return r}},2612:t=>{t.exports=function(t,e){return{value:e,done:!!t}}},568:t=>{t.exports={}},7423:t=>{t.exports=!1},4993:t=>{var e=Math.expm1;t.exports=!e||e(10)>22025.465794806718||e(10)<22025.465794806718||-2e-17!=e(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:e},7368:(t,e,r)=>{var n=r(6993),i=Math.pow,o=i(2,-52),s=i(2,-23),a=i(2,127)*(2-s),h=i(2,-126);t.exports=Math.fround||function(t){var e,r,i=Math.abs(t),u=n(t);return i<h?u*(i/h/s+1/o-1/o)*h*s:(r=(e=(1+s/o)*i)-(e-i))>a||r!=r?u*(1/0):u*r}},3526:t=>{t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},5284:t=>{t.exports=Math.scale||function(t,e,r,n,i){return 0===arguments.length||t!=t||e!=e||r!=r||n!=n||i!=i?NaN:t===1/0||t===-1/0?t:(t-e)*(i-n)/(r-e)+n}},6993:t=>{t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},5687:(t,e,r)=>{var n=r(3549)("meta"),i=r(2962),o=r(3132),s=r(3269).f,a=0,h=Object.isExtensible||function(){return!0},u=!r(6099)((function(){return h(Object.preventExtensions({}))})),c=function(t){s(t,n,{value:{i:"O"+ ++a,w:{}}})},l=t.exports={KEY:n,NEED:!1,fastKey:function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,n)){if(!h(t))return"F";if(!e)return"E";c(t)}return t[n].i},getWeak:function(t,e){if(!o(t,n)){if(!h(t))return!0;if(!e)return!1;c(t)}return t[n].w},onFreeze:function(t){return u&&l.NEED&&h(t)&&!o(t,n)&&c(t),t}}},9913:(t,e,r)=>{var n=r(8780),i=r(3310),o=r(6948)("metadata"),s=o.store||(o.store=new(r(965))),a=function(t,e,r){var i=s.get(t);if(!i){if(!r)return;s.set(t,i=new n)}var o=i.get(e);if(!o){if(!r)return;i.set(e,o=new n)}return o};t.exports={store:s,map:a,has:function(t,e,r){var n=a(e,r,!1);return void 0!==n&&n.has(t)},get:function(t,e,r){var n=a(e,r,!1);return void 0===n?void 0:n.get(t)},set:function(t,e,r,n){a(r,n,!0).set(t,e)},keys:function(t,e){var r=a(t,e,!1),n=[];return r&&r.forEach((function(t,e){n.push(e)})),n},key:function(t){return void 0===t||"symbol"==typeof t?t:String(t)},exp:function(t){i(i.S,"Reflect",t)}}},48:(t,e,r)=>{var n=r(7626),i=r(9788).set,o=n.MutationObserver||n.WebKitMutationObserver,s=n.process,a=n.Promise,h="process"==r(9641)(s);t.exports=function(){var t,e,r,u=function(){var n,i;for(h&&(n=s.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?r():e=void 0,n}}e=void 0,n&&n.enter()};if(h)r=function(){s.nextTick(u)};else if(!o||n.navigator&&n.navigator.standalone)if(a&&a.resolve){var c=a.resolve(void 0);r=function(){c.then(u)}}else r=function(){i.call(n,u)};else{var l=!0,f=document.createTextNode("");new o(u).observe(f,{characterData:!0}),r=function(){f.data=l=!l}}return function(n){var i={fn:n,next:void 0};e&&(e.next=i),t||(t=i,r()),e=i}}},2690:(t,e,r)=>{"use strict";var n=r(5266);function i(t){var e,r;this.promise=new t((function(t,n){if(void 0!==e||void 0!==r)throw TypeError("Bad Promise constructor");e=t,r=n})),this.resolve=n(e),this.reject=n(r)}t.exports.f=function(t){return new i(t)}},8874:(t,e,r)=>{"use strict";var n=r(4421),i=r(5304),o=r(4365),s=r(4498),a=r(9542),h=r(8650),u=Object.assign;t.exports=!u||r(6099)((function(){var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach((function(t){e[t]=t})),7!=u({},t)[r]||Object.keys(u({},e)).join("")!=n}))?function(t,e){for(var r=a(t),u=arguments.length,c=1,l=o.f,f=s.f;u>c;)for(var p,d=h(arguments[c++]),y=l?i(d).concat(l(d)):i(d),g=y.length,m=0;g>m;)p=y[m++],n&&!f.call(d,p)||(r[p]=d[p]);return r}:u},8765:(t,e,r)=>{var n=r(4883),i=r(9504),o=r(5348),s=r(9111)("IE_PROTO"),a=function(){},h=function(){var t,e=r(5468)("iframe"),n=o.length;for(e.style.display="none",r(5696).appendChild(e),e.src="javascript:",(t=e.contentWindow.document).open(),t.write("<script>document.F=Object<\/script>"),t.close(),h=t.F;n--;)delete h.prototype[o[n]];return h()};t.exports=Object.create||function(t,e){var r;return null!==t?(a.prototype=n(t),r=new a,a.prototype=null,r[s]=t):r=h(),void 0===e?r:i(r,e)}},3269:(t,e,r)=>{var n=r(4883),i=r(626),o=r(2851),s=Object.defineProperty;e.f=r(4421)?Object.defineProperty:function(t,e,r){if(n(t),e=o(e,!0),n(r),i)try{return s(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},9504:(t,e,r)=>{var n=r(3269),i=r(4883),o=r(5304);t.exports=r(4421)?Object.defineProperties:function(t,e){i(t);for(var r,s=o(e),a=s.length,h=0;a>h;)n.f(t,r=s[h++],e[r]);return t}},4258:(t,e,r)=>{"use strict";t.exports=r(7423)||!r(6099)((function(){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete r(7626)[t]}))},7765:(t,e,r)=>{var n=r(4498),i=r(1519),o=r(7931),s=r(2851),a=r(3132),h=r(626),u=Object.getOwnPropertyDescriptor;e.f=r(4421)?u:function(t,e){if(t=o(t),e=s(e,!0),h)try{return u(t,e)}catch(t){}if(a(t,e))return i(!n.f.call(t,e),t[e])}},7831:(t,e,r)=>{var n=r(7931),i=r(8918).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return s&&"[object Window]"==o.call(t)?function(t){try{return i(t)}catch(t){return s.slice()}}(t):i(n(t))}},8918:(t,e,r)=>{var n=r(8406),i=r(5348).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},4365:(t,e)=>{e.f=Object.getOwnPropertySymbols},4550:(t,e,r)=>{var n=r(3132),i=r(9542),o=r(9111)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},8406:(t,e,r)=>{var n=r(3132),i=r(7931),o=r(9699)(!1),s=r(9111)("IE_PROTO");t.exports=function(t,e){var r,a=i(t),h=0,u=[];for(r in a)r!=s&&n(a,r)&&u.push(r);for(;e.length>h;)n(a,r=e[h++])&&(~o(u,r)||u.push(r));return u}},5304:(t,e,r)=>{var n=r(8406),i=r(5348);t.exports=Object.keys||function(t){return n(t,i)}},4498:(t,e)=>{e.f={}.propertyIsEnumerable},4955:(t,e,r)=>{var n=r(3310),i=r(5042),o=r(6099);t.exports=function(t,e){var r=(i.Object||{})[t]||Object[t],s={};s[t]=e(r),n(n.S+n.F*o((function(){r(1)})),"Object",s)}},5587:(t,e,r)=>{var n=r(4421),i=r(5304),o=r(7931),s=r(4498).f;t.exports=function(t){return function(e){for(var r,a=o(e),h=i(a),u=h.length,c=0,l=[];u>c;)r=h[c++],n&&!s.call(a,r)||l.push(t?[r,a[r]]:a[r]);return l}}},1529:(t,e,r)=>{var n=r(8918),i=r(4365),o=r(4883),s=r(7626).Reflect;t.exports=s&&s.ownKeys||function(t){var e=n.f(o(t)),r=i.f;return r?e.concat(r(t)):e}},4060:(t,e,r)=>{var n=r(7626).parseFloat,i=r(6426).trim;t.exports=1/n(r(2420)+"-0")!=-1/0?function(t){var e=i(String(t),3),r=n(e);return 0===r&&"-"==e.charAt(0)?-0:r}:n},9362:(t,e,r)=>{var n=r(7626).parseInt,i=r(6426).trim,o=r(2420),s=/^[-+]?0[xX]/;t.exports=8!==n(o+"08")||22!==n(o+"0x16")?function(t,e){var r=i(String(t),3);return n(r,e>>>0||(s.test(r)?16:10))}:n},5222:t=>{t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},649:(t,e,r)=>{var n=r(4883),i=r(2962),o=r(2690);t.exports=function(t,e){if(n(t),i(e)&&e.constructor===t)return e;var r=o.f(t);return(0,r.resolve)(e),r.promise}},1519:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},9490:(t,e,r)=>{var n=r(3682);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},3682:(t,e,r)=>{var n=r(7626),i=r(342),o=r(3132),s=r(3549)("src"),a=r(982),h="toString",u=(""+a).split(h);r(5042).inspectSource=function(t){return a.call(t)},(t.exports=function(t,e,r,a){var h="function"==typeof r;h&&(o(r,"name")||i(r,"name",e)),t[e]!==r&&(h&&(o(r,s)||i(r,s,t[e]?""+t[e]:u.join(String(e)))),t===n?t[e]=r:a?t[e]?t[e]=r:i(t,e,r):(delete t[e],i(t,e,r)))})(Function.prototype,h,(function(){return"function"==typeof this&&this[s]||a.call(this)}))},7047:(t,e,r)=>{"use strict";var n=r(3753),i=RegExp.prototype.exec;t.exports=function(t,e){var r=t.exec;if("function"==typeof r){var o=r.call(t,e);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==n(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},942:(t,e,r)=>{"use strict";var n,i,o=r(6403),s=RegExp.prototype.exec,a=String.prototype.replace,h=s,u=(n=/a/,i=/b*/g,s.call(n,"a"),s.call(i,"a"),0!==n.lastIndex||0!==i.lastIndex),c=void 0!==/()??/.exec("")[1];(u||c)&&(h=function(t){var e,r,n,i,h=this;return c&&(r=new RegExp("^"+h.source+"$(?!\\s)",o.call(h))),u&&(e=h.lastIndex),n=s.call(h,t),u&&n&&(h.lastIndex=h.global?n.index+n[0].length:e),c&&n&&n.length>1&&a.call(n[0],r,(function(){for(i=1;i<arguments.length-2;i++)void 0===arguments[i]&&(n[i]=void 0)})),n}),t.exports=h},8360:t=>{t.exports=function(t,e){var r=e===Object(e)?function(t){return e[t]}:e;return function(e){return String(e).replace(t,r)}}},3244:t=>{t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},8807:(t,e,r)=>{"use strict";var n=r(3310),i=r(5266),o=r(9756),s=r(8372);t.exports=function(t){n(n.S,t,{from:function(t){var e,r,n,a,h=arguments[1];return i(this),(e=void 0!==h)&&i(h),null==t?new this:(r=[],e?(n=0,a=o(h,arguments[2],2),s(t,!1,(function(t){r.push(a(t,n++))}))):s(t,!1,r.push,r),new this(r))}})}},6931:(t,e,r)=>{"use strict";var n=r(3310);t.exports=function(t){n(n.S,t,{of:function(){for(var t=arguments.length,e=new Array(t);t--;)e[t]=arguments[t];return new this(e)}})}},9298:(t,e,r)=>{var n=r(2962),i=r(4883),o=function(t,e){if(i(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{(n=r(9756)(Function.call,r(7765).f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,r){return o(t,r),e?t.__proto__=r:n(t,r),t}}({},!1):void 0),check:o}},1955:(t,e,r)=>{"use strict";var n=r(7626),i=r(3269),o=r(4421),s=r(1379)("species");t.exports=function(t){var e=n[t];o&&e&&!e[s]&&i.f(e,s,{configurable:!0,get:function(){return this}})}},889:(t,e,r)=>{var n=r(3269).f,i=r(3132),o=r(1379)("toStringTag");t.exports=function(t,e,r){t&&!i(t=r?t:t.prototype,o)&&n(t,o,{configurable:!0,value:e})}},9111:(t,e,r)=>{var n=r(6948)("keys"),i=r(3549);t.exports=function(t){return n[t]||(n[t]=i(t))}},6948:(t,e,r)=>{var n=r(5042),i=r(7626),o="__core-js_shared__",s=i[o]||(i[o]={});(t.exports=function(t,e){return s[t]||(s[t]=void 0!==e?e:{})})("versions",[]).push({version:n.version,mode:r(7423)?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},8077:(t,e,r)=>{var n=r(4883),i=r(5266),o=r(1379)("species");t.exports=function(t,e){var r,s=n(t).constructor;return void 0===s||null==(r=n(s)[o])?e:i(r)}},5347:(t,e,r)=>{"use strict";var n=r(6099);t.exports=function(t,e){return!!t&&n((function(){e?t.call(null,(function(){}),1):t.call(null)}))}},8840:(t,e,r)=>{var n=r(9823),i=r(4821);t.exports=function(t){return function(e,r){var o,s,a=String(i(e)),h=n(r),u=a.length;return h<0||h>=u?t?"":void 0:(o=a.charCodeAt(h))<55296||o>56319||h+1===u||(s=a.charCodeAt(h+1))<56320||s>57343?t?a.charAt(h):o:t?a.slice(h,h+2):s-56320+(o-55296<<10)+65536}}},495:(t,e,r)=>{var n=r(2432),i=r(4821);t.exports=function(t,e,r){if(n(e))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},1486:(t,e,r)=>{var n=r(3310),i=r(6099),o=r(4821),s=/"/g,a=function(t,e,r,n){var i=String(o(t)),a="<"+e;return""!==r&&(a+=" "+r+'="'+String(n).replace(s,"&quot;")+'"'),a+">"+i+"</"+e+">"};t.exports=function(t,e){var r={};r[t]=e(a),n(n.P+n.F*i((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3})),"String",r)}},2011:(t,e,r)=>{var n=r(1721),i=r(2918),o=r(4821);t.exports=function(t,e,r,s){var a=String(o(t)),h=a.length,u=void 0===r?" ":String(r),c=n(e);if(c<=h||""==u)return a;var l=c-h,f=i.call(u,Math.ceil(l/u.length));return f.length>l&&(f=f.slice(0,l)),s?f+a:a+f}},2918:(t,e,r)=>{"use strict";var n=r(9823),i=r(4821);t.exports=function(t){var e=String(i(this)),r="",o=n(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(e+=e))1&o&&(r+=e);return r}},6426:(t,e,r)=>{var n=r(3310),i=r(4821),o=r(6099),s=r(2420),a="["+s+"]",h=RegExp("^"+a+a+"*"),u=RegExp(a+a+"*$"),c=function(t,e,r){var i={},a=o((function(){return!!s[t]()||"…"!="…"[t]()})),h=i[t]=a?e(l):s[t];r&&(i[r]=h),n(n.P+n.F*a,"String",i)},l=c.trim=function(t,e){return t=String(i(t)),1&e&&(t=t.replace(h,"")),2&e&&(t=t.replace(u,"")),t};t.exports=c},2420:t=>{t.exports="\t\n\v\f\r    \u2028\u2029\ufeff"},9788:(t,e,r)=>{var n,i,o,s=r(9756),a=r(6386),h=r(5696),u=r(5468),c=r(7626),l=c.process,f=c.setImmediate,p=c.clearImmediate,d=c.MessageChannel,y=c.Dispatch,g=0,m={},v=function(){var t=+this;if(m.hasOwnProperty(t)){var e=m[t];delete m[t],e()}},w=function(t){v.call(t.data)};f&&p||(f=function(t){for(var e=[],r=1;arguments.length>r;)e.push(arguments[r++]);return m[++g]=function(){a("function"==typeof t?t:Function(t),e)},n(g),g},p=function(t){delete m[t]},"process"==r(9641)(l)?n=function(t){l.nextTick(s(v,t,1))}:y&&y.now?n=function(t){y.now(s(v,t,1))}:d?(o=(i=new d).port2,i.port1.onmessage=w,n=s(o.postMessage,o,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(n=function(t){c.postMessage(t+"","*")},c.addEventListener("message",w,!1)):n="onreadystatechange"in u("script")?function(t){h.appendChild(u("script")).onreadystatechange=function(){h.removeChild(this),v.call(t)}}:function(t){setTimeout(s(v,t,1),0)}),t.exports={set:f,clear:p}},3693:(t,e,r)=>{var n=r(9823),i=Math.max,o=Math.min;t.exports=function(t,e){return(t=n(t))<0?i(t+e,0):o(t,e)}},9944:(t,e,r)=>{var n=r(9823),i=r(1721);t.exports=function(t){if(void 0===t)return 0;var e=n(t),r=i(e);if(e!==r)throw RangeError("Wrong length!");return r}},9823:t=>{var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},7931:(t,e,r)=>{var n=r(8650),i=r(4821);t.exports=function(t){return n(i(t))}},1721:(t,e,r)=>{var n=r(9823),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},9542:(t,e,r)=>{var n=r(4821);t.exports=function(t){return Object(n(t))}},2851:(t,e,r)=>{var n=r(2962);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},7670:(t,e,r)=>{"use strict";if(r(4421)){var n=r(7423),i=r(7626),o=r(6099),s=r(3310),a=r(2204),h=r(9443),u=r(9756),c=r(9151),l=r(1519),f=r(342),p=r(9490),d=r(9823),y=r(1721),g=r(9944),m=r(3693),v=r(2851),w=r(3132),b=r(3753),M=r(2962),_=r(9542),x=r(8244),E=r(8765),S=r(4550),O=r(8918).f,T=r(172),I=r(3549),N=r(1379),P=r(4195),A=r(9699),C=r(8077),D=r(8759),k=r(568),L=r(3762),j=r(1955),F=r(6101),R=r(4248),B=r(3269),G=r(7765),U=B.f,q=G.f,z=i.RangeError,V=i.TypeError,W=i.Uint8Array,X="ArrayBuffer",$="SharedArrayBuffer",Y="BYTES_PER_ELEMENT",Q=Array.prototype,K=h.ArrayBuffer,H=h.DataView,J=P(0),Z=P(2),tt=P(3),et=P(4),rt=P(5),nt=P(6),it=A(!0),ot=A(!1),st=D.values,at=D.keys,ht=D.entries,ut=Q.lastIndexOf,ct=Q.reduce,lt=Q.reduceRight,ft=Q.join,pt=Q.sort,dt=Q.slice,yt=Q.toString,gt=Q.toLocaleString,mt=N("iterator"),vt=N("toStringTag"),wt=I("typed_constructor"),bt=I("def_constructor"),Mt=a.CONSTR,_t=a.TYPED,xt=a.VIEW,Et="Wrong length!",St=P(1,(function(t,e){return Pt(C(t,t[bt]),e)})),Ot=o((function(){return 1===new W(new Uint16Array([1]).buffer)[0]})),Tt=!!W&&!!W.prototype.set&&o((function(){new W(1).set({})})),It=function(t,e){var r=d(t);if(r<0||r%e)throw z("Wrong offset!");return r},Nt=function(t){if(M(t)&&_t in t)return t;throw V(t+" is not a typed array!")},Pt=function(t,e){if(!M(t)||!(wt in t))throw V("It is not a typed array constructor!");return new t(e)},At=function(t,e){return Ct(C(t,t[bt]),e)},Ct=function(t,e){for(var r=0,n=e.length,i=Pt(t,n);n>r;)i[r]=e[r++];return i},Dt=function(t,e,r){U(t,e,{get:function(){return this._d[r]}})},kt=function(t){var e,r,n,i,o,s,a=_(t),h=arguments.length,c=h>1?arguments[1]:void 0,l=void 0!==c,f=T(a);if(null!=f&&!x(f)){for(s=f.call(a),n=[],e=0;!(o=s.next()).done;e++)n.push(o.value);a=n}for(l&&h>2&&(c=u(c,arguments[2],2)),e=0,r=y(a.length),i=Pt(this,r);r>e;e++)i[e]=l?c(a[e],e):a[e];return i},Lt=function(){for(var t=0,e=arguments.length,r=Pt(this,e);e>t;)r[t]=arguments[t++];return r},jt=!!W&&o((function(){gt.call(new W(1))})),Ft=function(){return gt.apply(jt?dt.call(Nt(this)):Nt(this),arguments)},Rt={copyWithin:function(t,e){return R.call(Nt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return et(Nt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return F.apply(Nt(this),arguments)},filter:function(t){return At(this,Z(Nt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return rt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return nt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){J(Nt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return ot(Nt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return it(Nt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return ft.apply(Nt(this),arguments)},lastIndexOf:function(t){return ut.apply(Nt(this),arguments)},map:function(t){return St(Nt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return ct.apply(Nt(this),arguments)},reduceRight:function(t){return lt.apply(Nt(this),arguments)},reverse:function(){for(var t,e=this,r=Nt(e).length,n=Math.floor(r/2),i=0;i<n;)t=e[i],e[i++]=e[--r],e[r]=t;return e},some:function(t){return tt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return pt.call(Nt(this),t)},subarray:function(t,e){var r=Nt(this),n=r.length,i=m(t,n);return new(C(r,r[bt]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,y((void 0===e?n:m(e,n))-i))}},Bt=function(t,e){return At(this,dt.call(Nt(this),t,e))},Gt=function(t){Nt(this);var e=It(arguments[1],1),r=this.length,n=_(t),i=y(n.length),o=0;if(i+e>r)throw z(Et);for(;o<i;)this[e+o]=n[o++]},Ut={entries:function(){return ht.call(Nt(this))},keys:function(){return at.call(Nt(this))},values:function(){return st.call(Nt(this))}},qt=function(t,e){return M(t)&&t[_t]&&"symbol"!=typeof e&&e in t&&String(+e)==String(e)},zt=function(t,e){return qt(t,e=v(e,!0))?l(2,t[e]):q(t,e)},Vt=function(t,e,r){return!(qt(t,e=v(e,!0))&&M(r)&&w(r,"value"))||w(r,"get")||w(r,"set")||r.configurable||w(r,"writable")&&!r.writable||w(r,"enumerable")&&!r.enumerable?U(t,e,r):(t[e]=r.value,t)};Mt||(G.f=zt,B.f=Vt),s(s.S+s.F*!Mt,"Object",{getOwnPropertyDescriptor:zt,defineProperty:Vt}),o((function(){yt.call({})}))&&(yt=gt=function(){return ft.call(this)});var Wt=p({},Rt);p(Wt,Ut),f(Wt,mt,Ut.values),p(Wt,{slice:Bt,set:Gt,constructor:function(){},toString:yt,toLocaleString:Ft}),Dt(Wt,"buffer","b"),Dt(Wt,"byteOffset","o"),Dt(Wt,"byteLength","l"),Dt(Wt,"length","e"),U(Wt,vt,{get:function(){return this[_t]}}),t.exports=function(t,e,r,h){var u=t+((h=!!h)?"Clamped":"")+"Array",l="get"+t,p="set"+t,d=i[u],m=d||{},v=d&&S(d),w=!d||!a.ABV,_={},x=d&&d.prototype,T=function(t,r){U(t,r,{get:function(){return function(t,r){var n=t._d;return n.v[l](r*e+n.o,Ot)}(this,r)},set:function(t){return function(t,r,n){var i=t._d;h&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),i.v[p](r*e+i.o,n,Ot)}(this,r,t)},enumerable:!0})};w?(d=r((function(t,r,n,i){c(t,d,u,"_d");var o,s,a,h,l=0,p=0;if(M(r)){if(!(r instanceof K||(h=b(r))==X||h==$))return _t in r?Ct(d,r):kt.call(d,r);o=r,p=It(n,e);var m=r.byteLength;if(void 0===i){if(m%e)throw z(Et);if((s=m-p)<0)throw z(Et)}else if((s=y(i)*e)+p>m)throw z(Et);a=s/e}else a=g(r),o=new K(s=a*e);for(f(t,"_d",{b:o,o:p,l:s,e:a,v:new H(o)});l<a;)T(t,l++)})),x=d.prototype=E(Wt),f(x,"constructor",d)):o((function(){d(1)}))&&o((function(){new d(-1)}))&&L((function(t){new d,new d(null),new d(1.5),new d(t)}),!0)||(d=r((function(t,r,n,i){var o;return c(t,d,u),M(r)?r instanceof K||(o=b(r))==X||o==$?void 0!==i?new m(r,It(n,e),i):void 0!==n?new m(r,It(n,e)):new m(r):_t in r?Ct(d,r):kt.call(d,r):new m(g(r))})),J(v!==Function.prototype?O(m).concat(O(v)):O(m),(function(t){t in d||f(d,t,m[t])})),d.prototype=x,n||(x.constructor=d));var I=x[mt],N=!!I&&("values"==I.name||null==I.name),P=Ut.values;f(d,wt,!0),f(x,_t,u),f(x,xt,!0),f(x,bt,d),(h?new d(1)[vt]==u:vt in x)||U(x,vt,{get:function(){return u}}),_[u]=d,s(s.G+s.W+s.F*(d!=m),_),s(s.S,u,{BYTES_PER_ELEMENT:e}),s(s.S+s.F*o((function(){m.of.call(d,1)})),u,{from:kt,of:Lt}),Y in x||f(x,Y,e),s(s.P,u,Rt),j(u),s(s.P+s.F*Tt,u,{set:Gt}),s(s.P+s.F*!N,u,Ut),n||x.toString==yt||(x.toString=yt),s(s.P+s.F*o((function(){new d(1).slice()})),u,{slice:Bt}),s(s.P+s.F*(o((function(){return[1,2].toLocaleString()!=new d([1,2]).toLocaleString()}))||!o((function(){x.toLocaleString.call([1,2])}))),u,{toLocaleString:Ft}),k[u]=N?I:P,n||N||f(x,mt,P)}}else t.exports=function(){}},9443:(t,e,r)=>{"use strict";var n=r(7626),i=r(4421),o=r(7423),s=r(2204),a=r(342),h=r(9490),u=r(6099),c=r(9151),l=r(9823),f=r(1721),p=r(9944),d=r(8918).f,y=r(3269).f,g=r(6101),m=r(889),v="ArrayBuffer",w="DataView",b="Wrong index!",M=n.ArrayBuffer,_=n.DataView,x=n.Math,E=n.RangeError,S=n.Infinity,O=M,T=x.abs,I=x.pow,N=x.floor,P=x.log,A=x.LN2,C="buffer",D="byteLength",k="byteOffset",L=i?"_b":C,j=i?"_l":D,F=i?"_o":k;function R(t,e,r){var n,i,o,s=new Array(r),a=8*r-e-1,h=(1<<a)-1,u=h>>1,c=23===e?I(2,-24)-I(2,-77):0,l=0,f=t<0||0===t&&1/t<0?1:0;for((t=T(t))!=t||t===S?(i=t!=t?1:0,n=h):(n=N(P(t)/A),t*(o=I(2,-n))<1&&(n--,o*=2),(t+=n+u>=1?c/o:c*I(2,1-u))*o>=2&&(n++,o/=2),n+u>=h?(i=0,n=h):n+u>=1?(i=(t*o-1)*I(2,e),n+=u):(i=t*I(2,u-1)*I(2,e),n=0));e>=8;s[l++]=255&i,i/=256,e-=8);for(n=n<<e|i,a+=e;a>0;s[l++]=255&n,n/=256,a-=8);return s[--l]|=128*f,s}function B(t,e,r){var n,i=8*r-e-1,o=(1<<i)-1,s=o>>1,a=i-7,h=r-1,u=t[h--],c=127&u;for(u>>=7;a>0;c=256*c+t[h],h--,a-=8);for(n=c&(1<<-a)-1,c>>=-a,a+=e;a>0;n=256*n+t[h],h--,a-=8);if(0===c)c=1-s;else{if(c===o)return n?NaN:u?-S:S;n+=I(2,e),c-=s}return(u?-1:1)*n*I(2,c-e)}function G(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function U(t){return[255&t]}function q(t){return[255&t,t>>8&255]}function z(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function V(t){return R(t,52,8)}function W(t){return R(t,23,4)}function X(t,e,r){y(t.prototype,e,{get:function(){return this[r]}})}function $(t,e,r,n){var i=p(+r);if(i+e>t[j])throw E(b);var o=t[L]._b,s=i+t[F],a=o.slice(s,s+e);return n?a:a.reverse()}function Y(t,e,r,n,i,o){var s=p(+r);if(s+e>t[j])throw E(b);for(var a=t[L]._b,h=s+t[F],u=n(+i),c=0;c<e;c++)a[h+c]=u[o?c:e-c-1]}if(s.ABV){if(!u((function(){M(1)}))||!u((function(){new M(-1)}))||u((function(){return new M,new M(1.5),new M(NaN),M.name!=v}))){for(var Q,K=(M=function(t){return c(this,M),new O(p(t))}).prototype=O.prototype,H=d(O),J=0;H.length>J;)(Q=H[J++])in M||a(M,Q,O[Q]);o||(K.constructor=M)}var Z=new _(new M(2)),tt=_.prototype.setInt8;Z.setInt8(0,2147483648),Z.setInt8(1,2147483649),!Z.getInt8(0)&&Z.getInt8(1)||h(_.prototype,{setInt8:function(t,e){tt.call(this,t,e<<24>>24)},setUint8:function(t,e){tt.call(this,t,e<<24>>24)}},!0)}else M=function(t){c(this,M,v);var e=p(t);this._b=g.call(new Array(e),0),this[j]=e},_=function(t,e,r){c(this,_,w),c(t,M,w);var n=t[j],i=l(e);if(i<0||i>n)throw E("Wrong offset!");if(i+(r=void 0===r?n-i:f(r))>n)throw E("Wrong length!");this[L]=t,this[F]=i,this[j]=r},i&&(X(M,D,"_l"),X(_,C,"_b"),X(_,D,"_l"),X(_,k,"_o")),h(_.prototype,{getInt8:function(t){return $(this,1,t)[0]<<24>>24},getUint8:function(t){return $(this,1,t)[0]},getInt16:function(t){var e=$(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=$(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return G($(this,4,t,arguments[1]))},getUint32:function(t){return G($(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return B($(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return B($(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){Y(this,1,t,U,e)},setUint8:function(t,e){Y(this,1,t,U,e)},setInt16:function(t,e){Y(this,2,t,q,e,arguments[2])},setUint16:function(t,e){Y(this,2,t,q,e,arguments[2])},setInt32:function(t,e){Y(this,4,t,z,e,arguments[2])},setUint32:function(t,e){Y(this,4,t,z,e,arguments[2])},setFloat32:function(t,e){Y(this,4,t,W,e,arguments[2])},setFloat64:function(t,e){Y(this,8,t,V,e,arguments[2])}});m(M,v),m(_,w),a(_.prototype,s.VIEW,!0),e.ArrayBuffer=M,e.DataView=_},2204:(t,e,r)=>{for(var n,i=r(7626),o=r(342),s=r(3549),a=s("typed_array"),h=s("view"),u=!(!i.ArrayBuffer||!i.DataView),c=u,l=0,f="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l<9;)(n=i[f[l++]])?(o(n.prototype,a,!0),o(n.prototype,h,!0)):c=!1;t.exports={ABV:u,CONSTR:c,TYPED:a,VIEW:h}},3549:t=>{var e=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+r).toString(36))}},8452:(t,e,r)=>{var n=r(7626).navigator;t.exports=n&&n.userAgent||""},4136:(t,e,r)=>{var n=r(2962);t.exports=function(t,e){if(!n(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},9729:(t,e,r)=>{var n=r(7626),i=r(5042),o=r(7423),s=r(6075),a=r(3269).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},6075:(t,e,r)=>{e.f=r(1379)},1379:(t,e,r)=>{var n=r(6948)("wks"),i=r(3549),o=r(7626).Symbol,s="function"==typeof o;(t.exports=function(t){return n[t]||(n[t]=s&&o[t]||(s?o:i)("Symbol."+t))}).store=n},172:(t,e,r)=>{var n=r(3753),i=r(1379)("iterator"),o=r(568);t.exports=r(5042).getIteratorMethod=function(t){if(null!=t)return t[i]||t["@@iterator"]||o[n(t)]}},6581:(t,e,r)=>{var n=r(3310),i=r(8360)(/[\\^$*+?.()|[\]{}]/g,"\\$&");n(n.S,"RegExp",{escape:function(t){return i(t)}})},6666:(t,e,r)=>{var n=r(3310);n(n.P,"Array",{copyWithin:r(4248)}),r(9854)("copyWithin")},9461:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(4);n(n.P+n.F*!r(5347)([].every,!0),"Array",{every:function(t){return i(this,t,arguments[1])}})},8400:(t,e,r)=>{var n=r(3310);n(n.P,"Array",{fill:r(6101)}),r(9854)("fill")},6257:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(2);n(n.P+n.F*!r(5347)([].filter,!0),"Array",{filter:function(t){return i(this,t,arguments[1])}})},7456:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(6),o="findIndex",s=!0;o in[]&&Array(1)[o]((function(){s=!1})),n(n.P+n.F*s,"Array",{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(9854)(o)},9027:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(5),o="find",s=!0;o in[]&&Array(1).find((function(){s=!1})),n(n.P+n.F*s,"Array",{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(9854)(o)},6897:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(0),o=r(5347)([].forEach,!0);n(n.P+n.F*!o,"Array",{forEach:function(t){return i(this,t,arguments[1])}})},6636:(t,e,r)=>{"use strict";var n=r(9756),i=r(3310),o=r(9542),s=r(7418),a=r(8244),h=r(1721),u=r(7492),c=r(172);i(i.S+i.F*!r(3762)((function(t){Array.from(t)})),"Array",{from:function(t){var e,r,i,l,f=o(t),p="function"==typeof this?this:Array,d=arguments.length,y=d>1?arguments[1]:void 0,g=void 0!==y,m=0,v=c(f);if(g&&(y=n(y,d>2?arguments[2]:void 0,2)),null==v||p==Array&&a(v))for(r=new p(e=h(f.length));e>m;m++)u(r,m,g?y(f[m],m):f[m]);else for(l=v.call(f),r=new p;!(i=l.next()).done;m++)u(r,m,g?s(l,y,[i.value,m],!0):i.value);return r.length=m,r}})},6978:(t,e,r)=>{"use strict";var n=r(3310),i=r(9699)(!1),o=[].indexOf,s=!!o&&1/[1].indexOf(1,-0)<0;n(n.P+n.F*(s||!r(5347)(o)),"Array",{indexOf:function(t){return s?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},7391:(t,e,r)=>{var n=r(3310);n(n.S,"Array",{isArray:r(5159)})},8759:(t,e,r)=>{"use strict";var n=r(9854),i=r(2612),o=r(568),s=r(7931);t.exports=r(2711)(Array,"Array",(function(t,e){this._t=s(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?r:"values"==e?t[r]:[r,t[r]])}),"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},1250:(t,e,r)=>{"use strict";var n=r(3310),i=r(7931),o=[].join;n(n.P+n.F*(r(8650)!=Object||!r(5347)(o)),"Array",{join:function(t){return o.call(i(this),void 0===t?",":t)}})},1285:(t,e,r)=>{"use strict";var n=r(3310),i=r(7931),o=r(9823),s=r(1721),a=[].lastIndexOf,h=!!a&&1/[1].lastIndexOf(1,-0)<0;n(n.P+n.F*(h||!r(5347)(a)),"Array",{lastIndexOf:function(t){if(h)return a.apply(this,arguments)||0;var e=i(this),r=s(e.length),n=r-1;for(arguments.length>1&&(n=Math.min(n,o(arguments[1]))),n<0&&(n=r+n);n>=0;n--)if(n in e&&e[n]===t)return n||0;return-1}})},1982:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(1);n(n.P+n.F*!r(5347)([].map,!0),"Array",{map:function(t){return i(this,t,arguments[1])}})},4494:(t,e,r)=>{"use strict";var n=r(3310),i=r(7492);n(n.S+n.F*r(6099)((function(){function t(){}return!(Array.of.call(t)instanceof t)})),"Array",{of:function(){for(var t=0,e=arguments.length,r=new("function"==typeof this?this:Array)(e);e>t;)i(r,t,arguments[t++]);return r.length=e,r}})},3022:(t,e,r)=>{"use strict";var n=r(3310),i=r(3780);n(n.P+n.F*!r(5347)([].reduceRight,!0),"Array",{reduceRight:function(t){return i(this,t,arguments.length,arguments[1],!0)}})},9359:(t,e,r)=>{"use strict";var n=r(3310),i=r(3780);n(n.P+n.F*!r(5347)([].reduce,!0),"Array",{reduce:function(t){return i(this,t,arguments.length,arguments[1],!1)}})},644:(t,e,r)=>{"use strict";var n=r(3310),i=r(5696),o=r(9641),s=r(3693),a=r(1721),h=[].slice;n(n.P+n.F*r(6099)((function(){i&&h.call(i)})),"Array",{slice:function(t,e){var r=a(this.length),n=o(this);if(e=void 0===e?r:e,"Array"==n)return h.call(this,t,e);for(var i=s(t,r),u=s(e,r),c=a(u-i),l=new Array(c),f=0;f<c;f++)l[f]="String"==n?this.charAt(i+f):this[i+f];return l}})},5472:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(3);n(n.P+n.F*!r(5347)([].some,!0),"Array",{some:function(t){return i(this,t,arguments[1])}})},6076:(t,e,r)=>{"use strict";var n=r(3310),i=r(5266),o=r(9542),s=r(6099),a=[].sort,h=[1,2,3];n(n.P+n.F*(s((function(){h.sort(void 0)}))||!s((function(){h.sort(null)}))||!r(5347)(a)),"Array",{sort:function(t){return void 0===t?a.call(o(this)):a.call(o(this),i(t))}})},9661:(t,e,r)=>{r(1955)("Array")},2461:(t,e,r)=>{var n=r(3310);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},857:(t,e,r)=>{var n=r(3310),i=r(1686);n(n.P+n.F*(Date.prototype.toISOString!==i),"Date",{toISOString:i})},9016:(t,e,r)=>{"use strict";var n=r(3310),i=r(9542),o=r(2851);n(n.P+n.F*r(6099)((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})})),"Date",{toJSON:function(t){var e=i(this),r=o(e);return"number"!=typeof r||isFinite(r)?e.toISOString():null}})},4023:(t,e,r)=>{var n=r(1379)("toPrimitive"),i=Date.prototype;n in i||r(342)(i,n,r(3603))},8396:(t,e,r)=>{var n=Date.prototype,i="Invalid Date",o=n.toString,s=n.getTime;new Date(NaN)+""!=i&&r(3682)(n,"toString",(function(){var t=s.call(this);return t==t?o.call(this):i}))},8884:(t,e,r)=>{var n=r(3310);n(n.P,"Function",{bind:r(7591)})},814:(t,e,r)=>{"use strict";var n=r(2962),i=r(4550),o=r(1379)("hasInstance"),s=Function.prototype;o in s||r(3269).f(s,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},7910:(t,e,r)=>{var n=r(3269).f,i=Function.prototype,o=/^\s*function ([^ (]*)/,s="name";s in i||r(4421)&&n(i,s,{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},8780:(t,e,r)=>{"use strict";var n=r(9888),i=r(4136),o="Map";t.exports=r(6909)(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{get:function(t){var e=n.getEntry(i(this,o),t);return e&&e.v},set:function(t,e){return n.def(i(this,o),0===t?0:t,e)}},n,!0)},8583:(t,e,r)=>{var n=r(3310),i=r(3526),o=Math.sqrt,s=Math.acosh;n(n.S+n.F*!(s&&710==Math.floor(s(Number.MAX_VALUE))&&s(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},4587:(t,e,r)=>{var n=r(3310),i=Math.asinh;n(n.S+n.F*!(i&&1/i(0)>0),"Math",{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):Math.log(e+Math.sqrt(e*e+1)):e}})},7165:(t,e,r)=>{var n=r(3310),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},6875:(t,e,r)=>{var n=r(3310),i=r(6993);n(n.S,"Math",{cbrt:function(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},4259:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},1133:(t,e,r)=>{var n=r(3310),i=Math.exp;n(n.S,"Math",{cosh:function(t){return(i(t=+t)+i(-t))/2}})},6516:(t,e,r)=>{var n=r(3310),i=r(4993);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},1524:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{fround:r(7368)})},2056:(t,e,r)=>{var n=r(3310),i=Math.abs;n(n.S,"Math",{hypot:function(t,e){for(var r,n,o=0,s=0,a=arguments.length,h=0;s<a;)h<(r=i(arguments[s++]))?(o=o*(n=h/r)*n+1,h=r):o+=r>0?(n=r/h)*n:r;return h===1/0?1/0:h*Math.sqrt(o)}})},5732:(t,e,r)=>{var n=r(3310),i=Math.imul;n(n.S+n.F*r(6099)((function(){return-5!=i(4294967295,5)||2!=i.length})),"Math",{imul:function(t,e){var r=65535,n=+t,i=+e,o=r&n,s=r&i;return 0|o*s+((r&n>>>16)*s+o*(r&i>>>16)<<16>>>0)}})},811:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},2172:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{log1p:r(3526)})},8921:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},6798:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{sign:r(6993)})},2438:(t,e,r)=>{var n=r(3310),i=r(4993),o=Math.exp;n(n.S+n.F*r(6099)((function(){return-2e-17!=!Math.sinh(-2e-17)})),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},1322:(t,e,r)=>{var n=r(3310),i=r(4993),o=Math.exp;n(n.S,"Math",{tanh:function(t){var e=i(t=+t),r=i(-t);return e==1/0?1:r==1/0?-1:(e-r)/(o(t)+o(-t))}})},429:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},7164:(t,e,r)=>{"use strict";var n=r(7626),i=r(3132),o=r(9641),s=r(7432),a=r(2851),h=r(6099),u=r(8918).f,c=r(7765).f,l=r(3269).f,f=r(6426).trim,p="Number",d=n.Number,y=d,g=d.prototype,m=o(r(8765)(g))==p,v="trim"in String.prototype,w=function(t){var e=a(t,!1);if("string"==typeof e&&e.length>2){var r,n,i,o=(e=v?e.trim():f(e,3)).charCodeAt(0);if(43===o||45===o){if(88===(r=e.charCodeAt(2))||120===r)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+e}for(var s,h=e.slice(2),u=0,c=h.length;u<c;u++)if((s=h.charCodeAt(u))<48||s>i)return NaN;return parseInt(h,n)}}return+e};if(!d(" 0o1")||!d("0b1")||d("+0x1")){d=function(t){var e=arguments.length<1?0:t,r=this;return r instanceof d&&(m?h((function(){g.valueOf.call(r)})):o(r)!=p)?s(new y(w(e)),r,d):w(e)};for(var b,M=r(4421)?u(y):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),_=0;M.length>_;_++)i(y,b=M[_])&&!i(d,b)&&l(d,b,c(y,b));d.prototype=g,g.constructor=d,r(3682)(n,p,d)}},9803:(t,e,r)=>{var n=r(3310);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},3596:(t,e,r)=>{var n=r(3310),i=r(7626).isFinite;n(n.S,"Number",{isFinite:function(t){return"number"==typeof t&&i(t)}})},3519:(t,e,r)=>{var n=r(3310);n(n.S,"Number",{isInteger:r(4697)})},708:(t,e,r)=>{var n=r(3310);n(n.S,"Number",{isNaN:function(t){return t!=t}})},6899:(t,e,r)=>{var n=r(3310),i=r(4697),o=Math.abs;n(n.S,"Number",{isSafeInteger:function(t){return i(t)&&o(t)<=9007199254740991}})},8172:(t,e,r)=>{var n=r(3310);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},6313:(t,e,r)=>{var n=r(3310);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},7782:(t,e,r)=>{var n=r(3310),i=r(4060);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},3419:(t,e,r)=>{var n=r(3310),i=r(9362);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},5669:(t,e,r)=>{"use strict";var n=r(3310),i=r(9823),o=r(437),s=r(2918),a=1..toFixed,h=Math.floor,u=[0,0,0,0,0,0],c="Number.toFixed: incorrect invocation!",l="0",f=function(t,e){for(var r=-1,n=e;++r<6;)n+=t*u[r],u[r]=n%1e7,n=h(n/1e7)},p=function(t){for(var e=6,r=0;--e>=0;)r+=u[e],u[e]=h(r/t),r=r%t*1e7},d=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==u[t]){var r=String(u[t]);e=""===e?r:e+s.call(l,7-r.length)+r}return e},y=function(t,e,r){return 0===e?r:e%2==1?y(t,e-1,r*t):y(t*t,e/2,r)};n(n.P+n.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(6099)((function(){a.call({})}))),"Number",{toFixed:function(t){var e,r,n,a,h=o(this,c),u=i(t),g="",m=l;if(u<0||u>20)throw RangeError(c);if(h!=h)return"NaN";if(h<=-1e21||h>=1e21)return String(h);if(h<0&&(g="-",h=-h),h>1e-21)if(r=(e=function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e}(h*y(2,69,1))-69)<0?h*y(2,-e,1):h/y(2,e,1),r*=4503599627370496,(e=52-e)>0){for(f(0,r),n=u;n>=7;)f(1e7,0),n-=7;for(f(y(10,n,1),0),n=e-1;n>=23;)p(1<<23),n-=23;p(1<<n),f(1,1),p(2),m=d()}else f(0,r),f(1<<-e,0),m=d()+s.call(l,u);return u>0?g+((a=m.length)<=u?"0."+s.call(l,u-a)+m:m.slice(0,a-u)+"."+m.slice(a-u)):g+m}})},3883:(t,e,r)=>{"use strict";var n=r(3310),i=r(6099),o=r(437),s=1..toPrecision;n(n.P+n.F*(i((function(){return"1"!==s.call(1,void 0)}))||!i((function(){s.call({})}))),"Number",{toPrecision:function(t){var e=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?s.call(e):s.call(e,t)}})},3033:(t,e,r)=>{var n=r(3310);n(n.S+n.F,"Object",{assign:r(8874)})},663:(t,e,r)=>{var n=r(3310);n(n.S,"Object",{create:r(8765)})},1475:(t,e,r)=>{var n=r(3310);n(n.S+n.F*!r(4421),"Object",{defineProperties:r(9504)})},6133:(t,e,r)=>{var n=r(3310);n(n.S+n.F*!r(4421),"Object",{defineProperty:r(3269).f})},3750:(t,e,r)=>{var n=r(2962),i=r(5687).onFreeze;r(4955)("freeze",(function(t){return function(e){return t&&n(e)?t(i(e)):e}}))},8534:(t,e,r)=>{var n=r(7931),i=r(7765).f;r(4955)("getOwnPropertyDescriptor",(function(){return function(t,e){return i(n(t),e)}}))},5081:(t,e,r)=>{r(4955)("getOwnPropertyNames",(function(){return r(7831).f}))},641:(t,e,r)=>{var n=r(9542),i=r(4550);r(4955)("getPrototypeOf",(function(){return function(t){return i(n(t))}}))},5997:(t,e,r)=>{var n=r(2962);r(4955)("isExtensible",(function(t){return function(e){return!!n(e)&&(!t||t(e))}}))},402:(t,e,r)=>{var n=r(2962);r(4955)("isFrozen",(function(t){return function(e){return!n(e)||!!t&&t(e)}}))},848:(t,e,r)=>{var n=r(2962);r(4955)("isSealed",(function(t){return function(e){return!n(e)||!!t&&t(e)}}))},2213:(t,e,r)=>{var n=r(3310);n(n.S,"Object",{is:r(3244)})},7293:(t,e,r)=>{var n=r(9542),i=r(5304);r(4955)("keys",(function(){return function(t){return i(n(t))}}))},5556:(t,e,r)=>{var n=r(2962),i=r(5687).onFreeze;r(4955)("preventExtensions",(function(t){return function(e){return t&&n(e)?t(i(e)):e}}))},5524:(t,e,r)=>{var n=r(2962),i=r(5687).onFreeze;r(4955)("seal",(function(t){return function(e){return t&&n(e)?t(i(e)):e}}))},9248:(t,e,r)=>{var n=r(3310);n(n.S,"Object",{setPrototypeOf:r(9298).set})},215:(t,e,r)=>{"use strict";var n=r(3753),i={};i[r(1379)("toStringTag")]="z",i+""!="[object z]"&&r(3682)(Object.prototype,"toString",(function(){return"[object "+n(this)+"]"}),!0)},202:(t,e,r)=>{var n=r(3310),i=r(4060);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},7990:(t,e,r)=>{var n=r(3310),i=r(9362);n(n.G+n.F*(parseInt!=i),{parseInt:i})},6984:(t,e,r)=>{"use strict";var n,i,o,s,a=r(7423),h=r(7626),u=r(9756),c=r(3753),l=r(3310),f=r(2962),p=r(5266),d=r(9151),y=r(8372),g=r(8077),m=r(9788).set,v=r(48)(),w=r(2690),b=r(5222),M=r(8452),_=r(649),x="Promise",E=h.TypeError,S=h.process,O=S&&S.versions,T=O&&O.v8||"",I=h.Promise,N="process"==c(S),P=function(){},A=i=w.f,C=!!function(){try{var t=I.resolve(1),e=(t.constructor={})[r(1379)("species")]=function(t){t(P,P)};return(N||"function"==typeof PromiseRejectionEvent)&&t.then(P)instanceof e&&0!==T.indexOf("6.6")&&-1===M.indexOf("Chrome/66")}catch(t){}}(),D=function(t){var e;return!(!f(t)||"function"!=typeof(e=t.then))&&e},k=function(t,e){if(!t._n){t._n=!0;var r=t._c;v((function(){for(var n=t._v,i=1==t._s,o=0,s=function(e){var r,o,s,a=i?e.ok:e.fail,h=e.resolve,u=e.reject,c=e.domain;try{a?(i||(2==t._h&&F(t),t._h=1),!0===a?r=n:(c&&c.enter(),r=a(n),c&&(c.exit(),s=!0)),r===e.promise?u(E("Promise-chain cycle")):(o=D(r))?o.call(r,h,u):h(r)):u(n)}catch(t){c&&!s&&c.exit(),u(t)}};r.length>o;)s(r[o++]);t._c=[],t._n=!1,e&&!t._h&&L(t)}))}},L=function(t){m.call(h,(function(){var e,r,n,i=t._v,o=j(t);if(o&&(e=b((function(){N?S.emit("unhandledRejection",i,t):(r=h.onunhandledrejection)?r({promise:t,reason:i}):(n=h.console)&&n.error&&n.error("Unhandled promise rejection",i)})),t._h=N||j(t)?2:1),t._a=void 0,o&&e.e)throw e.v}))},j=function(t){return 1!==t._h&&0===(t._a||t._c).length},F=function(t){m.call(h,(function(){var e;N?S.emit("rejectionHandled",t):(e=h.onrejectionhandled)&&e({promise:t,reason:t._v})}))},R=function(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),k(e,!0))},B=function(t){var e,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw E("Promise can't be resolved itself");(e=D(t))?v((function(){var n={_w:r,_d:!1};try{e.call(t,u(B,n,1),u(R,n,1))}catch(t){R.call(n,t)}})):(r._v=t,r._s=1,k(r,!1))}catch(t){R.call({_w:r,_d:!1},t)}}};C||(I=function(t){d(this,I,x,"_h"),p(t),n.call(this);try{t(u(B,this,1),u(R,this,1))}catch(t){R.call(this,t)}},(n=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=r(9490)(I.prototype,{then:function(t,e){var r=A(g(this,I));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=N?S.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&k(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new n;this.promise=t,this.resolve=u(B,t,1),this.reject=u(R,t,1)},w.f=A=function(t){return t===I||t===s?new o(t):i(t)}),l(l.G+l.W+l.F*!C,{Promise:I}),r(889)(I,x),r(1955)(x),s=r(5042).Promise,l(l.S+l.F*!C,x,{reject:function(t){var e=A(this);return(0,e.reject)(t),e.promise}}),l(l.S+l.F*(a||!C),x,{resolve:function(t){return _(a&&this===s?I:this,t)}}),l(l.S+l.F*!(C&&r(3762)((function(t){I.all(t).catch(P)}))),x,{all:function(t){var e=this,r=A(e),n=r.resolve,i=r.reject,o=b((function(){var r=[],o=0,s=1;y(t,!1,(function(t){var a=o++,h=!1;r.push(void 0),s++,e.resolve(t).then((function(t){h||(h=!0,r[a]=t,--s||n(r))}),i)})),--s||n(r)}));return o.e&&i(o.v),r.promise},race:function(t){var e=this,r=A(e),n=r.reject,i=b((function(){y(t,!1,(function(t){e.resolve(t).then(r.resolve,n)}))}));return i.e&&n(i.v),r.promise}})},9026:(t,e,r)=>{var n=r(3310),i=r(5266),o=r(4883),s=(r(7626).Reflect||{}).apply,a=Function.apply;n(n.S+n.F*!r(6099)((function(){s((function(){}))})),"Reflect",{apply:function(t,e,r){var n=i(t),h=o(r);return s?s(n,e,h):a.call(n,e,h)}})},2267:(t,e,r)=>{var n=r(3310),i=r(8765),o=r(5266),s=r(4883),a=r(2962),h=r(6099),u=r(7591),c=(r(7626).Reflect||{}).construct,l=h((function(){function t(){}return!(c((function(){}),[],t)instanceof t)})),f=!h((function(){c((function(){}))}));n(n.S+n.F*(l||f),"Reflect",{construct:function(t,e){o(t),s(e);var r=arguments.length<3?t:o(arguments[2]);if(f&&!l)return c(t,e,r);if(t==r){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(u.apply(t,n))}var h=r.prototype,p=i(a(h)?h:Object.prototype),d=Function.apply.call(t,p,e);return a(d)?d:p}})},4086:(t,e,r)=>{var n=r(3269),i=r(3310),o=r(4883),s=r(2851);i(i.S+i.F*r(6099)((function(){Reflect.defineProperty(n.f({},1,{value:1}),1,{value:2})})),"Reflect",{defineProperty:function(t,e,r){o(t),e=s(e,!0),o(r);try{return n.f(t,e,r),!0}catch(t){return!1}}})},106:(t,e,r)=>{var n=r(3310),i=r(7765).f,o=r(4883);n(n.S,"Reflect",{deleteProperty:function(t,e){var r=i(o(t),e);return!(r&&!r.configurable)&&delete t[e]}})},3533:(t,e,r)=>{"use strict";var n=r(3310),i=r(4883),o=function(t){this._t=i(t),this._i=0;var e,r=this._k=[];for(e in t)r.push(e)};r(1700)(o,"Object",(function(){var t,e=this,r=e._k;do{if(e._i>=r.length)return{value:void 0,done:!0}}while(!((t=r[e._i++])in e._t));return{value:t,done:!1}})),n(n.S,"Reflect",{enumerate:function(t){return new o(t)}})},9212:(t,e,r)=>{var n=r(7765),i=r(3310),o=r(4883);i(i.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return n.f(o(t),e)}})},2583:(t,e,r)=>{var n=r(3310),i=r(4550),o=r(4883);n(n.S,"Reflect",{getPrototypeOf:function(t){return i(o(t))}})},2134:(t,e,r)=>{var n=r(7765),i=r(4550),o=r(3132),s=r(3310),a=r(2962),h=r(4883);s(s.S,"Reflect",{get:function t(e,r){var s,u,c=arguments.length<3?e:arguments[2];return h(e)===c?e[r]:(s=n.f(e,r))?o(s,"value")?s.value:void 0!==s.get?s.get.call(c):void 0:a(u=i(e))?t(u,r,c):void 0}})},2877:(t,e,r)=>{var n=r(3310);n(n.S,"Reflect",{has:function(t,e){return e in t}})},9636:(t,e,r)=>{var n=r(3310),i=r(4883),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function(t){return i(t),!o||o(t)}})},2014:(t,e,r)=>{var n=r(3310);n(n.S,"Reflect",{ownKeys:r(1529)})},1194:(t,e,r)=>{var n=r(3310),i=r(4883),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function(t){i(t);try{return o&&o(t),!0}catch(t){return!1}}})},6221:(t,e,r)=>{var n=r(3310),i=r(9298);i&&n(n.S,"Reflect",{setPrototypeOf:function(t,e){i.check(t,e);try{return i.set(t,e),!0}catch(t){return!1}}})},509:(t,e,r)=>{var n=r(3269),i=r(7765),o=r(4550),s=r(3132),a=r(3310),h=r(1519),u=r(4883),c=r(2962);a(a.S,"Reflect",{set:function t(e,r,a){var l,f,p=arguments.length<4?e:arguments[3],d=i.f(u(e),r);if(!d){if(c(f=o(e)))return t(f,r,a,p);d=h(0)}if(s(d,"value")){if(!1===d.writable||!c(p))return!1;if(l=i.f(p,r)){if(l.get||l.set||!1===l.writable)return!1;l.value=a,n.f(p,r,l)}else n.f(p,r,h(0,a));return!0}return void 0!==d.set&&(d.set.call(p,a),!0)}})},2678:(t,e,r)=>{var n=r(7626),i=r(7432),o=r(3269).f,s=r(8918).f,a=r(2432),h=r(6403),u=n.RegExp,c=u,l=u.prototype,f=/a/g,p=/a/g,d=new u(f)!==f;if(r(4421)&&(!d||r(6099)((function(){return p[r(1379)("match")]=!1,u(f)!=f||u(p)==p||"/a/i"!=u(f,"i")})))){u=function(t,e){var r=this instanceof u,n=a(t),o=void 0===e;return!r&&n&&t.constructor===u&&o?t:i(d?new c(n&&!o?t.source:t,e):c((n=t instanceof u)?t.source:t,n&&o?h.call(t):e),r?this:l,u)};for(var y=function(t){t in u||o(u,t,{configurable:!0,get:function(){return c[t]},set:function(e){c[t]=e}})},g=s(c),m=0;g.length>m;)y(g[m++]);l.constructor=u,u.prototype=l,r(3682)(n,"RegExp",u)}r(1955)("RegExp")},1196:(t,e,r)=>{"use strict";var n=r(942);r(3310)({target:"RegExp",proto:!0,forced:n!==/./.exec},{exec:n})},140:(t,e,r)=>{r(4421)&&"g"!=/./g.flags&&r(3269).f(RegExp.prototype,"flags",{configurable:!0,get:r(6403)})},1592:(t,e,r)=>{"use strict";var n=r(4883),i=r(1721),o=r(1703),s=r(7047);r(7627)("match",1,(function(t,e,r,a){return[function(r){var n=t(this),i=null==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=a(r,t,this);if(e.done)return e.value;var h=n(t),u=String(this);if(!h.global)return s(h,u);var c=h.unicode;h.lastIndex=0;for(var l,f=[],p=0;null!==(l=s(h,u));){var d=String(l[0]);f[p]=d,""===d&&(h.lastIndex=o(u,i(h.lastIndex),c)),p++}return 0===p?null:f}]}))},70:(t,e,r)=>{"use strict";var n=r(4883),i=r(9542),o=r(1721),s=r(9823),a=r(1703),h=r(7047),u=Math.max,c=Math.min,l=Math.floor,f=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g;r(7627)("replace",2,(function(t,e,r,d){return[function(n,i){var o=t(this),s=null==n?void 0:n[e];return void 0!==s?s.call(n,o,i):r.call(String(o),n,i)},function(t,e){var i=d(r,t,this,e);if(i.done)return i.value;var l=n(t),f=String(this),p="function"==typeof e;p||(e=String(e));var g=l.global;if(g){var m=l.unicode;l.lastIndex=0}for(var v=[];;){var w=h(l,f);if(null===w)break;if(v.push(w),!g)break;""===String(w[0])&&(l.lastIndex=a(f,o(l.lastIndex),m))}for(var b,M="",_=0,x=0;x<v.length;x++){w=v[x];for(var E=String(w[0]),S=u(c(s(w.index),f.length),0),O=[],T=1;T<w.length;T++)O.push(void 0===(b=w[T])?b:String(b));var I=w.groups;if(p){var N=[E].concat(O,S,f);void 0!==I&&N.push(I);var P=String(e.apply(void 0,N))}else P=y(E,f,S,O,I,e);S>=_&&(M+=f.slice(_,S)+P,_=S+E.length)}return M+f.slice(_)}];function y(t,e,n,o,s,a){var h=n+t.length,u=o.length,c=p;return void 0!==s&&(s=i(s),c=f),r.call(a,c,(function(r,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(h);case"<":a=s[i.slice(1,-1)];break;default:var c=+i;if(0===c)return r;if(c>u){var f=l(c/10);return 0===f?r:f<=u?void 0===o[f-1]?i.charAt(1):o[f-1]+i.charAt(1):r}a=o[c-1]}return void 0===a?"":a}))}}))},1758:(t,e,r)=>{"use strict";var n=r(4883),i=r(3244),o=r(7047);r(7627)("search",1,(function(t,e,r,s){return[function(r){var n=t(this),i=null==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=s(r,t,this);if(e.done)return e.value;var a=n(t),h=String(this),u=a.lastIndex;i(u,0)||(a.lastIndex=0);var c=o(a,h);return i(a.lastIndex,u)||(a.lastIndex=u),null===c?-1:c.index}]}))},4503:(t,e,r)=>{"use strict";var n=r(2432),i=r(4883),o=r(8077),s=r(1703),a=r(1721),h=r(7047),u=r(942),c=r(6099),l=Math.min,f=[].push,p=4294967295,d=!c((function(){RegExp(p,"y")}));r(7627)("split",2,(function(t,e,r,c){var y;return y="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!n(t))return r.call(i,t,e);for(var o,s,a,h=[],c=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),l=0,d=void 0===e?p:e>>>0,y=new RegExp(t.source,c+"g");(o=u.call(y,i))&&!((s=y.lastIndex)>l&&(h.push(i.slice(l,o.index)),o.length>1&&o.index<i.length&&f.apply(h,o.slice(1)),a=o[0].length,l=s,h.length>=d));)y.lastIndex===o.index&&y.lastIndex++;return l===i.length?!a&&y.test("")||h.push(""):h.push(i.slice(l)),h.length>d?h.slice(0,d):h}:"0".split(void 0,0).length?function(t,e){return void 0===t&&0===e?[]:r.call(this,t,e)}:r,[function(r,n){var i=t(this),o=null==r?void 0:r[e];return void 0!==o?o.call(r,i,n):y.call(String(i),r,n)},function(t,e){var n=c(y,t,this,e,y!==r);if(n.done)return n.value;var u=i(t),f=String(this),g=o(u,RegExp),m=u.unicode,v=(u.ignoreCase?"i":"")+(u.multiline?"m":"")+(u.unicode?"u":"")+(d?"y":"g"),w=new g(d?u:"^(?:"+u.source+")",v),b=void 0===e?p:e>>>0;if(0===b)return[];if(0===f.length)return null===h(w,f)?[f]:[];for(var M=0,_=0,x=[];_<f.length;){w.lastIndex=d?_:0;var E,S=h(w,d?f:f.slice(_));if(null===S||(E=l(a(w.lastIndex+(d?0:_)),f.length))===M)_=s(f,_,m);else{if(x.push(f.slice(M,_)),x.length===b)return x;for(var O=1;O<=S.length-1;O++)if(x.push(S[O]),x.length===b)return x;_=M=E}}return x.push(f.slice(M)),x}]}))},7950:(t,e,r)=>{"use strict";r(140);var n=r(4883),i=r(6403),o=r(4421),s="toString",a=/./.toString,h=function(t){r(3682)(RegExp.prototype,s,t,!0)};r(6099)((function(){return"/a/b"!=a.call({source:"a",flags:"b"})}))?h((function(){var t=n(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)})):a.name!=s&&h((function(){return a.call(this)}))},5871:(t,e,r)=>{"use strict";var n=r(9888),i=r(4136);t.exports=r(6909)("Set",(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return n.def(i(this,"Set"),t=0===t?0:t,t)}},n)},9071:(t,e,r)=>{"use strict";r(1486)("anchor",(function(t){return function(e){return t(this,"a","name",e)}}))},7836:(t,e,r)=>{"use strict";r(1486)("big",(function(t){return function(){return t(this,"big","","")}}))},9259:(t,e,r)=>{"use strict";r(1486)("blink",(function(t){return function(){return t(this,"blink","","")}}))},3133:(t,e,r)=>{"use strict";r(1486)("bold",(function(t){return function(){return t(this,"b","","")}}))},9435:(t,e,r)=>{"use strict";var n=r(3310),i=r(8840)(!1);n(n.P,"String",{codePointAt:function(t){return i(this,t)}})},7011:(t,e,r)=>{"use strict";var n=r(3310),i=r(1721),o=r(495),s="endsWith",a="".endsWith;n(n.P+n.F*r(9569)(s),"String",{endsWith:function(t){var e=o(this,t,s),r=arguments.length>1?arguments[1]:void 0,n=i(e.length),h=void 0===r?n:Math.min(i(r),n),u=String(t);return a?a.call(e,u,h):e.slice(h-u.length,h)===u}})},9462:(t,e,r)=>{"use strict";r(1486)("fixed",(function(t){return function(){return t(this,"tt","","")}}))},7443:(t,e,r)=>{"use strict";r(1486)("fontcolor",(function(t){return function(e){return t(this,"font","color",e)}}))},7279:(t,e,r)=>{"use strict";r(1486)("fontsize",(function(t){return function(e){return t(this,"font","size",e)}}))},1479:(t,e,r)=>{var n=r(3310),i=r(3693),o=String.fromCharCode,s=String.fromCodePoint;n(n.S+n.F*(!!s&&1!=s.length),"String",{fromCodePoint:function(t){for(var e,r=[],n=arguments.length,s=0;n>s;){if(e=+arguments[s++],i(e,1114111)!==e)throw RangeError(e+" is not a valid code point");r.push(e<65536?o(e):o(55296+((e-=65536)>>10),e%1024+56320))}return r.join("")}})},5554:(t,e,r)=>{"use strict";var n=r(3310),i=r(495),o="includes";n(n.P+n.F*r(9569)(o),"String",{includes:function(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},4715:(t,e,r)=>{"use strict";r(1486)("italics",(function(t){return function(){return t(this,"i","","")}}))},5995:(t,e,r)=>{"use strict";var n=r(8840)(!0);r(2711)(String,"String",(function(t){this._t=String(t),this._i=0}),(function(){var t,e=this._t,r=this._i;return r>=e.length?{value:void 0,done:!0}:(t=n(e,r),this._i+=t.length,{value:t,done:!1})}))},1482:(t,e,r)=>{"use strict";r(1486)("link",(function(t){return function(e){return t(this,"a","href",e)}}))},7702:(t,e,r)=>{var n=r(3310),i=r(7931),o=r(1721);n(n.S,"String",{raw:function(t){for(var e=i(t.raw),r=o(e.length),n=arguments.length,s=[],a=0;r>a;)s.push(String(e[a++])),a<n&&s.push(String(arguments[a]));return s.join("")}})},7619:(t,e,r)=>{var n=r(3310);n(n.P,"String",{repeat:r(2918)})},8742:(t,e,r)=>{"use strict";r(1486)("small",(function(t){return function(){return t(this,"small","","")}}))},6585:(t,e,r)=>{"use strict";var n=r(3310),i=r(1721),o=r(495),s="startsWith",a="".startsWith;n(n.P+n.F*r(9569)(s),"String",{startsWith:function(t){var e=o(this,t,s),r=i(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),n=String(t);return a?a.call(e,n,r):e.slice(r,r+n.length)===n}})},220:(t,e,r)=>{"use strict";r(1486)("strike",(function(t){return function(){return t(this,"strike","","")}}))},7349:(t,e,r)=>{"use strict";r(1486)("sub",(function(t){return function(){return t(this,"sub","","")}}))},5852:(t,e,r)=>{"use strict";r(1486)("sup",(function(t){return function(){return t(this,"sup","","")}}))},7592:(t,e,r)=>{"use strict";r(6426)("trim",(function(t){return function(){return t(this,3)}}))},5968:(t,e,r)=>{"use strict";var n=r(7626),i=r(3132),o=r(4421),s=r(3310),a=r(3682),h=r(5687).KEY,u=r(6099),c=r(6948),l=r(889),f=r(3549),p=r(1379),d=r(6075),y=r(9729),g=r(989),m=r(5159),v=r(4883),w=r(2962),b=r(9542),M=r(7931),_=r(2851),x=r(1519),E=r(8765),S=r(7831),O=r(7765),T=r(4365),I=r(3269),N=r(5304),P=O.f,A=I.f,C=S.f,D=n.Symbol,k=n.JSON,L=k&&k.stringify,j=p("_hidden"),F=p("toPrimitive"),R={}.propertyIsEnumerable,B=c("symbol-registry"),G=c("symbols"),U=c("op-symbols"),q=Object.prototype,z="function"==typeof D&&!!T.f,V=n.QObject,W=!V||!V.prototype||!V.prototype.findChild,X=o&&u((function(){return 7!=E(A({},"a",{get:function(){return A(this,"a",{value:7}).a}})).a}))?function(t,e,r){var n=P(q,e);n&&delete q[e],A(t,e,r),n&&t!==q&&A(q,e,n)}:A,$=function(t){var e=G[t]=E(D.prototype);return e._k=t,e},Y=z&&"symbol"==typeof D.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof D},Q=function(t,e,r){return t===q&&Q(U,e,r),v(t),e=_(e,!0),v(r),i(G,e)?(r.enumerable?(i(t,j)&&t[j][e]&&(t[j][e]=!1),r=E(r,{enumerable:x(0,!1)})):(i(t,j)||A(t,j,x(1,{})),t[j][e]=!0),X(t,e,r)):A(t,e,r)},K=function(t,e){v(t);for(var r,n=g(e=M(e)),i=0,o=n.length;o>i;)Q(t,r=n[i++],e[r]);return t},H=function(t){var e=R.call(this,t=_(t,!0));return!(this===q&&i(G,t)&&!i(U,t))&&(!(e||!i(this,t)||!i(G,t)||i(this,j)&&this[j][t])||e)},J=function(t,e){if(t=M(t),e=_(e,!0),t!==q||!i(G,e)||i(U,e)){var r=P(t,e);return!r||!i(G,e)||i(t,j)&&t[j][e]||(r.enumerable=!0),r}},Z=function(t){for(var e,r=C(M(t)),n=[],o=0;r.length>o;)i(G,e=r[o++])||e==j||e==h||n.push(e);return n},tt=function(t){for(var e,r=t===q,n=C(r?U:M(t)),o=[],s=0;n.length>s;)!i(G,e=n[s++])||r&&!i(q,e)||o.push(G[e]);return o};z||(a((D=function(){if(this instanceof D)throw TypeError("Symbol is not a constructor!");var t=f(arguments.length>0?arguments[0]:void 0),e=function(r){this===q&&e.call(U,r),i(this,j)&&i(this[j],t)&&(this[j][t]=!1),X(this,t,x(1,r))};return o&&W&&X(q,t,{configurable:!0,set:e}),$(t)}).prototype,"toString",(function(){return this._k})),O.f=J,I.f=Q,r(8918).f=S.f=Z,r(4498).f=H,T.f=tt,o&&!r(7423)&&a(q,"propertyIsEnumerable",H,!0),d.f=function(t){return $(p(t))}),s(s.G+s.W+s.F*!z,{Symbol:D});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),rt=0;et.length>rt;)p(et[rt++]);for(var nt=N(p.store),it=0;nt.length>it;)y(nt[it++]);s(s.S+s.F*!z,"Symbol",{for:function(t){return i(B,t+="")?B[t]:B[t]=D(t)},keyFor:function(t){if(!Y(t))throw TypeError(t+" is not a symbol!");for(var e in B)if(B[e]===t)return e},useSetter:function(){W=!0},useSimple:function(){W=!1}}),s(s.S+s.F*!z,"Object",{create:function(t,e){return void 0===e?E(t):K(E(t),e)},defineProperty:Q,defineProperties:K,getOwnPropertyDescriptor:J,getOwnPropertyNames:Z,getOwnPropertySymbols:tt});var ot=u((function(){T.f(1)}));s(s.S+s.F*ot,"Object",{getOwnPropertySymbols:function(t){return T.f(b(t))}}),k&&s(s.S+s.F*(!z||u((function(){var t=D();return"[null]"!=L([t])||"{}"!=L({a:t})||"{}"!=L(Object(t))}))),"JSON",{stringify:function(t){for(var e,r,n=[t],i=1;arguments.length>i;)n.push(arguments[i++]);if(r=e=n[1],(w(e)||void 0!==t)&&!Y(t))return m(e)||(e=function(t,e){if("function"==typeof r&&(e=r.call(this,t,e)),!Y(e))return e}),n[1]=e,L.apply(k,n)}}),D.prototype[F]||r(342)(D.prototype,F,D.prototype.valueOf),l(D,"Symbol"),l(Math,"Math",!0),l(n.JSON,"JSON",!0)},5365:(t,e,r)=>{"use strict";var n=r(3310),i=r(2204),o=r(9443),s=r(4883),a=r(3693),h=r(1721),u=r(2962),c=r(7626).ArrayBuffer,l=r(8077),f=o.ArrayBuffer,p=o.DataView,d=i.ABV&&c.isView,y=f.prototype.slice,g=i.VIEW,m="ArrayBuffer";n(n.G+n.W+n.F*(c!==f),{ArrayBuffer:f}),n(n.S+n.F*!i.CONSTR,m,{isView:function(t){return d&&d(t)||u(t)&&g in t}}),n(n.P+n.U+n.F*r(6099)((function(){return!new f(2).slice(1,void 0).byteLength})),m,{slice:function(t,e){if(void 0!==y&&void 0===e)return y.call(s(this),t);for(var r=s(this).byteLength,n=a(t,r),i=a(void 0===e?r:e,r),o=new(l(this,f))(h(i-n)),u=new p(this),c=new p(o),d=0;n<i;)c.setUint8(d++,u.getUint8(n++));return o}}),r(1955)(m)},3689:(t,e,r)=>{var n=r(3310);n(n.G+n.W+n.F*!r(2204).ABV,{DataView:r(9443).DataView})},2553:(t,e,r)=>{r(7670)("Float32",4,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},2193:(t,e,r)=>{r(7670)("Float64",8,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},6520:(t,e,r)=>{r(7670)("Int16",2,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},8898:(t,e,r)=>{r(7670)("Int32",4,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},4157:(t,e,r)=>{r(7670)("Int8",1,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},6791:(t,e,r)=>{r(7670)("Uint16",2,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},1488:(t,e,r)=>{r(7670)("Uint32",4,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},2869:(t,e,r)=>{r(7670)("Uint8",1,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},6435:(t,e,r)=>{r(7670)("Uint8",1,(function(t){return function(e,r,n){return t(this,e,r,n)}}),!0)},965:(t,e,r)=>{"use strict";var n,i=r(7626),o=r(4195)(0),s=r(3682),a=r(5687),h=r(8874),u=r(3366),c=r(2962),l=r(4136),f=r(4136),p=!i.ActiveXObject&&"ActiveXObject"in i,d="WeakMap",y=a.getWeak,g=Object.isExtensible,m=u.ufstore,v=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},w={get:function(t){if(c(t)){var e=y(t);return!0===e?m(l(this,d)).get(t):e?e[this._i]:void 0}},set:function(t,e){return u.def(l(this,d),t,e)}},b=t.exports=r(6909)(d,v,w,u,!0,!0);f&&p&&(h((n=u.getConstructor(v,d)).prototype,w),a.NEED=!0,o(["delete","has","get","set"],(function(t){var e=b.prototype,r=e[t];s(e,t,(function(e,i){if(c(e)&&!g(e)){this._f||(this._f=new n);var o=this._f[t](e,i);return"set"==t?this:o}return r.call(this,e,i)}))})))},7495:(t,e,r)=>{"use strict";var n=r(3366),i=r(4136),o="WeakSet";r(6909)(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return n.def(i(this,o),t,!0)}},n,!1,!0)},9718:(t,e,r)=>{"use strict";var n=r(3310),i=r(2342),o=r(9542),s=r(1721),a=r(5266),h=r(2997);n(n.P,"Array",{flatMap:function(t){var e,r,n=o(this);return a(t),e=s(n.length),r=h(n,0),i(r,n,n,e,0,1,t,arguments[1]),r}}),r(9854)("flatMap")},23:(t,e,r)=>{"use strict";var n=r(3310),i=r(2342),o=r(9542),s=r(1721),a=r(9823),h=r(2997);n(n.P,"Array",{flatten:function(){var t=arguments[0],e=o(this),r=s(e.length),n=h(e,0);return i(n,e,e,r,0,void 0===t?1:a(t)),n}}),r(9854)("flatten")},7501:(t,e,r)=>{"use strict";var n=r(3310),i=r(9699)(!0);n(n.P,"Array",{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(9854)("includes")},9876:(t,e,r)=>{var n=r(3310),i=r(48)(),o=r(7626).process,s="process"==r(9641)(o);n(n.G,{asap:function(t){var e=s&&o.domain;i(e?e.bind(t):t)}})},386:(t,e,r)=>{var n=r(3310),i=r(9641);n(n.S,"Error",{isError:function(t){return"Error"===i(t)}})},4400:(t,e,r)=>{var n=r(3310);n(n.G,{global:r(7626)})},3025:(t,e,r)=>{r(8807)("Map")},4839:(t,e,r)=>{r(6931)("Map")},5334:(t,e,r)=>{var n=r(3310);n(n.P+n.R,"Map",{toJSON:r(7337)("Map")})},2972:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{clamp:function(t,e,r){return Math.min(r,Math.max(e,t))}})},7115:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{DEG_PER_RAD:Math.PI/180})},1584:(t,e,r)=>{var n=r(3310),i=180/Math.PI;n(n.S,"Math",{degrees:function(t){return t*i}})},5614:(t,e,r)=>{var n=r(3310),i=r(5284),o=r(7368);n(n.S,"Math",{fscale:function(t,e,r,n,s){return o(i(t,e,r,n,s))}})},7624:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{iaddh:function(t,e,r,n){var i=t>>>0,o=r>>>0;return(e>>>0)+(n>>>0)+((i&o|(i|o)&~(i+o>>>0))>>>31)|0}})},1973:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{imulh:function(t,e){var r=65535,n=+t,i=+e,o=n&r,s=i&r,a=n>>16,h=i>>16,u=(a*s>>>0)+(o*s>>>16);return a*h+(u>>16)+((o*h>>>0)+(u&r)>>16)}})},2019:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{isubh:function(t,e,r,n){var i=t>>>0,o=r>>>0;return(e>>>0)-(n>>>0)-((~i&o|~(i^o)&i-o>>>0)>>>31)|0}})},2694:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{RAD_PER_DEG:180/Math.PI})},3241:(t,e,r)=>{var n=r(3310),i=Math.PI/180;n(n.S,"Math",{radians:function(t){return t*i}})},4691:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{scale:r(5284)})},9138:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{signbit:function(t){return(t=+t)!=t?t:0==t?1/t==1/0:t>0}})},1047:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{umulh:function(t,e){var r=65535,n=+t,i=+e,o=n&r,s=i&r,a=n>>>16,h=i>>>16,u=(a*s>>>0)+(o*s>>>16);return a*h+(u>>>16)+((o*h>>>0)+(u&r)>>>16)}})},3508:(t,e,r)=>{"use strict";var n=r(3310),i=r(9542),o=r(5266),s=r(3269);r(4421)&&n(n.P+r(4258),"Object",{__defineGetter__:function(t,e){s.f(i(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},3971:(t,e,r)=>{"use strict";var n=r(3310),i=r(9542),o=r(5266),s=r(3269);r(4421)&&n(n.P+r(4258),"Object",{__defineSetter__:function(t,e){s.f(i(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},2457:(t,e,r)=>{var n=r(3310),i=r(5587)(!0);n(n.S,"Object",{entries:function(t){return i(t)}})},741:(t,e,r)=>{var n=r(3310),i=r(1529),o=r(7931),s=r(7765),a=r(7492);n(n.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,r,n=o(t),h=s.f,u=i(n),c={},l=0;u.length>l;)void 0!==(r=h(n,e=u[l++]))&&a(c,e,r);return c}})},2037:(t,e,r)=>{"use strict";var n=r(3310),i=r(9542),o=r(2851),s=r(4550),a=r(7765).f;r(4421)&&n(n.P+r(4258),"Object",{__lookupGetter__:function(t){var e,r=i(this),n=o(t,!0);do{if(e=a(r,n))return e.get}while(r=s(r))}})},1087:(t,e,r)=>{"use strict";var n=r(3310),i=r(9542),o=r(2851),s=r(4550),a=r(7765).f;r(4421)&&n(n.P+r(4258),"Object",{__lookupSetter__:function(t){var e,r=i(this),n=o(t,!0);do{if(e=a(r,n))return e.set}while(r=s(r))}})},8895:(t,e,r)=>{var n=r(3310),i=r(5587)(!1);n(n.S,"Object",{values:function(t){return i(t)}})},3397:(t,e,r)=>{"use strict";var n=r(3310),i=r(7626),o=r(5042),s=r(48)(),a=r(1379)("observable"),h=r(5266),u=r(4883),c=r(9151),l=r(9490),f=r(342),p=r(8372),d=p.RETURN,y=function(t){return null==t?void 0:h(t)},g=function(t){var e=t._c;e&&(t._c=void 0,e())},m=function(t){return void 0===t._o},v=function(t){m(t)||(t._o=void 0,g(t))},w=function(t,e){u(t),this._c=void 0,this._o=t,t=new b(this);try{var r=e(t),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:h(r),this._c=r)}catch(e){return void t.error(e)}m(this)&&g(this)};w.prototype=l({},{unsubscribe:function(){v(this)}});var b=function(t){this._s=t};b.prototype=l({},{next:function(t){var e=this._s;if(!m(e)){var r=e._o;try{var n=y(r.next);if(n)return n.call(r,t)}catch(t){try{v(e)}finally{throw t}}}},error:function(t){var e=this._s;if(m(e))throw t;var r=e._o;e._o=void 0;try{var n=y(r.error);if(!n)throw t;t=n.call(r,t)}catch(t){try{g(e)}finally{throw t}}return g(e),t},complete:function(t){var e=this._s;if(!m(e)){var r=e._o;e._o=void 0;try{var n=y(r.complete);t=n?n.call(r,t):void 0}catch(t){try{g(e)}finally{throw t}}return g(e),t}}});var M=function(t){c(this,M,"Observable","_f")._f=h(t)};l(M.prototype,{subscribe:function(t){return new w(t,this._f)},forEach:function(t){var e=this;return new(o.Promise||i.Promise)((function(r,n){h(t);var i=e.subscribe({next:function(e){try{return t(e)}catch(t){n(t),i.unsubscribe()}},error:n,complete:r})}))}}),l(M,{from:function(t){var e="function"==typeof this?this:M,r=y(u(t)[a]);if(r){var n=u(r.call(t));return n.constructor===e?n:new e((function(t){return n.subscribe(t)}))}return new e((function(e){var r=!1;return s((function(){if(!r){try{if(p(t,!1,(function(t){if(e.next(t),r)return d}))===d)return}catch(t){if(r)throw t;return void e.error(t)}e.complete()}})),function(){r=!0}}))},of:function(){for(var t=0,e=arguments.length,r=new Array(e);t<e;)r[t]=arguments[t++];return new("function"==typeof this?this:M)((function(t){var e=!1;return s((function(){if(!e){for(var n=0;n<r.length;++n)if(t.next(r[n]),e)return;t.complete()}})),function(){e=!0}}))}}),f(M.prototype,a,(function(){return this})),n(n.G,{Observable:M}),r(1955)("Observable")},4613:(t,e,r)=>{"use strict";var n=r(3310),i=r(5042),o=r(7626),s=r(8077),a=r(649);n(n.P+n.R,"Promise",{finally:function(t){var e=s(this,i.Promise||o.Promise),r="function"==typeof t;return this.then(r?function(r){return a(e,t()).then((function(){return r}))}:t,r?function(r){return a(e,t()).then((function(){throw r}))}:t)}})},1961:(t,e,r)=>{"use strict";var n=r(3310),i=r(2690),o=r(5222);n(n.S,"Promise",{try:function(t){var e=i.f(this),r=o(t);return(r.e?e.reject:e.resolve)(r.v),e.promise}})},8137:(t,e,r)=>{var n=r(9913),i=r(4883),o=n.key,s=n.set;n.exp({defineMetadata:function(t,e,r,n){s(t,e,i(r),o(n))}})},9447:(t,e,r)=>{var n=r(9913),i=r(4883),o=n.key,s=n.map,a=n.store;n.exp({deleteMetadata:function(t,e){var r=arguments.length<3?void 0:o(arguments[2]),n=s(i(e),r,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var h=a.get(e);return h.delete(r),!!h.size||a.delete(e)}})},6381:(t,e,r)=>{var n=r(5871),i=r(4181),o=r(9913),s=r(4883),a=r(4550),h=o.keys,u=o.key,c=function(t,e){var r=h(t,e),o=a(t);if(null===o)return r;var s=c(o,e);return s.length?r.length?i(new n(r.concat(s))):s:r};o.exp({getMetadataKeys:function(t){return c(s(t),arguments.length<2?void 0:u(arguments[1]))}})},4047:(t,e,r)=>{var n=r(9913),i=r(4883),o=r(4550),s=n.has,a=n.get,h=n.key,u=function(t,e,r){if(s(t,e,r))return a(t,e,r);var n=o(e);return null!==n?u(t,n,r):void 0};n.exp({getMetadata:function(t,e){return u(t,i(e),arguments.length<3?void 0:h(arguments[2]))}})},8252:(t,e,r)=>{var n=r(9913),i=r(4883),o=n.keys,s=n.key;n.exp({getOwnMetadataKeys:function(t){return o(i(t),arguments.length<2?void 0:s(arguments[1]))}})},7761:(t,e,r)=>{var n=r(9913),i=r(4883),o=n.get,s=n.key;n.exp({getOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},3006:(t,e,r)=>{var n=r(9913),i=r(4883),o=r(4550),s=n.has,a=n.key,h=function(t,e,r){if(s(t,e,r))return!0;var n=o(e);return null!==n&&h(t,n,r)};n.exp({hasMetadata:function(t,e){return h(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},8296:(t,e,r)=>{var n=r(9913),i=r(4883),o=n.has,s=n.key;n.exp({hasOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},2598:(t,e,r)=>{var n=r(9913),i=r(4883),o=r(5266),s=n.key,a=n.set;n.exp({metadata:function(t,e){return function(r,n){a(t,e,(void 0!==n?i:o)(r),s(n))}}})},780:(t,e,r)=>{r(8807)("Set")},2847:(t,e,r)=>{r(6931)("Set")},2409:(t,e,r)=>{var n=r(3310);n(n.P+n.R,"Set",{toJSON:r(7337)("Set")})},1130:(t,e,r)=>{"use strict";var n=r(3310),i=r(8840)(!0),o=r(6099)((function(){return"𠮷"!=="𠮷".at(0)}));n(n.P+n.F*o,"String",{at:function(t){return i(this,t)}})},3173:(t,e,r)=>{"use strict";var n=r(3310),i=r(4821),o=r(1721),s=r(2432),a=r(6403),h=RegExp.prototype,u=function(t,e){this._r=t,this._s=e};r(1700)(u,"RegExp String",(function(){var t=this._r.exec(this._s);return{value:t,done:null===t}})),n(n.P,"String",{matchAll:function(t){if(i(this),!s(t))throw TypeError(t+" is not a regexp!");var e=String(this),r="flags"in h?String(t.flags):a.call(t),n=new RegExp(t.source,~r.indexOf("g")?r:"g"+r);return n.lastIndex=o(t.lastIndex),new u(n,e)}})},6626:(t,e,r)=>{"use strict";var n=r(3310),i=r(2011),o=r(8452),s=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);n(n.P+n.F*s,"String",{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},5486:(t,e,r)=>{"use strict";var n=r(3310),i=r(2011),o=r(8452),s=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);n(n.P+n.F*s,"String",{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},2192:(t,e,r)=>{"use strict";r(6426)("trimLeft",(function(t){return function(){return t(this,1)}}),"trimStart")},5805:(t,e,r)=>{"use strict";r(6426)("trimRight",(function(t){return function(){return t(this,2)}}),"trimEnd")},186:(t,e,r)=>{r(9729)("asyncIterator")},3845:(t,e,r)=>{r(9729)("observable")},9113:(t,e,r)=>{var n=r(3310);n(n.S,"System",{global:r(7626)})},3619:(t,e,r)=>{r(8807)("WeakMap")},1767:(t,e,r)=>{r(6931)("WeakMap")},5884:(t,e,r)=>{r(8807)("WeakSet")},3453:(t,e,r)=>{r(6931)("WeakSet")},3963:(t,e,r)=>{for(var n=r(8759),i=r(5304),o=r(3682),s=r(7626),a=r(342),h=r(568),u=r(1379),c=u("iterator"),l=u("toStringTag"),f=h.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=i(p),y=0;y<d.length;y++){var g,m=d[y],v=p[m],w=s[m],b=w&&w.prototype;if(b&&(b[c]||a(b,c,f),b[l]||a(b,l,m),h[m]=f,v))for(g in n)b[g]||o(b,g,n[g],!0)}},5377:(t,e,r)=>{var n=r(3310),i=r(9788);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},8123:(t,e,r)=>{var n=r(7626),i=r(3310),o=r(8452),s=[].slice,a=/MSIE .\./.test(o),h=function(t){return function(e,r){var n=arguments.length>2,i=!!n&&s.call(arguments,2);return t(n?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,r)}};i(i.G+i.B+i.F*a,{setTimeout:h(n.setTimeout),setInterval:h(n.setInterval)})},5706:(t,e,r)=>{r(5968),r(663),r(6133),r(1475),r(8534),r(641),r(7293),r(5081),r(3750),r(5524),r(5556),r(402),r(848),r(5997),r(3033),r(2213),r(9248),r(215),r(8884),r(7910),r(814),r(7990),r(202),r(7164),r(5669),r(3883),r(9803),r(3596),r(3519),r(708),r(6899),r(8172),r(6313),r(7782),r(3419),r(8583),r(4587),r(7165),r(6875),r(4259),r(1133),r(6516),r(1524),r(2056),r(5732),r(811),r(2172),r(8921),r(6798),r(2438),r(1322),r(429),r(1479),r(7702),r(7592),r(5995),r(9435),r(7011),r(5554),r(7619),r(6585),r(9071),r(7836),r(9259),r(3133),r(9462),r(7443),r(7279),r(4715),r(1482),r(8742),r(220),r(7349),r(5852),r(2461),r(9016),r(857),r(8396),r(4023),r(7391),r(6636),r(4494),r(1250),r(644),r(6076),r(6897),r(1982),r(6257),r(5472),r(9461),r(9359),r(3022),r(6978),r(1285),r(6666),r(8400),r(9027),r(7456),r(9661),r(8759),r(2678),r(1196),r(7950),r(140),r(1592),r(70),r(1758),r(4503),r(6984),r(8780),r(5871),r(965),r(7495),r(5365),r(3689),r(4157),r(2869),r(6435),r(6520),r(6791),r(8898),r(1488),r(2553),r(2193),r(9026),r(2267),r(4086),r(106),r(3533),r(2134),r(9212),r(2583),r(2877),r(9636),r(2014),r(1194),r(509),r(6221),r(7501),r(9718),r(23),r(1130),r(5486),r(6626),r(2192),r(5805),r(3173),r(186),r(3845),r(741),r(8895),r(2457),r(3508),r(3971),r(2037),r(1087),r(5334),r(2409),r(4839),r(2847),r(1767),r(3453),r(3025),r(780),r(3619),r(5884),r(4400),r(9113),r(386),r(2972),r(7115),r(1584),r(5614),r(7624),r(2019),r(1973),r(2694),r(3241),r(4691),r(1047),r(9138),r(4613),r(1961),r(8137),r(9447),r(4047),r(6381),r(7761),r(8252),r(3006),r(8296),r(2598),r(9876),r(3397),r(8123),r(5377),r(3963),t.exports=r(5042)},1836:t=>{function e(t){if(t)return function(t){for(var r in e.prototype)t[r]=e.prototype[r];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},e.prototype.once=function(t,e){var r=this;function n(){r.off(t,n),e.apply(this,arguments)}return this._callbacks=this._callbacks||{},n.fn=e,this.on(t,n),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,n=this._callbacks[t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var i=0;i<n.length;i++)if((r=n[i])===e||r.fn===e){n.splice(i,1);break}return this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),r=this._callbacks[t];if(r)for(var n=0,i=(r=r.slice(0)).length;n<i;++n)r[n].apply(this,e);return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},1581:t=>{function e(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(t){return"function"==typeof t}function n(t){return"object"==typeof t&&null!==t}function i(t){return void 0===t}t.exports=e,e.EventEmitter=e,e.prototype._events=void 0,e.prototype._maxListeners=void 0,e.defaultMaxListeners=10,e.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},e.prototype.emit=function(t){var e,o,s,a,h,u;if(this._events||(this._events={}),"error"===t&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((e=arguments[1])instanceof Error)throw e;var c=new Error('Uncaught, unspecified "error" event. ('+e+")");throw c.context=e,c}if(i(o=this._events[t]))return!1;if(r(o))switch(arguments.length){case 1:o.call(this);break;case 2:o.call(this,arguments[1]);break;case 3:o.call(this,arguments[1],arguments[2]);break;default:a=Array.prototype.slice.call(arguments,1),o.apply(this,a)}else if(n(o))for(a=Array.prototype.slice.call(arguments,1),s=(u=o.slice()).length,h=0;h<s;h++)u[h].apply(this,a);return!0},e.prototype.addListener=function(t,o){var s;if(!r(o))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",t,r(o.listener)?o.listener:o),this._events[t]?n(this._events[t])?this._events[t].push(o):this._events[t]=[this._events[t],o]:this._events[t]=o,n(this._events[t])&&!this._events[t].warned&&(s=i(this._maxListeners)?e.defaultMaxListeners:this._maxListeners)&&s>0&&this._events[t].length>s&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()),this},e.prototype.on=e.prototype.addListener,e.prototype.once=function(t,e){if(!r(e))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(t,i),n||(n=!0,e.apply(this,arguments))}return i.listener=e,this.on(t,i),this},e.prototype.removeListener=function(t,e){var i,o,s,a;if(!r(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(s=(i=this._events[t]).length,o=-1,i===e||r(i.listener)&&i.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(n(i)){for(a=s;a-- >0;)if(i[a]===e||i[a].listener&&i[a].listener===e){o=a;break}if(o<0)return this;1===i.length?(i.length=0,delete this._events[t]):i.splice(o,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},e.prototype.removeAllListeners=function(t){var e,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[t]))this.removeListener(t,n);else if(n)for(;n.length;)this.removeListener(t,n[n.length-1]);return delete this._events[t],this},e.prototype.listeners=function(t){return this._events&&this._events[t]?r(this._events[t])?[this._events[t]]:this._events[t].slice():[]},e.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(r(e))return 1;if(e)return e.length}return 0},e.listenerCount=function(t,e){return t.listenerCount(e)}},7701:(t,e)=>{e.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,h=(1<<a)-1,u=h>>1,c=-7,l=r?i-1:0,f=r?-1:1,p=t[e+l];for(l+=f,o=p&(1<<-c)-1,p>>=-c,c+=a;c>0;o=256*o+t[e+l],l+=f,c-=8);for(s=o&(1<<-c)-1,o>>=-c,c+=n;c>0;s=256*s+t[e+l],l+=f,c-=8);if(0===o)o=1-u;else{if(o===h)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=u}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,h,u=8*o-i-1,c=(1<<u)-1,l=c>>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,y=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=c):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+l>=1?f/h:f*Math.pow(2,1-l))*h>=2&&(s++,h/=2),s+l>=c?(a=0,s=c):s+l>=1?(a=(e*h-1)*Math.pow(2,i),s+=l):(a=e*Math.pow(2,l-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=d,a/=256,i-=8);for(s=s<<i|a,u+=i;u>0;t[r+p]=255&s,p+=d,s/=256,u-=8);t[r+p-d]|=128*y}},4213:function(t,e){!function(t){"use strict";function e(t,e){return t>e?1:t<e?-1:0}var r=function(t,r){void 0===t&&(t=e),void 0===r&&(r=!1),this._compare=t,this._root=null,this._size=0,this._noDuplicates=!!r},n={size:{configurable:!0}};function i(t,e,r,n,o){var s=o-n;if(s>0){var a=n+Math.floor(s/2),h={key:e[a],data:r[a],parent:t};return h.left=i(h,e,r,n,a),h.right=i(h,e,r,a+1,o),h}return null}function o(t,e,r,n,i){if(!(r>=n)){for(var s=t[r+n>>1],a=r-1,h=n+1;;){do{a++}while(i(t[a],s)<0);do{h--}while(i(t[h],s)>0);if(a>=h)break;var u=t[a];t[a]=t[h],t[h]=u,u=e[a],e[a]=e[h],e[h]=u}o(t,e,r,h,i),o(t,e,h+1,n,i)}}r.prototype.rotateLeft=function(t){var e=t.right;e&&(t.right=e.left,e.left&&(e.left.parent=t),e.parent=t.parent),t.parent?t===t.parent.left?t.parent.left=e:t.parent.right=e:this._root=e,e&&(e.left=t),t.parent=e},r.prototype.rotateRight=function(t){var e=t.left;e&&(t.left=e.right,e.right&&(e.right.parent=t),e.parent=t.parent),t.parent?t===t.parent.left?t.parent.left=e:t.parent.right=e:this._root=e,e&&(e.right=t),t.parent=e},r.prototype._splay=function(t){for(var e=this;t.parent;){var r=t.parent;r.parent?r.left===t&&r.parent.left===r?(e.rotateRight(r.parent),e.rotateRight(r)):r.right===t&&r.parent.right===r?(e.rotateLeft(r.parent),e.rotateLeft(r)):r.left===t&&r.parent.right===r?(e.rotateRight(r),e.rotateLeft(r)):(e.rotateLeft(r),e.rotateRight(r)):r.left===t?e.rotateRight(r):e.rotateLeft(r)}},r.prototype.splay=function(t){for(var e,r,n,i,o;t.parent;)(r=(e=t.parent).parent)&&r.parent?((n=r.parent).left===r?n.left=t:n.right=t,t.parent=n):(t.parent=null,this._root=t),i=t.left,o=t.right,t===e.left?(r&&(r.left===e?(e.right?(r.left=e.right,r.left.parent=r):r.left=null,e.right=r,r.parent=e):(i?(r.right=i,i.parent=r):r.right=null,t.left=r,r.parent=t)),o?(e.left=o,o.parent=e):e.left=null,t.right=e,e.parent=t):(r&&(r.right===e?(e.left?(r.right=e.left,r.right.parent=r):r.right=null,e.left=r,r.parent=e):(o?(r.left=o,o.parent=r):r.left=null,t.right=r,r.parent=t)),i?(e.right=i,i.parent=e):e.right=null,t.left=e,e.parent=t)},r.prototype.replace=function(t,e){t.parent?t===t.parent.left?t.parent.left=e:t.parent.right=e:this._root=e,e&&(e.parent=t.parent)},r.prototype.minNode=function(t){if(void 0===t&&(t=this._root),t)for(;t.left;)t=t.left;return t},r.prototype.maxNode=function(t){if(void 0===t&&(t=this._root),t)for(;t.right;)t=t.right;return t},r.prototype.insert=function(t,e){var r=this._root,n=null,i=this._compare;if(this._noDuplicates)for(;r;){if(n=r,0===i(r.key,t))return;r=i(r.key,t)<0?r.right:r.left}else for(;r;)n=r,r=i(r.key,t)<0?r.right:r.left;return r={key:t,data:e,left:null,right:null,parent:n},n?i(n.key,r.key)<0?n.right=r:n.left=r:this._root=r,this.splay(r),this._size++,r},r.prototype.find=function(t){for(var e=this._root,r=this._compare;e;){var n=r(e.key,t);if(n<0)e=e.right;else{if(!(n>0))return e;e=e.left}}return null},r.prototype.contains=function(t){for(var e=this._root,r=this._compare;e;){var n=r(t,e.key);if(0===n)return!0;e=n<0?e.left:e.right}return!1},r.prototype.remove=function(t){var e=this.find(t);if(!e)return!1;if(this.splay(e),e.left)if(e.right){var r=this.minNode(e.right);r.parent!==e&&(this.replace(r,r.right),r.right=e.right,r.right.parent=r),this.replace(e,r),r.left=e.left,r.left.parent=r}else this.replace(e,e.left);else this.replace(e,e.right);return this._size--,!0},r.prototype.removeNode=function(t){if(!t)return!1;if(this.splay(t),t.left)if(t.right){var e=this.minNode(t.right);e.parent!==t&&(this.replace(e,e.right),e.right=t.right,e.right.parent=e),this.replace(t,e),e.left=t.left,e.left.parent=e}else this.replace(t,t.left);else this.replace(t,t.right);return this._size--,!0},r.prototype.erase=function(t){var e=this.find(t);if(e){this.splay(e);var r=e.left,n=e.right,i=null;r&&(r.parent=null,i=this.maxNode(r),this.splay(i),this._root=i),n&&(r?i.right=n:this._root=n,n.parent=i),this._size--}},r.prototype.pop=function(){var t=this._root,e=null;if(t){for(;t.left;)t=t.left;e={key:t.key,data:t.data},this.remove(t.key)}return e},r.prototype.next=function(t){var e=t;if(e)if(e.right)for(e=e.right;e&&e.left;)e=e.left;else for(e=t.parent;e&&e.right===t;)t=e,e=e.parent;return e},r.prototype.prev=function(t){var e=t;if(e)if(e.left)for(e=e.left;e&&e.right;)e=e.right;else for(e=t.parent;e&&e.left===t;)t=e,e=e.parent;return e},r.prototype.forEach=function(t){for(var e=this._root,r=[],n=!1,i=0;!n;)e?(r.push(e),e=e.left):r.length>0?(t(e=r.pop(),i++),e=e.right):n=!0;return this},r.prototype.range=function(t,e,r,n){for(var i=[],o=this._compare,s=this._root;0!==i.length||s;)if(s)i.push(s),s=s.left;else{if(o((s=i.pop()).key,e)>0)break;if(o(s.key,t)>=0&&r.call(n,s))return this;s=s.right}return this},r.prototype.keys=function(){for(var t=this._root,e=[],r=[],n=!1;!n;)t?(e.push(t),t=t.left):e.length>0?(t=e.pop(),r.push(t.key),t=t.right):n=!0;return r},r.prototype.values=function(){for(var t=this._root,e=[],r=[],n=!1;!n;)t?(e.push(t),t=t.left):e.length>0?(t=e.pop(),r.push(t.data),t=t.right):n=!0;return r},r.prototype.at=function(t){for(var e=this._root,r=[],n=!1,i=0;!n;)if(e)r.push(e),e=e.left;else if(r.length>0){if(e=r.pop(),i===t)return e;i++,e=e.right}else n=!0;return null},r.prototype.load=function(t,e,r){if(void 0===t&&(t=[]),void 0===e&&(e=[]),void 0===r&&(r=!1),0!==this._size)throw new Error("bulk-load: tree is not empty");var n=t.length;return r&&o(t,e,0,n-1,this._compare),this._root=i(null,t,e,0,n),this._size=n,this},r.prototype.min=function(){var t=this.minNode(this._root);return t?t.key:null},r.prototype.max=function(){var t=this.maxNode(this._root);return t?t.key:null},r.prototype.isEmpty=function(){return null===this._root},n.size.get=function(){return this._size},r.createTree=function(t,e,n,i,o){return new r(n,o).load(t,e,i)},Object.defineProperties(r.prototype,n);function s(t,e,r){null===e?(t.inOut=!1,t.otherInOut=!0):(t.isSubject===e.isSubject?(t.inOut=!e.inOut,t.otherInOut=e.otherInOut):(t.inOut=!e.otherInOut,t.otherInOut=e.isVertical()?!e.inOut:e.inOut),e&&(t.prevInResult=!a(e,r)||e.isVertical()?e.prevInResult:e)),t.inResult=a(t,r)}function a(t,e){switch(t.type){case 0:switch(e){case 0:return!t.otherInOut;case 1:return t.otherInOut;case 2:return t.isSubject&&t.otherInOut||!t.isSubject&&!t.otherInOut;case 3:return!0}break;case 2:return 0===e||1===e;case 3:return 2===e;case 1:return!1}return!1}var h=function(t,e,r,n,i){this.left=e,this.point=t,this.otherEvent=r,this.isSubject=n,this.type=i||0,this.inOut=!1,this.otherInOut=!1,this.prevInResult=null,this.inResult=!1,this.resultInOut=!1,this.isExteriorRing=!0};function u(t,e){return t[0]===e[0]&&t[1]===e[1]}function c(t,e,r){return(t[0]-r[0])*(e[1]-r[1])-(e[0]-r[0])*(t[1]-r[1])}function l(t,e){var r=t.point,n=e.point;return r[0]>n[0]?1:r[0]<n[0]?-1:r[1]!==n[1]?r[1]>n[1]?1:-1:function(t,e,r,n){return t.left!==e.left?t.left?1:-1:0!==c(r,t.otherEvent.point,e.otherEvent.point)?t.isBelow(e.otherEvent.point)?-1:1:!t.isSubject&&e.isSubject?1:-1}(t,e,r)}function f(t,e,r){var n=new h(e,!1,t,t.isSubject),i=new h(e,!0,t.otherEvent,t.isSubject);return u(t.point,t.otherEvent.point)&&console.warn("what is that, a collapsed segment?",t),n.contourId=i.contourId=t.contourId,l(i,t.otherEvent)>0&&(t.otherEvent.left=!0,i.left=!1),t.otherEvent.otherEvent=i,t.otherEvent=n,r.push(i),r.push(n),r}function p(t,e){return t[0]*e[1]-t[1]*e[0]}function d(t,e){return t[0]*e[0]+t[1]*e[1]}function y(t,e,r){var n=function(t,e,r,n,i){var o=[e[0]-t[0],e[1]-t[1]],s=[n[0]-r[0],n[1]-r[1]];function a(t,e,r){return[t[0]+e*r[0],t[1]+e*r[1]]}var h=[r[0]-t[0],r[1]-t[1]],u=p(o,s),c=u*u,l=d(o,o);if(c>0){var f=p(h,s)/u;if(f<0||f>1)return null;var y=p(h,o)/u;return y<0||y>1?null:0===f||1===f?i?null:[a(t,f,o)]:0===y||1===y?i?null:[a(r,y,s)]:[a(t,f,o)]}if((c=(u=p(h,o))*u)>0)return null;var g=d(o,h)/l,m=g+d(o,s)/l,v=Math.min(g,m),w=Math.max(g,m);return v<=1&&w>=0?1===v?i?null:[a(t,v>0?v:0,o)]:0===w?i?null:[a(t,w<1?w:1,o)]:i&&0===v&&1===w?null:[a(t,v>0?v:0,o),a(t,w<1?w:1,o)]:null}(t.point,t.otherEvent.point,e.point,e.otherEvent.point),i=n?n.length:0;if(0===i)return 0;if(1===i&&(u(t.point,e.point)||u(t.otherEvent.point,e.otherEvent.point)))return 0;if(2===i&&t.isSubject===e.isSubject)return 0;if(1===i)return u(t.point,n[0])||u(t.otherEvent.point,n[0])||f(t,n[0],r),u(e.point,n[0])||u(e.otherEvent.point,n[0])||f(e,n[0],r),1;var o=[],s=!1,a=!1;return u(t.point,e.point)?s=!0:1===l(t,e)?o.push(e,t):o.push(t,e),u(t.otherEvent.point,e.otherEvent.point)?a=!0:1===l(t.otherEvent,e.otherEvent)?o.push(e.otherEvent,t.otherEvent):o.push(t.otherEvent,e.otherEvent),s&&a||s?(e.type=1,t.type=e.inOut===t.inOut?2:3,s&&!a&&f(o[1].otherEvent,o[0].point,r),2):a?(f(o[0],o[1].point,r),3):o[0]!==o[3].otherEvent?(f(o[0],o[1].point,r),f(o[1],o[2].point,r),3):(f(o[0],o[1].point,r),f(o[3].otherEvent,o[2].point,r),3)}function g(t,e){if(t===e)return 0;if(0!==c(t.point,t.otherEvent.point,e.point)||0!==c(t.point,t.otherEvent.point,e.otherEvent.point))return u(t.point,e.point)?t.isBelow(e.otherEvent.point)?-1:1:t.point[0]===e.point[0]?t.point[1]<e.point[1]?-1:1:1===l(t,e)?e.isAbove(t.point)?-1:1:t.isBelow(e.point)?-1:1;if(t.isSubject!==e.isSubject)return t.isSubject?-1:1;var r=t.point,n=e.point;return r[0]===n[0]&&r[1]===n[1]?(r=t.otherEvent.point,n=e.otherEvent.point,r[0]===n[0]&&r[1]===n[1]?0:t.contourId>e.contourId?1:-1):1===l(t,e)?1:-1}function m(t,e,r,n){var i=t+1,o=e.length;if(i>o-1)return t-1;for(var s=e[t].point,a=e[i].point;i<o&&a[0]===s[0]&&a[1]===s[1];){if(!r[i])return i;a=e[++i].point}for(i=t-1;r[i]&&i>=n;)i--;return i}function v(t,e){var r,n,i,o=function(t){var e,r,n,i,o=[];for(r=0,n=t.length;r<n;r++)((e=t[r]).left&&e.inResult||!e.left&&e.otherEvent.inResult)&&o.push(e);for(var s=!1;!s;)for(s=!0,r=0,n=o.length;r<n;r++)r+1<n&&1===l(o[r],o[r+1])&&(i=o[r],o[r]=o[r+1],o[r+1]=i,s=!1);for(r=0,n=o.length;r<n;r++)(e=o[r]).pos=r;for(r=0,n=o.length;r<n;r++)(e=o[r]).left||(i=e.pos,e.pos=e.otherEvent.pos,e.otherEvent.pos=i);return o}(t),s={},a=[];for(r=0,n=o.length;r<n;r++)if(!s[r]){var h=[[]];o[r].isExteriorRing?2===e&&!o[r].isSubject&&a.length>1?a[a.length-1].push(h[0]):a.push(h):2!==e||o[r].isSubject||0!==a.length?0===a.length?a.push([[h]]):a[a.length-1].push(h[0]):a.push(h);var u=a.length-1,c=r,f=o[r].point;for(h[0].push(f);c>=r;)i=o[c],s[c]=!0,i.left?(i.resultInOut=!1,i.contourId=u):(i.otherEvent.resultInOut=!0,i.otherEvent.contourId=u),s[c=i.pos]=!0,h[0].push(o[c].point),c=m(c,o,s,r);i=o[c=-1===c?r:c],s[c]=s[i.pos]=!0,i.otherEvent.resultInOut=!0,i.otherEvent.contourId=u}return a}h.prototype.isBelow=function(t){var e=this.point,r=this.otherEvent.point;return this.left?(e[0]-t[0])*(r[1]-t[1])-(r[0]-t[0])*(e[1]-t[1])>0:(r[0]-t[0])*(e[1]-t[1])-(e[0]-t[0])*(r[1]-t[1])>0},h.prototype.isAbove=function(t){return!this.isBelow(t)},h.prototype.isVertical=function(){return this.point[0]===this.otherEvent.point[0]},h.prototype.clone=function(){var t=new h(this.point,this.left,this.otherEvent,this.isSubject,this.type);return t.inResult=this.inResult,t.prevInResult=this.prevInResult,t.isExteriorRing=this.isExteriorRing,t.inOut=this.inOut,t.otherInOut=this.otherInOut,t};var w=M,b=M;function M(t,e){if(!(this instanceof M))return new M(t,e);if(this.data=t||[],this.length=this.data.length,this.compare=e||_,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)}function _(t,e){return t<e?-1:t>e?1:0}M.prototype={push:function(t){this.data.push(t),this.length++,this._up(this.length-1)},pop:function(){if(0!==this.length){var t=this.data[0];return this.length--,this.length>0&&(this.data[0]=this.data[this.length],this._down(0)),this.data.pop(),t}},peek:function(){return this.data[0]},_up:function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var i=t-1>>1,o=e[i];if(r(n,o)>=0)break;e[t]=o,t=i}e[t]=n},_down:function(t){for(var e=this.data,r=this.compare,n=this.length>>1,i=e[t];t<n;){var o=1+(t<<1),s=o+1,a=e[o];if(s<this.length&&r(e[s],a)<0&&(o=s,a=e[s]),r(a,i)>=0)break;e[t]=a,t=o}e[t]=i}},w.default=b;var x=Math.max,E=Math.min,S=0;function O(t,e,r,n,i,o){var s,a,u,c,f,p;for(s=0,a=t.length-1;s<a;s++)if(u=t[s],c=t[s+1],f=new h(u,!1,void 0,e),p=new h(c,!1,f,e),f.otherEvent=p,u[0]!==c[0]||u[1]!==c[1]){f.contourId=p.contourId=r,o||(f.isExteriorRing=!1,p.isExteriorRing=!1),l(f,p)>0?p.left=!0:f.left=!0;var d=u[0],y=u[1];i[0]=E(i[0],d),i[1]=E(i[1],y),i[2]=x(i[2],d),i[3]=x(i[3],y),n.push(f),n.push(p)}}var T=[];function I(t,e,n){"number"==typeof t[0][0][0]&&(t=[t]),"number"==typeof e[0][0][0]&&(e=[e]);var i=function(t,e,r){var n=null;return t.length*e.length==0&&(0===r?n=T:2===r?n=t:1!==r&&3!==r||(n=0===t.length?e:t)),n}(t,e,n);if(i)return i===T?null:i;var o=[1/0,1/0,-1/0,-1/0],a=[1/0,1/0,-1/0,-1/0],h=function(t,e,r,n,i){var o,s,a,h,u,c,f=new w(null,l);for(a=0,h=t.length;a<h;a++)for(u=0,c=(o=t[a]).length;u<c;u++)(s=0===u)&&S++,O(o[u],!0,S,f,r,s);for(a=0,h=e.length;a<h;a++)for(u=0,c=(o=e[a]).length;u<c;u++)s=0===u,2===i&&(s=!1),s&&S++,O(o[u],!1,S,f,n,s);return f}(t,e,o,a,n);return(i=function(t,e,r,n,i){var o=null;return(r[0]>n[2]||n[0]>r[2]||r[1]>n[3]||n[1]>r[3])&&(0===i?o=T:2===i?o=t:1!==i&&3!==i||(o=t.concat(e))),o}(t,e,o,a,n))?i===T?null:i:v(function(t,e,n,i,o,a){for(var h,u,c,l=new r(g),f=[],p=Math.min(i[2],o[2]);0!==t.length;){var d=t.pop();if(f.push(d),0===a&&d.point[0]>p||2===a&&d.point[0]>i[2])break;if(d.left){u=h=l.insert(d),h=h!==(c=l.minNode())?l.prev(h):null,u=l.next(u);var m=h?h.key:null;if(s(d,m,a),u&&2===y(d,u.key,t)&&(s(d,m,a),s(d,u.key,a)),h&&2===y(h.key,d,t)){var v=h;s(m,(v=v!==c?l.prev(v):null)?v.key:null,a),s(d,m,a)}}else d=d.otherEvent,u=h=l.find(d),h&&u&&(h=h!==c?l.prev(h):null,u=l.next(u),l.remove(d),u&&h&&y(h.key,u.key,t))}return f}(h,0,0,o,a,n),n)}var N={UNION:1,DIFFERENCE:2,INTERSECTION:0,XOR:3};t.union=function(t,e){return I(t,e,1)},t.diff=function(t,e){return I(t,e,2)},t.xor=function(t,e){return I(t,e,3)},t.intersection=function(t,e){return I(t,e,0)},t.operations=N,Object.defineProperty(t,"__esModule",{value:!0})}(e)},3742:function(t,e,r){var n;t=r.nmd(t),n=function(){var t=null,e={};u("monochrome",null,[[0,0],[100,0]]),u("red",[-26,18],[[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]),u("orange",[18,46],[[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]),u("yellow",[46,62],[[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]),u("green",[62,178],[[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]),u("blue",[178,257],[[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]),u("purple",[257,282],[[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]),u("pink",[282,334],[[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]]);var r=[],n=function(e){if(void 0!==(e=e||{}).seed&&null!==e.seed&&e.seed===parseInt(e.seed,10))t=e.seed;else if("string"==typeof e.seed)t=function(t){for(var e=0,r=0;r!==t.length&&!(e>=Number.MAX_SAFE_INTEGER);r++)e+=t.charCodeAt(r);return e}(e.seed);else{if(void 0!==e.seed&&null!==e.seed)throw new TypeError("The seed value must be an integer or string");t=null}var a,h;if(null!==e.count&&void 0!==e.count){for(var u=e.count,l=[],p=0;p<e.count;p++)r.push(!1);for(e.count=null;u>l.length;){var d=n(e);null!==t&&(e.seed=t),l.push(d)}return e.count=u,l}return function(t,e){switch(e.format){case"hsvArray":return t;case"hslArray":return f(t);case"hsl":var r=f(t);return"hsl("+r[0]+", "+r[1]+"%, "+r[2]+"%)";case"hsla":var n=f(t),i=e.alpha||Math.random();return"hsla("+n[0]+", "+n[1]+"%, "+n[2]+"%, "+i+")";case"rgbArray":return c(t);case"rgb":return"rgb("+c(t).join(", ")+")";case"rgba":var o=c(t);return i=e.alpha||Math.random(),"rgba("+o.join(", ")+", "+i+")";default:return function(t){var e=c(t);function r(t){var e=t.toString(16);return 1==e.length?"0"+e:e}return"#"+r(e[0])+r(e[1])+r(e[2])}(t)}}([a=i(e),h=o(a,e),s(a,h,e)],e)};function i(t){if(r.length>0){var n=h(s=function(t){if(isNaN(t)){if("string"==typeof t)if(e[t]){var r=e[t];if(r.hueRange)return r.hueRange}else if(t.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i))return a(l(t)[0]).hueRange}else{var n=parseInt(t);if(n<360&&n>0)return a(t).hueRange}return[0,360]}(t.hue)),i=(s[1]-s[0])/r.length,o=parseInt((n-s[0])/i);return!0===r[o]?o=(o+2)%r.length:r[o]=!0,(n=h(s=[(s[0]+o*i)%359,(s[0]+(o+1)*i)%359]))<0&&(n=360+n),n}var s;return(n=h(s=function(t){if("number"==typeof parseInt(t)){var r=parseInt(t);if(r<360&&r>0)return[r,r]}if("string"==typeof t)if(e[t]){var n=e[t];if(n.hueRange)return n.hueRange}else if(t.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i)){var i=l(t)[0];return[i,i]}return[0,360]}(t.hue)))<0&&(n=360+n),n}function o(t,e){if("monochrome"===e.hue)return 0;if("random"===e.luminosity)return h([0,100]);var r=function(t){return a(t).saturationRange}(t),n=r[0],i=r[1];switch(e.luminosity){case"bright":n=55;break;case"dark":n=i-10;break;case"light":i=55}return h([n,i])}function s(t,e,r){var n=function(t,e){for(var r=a(t).lowerBounds,n=0;n<r.length-1;n++){var i=r[n][0],o=r[n][1],s=r[n+1][0],h=r[n+1][1];if(e>=i&&e<=s){var u=(h-o)/(s-i);return u*e+(o-u*i)}}return 0}(t,e),i=100;switch(r.luminosity){case"dark":i=n+20;break;case"light":n=(i+n)/2;break;case"random":n=0,i=100}return h([n,i])}function a(t){for(var r in t>=334&&t<=360&&(t-=360),e){var n=e[r];if(n.hueRange&&t>=n.hueRange[0]&&t<=n.hueRange[1])return e[r]}return"Color not found"}function h(e){if(null===t){var r=Math.random();return r+=.618033988749895,r%=1,Math.floor(e[0]+r*(e[1]+1-e[0]))}var n=e[1]||1,i=e[0]||0,o=(t=(9301*t+49297)%233280)/233280;return Math.floor(i+o*(n-i))}function u(t,r,n){var i=n[0][0],o=n[n.length-1][0],s=n[n.length-1][1],a=n[0][1];e[t]={hueRange:r,lowerBounds:n,saturationRange:[i,o],brightnessRange:[s,a]}}function c(t){var e=t[0];0===e&&(e=1),360===e&&(e=359),e/=360;var r=t[1]/100,n=t[2]/100,i=Math.floor(6*e),o=6*e-i,s=n*(1-r),a=n*(1-o*r),h=n*(1-(1-o)*r),u=256,c=256,l=256;switch(i){case 0:u=n,c=h,l=s;break;case 1:u=a,c=n,l=s;break;case 2:u=s,c=n,l=h;break;case 3:u=s,c=a,l=n;break;case 4:u=h,c=s,l=n;break;case 5:u=n,c=s,l=a}return[Math.floor(255*u),Math.floor(255*c),Math.floor(255*l)]}function l(t){t=3===(t=t.replace(/^#/,"")).length?t.replace(/(.)/g,"$1$1"):t;var e=parseInt(t.substr(0,2),16)/255,r=parseInt(t.substr(2,2),16)/255,n=parseInt(t.substr(4,2),16)/255,i=Math.max(e,r,n),o=i-Math.min(e,r,n),s=i?o/i:0;switch(i){case e:return[(r-n)/o%6*60||0,s,i];case r:return[60*((n-e)/o+2)||0,s,i];case n:return[60*((e-r)/o+4)||0,s,i]}}function f(t){var e=t[0],r=t[1]/100,n=t[2]/100,i=(2-r)*n;return[e,Math.round(r*n/(i<1?i:2-i)*1e4)/100,i/2*100]}return n}(),t&&t.exports&&(e=t.exports=n),e.randomColor=n},2526:(t,e,r)=>{!function(t){t.parser=function(t,e){return new n(t,e)},t.SAXParser=n,t.SAXStream=s,t.createStream=function(t,e){return new s(t,e)},t.MAX_BUFFER_LENGTH=65536;var e=["comment","sgmlDecl","textNode","tagName","doctype","procInstName","procInstBody","entity","attribName","attribValue","cdata","script"];function n(r,i){if(!(this instanceof n))return new n(r,i);var o=this;!function(t){for(var r=0,n=e.length;r<n;r++)t[e[r]]=""}(o),o.q=o.c="",o.bufferCheckPosition=t.MAX_BUFFER_LENGTH,o.opt=i||{},o.opt.lowercase=o.opt.lowercase||o.opt.lowercasetags,o.looseCase=o.opt.lowercase?"toLowerCase":"toUpperCase",o.tags=[],o.closed=o.closedRoot=o.sawRoot=!1,o.tag=o.error=null,o.strict=!!r,o.noscript=!(!r&&!o.opt.noscript),o.state=E.BEGIN,o.ENTITIES=Object.create(t.ENTITIES),o.attribList=[],o.opt.xmlns&&(o.ns=Object.create(y)),o.trackPosition=!1!==o.opt.position,o.trackPosition&&(o.position=o.line=o.column=0),S(o,"onready")}t.EVENTS=["text","processinginstruction","sgmldeclaration","doctype","comment","attribute","opentag","closetag","opencdata","cdata","closecdata","error","end","ready","script","opennamespace","closenamespace"],Object.create||(Object.create=function(t){function e(){this.__proto__=t}return e.prototype=t,new e}),Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__}),Object.keys||(Object.keys=function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e}),n.prototype={end:function(){P(this)},write:function(r){var n=this;if(this.error)throw this.error;if(n.closed)return N(n,"Cannot write after close. Assign an onready handler.");if(null===r)return P(n);for(var i=0,o="";n.c=o=r.charAt(i++);)switch(n.trackPosition&&(n.position++,"\n"===o?(n.line++,n.column=0):n.column++),n.state){case E.BEGIN:"<"===o?(n.state=E.OPEN_WAKA,n.startTagPosition=n.position):b(a,o)&&(A(n,"Non-whitespace before first tag."),n.textNode=o,n.state=E.TEXT);continue;case E.TEXT:if(n.sawRoot&&!n.closedRoot){for(var s=i-1;o&&"<"!==o&&"&"!==o;)(o=r.charAt(i++))&&n.trackPosition&&(n.position++,"\n"===o?(n.line++,n.column=0):n.column++);n.textNode+=r.substring(s,i-1)}"<"===o?(n.state=E.OPEN_WAKA,n.startTagPosition=n.position):(!b(a,o)||n.sawRoot&&!n.closedRoot||A(n,"Text data outside of root node."),"&"===o?n.state=E.TEXT_ENTITY:n.textNode+=o);continue;case E.SCRIPT:"<"===o?n.state=E.SCRIPT_ENDING:n.script+=o;continue;case E.SCRIPT_ENDING:"/"===o?n.state=E.CLOSE_TAG:(n.script+="<"+o,n.state=E.SCRIPT);continue;case E.OPEN_WAKA:if("!"===o)n.state=E.SGML_DECL,n.sgmlDecl="";else if(w(a,o));else if(w(g,o))n.state=E.OPEN_TAG,n.tagName=o;else if("/"===o)n.state=E.CLOSE_TAG,n.tagName="";else if("?"===o)n.state=E.PROC_INST,n.procInstName=n.procInstBody="";else{if(A(n,"Unencoded <"),n.startTagPosition+1<n.position){var h=n.position-n.startTagPosition;o=new Array(h).join(" ")+o}n.textNode+="<"+o,n.state=E.TEXT}continue;case E.SGML_DECL:"[CDATA["===(n.sgmlDecl+o).toUpperCase()?(O(n,"onopencdata"),n.state=E.CDATA,n.sgmlDecl="",n.cdata=""):n.sgmlDecl+o==="--"?(n.state=E.COMMENT,n.comment="",n.sgmlDecl=""):"DOCTYPE"===(n.sgmlDecl+o).toUpperCase()?(n.state=E.DOCTYPE,(n.doctype||n.sawRoot)&&A(n,"Inappropriately located doctype declaration"),n.doctype="",n.sgmlDecl=""):">"===o?(O(n,"onsgmldeclaration",n.sgmlDecl),n.sgmlDecl="",n.state=E.TEXT):w(c,o)?(n.state=E.SGML_DECL_QUOTED,n.sgmlDecl+=o):n.sgmlDecl+=o;continue;case E.SGML_DECL_QUOTED:o===n.q&&(n.state=E.SGML_DECL,n.q=""),n.sgmlDecl+=o;continue;case E.DOCTYPE:">"===o?(n.state=E.TEXT,O(n,"ondoctype",n.doctype),n.doctype=!0):(n.doctype+=o,"["===o?n.state=E.DOCTYPE_DTD:w(c,o)&&(n.state=E.DOCTYPE_QUOTED,n.q=o));continue;case E.DOCTYPE_QUOTED:n.doctype+=o,o===n.q&&(n.q="",n.state=E.DOCTYPE);continue;case E.DOCTYPE_DTD:n.doctype+=o,"]"===o?n.state=E.DOCTYPE:w(c,o)&&(n.state=E.DOCTYPE_DTD_QUOTED,n.q=o);continue;case E.DOCTYPE_DTD_QUOTED:n.doctype+=o,o===n.q&&(n.state=E.DOCTYPE_DTD,n.q="");continue;case E.COMMENT:"-"===o?n.state=E.COMMENT_ENDING:n.comment+=o;continue;case E.COMMENT_ENDING:"-"===o?(n.state=E.COMMENT_ENDED,n.comment=I(n.opt,n.comment),n.comment&&O(n,"oncomment",n.comment),n.comment=""):(n.comment+="-"+o,n.state=E.COMMENT);continue;case E.COMMENT_ENDED:">"!==o?(A(n,"Malformed comment"),n.comment+="--"+o,n.state=E.COMMENT):n.state=E.TEXT;continue;case E.CDATA:"]"===o?n.state=E.CDATA_ENDING:n.cdata+=o;continue;case E.CDATA_ENDING:"]"===o?n.state=E.CDATA_ENDING_2:(n.cdata+="]"+o,n.state=E.CDATA);continue;case E.CDATA_ENDING_2:">"===o?(n.cdata&&O(n,"oncdata",n.cdata),O(n,"onclosecdata"),n.cdata="",n.state=E.TEXT):"]"===o?n.cdata+="]":(n.cdata+="]]"+o,n.state=E.CDATA);continue;case E.PROC_INST:"?"===o?n.state=E.PROC_INST_ENDING:w(a,o)?n.state=E.PROC_INST_BODY:n.procInstName+=o;continue;case E.PROC_INST_BODY:if(!n.procInstBody&&w(a,o))continue;"?"===o?n.state=E.PROC_INST_ENDING:n.procInstBody+=o;continue;case E.PROC_INST_ENDING:">"===o?(O(n,"onprocessinginstruction",{name:n.procInstName,body:n.procInstBody}),n.procInstName=n.procInstBody="",n.state=E.TEXT):(n.procInstBody+="?"+o,n.state=E.PROC_INST_BODY);continue;case E.OPEN_TAG:w(m,o)?n.tagName+=o:(C(n),">"===o?L(n):"/"===o?n.state=E.OPEN_TAG_SLASH:(b(a,o)&&A(n,"Invalid character in tag name"),n.state=E.ATTRIB));continue;case E.OPEN_TAG_SLASH:">"===o?(L(n,!0),j(n)):(A(n,"Forward-slash in opening tag not followed by >"),n.state=E.ATTRIB);continue;case E.ATTRIB:if(w(a,o))continue;">"===o?L(n):"/"===o?n.state=E.OPEN_TAG_SLASH:w(g,o)?(n.attribName=o,n.attribValue="",n.state=E.ATTRIB_NAME):A(n,"Invalid attribute name");continue;case E.ATTRIB_NAME:"="===o?n.state=E.ATTRIB_VALUE:">"===o?(A(n,"Attribute without value"),n.attribValue=n.attribName,k(n),L(n)):w(a,o)?n.state=E.ATTRIB_NAME_SAW_WHITE:w(m,o)?n.attribName+=o:A(n,"Invalid attribute name");continue;case E.ATTRIB_NAME_SAW_WHITE:if("="===o)n.state=E.ATTRIB_VALUE;else{if(w(a,o))continue;A(n,"Attribute without value"),n.tag.attributes[n.attribName]="",n.attribValue="",O(n,"onattribute",{name:n.attribName,value:""}),n.attribName="",">"===o?L(n):w(g,o)?(n.attribName=o,n.state=E.ATTRIB_NAME):(A(n,"Invalid attribute name"),n.state=E.ATTRIB)}continue;case E.ATTRIB_VALUE:if(w(a,o))continue;w(c,o)?(n.q=o,n.state=E.ATTRIB_VALUE_QUOTED):(A(n,"Unquoted attribute value"),n.state=E.ATTRIB_VALUE_UNQUOTED,n.attribValue=o);continue;case E.ATTRIB_VALUE_QUOTED:if(o!==n.q){"&"===o?n.state=E.ATTRIB_VALUE_ENTITY_Q:n.attribValue+=o;continue}k(n),n.q="",n.state=E.ATTRIB_VALUE_CLOSED;continue;case E.ATTRIB_VALUE_CLOSED:w(a,o)?n.state=E.ATTRIB:">"===o?L(n):"/"===o?n.state=E.OPEN_TAG_SLASH:w(g,o)?(A(n,"No whitespace between attributes"),n.attribName=o,n.attribValue="",n.state=E.ATTRIB_NAME):A(n,"Invalid attribute name");continue;case E.ATTRIB_VALUE_UNQUOTED:if(b(f,o)){"&"===o?n.state=E.ATTRIB_VALUE_ENTITY_U:n.attribValue+=o;continue}k(n),">"===o?L(n):n.state=E.ATTRIB;continue;case E.CLOSE_TAG:if(n.tagName)">"===o?j(n):w(m,o)?n.tagName+=o:n.script?(n.script+="</"+n.tagName,n.tagName="",n.state=E.SCRIPT):(b(a,o)&&A(n,"Invalid tagname in closing tag"),n.state=E.CLOSE_TAG_SAW_WHITE);else{if(w(a,o))continue;b(g,o)?n.script?(n.script+="</"+o,n.state=E.SCRIPT):A(n,"Invalid tagname in closing tag."):n.tagName=o}continue;case E.CLOSE_TAG_SAW_WHITE:if(w(a,o))continue;">"===o?j(n):A(n,"Invalid characters in closing tag");continue;case E.TEXT_ENTITY:case E.ATTRIB_VALUE_ENTITY_Q:case E.ATTRIB_VALUE_ENTITY_U:switch(n.state){case E.TEXT_ENTITY:var u=E.TEXT,p="textNode";break;case E.ATTRIB_VALUE_ENTITY_Q:u=E.ATTRIB_VALUE_QUOTED,p="attribValue";break;case E.ATTRIB_VALUE_ENTITY_U:u=E.ATTRIB_VALUE_UNQUOTED,p="attribValue"}";"===o?(n[p]+=F(n),n.entity="",n.state=u):w(l,o)?n.entity+=o:(A(n,"Invalid character entity"),n[p]+="&"+n.entity+o,n.entity="",n.state=u);continue;default:throw new Error(n,"Unknown state: "+n.state)}return n.position>=n.bufferCheckPosition&&function(r){for(var n=Math.max(t.MAX_BUFFER_LENGTH,10),i=0,o=0,s=e.length;o<s;o++){var a=r[e[o]].length;if(a>n)switch(e[o]){case"textNode":T(r);break;case"cdata":O(r,"oncdata",r.cdata),r.cdata="";break;case"script":O(r,"onscript",r.script),r.script="";break;default:N(r,"Max buffer length exceeded: "+e[o])}i=Math.max(i,a)}r.bufferCheckPosition=t.MAX_BUFFER_LENGTH-i+r.position}(n),n},resume:function(){return this.error=null,this},close:function(){return this.write(null)},flush:function(){var t;T(t=this),""!==t.cdata&&(O(t,"oncdata",t.cdata),t.cdata=""),""!==t.script&&(O(t,"onscript",t.script),t.script="")}};try{var i=r(8166).Stream}catch(t){i=function(){}}var o=t.EVENTS.filter((function(t){return"error"!==t&&"end"!==t}));function s(t,e){if(!(this instanceof s))return new s(t,e);i.apply(this),this._parser=new n(t,e),this.writable=!0,this.readable=!0;var r=this;this._parser.onend=function(){r.emit("end")},this._parser.onerror=function(t){r.emit("error",t),r._parser.error=null},this._decoder=null,o.forEach((function(t){Object.defineProperty(r,"on"+t,{get:function(){return r._parser["on"+t]},set:function(e){if(!e)return r.removeAllListeners(t),r._parser["on"+t]=e;r.on(t,e)},enumerable:!0,configurable:!1})}))}s.prototype=Object.create(i.prototype,{constructor:{value:s}}),s.prototype.write=function(t){if("function"==typeof Buffer&&"function"==typeof Buffer.isBuffer&&Buffer.isBuffer(t)){if(!this._decoder){var e=r(8639).s;this._decoder=new e("utf8")}t=this._decoder.write(t)}return this._parser.write(t.toString()),this.emit("data",t),!0},s.prototype.end=function(t){return t&&t.length&&this.write(t),this._parser.end(),!0},s.prototype.on=function(t,e){var r=this;return r._parser["on"+t]||-1===o.indexOf(t)||(r._parser["on"+t]=function(){var e=1===arguments.length?[arguments[0]]:Array.apply(null,arguments);e.splice(0,0,t),r.emit.apply(r,e)}),i.prototype.on.call(r,t,e)};var a="\r\n\t ",h="0124356789",u="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",c="'\"",l=h+u+"#",f=a+">",p="http://www.w3.org/XML/1998/namespace",d="http://www.w3.org/2000/xmlns/",y={xml:p,xmlns:d};a=v(a),h=v(h),u=v(u);var g=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,m=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/;function v(t){return t.split("").reduce((function(t,e){return t[e]=!0,t}),{})}function w(t,e){return function(t){return"[object RegExp]"===Object.prototype.toString.call(t)}(t)?!!e.match(t):t[e]}function b(t,e){return!w(t,e)}c=v(c),l=v(l),f=v(f);var M,_,x,E=0;for(var E in t.STATE={BEGIN:E++,TEXT:E++,TEXT_ENTITY:E++,OPEN_WAKA:E++,SGML_DECL:E++,SGML_DECL_QUOTED:E++,DOCTYPE:E++,DOCTYPE_QUOTED:E++,DOCTYPE_DTD:E++,DOCTYPE_DTD_QUOTED:E++,COMMENT_STARTING:E++,COMMENT:E++,COMMENT_ENDING:E++,COMMENT_ENDED:E++,CDATA:E++,CDATA_ENDING:E++,CDATA_ENDING_2:E++,PROC_INST:E++,PROC_INST_BODY:E++,PROC_INST_ENDING:E++,OPEN_TAG:E++,OPEN_TAG_SLASH:E++,ATTRIB:E++,ATTRIB_NAME:E++,ATTRIB_NAME_SAW_WHITE:E++,ATTRIB_VALUE:E++,ATTRIB_VALUE_QUOTED:E++,ATTRIB_VALUE_CLOSED:E++,ATTRIB_VALUE_UNQUOTED:E++,ATTRIB_VALUE_ENTITY_Q:E++,ATTRIB_VALUE_ENTITY_U:E++,CLOSE_TAG:E++,CLOSE_TAG_SAW_WHITE:E++,SCRIPT:E++,SCRIPT_ENDING:E++},t.ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},Object.keys(t.ENTITIES).forEach((function(e){var r=t.ENTITIES[e],n="number"==typeof r?String.fromCharCode(r):r;t.ENTITIES[e]=n})),t.STATE)t.STATE[t.STATE[E]]=E;function S(t,e,r){t[e]&&t[e](r)}function O(t,e,r){t.textNode&&T(t),S(t,e,r)}function T(t){t.textNode=I(t.opt,t.textNode),t.textNode&&S(t,"ontext",t.textNode),t.textNode=""}function I(t,e){return t.trim&&(e=e.trim()),t.normalize&&(e=e.replace(/\s+/g," ")),e}function N(t,e){return T(t),t.trackPosition&&(e+="\nLine: "+t.line+"\nColumn: "+t.column+"\nChar: "+t.c),e=new Error(e),t.error=e,S(t,"onerror",e),t}function P(t){return t.closedRoot||A(t,"Unclosed root tag"),t.state!==E.BEGIN&&t.state!==E.TEXT&&N(t,"Unexpected end"),T(t),t.c="",t.closed=!0,S(t,"onend"),n.call(t,t.strict,t.opt),t}function A(t,e){if("object"!=typeof t||!(t instanceof n))throw new Error("bad call to strictFail");t.strict&&N(t,e)}function C(t){t.strict||(t.tagName=t.tagName[t.looseCase]());var e=t.tags[t.tags.length-1]||t,r=t.tag={name:t.tagName,attributes:{}};t.opt.xmlns&&(r.ns=e.ns),t.attribList.length=0}function D(t,e){var r=t.indexOf(":")<0?["",t]:t.split(":"),n=r[0],i=r[1];return e&&"xmlns"===t&&(n="xmlns",i=""),{prefix:n,local:i}}function k(t){if(t.strict||(t.attribName=t.attribName[t.looseCase]()),-1!==t.attribList.indexOf(t.attribName)||t.tag.attributes.hasOwnProperty(t.attribName))return t.attribName=t.attribValue="";if(t.opt.xmlns){var e=D(t.attribName,!0),r=e.prefix,n=e.local;if("xmlns"===r)if("xml"===n&&t.attribValue!==p)A(t,"xml: prefix must be bound to "+p+"\nActual: "+t.attribValue);else if("xmlns"===n&&t.attribValue!==d)A(t,"xmlns: prefix must be bound to "+d+"\nActual: "+t.attribValue);else{var i=t.tag,o=t.tags[t.tags.length-1]||t;i.ns===o.ns&&(i.ns=Object.create(o.ns)),i.ns[n]=t.attribValue}t.attribList.push([t.attribName,t.attribValue])}else t.tag.attributes[t.attribName]=t.attribValue,O(t,"onattribute",{name:t.attribName,value:t.attribValue});t.attribName=t.attribValue=""}function L(t,e){if(t.opt.xmlns){var r=t.tag,n=D(t.tagName);r.prefix=n.prefix,r.local=n.local,r.uri=r.ns[n.prefix]||"",r.prefix&&!r.uri&&(A(t,"Unbound namespace prefix: "+JSON.stringify(t.tagName)),r.uri=n.prefix);var i=t.tags[t.tags.length-1]||t;r.ns&&i.ns!==r.ns&&Object.keys(r.ns).forEach((function(e){O(t,"onopennamespace",{prefix:e,uri:r.ns[e]})}));for(var o=0,s=t.attribList.length;o<s;o++){var a=t.attribList[o],h=a[0],u=a[1],c=D(h,!0),l=c.prefix,f=c.local,p=""==l?"":r.ns[l]||"",d={name:h,value:u,prefix:l,local:f,uri:p};l&&"xmlns"!=l&&!p&&(A(t,"Unbound namespace prefix: "+JSON.stringify(l)),d.uri=l),t.tag.attributes[h]=d,O(t,"onattribute",d)}t.attribList.length=0}t.tag.isSelfClosing=!!e,t.sawRoot=!0,t.tags.push(t.tag),O(t,"onopentag",t.tag),e||(t.noscript||"script"!==t.tagName.toLowerCase()?t.state=E.TEXT:t.state=E.SCRIPT,t.tag=null,t.tagName=""),t.attribName=t.attribValue="",t.attribList.length=0}function j(t){if(!t.tagName)return A(t,"Weird empty close tag."),t.textNode+="</>",void(t.state=E.TEXT);if(t.script){if("script"!==t.tagName)return t.script+="</"+t.tagName+">",t.tagName="",void(t.state=E.SCRIPT);O(t,"onscript",t.script),t.script=""}var e=t.tags.length,r=t.tagName;t.strict||(r=r[t.looseCase]());for(var n=r;e--&&t.tags[e].name!==n;)A(t,"Unexpected close tag");if(e<0)return A(t,"Unmatched closing tag: "+t.tagName),t.textNode+="</"+t.tagName+">",void(t.state=E.TEXT);t.tagName=r;for(var i=t.tags.length;i-- >e;){var o=t.tag=t.tags.pop();t.tagName=t.tag.name,O(t,"onclosetag",t.tagName);var s={};for(var a in o.ns)s[a]=o.ns[a];var h=t.tags[t.tags.length-1]||t;t.opt.xmlns&&o.ns!==h.ns&&Object.keys(o.ns).forEach((function(e){var r=o.ns[e];O(t,"onclosenamespace",{prefix:e,uri:r})}))}0===e&&(t.closedRoot=!0),t.tagName=t.attribValue=t.attribName="",t.attribList.length=0,t.state=E.TEXT}function F(t){var e,r=t.entity,n=r.toLowerCase(),i="";return t.ENTITIES[r]?t.ENTITIES[r]:t.ENTITIES[n]?t.ENTITIES[n]:("#"===(r=n).charAt(0)&&("x"===r.charAt(1)?(r=r.slice(2),i=(e=parseInt(r,16)).toString(16)):(r=r.slice(1),i=(e=parseInt(r,10)).toString(10))),r=r.replace(/^0+/,""),i.toLowerCase()!==r?(A(t,"Invalid character entity"),"&"+t.entity+";"):String.fromCodePoint(e))}E=t.STATE,String.fromCodePoint||(M=String.fromCharCode,_=Math.floor,x=function(){var t,e,r=16384,n=[],i=-1,o=arguments.length;if(!o)return"";for(var s="";++i<o;){var a=Number(arguments[i]);if(!isFinite(a)||a<0||a>1114111||_(a)!=a)throw RangeError("Invalid code point: "+a);a<=65535?n.push(a):(t=55296+((a-=65536)>>10),e=a%1024+56320,n.push(t,e)),(i+1==o||n.length>r)&&(s+=M.apply(null,n),n.length=0)}return s},Object.defineProperty?Object.defineProperty(String,"fromCodePoint",{value:x,configurable:!0,writable:!0}):String.fromCodePoint=x)}(e)},8166:(t,e,r)=>{var n=r(1836);function i(){n.call(this)}i.prototype=new n,t.exports=i,i.Stream=i,i.prototype.pipe=function(t,e){var r=this;function n(e){t.writable&&!1===t.write(e)&&r.pause&&r.pause()}function i(){r.readable&&r.resume&&r.resume()}r.on("data",n),t.on("drain",i),t._isStdio||e&&!1===e.end||(r.on("end",s),r.on("close",a));var o=!1;function s(){o||(o=!0,t.end())}function a(){o||(o=!0,"function"==typeof t.destroy&&t.destroy())}function h(t){if(u(),!this.hasListeners("error"))throw t}function u(){r.off("data",n),t.off("drain",i),r.off("end",s),r.off("close",a),r.off("error",h),t.off("error",h),r.off("end",u),r.off("close",u),t.off("end",u),t.off("close",u)}return r.on("error",h),t.on("error",h),r.on("end",u),r.on("close",u),t.on("end",u),t.on("close",u),t.emit("pipe",r),t}},8639:(t,e,r)=>{"use strict";var n=r(5538).Buffer,i=n.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(n.isEncoding===i||!i(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=h,this.end=u,e=4;break;case"utf8":this.fillLast=a,e=4;break;case"base64":this.text=c,this.end=l,e=3;break;default:return this.write=f,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(e)}function s(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function a(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,"<22>";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"<22>";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"<22>"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function h(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function u(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function c(t,e){var r=(t.length-e)%3;return 0===r?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function l(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function f(t){return t.toString(this.encoding)}function p(t){return t&&t.length?this.write(t):""}e.s=o,o.prototype.write=function(t){if(0===t.length)return"";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r<t.length?e?e+this.text(t,r):this.text(t,r):e||""},o.prototype.end=function(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"<22>":e},o.prototype.text=function(t,e){var r=function(t,e,r){var n=e.length-1;if(n<r)return 0;var i=s(e[n]);return i>=0?(i>0&&(t.lastNeed=i-1),i):--n<r||-2===i?0:(i=s(e[n]))>=0?(i>0&&(t.lastNeed=i-2),i):--n<r||-2===i?0:(i=s(e[n]))>=0?(i>0&&(2===i?i=0:t.lastNeed=i-3),i):0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var n=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,n),t.toString("utf8",e,n)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},5538:(t,e,r)=>{var n=r(1666),i=n.Buffer;function o(t,e){for(var r in t)e[r]=t[r]}function s(t,e,r){return i(t,e,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(o(n,e),e.Buffer=s),o(i,s),s.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,r)},s.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var n=i(t);return void 0!==e?"string"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}},1348:(t,e)=>{var r={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5};for(var n in r)"millisecond"===n?r.ms=r[n]:r[n.charAt(0)]=r[n],r[n+"s"]=r[n];function i(t){this.count=0;var e=function(t){var e=t.match(o);return e&&r[e[2]]?e.slice(1):null}(t);e&&(this.time=Number(e[0])*r[e[1]],this.type=e[1])}i.prototype.do=function(t){this.time&&(this.interval=setInterval((function(){e.count++,t.call(e)}),this.time));var e=this;return this},i.prototype.stop=function(){return this.interval&&(clearInterval(this.interval),delete this.interval),this};var o=/^\s*(\d+(?:\.\d+)?)\s*([a-z]+)\s*$/},8964:function(t,e){(function(){"use strict";e.stripBOM=function(t){return"\ufeff"===t[0]?t.substring(1):t}}).call(this)},8888:function(t,e,r){(function(){"use strict";var t,n,i,o,s,a={}.hasOwnProperty;t=r(122),n=r(1574).defaults,o=function(t){return"string"==typeof t&&(t.indexOf("&")>=0||t.indexOf(">")>=0||t.indexOf("<")>=0)},s=function(t){return"<![CDATA["+i(t)+"]]>"},i=function(t){return t.replace("]]>","]]]]><![CDATA[>")},e.Builder=function(){function e(t){var e,r,i;for(e in this.options={},r=n[.2])a.call(r,e)&&(i=r[e],this.options[e]=i);for(e in t)a.call(t,e)&&(i=t[e],this.options[e]=i)}return e.prototype.buildObject=function(e){var r,i,h,u,c,l;return r=this.options.attrkey,i=this.options.charkey,1===Object.keys(e).length&&this.options.rootName===n[.2].rootName?e=e[c=Object.keys(e)[0]]:c=this.options.rootName,l=this,h=function(t,e){var n,u,c,f,p,d;if("object"!=typeof e)l.options.cdata&&o(e)?t.raw(s(e)):t.txt(e);else if(Array.isArray(e)){for(f in e)if(a.call(e,f))for(p in u=e[f])c=u[p],t=h(t.ele(p),c).up()}else for(p in e)if(a.call(e,p))if(u=e[p],p===r){if("object"==typeof u)for(n in u)d=u[n],t=t.att(n,d)}else if(p===i)t=l.options.cdata&&o(u)?t.raw(s(u)):t.txt(u);else if(Array.isArray(u))for(f in u)a.call(u,f)&&(t="string"==typeof(c=u[f])?l.options.cdata&&o(c)?t.ele(p).raw(s(c)).up():t.ele(p,c).up():h(t.ele(p),c).up());else"object"==typeof u?t=h(t.ele(p),u).up():"string"==typeof u&&l.options.cdata&&o(u)?t=t.ele(p).raw(s(u)).up():(null==u&&(u=""),t=t.ele(p,u.toString()).up());return t},u=t.create(c,this.options.xmldec,this.options.doctype,{headless:this.options.headless,allowSurrogateChars:this.options.allowSurrogateChars}),h(u,e).end(this.options.renderOpts)},e}()}).call(this)},1574:function(t,e){(function(){e.defaults={.1:{explicitCharkey:!1,trim:!0,normalize:!0,normalizeTags:!1,attrkey:"@",charkey:"#",explicitArray:!1,ignoreAttrs:!1,mergeAttrs:!1,explicitRoot:!1,validator:null,xmlns:!1,explicitChildren:!1,childkey:"@@",charsAsChildren:!1,includeWhiteChars:!1,async:!1,strict:!0,attrNameProcessors:null,attrValueProcessors:null,tagNameProcessors:null,valueProcessors:null,emptyTag:""},.2:{explicitCharkey:!1,trim:!1,normalize:!1,normalizeTags:!1,attrkey:"$",charkey:"_",explicitArray:!0,ignoreAttrs:!1,mergeAttrs:!1,explicitRoot:!0,validator:null,xmlns:!1,explicitChildren:!1,preserveChildrenOrder:!1,childkey:"$$",charsAsChildren:!1,includeWhiteChars:!1,async:!1,strict:!0,attrNameProcessors:null,attrValueProcessors:null,tagNameProcessors:null,valueProcessors:null,rootName:"root",xmldec:{version:"1.0",encoding:"UTF-8",standalone:!0},doctype:null,renderOpts:{pretty:!0,indent:" ",newline:"\n"},headless:!1,chunkSize:1e4,emptyTag:"",cdata:!1}}}).call(this)},9767:function(t,e,r){(function(){"use strict";var t,n,i,o,s,a,h,u,c=function(t,e){return function(){return t.apply(e,arguments)}},l={}.hasOwnProperty;h=r(2526),i=r(1581),t=r(8964),a=r(4774),u=r(1348).setImmediate,n=r(1574).defaults,o=function(t){return"object"==typeof t&&null!=t&&0===Object.keys(t).length},s=function(t,e,r){var n,i;for(n=0,i=t.length;n<i;n++)e=(0,t[n])(e,r);return e},e.Parser=function(r){function i(t){var r,i,o;if(this.parseStringPromise=c(this.parseStringPromise,this),this.parseString=c(this.parseString,this),this.reset=c(this.reset,this),this.assignOrPush=c(this.assignOrPush,this),this.processAsync=c(this.processAsync,this),!(this instanceof e.Parser))return new e.Parser(t);for(r in this.options={},i=n[.2])l.call(i,r)&&(o=i[r],this.options[r]=o);for(r in t)l.call(t,r)&&(o=t[r],this.options[r]=o);this.options.xmlns&&(this.options.xmlnskey=this.options.attrkey+"ns"),this.options.normalizeTags&&(this.options.tagNameProcessors||(this.options.tagNameProcessors=[]),this.options.tagNameProcessors.unshift(a.normalize)),this.reset()}return function(t,e){for(var r in e)l.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(i,r),i.prototype.processAsync=function(){var t,e;try{return this.remaining.length<=this.options.chunkSize?(t=this.remaining,this.remaining="",this.saxParser=this.saxParser.write(t),this.saxParser.close()):(t=this.remaining.substr(0,this.options.chunkSize),this.remaining=this.remaining.substr(this.options.chunkSize,this.remaining.length),this.saxParser=this.saxParser.write(t),u(this.processAsync))}catch(t){if(e=t,!this.saxParser.errThrown)return this.saxParser.errThrown=!0,this.emit(e)}},i.prototype.assignOrPush=function(t,e,r){return e in t?(t[e]instanceof Array||(t[e]=[t[e]]),t[e].push(r)):this.options.explicitArray?t[e]=[r]:t[e]=r},i.prototype.reset=function(){var t,e,r,n,i;return this.removeAllListeners(),this.saxParser=h.parser(this.options.strict,{trim:!1,normalize:!1,xmlns:this.options.xmlns}),this.saxParser.errThrown=!1,this.saxParser.onerror=(i=this,function(t){if(i.saxParser.resume(),!i.saxParser.errThrown)return i.saxParser.errThrown=!0,i.emit("error",t)}),this.saxParser.onend=function(t){return function(){if(!t.saxParser.ended)return t.saxParser.ended=!0,t.emit("end",t.resultObject)}}(this),this.saxParser.ended=!1,this.EXPLICIT_CHARKEY=this.options.explicitCharkey,this.resultObject=null,n=[],t=this.options.attrkey,e=this.options.charkey,this.saxParser.onopentag=function(r){return function(i){var o,a,h,u,c;if((h={})[e]="",!r.options.ignoreAttrs)for(o in c=i.attributes)l.call(c,o)&&(t in h||r.options.mergeAttrs||(h[t]={}),a=r.options.attrValueProcessors?s(r.options.attrValueProcessors,i.attributes[o],o):i.attributes[o],u=r.options.attrNameProcessors?s(r.options.attrNameProcessors,o):o,r.options.mergeAttrs?r.assignOrPush(h,u,a):h[t][u]=a);return h["#name"]=r.options.tagNameProcessors?s(r.options.tagNameProcessors,i.name):i.name,r.options.xmlns&&(h[r.options.xmlnskey]={uri:i.uri,local:i.local}),n.push(h)}}(this),this.saxParser.onclosetag=function(t){return function(){var r,i,a,h,u,c,f,p,d,y;if(c=n.pop(),u=c["#name"],t.options.explicitChildren&&t.options.preserveChildrenOrder||delete c["#name"],!0===c.cdata&&(r=c.cdata,delete c.cdata),d=n[n.length-1],c[e].match(/^\s*$/)&&!r?(i=c[e],delete c[e]):(t.options.trim&&(c[e]=c[e].trim()),t.options.normalize&&(c[e]=c[e].replace(/\s{2,}/g," ").trim()),c[e]=t.options.valueProcessors?s(t.options.valueProcessors,c[e],u):c[e],1===Object.keys(c).length&&e in c&&!t.EXPLICIT_CHARKEY&&(c=c[e])),o(c)&&(c=""!==t.options.emptyTag?t.options.emptyTag:i),null!=t.options.validator&&(y="/"+function(){var t,e,r;for(r=[],t=0,e=n.length;t<e;t++)h=n[t],r.push(h["#name"]);return r}().concat(u).join("/"),function(){var e;try{c=t.options.validator(y,d&&d[u],c)}catch(r){return e=r,t.emit("error",e)}}()),t.options.explicitChildren&&!t.options.mergeAttrs&&"object"==typeof c)if(t.options.preserveChildrenOrder){if(d){for(a in d[t.options.childkey]=d[t.options.childkey]||[],f={},c)l.call(c,a)&&(f[a]=c[a]);d[t.options.childkey].push(f),delete c["#name"],1===Object.keys(c).length&&e in c&&!t.EXPLICIT_CHARKEY&&(c=c[e])}}else h={},t.options.attrkey in c&&(h[t.options.attrkey]=c[t.options.attrkey],delete c[t.options.attrkey]),!t.options.charsAsChildren&&t.options.charkey in c&&(h[t.options.charkey]=c[t.options.charkey],delete c[t.options.charkey]),Object.getOwnPropertyNames(c).length>0&&(h[t.options.childkey]=c),c=h;return n.length>0?t.assignOrPush(d,u,c):(t.options.explicitRoot&&(p=c,(c={})[u]=p),t.resultObject=c,t.saxParser.ended=!0,t.emit("end",t.resultObject))}}(this),r=function(t){return function(r){var i,o;if(o=n[n.length-1])return o[e]+=r,t.options.explicitChildren&&t.options.preserveChildrenOrder&&t.options.charsAsChildren&&(t.options.includeWhiteChars||""!==r.replace(/\\n/g,"").trim())&&(o[t.options.childkey]=o[t.options.childkey]||[],(i={"#name":"__text__"})[e]=r,t.options.normalize&&(i[e]=i[e].replace(/\s{2,}/g," ").trim()),o[t.options.childkey].push(i)),o}}(this),this.saxParser.ontext=r,this.saxParser.oncdata=function(t){var e;if(e=r(t))return e.cdata=!0}},i.prototype.parseString=function(e,r){var n;null!=r&&"function"==typeof r&&(this.on("end",(function(t){return this.reset(),r(null,t)})),this.on("error",(function(t){return this.reset(),r(t)})));try{return""===(e=e.toString()).trim()?(this.emit("end",null),!0):(e=t.stripBOM(e),this.options.async?(this.remaining=e,u(this.processAsync),this.saxParser):this.saxParser.write(e).close())}catch(t){if(n=t,!this.saxParser.errThrown&&!this.saxParser.ended)return this.emit("error",n),this.saxParser.errThrown=!0;if(this.saxParser.ended)throw n}},i.prototype.parseStringPromise=function(t){return new Promise((e=this,function(r,n){return e.parseString(t,(function(t,e){return t?n(t):r(e)}))}));var e},i}(i),e.parseString=function(t,r,n){var i,o;return null!=n?("function"==typeof n&&(i=n),"object"==typeof r&&(o=r)):("function"==typeof r&&(i=r),o={}),new e.Parser(o).parseString(t,i)},e.parseStringPromise=function(t,r){var n;return"object"==typeof r&&(n=r),new e.Parser(n).parseStringPromise(t)}}).call(this)},4774:function(t,e){(function(){"use strict";var t;t=new RegExp(/(?!xmlns)^.*:/),e.normalize=function(t){return t.toLowerCase()},e.firstCharLowerCase=function(t){return t.charAt(0).toLowerCase()+t.slice(1)},e.stripPrefix=function(e){return e.replace(t,"")},e.parseNumbers=function(t){return isNaN(t)||(t=t%1==0?parseInt(t,10):parseFloat(t)),t},e.parseBooleans=function(t){return/^(?:true|false)$/i.test(t)&&(t="true"===t.toLowerCase()),t}}).call(this)},7913:function(t,e,r){(function(){"use strict";var t,n,i,o,s={}.hasOwnProperty;n=r(1574),t=r(8888),i=r(9767),o=r(4774),e.defaults=n.defaults,e.processors=o,e.ValidationError=function(t){function e(t){this.message=t}return function(t,e){for(var r in e)s.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(e,Error),e}(),e.Builder=t.Builder,e.Parser=i.Parser,e.parseString=i.parseString,e.parseStringPromise=i.parseStringPromise}).call(this)},7143:function(t){(function(){t.exports={Disconnected:1,Preceding:2,Following:4,Contains:8,ContainedBy:16,ImplementationSpecific:32}}).call(this)},5165:function(t){(function(){t.exports={Element:1,Attribute:2,Text:3,CData:4,EntityReference:5,EntityDeclaration:6,ProcessingInstruction:7,Comment:8,Document:9,DocType:10,DocumentFragment:11,NotationDeclaration:12,Declaration:201,Raw:202,AttributeDeclaration:203,ElementDeclaration:204,Dummy:205}}).call(this)},2045:function(t){(function(){var e,r,n,i,o,s,a,h=[].slice,u={}.hasOwnProperty;e=function(){var t,e,r,n,i,s;if(s=arguments[0],i=2<=arguments.length?h.call(arguments,1):[],o(Object.assign))Object.assign.apply(null,arguments);else for(t=0,r=i.length;t<r;t++)if(null!=(n=i[t]))for(e in n)u.call(n,e)&&(s[e]=n[e]);return s},o=function(t){return!!t&&"[object Function]"===Object.prototype.toString.call(t)},s=function(t){var e;return!!t&&("function"==(e=typeof t)||"object"===e)},n=function(t){return o(Array.isArray)?Array.isArray(t):"[object Array]"===Object.prototype.toString.call(t)},i=function(t){var e;if(n(t))return!t.length;for(e in t)if(u.call(t,e))return!1;return!0},a=function(t){var e,r;return s(t)&&(r=Object.getPrototypeOf(t))&&(e=r.constructor)&&"function"==typeof e&&e instanceof e&&Function.prototype.toString.call(e)===Function.prototype.toString.call(Object)},r=function(t){return o(t.valueOf)?t.valueOf():t},t.exports.assign=e,t.exports.isFunction=o,t.exports.isObject=s,t.exports.isArray=n,t.exports.isEmpty=i,t.exports.isPlainObject=a,t.exports.getValue=r}).call(this)},8203:function(t){(function(){t.exports={None:0,OpenTag:1,InsideTag:2,CloseTag:3}}).call(this)},4703:function(t,e,r){(function(){var e;e=r(5165),r(6055),t.exports=function(){function t(t,r,n){if(this.parent=t,this.parent&&(this.options=this.parent.options,this.stringify=this.parent.stringify),null==r)throw new Error("Missing attribute name. "+this.debugInfo(r));this.name=this.stringify.name(r),this.value=this.stringify.attValue(n),this.type=e.Attribute,this.isId=!1,this.schemaTypeInfo=null}return Object.defineProperty(t.prototype,"nodeType",{get:function(){return this.type}}),Object.defineProperty(t.prototype,"ownerElement",{get:function(){return this.parent}}),Object.defineProperty(t.prototype,"textContent",{get:function(){return this.value},set:function(t){return this.value=t||""}}),Object.defineProperty(t.prototype,"namespaceURI",{get:function(){return""}}),Object.defineProperty(t.prototype,"prefix",{get:function(){return""}}),Object.defineProperty(t.prototype,"localName",{get:function(){return this.name}}),Object.defineProperty(t.prototype,"specified",{get:function(){return!0}}),t.prototype.clone=function(){return Object.create(this)},t.prototype.toString=function(t){return this.options.writer.attribute(this,this.options.writer.filterOptions(t))},t.prototype.debugInfo=function(t){return null==(t=t||this.name)?"parent: <"+this.parent.name+">":"attribute: {"+t+"}, parent: <"+this.parent.name+">"},t.prototype.isEqualNode=function(t){return t.namespaceURI===this.namespaceURI&&t.prefix===this.prefix&&t.localName===this.localName&&t.value===this.value},t}()}).call(this)},669:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(5165),n=r(4791),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing CDATA text. "+this.debugInfo());this.name="#cdata-section",this.type=e.CData,this.value=this.stringify.cdata(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.cdata(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},4791:function(t,e,r){(function(){var e,n={}.hasOwnProperty;e=r(6055),t.exports=function(t){function e(t){e.__super__.constructor.call(this,t),this.value=""}return function(t,e){for(var r in e)n.call(e,r)&&(t[r]=e[r]);function i(){this.constructor=t}i.prototype=e.prototype,t.prototype=new i,t.__super__=e.prototype}(e,t),Object.defineProperty(e.prototype,"data",{get:function(){return this.value},set:function(t){return this.value=t||""}}),Object.defineProperty(e.prototype,"length",{get:function(){return this.value.length}}),Object.defineProperty(e.prototype,"textContent",{get:function(){return this.value},set:function(t){return this.value=t||""}}),e.prototype.clone=function(){return Object.create(this)},e.prototype.substringData=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.appendData=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.insertData=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.deleteData=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.replaceData=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.isEqualNode=function(t){return!!e.__super__.isEqualNode.apply(this,arguments).isEqualNode(t)&&t.data===this.data},e}(e)}).call(this)},445:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(5165),n=r(4791),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing comment text. "+this.debugInfo());this.name="#comment",this.type=e.Comment,this.value=this.stringify.comment(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.comment(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},8824:function(t,e,r){(function(){var e,n;e=r(1826),n=r(2265),t.exports=function(){function t(){this.defaultParams={"canonical-form":!1,"cdata-sections":!1,comments:!1,"datatype-normalization":!1,"element-content-whitespace":!0,entities:!0,"error-handler":new e,infoset:!0,"validate-if-schema":!1,namespaces:!0,"namespace-declarations":!0,"normalize-characters":!1,"schema-location":"","schema-type":"","split-cdata-sections":!0,validate:!1,"well-formed":!0},this.params=Object.create(this.defaultParams)}return Object.defineProperty(t.prototype,"parameterNames",{get:function(){return new n(Object.keys(this.defaultParams))}}),t.prototype.getParameter=function(t){return this.params.hasOwnProperty(t)?this.params[t]:null},t.prototype.canSetParameter=function(t,e){return!0},t.prototype.setParameter=function(t,e){return null!=e?this.params[t]=e:delete this.params[t]},t}()}).call(this)},1826:function(t){(function(){t.exports=function(){function t(){}return t.prototype.handleError=function(t){throw new Error(t)},t}()}).call(this)},344:function(t){(function(){t.exports=function(){function t(){}return t.prototype.hasFeature=function(t,e){return!0},t.prototype.createDocumentType=function(t,e,r){throw new Error("This DOM method is not implemented.")},t.prototype.createDocument=function(t,e,r){throw new Error("This DOM method is not implemented.")},t.prototype.createHTMLDocument=function(t){throw new Error("This DOM method is not implemented.")},t.prototype.getFeature=function(t,e){throw new Error("This DOM method is not implemented.")},t}()}).call(this)},2265:function(t){(function(){t.exports=function(){function t(t){this.arr=t||[]}return Object.defineProperty(t.prototype,"length",{get:function(){return this.arr.length}}),t.prototype.item=function(t){return this.arr[t]||null},t.prototype.contains=function(t){return-1!==this.arr.indexOf(t)},t}()}).call(this)},76:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(6055),e=r(5165),t.exports=function(t){function r(t,n,i,o,s,a){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing DTD element name. "+this.debugInfo());if(null==i)throw new Error("Missing DTD attribute name. "+this.debugInfo(n));if(!o)throw new Error("Missing DTD attribute type. "+this.debugInfo(n));if(!s)throw new Error("Missing DTD attribute default. "+this.debugInfo(n));if(0!==s.indexOf("#")&&(s="#"+s),!s.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/))throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. "+this.debugInfo(n));if(a&&!s.match(/^(#FIXED|#DEFAULT)$/))throw new Error("Default value only applies to #FIXED or #DEFAULT. "+this.debugInfo(n));this.elementName=this.stringify.name(n),this.type=e.AttributeDeclaration,this.attributeName=this.stringify.name(i),this.attributeType=this.stringify.dtdAttType(o),a&&(this.defaultValue=this.stringify.dtdAttDefault(a)),this.defaultValueType=s}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.toString=function(t){return this.options.writer.dtdAttList(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},9838:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(6055),e=r(5165),t.exports=function(t){function r(t,n,i){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing DTD element name. "+this.debugInfo());i||(i="(#PCDATA)"),Array.isArray(i)&&(i="("+i.join(",")+")"),this.name=this.stringify.name(n),this.type=e.ElementDeclaration,this.value=this.stringify.dtdElementValue(i)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.toString=function(t){return this.options.writer.dtdElement(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},9134:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;i=r(2045).isObject,n=r(6055),e=r(5165),t.exports=function(t){function r(t,n,o,s){if(r.__super__.constructor.call(this,t),null==o)throw new Error("Missing DTD entity name. "+this.debugInfo(o));if(null==s)throw new Error("Missing DTD entity value. "+this.debugInfo(o));if(this.pe=!!n,this.name=this.stringify.name(o),this.type=e.EntityDeclaration,i(s)){if(!s.pubID&&!s.sysID)throw new Error("Public and/or system identifiers are required for an external entity. "+this.debugInfo(o));if(s.pubID&&!s.sysID)throw new Error("System identifier is required for a public external entity. "+this.debugInfo(o));if(this.internal=!1,null!=s.pubID&&(this.pubID=this.stringify.dtdPubID(s.pubID)),null!=s.sysID&&(this.sysID=this.stringify.dtdSysID(s.sysID)),null!=s.nData&&(this.nData=this.stringify.dtdNData(s.nData)),this.pe&&this.nData)throw new Error("Notation declaration is not allowed in a parameter entity. "+this.debugInfo(o))}else this.value=this.stringify.dtdEntityValue(s),this.internal=!0}return function(t,e){for(var r in e)o.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(r.prototype,"systemId",{get:function(){return this.sysID}}),Object.defineProperty(r.prototype,"notationName",{get:function(){return this.nData||null}}),Object.defineProperty(r.prototype,"inputEncoding",{get:function(){return null}}),Object.defineProperty(r.prototype,"xmlEncoding",{get:function(){return null}}),Object.defineProperty(r.prototype,"xmlVersion",{get:function(){return null}}),r.prototype.toString=function(t){return this.options.writer.dtdEntity(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},8389:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(6055),e=r(5165),t.exports=function(t){function r(t,n,i){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing DTD notation name. "+this.debugInfo(n));if(!i.pubID&&!i.sysID)throw new Error("Public or system identifiers are required for an external entity. "+this.debugInfo(n));this.name=this.stringify.name(n),this.type=e.NotationDeclaration,null!=i.pubID&&(this.pubID=this.stringify.dtdPubID(i.pubID)),null!=i.sysID&&(this.sysID=this.stringify.dtdSysID(i.sysID))}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(r.prototype,"systemId",{get:function(){return this.sysID}}),r.prototype.toString=function(t){return this.options.writer.dtdNotation(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},352:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;i=r(2045).isObject,n=r(6055),e=r(5165),t.exports=function(t){function r(t,n,o,s){var a;r.__super__.constructor.call(this,t),i(n)&&(n=(a=n).version,o=a.encoding,s=a.standalone),n||(n="1.0"),this.type=e.Declaration,this.version=this.stringify.xmlVersion(n),null!=o&&(this.encoding=this.stringify.xmlEncoding(o)),null!=s&&(this.standalone=this.stringify.xmlStandalone(s))}return function(t,e){for(var r in e)o.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.toString=function(t){return this.options.writer.declaration(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},9762:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c={}.hasOwnProperty;u=r(2045).isObject,h=r(6055),e=r(5165),n=r(76),o=r(9134),i=r(9838),s=r(8389),a=r(2097),t.exports=function(t){function r(t,n,i){var o,s,a,h,c,l;if(r.__super__.constructor.call(this,t),this.type=e.DocType,t.children)for(s=0,a=(h=t.children).length;s<a;s++)if((o=h[s]).type===e.Element){this.name=o.name;break}this.documentObject=t,u(n)&&(n=(c=n).pubID,i=c.sysID),null==i&&(i=(l=[n,i])[0],n=l[1]),null!=n&&(this.pubID=this.stringify.dtdPubID(n)),null!=i&&(this.sysID=this.stringify.dtdSysID(i))}return function(t,e){for(var r in e)c.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"entities",{get:function(){var t,r,n,i,o;for(i={},r=0,n=(o=this.children).length;r<n;r++)(t=o[r]).type!==e.EntityDeclaration||t.pe||(i[t.name]=t);return new a(i)}}),Object.defineProperty(r.prototype,"notations",{get:function(){var t,r,n,i,o;for(i={},r=0,n=(o=this.children).length;r<n;r++)(t=o[r]).type===e.NotationDeclaration&&(i[t.name]=t);return new a(i)}}),Object.defineProperty(r.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(r.prototype,"systemId",{get:function(){return this.sysID}}),Object.defineProperty(r.prototype,"internalSubset",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),r.prototype.element=function(t,e){var r;return r=new i(this,t,e),this.children.push(r),this},r.prototype.attList=function(t,e,r,i,o){var s;return s=new n(this,t,e,r,i,o),this.children.push(s),this},r.prototype.entity=function(t,e){var r;return r=new o(this,!1,t,e),this.children.push(r),this},r.prototype.pEntity=function(t,e){var r;return r=new o(this,!0,t,e),this.children.push(r),this},r.prototype.notation=function(t,e){var r;return r=new s(this,t,e),this.children.push(r),this},r.prototype.toString=function(t){return this.options.writer.docType(this,this.options.writer.filterOptions(t))},r.prototype.ele=function(t,e){return this.element(t,e)},r.prototype.att=function(t,e,r,n,i){return this.attList(t,e,r,n,i)},r.prototype.ent=function(t,e){return this.entity(t,e)},r.prototype.pent=function(t,e){return this.pEntity(t,e)},r.prototype.not=function(t,e){return this.notation(t,e)},r.prototype.up=function(){return this.root()||this.documentObject},r.prototype.isEqualNode=function(t){return!!r.__super__.isEqualNode.apply(this,arguments).isEqualNode(t)&&t.name===this.name&&t.publicId===this.publicId&&t.systemId===this.systemId},r}(h)}).call(this)},1626:function(t,e,r){(function(){var e,n,i,o,s,a,h,u={}.hasOwnProperty;h=r(2045).isPlainObject,i=r(344),n=r(8824),o=r(6055),e=r(5165),a=r(9910),s=r(8766),t.exports=function(t){function r(t){r.__super__.constructor.call(this,null),this.name="#document",this.type=e.Document,this.documentURI=null,this.domConfig=new n,t||(t={}),t.writer||(t.writer=new s),this.options=t,this.stringify=new a(t)}return function(t,e){for(var r in e)u.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"implementation",{value:new i}),Object.defineProperty(r.prototype,"doctype",{get:function(){var t,r,n,i;for(r=0,n=(i=this.children).length;r<n;r++)if((t=i[r]).type===e.DocType)return t;return null}}),Object.defineProperty(r.prototype,"documentElement",{get:function(){return this.rootObject||null}}),Object.defineProperty(r.prototype,"inputEncoding",{get:function(){return null}}),Object.defineProperty(r.prototype,"strictErrorChecking",{get:function(){return!1}}),Object.defineProperty(r.prototype,"xmlEncoding",{get:function(){return 0!==this.children.length&&this.children[0].type===e.Declaration?this.children[0].encoding:null}}),Object.defineProperty(r.prototype,"xmlStandalone",{get:function(){return 0!==this.children.length&&this.children[0].type===e.Declaration&&"yes"===this.children[0].standalone}}),Object.defineProperty(r.prototype,"xmlVersion",{get:function(){return 0!==this.children.length&&this.children[0].type===e.Declaration?this.children[0].version:"1.0"}}),Object.defineProperty(r.prototype,"URL",{get:function(){return this.documentURI}}),Object.defineProperty(r.prototype,"origin",{get:function(){return null}}),Object.defineProperty(r.prototype,"compatMode",{get:function(){return null}}),Object.defineProperty(r.prototype,"characterSet",{get:function(){return null}}),Object.defineProperty(r.prototype,"contentType",{get:function(){return null}}),r.prototype.end=function(t){var e;return e={},t?h(t)&&(e=t,t=this.options.writer):t=this.options.writer,t.document(this,t.filterOptions(e))},r.prototype.toString=function(t){return this.options.writer.document(this,this.options.writer.filterOptions(t))},r.prototype.createElement=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createDocumentFragment=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createTextNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createComment=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createCDATASection=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createProcessingInstruction=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createAttribute=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createEntityReference=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.importNode=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createElementNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagNameNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementById=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.adoptNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.normalizeDocument=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.renameNode=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByClassName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createEvent=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createRange=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createNodeIterator=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createTreeWalker=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r}(o)}).call(this)},7535:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c,l,f,p,d,y,g,m,v,w,b,M,_,x,E,S={}.hasOwnProperty;E=r(2045),_=E.isObject,M=E.isFunction,x=E.isPlainObject,b=E.getValue,e=r(5165),p=r(1626),d=r(7341),o=r(669),s=r(445),g=r(2061),w=r(1419),y=r(1757),l=r(352),f=r(9762),a=r(76),u=r(9134),h=r(9838),c=r(8389),i=r(4703),v=r(9910),m=r(8766),n=r(8203),t.exports=function(){function t(t,r,n){var i;this.name="?xml",this.type=e.Document,t||(t={}),i={},t.writer?x(t.writer)&&(i=t.writer,t.writer=new m):t.writer=new m,this.options=t,this.writer=t.writer,this.writerOptions=this.writer.filterOptions(i),this.stringify=new v(t),this.onDataCallback=r||function(){},this.onEndCallback=n||function(){},this.currentNode=null,this.currentLevel=-1,this.openTags={},this.documentStarted=!1,this.documentCompleted=!1,this.root=null}return t.prototype.createChildNode=function(t){var r,n,i,o,s,a,h,u;switch(t.type){case e.CData:this.cdata(t.value);break;case e.Comment:this.comment(t.value);break;case e.Element:for(n in i={},h=t.attribs)S.call(h,n)&&(r=h[n],i[n]=r.value);this.node(t.name,i);break;case e.Dummy:this.dummy();break;case e.Raw:this.raw(t.value);break;case e.Text:this.text(t.value);break;case e.ProcessingInstruction:this.instruction(t.target,t.value);break;default:throw new Error("This XML node type is not supported in a JS object: "+t.constructor.name)}for(s=0,a=(u=t.children).length;s<a;s++)o=u[s],this.createChildNode(o),o.type===e.Element&&this.up();return this},t.prototype.dummy=function(){return this},t.prototype.node=function(t,e,r){var n;if(null==t)throw new Error("Missing node name.");if(this.root&&-1===this.currentLevel)throw new Error("Document can only have one root node. "+this.debugInfo(t));return this.openCurrent(),t=b(t),null==e&&(e={}),e=b(e),_(e)||(r=(n=[e,r])[0],e=n[1]),this.currentNode=new d(this,t,e),this.currentNode.children=!1,this.currentLevel++,this.openTags[this.currentLevel]=this.currentNode,null!=r&&this.text(r),this},t.prototype.element=function(t,r,n){var i,o,s,a,h,u;if(this.currentNode&&this.currentNode.type===e.DocType)this.dtdElement.apply(this,arguments);else if(Array.isArray(t)||_(t)||M(t))for(a=this.options.noValidation,this.options.noValidation=!0,(u=new p(this.options).element("TEMP_ROOT")).element(t),this.options.noValidation=a,o=0,s=(h=u.children).length;o<s;o++)i=h[o],this.createChildNode(i),i.type===e.Element&&this.up();else this.node(t,r,n);return this},t.prototype.attribute=function(t,e){var r,n;if(!this.currentNode||this.currentNode.children)throw new Error("att() can only be used immediately after an ele() call in callback mode. "+this.debugInfo(t));if(null!=t&&(t=b(t)),_(t))for(r in t)S.call(t,r)&&(n=t[r],this.attribute(r,n));else M(e)&&(e=e.apply()),this.options.keepNullAttributes&&null==e?this.currentNode.attribs[t]=new i(this,t,""):null!=e&&(this.currentNode.attribs[t]=new i(this,t,e));return this},t.prototype.text=function(t){var e;return this.openCurrent(),e=new w(this,t),this.onData(this.writer.text(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.cdata=function(t){var e;return this.openCurrent(),e=new o(this,t),this.onData(this.writer.cdata(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.comment=function(t){var e;return this.openCurrent(),e=new s(this,t),this.onData(this.writer.comment(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.raw=function(t){var e;return this.openCurrent(),e=new g(this,t),this.onData(this.writer.raw(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.instruction=function(t,e){var r,n,i,o,s;if(this.openCurrent(),null!=t&&(t=b(t)),null!=e&&(e=b(e)),Array.isArray(t))for(r=0,o=t.length;r<o;r++)n=t[r],this.instruction(n);else if(_(t))for(n in t)S.call(t,n)&&(i=t[n],this.instruction(n,i));else M(e)&&(e=e.apply()),s=new y(this,t,e),this.onData(this.writer.processingInstruction(s,this.writerOptions,this.currentLevel+1),this.currentLevel+1);return this},t.prototype.declaration=function(t,e,r){var n;if(this.openCurrent(),this.documentStarted)throw new Error("declaration() must be the first node.");return n=new l(this,t,e,r),this.onData(this.writer.declaration(n,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.doctype=function(t,e,r){if(this.openCurrent(),null==t)throw new Error("Missing root node name.");if(this.root)throw new Error("dtd() must come before the root node.");return this.currentNode=new f(this,e,r),this.currentNode.rootNodeName=t,this.currentNode.children=!1,this.currentLevel++,this.openTags[this.currentLevel]=this.currentNode,this},t.prototype.dtdElement=function(t,e){var r;return this.openCurrent(),r=new h(this,t,e),this.onData(this.writer.dtdElement(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.attList=function(t,e,r,n,i){var o;return this.openCurrent(),o=new a(this,t,e,r,n,i),this.onData(this.writer.dtdAttList(o,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.entity=function(t,e){var r;return this.openCurrent(),r=new u(this,!1,t,e),this.onData(this.writer.dtdEntity(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.pEntity=function(t,e){var r;return this.openCurrent(),r=new u(this,!0,t,e),this.onData(this.writer.dtdEntity(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.notation=function(t,e){var r;return this.openCurrent(),r=new c(this,t,e),this.onData(this.writer.dtdNotation(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.up=function(){if(this.currentLevel<0)throw new Error("The document node has no parent.");return this.currentNode?(this.currentNode.children?this.closeNode(this.currentNode):this.openNode(this.currentNode),this.currentNode=null):this.closeNode(this.openTags[this.currentLevel]),delete this.openTags[this.currentLevel],this.currentLevel--,this},t.prototype.end=function(){for(;this.currentLevel>=0;)this.up();return this.onEnd()},t.prototype.openCurrent=function(){if(this.currentNode)return this.currentNode.children=!0,this.openNode(this.currentNode)},t.prototype.openNode=function(t){var r,i,o,s;if(!t.isOpen){if(this.root||0!==this.currentLevel||t.type!==e.Element||(this.root=t),i="",t.type===e.Element){for(o in this.writerOptions.state=n.OpenTag,i=this.writer.indent(t,this.writerOptions,this.currentLevel)+"<"+t.name,s=t.attribs)S.call(s,o)&&(r=s[o],i+=this.writer.attribute(r,this.writerOptions,this.currentLevel));i+=(t.children?">":"/>")+this.writer.endline(t,this.writerOptions,this.currentLevel),this.writerOptions.state=n.InsideTag}else this.writerOptions.state=n.OpenTag,i=this.writer.indent(t,this.writerOptions,this.currentLevel)+"<!DOCTYPE "+t.rootNodeName,t.pubID&&t.sysID?i+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.sysID&&(i+=' SYSTEM "'+t.sysID+'"'),t.children?(i+=" [",this.writerOptions.state=n.InsideTag):(this.writerOptions.state=n.CloseTag,i+=">"),i+=this.writer.endline(t,this.writerOptions,this.currentLevel);return this.onData(i,this.currentLevel),t.isOpen=!0}},t.prototype.closeNode=function(t){var r;if(!t.isClosed)return"",this.writerOptions.state=n.CloseTag,r=t.type===e.Element?this.writer.indent(t,this.writerOptions,this.currentLevel)+"</"+t.name+">"+this.writer.endline(t,this.writerOptions,this.currentLevel):this.writer.indent(t,this.writerOptions,this.currentLevel)+"]>"+this.writer.endline(t,this.writerOptions,this.currentLevel),this.writerOptions.state=n.None,this.onData(r,this.currentLevel),t.isClosed=!0},t.prototype.onData=function(t,e){return this.documentStarted=!0,this.onDataCallback(t,e+1)},t.prototype.onEnd=function(){return this.documentCompleted=!0,this.onEndCallback()},t.prototype.debugInfo=function(t){return null==t?"":"node: <"+t+">"},t.prototype.ele=function(){return this.element.apply(this,arguments)},t.prototype.nod=function(t,e,r){return this.node(t,e,r)},t.prototype.txt=function(t){return this.text(t)},t.prototype.dat=function(t){return this.cdata(t)},t.prototype.com=function(t){return this.comment(t)},t.prototype.ins=function(t,e){return this.instruction(t,e)},t.prototype.dec=function(t,e,r){return this.declaration(t,e,r)},t.prototype.dtd=function(t,e,r){return this.doctype(t,e,r)},t.prototype.e=function(t,e,r){return this.element(t,e,r)},t.prototype.n=function(t,e,r){return this.node(t,e,r)},t.prototype.t=function(t){return this.text(t)},t.prototype.d=function(t){return this.cdata(t)},t.prototype.c=function(t){return this.comment(t)},t.prototype.r=function(t){return this.raw(t)},t.prototype.i=function(t,e){return this.instruction(t,e)},t.prototype.att=function(){return this.currentNode&&this.currentNode.type===e.DocType?this.attList.apply(this,arguments):this.attribute.apply(this,arguments)},t.prototype.a=function(){return this.currentNode&&this.currentNode.type===e.DocType?this.attList.apply(this,arguments):this.attribute.apply(this,arguments)},t.prototype.ent=function(t,e){return this.entity(t,e)},t.prototype.pent=function(t,e){return this.pEntity(t,e)},t.prototype.not=function(t,e){return this.notation(t,e)},t}()}).call(this)},3728:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(6055),e=r(5165),t.exports=function(t){function r(t){r.__super__.constructor.call(this,t),this.type=e.Dummy}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return""},r}(n)}).call(this)},7341:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c={}.hasOwnProperty;u=r(2045),h=u.isObject,a=u.isFunction,s=u.getValue,o=r(6055),e=r(5165),n=r(4703),i=r(2097),t.exports=function(t){function r(t,n,i){var o,s,a,h;if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing element name. "+this.debugInfo());if(this.name=this.stringify.name(n),this.type=e.Element,this.attribs={},this.schemaTypeInfo=null,null!=i&&this.attribute(i),t.type===e.Document&&(this.isRoot=!0,this.documentObject=t,t.rootObject=this,t.children))for(s=0,a=(h=t.children).length;s<a;s++)if((o=h[s]).type===e.DocType){o.name=this.name;break}}return function(t,e){for(var r in e)c.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"tagName",{get:function(){return this.name}}),Object.defineProperty(r.prototype,"namespaceURI",{get:function(){return""}}),Object.defineProperty(r.prototype,"prefix",{get:function(){return""}}),Object.defineProperty(r.prototype,"localName",{get:function(){return this.name}}),Object.defineProperty(r.prototype,"id",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"className",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"classList",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"attributes",{get:function(){return this.attributeMap&&this.attributeMap.nodes||(this.attributeMap=new i(this.attribs)),this.attributeMap}}),r.prototype.clone=function(){var t,e,r,n;for(e in(r=Object.create(this)).isRoot&&(r.documentObject=null),r.attribs={},n=this.attribs)c.call(n,e)&&(t=n[e],r.attribs[e]=t.clone());return r.children=[],this.children.forEach((function(t){var e;return(e=t.clone()).parent=r,r.children.push(e)})),r},r.prototype.attribute=function(t,e){var r,i;if(null!=t&&(t=s(t)),h(t))for(r in t)c.call(t,r)&&(i=t[r],this.attribute(r,i));else a(e)&&(e=e.apply()),this.options.keepNullAttributes&&null==e?this.attribs[t]=new n(this,t,""):null!=e&&(this.attribs[t]=new n(this,t,e));return this},r.prototype.removeAttribute=function(t){var e,r,n;if(null==t)throw new Error("Missing attribute name. "+this.debugInfo());if(t=s(t),Array.isArray(t))for(r=0,n=t.length;r<n;r++)e=t[r],delete this.attribs[e];else delete this.attribs[t];return this},r.prototype.toString=function(t){return this.options.writer.element(this,this.options.writer.filterOptions(t))},r.prototype.att=function(t,e){return this.attribute(t,e)},r.prototype.a=function(t,e){return this.attribute(t,e)},r.prototype.getAttribute=function(t){return this.attribs.hasOwnProperty(t)?this.attribs[t].value:null},r.prototype.setAttribute=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getAttributeNode=function(t){return this.attribs.hasOwnProperty(t)?this.attribs[t]:null},r.prototype.setAttributeNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.removeAttributeNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setAttributeNS=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.removeAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getAttributeNodeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setAttributeNodeNS=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagNameNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.hasAttribute=function(t){return this.attribs.hasOwnProperty(t)},r.prototype.hasAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setIdAttribute=function(t,e){return this.attribs.hasOwnProperty(t)?this.attribs[t].isId:e},r.prototype.setIdAttributeNS=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setIdAttributeNode=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagNameNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByClassName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.isEqualNode=function(t){var e,n,i;if(!r.__super__.isEqualNode.apply(this,arguments).isEqualNode(t))return!1;if(t.namespaceURI!==this.namespaceURI)return!1;if(t.prefix!==this.prefix)return!1;if(t.localName!==this.localName)return!1;if(t.attribs.length!==this.attribs.length)return!1;for(e=n=0,i=this.attribs.length-1;0<=i?n<=i:n>=i;e=0<=i?++n:--n)if(!this.attribs[e].isEqualNode(t.attribs[e]))return!1;return!0},r}(o)}).call(this)},2097:function(t){(function(){t.exports=function(){function t(t){this.nodes=t}return Object.defineProperty(t.prototype,"length",{get:function(){return Object.keys(this.nodes).length||0}}),t.prototype.clone=function(){return this.nodes=null},t.prototype.getNamedItem=function(t){return this.nodes[t]},t.prototype.setNamedItem=function(t){var e;return e=this.nodes[t.nodeName],this.nodes[t.nodeName]=t,e||null},t.prototype.removeNamedItem=function(t){var e;return e=this.nodes[t],delete this.nodes[t],e||null},t.prototype.item=function(t){return this.nodes[Object.keys(this.nodes)[t]]||null},t.prototype.getNamedItemNS=function(t,e){throw new Error("This DOM method is not implemented.")},t.prototype.setNamedItemNS=function(t){throw new Error("This DOM method is not implemented.")},t.prototype.removeNamedItemNS=function(t,e){throw new Error("This DOM method is not implemented.")},t}()}).call(this)},6055:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c,l,f,p,d,y,g,m,v,w={}.hasOwnProperty;v=r(2045),m=v.isObject,g=v.isFunction,y=v.isEmpty,d=v.getValue,u=null,i=null,o=null,s=null,a=null,f=null,p=null,l=null,h=null,n=null,c=null,e=null,t.exports=function(){function t(t){this.parent=t,this.parent&&(this.options=this.parent.options,this.stringify=this.parent.stringify),this.value=null,this.children=[],this.baseURI=null,u||(u=r(7341),i=r(669),o=r(445),s=r(352),a=r(9762),f=r(2061),p=r(1419),l=r(1757),h=r(3728),n=r(5165),c=r(9059),r(2097),e=r(7143))}return Object.defineProperty(t.prototype,"nodeName",{get:function(){return this.name}}),Object.defineProperty(t.prototype,"nodeType",{get:function(){return this.type}}),Object.defineProperty(t.prototype,"nodeValue",{get:function(){return this.value}}),Object.defineProperty(t.prototype,"parentNode",{get:function(){return this.parent}}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.childNodeList&&this.childNodeList.nodes||(this.childNodeList=new c(this.children)),this.childNodeList}}),Object.defineProperty(t.prototype,"firstChild",{get:function(){return this.children[0]||null}}),Object.defineProperty(t.prototype,"lastChild",{get:function(){return this.children[this.children.length-1]||null}}),Object.defineProperty(t.prototype,"previousSibling",{get:function(){var t;return t=this.parent.children.indexOf(this),this.parent.children[t-1]||null}}),Object.defineProperty(t.prototype,"nextSibling",{get:function(){var t;return t=this.parent.children.indexOf(this),this.parent.children[t+1]||null}}),Object.defineProperty(t.prototype,"ownerDocument",{get:function(){return this.document()||null}}),Object.defineProperty(t.prototype,"textContent",{get:function(){var t,e,r,i,o;if(this.nodeType===n.Element||this.nodeType===n.DocumentFragment){for(o="",e=0,r=(i=this.children).length;e<r;e++)(t=i[e]).textContent&&(o+=t.textContent);return o}return null},set:function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),t.prototype.setParent=function(t){var e,r,n,i,o;for(this.parent=t,t&&(this.options=t.options,this.stringify=t.stringify),o=[],r=0,n=(i=this.children).length;r<n;r++)e=i[r],o.push(e.setParent(this));return o},t.prototype.element=function(t,e,r){var n,i,o,s,a,h,u,c,l,f,p;if(h=null,null===e&&null==r&&(e=(l=[{},null])[0],r=l[1]),null==e&&(e={}),e=d(e),m(e)||(r=(f=[e,r])[0],e=f[1]),null!=t&&(t=d(t)),Array.isArray(t))for(o=0,u=t.length;o<u;o++)i=t[o],h=this.element(i);else if(g(t))h=this.element(t.apply());else if(m(t)){for(a in t)if(w.call(t,a))if(p=t[a],g(p)&&(p=p.apply()),!this.options.ignoreDecorators&&this.stringify.convertAttKey&&0===a.indexOf(this.stringify.convertAttKey))h=this.attribute(a.substr(this.stringify.convertAttKey.length),p);else if(!this.options.separateArrayItems&&Array.isArray(p)&&y(p))h=this.dummy();else if(m(p)&&y(p))h=this.element(a);else if(this.options.keepNullNodes||null!=p)if(!this.options.separateArrayItems&&Array.isArray(p))for(s=0,c=p.length;s<c;s++)i=p[s],(n={})[a]=i,h=this.element(n);else m(p)?!this.options.ignoreDecorators&&this.stringify.convertTextKey&&0===a.indexOf(this.stringify.convertTextKey)?h=this.element(p):(h=this.element(a)).element(p):h=this.element(a,p);else h=this.dummy()}else h=this.options.keepNullNodes||null!==r?!this.options.ignoreDecorators&&this.stringify.convertTextKey&&0===t.indexOf(this.stringify.convertTextKey)?this.text(r):!this.options.ignoreDecorators&&this.stringify.convertCDataKey&&0===t.indexOf(this.stringify.convertCDataKey)?this.cdata(r):!this.options.ignoreDecorators&&this.stringify.convertCommentKey&&0===t.indexOf(this.stringify.convertCommentKey)?this.comment(r):!this.options.ignoreDecorators&&this.stringify.convertRawKey&&0===t.indexOf(this.stringify.convertRawKey)?this.raw(r):!this.options.ignoreDecorators&&this.stringify.convertPIKey&&0===t.indexOf(this.stringify.convertPIKey)?this.instruction(t.substr(this.stringify.convertPIKey.length),r):this.node(t,e,r):this.dummy();if(null==h)throw new Error("Could not create any elements with: "+t+". "+this.debugInfo());return h},t.prototype.insertBefore=function(t,e,r){var n,i,o,s,a;if(null!=t?t.type:void 0)return s=e,(o=t).setParent(this),s?(i=children.indexOf(s),a=children.splice(i),children.push(o),Array.prototype.push.apply(children,a)):children.push(o),o;if(this.isRoot)throw new Error("Cannot insert elements at root level. "+this.debugInfo(t));return i=this.parent.children.indexOf(this),a=this.parent.children.splice(i),n=this.parent.element(t,e,r),Array.prototype.push.apply(this.parent.children,a),n},t.prototype.insertAfter=function(t,e,r){var n,i,o;if(this.isRoot)throw new Error("Cannot insert elements at root level. "+this.debugInfo(t));return i=this.parent.children.indexOf(this),o=this.parent.children.splice(i+1),n=this.parent.element(t,e,r),Array.prototype.push.apply(this.parent.children,o),n},t.prototype.remove=function(){var t;if(this.isRoot)throw new Error("Cannot remove the root element. "+this.debugInfo());return t=this.parent.children.indexOf(this),[].splice.apply(this.parent.children,[t,t-t+1].concat([])),this.parent},t.prototype.node=function(t,e,r){var n,i;return null!=t&&(t=d(t)),e||(e={}),e=d(e),m(e)||(r=(i=[e,r])[0],e=i[1]),n=new u(this,t,e),null!=r&&n.text(r),this.children.push(n),n},t.prototype.text=function(t){var e;return m(t)&&this.element(t),e=new p(this,t),this.children.push(e),this},t.prototype.cdata=function(t){var e;return e=new i(this,t),this.children.push(e),this},t.prototype.comment=function(t){var e;return e=new o(this,t),this.children.push(e),this},t.prototype.commentBefore=function(t){var e,r;return e=this.parent.children.indexOf(this),r=this.parent.children.splice(e),this.parent.comment(t),Array.prototype.push.apply(this.parent.children,r),this},t.prototype.commentAfter=function(t){var e,r;return e=this.parent.children.indexOf(this),r=this.parent.children.splice(e+1),this.parent.comment(t),Array.prototype.push.apply(this.parent.children,r),this},t.prototype.raw=function(t){var e;return e=new f(this,t),this.children.push(e),this},t.prototype.dummy=function(){return new h(this)},t.prototype.instruction=function(t,e){var r,n,i,o,s;if(null!=t&&(t=d(t)),null!=e&&(e=d(e)),Array.isArray(t))for(o=0,s=t.length;o<s;o++)r=t[o],this.instruction(r);else if(m(t))for(r in t)w.call(t,r)&&(n=t[r],this.instruction(r,n));else g(e)&&(e=e.apply()),i=new l(this,t,e),this.children.push(i);return this},t.prototype.instructionBefore=function(t,e){var r,n;return r=this.parent.children.indexOf(this),n=this.parent.children.splice(r),this.parent.instruction(t,e),Array.prototype.push.apply(this.parent.children,n),this},t.prototype.instructionAfter=function(t,e){var r,n;return r=this.parent.children.indexOf(this),n=this.parent.children.splice(r+1),this.parent.instruction(t,e),Array.prototype.push.apply(this.parent.children,n),this},t.prototype.declaration=function(t,e,r){var i,o;return i=this.document(),o=new s(i,t,e,r),0===i.children.length?i.children.unshift(o):i.children[0].type===n.Declaration?i.children[0]=o:i.children.unshift(o),i.root()||i},t.prototype.dtd=function(t,e){var r,i,o,s,h,u,c,l,f;for(r=this.document(),i=new a(r,t,e),o=s=0,u=(l=r.children).length;s<u;o=++s)if(l[o].type===n.DocType)return r.children[o]=i,i;for(o=h=0,c=(f=r.children).length;h<c;o=++h)if(f[o].isRoot)return r.children.splice(o,0,i),i;return r.children.push(i),i},t.prototype.up=function(){if(this.isRoot)throw new Error("The root node has no parent. Use doc() if you need to get the document object.");return this.parent},t.prototype.root=function(){var t;for(t=this;t;){if(t.type===n.Document)return t.rootObject;if(t.isRoot)return t;t=t.parent}},t.prototype.document=function(){var t;for(t=this;t;){if(t.type===n.Document)return t;t=t.parent}},t.prototype.end=function(t){return this.document().end(t)},t.prototype.prev=function(){var t;if((t=this.parent.children.indexOf(this))<1)throw new Error("Already at the first node. "+this.debugInfo());return this.parent.children[t-1]},t.prototype.next=function(){var t;if(-1===(t=this.parent.children.indexOf(this))||t===this.parent.children.length-1)throw new Error("Already at the last node. "+this.debugInfo());return this.parent.children[t+1]},t.prototype.importDocument=function(t){var e;return(e=t.root().clone()).parent=this,e.isRoot=!1,this.children.push(e),this},t.prototype.debugInfo=function(t){var e,r;return null!=(t=t||this.name)||(null!=(e=this.parent)?e.name:void 0)?null==t?"parent: <"+this.parent.name+">":(null!=(r=this.parent)?r.name:void 0)?"node: <"+t+">, parent: <"+this.parent.name+">":"node: <"+t+">":""},t.prototype.ele=function(t,e,r){return this.element(t,e,r)},t.prototype.nod=function(t,e,r){return this.node(t,e,r)},t.prototype.txt=function(t){return this.text(t)},t.prototype.dat=function(t){return this.cdata(t)},t.prototype.com=function(t){return this.comment(t)},t.prototype.ins=function(t,e){return this.instruction(t,e)},t.prototype.doc=function(){return this.document()},t.prototype.dec=function(t,e,r){return this.declaration(t,e,r)},t.prototype.e=function(t,e,r){return this.element(t,e,r)},t.prototype.n=function(t,e,r){return this.node(t,e,r)},t.prototype.t=function(t){return this.text(t)},t.prototype.d=function(t){return this.cdata(t)},t.prototype.c=function(t){return this.comment(t)},t.prototype.r=function(t){return this.raw(t)},t.prototype.i=function(t,e){return this.instruction(t,e)},t.prototype.u=function(){return this.up()},t.prototype.importXMLBuilder=function(t){return this.importDocument(t)},t.prototype.replaceChild=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.removeChild=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.appendChild=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.hasChildNodes=function(){return 0!==this.children.length},t.prototype.cloneNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.normalize=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.isSupported=function(t,e){return!0},t.prototype.hasAttributes=function(){return 0!==this.attribs.length},t.prototype.compareDocumentPosition=function(t){var r,n;return(r=this)===t?0:this.document()!==t.document()?(n=e.Disconnected|e.ImplementationSpecific,Math.random()<.5?n|=e.Preceding:n|=e.Following,n):r.isAncestor(t)?e.Contains|e.Preceding:r.isDescendant(t)?e.Contains|e.Following:r.isPreceding(t)?e.Preceding:e.Following},t.prototype.isSameNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.lookupPrefix=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.isDefaultNamespace=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.lookupNamespaceURI=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.isEqualNode=function(t){var e,r,n;if(t.nodeType!==this.nodeType)return!1;if(t.children.length!==this.children.length)return!1;for(e=r=0,n=this.children.length-1;0<=n?r<=n:r>=n;e=0<=n?++r:--r)if(!this.children[e].isEqualNode(t.children[e]))return!1;return!0},t.prototype.getFeature=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.setUserData=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.getUserData=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.contains=function(t){return!!t&&(t===this||this.isDescendant(t))},t.prototype.isDescendant=function(t){var e,r,n,i;for(r=0,n=(i=this.children).length;r<n;r++){if(t===(e=i[r]))return!0;if(e.isDescendant(t))return!0}return!1},t.prototype.isAncestor=function(t){return t.isDescendant(this)},t.prototype.isPreceding=function(t){var e,r;return e=this.treePosition(t),r=this.treePosition(this),-1!==e&&-1!==r&&e<r},t.prototype.isFollowing=function(t){var e,r;return e=this.treePosition(t),r=this.treePosition(this),-1!==e&&-1!==r&&e>r},t.prototype.treePosition=function(t){var e,r;return r=0,e=!1,this.foreachTreeNode(this.document(),(function(n){if(r++,!e&&n===t)return e=!0})),e?r:-1},t.prototype.foreachTreeNode=function(t,e){var r,n,i,o,s;for(t||(t=this.document()),n=0,i=(o=t.children).length;n<i;n++){if(s=e(r=o[n]))return s;if(s=this.foreachTreeNode(r,e))return s}},t}()}).call(this)},9059:function(t){(function(){t.exports=function(){function t(t){this.nodes=t}return Object.defineProperty(t.prototype,"length",{get:function(){return this.nodes.length||0}}),t.prototype.clone=function(){return this.nodes=null},t.prototype.item=function(t){return this.nodes[t]||null},t}()}).call(this)},1757:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(5165),n=r(4791),t.exports=function(t){function r(t,n,i){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing instruction target. "+this.debugInfo());this.type=e.ProcessingInstruction,this.target=this.stringify.insTarget(n),this.name=this.target,i&&(this.value=this.stringify.insValue(i))}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.processingInstruction(this,this.options.writer.filterOptions(t))},r.prototype.isEqualNode=function(t){return!!r.__super__.isEqualNode.apply(this,arguments).isEqualNode(t)&&t.target===this.target},r}(n)}).call(this)},2061:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(5165),n=r(6055),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing raw text. "+this.debugInfo());this.type=e.Raw,this.value=this.stringify.raw(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.raw(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},4915:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;e=r(5165),i=r(1061),n=r(8203),t.exports=function(t){function r(t,e){this.stream=t,r.__super__.constructor.call(this,e)}return function(t,e){for(var r in e)o.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.endline=function(t,e,i){return t.isLastRootNode&&e.state===n.CloseTag?"":r.__super__.endline.call(this,t,e,i)},r.prototype.document=function(t,e){var r,n,i,o,s,a,h,u,c;for(n=i=0,s=(h=t.children).length;i<s;n=++i)(r=h[n]).isLastRootNode=n===t.children.length-1;for(e=this.filterOptions(e),c=[],o=0,a=(u=t.children).length;o<a;o++)r=u[o],c.push(this.writeChildNode(r,e,0));return c},r.prototype.attribute=function(t,e,n){return this.stream.write(r.__super__.attribute.call(this,t,e,n))},r.prototype.cdata=function(t,e,n){return this.stream.write(r.__super__.cdata.call(this,t,e,n))},r.prototype.comment=function(t,e,n){return this.stream.write(r.__super__.comment.call(this,t,e,n))},r.prototype.declaration=function(t,e,n){return this.stream.write(r.__super__.declaration.call(this,t,e,n))},r.prototype.docType=function(t,e,r){var i,o,s,a;if(r||(r=0),this.openNode(t,e,r),e.state=n.OpenTag,this.stream.write(this.indent(t,e,r)),this.stream.write("<!DOCTYPE "+t.root().name),t.pubID&&t.sysID?this.stream.write(' PUBLIC "'+t.pubID+'" "'+t.sysID+'"'):t.sysID&&this.stream.write(' SYSTEM "'+t.sysID+'"'),t.children.length>0){for(this.stream.write(" ["),this.stream.write(this.endline(t,e,r)),e.state=n.InsideTag,o=0,s=(a=t.children).length;o<s;o++)i=a[o],this.writeChildNode(i,e,r+1);e.state=n.CloseTag,this.stream.write("]")}return e.state=n.CloseTag,this.stream.write(e.spaceBeforeSlash+">"),this.stream.write(this.endline(t,e,r)),e.state=n.None,this.closeNode(t,e,r)},r.prototype.element=function(t,r,i){var s,a,h,u,c,l,f,p,d;for(f in i||(i=0),this.openNode(t,r,i),r.state=n.OpenTag,this.stream.write(this.indent(t,r,i)+"<"+t.name),p=t.attribs)o.call(p,f)&&(s=p[f],this.attribute(s,r,i));if(u=0===(h=t.children.length)?null:t.children[0],0===h||t.children.every((function(t){return(t.type===e.Text||t.type===e.Raw)&&""===t.value})))r.allowEmpty?(this.stream.write(">"),r.state=n.CloseTag,this.stream.write("</"+t.name+">")):(r.state=n.CloseTag,this.stream.write(r.spaceBeforeSlash+"/>"));else if(!r.pretty||1!==h||u.type!==e.Text&&u.type!==e.Raw||null==u.value){for(this.stream.write(">"+this.endline(t,r,i)),r.state=n.InsideTag,c=0,l=(d=t.children).length;c<l;c++)a=d[c],this.writeChildNode(a,r,i+1);r.state=n.CloseTag,this.stream.write(this.indent(t,r,i)+"</"+t.name+">")}else this.stream.write(">"),r.state=n.InsideTag,r.suppressPrettyCount++,this.writeChildNode(u,r,i+1),r.suppressPrettyCount--,r.state=n.CloseTag,this.stream.write("</"+t.name+">");return this.stream.write(this.endline(t,r,i)),r.state=n.None,this.closeNode(t,r,i)},r.prototype.processingInstruction=function(t,e,n){return this.stream.write(r.__super__.processingInstruction.call(this,t,e,n))},r.prototype.raw=function(t,e,n){return this.stream.write(r.__super__.raw.call(this,t,e,n))},r.prototype.text=function(t,e,n){return this.stream.write(r.__super__.text.call(this,t,e,n))},r.prototype.dtdAttList=function(t,e,n){return this.stream.write(r.__super__.dtdAttList.call(this,t,e,n))},r.prototype.dtdElement=function(t,e,n){return this.stream.write(r.__super__.dtdElement.call(this,t,e,n))},r.prototype.dtdEntity=function(t,e,n){return this.stream.write(r.__super__.dtdEntity.call(this,t,e,n))},r.prototype.dtdNotation=function(t,e,n){return this.stream.write(r.__super__.dtdNotation.call(this,t,e,n))},r}(i)}).call(this)},8766:function(t,e,r){(function(){var e,n={}.hasOwnProperty;e=r(1061),t.exports=function(t){function e(t){e.__super__.constructor.call(this,t)}return function(t,e){for(var r in e)n.call(e,r)&&(t[r]=e[r]);function i(){this.constructor=t}i.prototype=e.prototype,t.prototype=new i,t.__super__=e.prototype}(e,t),e.prototype.document=function(t,e){var r,n,i,o,s;for(e=this.filterOptions(e),o="",n=0,i=(s=t.children).length;n<i;n++)r=s[n],o+=this.writeChildNode(r,e,0);return e.pretty&&o.slice(-e.newline.length)===e.newline&&(o=o.slice(0,-e.newline.length)),o},e}(e)}).call(this)},9910:function(t){(function(){var e=function(t,e){return function(){return t.apply(e,arguments)}},r={}.hasOwnProperty;t.exports=function(){function t(t){var n,i,o;for(n in this.assertLegalName=e(this.assertLegalName,this),this.assertLegalChar=e(this.assertLegalChar,this),t||(t={}),this.options=t,this.options.version||(this.options.version="1.0"),i=t.stringify||{})r.call(i,n)&&(o=i[n],this[n]=o)}return t.prototype.name=function(t){return this.options.noValidation?t:this.assertLegalName(""+t||"")},t.prototype.text=function(t){return this.options.noValidation?t:this.assertLegalChar(this.textEscape(""+t||""))},t.prototype.cdata=function(t){return this.options.noValidation?t:(t=(t=""+t||"").replace("]]>","]]]]><![CDATA[>"),this.assertLegalChar(t))},t.prototype.comment=function(t){if(this.options.noValidation)return t;if((t=""+t||"").match(/--/))throw new Error("Comment text cannot contain double-hypen: "+t);return this.assertLegalChar(t)},t.prototype.raw=function(t){return this.options.noValidation?t:""+t||""},t.prototype.attValue=function(t){return this.options.noValidation?t:this.assertLegalChar(this.attEscape(t=""+t||""))},t.prototype.insTarget=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.insValue=function(t){if(this.options.noValidation)return t;if((t=""+t||"").match(/\?>/))throw new Error("Invalid processing instruction value: "+t);return this.assertLegalChar(t)},t.prototype.xmlVersion=function(t){if(this.options.noValidation)return t;if(!(t=""+t||"").match(/1\.[0-9]+/))throw new Error("Invalid version number: "+t);return t},t.prototype.xmlEncoding=function(t){if(this.options.noValidation)return t;if(!(t=""+t||"").match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/))throw new Error("Invalid encoding: "+t);return this.assertLegalChar(t)},t.prototype.xmlStandalone=function(t){return this.options.noValidation?t:t?"yes":"no"},t.prototype.dtdPubID=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdSysID=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdElementValue=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdAttType=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdAttDefault=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdEntityValue=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdNData=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.convertAttKey="@",t.prototype.convertPIKey="?",t.prototype.convertTextKey="#text",t.prototype.convertCDataKey="#cdata",t.prototype.convertCommentKey="#comment",t.prototype.convertRawKey="#raw",t.prototype.assertLegalChar=function(t){var e,r;if(this.options.noValidation)return t;if(e="","1.0"===this.options.version){if(e=/[\0-\x08\x0B\f\x0E-\x1F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,r=t.match(e))throw new Error("Invalid character in string: "+t+" at index "+r.index)}else if("1.1"===this.options.version&&(e=/[\0\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,r=t.match(e)))throw new Error("Invalid character in string: "+t+" at index "+r.index);return t},t.prototype.assertLegalName=function(t){var e;if(this.options.noValidation)return t;if(this.assertLegalChar(t),e=/^([:A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])([\x2D\.0-:A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])*$/,!t.match(e))throw new Error("Invalid character in name");return t},t.prototype.textEscape=function(t){var e;return this.options.noValidation?t:(e=this.options.noDoubleEncoding?/(?!&\S+;)&/g:/&/g,t.replace(e,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\r/g,"&#xD;"))},t.prototype.attEscape=function(t){var e;return this.options.noValidation?t:(e=this.options.noDoubleEncoding?/(?!&\S+;)&/g:/&/g,t.replace(e,"&amp;").replace(/</g,"&lt;").replace(/"/g,"&quot;").replace(/\t/g,"&#x9;").replace(/\n/g,"&#xA;").replace(/\r/g,"&#xD;"))},t}()}).call(this)},1419:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(5165),n=r(4791),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing element text. "+this.debugInfo());this.name="#text",this.type=e.Text,this.value=this.stringify.text(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"isElementContentWhitespace",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"wholeText",{get:function(){var t,e,r;for(r="",e=this.previousSibling;e;)r=e.data+r,e=e.previousSibling;for(r+=this.data,t=this.nextSibling;t;)r+=t.data,t=t.nextSibling;return r}}),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.text(this,this.options.writer.filterOptions(t))},r.prototype.splitText=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.replaceWholeText=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r}(n)}).call(this)},1061:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;i=r(2045).assign,e=r(5165),r(352),r(9762),r(669),r(445),r(7341),r(2061),r(1419),r(1757),r(3728),r(76),r(9838),r(9134),r(8389),n=r(8203),t.exports=function(){function t(t){var e,r,n;for(e in t||(t={}),this.options=t,r=t.writer||{})o.call(r,e)&&(n=r[e],this["_"+e]=this[e],this[e]=n)}return t.prototype.filterOptions=function(t){var e,r,o,s,a,h,u,c;return t||(t={}),t=i({},this.options,t),(e={writer:this}).pretty=t.pretty||!1,e.allowEmpty=t.allowEmpty||!1,e.indent=null!=(r=t.indent)?r:" ",e.newline=null!=(o=t.newline)?o:"\n",e.offset=null!=(s=t.offset)?s:0,e.dontPrettyTextNodes=null!=(a=null!=(h=t.dontPrettyTextNodes)?h:t.dontprettytextnodes)?a:0,e.spaceBeforeSlash=null!=(u=null!=(c=t.spaceBeforeSlash)?c:t.spacebeforeslash)?u:"",!0===e.spaceBeforeSlash&&(e.spaceBeforeSlash=" "),e.suppressPrettyCount=0,e.user={},e.state=n.None,e},t.prototype.indent=function(t,e,r){var n;return!e.pretty||e.suppressPrettyCount?"":e.pretty&&(n=(r||0)+e.offset+1)>0?new Array(n).join(e.indent):""},t.prototype.endline=function(t,e,r){return!e.pretty||e.suppressPrettyCount?"":e.newline},t.prototype.attribute=function(t,e,r){var n;return this.openAttribute(t,e,r),n=" "+t.name+'="'+t.value+'"',this.closeAttribute(t,e,r),n},t.prototype.cdata=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<![CDATA[",e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+="]]>"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.comment=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"\x3c!-- ",e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+=" --\x3e"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.declaration=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<?xml",e.state=n.InsideTag,i+=' version="'+t.version+'"',null!=t.encoding&&(i+=' encoding="'+t.encoding+'"'),null!=t.standalone&&(i+=' standalone="'+t.standalone+'"'),e.state=n.CloseTag,i+=e.spaceBeforeSlash+"?>",i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.docType=function(t,e,r){var i,o,s,a,h;if(r||(r=0),this.openNode(t,e,r),e.state=n.OpenTag,a=this.indent(t,e,r),a+="<!DOCTYPE "+t.root().name,t.pubID&&t.sysID?a+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.sysID&&(a+=' SYSTEM "'+t.sysID+'"'),t.children.length>0){for(a+=" [",a+=this.endline(t,e,r),e.state=n.InsideTag,o=0,s=(h=t.children).length;o<s;o++)i=h[o],a+=this.writeChildNode(i,e,r+1);e.state=n.CloseTag,a+="]"}return e.state=n.CloseTag,a+=e.spaceBeforeSlash+">",a+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),a},t.prototype.element=function(t,r,i){var s,a,h,u,c,l,f,p,d,y,g,m,v,w;for(d in i||(i=0),y=!1,g="",this.openNode(t,r,i),r.state=n.OpenTag,g+=this.indent(t,r,i)+"<"+t.name,m=t.attribs)o.call(m,d)&&(s=m[d],g+=this.attribute(s,r,i));if(u=0===(h=t.children.length)?null:t.children[0],0===h||t.children.every((function(t){return(t.type===e.Text||t.type===e.Raw)&&""===t.value})))r.allowEmpty?(g+=">",r.state=n.CloseTag,g+="</"+t.name+">"+this.endline(t,r,i)):(r.state=n.CloseTag,g+=r.spaceBeforeSlash+"/>"+this.endline(t,r,i));else if(!r.pretty||1!==h||u.type!==e.Text&&u.type!==e.Raw||null==u.value){if(r.dontPrettyTextNodes)for(c=0,f=(v=t.children).length;c<f;c++)if(((a=v[c]).type===e.Text||a.type===e.Raw)&&null!=a.value){r.suppressPrettyCount++,y=!0;break}for(g+=">"+this.endline(t,r,i),r.state=n.InsideTag,l=0,p=(w=t.children).length;l<p;l++)a=w[l],g+=this.writeChildNode(a,r,i+1);r.state=n.CloseTag,g+=this.indent(t,r,i)+"</"+t.name+">",y&&r.suppressPrettyCount--,g+=this.endline(t,r,i),r.state=n.None}else g+=">",r.state=n.InsideTag,r.suppressPrettyCount++,y=!0,g+=this.writeChildNode(u,r,i+1),r.suppressPrettyCount--,y=!1,r.state=n.CloseTag,g+="</"+t.name+">"+this.endline(t,r,i);return this.closeNode(t,r,i),g},t.prototype.writeChildNode=function(t,r,n){switch(t.type){case e.CData:return this.cdata(t,r,n);case e.Comment:return this.comment(t,r,n);case e.Element:return this.element(t,r,n);case e.Raw:return this.raw(t,r,n);case e.Text:return this.text(t,r,n);case e.ProcessingInstruction:return this.processingInstruction(t,r,n);case e.Dummy:return"";case e.Declaration:return this.declaration(t,r,n);case e.DocType:return this.docType(t,r,n);case e.AttributeDeclaration:return this.dtdAttList(t,r,n);case e.ElementDeclaration:return this.dtdElement(t,r,n);case e.EntityDeclaration:return this.dtdEntity(t,r,n);case e.NotationDeclaration:return this.dtdNotation(t,r,n);default:throw new Error("Unknown XML node type: "+t.constructor.name)}},t.prototype.processingInstruction=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<?",e.state=n.InsideTag,i+=t.target,t.value&&(i+=" "+t.value),e.state=n.CloseTag,i+=e.spaceBeforeSlash+"?>",i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.raw=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r),e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.text=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r),e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdAttList=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!ATTLIST",e.state=n.InsideTag,i+=" "+t.elementName+" "+t.attributeName+" "+t.attributeType,"#DEFAULT"!==t.defaultValueType&&(i+=" "+t.defaultValueType),t.defaultValue&&(i+=' "'+t.defaultValue+'"'),e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdElement=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!ELEMENT",e.state=n.InsideTag,i+=" "+t.name+" "+t.value,e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdEntity=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!ENTITY",e.state=n.InsideTag,t.pe&&(i+=" %"),i+=" "+t.name,t.value?i+=' "'+t.value+'"':(t.pubID&&t.sysID?i+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.sysID&&(i+=' SYSTEM "'+t.sysID+'"'),t.nData&&(i+=" NDATA "+t.nData)),e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdNotation=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!NOTATION",e.state=n.InsideTag,i+=" "+t.name,t.pubID&&t.sysID?i+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.pubID?i+=' PUBLIC "'+t.pubID+'"':t.sysID&&(i+=' SYSTEM "'+t.sysID+'"'),e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.openNode=function(t,e,r){},t.prototype.closeNode=function(t,e,r){},t.prototype.openAttribute=function(t,e,r){},t.prototype.closeAttribute=function(t,e,r){},t}()}).call(this)},122:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c,l;l=r(2045),u=l.assign,c=l.isFunction,i=r(344),o=r(1626),s=r(7535),h=r(8766),a=r(4915),e=r(5165),n=r(8203),t.exports.create=function(t,e,r,n){var i,s;if(null==t)throw new Error("Root element needs a name.");return n=u({},e,r,n),s=(i=new o(n)).element(t),n.headless||(i.declaration(n),null==n.pubID&&null==n.sysID||i.dtd(n)),s},t.exports.begin=function(t,e,r){var n;return c(t)&&(e=(n=[t,e])[0],r=n[1],t={}),e?new s(t,e,r):new o(t)},t.exports.stringWriter=function(t){return new h(t)},t.exports.streamWriter=function(t,e){return new a(t,e)},t.exports.implementation=new i,t.exports.nodeType=e,t.exports.writerState=n}).call(this)},4237:(t,e,r)=>{"use strict";r.r(e),r.d(e,{Converter:()=>ar});var n=r(7913),i=r.n(n),o=r(5300),s=r(9831),a=484813681109536e-20,h=Math.PI/2,u=1e-10,c=.017453292519943295,l=57.29577951308232,f=Math.PI/4,p=2*Math.PI,d=3.14159265359,y={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667};const g={ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937}};var m=/[\s_\-\/\(\)]/g;function v(t,e){if(t[e])return t[e];for(var r,n=Object.keys(t),i=e.toLowerCase().replace(m,""),o=-1;++o<n.length;)if((r=n[o]).toLowerCase().replace(m,"")===i)return t[r]}function w(t){var e,r,n,i={},o=t.split("+").map((function(t){return t.trim()})).filter((function(t){return t})).reduce((function(t,e){var r=e.split("=");return r.push(!0),t[r[0].toLowerCase()]=r[1],t}),{}),s={proj:"projName",datum:"datumCode",rf:function(t){i.rf=parseFloat(t)},lat_0:function(t){i.lat0=t*c},lat_1:function(t){i.lat1=t*c},lat_2:function(t){i.lat2=t*c},lat_ts:function(t){i.lat_ts=t*c},lon_0:function(t){i.long0=t*c},lon_1:function(t){i.long1=t*c},lon_2:function(t){i.long2=t*c},alpha:function(t){i.alpha=parseFloat(t)*c},lonc:function(t){i.longc=t*c},x_0:function(t){i.x0=parseFloat(t)},y_0:function(t){i.y0=parseFloat(t)},k_0:function(t){i.k0=parseFloat(t)},k:function(t){i.k0=parseFloat(t)},a:function(t){i.a=parseFloat(t)},b:function(t){i.b=parseFloat(t)},r_a:function(){i.R_A=!0},zone:function(t){i.zone=parseInt(t,10)},south:function(){i.utmSouth=!0},towgs84:function(t){i.datum_params=t.split(",").map((function(t){return parseFloat(t)}))},to_meter:function(t){i.to_meter=parseFloat(t)},units:function(t){i.units=t;var e=v(g,t);e&&(i.to_meter=e.to_meter)},from_greenwich:function(t){i.from_greenwich=t*c},pm:function(t){var e=v(y,t);i.from_greenwich=(e||parseFloat(t))*c},nadgrids:function(t){"@null"===t?i.datumCode="none":i.nadgrids=t},axis:function(t){var e="ewnsud";3===t.length&&-1!==e.indexOf(t.substr(0,1))&&-1!==e.indexOf(t.substr(1,1))&&-1!==e.indexOf(t.substr(2,1))&&(i.axis=t)}};for(e in o)r=o[e],e in s?"function"==typeof(n=s[e])?n(r):i[n]=r:i[e]=r;return"string"==typeof i.datumCode&&"WGS84"!==i.datumCode&&(i.datumCode=i.datumCode.toLowerCase()),i}var b=/\s/,M=/[A-Za-z]/,_=/[A-Za-z84]/,x=/[,\]]/,E=/[\d\.E\-\+]/;function S(t){if("string"!=typeof t)throw new Error("not a string");this.text=t.trim(),this.level=0,this.place=0,this.root=null,this.stack=[],this.currentObject=null,this.state=1}function O(t,e,r){Array.isArray(e)&&(r.unshift(e),e=null);var n=e?{}:t,i=r.reduce((function(t,e){return T(e,t),t}),n);e&&(t[e]=i)}function T(t,e){if(Array.isArray(t)){var r=t.shift();if("PARAMETER"===r&&(r=t.shift()),1===t.length)return Array.isArray(t[0])?(e[r]={},void T(t[0],e[r])):void(e[r]=t[0]);if(t.length)if("TOWGS84"!==r){if("AXIS"===r)return r in e||(e[r]=[]),void e[r].push(t);var n;switch(Array.isArray(r)||(e[r]={}),r){case"UNIT":case"PRIMEM":case"VERT_DATUM":return e[r]={name:t[0].toLowerCase(),convert:t[1]},void(3===t.length&&T(t[2],e[r]));case"SPHEROID":case"ELLIPSOID":return e[r]={name:t[0],a:t[1],rf:t[2]},void(4===t.length&&T(t[3],e[r]));case"PROJECTEDCRS":case"PROJCRS":case"GEOGCS":case"GEOCCS":case"PROJCS":case"LOCAL_CS":case"GEODCRS":case"GEODETICCRS":case"GEODETICDATUM":case"EDATUM":case"ENGINEERINGDATUM":case"VERT_CS":case"VERTCRS":case"VERTICALCRS":case"COMPD_CS":case"COMPOUNDCRS":case"ENGINEERINGCRS":case"ENGCRS":case"FITTED_CS":case"LOCAL_DATUM":case"DATUM":return t[0]=["name",t[0]],void O(e,r,t);default:for(n=-1;++n<t.length;)if(!Array.isArray(t[n]))return T(t,e[r]);return O(e,r,t)}}else e[r]=t;else e[r]=!0}else e[t]=!0}function I(t){return.017453292519943295*t}function N(t){var e=new S(t).output(),r=e.shift(),n=e.shift();e.unshift(["name",n]),e.unshift(["type",r]);var i={};return T(e,i),function(t){if("GEOGCS"===t.type?t.projName="longlat":"LOCAL_CS"===t.type?(t.projName="identity",t.local=!0):"object"==typeof t.PROJECTION?t.projName=Object.keys(t.PROJECTION)[0]:t.projName=t.PROJECTION,t.AXIS){for(var e="",r=0,n=t.AXIS.length;r<n;++r){var i=t.AXIS[r][0].toLowerCase();-1!==i.indexOf("north")?e+="n":-1!==i.indexOf("south")?e+="s":-1!==i.indexOf("east")?e+="e":-1!==i.indexOf("west")&&(e+="w")}2===e.length&&(e+="u"),3===e.length&&(t.axis=e)}t.UNIT&&(t.units=t.UNIT.name.toLowerCase(),"metre"===t.units&&(t.units="meter"),t.UNIT.convert&&("GEOGCS"===t.type?t.DATUM&&t.DATUM.SPHEROID&&(t.to_meter=t.UNIT.convert*t.DATUM.SPHEROID.a):t.to_meter=t.UNIT.convert));var o=t.GEOGCS;function s(e){return e*(t.to_meter||1)}"GEOGCS"===t.type&&(o=t),o&&(o.DATUM?t.datumCode=o.DATUM.name.toLowerCase():t.datumCode=o.name.toLowerCase(),"d_"===t.datumCode.slice(0,2)&&(t.datumCode=t.datumCode.slice(2)),"new_zealand_geodetic_datum_1949"!==t.datumCode&&"new_zealand_1949"!==t.datumCode||(t.datumCode="nzgd49"),"wgs_1984"!==t.datumCode&&"world_geodetic_system_1984"!==t.datumCode||("Mercator_Auxiliary_Sphere"===t.PROJECTION&&(t.sphere=!0),t.datumCode="wgs84"),"_ferro"===t.datumCode.slice(-6)&&(t.datumCode=t.datumCode.slice(0,-6)),"_jakarta"===t.datumCode.slice(-8)&&(t.datumCode=t.datumCode.slice(0,-8)),~t.datumCode.indexOf("belge")&&(t.datumCode="rnb72"),o.DATUM&&o.DATUM.SPHEROID&&(t.ellps=o.DATUM.SPHEROID.name.replace("_19","").replace(/[Cc]larke\_18/,"clrk"),"international"===t.ellps.toLowerCase().slice(0,13)&&(t.ellps="intl"),t.a=o.DATUM.SPHEROID.a,t.rf=parseFloat(o.DATUM.SPHEROID.rf,10)),o.DATUM&&o.DATUM.TOWGS84&&(t.datum_params=o.DATUM.TOWGS84),~t.datumCode.indexOf("osgb_1936")&&(t.datumCode="osgb36"),~t.datumCode.indexOf("osni_1952")&&(t.datumCode="osni52"),(~t.datumCode.indexOf("tm65")||~t.datumCode.indexOf("geodetic_datum_of_1965"))&&(t.datumCode="ire65"),"ch1903+"===t.datumCode&&(t.datumCode="ch1903"),~t.datumCode.indexOf("israel")&&(t.datumCode="isr93")),t.b&&!isFinite(t.b)&&(t.b=t.a),[["standard_parallel_1","Standard_Parallel_1"],["standard_parallel_2","Standard_Parallel_2"],["false_easting","False_Easting"],["false_northing","False_Northing"],["central_meridian","Central_Meridian"],["latitude_of_origin","Latitude_Of_Origin"],["latitude_of_origin","Central_Parallel"],["scale_factor","Scale_Factor"],["k0","scale_factor"],["latitude_of_center","Latitude_Of_Center"],["latitude_of_center","Latitude_of_center"],["lat0","latitude_of_center",I],["longitude_of_center","Longitude_Of_Center"],["longitude_of_center","Longitude_of_center"],["longc","longitude_of_center",I],["x0","false_easting",s],["y0","false_northing",s],["long0","central_meridian",I],["lat0","latitude_of_origin",I],["lat0","standard_parallel_1",I],["lat1","standard_parallel_1",I],["lat2","standard_parallel_2",I],["azimuth","Azimuth"],["alpha","azimuth",I],["srsCode","name"]].forEach((function(e){return function(t,e){var r=e[0],n=e[1];!(r in t)&&n in t&&(t[r]=t[n],3===e.length&&(t[r]=e[2](t[r])))}(t,e)})),t.long0||!t.longc||"Albers_Conic_Equal_Area"!==t.projName&&"Lambert_Azimuthal_Equal_Area"!==t.projName||(t.long0=t.longc),t.lat_ts||!t.lat1||"Stereographic_South_Pole"!==t.projName&&"Polar Stereographic (variant B)"!==t.projName||(t.lat0=I(t.lat1>0?90:-90),t.lat_ts=t.lat1)}(i),i}function P(t){var e=this;if(2===arguments.length){var r=arguments[1];"string"==typeof r?"+"===r.charAt(0)?P[t]=w(arguments[1]):P[t]=N(arguments[1]):P[t]=r}else if(1===arguments.length){if(Array.isArray(t))return t.map((function(t){Array.isArray(t)?P.apply(e,t):P(t)}));if("string"==typeof t){if(t in P)return P[t]}else"EPSG"in t?P["EPSG:"+t.EPSG]=t:"ESRI"in t?P["ESRI:"+t.ESRI]=t:"IAU2000"in t?P["IAU2000:"+t.IAU2000]=t:console.log(t);return}}S.prototype.readCharicter=function(){var t=this.text[this.place++];if(4!==this.state)for(;b.test(t);){if(this.place>=this.text.length)return;t=this.text[this.place++]}switch(this.state){case 1:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},S.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if(x.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},S.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=1)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=1,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},S.prototype.number=function(t){if(!E.test(t)){if(x.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},S.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},S.prototype.keyword=function(t){if(_.test(t))this.word+=t;else{if("["===t){var e=[];return e.push(this.word),this.level++,null===this.root?this.root=e:this.currentObject.push(e),this.stack.push(this.currentObject),this.currentObject=e,void(this.state=1)}if(!x.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},S.prototype.neutral=function(t){if(M.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(E.test(t))return this.word=t,void(this.state=3);if(!x.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},S.prototype.output=function(){for(;this.place<this.text.length;)this.readCharicter();if(-1===this.state)return this.root;throw new Error('unable to parse string "'+this.text+'". State is '+this.state)},function(t){t("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),t("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),t("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"),t.WGS84=t["EPSG:4326"],t["EPSG:3785"]=t["EPSG:3857"],t.GOOGLE=t["EPSG:3857"],t["EPSG:900913"]=t["EPSG:3857"],t["EPSG:102113"]=t["EPSG:3857"]}(P);const A=P;var C=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"],D=["3857","900913","3785","102113"];function k(t,e){var r,n;if(t=t||{},!e)return t;for(n in e)void 0!==(r=e[n])&&(t[n]=r);return t}function L(t,e,r){var n=t*e;return r/Math.sqrt(1-n*n)}function j(t){return t<0?-1:1}function F(t){return Math.abs(t)<=d?t:t-j(t)*p}function R(t,e,r){var n=t*r,i=.5*t;return n=Math.pow((1-n)/(1+n),i),Math.tan(.5*(h-e))/n}function B(t,e){for(var r,n,i=.5*t,o=h-2*Math.atan(e),s=0;s<=15;s++)if(r=t*Math.sin(o),o+=n=h-2*Math.atan(e*Math.pow((1-r)/(1+r),i))-o,Math.abs(n)<=1e-10)return o;return-9999}function G(t){return t}var U=[{init:function(){var t=this.b/this.a;this.es=1-t*t,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=L(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)},forward:function(t){var e,r,n=t.x,i=t.y;if(i*l>90&&i*l<-90&&n*l>180&&n*l<-180)return null;if(Math.abs(Math.abs(i)-h)<=u)return null;if(this.sphere)e=this.x0+this.a*this.k0*F(n-this.long0),r=this.y0+this.a*this.k0*Math.log(Math.tan(f+.5*i));else{var o=Math.sin(i),s=R(this.e,i,o);e=this.x0+this.a*this.k0*F(n-this.long0),r=this.y0-this.a*this.k0*Math.log(s)}return t.x=e,t.y=r,t},inverse:function(t){var e,r,n=t.x-this.x0,i=t.y-this.y0;if(this.sphere)r=h-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var o=Math.exp(-i/(this.a*this.k0));if(-9999===(r=B(this.e,o)))return null}return e=F(this.long0+n/(this.a*this.k0)),t.x=e,t.y=r,t},names:["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"]},{init:function(){},forward:G,inverse:G,names:["longlat","identity"]}],q={},z=[];function V(t,e){var r=z.length;return t.names?(z[r]=t,t.names.forEach((function(t){q[t.toLowerCase()]=r})),this):(console.log(e),!0)}const W={start:function(){U.forEach(V)},add:V,get:function(t){if(!t)return!1;var e=t.toLowerCase();return void 0!==q[e]&&z[q[e]]?z[q[e]]:void 0}};var X={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},APL4:{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},clrk58:{a:6378293.645208759,rf:294.2606763692654,ellipseName:"Clarke 1858"},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS7:{a:6378135,rf:298.26,ellipseName:"WGS 72"}},$=X.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};X.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};var Y={wgs84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},ch1903:{towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"},ggrs87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},nad83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},nad27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},osni52:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},rassadiran:{towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},osgb36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"},s_jtsk:{towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"},beduaram:{towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"},gunung_segara:{towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"},rnb72:{towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"}};function Q(t,e){if(!(this instanceof Q))return new Q(t);e=e||function(t){if(t)throw t};var r=function(t){if(!function(t){return"string"==typeof t}(t))return t;if(function(t){return t in A}(t))return A[t];if(function(t){return C.some((function(e){return t.indexOf(e)>-1}))}(t)){var e=N(t);if(function(t){var e=v(t,"authority");if(e){var r=v(e,"epsg");return r&&D.indexOf(r)>-1}}(e))return A["EPSG:3857"];var r=function(t){var e=v(t,"extension");if(e)return v(e,"proj4")}(e);return r?w(r):e}return function(t){return"+"===t[0]}(t)?w(t):void 0}(t);if("object"==typeof r){var n=Q.projections.get(r.projName);if(n){if(r.datumCode&&"none"!==r.datumCode){var i=v(Y,r.datumCode);i&&(r.datum_params=i.towgs84?i.towgs84.split(","):null,r.ellps=i.ellipse,r.datumName=i.datumName?i.datumName:r.datumCode)}r.k0=r.k0||1,r.axis=r.axis||"enu",r.ellps=r.ellps||"wgs84";var o,s,h,c,l,f,p=function(t,e,r,n,i){if(!t){var o=v(X,n);o||(o=$),t=o.a,e=o.b,r=o.rf}return r&&!e&&(e=(1-1/r)*t),(0===r||Math.abs(t-e)<u)&&(i=!0,e=t),{a:t,b:e,rf:r,sphere:i}}(r.a,r.b,r.rf,r.ellps,r.sphere),d=(o=p.a,s=p.b,p.rf,l=((h=o*o)-(c=s*s))/h,f=0,r.R_A?(h=(o*=1-l*(.16666666666666666+l*(.04722222222222222+.022156084656084655*l)))*o,l=0):f=Math.sqrt(l),{es:l,e:f,ep2:(h-c)/c}),y=r.datum||function(t,e,r,n,i,o){var s={};return s.datum_type=void 0===t||"none"===t?5:4,e&&(s.datum_params=e.map(parseFloat),0===s.datum_params[0]&&0===s.datum_params[1]&&0===s.datum_params[2]||(s.datum_type=1),s.datum_params.length>3&&(0===s.datum_params[3]&&0===s.datum_params[4]&&0===s.datum_params[5]&&0===s.datum_params[6]||(s.datum_type=2,s.datum_params[3]*=a,s.datum_params[4]*=a,s.datum_params[5]*=a,s.datum_params[6]=s.datum_params[6]/1e6+1))),s.a=r,s.b=n,s.es=i,s.ep2=o,s}(r.datumCode,r.datum_params,p.a,p.b,d.es,d.ep2);k(this,r),k(this,n),this.a=p.a,this.b=p.b,this.rf=p.rf,this.sphere=p.sphere,this.es=d.es,this.e=d.e,this.ep2=d.ep2,this.datum=y,this.init(),e(null,this)}else e(t)}else e(t)}Q.projections=W,Q.projections.start();const K=Q;function H(t,e,r){var n,i,o,s,a=t.x,u=t.y,c=t.z?t.z:0;if(u<-h&&u>-1.001*h)u=-h;else if(u>h&&u<1.001*h)u=h;else{if(u<-h)return{x:-1/0,y:-1/0,z:t.z};if(u>h)return{x:1/0,y:1/0,z:t.z}}return a>Math.PI&&(a-=2*Math.PI),i=Math.sin(u),s=Math.cos(u),o=i*i,{x:((n=r/Math.sqrt(1-e*o))+c)*s*Math.cos(a),y:(n+c)*s*Math.sin(a),z:(n*(1-e)+c)*i}}function J(t,e,r,n){var i,o,s,a,h,u,c,l,f,p,d,y,g,m,v,w=t.x,b=t.y,M=t.z?t.z:0;if(i=Math.sqrt(w*w+b*b),o=Math.sqrt(w*w+b*b+M*M),i/r<1e-12){if(m=0,o/r<1e-12)return v=-n,{x:t.x,y:t.y,z:t.z}}else m=Math.atan2(b,w);s=M/o,l=(a=i/o)*(1-e)*(h=1/Math.sqrt(1-e*(2-e)*a*a)),f=s*h,g=0;do{g++,u=e*(c=r/Math.sqrt(1-e*f*f))/(c+(v=i*l+M*f-c*(1-e*f*f))),y=(d=s*(h=1/Math.sqrt(1-u*(2-u)*a*a)))*l-(p=a*(1-u)*h)*f,l=p,f=d}while(y*y>1e-24&&g<30);return{x:m,y:Math.atan(d/Math.abs(p)),z:v}}function Z(t){return 1===t||2===t}function tt(t,e,r){var n,i,o,s=r.x,a=r.y,h=r.z||0,u={};for(o=0;o<3;o++)if(!e||2!==o||void 0!==r.z)switch(0===o?(n=s,i=-1!=="ew".indexOf(t.axis[o])?"x":"y"):1===o?(n=a,i=-1!=="ns".indexOf(t.axis[o])?"y":"x"):(n=h,i="z"),t.axis[o]){case"e":u[i]=n;break;case"w":u[i]=-n;break;case"n":u[i]=n;break;case"s":u[i]=-n;break;case"u":void 0!==r[i]&&(u.z=n);break;case"d":void 0!==r[i]&&(u.z=-n);break;default:return null}return u}function et(t){var e={x:t[0],y:t[1]};return t.length>2&&(e.z=t[2]),t.length>3&&(e.m=t[3]),e}function rt(t){if("function"==typeof Number.isFinite){if(Number.isFinite(t))return;throw new TypeError("coordinates must be finite numbers")}if("number"!=typeof t||t!=t||!isFinite(t))throw new TypeError("coordinates must be finite numbers")}function nt(t,e,r){var n;if(Array.isArray(r)&&(r=et(r)),function(t){rt(t.x),rt(t.y)}(r),t.datum&&e.datum&&function(t,e){return(1===t.datum.datum_type||2===t.datum.datum_type)&&"WGS84"!==e.datumCode||(1===e.datum.datum_type||2===e.datum.datum_type)&&"WGS84"!==t.datumCode}(t,e)&&(r=nt(t,n=new K("WGS84"),r),t=n),"enu"!==t.axis&&(r=tt(t,!1,r)),"longlat"===t.projName)r={x:r.x*c,y:r.y*c,z:r.z||0};else if(t.to_meter&&(r={x:r.x*t.to_meter,y:r.y*t.to_meter,z:r.z||0}),!(r=t.inverse(r)))return;return t.from_greenwich&&(r.x+=t.from_greenwich),r=function(t,e,r){return function(t,e){return t.datum_type===e.datum_type&&!(t.a!==e.a||Math.abs(t.es-e.es)>5e-11)&&(1===t.datum_type?t.datum_params[0]===e.datum_params[0]&&t.datum_params[1]===e.datum_params[1]&&t.datum_params[2]===e.datum_params[2]:2!==t.datum_type||t.datum_params[0]===e.datum_params[0]&&t.datum_params[1]===e.datum_params[1]&&t.datum_params[2]===e.datum_params[2]&&t.datum_params[3]===e.datum_params[3]&&t.datum_params[4]===e.datum_params[4]&&t.datum_params[5]===e.datum_params[5]&&t.datum_params[6]===e.datum_params[6])}(t,e)||5===t.datum_type||5===e.datum_type?r:t.es!==e.es||t.a!==e.a||Z(t.datum_type)||Z(e.datum_type)?(r=H(r,t.es,t.a),Z(t.datum_type)&&(r=function(t,e,r){if(1===e)return{x:t.x+r[0],y:t.y+r[1],z:t.z+r[2]};if(2===e){var n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],h=r[5],u=r[6];return{x:u*(t.x-h*t.y+a*t.z)+n,y:u*(h*t.x+t.y-s*t.z)+i,z:u*(-a*t.x+s*t.y+t.z)+o}}}(r,t.datum_type,t.datum_params)),Z(e.datum_type)&&(r=function(t,e,r){if(1===e)return{x:t.x-r[0],y:t.y-r[1],z:t.z-r[2]};if(2===e){var n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],h=r[5],u=r[6],c=(t.x-n)/u,l=(t.y-i)/u,f=(t.z-o)/u;return{x:c+h*l-a*f,y:-h*c+l+s*f,z:a*c-s*l+f}}}(r,e.datum_type,e.datum_params)),J(r,e.es,e.a,e.b)):r}(t.datum,e.datum,r),e.from_greenwich&&(r={x:r.x-e.from_greenwich,y:r.y,z:r.z||0}),"longlat"===e.projName?r={x:r.x*l,y:r.y*l,z:r.z||0}:(r=e.forward(r),e.to_meter&&(r={x:r.x/e.to_meter,y:r.y/e.to_meter,z:r.z||0})),"enu"!==e.axis?tt(e,!0,r):r}var it=K("WGS84");function ot(t,e,r){var n,i,o;return Array.isArray(r)?(n=nt(t,e,r)||{x:NaN,y:NaN},r.length>2?void 0!==t.name&&"geocent"===t.name||void 0!==e.name&&"geocent"===e.name?"number"==typeof n.z?[n.x,n.y,n.z].concat(r.splice(3)):[n.x,n.y,r[2]].concat(r.splice(3)):[n.x,n.y].concat(r.splice(2)):[n.x,n.y]):(i=nt(t,e,r),2===(o=Object.keys(r)).length||o.forEach((function(n){if(void 0!==t.name&&"geocent"===t.name||void 0!==e.name&&"geocent"===e.name){if("x"===n||"y"===n||"z"===n)return}else if("x"===n||"y"===n)return;i[n]=r[n]})),i)}function st(t){return t instanceof K?t:t.oProj?t.oProj:K(t)}const at=function(t,e,r){t=st(t);var n,i=!1;return void 0===e?(e=t,t=it,i=!0):(void 0!==e.x||Array.isArray(e))&&(r=e,e=t,t=it,i=!0),e=st(e),r?ot(t,e,r):(n={forward:function(r){return ot(t,e,r)},inverse:function(r){return ot(e,t,r)}},i&&(n.oProj=e),n)};var ht="AJSAJS",ut="AFAFAF",ct=65,lt=73,ft=79;const pt={forward:dt,inverse:function(t){var e=vt(bt(t.toUpperCase()));return e.lat&&e.lon?[e.lon,e.lat,e.lon,e.lat]:[e.left,e.bottom,e.right,e.top]},toPoint:yt};function dt(t,e){return e=e||5,function(t,e){var r,n,i,o,s,a,h,u,c,l,f,p="00000"+t.easting,d="00000"+t.northing;return t.zoneNumber+t.zoneLetter+(c=t.easting,l=t.northing,f=wt(t.zoneNumber),r=Math.floor(c/1e5),n=Math.floor(l/1e5)%20,o=ht.charCodeAt(i=f-1),s=ut.charCodeAt(i),u=!1,(a=o+r-1)>90&&(a=a-90+ct-1,u=!0),(a===lt||o<lt&&a>lt||(a>lt||o<lt)&&u)&&a++,(a===ft||o<ft&&a>ft||(a>ft||o<ft)&&u)&&++a===lt&&a++,a>90&&(a=a-90+ct-1),(h=s+n)>86?(h=h-86+ct-1,u=!0):u=!1,(h===lt||s<lt&&h>lt||(h>lt||s<lt)&&u)&&h++,(h===ft||s<ft&&h>ft||(h>ft||s<ft)&&u)&&++h===lt&&h++,h>86&&(h=h-86+ct-1),String.fromCharCode(a)+String.fromCharCode(h))+p.substr(p.length-5,e)+d.substr(d.length-5,e)}(function(t){var e,r,n,i,o,s,a,h=t.lat,u=t.lon,c=6378137,l=.00669438,f=.9996,p=gt(h),d=gt(u);a=Math.floor((u+180)/6)+1,180===u&&(a=60),h>=56&&h<64&&u>=3&&u<12&&(a=32),h>=72&&h<84&&(u>=0&&u<9?a=31:u>=9&&u<21?a=33:u>=21&&u<33?a=35:u>=33&&u<42&&(a=37)),s=gt(6*(a-1)-180+3),e=.006739496752268451,r=c/Math.sqrt(1-l*Math.sin(p)*Math.sin(p)),n=Math.tan(p)*Math.tan(p),i=e*Math.cos(p)*Math.cos(p);var y,g,m=f*r*((o=Math.cos(p)*(d-s))+(1-n+i)*o*o*o/6+(5-18*n+n*n+72*i-58*e)*o*o*o*o*o/120)+5e5,v=f*(c*(.9983242984503243*p-.002514607064228144*Math.sin(2*p)+2639046602129982e-21*Math.sin(4*p)-3.418046101696858e-9*Math.sin(6*p))+r*Math.tan(p)*(o*o/2+(5-n+9*i+4*i*i)*o*o*o*o/24+(61-58*n+n*n+600*i-2.2240339282485886)*o*o*o*o*o*o/720));return h<0&&(v+=1e7),{northing:Math.round(v),easting:Math.round(m),zoneNumber:a,zoneLetter:(y=h,g="Z",84>=y&&y>=72?g="X":72>y&&y>=64?g="W":64>y&&y>=56?g="V":56>y&&y>=48?g="U":48>y&&y>=40?g="T":40>y&&y>=32?g="S":32>y&&y>=24?g="R":24>y&&y>=16?g="Q":16>y&&y>=8?g="P":8>y&&y>=0?g="N":0>y&&y>=-8?g="M":-8>y&&y>=-16?g="L":-16>y&&y>=-24?g="K":-24>y&&y>=-32?g="J":-32>y&&y>=-40?g="H":-40>y&&y>=-48?g="G":-48>y&&y>=-56?g="F":-56>y&&y>=-64?g="E":-64>y&&y>=-72?g="D":-72>y&&y>=-80&&(g="C"),g)}}({lat:t[1],lon:t[0]}),e)}function yt(t){var e=vt(bt(t.toUpperCase()));return e.lat&&e.lon?[e.lon,e.lat]:[(e.left+e.right)/2,(e.top+e.bottom)/2]}function gt(t){return t*(Math.PI/180)}function mt(t){return t/Math.PI*180}function vt(t){var e=t.northing,r=t.easting,n=t.zoneLetter,i=t.zoneNumber;if(i<0||i>60)return null;var o,s,a,h,u,c,l,f,p,d=.9996,y=6378137,g=.00669438,m=(1-Math.sqrt(.99330562))/(1+Math.sqrt(.99330562)),v=r-5e5,w=e;n<"N"&&(w-=1e7),l=6*(i-1)-180+3,o=.006739496752268451,p=(f=w/d/6367449.145945056)+(3*m/2-27*m*m*m/32)*Math.sin(2*f)+(21*m*m/16-55*m*m*m*m/32)*Math.sin(4*f)+151*m*m*m/96*Math.sin(6*f),s=y/Math.sqrt(1-g*Math.sin(p)*Math.sin(p)),a=Math.tan(p)*Math.tan(p),h=o*Math.cos(p)*Math.cos(p),u=.99330562*y/Math.pow(1-g*Math.sin(p)*Math.sin(p),1.5),c=v/(s*d);var b=p-s*Math.tan(p)/u*(c*c/2-(5+3*a+10*h-4*h*h-9*o)*c*c*c*c/24+(61+90*a+298*h+45*a*a-1.6983531815716497-3*h*h)*c*c*c*c*c*c/720);b=mt(b);var M,_=(c-(1+2*a+h)*c*c*c/6+(5-2*h+28*a-3*h*h+8*o+24*a*a)*c*c*c*c*c/120)/Math.cos(p);if(_=l+mt(_),t.accuracy){var x=vt({northing:t.northing+t.accuracy,easting:t.easting+t.accuracy,zoneLetter:t.zoneLetter,zoneNumber:t.zoneNumber});M={top:x.lat,right:x.lon,bottom:b,left:_}}else M={lat:b,lon:_};return M}function wt(t){var e=t%6;return 0===e&&(e=6),e}function bt(t){if(t&&0===t.length)throw"MGRSPoint coverting from nothing";for(var e,r=t.length,n=null,i="",o=0;!/[A-Z]/.test(e=t.charAt(o));){if(o>=2)throw"MGRSPoint bad conversion from: "+t;i+=e,o++}var s=parseInt(i,10);if(0===o||o+3>r)throw"MGRSPoint bad conversion from: "+t;var a=t.charAt(o++);if(a<="A"||"B"===a||"Y"===a||a>="Z"||"I"===a||"O"===a)throw"MGRSPoint zone letter "+a+" not handled: "+t;n=t.substring(o,o+=2);for(var h=wt(s),u=function(t,e){for(var r=ht.charCodeAt(e-1),n=1e5,i=!1;r!==t.charCodeAt(0);){if(++r===lt&&r++,r===ft&&r++,r>90){if(i)throw"Bad character: "+t;r=ct,i=!0}n+=1e5}return n}(n.charAt(0),h),c=function(t,e){if(t>"V")throw"MGRSPoint given invalid Northing "+t;for(var r=ut.charCodeAt(e-1),n=0,i=!1;r!==t.charCodeAt(0);){if(++r===lt&&r++,r===ft&&r++,r>86){if(i)throw"Bad character: "+t;r=ct,i=!0}n+=1e5}return n}(n.charAt(1),h);c<Mt(a);)c+=2e6;var l=r-o;if(l%2!=0)throw"MGRSPoint has to have an even number \nof digits after the zone letter and two 100km letters - front \nhalf for easting meters, second half for \nnorthing meters"+t;var f,p,d,y=l/2,g=0,m=0;return y>0&&(f=1e5/Math.pow(10,y),p=t.substring(o,o+y),g=parseFloat(p)*f,d=t.substring(o+y),m=parseFloat(d)*f),{easting:g+u,northing:m+c,zoneLetter:a,zoneNumber:s,accuracy:f}}function Mt(t){var e;switch(t){case"C":e=11e5;break;case"D":e=2e6;break;case"E":e=28e5;break;case"F":e=37e5;break;case"G":e=46e5;break;case"H":e=55e5;break;case"J":e=64e5;break;case"K":e=73e5;break;case"L":e=82e5;break;case"M":e=91e5;break;case"N":e=0;break;case"P":e=8e5;break;case"Q":e=17e5;break;case"R":e=26e5;break;case"S":e=35e5;break;case"T":e=44e5;break;case"U":e=53e5;break;case"V":e=62e5;break;case"W":e=7e6;break;case"X":e=79e5;break;default:e=-1}if(e>=0)return e;throw"Invalid zone letter: "+t}function _t(t,e,r){if(!(this instanceof _t))return new _t(t,e,r);if(Array.isArray(t))this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("object"==typeof t)this.x=t.x,this.y=t.y,this.z=t.z||0;else if("string"==typeof t&&void 0===e){var n=t.split(",");this.x=parseFloat(n[0],10),this.y=parseFloat(n[1],10),this.z=parseFloat(n[2],10)||0}else this.x=t,this.y=e,this.z=r||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}_t.fromMGRS=function(t){return new _t(yt(t))},_t.prototype.toMGRS=function(t){return dt([this.x,this.y],t)};const xt=_t;var Et=.046875,St=.01953125,Ot=.01068115234375;function Tt(t){var e=[];e[0]=1-t*(.25+t*(Et+t*(St+t*Ot))),e[1]=t*(.75-t*(Et+t*(St+t*Ot)));var r=t*t;return e[2]=r*(.46875-t*(.013020833333333334+.007120768229166667*t)),r*=t,e[3]=r*(.3645833333333333-.005696614583333333*t),e[4]=r*t*.3076171875,e}function It(t,e,r,n){return r*=e,e*=e,n[0]*t-r*(n[1]+e*(n[2]+e*(n[3]+e*n[4])))}function Nt(t,e,r){for(var n=1/(1-e),i=t,o=20;o;--o){var s=Math.sin(i),a=1-e*s*s;if(i-=a=(It(i,s,Math.cos(i),r)-t)*(a*Math.sqrt(a))*n,Math.abs(a)<u)return i}return i}const Pt={init:function(){this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.es&&(this.en=Tt(this.es),this.ml0=It(this.lat0,Math.sin(this.lat0),Math.cos(this.lat0),this.en))},forward:function(t){var e,r,n,i=t.x,o=t.y,s=F(i-this.long0),a=Math.sin(o),h=Math.cos(o);if(this.es){var c=h*s,l=Math.pow(c,2),f=this.ep2*Math.pow(h,2),p=Math.pow(f,2),d=Math.abs(h)>u?Math.tan(o):0,y=Math.pow(d,2),g=Math.pow(y,2);e=1-this.es*Math.pow(a,2),c/=Math.sqrt(e);var m=It(o,a,h,this.en);r=this.a*(this.k0*c*(1+l/6*(1-y+f+l/20*(5-18*y+g+14*f-58*y*f+l/42*(61+179*g-g*y-479*y)))))+this.x0,n=this.a*(this.k0*(m-this.ml0+a*s*c/2*(1+l/12*(5-y+9*f+4*p+l/30*(61+g-58*y+270*f-330*y*f+l/56*(1385+543*g-g*y-3111*y))))))+this.y0}else{var v=h*Math.sin(s);if(Math.abs(Math.abs(v)-1)<u)return 93;if(r=.5*this.a*this.k0*Math.log((1+v)/(1-v))+this.x0,n=h*Math.cos(s)/Math.sqrt(1-Math.pow(v,2)),(v=Math.abs(n))>=1){if(v-1>u)return 93;n=0}else n=Math.acos(n);o<0&&(n=-n),n=this.a*this.k0*(n-this.lat0)+this.y0}return t.x=r,t.y=n,t},inverse:function(t){var e,r,n,i,o=(t.x-this.x0)*(1/this.a),s=(t.y-this.y0)*(1/this.a);if(this.es)if(r=Nt(e=this.ml0+s/this.k0,this.es,this.en),Math.abs(r)<h){var a=Math.sin(r),c=Math.cos(r),l=Math.abs(c)>u?Math.tan(r):0,f=this.ep2*Math.pow(c,2),p=Math.pow(f,2),d=Math.pow(l,2),y=Math.pow(d,2);e=1-this.es*Math.pow(a,2);var g=o*Math.sqrt(e)/this.k0,m=Math.pow(g,2);n=r-(e*=l)*m/(1-this.es)*.5*(1-m/12*(5+3*d-9*f*d+f-4*p-m/30*(61+90*d-252*f*d+45*y+46*f-m/56*(1385+3633*d+4095*y+1574*y*d)))),i=F(this.long0+g*(1-m/6*(1+2*d+f-m/20*(5+28*d+24*y+8*f*d+6*f-m/42*(61+662*d+1320*y+720*y*d))))/c)}else n=h*j(s),i=0;else{var v=Math.exp(o/this.k0),w=.5*(v-1/v),b=this.lat0+s/this.k0,M=Math.cos(b);e=Math.sqrt((1-Math.pow(M,2))/(1+Math.pow(w,2))),n=Math.asin(e),s<0&&(n=-n),i=0===w&&0===M?0:F(Math.atan2(w,M)+this.long0)}return t.x=i,t.y=n,t},names:["Transverse_Mercator","Transverse Mercator","tmerc"]};function At(t){var e=Math.exp(t);return(e-1/e)/2}function Ct(t,e){t=Math.abs(t),e=Math.abs(e);var r=Math.max(t,e),n=Math.min(t,e)/(r||1);return r*Math.sqrt(1+Math.pow(n,2))}function Dt(t,e){for(var r,n=2*Math.cos(2*e),i=t.length-1,o=t[i],s=0;--i>=0;)r=n*o-s+t[i],s=o,o=r;return e+r*Math.sin(2*e)}function kt(t,e,r){for(var n,i,o=Math.sin(e),s=Math.cos(e),a=At(r),h=function(t){var e=Math.exp(t);return(e+1/e)/2}(r),u=2*s*h,c=-2*o*a,l=t.length-1,f=t[l],p=0,d=0,y=0;--l>=0;)n=d,i=p,f=u*(d=f)-n-c*(p=y)+t[l],y=c*d-i+u*p;return[(u=o*h)*f-(c=s*a)*y,u*y+c*f]}const Lt={init:function(){if(void 0===this.es||this.es<=0)throw new Error("incorrect elliptical usage");this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),e=t/(2-t),r=e;this.cgb[0]=e*(2+e*(-2/3+e*(e*(116/45+e*(26/45+e*(-2854/675)))-2))),this.cbg[0]=e*(e*(2/3+e*(4/3+e*(-82/45+e*(32/45+e*(4642/4725)))))-2),r*=e,this.cgb[1]=r*(7/3+e*(e*(-227/45+e*(2704/315+e*(2323/945)))-1.6)),this.cbg[1]=r*(5/3+e*(-16/15+e*(-13/9+e*(904/315+e*(-1522/945))))),r*=e,this.cgb[2]=r*(56/15+e*(-136/35+e*(-1262/105+e*(73814/2835)))),this.cbg[2]=r*(-26/15+e*(34/21+e*(1.6+e*(-12686/2835)))),r*=e,this.cgb[3]=r*(4279/630+e*(-332/35+e*(-399572/14175))),this.cbg[3]=r*(1237/630+e*(e*(-24832/14175)-2.4)),r*=e,this.cgb[4]=r*(4174/315+e*(-144838/6237)),this.cbg[4]=r*(-734/315+e*(109598/31185)),r*=e,this.cgb[5]=r*(601676/22275),this.cbg[5]=r*(444337/155925),r=Math.pow(e,2),this.Qn=this.k0/(1+e)*(1+r*(1/4+r*(1/64+r/256))),this.utg[0]=e*(e*(2/3+e*(-37/96+e*(1/360+e*(81/512+e*(-96199/604800)))))-.5),this.gtu[0]=e*(.5+e*(-2/3+e*(5/16+e*(41/180+e*(-127/288+e*(7891/37800)))))),this.utg[1]=r*(-1/48+e*(-1/15+e*(437/1440+e*(-46/105+e*(1118711/3870720))))),this.gtu[1]=r*(13/48+e*(e*(557/1440+e*(281/630+e*(-1983433/1935360)))-.6)),r*=e,this.utg[2]=r*(-17/480+e*(37/840+e*(209/4480+e*(-5569/90720)))),this.gtu[2]=r*(61/240+e*(-103/140+e*(15061/26880+e*(167603/181440)))),r*=e,this.utg[3]=r*(-4397/161280+e*(11/504+e*(830251/7257600))),this.gtu[3]=r*(49561/161280+e*(-179/168+e*(6601661/7257600))),r*=e,this.utg[4]=r*(-4583/161280+e*(108847/3991680)),this.gtu[4]=r*(34729/80640+e*(-3418889/1995840)),r*=e,this.utg[5]=r*(-20648693/638668800),this.gtu[5]=.6650675310896665*r;var n=Dt(this.cbg,this.lat0);this.Zb=-this.Qn*(n+function(t,e){for(var r,n=2*Math.cos(e),i=t.length-1,o=t[i],s=0;--i>=0;)r=n*o-s+t[i],s=o,o=r;return Math.sin(e)*r}(this.gtu,2*n))},forward:function(t){var e=F(t.x-this.long0),r=t.y;r=Dt(this.cbg,r);var n=Math.sin(r),i=Math.cos(r),o=Math.sin(e),s=Math.cos(e);r=Math.atan2(n,s*i),e=Math.atan2(o*i,Ct(n,i*s)),e=function(t){var e=Math.abs(t);return e=function(t){var e=1+t,r=e-1;return 0===r?t:t*Math.log(e)/r}(e*(1+e/(Ct(1,e)+1))),t<0?-e:e}(Math.tan(e));var a,h,u=kt(this.gtu,2*r,2*e);return r+=u[0],e+=u[1],Math.abs(e)<=2.623395162778?(a=this.a*(this.Qn*e)+this.x0,h=this.a*(this.Qn*r+this.Zb)+this.y0):(a=1/0,h=1/0),t.x=a,t.y=h,t},inverse:function(t){var e,r,n=(t.x-this.x0)*(1/this.a),i=(t.y-this.y0)*(1/this.a);if(i=(i-this.Zb)/this.Qn,n/=this.Qn,Math.abs(n)<=2.623395162778){var o=kt(this.utg,2*i,2*n);i+=o[0],n+=o[1],n=Math.atan(At(n));var s=Math.sin(i),a=Math.cos(i),h=Math.sin(n),u=Math.cos(n);i=Math.atan2(s*u,Ct(h,u*a)),e=F((n=Math.atan2(h,u*a))+this.long0),r=Dt(this.cgb,i)}else e=1/0,r=1/0;return t.x=e,t.y=r,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc"]},jt={init:function(){var t=function(t,e){if(void 0===t){if((t=Math.floor(30*(F(e)+Math.PI)/Math.PI)+1)<0)return 0;if(t>60)return 60}return t}(this.zone,this.long0);if(void 0===t)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(t)-183)*c,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Lt.init.apply(this),this.forward=Lt.forward,this.inverse=Lt.inverse},names:["Universal Transverse Mercator System","utm"],dependsOn:"etmerc"};function Ft(t,e){return Math.pow((1-t)/(1+t),e)}const Rt={init:function(){var t=Math.sin(this.lat0),e=Math.cos(this.lat0);e*=e,this.rc=Math.sqrt(1-this.es)/(1-this.es*t*t),this.C=Math.sqrt(1+this.es*e*e/(1-this.es)),this.phic0=Math.asin(t/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+f)/(Math.pow(Math.tan(.5*this.lat0+f),this.C)*Ft(this.e*t,this.ratexp))},forward:function(t){var e=t.x,r=t.y;return t.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*r+f),this.C)*Ft(this.e*Math.sin(r),this.ratexp))-h,t.x=this.C*e,t},inverse:function(t){for(var e=t.x/this.C,r=t.y,n=Math.pow(Math.tan(.5*r+f)/this.K,1/this.C),i=20;i>0&&(r=2*Math.atan(n*Ft(this.e*Math.sin(t.y),-.5*this.e))-h,!(Math.abs(r-t.y)<1e-14));--i)t.y=r;return i?(t.x=e,t.y=r,t):null},names:["gauss"]},Bt={init:function(){Rt.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))},forward:function(t){var e,r,n,i;return t.x=F(t.x-this.long0),Rt.forward.apply(this,[t]),e=Math.sin(t.y),r=Math.cos(t.y),n=Math.cos(t.x),i=this.k0*this.R2/(1+this.sinc0*e+this.cosc0*r*n),t.x=i*r*Math.sin(t.x),t.y=i*(this.cosc0*e-this.sinc0*r*n),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var e,r,n,i,o;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,o=Math.sqrt(t.x*t.x+t.y*t.y)){var s=2*Math.atan2(o,this.R2);e=Math.sin(s),r=Math.cos(s),i=Math.asin(r*this.sinc0+t.y*e*this.cosc0/o),n=Math.atan2(t.x*e,o*this.cosc0*r-t.y*this.sinc0*e)}else i=this.phic0,n=0;return t.x=n,t.y=i,Rt.inverse.apply(this,[t]),t.x=F(t.x+this.long0),t},names:["Stereographic_North_Pole","Oblique_Stereographic","Polar_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"]},Gt={init:function(){this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=u&&(this.k0=.5*(1+j(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=u&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=u&&(this.k0=.5*this.cons*L(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/R(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=L(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-h,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))},forward:function(t){var e,r,n,i,o,s,a=t.x,c=t.y,l=Math.sin(c),f=Math.cos(c),p=F(a-this.long0);return Math.abs(Math.abs(a-this.long0)-Math.PI)<=u&&Math.abs(c+this.lat0)<=u?(t.x=NaN,t.y=NaN,t):this.sphere?(e=2*this.k0/(1+this.sinlat0*l+this.coslat0*f*Math.cos(p)),t.x=this.a*e*f*Math.sin(p)+this.x0,t.y=this.a*e*(this.coslat0*l-this.sinlat0*f*Math.cos(p))+this.y0,t):(r=2*Math.atan(this.ssfn_(c,l,this.e))-h,i=Math.cos(r),n=Math.sin(r),Math.abs(this.coslat0)<=u?(o=R(this.e,c*this.con,this.con*l),s=2*this.a*this.k0*o/this.cons,t.x=this.x0+s*Math.sin(a-this.long0),t.y=this.y0-this.con*s*Math.cos(a-this.long0),t):(Math.abs(this.sinlat0)<u?(e=2*this.a*this.k0/(1+i*Math.cos(p)),t.y=e*n):(e=2*this.a*this.k0*this.ms1/(this.cosX0*(1+this.sinX0*n+this.cosX0*i*Math.cos(p))),t.y=e*(this.cosX0*n-this.sinX0*i*Math.cos(p))+this.y0),t.x=e*i*Math.sin(p)+this.x0,t))},inverse:function(t){var e,r,n,i,o;t.x-=this.x0,t.y-=this.y0;var s=Math.sqrt(t.x*t.x+t.y*t.y);if(this.sphere){var a=2*Math.atan(s/(2*this.a*this.k0));return e=this.long0,r=this.lat0,s<=u?(t.x=e,t.y=r,t):(r=Math.asin(Math.cos(a)*this.sinlat0+t.y*Math.sin(a)*this.coslat0/s),e=Math.abs(this.coslat0)<u?this.lat0>0?F(this.long0+Math.atan2(t.x,-1*t.y)):F(this.long0+Math.atan2(t.x,t.y)):F(this.long0+Math.atan2(t.x*Math.sin(a),s*this.coslat0*Math.cos(a)-t.y*this.sinlat0*Math.sin(a))),t.x=e,t.y=r,t)}if(Math.abs(this.coslat0)<=u){if(s<=u)return r=this.lat0,e=this.long0,t.x=e,t.y=r,t;t.x*=this.con,t.y*=this.con,n=s*this.cons/(2*this.a*this.k0),r=this.con*B(this.e,n),e=this.con*F(this.con*this.long0+Math.atan2(t.x,-1*t.y))}else i=2*Math.atan(s*this.cosX0/(2*this.a*this.k0*this.ms1)),e=this.long0,s<=u?o=this.X0:(o=Math.asin(Math.cos(i)*this.sinX0+t.y*Math.sin(i)*this.cosX0/s),e=F(this.long0+Math.atan2(t.x*Math.sin(i),s*this.cosX0*Math.cos(i)-t.y*this.sinX0*Math.sin(i)))),r=-1*B(this.e,Math.tan(.5*(h+o)));return t.x=e,t.y=r,t},names:["stere","Stereographic_South_Pole","Polar Stereographic (variant B)"],ssfn_:function(t,e,r){return e*=r,Math.tan(.5*(h+t))*Math.pow((1-e)/(1+e),.5*r)}},Ut={init:function(){var t=this.lat0;this.lambda0=this.long0;var e=Math.sin(t),r=this.a,n=1/this.rf,i=2*n-Math.pow(n,2),o=this.e=Math.sqrt(i);this.R=this.k0*r*Math.sqrt(1-i)/(1-i*Math.pow(e,2)),this.alpha=Math.sqrt(1+i/(1-i)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(e/this.alpha);var s=Math.log(Math.tan(Math.PI/4+this.b0/2)),a=Math.log(Math.tan(Math.PI/4+t/2)),h=Math.log((1+o*e)/(1-o*e));this.K=s-this.alpha*a+this.alpha*o/2*h},forward:function(t){var e=Math.log(Math.tan(Math.PI/4-t.y/2)),r=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),n=-this.alpha*(e+r)+this.K,i=2*(Math.atan(Math.exp(n))-Math.PI/4),o=this.alpha*(t.x-this.lambda0),s=Math.atan(Math.sin(o)/(Math.sin(this.b0)*Math.tan(i)+Math.cos(this.b0)*Math.cos(o))),a=Math.asin(Math.cos(this.b0)*Math.sin(i)-Math.sin(this.b0)*Math.cos(i)*Math.cos(o));return t.y=this.R/2*Math.log((1+Math.sin(a))/(1-Math.sin(a)))+this.y0,t.x=this.R*s+this.x0,t},inverse:function(t){for(var e=t.x-this.x0,r=t.y-this.y0,n=e/this.R,i=2*(Math.atan(Math.exp(r/this.R))-Math.PI/4),o=Math.asin(Math.cos(this.b0)*Math.sin(i)+Math.sin(this.b0)*Math.cos(i)*Math.cos(n)),s=Math.atan(Math.sin(n)/(Math.cos(this.b0)*Math.cos(n)-Math.sin(this.b0)*Math.tan(i))),a=this.lambda0+s/this.alpha,h=0,u=o,c=-1e3,l=0;Math.abs(u-c)>1e-7;){if(++l>20)return;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+o/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(u))/2)),c=u,u=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=a,t.y=u,t},names:["somerc"]},qt={init:function(){this.no_off=this.no_off||!1,this.no_rot=this.no_rot||!1,isNaN(this.k0)&&(this.k0=1);var t=Math.sin(this.lat0),e=Math.cos(this.lat0),r=this.e*t;this.bl=Math.sqrt(1+this.es/(1-this.es)*Math.pow(e,4)),this.al=this.a*this.bl*this.k0*Math.sqrt(1-this.es)/(1-r*r);var n,i,o=R(this.e,this.lat0,t),s=this.bl/e*Math.sqrt((1-this.es)/(1-r*r));if(s*s<1&&(s=1),isNaN(this.longc)){var a=R(this.e,this.lat1,Math.sin(this.lat1)),h=R(this.e,this.lat2,Math.sin(this.lat2));this.lat0>=0?this.el=(s+Math.sqrt(s*s-1))*Math.pow(o,this.bl):this.el=(s-Math.sqrt(s*s-1))*Math.pow(o,this.bl);var u=Math.pow(a,this.bl),c=Math.pow(h,this.bl);i=.5*((n=this.el/u)-1/n);var l=(this.el*this.el-c*u)/(this.el*this.el+c*u),f=(c-u)/(c+u),p=F(this.long1-this.long2);this.long0=.5*(this.long1+this.long2)-Math.atan(l*Math.tan(.5*this.bl*p)/f)/this.bl,this.long0=F(this.long0);var d=F(this.long1-this.long0);this.gamma0=Math.atan(Math.sin(this.bl*d)/i),this.alpha=Math.asin(s*Math.sin(this.gamma0))}else n=this.lat0>=0?s+Math.sqrt(s*s-1):s-Math.sqrt(s*s-1),this.el=n*Math.pow(o,this.bl),i=.5*(n-1/n),this.gamma0=Math.asin(Math.sin(this.alpha)/s),this.long0=this.longc-Math.asin(i*Math.tan(this.gamma0))/this.bl;this.no_off?this.uc=0:this.lat0>=0?this.uc=this.al/this.bl*Math.atan2(Math.sqrt(s*s-1),Math.cos(this.alpha)):this.uc=-1*this.al/this.bl*Math.atan2(Math.sqrt(s*s-1),Math.cos(this.alpha))},forward:function(t){var e,r,n,i=t.x,o=t.y,s=F(i-this.long0);if(Math.abs(Math.abs(o)-h)<=u)n=o>0?-1:1,r=this.al/this.bl*Math.log(Math.tan(f+n*this.gamma0*.5)),e=-1*n*h*this.al/this.bl;else{var a=R(this.e,o,Math.sin(o)),c=this.el/Math.pow(a,this.bl),l=.5*(c-1/c),p=.5*(c+1/c),d=Math.sin(this.bl*s),y=(l*Math.sin(this.gamma0)-d*Math.cos(this.gamma0))/p;r=Math.abs(Math.abs(y)-1)<=u?Number.POSITIVE_INFINITY:.5*this.al*Math.log((1-y)/(1+y))/this.bl,e=Math.abs(Math.cos(this.bl*s))<=u?this.al*this.bl*s:this.al*Math.atan2(l*Math.cos(this.gamma0)+d*Math.sin(this.gamma0),Math.cos(this.bl*s))/this.bl}return this.no_rot?(t.x=this.x0+e,t.y=this.y0+r):(e-=this.uc,t.x=this.x0+r*Math.cos(this.alpha)+e*Math.sin(this.alpha),t.y=this.y0+e*Math.cos(this.alpha)-r*Math.sin(this.alpha)),t},inverse:function(t){var e,r;this.no_rot?(r=t.y-this.y0,e=t.x-this.x0):(r=(t.x-this.x0)*Math.cos(this.alpha)-(t.y-this.y0)*Math.sin(this.alpha),e=(t.y-this.y0)*Math.cos(this.alpha)+(t.x-this.x0)*Math.sin(this.alpha),e+=this.uc);var n=Math.exp(-1*this.bl*r/this.al),i=.5*(n-1/n),o=.5*(n+1/n),s=Math.sin(this.bl*e/this.al),a=(s*Math.cos(this.gamma0)+i*Math.sin(this.gamma0))/o,c=Math.pow(this.el/Math.sqrt((1+a)/(1-a)),1/this.bl);return Math.abs(a-1)<u?(t.x=this.long0,t.y=h):Math.abs(a+1)<u?(t.x=this.long0,t.y=-1*h):(t.y=B(this.e,c),t.x=F(this.long0-Math.atan2(i*Math.cos(this.gamma0)-s*Math.sin(this.gamma0),Math.cos(this.bl*e/this.al))/this.bl)),t},names:["Hotine_Oblique_Mercator","Hotine Oblique Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin","Hotine_Oblique_Mercator_Azimuth_Center","omerc"]},zt={init:function(){if(this.lat2||(this.lat2=this.lat1),this.k0||(this.k0=1),this.x0=this.x0||0,this.y0=this.y0||0,!(Math.abs(this.lat1+this.lat2)<u)){var t=this.b/this.a;this.e=Math.sqrt(1-t*t);var e=Math.sin(this.lat1),r=Math.cos(this.lat1),n=L(this.e,e,r),i=R(this.e,this.lat1,e),o=Math.sin(this.lat2),s=Math.cos(this.lat2),a=L(this.e,o,s),h=R(this.e,this.lat2,o),c=R(this.e,this.lat0,Math.sin(this.lat0));Math.abs(this.lat1-this.lat2)>u?this.ns=Math.log(n/a)/Math.log(i/h):this.ns=e,isNaN(this.ns)&&(this.ns=e),this.f0=n/(this.ns*Math.pow(i,this.ns)),this.rh=this.a*this.f0*Math.pow(c,this.ns),this.title||(this.title="Lambert Conformal Conic")}},forward:function(t){var e=t.x,r=t.y;Math.abs(2*Math.abs(r)-Math.PI)<=u&&(r=j(r)*(h-2e-10));var n,i,o=Math.abs(Math.abs(r)-h);if(o>u)n=R(this.e,r,Math.sin(r)),i=this.a*this.f0*Math.pow(n,this.ns);else{if((o=r*this.ns)<=0)return null;i=0}var s=this.ns*F(e-this.long0);return t.x=this.k0*(i*Math.sin(s))+this.x0,t.y=this.k0*(this.rh-i*Math.cos(s))+this.y0,t},inverse:function(t){var e,r,n,i,o,s=(t.x-this.x0)/this.k0,a=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(e=Math.sqrt(s*s+a*a),r=1):(e=-Math.sqrt(s*s+a*a),r=-1);var u=0;if(0!==e&&(u=Math.atan2(r*s,r*a)),0!==e||this.ns>0){if(r=1/this.ns,n=Math.pow(e/(this.a*this.f0),r),-9999===(i=B(this.e,n)))return null}else i=-h;return o=F(u/this.ns+this.long0),t.x=o,t.y=i,t},names:["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_2SP","lcc"]},Vt={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var e,r,n,i,o,s,a,h=t.x,u=t.y,c=F(h-this.long0);return e=Math.pow((1+this.e*Math.sin(u))/(1-this.e*Math.sin(u)),this.alfa*this.e/2),r=2*(Math.atan(this.k*Math.pow(Math.tan(u/2+this.s45),this.alfa)/e)-this.s45),n=-c*this.alfa,i=Math.asin(Math.cos(this.ad)*Math.sin(r)+Math.sin(this.ad)*Math.cos(r)*Math.cos(n)),o=Math.asin(Math.cos(r)*Math.sin(n)/Math.cos(i)),s=this.n*o,a=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(i/2+this.s45),this.n),t.y=a*Math.cos(s)/1,t.x=a*Math.sin(s)/1,this.czech||(t.y*=-1,t.x*=-1),t},inverse:function(t){var e,r,n,i,o,s,a,h=t.x;t.x=t.y,t.y=h,this.czech||(t.y*=-1,t.x*=-1),o=Math.sqrt(t.x*t.x+t.y*t.y),i=Math.atan2(t.y,t.x)/Math.sin(this.s0),n=2*(Math.atan(Math.pow(this.ro0/o,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),e=Math.asin(Math.cos(this.ad)*Math.sin(n)-Math.sin(this.ad)*Math.cos(n)*Math.cos(i)),r=Math.asin(Math.cos(n)*Math.sin(i)/Math.cos(e)),t.x=this.long0-r/this.alfa,s=e,a=0;var u=0;do{t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(e/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(s))/(1-this.e*Math.sin(s)),this.e/2))-this.s45),Math.abs(s-t.y)<1e-10&&(a=1),s=t.y,u+=1}while(0===a&&u<15);return u>=15?null:t},names:["Krovak","krovak"]};function Wt(t,e,r,n,i){return t*i-e*Math.sin(2*i)+r*Math.sin(4*i)-n*Math.sin(6*i)}function Xt(t){return 1-.25*t*(1+t/16*(3+1.25*t))}function $t(t){return.375*t*(1+.25*t*(1+.46875*t))}function Yt(t){return.05859375*t*t*(1+.75*t)}function Qt(t){return t*t*t*(35/3072)}function Kt(t,e,r){var n=e*r;return t/Math.sqrt(1-n*n)}function Ht(t){return Math.abs(t)<h?t:t-j(t)*Math.PI}function Jt(t,e,r,n,i){var o,s;o=t/e;for(var a=0;a<15;a++)if(o+=s=(t-(e*o-r*Math.sin(2*o)+n*Math.sin(4*o)-i*Math.sin(6*o)))/(e-2*r*Math.cos(2*o)+4*n*Math.cos(4*o)-6*i*Math.cos(6*o)),Math.abs(s)<=1e-10)return o;return NaN}const Zt={init:function(){this.sphere||(this.e0=Xt(this.es),this.e1=$t(this.es),this.e2=Yt(this.es),this.e3=Qt(this.es),this.ml0=this.a*Wt(this.e0,this.e1,this.e2,this.e3,this.lat0))},forward:function(t){var e,r,n=t.x,i=t.y;if(n=F(n-this.long0),this.sphere)e=this.a*Math.asin(Math.cos(i)*Math.sin(n)),r=this.a*(Math.atan2(Math.tan(i),Math.cos(n))-this.lat0);else{var o=Math.sin(i),s=Math.cos(i),a=Kt(this.a,this.e,o),h=Math.tan(i)*Math.tan(i),u=n*Math.cos(i),c=u*u,l=this.es*s*s/(1-this.es);e=a*u*(1-c*h*(1/6-(8-h+8*l)*c/120)),r=this.a*Wt(this.e0,this.e1,this.e2,this.e3,i)-this.ml0+a*o/s*c*(.5+(5-h+6*l)*c/24)}return t.x=e+this.x0,t.y=r+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var e,r,n=t.x/this.a,i=t.y/this.a;if(this.sphere){var o=i+this.lat0;e=Math.asin(Math.sin(o)*Math.cos(n)),r=Math.atan2(Math.tan(n),Math.cos(o))}else{var s=Jt(this.ml0/this.a+i,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(s)-h)<=u)return t.x=this.long0,t.y=h,i<0&&(t.y*=-1),t;var a=Kt(this.a,this.e,Math.sin(s)),c=a*a*a/this.a/this.a*(1-this.es),l=Math.pow(Math.tan(s),2),f=n*this.a/a,p=f*f;e=s-a*Math.tan(s)/c*f*f*(.5-(1+3*l)*f*f/24),r=f*(1-p*(l/3+(1+3*l)*l*p/15))/Math.cos(s)}return t.x=F(r+this.long0),t.y=Ht(e),t},names:["Cassini","Cassini_Soldner","cass"]};function te(t,e){var r;return t>1e-7?(1-t*t)*(e/(1-(r=t*e)*r)-.5/t*Math.log((1-r)/(1+r))):2*e}const ee={init:function(){var t,e=Math.abs(this.lat0);if(Math.abs(e-h)<u?this.mode=this.lat0<0?this.S_POLE:this.N_POLE:Math.abs(e)<u?this.mode=this.EQUIT:this.mode=this.OBLIQ,this.es>0)switch(this.qp=te(this.e,1),this.mmf=.5/(1-this.es),this.apa=function(t){var e,r=[];return r[0]=.3333333333333333*t,e=t*t,r[0]+=.17222222222222222*e,r[1]=.06388888888888888*e,e*=t,r[0]+=.10257936507936508*e,r[1]+=.0664021164021164*e,r[2]=.016415012942191543*e,r}(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=te(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var e,r,n,i,o,s,a,c,l,p,d=t.x,y=t.y;if(d=F(d-this.long0),this.sphere){if(o=Math.sin(y),p=Math.cos(y),n=Math.cos(d),this.mode===this.OBLIQ||this.mode===this.EQUIT){if((r=this.mode===this.EQUIT?1+p*n:1+this.sinph0*o+this.cosph0*p*n)<=u)return null;e=(r=Math.sqrt(2/r))*p*Math.sin(d),r*=this.mode===this.EQUIT?o:this.cosph0*o-this.sinph0*p*n}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(n=-n),Math.abs(y+this.lat0)<u)return null;r=f-.5*y,e=(r=2*(this.mode===this.S_POLE?Math.cos(r):Math.sin(r)))*Math.sin(d),r*=n}}else{switch(a=0,c=0,l=0,n=Math.cos(d),i=Math.sin(d),o=Math.sin(y),s=te(this.e,o),this.mode!==this.OBLIQ&&this.mode!==this.EQUIT||(a=s/this.qp,c=Math.sqrt(1-a*a)),this.mode){case this.OBLIQ:l=1+this.sinb1*a+this.cosb1*c*n;break;case this.EQUIT:l=1+c*n;break;case this.N_POLE:l=h+y,s=this.qp-s;break;case this.S_POLE:l=y-h,s=this.qp+s}if(Math.abs(l)<u)return null;switch(this.mode){case this.OBLIQ:case this.EQUIT:l=Math.sqrt(2/l),r=this.mode===this.OBLIQ?this.ymf*l*(this.cosb1*a-this.sinb1*c*n):(l=Math.sqrt(2/(1+c*n)))*a*this.ymf,e=this.xmf*l*c*i;break;case this.N_POLE:case this.S_POLE:s>=0?(e=(l=Math.sqrt(s))*i,r=n*(this.mode===this.S_POLE?l:-l)):e=r=0}}return t.x=this.a*e+this.x0,t.y=this.a*r+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var e,r,n,i,o,s,a,c,l,f,p=t.x/this.a,d=t.y/this.a;if(this.sphere){var y,g=0,m=0;if((r=.5*(y=Math.sqrt(p*p+d*d)))>1)return null;switch(r=2*Math.asin(r),this.mode!==this.OBLIQ&&this.mode!==this.EQUIT||(m=Math.sin(r),g=Math.cos(r)),this.mode){case this.EQUIT:r=Math.abs(y)<=u?0:Math.asin(d*m/y),p*=m,d=g*y;break;case this.OBLIQ:r=Math.abs(y)<=u?this.lat0:Math.asin(g*this.sinph0+d*m*this.cosph0/y),p*=m*this.cosph0,d=(g-Math.sin(r)*this.sinph0)*y;break;case this.N_POLE:d=-d,r=h-r;break;case this.S_POLE:r-=h}e=0!==d||this.mode!==this.EQUIT&&this.mode!==this.OBLIQ?Math.atan2(p,d):0}else{if(a=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(p/=this.dd,d*=this.dd,(s=Math.sqrt(p*p+d*d))<u)return t.x=this.long0,t.y=this.lat0,t;i=2*Math.asin(.5*s/this.rq),n=Math.cos(i),p*=i=Math.sin(i),this.mode===this.OBLIQ?(a=n*this.sinb1+d*i*this.cosb1/s,o=this.qp*a,d=s*this.cosb1*n-d*this.sinb1*i):(a=d*i/s,o=this.qp*a,d=s*n)}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(d=-d),!(o=p*p+d*d))return t.x=this.long0,t.y=this.lat0,t;a=1-o/this.qp,this.mode===this.S_POLE&&(a=-a)}e=Math.atan2(p,d),f=(c=Math.asin(a))+c,r=c+(l=this.apa)[0]*Math.sin(f)+l[1]*Math.sin(f+f)+l[2]*Math.sin(f+f+f)}return t.x=F(this.long0+e),t.y=r,t},names:["Lambert Azimuthal Equal Area","Lambert_Azimuthal_Equal_Area","laea"],S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4};function re(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)}const ne={init:function(){Math.abs(this.lat1+this.lat2)<u||(this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e3=Math.sqrt(this.es),this.sin_po=Math.sin(this.lat1),this.cos_po=Math.cos(this.lat1),this.t1=this.sin_po,this.con=this.sin_po,this.ms1=L(this.e3,this.sin_po,this.cos_po),this.qs1=te(this.e3,this.sin_po,this.cos_po),this.sin_po=Math.sin(this.lat2),this.cos_po=Math.cos(this.lat2),this.t2=this.sin_po,this.ms2=L(this.e3,this.sin_po,this.cos_po),this.qs2=te(this.e3,this.sin_po,this.cos_po),this.sin_po=Math.sin(this.lat0),this.cos_po=Math.cos(this.lat0),this.t3=this.sin_po,this.qs0=te(this.e3,this.sin_po,this.cos_po),Math.abs(this.lat1-this.lat2)>u?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var e=t.x,r=t.y;this.sin_phi=Math.sin(r),this.cos_phi=Math.cos(r);var n=te(this.e3,this.sin_phi,this.cos_phi),i=this.a*Math.sqrt(this.c-this.ns0*n)/this.ns0,o=this.ns0*F(e-this.long0),s=i*Math.sin(o)+this.x0,a=this.rh-i*Math.cos(o)+this.y0;return t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(e=Math.sqrt(t.x*t.x+t.y*t.y),n=1):(e=-Math.sqrt(t.x*t.x+t.y*t.y),n=-1),i=0,0!==e&&(i=Math.atan2(n*t.x,n*t.y)),n=e*this.ns0/this.a,this.sphere?s=Math.asin((this.c-n*n)/(2*this.ns0)):(r=(this.c-n*n)/this.ns0,s=this.phi1z(this.e3,r)),o=F(i/this.ns0+this.long0),t.x=o,t.y=s,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,e){var r,n,i,o,s=re(.5*e);if(t<u)return s;for(var a=t*t,h=1;h<=25;h++)if(s+=o=.5*(i=1-(n=t*(r=Math.sin(s)))*n)*i/Math.cos(s)*(e/(1-a)-r/i+.5/t*Math.log((1-n)/(1+n))),Math.abs(o)<=1e-7)return s;return null}},ie={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var e,r,n,i,o,s,a,h=t.x,c=t.y;return n=F(h-this.long0),e=Math.sin(c),r=Math.cos(c),i=Math.cos(n),(o=this.sin_p14*e+this.cos_p14*r*i)>0||Math.abs(o)<=u?(s=this.x0+1*this.a*r*Math.sin(n)/o,a=this.y0+1*this.a*(this.cos_p14*e-this.sin_p14*r*i)/o):(s=this.x0+this.infinity_dist*r*Math.sin(n),a=this.y0+this.infinity_dist*(this.cos_p14*e-this.sin_p14*r*i)),t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(e=Math.sqrt(t.x*t.x+t.y*t.y))?(i=Math.atan2(e,this.rc),r=Math.sin(i),s=re((n=Math.cos(i))*this.sin_p14+t.y*r*this.cos_p14/e),o=Math.atan2(t.x*r,e*this.cos_p14*n-t.y*this.sin_p14*r),o=F(this.long0+o)):(s=this.phic0,o=0),t.x=o,t.y=s,t},names:["gnom"]},oe={init:function(){this.sphere||(this.k0=L(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var e,r,n=t.x,i=t.y,o=F(n-this.long0);if(this.sphere)e=this.x0+this.a*o*Math.cos(this.lat_ts),r=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var s=te(this.e,Math.sin(i));e=this.x0+this.a*this.k0*o,r=this.y0+this.a*s*.5/this.k0}return t.x=e,t.y=r,t},inverse:function(t){var e,r;return t.x-=this.x0,t.y-=this.y0,this.sphere?(e=F(this.long0+t.x/this.a/Math.cos(this.lat_ts)),r=Math.asin(t.y/this.a*Math.cos(this.lat_ts))):(r=function(t,e){var r=1-(1-t*t)/(2*t)*Math.log((1-t)/(1+t));if(Math.abs(Math.abs(e)-r)<1e-6)return e<0?-1*h:h;for(var n,i,o,s,a=Math.asin(.5*e),u=0;u<30;u++)if(i=Math.sin(a),o=Math.cos(a),s=t*i,a+=n=Math.pow(1-s*s,2)/(2*o)*(e/(1-t*t)-i/(1-s*s)+.5/t*Math.log((1-s)/(1+s))),Math.abs(n)<=1e-10)return a;return NaN}(this.e,2*t.y*this.k0/this.a),e=F(this.long0+t.x/(this.a*this.k0))),t.x=e,t.y=r,t},names:["cea"]},se={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)},forward:function(t){var e=t.x,r=t.y,n=F(e-this.long0),i=Ht(r-this.lat0);return t.x=this.x0+this.a*n*this.rc,t.y=this.y0+this.a*i,t},inverse:function(t){var e=t.x,r=t.y;return t.x=F(this.long0+(e-this.x0)/(this.a*this.rc)),t.y=Ht(this.lat0+(r-this.y0)/this.a),t},names:["Equirectangular","Equidistant_Cylindrical","eqc"]},ae={init:function(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Xt(this.es),this.e1=$t(this.es),this.e2=Yt(this.es),this.e3=Qt(this.es),this.ml0=this.a*Wt(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var e,r,n,i=t.x,o=t.y,s=F(i-this.long0);if(n=s*Math.sin(o),this.sphere)Math.abs(o)<=u?(e=this.a*s,r=-1*this.a*this.lat0):(e=this.a*Math.sin(n)/Math.tan(o),r=this.a*(Ht(o-this.lat0)+(1-Math.cos(n))/Math.tan(o)));else if(Math.abs(o)<=u)e=this.a*s,r=-1*this.ml0;else{var a=Kt(this.a,this.e,Math.sin(o))/Math.tan(o);e=a*Math.sin(n),r=this.a*Wt(this.e0,this.e1,this.e2,this.e3,o)-this.ml0+a*(1-Math.cos(n))}return t.x=e+this.x0,t.y=r+this.y0,t},inverse:function(t){var e,r,n,i,o,s,a,h,c;if(n=t.x-this.x0,i=t.y-this.y0,this.sphere)if(Math.abs(i+this.a*this.lat0)<=u)e=F(n/this.a+this.long0),r=0;else{var l;for(s=this.lat0+i/this.a,a=n*n/this.a/this.a+s*s,h=s,o=20;o;--o)if(h+=c=-1*(s*(h*(l=Math.tan(h))+1)-h-.5*(h*h+a)*l)/((h-s)/l-1),Math.abs(c)<=u){r=h;break}e=F(this.long0+Math.asin(n*Math.tan(h)/this.a)/Math.sin(r))}else if(Math.abs(i+this.ml0)<=u)r=0,e=F(this.long0+n/this.a);else{var f,p,d,y,g;for(s=(this.ml0+i)/this.a,a=n*n/this.a/this.a+s*s,h=s,o=20;o;--o)if(g=this.e*Math.sin(h),f=Math.sqrt(1-g*g)*Math.tan(h),p=this.a*Wt(this.e0,this.e1,this.e2,this.e3,h),d=this.e0-2*this.e1*Math.cos(2*h)+4*this.e2*Math.cos(4*h)-6*this.e3*Math.cos(6*h),h-=c=(s*(f*(y=p/this.a)+1)-y-.5*f*(y*y+a))/(this.es*Math.sin(2*h)*(y*y+a-2*s*y)/(4*f)+(s-y)*(f*d-2/Math.sin(2*h))-d),Math.abs(c)<=u){r=h;break}f=Math.sqrt(1-this.es*Math.pow(Math.sin(r),2))*Math.tan(r),e=F(this.long0+Math.asin(n*f/this.a)/Math.sin(r))}return t.x=e,t.y=r,t},names:["Polyconic","poly"]},he={init:function(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013},forward:function(t){var e,r=t.x,n=t.y-this.lat0,i=r-this.long0,o=n/a*1e-5,s=i,h=1,u=0;for(e=1;e<=10;e++)h*=o,u+=this.A[e]*h;var c,l=u,f=s,p=1,d=0,y=0,g=0;for(e=1;e<=6;e++)c=d*l+p*f,p=p*l-d*f,d=c,y=y+this.B_re[e]*p-this.B_im[e]*d,g=g+this.B_im[e]*p+this.B_re[e]*d;return t.x=g*this.a+this.x0,t.y=y*this.a+this.y0,t},inverse:function(t){var e,r,n=t.x,i=t.y,o=n-this.x0,s=(i-this.y0)/this.a,h=o/this.a,u=1,c=0,l=0,f=0;for(e=1;e<=6;e++)r=c*s+u*h,u=u*s-c*h,c=r,l=l+this.C_re[e]*u-this.C_im[e]*c,f=f+this.C_im[e]*u+this.C_re[e]*c;for(var p=0;p<this.iterations;p++){var d,y=l,g=f,m=s,v=h;for(e=2;e<=6;e++)d=g*l+y*f,y=y*l-g*f,g=d,m+=(e-1)*(this.B_re[e]*y-this.B_im[e]*g),v+=(e-1)*(this.B_im[e]*y+this.B_re[e]*g);y=1,g=0;var w=this.B_re[1],b=this.B_im[1];for(e=2;e<=6;e++)d=g*l+y*f,y=y*l-g*f,g=d,w+=e*(this.B_re[e]*y-this.B_im[e]*g),b+=e*(this.B_im[e]*y+this.B_re[e]*g);var M=w*w+b*b;l=(m*w+v*b)/M,f=(v*w-m*b)/M}var _=l,x=f,E=1,S=0;for(e=1;e<=9;e++)E*=_,S+=this.D[e]*E;var O=this.lat0+S*a*1e5,T=this.long0+x;return t.x=T,t.y=O,t},names:["New_Zealand_Map_Grid","nzmg"]},ue={init:function(){},forward:function(t){var e=t.x,r=t.y,n=F(e-this.long0),i=this.x0+this.a*n,o=this.y0+this.a*Math.log(Math.tan(Math.PI/4+r/2.5))*1.25;return t.x=i,t.y=o,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var e=F(this.long0+t.x/this.a),r=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Math.PI/4);return t.x=e,t.y=r,t},names:["Miller_Cylindrical","mill"]},ce={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Tt(this.es)},forward:function(t){var e,r,n=t.x,i=t.y;if(n=F(n-this.long0),this.sphere){if(this.m)for(var o=this.n*Math.sin(i),s=20;s;--s){var a=(this.m*i+Math.sin(i)-o)/(this.m+Math.cos(i));if(i-=a,Math.abs(a)<u)break}else i=1!==this.n?Math.asin(this.n*Math.sin(i)):i;e=this.a*this.C_x*n*(this.m+Math.cos(i)),r=this.a*this.C_y*i}else{var h=Math.sin(i),c=Math.cos(i);r=this.a*It(i,h,c,this.en),e=this.a*n*c/Math.sqrt(1-this.es*h*h)}return t.x=e,t.y=r,t},inverse:function(t){var e,r,n;return t.x-=this.x0,r=t.x/this.a,t.y-=this.y0,e=t.y/this.a,this.sphere?(e/=this.C_y,r/=this.C_x*(this.m+Math.cos(e)),this.m?e=re((this.m*e+Math.sin(e))/this.n):1!==this.n&&(e=re(Math.sin(e)/this.n)),r=F(r+this.long0),e=Ht(e)):(e=Nt(t.y/this.a,this.es,this.en),(n=Math.abs(e))<h?(n=Math.sin(e),r=F(this.long0+t.x*Math.sqrt(1-this.es*n*n)/(this.a*Math.cos(e)))):n-u<h&&(r=this.long0)),t.x=r,t.y=e,t},names:["Sinusoidal","sinu"]},le={init:function(){},forward:function(t){for(var e=t.x,r=t.y,n=F(e-this.long0),i=r,o=Math.PI*Math.sin(r);;){var s=-(i+Math.sin(i)-o)/(1+Math.cos(i));if(i+=s,Math.abs(s)<u)break}i/=2,Math.PI/2-Math.abs(r)<u&&(n=0);var a=.900316316158*this.a*n*Math.cos(i)+this.x0,h=1.4142135623731*this.a*Math.sin(i)+this.y0;return t.x=a,t.y=h,t},inverse:function(t){var e,r;t.x-=this.x0,t.y-=this.y0,r=t.y/(1.4142135623731*this.a),Math.abs(r)>.999999999999&&(r=.999999999999),e=Math.asin(r);var n=F(this.long0+t.x/(.900316316158*this.a*Math.cos(e)));n<-Math.PI&&(n=-Math.PI),n>Math.PI&&(n=Math.PI),r=(2*e+Math.sin(2*e))/Math.PI,Math.abs(r)>1&&(r=1);var i=Math.asin(r);return t.x=n,t.y=i,t},names:["Mollweide","moll"]},fe={init:function(){Math.abs(this.lat1+this.lat2)<u||(this.lat2=this.lat2||this.lat1,this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Xt(this.es),this.e1=$t(this.es),this.e2=Yt(this.es),this.e3=Qt(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=L(this.e,this.sinphi,this.cosphi),this.ml1=Wt(this.e0,this.e1,this.e2,this.e3,this.lat1),Math.abs(this.lat1-this.lat2)<u?this.ns=this.sinphi:(this.sinphi=Math.sin(this.lat2),this.cosphi=Math.cos(this.lat2),this.ms2=L(this.e,this.sinphi,this.cosphi),this.ml2=Wt(this.e0,this.e1,this.e2,this.e3,this.lat2),this.ns=(this.ms1-this.ms2)/(this.ml2-this.ml1)),this.g=this.ml1+this.ms1/this.ns,this.ml0=Wt(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0))},forward:function(t){var e,r=t.x,n=t.y;if(this.sphere)e=this.a*(this.g-n);else{var i=Wt(this.e0,this.e1,this.e2,this.e3,n);e=this.a*(this.g-i)}var o=this.ns*F(r-this.long0),s=this.x0+e*Math.sin(o),a=this.y0+this.rh-e*Math.cos(o);return t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i;t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns>=0?(r=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(r=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1);var o=0;return 0!==r&&(o=Math.atan2(e*t.x,e*t.y)),this.sphere?(i=F(this.long0+o/this.ns),n=Ht(this.g-r/this.a),t.x=i,t.y=n,t):(n=Jt(this.g-r/this.a,this.e0,this.e1,this.e2,this.e3),i=F(this.long0+o/this.ns),t.x=i,t.y=n,t)},names:["Equidistant_Conic","eqdc"]},pe={init:function(){this.R=this.a},forward:function(t){var e,r,n=t.x,i=t.y,o=F(n-this.long0);Math.abs(i)<=u&&(e=this.x0+this.R*o,r=this.y0);var s=re(2*Math.abs(i/Math.PI));(Math.abs(o)<=u||Math.abs(Math.abs(i)-h)<=u)&&(e=this.x0,r=i>=0?this.y0+Math.PI*this.R*Math.tan(.5*s):this.y0+Math.PI*this.R*-Math.tan(.5*s));var a=.5*Math.abs(Math.PI/o-o/Math.PI),c=a*a,l=Math.sin(s),f=Math.cos(s),p=f/(l+f-1),d=p*p,y=p*(2/l-1),g=y*y,m=Math.PI*this.R*(a*(p-g)+Math.sqrt(c*(p-g)*(p-g)-(g+c)*(d-g)))/(g+c);o<0&&(m=-m),e=this.x0+m;var v=c+p;return m=Math.PI*this.R*(y*v-a*Math.sqrt((g+c)*(c+1)-v*v))/(g+c),r=i>=0?this.y0+m:this.y0-m,t.x=e,t.y=r,t},inverse:function(t){var e,r,n,i,o,s,a,h,c,l,f,p;return t.x-=this.x0,t.y-=this.y0,f=Math.PI*this.R,o=(n=t.x/f)*n+(i=t.y/f)*i,f=3*(i*i/(h=-2*(s=-Math.abs(i)*(1+o))+1+2*i*i+o*o)+(2*(a=s-2*i*i+n*n)*a*a/h/h/h-9*s*a/h/h)/27)/(c=(s-a*a/3/h)/h)/(l=2*Math.sqrt(-c/3)),Math.abs(f)>1&&(f=f>=0?1:-1),p=Math.acos(f)/3,r=t.y>=0?(-l*Math.cos(p+Math.PI/3)-a/3/h)*Math.PI:-(-l*Math.cos(p+Math.PI/3)-a/3/h)*Math.PI,e=Math.abs(n)<u?this.long0:F(this.long0+Math.PI*(o-1+Math.sqrt(1+2*(n*n-i*i)+o*o))/2/n),t.x=e,t.y=r,t},names:["Van_der_Grinten_I","VanDerGrinten","vandg"]},de={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var e,r,n,i,o,s,a,c,l,f,p,d,y,g,m,v,w,b,M,_,x,E,S=t.x,O=t.y,T=Math.sin(t.y),I=Math.cos(t.y),N=F(S-this.long0);return this.sphere?Math.abs(this.sin_p12-1)<=u?(t.x=this.x0+this.a*(h-O)*Math.sin(N),t.y=this.y0-this.a*(h-O)*Math.cos(N),t):Math.abs(this.sin_p12+1)<=u?(t.x=this.x0+this.a*(h+O)*Math.sin(N),t.y=this.y0+this.a*(h+O)*Math.cos(N),t):(b=this.sin_p12*T+this.cos_p12*I*Math.cos(N),w=(v=Math.acos(b))?v/Math.sin(v):1,t.x=this.x0+this.a*w*I*Math.sin(N),t.y=this.y0+this.a*w*(this.cos_p12*T-this.sin_p12*I*Math.cos(N)),t):(e=Xt(this.es),r=$t(this.es),n=Yt(this.es),i=Qt(this.es),Math.abs(this.sin_p12-1)<=u?(o=this.a*Wt(e,r,n,i,h),s=this.a*Wt(e,r,n,i,O),t.x=this.x0+(o-s)*Math.sin(N),t.y=this.y0-(o-s)*Math.cos(N),t):Math.abs(this.sin_p12+1)<=u?(o=this.a*Wt(e,r,n,i,h),s=this.a*Wt(e,r,n,i,O),t.x=this.x0+(o+s)*Math.sin(N),t.y=this.y0+(o+s)*Math.cos(N),t):(a=T/I,c=Kt(this.a,this.e,this.sin_p12),l=Kt(this.a,this.e,T),f=Math.atan((1-this.es)*a+this.es*c*this.sin_p12/(l*I)),M=0===(p=Math.atan2(Math.sin(N),this.cos_p12*Math.tan(f)-this.sin_p12*Math.cos(N)))?Math.asin(this.cos_p12*Math.sin(f)-this.sin_p12*Math.cos(f)):Math.abs(Math.abs(p)-Math.PI)<=u?-Math.asin(this.cos_p12*Math.sin(f)-this.sin_p12*Math.cos(f)):Math.asin(Math.sin(N)*Math.cos(f)/Math.sin(p)),d=this.e*this.sin_p12/Math.sqrt(1-this.es),v=c*M*(1-(_=M*M)*(m=(y=this.e*this.cos_p12*Math.cos(p)/Math.sqrt(1-this.es))*y)*(1-m)/6+(x=_*M)/8*(g=d*y)*(1-2*m)+(E=x*M)/120*(m*(4-7*m)-3*d*d*(1-7*m))-E*M/48*g),t.x=this.x0+v*Math.sin(p),t.y=this.y0+v*Math.cos(p),t))},inverse:function(t){var e,r,n,i,o,s,a,c,l,f,p,d,y,g,m,v,w,b,M,_,x,E,S;if(t.x-=this.x0,t.y-=this.y0,this.sphere){if((e=Math.sqrt(t.x*t.x+t.y*t.y))>2*h*this.a)return;return r=e/this.a,n=Math.sin(r),i=Math.cos(r),o=this.long0,Math.abs(e)<=u?s=this.lat0:(s=re(i*this.sin_p12+t.y*n*this.cos_p12/e),a=Math.abs(this.lat0)-h,o=Math.abs(a)<=u?this.lat0>=0?F(this.long0+Math.atan2(t.x,-t.y)):F(this.long0-Math.atan2(-t.x,t.y)):F(this.long0+Math.atan2(t.x*n,e*this.cos_p12*i-t.y*this.sin_p12*n))),t.x=o,t.y=s,t}return c=Xt(this.es),l=$t(this.es),f=Yt(this.es),p=Qt(this.es),Math.abs(this.sin_p12-1)<=u?(s=Jt(((d=this.a*Wt(c,l,f,p,h))-(e=Math.sqrt(t.x*t.x+t.y*t.y)))/this.a,c,l,f,p),o=F(this.long0+Math.atan2(t.x,-1*t.y)),t.x=o,t.y=s,t):Math.abs(this.sin_p12+1)<=u?(d=this.a*Wt(c,l,f,p,h),s=Jt(((e=Math.sqrt(t.x*t.x+t.y*t.y))-d)/this.a,c,l,f,p),o=F(this.long0+Math.atan2(t.x,t.y)),t.x=o,t.y=s,t):(e=Math.sqrt(t.x*t.x+t.y*t.y),m=Math.atan2(t.x,t.y),y=Kt(this.a,this.e,this.sin_p12),v=Math.cos(m),b=-(w=this.e*this.cos_p12*v)*w/(1-this.es),M=3*this.es*(1-b)*this.sin_p12*this.cos_p12*v/(1-this.es),E=1-b*(x=(_=e/y)-b*(1+b)*Math.pow(_,3)/6-M*(1+3*b)*Math.pow(_,4)/24)*x/2-_*x*x*x/6,g=Math.asin(this.sin_p12*Math.cos(x)+this.cos_p12*Math.sin(x)*v),o=F(this.long0+Math.asin(Math.sin(m)*Math.sin(x)/Math.cos(g))),S=Math.sin(g),s=Math.atan2((S-this.es*E*this.sin_p12)*Math.tan(g),S*(1-this.es)),t.x=o,t.y=s,t)},names:["Azimuthal_Equidistant","aeqd"]},ye={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var e,r,n,i,o,s,a,h=t.x,c=t.y;return n=F(h-this.long0),e=Math.sin(c),r=Math.cos(c),i=Math.cos(n),((o=this.sin_p14*e+this.cos_p14*r*i)>0||Math.abs(o)<=u)&&(s=1*this.a*r*Math.sin(n),a=this.y0+1*this.a*(this.cos_p14*e-this.sin_p14*r*i)),t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s,a;return t.x-=this.x0,t.y-=this.y0,r=re((e=Math.sqrt(t.x*t.x+t.y*t.y))/this.a),n=Math.sin(r),i=Math.cos(r),s=this.long0,Math.abs(e)<=u?(a=this.lat0,t.x=s,t.y=a,t):(a=re(i*this.sin_p14+t.y*n*this.cos_p14/e),o=Math.abs(this.lat0)-h,Math.abs(o)<=u?(s=this.lat0>=0?F(this.long0+Math.atan2(t.x,-t.y)):F(this.long0-Math.atan2(-t.x,t.y)),t.x=s,t.y=a,t):(s=F(this.long0+Math.atan2(t.x*n,e*this.cos_p14*i-t.y*this.sin_p14*n)),t.x=s,t.y=a,t))},names:["ortho"]};function ge(t,e,r,n){var i;return t<u?(n.value=1,i=0):(i=Math.atan2(e,r),Math.abs(i)<=f?n.value=1:i>f&&i<=h+f?(n.value=2,i-=h):i>h+f||i<=-(h+f)?(n.value=3,i=i>=0?i-d:i+d):(n.value=4,i+=h)),i}function me(t,e){var r=t+e;return r<-d?r+=p:r>+d&&(r-=p),r}const ve={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=h-f/2?this.face=5:this.lat0<=-(h-f/2)?this.face=6:Math.abs(this.long0)<=f?this.face=1:Math.abs(this.long0)<=h+f?this.face=this.long0>0?2:4:this.face=3,0!==this.es&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)},forward:function(t){var e,r,n,i,o,s,a={x:0,y:0},u={value:0};if(t.x-=this.long0,e=0!==this.es?Math.atan(this.one_minus_f_squared*Math.tan(t.y)):t.y,r=t.x,5===this.face)i=h-e,r>=f&&r<=h+f?(u.value=1,n=r-h):r>h+f||r<=-(h+f)?(u.value=2,n=r>0?r-d:r+d):r>-(h+f)&&r<=-f?(u.value=3,n=r+h):(u.value=4,n=r);else if(6===this.face)i=h+e,r>=f&&r<=h+f?(u.value=1,n=-r+h):r<f&&r>=-f?(u.value=2,n=-r):r<-f&&r>=-(h+f)?(u.value=3,n=-r-h):(u.value=4,n=r>0?-r+d:-r-d);else{var c,l,p,y,g,m;2===this.face?r=me(r,+h):3===this.face?r=me(r,+d):4===this.face&&(r=me(r,-h)),y=Math.sin(e),g=Math.cos(e),m=Math.sin(r),c=g*Math.cos(r),l=g*m,p=y,1===this.face?n=ge(i=Math.acos(c),p,l,u):2===this.face?n=ge(i=Math.acos(l),p,-c,u):3===this.face?n=ge(i=Math.acos(-c),p,-l,u):4===this.face?n=ge(i=Math.acos(-l),p,c,u):(i=n=0,u.value=1)}return s=Math.atan(12/d*(n+Math.acos(Math.sin(n)*Math.cos(f))-h)),o=Math.sqrt((1-Math.cos(i))/(Math.cos(s)*Math.cos(s))/(1-Math.cos(Math.atan(1/Math.cos(n))))),2===u.value?s+=h:3===u.value?s+=d:4===u.value&&(s+=1.5*d),a.x=o*Math.cos(s),a.y=o*Math.sin(s),a.x=a.x*this.a+this.x0,a.y=a.y*this.a+this.y0,t.x=a.x,t.y=a.y,t},inverse:function(t){var e,r,n,i,o,s,a,u,c,l,f,p,y={lam:0,phi:0},g={value:0};if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,r=Math.atan(Math.sqrt(t.x*t.x+t.y*t.y)),e=Math.atan2(t.y,t.x),t.x>=0&&t.x>=Math.abs(t.y)?g.value=1:t.y>=0&&t.y>=Math.abs(t.x)?(g.value=2,e-=h):t.x<0&&-t.x>=Math.abs(t.y)?(g.value=3,e=e<0?e+d:e-d):(g.value=4,e+=h),c=d/12*Math.tan(e),o=Math.sin(c)/(Math.cos(c)-1/Math.sqrt(2)),s=Math.atan(o),(a=1-(n=Math.cos(e))*n*(i=Math.tan(r))*i*(1-Math.cos(Math.atan(1/Math.cos(s)))))<-1?a=-1:a>1&&(a=1),5===this.face)u=Math.acos(a),y.phi=h-u,1===g.value?y.lam=s+h:2===g.value?y.lam=s<0?s+d:s-d:3===g.value?y.lam=s-h:y.lam=s;else if(6===this.face)u=Math.acos(a),y.phi=u-h,1===g.value?y.lam=-s+h:2===g.value?y.lam=-s:3===g.value?y.lam=-s-h:y.lam=s<0?-s-d:-s+d;else{var m,v,w;c=(m=a)*m,v=(c+=(w=c>=1?0:Math.sqrt(1-c)*Math.sin(s))*w)>=1?0:Math.sqrt(1-c),2===g.value?(c=v,v=-w,w=c):3===g.value?(v=-v,w=-w):4===g.value&&(c=v,v=w,w=-c),2===this.face?(c=m,m=-v,v=c):3===this.face?(m=-m,v=-v):4===this.face&&(c=m,m=v,v=-c),y.phi=Math.acos(-w)-h,y.lam=Math.atan2(v,m),2===this.face?y.lam=me(y.lam,-h):3===this.face?y.lam=me(y.lam,-d):4===this.face&&(y.lam=me(y.lam,+h))}return 0!==this.es&&(l=y.phi<0?1:0,f=Math.tan(y.phi),p=this.b/Math.sqrt(f*f+this.one_minus_f_squared),y.phi=Math.atan(Math.sqrt(this.a*this.a-p*p)/(this.one_minus_f*p)),l&&(y.phi=-y.phi)),y.lam+=this.long0,t.x=y.lam,t.y=y.phi,t},names:["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"]};var we=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-9.86701e-7],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,1.8736e-8],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,9.34959e-7],[.7986,-.00755338,-500009e-10,9.35324e-7],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],be=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-1.26793e-9,4.22642e-10],[.124,.0124,5.07171e-9,-1.60604e-9],[.186,.0123999,-1.90189e-8,6.00152e-9],[.248,.0124002,7.10039e-8,-2.24e-8],[.31,.0123992,-2.64997e-7,8.35986e-8],[.372,.0124029,9.88983e-7,-3.11994e-7],[.434,.0123893,-369093e-11,-4.35621e-7],[.4958,.0123198,-102252e-10,-3.45523e-7],[.5571,.0121916,-154081e-10,-5.82288e-7],[.6176,.0119938,-241424e-10,-5.25327e-7],[.6769,.011713,-320223e-10,-5.16405e-7],[.7346,.0113541,-397684e-10,-6.09052e-7],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-1.40374e-9],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],Me=.8487,_e=1.3523,xe=function(t,e){return t[0]+e*(t[1]+e*(t[2]+e*t[3]))};const Ee={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"},forward:function(t){var e=F(t.x-this.long0),r=Math.abs(t.y),n=Math.floor(11.459155902616464*r);n<0?n=0:n>=18&&(n=17);var i={x:xe(we[n],r=l*(r-.08726646259971647*n))*e,y:xe(be[n],r)};return t.y<0&&(i.y=-i.y),i.x=i.x*this.a*Me+this.x0,i.y=i.y*this.a*_e+this.y0,i},inverse:function(t){var e={x:(t.x-this.x0)/(this.a*Me),y:Math.abs(t.y-this.y0)/(this.a*_e)};if(e.y>=1)e.x/=we[18][0],e.y=t.y<0?-h:h;else{var r=Math.floor(18*e.y);for(r<0?r=0:r>=18&&(r=17);;)if(be[r][0]>e.y)--r;else{if(!(be[r+1][0]<=e.y))break;++r}var n=be[r],i=5*(e.y-n[0])/(be[r+1][0]-n[0]);i=function(t,e,r,n){for(var i=e;n;--n){var o=t(i);if(i-=o,Math.abs(o)<1e-10)break}return i}((function(t){return(xe(n,t)-e.y)/function(t,e){return t[1]+e*(2*t[2]+3*e*t[3])}(n,t)}),i,0,100),e.x/=xe(we[r],i),e.y=(5*r+i)*c,t.y<0&&(e.y=-e.y)}return e.x=F(e.x+this.long0),e},names:["Robinson","robin"]},Se={init:function(){this.name="geocent"},forward:function(t){return H(t,this.es,this.a)},inverse:function(t){return J(t,this.es,this.a,this.b)},names:["Geocentric","geocentric","geocent","Geocent"]};var Oe={h:{def:1e5,num:!0},azi:{def:0,num:!0,degrees:!0},tilt:{def:0,num:!0,degrees:!0},long0:{def:0,num:!0},lat0:{def:0,num:!0}};const Te={init:function(){if(Object.keys(Oe).forEach(function(t){if(void 0===this[t])this[t]=Oe[t].def;else{if(Oe[t].num&&isNaN(this[t]))throw new Error("Invalid parameter value, must be numeric "+t+" = "+this[t]);Oe[t].num&&(this[t]=parseFloat(this[t]))}Oe[t].degrees&&(this[t]=this[t]*c)}.bind(this)),Math.abs(Math.abs(this.lat0)-h)<u?this.mode=this.lat0<0?1:0:Math.abs(this.lat0)<u?this.mode=2:(this.mode=3,this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0)),this.pn1=this.h/this.a,this.pn1<=0||this.pn1>1e10)throw new Error("Invalid height");this.p=1+this.pn1,this.rp=1/this.p,this.h1=1/this.pn1,this.pfact=(this.p+1)*this.h1,this.es=0;var t=this.tilt,e=this.azi;this.cg=Math.cos(e),this.sg=Math.sin(e),this.cw=Math.cos(t),this.sw=Math.sin(t)},forward:function(t){t.x-=this.long0;var e,r,n,i,o=Math.sin(t.y),s=Math.cos(t.y),a=Math.cos(t.x);switch(this.mode){case 3:r=this.sinph0*o+this.cosph0*s*a;break;case 2:r=s*a;break;case 1:r=-o;break;case 0:r=o}switch(e=(r=this.pn1/(this.p-r))*s*Math.sin(t.x),this.mode){case 3:r*=this.cosph0*o-this.sinph0*s*a;break;case 2:r*=o;break;case 0:r*=-s*a;break;case 1:r*=s*a}return i=1/((n=r*this.cg+e*this.sg)*this.sw*this.h1+this.cw),e=(e*this.cg-r*this.sg)*this.cw*i,r=n*i,t.x=e*this.a,t.y=r*this.a,t},inverse:function(t){t.x/=this.a,t.y/=this.a;var e,r,n,i={x:t.x,y:t.y};n=1/(this.pn1-t.y*this.sw),e=this.pn1*t.x*n,r=this.pn1*t.y*this.cw*n,t.x=e*this.cg+r*this.sg,t.y=r*this.cg-e*this.sg;var o=Ct(t.x,t.y);if(Math.abs(o)<u)i.x=0,i.y=t.y;else{var s,a;switch(a=1-o*o*this.pfact,a=(this.p-Math.sqrt(a))/(this.pn1/o+o/this.pn1),s=Math.sqrt(1-a*a),this.mode){case 3:i.y=Math.asin(s*this.sinph0+t.y*a*this.cosph0/o),t.y=(s-this.sinph0*Math.sin(i.y))*o,t.x*=a*this.cosph0;break;case 2:i.y=Math.asin(t.y*a/o),t.y=s*o,t.x*=a;break;case 0:i.y=Math.asin(s),t.y=-t.y;break;case 1:i.y=-Math.asin(s)}i.x=Math.atan2(t.x,t.y)}return t.x=i.x+this.long0,t.y=i.y,t},names:["Tilted_Perspective","tpers"]};var Ie;at.defaultDatum="WGS84",at.Proj=K,at.WGS84=new at.Proj("WGS84"),at.Point=xt,at.toPoint=et,at.defs=A,at.transform=nt,at.mgrs=pt,at.version="__VERSION__",(Ie=at).Proj.projections.add(Pt),Ie.Proj.projections.add(Lt),Ie.Proj.projections.add(jt),Ie.Proj.projections.add(Bt),Ie.Proj.projections.add(Gt),Ie.Proj.projections.add(Ut),Ie.Proj.projections.add(qt),Ie.Proj.projections.add(zt),Ie.Proj.projections.add(Vt),Ie.Proj.projections.add(Zt),Ie.Proj.projections.add(ee),Ie.Proj.projections.add(ne),Ie.Proj.projections.add(ie),Ie.Proj.projections.add(oe),Ie.Proj.projections.add(se),Ie.Proj.projections.add(ae),Ie.Proj.projections.add(he),Ie.Proj.projections.add(ue),Ie.Proj.projections.add(ce),Ie.Proj.projections.add(le),Ie.Proj.projections.add(fe),Ie.Proj.projections.add(pe),Ie.Proj.projections.add(de),Ie.Proj.projections.add(ye),Ie.Proj.projections.add(ve),Ie.Proj.projections.add(Ee),Ie.Proj.projections.add(Se),Ie.Proj.projections.add(Te);const Ne=at,Pe=[{title:"RGF93 (Lambert-93)",url:"http://spatialreference.org/ref/epsg/rgf93-lambert-93/",code:"EPSG:2154",proj4:"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC50)",code:"EPSG:3950",url:"http://spatialreference.org/ref/epsg/3950/",proj4:"+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC49)",code:"EPSG:3949",url:"http://spatialreference.org/ref/epsg/3949/",proj4:"+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC48)",code:"EPSG:3948",url:"http://spatialreference.org/ref/epsg/3948/",proj4:"+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC47)",code:"EPSG:3947",url:"http://spatialreference.org/ref/epsg/3947/",proj4:"+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC46)",code:"EPSG:3946",url:"http://spatialreference.org/ref/epsg/3946/",proj4:"+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC45)",code:"EPSG:3945",url:"http://spatialreference.org/ref/epsg/3945/",proj4:"+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC44)",code:"EPSG:3944",url:"http://spatialreference.org/ref/epsg/3944/",proj4:"+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"NTF (Lambert II)",code:"EPSG:27572",url:"http://spatialreference.org/ref/epsg/27572/",proj4:"+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},{title:"NTF (Lambert III)",code:"EPSG:27573",url:"http://spatialreference.org/ref/epsg/27573/",proj4:"+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},{title:"NTF",code:"EPSG:4275",url:"http://spatialreference.org/ref/epsg/4275/",proj4:"+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs"},{title:"WGS84",code:"EPSG:4326",url:"https://epsg.io/4326",proj4:"+proj=longlat +datum=WGS84 +no_defs"}].map((t=>[t.code,t.proj4]));Ne.defs(Pe),function(t,e){const r=6356752.314245179,n=t*t,i=r*r;Math.sqrt((n-i)/n),Math.sqrt((n-i)/i)}(6378137);var Ae=r(3742),Ce=r.n(Ae);function De(t,...e){if(0===e.length)throw new Error("You must at least provide one property.");const r=e.shift(),n=t.hasOwnProperty(r);return 0===e.length?n?t[r]:void 0:void 0!==t[r]?De(t[r],...e):void 0}function ke(t){return t.replace(/\r?\n?\t?/g,"").split(" ")}const Le={};function je(t,e){if(t in Le)return Le[t];const r=Ce()(e);return Le[t]=r,r}function Fe(t){return t*Math.PI/180}function Re(t){return 180*t/Math.PI}function Be(t,e,r){const n=Fe(t[1]),i=Fe(t[0]),o=e/6378137,s=Math.asin(Math.sin(n)*Math.cos(o)+Math.cos(n)*Math.sin(o)*Math.cos(r));return[Re(i+Math.atan2(Math.sin(r)*Math.sin(o)*Math.cos(n),Math.cos(o)-Math.sin(n)*Math.sin(s))),Re(s)]}var Ge=r(6934);function Ue(t,e,r){if(null!==t)for(var n,i,o,s,a,h,u,c,l=0,f=0,p=t.type,d="FeatureCollection"===p,y="Feature"===p,g=d?t.features.length:1,m=0;m<g;m++){a=(c=!!(u=d?t.features[m].geometry:y?t.geometry:t)&&"GeometryCollection"===u.type)?u.geometries.length:1;for(var v=0;v<a;v++){var w=0,b=0;if(null!==(s=c?u.geometries[v]:u)){h=s.coordinates;var M=s.type;switch(l=!r||"Polygon"!==M&&"MultiPolygon"!==M?0:1,M){case null:break;case"Point":if(!1===e(h,f,m,w,b))return!1;f++,w++;break;case"LineString":case"MultiPoint":for(n=0;n<h.length;n++){if(!1===e(h[n],f,m,w,b))return!1;f++,"MultiPoint"===M&&w++}"LineString"===M&&w++;break;case"Polygon":case"MultiLineString":for(n=0;n<h.length;n++){for(i=0;i<h[n].length-l;i++){if(!1===e(h[n][i],f,m,w,b))return!1;f++}"MultiLineString"===M&&w++,"Polygon"===M&&b++}"Polygon"===M&&w++;break;case"MultiPolygon":for(n=0;n<h.length;n++){for("MultiPolygon"===M&&(b=0),i=0;i<h[n].length;i++){for(o=0;o<h[n][i].length-l;o++){if(!1===e(h[n][i][o],f,m,w,b))return!1;f++}b++}w++}break;case"GeometryCollection":for(n=0;n<s.geometries.length;n++)if(!1===Ue(s.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function qe(t){var e={type:"Feature"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"properties":case"geometry":return;default:e[r]=t[r]}})),e.properties=ze(t.properties),e.geometry=Ve(t.geometry),e}function ze(t){var e={};return t?(Object.keys(t).forEach((function(r){var n=t[r];"object"==typeof n?null===n?e[r]=null:n.length?e[r]=n.map((function(t){return t})):e[r]=ze(n):e[r]=n})),e):e}function Ve(t){var e={type:t.type};return t.bbox&&(e.bbox=t.bbox),"GeometryCollection"===t.type?(e.geometries=t.geometries.map((function(t){return Ve(t)})),e):(e.coordinates=We(t.coordinates),e)}function We(t){return"object"!=typeof t[0]?t.slice():t.map((function(t){return We(t)}))}var Xe=6371008.8,$e={meters:Xe,metres:Xe,millimeters:6371008800,millimetres:6371008800,centimeters:637100880,centimetres:637100880,kilometers:6371.0088,kilometres:6371.0088,miles:3958.761333810546,nauticalmiles:3440.069546436285,inches:250826616.45599997,yards:5825721.287490856,feet:20902260.511392,radians:1,degrees:57.22891354143274};function Ye(t,e,r){if(!Je(r=r||{}))throw new Error("options is invalid");var n=r.bbox,i=r.id;if(void 0===t)throw new Error("geometry is required");if(e&&e.constructor!==Object)throw new Error("properties must be an Object");n&&function(t){if(!t)throw new Error("bbox is required");if(!Array.isArray(t))throw new Error("bbox must be an Array");if(4!==t.length&&6!==t.length)throw new Error("bbox must be an Array of 4 or 6 numbers");t.forEach((function(t){if(!He(t))throw new Error("bbox must only contain numbers")}))}(n),i&&function(t){if(!t)throw new Error("id is required");if(-1===["string","number"].indexOf(typeof t))throw new Error("id must be a number or a string")}(i);var o={type:"Feature"};return i&&(o.id=i),n&&(o.bbox=n),o.properties=e||{},o.geometry=t,o}function Qe(t){if(null==t)throw new Error("degrees is required");return t%360*Math.PI/180}function Ke(t,e,r){if(null==t)throw new Error("length is required");if(!(t>=0))throw new Error("length must be a positive number");return function(t,e){if(null==t)throw new Error("radians is required");if(e&&"string"!=typeof e)throw new Error("units must be a string");var r=$e[e||"kilometers"];if(!r)throw new Error(e+" units is invalid");return t*r}(function(t,e){if(null==t)throw new Error("distance is required");if(e&&"string"!=typeof e)throw new Error("units must be a string");var r=$e[e||"kilometers"];if(!r)throw new Error(e+" units is invalid");return t/r}(t,e),r||"kilometers")}function He(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}function Je(t){return!!t&&t.constructor===Object}const Ze=function(t,e,r,n){if(!Je(n=n||{}))throw new Error("options is invalid");var i=n.units,o=n.properties;if(!t)throw new Error("origin is required");if(null==e)throw new Error("distance is required");if(null==r)throw new Error("bearing is required");if(!(e>=0))throw new Error("distance must be greater than 0");var s=Ke(e,i,"meters"),a=function(t){if(!t)throw new Error("coord is required");if("Feature"===t.type&&null!==t.geometry&&"Point"===t.geometry.type)return t.geometry.coordinates;if("Point"===t.type)return t.coordinates;if(Array.isArray(t)&&t.length>=2&&void 0===t[0].length&&void 0===t[1].length)return t;throw new Error("coord must be GeoJSON Point or an Array of numbers")}(t),h=function(t,e,r,n){var i=e/(n=void 0===n?Xe:Number(n)),o=t[0]*Math.PI/180,s=Qe(t[1]),a=Qe(r),h=i*Math.cos(a),u=s+h;Math.abs(u)>Math.PI/2&&(u=u>0?Math.PI-u:-Math.PI-u);var c=Math.log(Math.tan(u/2+Math.PI/4)/Math.tan(s/2+Math.PI/4)),l=Math.abs(c)>1e-11?h/c:Math.cos(s);return[(180*(o+i*Math.sin(a)/l)/Math.PI+540)%360-180,180*u/Math.PI]}(a,s,r);return h[0]+=h[0]-a[0]>180?-360:a[0]-h[0]>180?360:0,function(t,e,r){if(!t)throw new Error("coordinates is required");if(!Array.isArray(t))throw new Error("coordinates must be an Array");if(t.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!He(t[0])||!He(t[1]))throw new Error("coordinates must contain numbers");return Ye({type:"Point",coordinates:t},e,r)}(h,o)},tr=function(t,e,r,n){if(!(i=n=n||{})||i.constructor!==Object)throw new Error("options is invalid");var i,o=n.units,s=n.zTranslation,a=n.mutate;if(!t)throw new Error("geojson is required");if(null==e||isNaN(e))throw new Error("distance is required");if(s&&"number"!=typeof s&&isNaN(s))throw new Error("zTranslation is not a number");if(s=void 0!==s?s:0,0===e&&0===s)return t;if(null==r||isNaN(r))throw new Error("direction is required");return e<0&&(e=-e,r=-r),!1!==a&&void 0!==a||(t=function(t){if(!t)throw new Error("geojson is required");switch(t.type){case"Feature":return qe(t);case"FeatureCollection":return function(t){var e={type:"FeatureCollection"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"features":return;default:e[r]=t[r]}})),e.features=t.features.map((function(t){return qe(t)})),e}(t);case"Point":case"LineString":case"Polygon":case"MultiPoint":case"MultiLineString":case"MultiPolygon":case"GeometryCollection":return Ve(t);default:throw new Error("unknown GeoJSON type")}}(t)),Ue(t,(function(t){var n=function(t){if(!t)throw new Error("coords is required");if("Feature"===t.type&&null!==t.geometry)return t.geometry.coordinates;if(t.coordinates)return t.coordinates;if(Array.isArray(t))return t;throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")}(Ze(t,e,r,{units:o}));t[0]=n[0],t[1]=n[1],s&&3===t.length&&(t[2]+=s)})),t};var er=r(9118);const rr="auto_detect",nr="surfaces",ir="parcels",or="pipe_networks",sr={[ir]:function(t,e,r){const n=De(t,"LandXML","CgPoints",0,"CgPoint"),i=De(t,"LandXML","Parcels",0,"Parcel"),s={},a=[];for(let t in n){const r=n[t],i=r.$.name.replace(/ /g,"");let o=ke(r._).map((t=>parseFloat(t)));o=[o[1],o[0]],o=Ne(e,"WGS84",o),s[i]=o}for(let t in i){var h=i[t];if(void 0!==h.CoordGeom){let t=[];var u=null,c=h.CoordGeom[0].Line;for(let e in c){var l=c[e].Start[0].$.pntRef;c[e].End[0].$.pntRef,s[l]&&(t.push(s[l]),u||(u=s[l]))}if(t.length>2){t.push(u),t=[t];var f={name:h.$.name,landxmlClass:h.$.class,landxmlState:h.$.state,landxmlParcelType:h.$.parcelType,landxmlType:"parcel"};a.push((0,o.polygon)(t,f))}}}return a},[nr]:function(t,e,r){const n=[],i=De(t,"LandXML","Surfaces");return i?(i.forEach((t=>{const i=t.$||{},s=i.name||"",a=i.desc,h=De(t,"Surface");Array.isArray(h)&&h.forEach((t=>{const i=s?s+" - "+t.$.name:t.$.name,h={name:i,description:a?a+" - "+t.$.desc:t.$.desc,landxmlType:"surface","stroke-width":0,color:"transparent",fill:je(`surface-${i}`,r.colorOpts),"fill-opacity":.3};let u=function(t,e,r,n){const i=De(t,"SourceData",0,"Boundaries",0,"Boundary");if(!i)return[];const s=[];return i.forEach((t=>{const n=ke(De(t,"PntList3D",0)).map((t=>parseFloat(t))),i=[];for(let t=0;t<n.length;t+=3){let r=[n[t+1],n[t]];r=Ne(e,"WGS84",r),i.push(r)}i.push(i[0]),s.push((0,o.polygon)([i],r))})),s}(t,e,h);if(0!==u.length)n.push(...u);else{u=function(t,e,r,n){const i=De(t,"Definition",0,"Pnts",0,"P"),s=De(t,"Definition",0,"Faces",0,"F"),a={};i.forEach((t=>{let r=ke(t._).map((t=>parseFloat(t)));r=[r[1],r[0]],r=Ne(e,"WGS84",r);const n=t.$.id;a[n]={name:t.$.name,coords:r}}));const h=[];return s.forEach((t=>{const e=ke(t),n=[];e.forEach((t=>{const e=a[t];n.push(e.coords)})),n.push(a[e[0]].coords),h.push((0,o.polygon)([n],r))})),[...h]}(t,e,h);let r=u[0];console.error("Applying union to %s faces (%d faces to merge)",r.properties.name,u.length);for(let t=1;t<u.length-1;t++){const e=u[t+1];if(!e)return;try{r=(0,Ge.Z)(r,e)}catch(r){console.error("--\x3e Could not apply union to %s (#%d)",e.properties.name,t+1)}}r.properties=h,n.push(r)}}))})),n):n},[or]:function(t,e,r){const n=[],i=De(t,"LandXML","PipeNetworks");return i?(i.forEach((t=>{const i=De(t,"PipeNetwork");if(!Array.isArray(i))return;let s={};i.forEach((t=>{const i={name:t.$.name,description:t.$.desc,"stroke-width":.1,"fill-opacity":.5},a=function(t,e,r,n){const i={},s=De(t,"Structs",0,"Struct");if(Array.isArray(s))return s.forEach((t=>{const s=De(t,"Center",0),a=De(t,"RectStruct",0),h=De(t,"CircStruct",0),u=De(t,"InletStruct",0),c=De(t,"OutletStruct",0),l=De(t,"Connection",0),f=void 0!==a?"rect":void 0!==h?"circ":void 0!==u?"inlet":void 0!==c?"outlet":void 0!==l?"connection":null,p=r.name?r.name+" - "+t.$.name:t.$.name,d=Object.assign({},r,{name:p,description:r.description?r.description+" - "+t.$.desc:t.$.desc,landxmlType:"pipe_network_struct",landxmlStruct:f,landxmlElevRim:"elevRim"in t.$?parseFloat(t.$.elevRim):void 0,landxmlElevSump:"elevSump"in t.$?parseFloat(t.$.elevSump):void 0,fill:je(`pipe-network-struct-${p}`,n.colorOpts)});if(void 0!==h){const t=h.$;"diameter"in t&&(d.landxmlDiameter=parseFloat(t.diameter)),"thickness"in t&&(d.landxmlThickness=parseFloat(t.thickness))}if(void 0!==a){const t=a.$;"thickness"in t&&(d.landxmlThickness=parseFloat(t.thickness)),"length"in t&&(d.landxmlLength=parseFloat(t.length)),"width"in t&&(d.landxmlWidth=parseFloat(t.width))}const y=ke(s).map((t=>parseFloat(t)));let g,m=[y[1],y[0]];if(m=Ne(e,"WGS84",m),g=a?function(t,e,r,n,i){const s=(0,o.point)(t),a=(0,er.Z)(s);tr(a,r/2,270,{units:n,mutate:!0}),tr(a,e/2,0,{units:n,mutate:!0});const h=(0,er.Z)(s);tr(h,r/2,90,{units:n,mutate:!0}),tr(h,e/2,0,{units:n,mutate:!0});const u=(0,er.Z)(s);tr(u,r/2,90,{units:n,mutate:!0}),tr(u,e/2,180,{units:n,mutate:!0});const c=(0,er.Z)(s);tr(c,r/2,270,{units:n,mutate:!0}),tr(c,e/2,180,{units:n,mutate:!0});const l=[a.geometry.coordinates,h.geometry.coordinates,u.geometry.coordinates,c.geometry.coordinates,a.geometry.coordinates];return(0,o.polygon)([l],i)}(m,d.length?d.length:1,d.width?d.width:1,"meters",d):function(t,e,r,n){const i=[],s=[];for(var a=0;a<128;++a)i.push(...Be(t,e,2*Math.PI*a/128));i.push(i[0],i[1]);for(let t=0,e=0;e<i.length;e+=2)s[t++]=i.slice(e,e+2);return(0,o.polygon)([s.reverse()],n)}(m,(d.landxmlDiameter?d.landxmlDiameter:1)/2,0,d),!g)throw new Error("Unsupported struct type");i[t.$.name]={geometry:g,center:m}})),i}(t,e,i,r);n.push(...Object.values(a).map((t=>t.geometry))),Object.assign(s,a)})),i.forEach((t=>{const e={name:t.$.name,description:t.$.desc,landxmlType:"pipe_network_pipe","stroke-width":1,"fill-opacity":1},i=function(t,e,r,n,i){const s=[],a=De(t,"Pipes",0,"Pipe");if(Array.isArray(a))return a.forEach((t=>{const r=De(t,"CircPipe",0),a=n.name?n.name+" - "+t.$.name:t.$.name,h=Object.assign({},n,{name:a,description:n.description?n.description+" - "+t.$.desc:t.$.desc,stroke:je(`pipe-network-pipe-${a}`,i.colorOpts)});if(void 0!==r){const t=r.$;"diameter"in t&&(h.landxmlDiameter=parseFloat(t.diameter)),"thickness"in t&&(h.landxmlThickness=parseFloat(t.thickness))}const u=e[t.$.refStart],c=e[t.$.refEnd];if(!u)throw new Error(`Cannot find pipe "${h.name}" refStart "${t.$.refStart}" !`);if(!c)throw new Error(`Cannot find pipe "${h.name}" refEnd "${t.$.refEnd}" !`);const l=(0,o.lineString)([u.center,c.center],h);s.push(l)})),s}(t,s,0,e,r);n.push(...i)}))})),n):n}};class ar{constructor(){this.defaultOptions={projection:rr,enabledConverters:[nr,ir,or],parser:{normalize:!0},proj4Defs:[["EPSG:28355","+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"],...Pe],featureMapper:(t,e)=>t,colorOpts:{hue:"monochrome",luminosity:"dark",seed:1}}}toGeoJSON(t,e={}){const r=Object.assign({},this.defaultOptions.parser,e.parser),n=new(i().Parser)(r);return this.configureProj4(e.proj4Defs),new Promise(((r,i)=>{n.parseString(t,((t,n)=>{if(t)return i(t);let o;try{o=this.convertToGeoJSON(n,e)}catch(t){return i(t)}return r(o)}))}))}convertToGeoJSON(t,e={}){const r=Object.assign({},this.defaultOptions,e),n=this.getLandXMLProjection(t,r.projection||this.defaultOptions.projection);if(!n)throw new Error("Source projection can not be found !");const i=Array.isArray(e.enabledConverters)?e.enabledConverters:this.defaultOptions.enabledConverters;let a=[];return i.forEach((e=>{if(!(e in sr))return;console.log("Executing convert '%s'...",e);const i=sr[e](t,n,r);a.push(...i)})),"function"==typeof r.featureMapper&&(a=a.map((t=>r.featureMapper(t,r)))),a.sort(((t,e)=>(0,s.Z)(t)>(0,s.Z)(e)?-1:(0,s.Z)(t)<(0,s.Z)(e)?1:0)),(0,o.featureCollection)(a)}configureProj4(t){const e=this.defaultOptions.proj4Defs.slice(0);Array.isArray(t)&&e.push(...t),Ne.defs(e)}getLandXMLProjection(t,e){if(e!==rr)return e;let r=null;return r||(r=this.findUTMProjection(t)),r}findUTMProjection(t){const e=De(t,"LandXML","CoordinateSystem",0,"$","datum"),r=De(t,"LandXML","CgPoints",0,"$","zoneNumber");let n=null;return e&&r&&(n=`+proj=utm +zone=${r} +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs `),n}}}},e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}return r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r(6007),r(4237)})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2FyZWEvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi9jbG9uZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2hlbHBlcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi9tZXRhL2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvdW5pb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi91bmlvbi9ub2RlX21vZHVsZXMvQHR1cmYvaW52YXJpYW50L2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaXN1YmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2VtaXR0ZXItY29tcG9uZW50L2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9tYXJ0aW5lei1wb2x5Z29uLWNsaXBwaW5nL2Rpc3QvbWFydGluZXoudW1kLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcmFuZG9tY29sb3IvcmFuZG9tQ29sb3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9zYXgvbGliL3NheC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3N0cmVhbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3RpbWVycy9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9saWIvYm9tLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL2xpYi9idWlsZGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL2xpYi9kZWZhdWx0cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9saWIvcGFyc2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL2xpYi9wcm9jZXNzb3JzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL2xpYi94bWwyanMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL0RvY3VtZW50UG9zaXRpb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL05vZGVUeXBlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9VdGlsaXR5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9Xcml0ZXJTdGF0ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MQXR0cmlidXRlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxDRGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MQ2hhcmFjdGVyRGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MQ29tbWVudC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRE9NQ29uZmlndXJhdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRE9NRXJyb3JIYW5kbGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxET01JbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRE9NU3RyaW5nTGlzdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRFREQXR0TGlzdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRFRERWxlbWVudC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRFRERW50aXR5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxEVEROb3RhdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRGVjbGFyYXRpb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTERvY1R5cGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTERvY3VtZW50LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxEb2N1bWVudENCLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxEdW1teS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MTmFtZWROb2RlTWFwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxOb2RlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxOb2RlTGlzdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxSYXcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTFN0cmVhbVdyaXRlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MU3RyaW5nV3JpdGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxTdHJpbmdpZmllci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MVGV4dC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MV3JpdGVyQmFzZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29uc3RhbnRzL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb25zdGFudHMvUHJpbWVNZXJpZGlhbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb25zdGFudHMvdW5pdHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvbWF0Y2guanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvalN0cmluZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3drdC1wYXJzZXIvcGFyc2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvd2t0LXBhcnNlci9wcm9jZXNzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvd2t0LXBhcnNlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9kZWZzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wYXJzZUNvZGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvZXh0ZW5kLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9tc2Zuei5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vc2lnbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vYWRqdXN0X2xvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vdHNmbnouanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL3BoaTJ6LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2xvbmdsYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvbWVyYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb25zdGFudHMvRWxsaXBzb2lkLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbnN0YW50cy9EYXR1bS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9Qcm9qLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2Rlcml2ZUNvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9kYXR1bS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9kYXR1bVV0aWxzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2RhdHVtX3RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9hZGp1c3RfYXhpcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vdG9Qb2ludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jaGVja1Nhbml0eS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi90cmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29yZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL21ncnMvbWdycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9Qb2ludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vcGpfZW5mbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vcGpfbWxmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vcGpfaW52X21sZm4uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvdG1lcmMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL3NpbmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2h5cG90LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9nYXRnLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9jbGVuc19jbXBseC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vY29zaC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9ldG1lcmMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2NsZW5zLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9hc2luaHkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2xvZzFweS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy91dG0uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2FkanVzdF96b25lLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9zcmF0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2dhdXNzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3N0ZXJlYS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9zdGVyZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9zb21lcmMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvb21lcmMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvbGNjLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2tyb3Zhay5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vbWxmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vZTBmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vZTFmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vZTJmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vZTNmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vZ04uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2FkanVzdF9sYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2ltbGZuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2Nhc3MuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL3FzZm56LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2xhZWEuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2FzaW56LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2FlYS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9nbm9tLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2NlYS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vaXFzZm56LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2VxYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9wb2x5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL256bWcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvbWlsbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9zaW51LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL21vbGwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvZXFkYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy92YW5kZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9hZXFkLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL29ydGhvLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3FzYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9yb2Jpbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9nZW9jZW50LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3RwZXJzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvcHJvanMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL2xpYi9wcm9qZWN0aW9uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9saWIvdXRpbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL3RyYW5zZm9ybS10cmFuc2xhdGUvbm9kZV9tb2R1bGVzL0B0dXJmL21ldGEvbWFpbi5lcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL3RyYW5zZm9ybS10cmFuc2xhdGUvbm9kZV9tb2R1bGVzL0B0dXJmL2Nsb25lL21haW4uZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi9yaHVtYi1kZXN0aW5hdGlvbi9ub2RlX21vZHVsZXMvQHR1cmYvaGVscGVycy9tYWluLmVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvcmh1bWItZGVzdGluYXRpb24vbWFpbi5lcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2ludmFyaWFudC9tYWluLmVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvdHJhbnNmb3JtLXRyYW5zbGF0ZS9tYWluLmVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvdHJhbnNmb3JtLXRyYW5zbGF0ZS9ub2RlX21vZHVsZXMvQHR1cmYvaGVscGVycy9tYWluLmVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9saWIvcGlwZS1uZXR3b3JrLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9saWIvY29udmVydGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9saWIvcGFyY2VsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9saWIvc3VyZmFjZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2xhbmR4bWwvd2VicGFjay9zdGFydHVwIiwid2VicGFjazovL2xhbmR4bWwvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vbGFuZHhtbC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL2xhbmR4bWwvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9sYW5keG1sL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vbGFuZHhtbC93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIl0sIm5hbWVzIjpbIm1ldGFfMSIsIlJBRElVUyIsInBvbHlnb25BcmVhIiwiY29vcmRzIiwidG90YWwiLCJsZW5ndGgiLCJNYXRoIiwiYWJzIiwicmluZ0FyZWEiLCJpIiwicDEiLCJwMiIsImxvd2VySW5kZXgiLCJtaWRkbGVJbmRleCIsInVwcGVySW5kZXgiLCJjb29yZHNMZW5ndGgiLCJyYWQiLCJzaW4iLCJudW0iLCJQSSIsImV4cG9ydHMiLCJnZW9qc29uIiwiZ2VvbVJlZHVjZSIsInZhbHVlIiwiZ2VvbSIsInR5cGUiLCJjb29yZGluYXRlcyIsImNhbGN1bGF0ZUFyZWEiLCJjbG9uZUZlYXR1cmUiLCJjbG9uZWQiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByb3BlcnRpZXMiLCJjbG9uZVByb3BlcnRpZXMiLCJnZW9tZXRyeSIsImNsb25lR2VvbWV0cnkiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpdGVtIiwiYmJveCIsImdlb21ldHJpZXMiLCJnIiwiZGVlcFNsaWNlIiwic2xpY2UiLCJjb29yZCIsIkVycm9yIiwiZmVhdHVyZXMiLCJmZWF0dXJlIiwiY2xvbmVGZWF0dXJlQ29sbGVjdGlvbiIsIm9wdGlvbnMiLCJmZWF0IiwiaWQiLCJwb2ludCIsInBvbHlnb24iLCJfaSIsImNvb3JkaW5hdGVzXzEiLCJyaW5nIiwiaiIsImxpbmVTdHJpbmciLCJmZWF0dXJlQ29sbGVjdGlvbiIsImZjIiwibXVsdGlMaW5lU3RyaW5nIiwibXVsdGlQb2ludCIsIm11bHRpUG9seWdvbiIsInJhZGlhbnNUb0xlbmd0aCIsInJhZGlhbnMiLCJ1bml0cyIsImZhY3RvciIsImZhY3RvcnMiLCJsZW5ndGhUb1JhZGlhbnMiLCJkaXN0YW5jZSIsInJhZGlhbnNUb0RlZ3JlZXMiLCJpc051bWJlciIsImlzTmFOIiwidGVzdCIsImRlZmluZVByb3BlcnR5IiwiZWFydGhSYWRpdXMiLCJjZW50aW1ldGVycyIsImNlbnRpbWV0cmVzIiwiZGVncmVlcyIsImZlZXQiLCJpbmNoZXMiLCJraWxvbWV0ZXJzIiwia2lsb21ldHJlcyIsIm1ldGVycyIsIm1ldHJlcyIsIm1pbGVzIiwibWlsbGltZXRlcnMiLCJtaWxsaW1ldHJlcyIsIm5hdXRpY2FsbWlsZXMiLCJ5YXJkcyIsInVuaXRzRmFjdG9ycyIsImFyZWFGYWN0b3JzIiwiYWNyZXMiLCJwb2ludHMiLCJwb2x5Z29ucyIsImxpbmVTdHJpbmdzIiwiZ2VvbWV0cnlDb2xsZWN0aW9uIiwicm91bmQiLCJwcmVjaXNpb24iLCJtdWx0aXBsaWVyIiwicG93IiwibGVuZ3RoVG9EZWdyZWVzIiwiYmVhcmluZ1RvQXppbXV0aCIsImJlYXJpbmciLCJhbmdsZSIsImRlZ3JlZXNUb1JhZGlhbnMiLCJjb252ZXJ0TGVuZ3RoIiwib3JpZ2luYWxVbml0IiwiZmluYWxVbml0IiwiY29udmVydEFyZWEiLCJhcmVhIiwic3RhcnRGYWN0b3IiLCJmaW5hbEZhY3RvciIsImlzT2JqZWN0IiwiaW5wdXQiLCJjb25zdHJ1Y3RvciIsInZhbGlkYXRlQkJveCIsInZhbGlkYXRlSWQiLCJpbmRleE9mIiwicmFkaWFuczJkZWdyZWVzIiwiZGVncmVlczJyYWRpYW5zIiwiZGlzdGFuY2VUb0RlZ3JlZXMiLCJkaXN0YW5jZVRvUmFkaWFucyIsInJhZGlhbnNUb0Rpc3RhbmNlIiwiYmVhcmluZ1RvQW5nbGUiLCJjb252ZXJ0RGlzdGFuY2UiLCJoZWxwZXJzIiwiY29vcmRFYWNoIiwiY2FsbGJhY2siLCJleGNsdWRlV3JhcENvb3JkIiwiayIsImwiLCJzdG9wRyIsImdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uIiwiaXNHZW9tZXRyeUNvbGxlY3Rpb24iLCJ3cmFwU2hyaW5rIiwiY29vcmRJbmRleCIsImlzRmVhdHVyZUNvbGxlY3Rpb24iLCJpc0ZlYXR1cmUiLCJzdG9wIiwiZmVhdHVyZUluZGV4IiwiZ2VvbUluZGV4IiwibXVsdGlGZWF0dXJlSW5kZXgiLCJnZW9tZXRyeUluZGV4IiwiZ2VvbVR5cGUiLCJwcm9wRWFjaCIsImZlYXR1cmVFYWNoIiwiZ2VvbUVhY2giLCJmZWF0dXJlUHJvcGVydGllcyIsImZlYXR1cmVCQm94IiwiZmVhdHVyZUlkIiwidW5kZWZpbmVkIiwiZmxhdHRlbkVhY2giLCJzZWdtZW50RWFjaCIsInNlZ21lbnRJbmRleCIsInByZXZpb3VzQ29vcmRzIiwicHJldmlvdXNGZWF0dXJlSW5kZXgiLCJwcmV2aW91c011bHRpSW5kZXgiLCJwcmV2R2VvbUluZGV4IiwiY3VycmVudENvb3JkIiwiZmVhdHVyZUluZGV4Q29vcmQiLCJtdWx0aVBhcnRJbmRleENvb3JkIiwiY3VycmVudFNlZ21lbnQiLCJsaW5lRWFjaCIsImNvb3JkUmVkdWNlIiwiaW5pdGlhbFZhbHVlIiwicHJldmlvdXNWYWx1ZSIsInByb3BSZWR1Y2UiLCJjdXJyZW50UHJvcGVydGllcyIsImZlYXR1cmVSZWR1Y2UiLCJjdXJyZW50RmVhdHVyZSIsImNvb3JkQWxsIiwicHVzaCIsImN1cnJlbnRHZW9tZXRyeSIsImZsYXR0ZW5SZWR1Y2UiLCJzZWdtZW50UmVkdWNlIiwic3RhcnRlZCIsImxpbmVSZWR1Y2UiLCJjdXJyZW50TGluZSIsImZpbmRTZWdtZW50IiwiZmluZFBvaW50IiwibWFydGluZXoiLCJpbnZhcmlhbnRfMSIsImhlbHBlcnNfMSIsInBvbHlnb24xIiwicG9seWdvbjIiLCJjb29yZHMxIiwiZ2V0R2VvbSIsImNvb3JkczIiLCJ1bmlvbmVkIiwidW5pb24iLCJnZXRDb29yZCIsImdldENvb3JkcyIsImNvbnRhaW5zTnVtYmVyIiwiZ2VvanNvblR5cGUiLCJuYW1lIiwiZmVhdHVyZU9mIiwiY29sbGVjdGlvbk9mIiwiX2EiLCJnZXRUeXBlIiwiX2JhYmVsUG9seWZpbGwiLCJkZWZpbmUiLCJPIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJTdHJpbmciLCJwcm90b3R5cGUiLCJwYWRTdGFydCIsInBhZEVuZCIsInNwbGl0IiwiRnVuY3Rpb24iLCJjYWxsIiwiYmluZCIsImdsb2JhbCIsIk9wIiwiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCIkU3ltYm9sIiwiU3ltYm9sIiwiaXRlcmF0b3JTeW1ib2wiLCJpdGVyYXRvciIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWdTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInJ1bnRpbWUiLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJtb2R1bGUiLCJ3cmFwIiwiR2VuU3RhdGVTdXNwZW5kZWRTdGFydCIsIkdlblN0YXRlU3VzcGVuZGVkWWllbGQiLCJHZW5TdGF0ZUV4ZWN1dGluZyIsIkdlblN0YXRlQ29tcGxldGVkIiwiQ29udGludWVTZW50aW5lbCIsIkl0ZXJhdG9yUHJvdG90eXBlIiwidGhpcyIsImdldFByb3RvIiwiZ2V0UHJvdG90eXBlT2YiLCJOYXRpdmVJdGVyYXRvclByb3RvdHlwZSIsInZhbHVlcyIsIkdwIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImdlbkZ1biIsImN0b3IiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFyZyIsIl9fYXdhaXQiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJBc3luY0l0ZXJhdG9yIiwiYXN5bmMiLCJpbm5lckZuIiwib3V0ZXJGbiIsInNlbGYiLCJ0cnlMb2NzTGlzdCIsIml0ZXIiLCJuZXh0IiwidGhlbiIsInJlc3VsdCIsImRvbmUiLCJ0b1N0cmluZyIsIm9iamVjdCIsInJldmVyc2UiLCJwb3AiLCJDb250ZXh0IiwicmVzZXQiLCJza2lwVGVtcFJlc2V0IiwicHJldiIsInNlbnQiLCJfc2VudCIsImRlbGVnYXRlIiwibWV0aG9kIiwidHJ5RW50cmllcyIsInJlc2V0VHJ5RW50cnkiLCJjaGFyQXQiLCJyb290UmVjb3JkIiwiY29tcGxldGlvbiIsInJ2YWwiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImV4Y2VwdGlvbiIsImNvbnRleHQiLCJoYW5kbGUiLCJsb2MiLCJjYXVnaHQiLCJyZWNvcmQiLCJlbnRyeSIsInRyeUxvYyIsImhhc0NhdGNoIiwiaGFzRmluYWxseSIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFicnVwdCIsImZpbmFsbHlFbnRyeSIsImNvbXBsZXRlIiwiYWZ0ZXJMb2MiLCJmaW5pc2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwiaXRlcmFibGUiLCJyZXN1bHROYW1lIiwibmV4dExvYyIsInByb3RvR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiX2ludm9rZSIsInN0YXRlIiwiZG9uZVJlc3VsdCIsImRlbGVnYXRlUmVzdWx0IiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInRyeUNhdGNoIiwibWFrZUludm9rZU1ldGhvZCIsImZuIiwib2JqIiwiZXJyIiwiaW52b2tlIiwicmVzb2x2ZSIsInJlamVjdCIsIlByb21pc2UiLCJ1bndyYXBwZWQiLCJwcmV2aW91c1Byb21pc2UiLCJwcm9jZXNzIiwiZG9tYWluIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJyZXR1cm4iLCJUeXBlRXJyb3IiLCJpbmZvIiwicHVzaFRyeUVudHJ5IiwibG9jcyIsIml0ZXJhdG9yTWV0aG9kIiwid2luZG93IiwiYnl0ZUxlbmd0aCIsImI2NCIsImxlbnMiLCJnZXRMZW5zIiwidmFsaWRMZW4iLCJwbGFjZUhvbGRlcnNMZW4iLCJ0b0J5dGVBcnJheSIsInRtcCIsImFyciIsIkFyciIsIl9ieXRlTGVuZ3RoIiwiY3VyQnl0ZSIsImxlbiIsInJldkxvb2t1cCIsImNoYXJDb2RlQXQiLCJmcm9tQnl0ZUFycmF5IiwidWludDgiLCJleHRyYUJ5dGVzIiwicGFydHMiLCJtYXhDaHVua0xlbmd0aCIsImxlbjIiLCJlbmNvZGVDaHVuayIsImxvb2t1cCIsImpvaW4iLCJVaW50OEFycmF5IiwiY29kZSIsInN0YXJ0IiwiZW5kIiwib3V0cHV0IiwiYmFzZTY0IiwiaWVlZTc1NCIsIkJ1ZmZlciIsIlNsb3dCdWZmZXIiLCJhbGxvYyIsIklOU1BFQ1RfTUFYX0JZVEVTIiwiS19NQVhfTEVOR1RIIiwiY3JlYXRlQnVmZmVyIiwiUmFuZ2VFcnJvciIsImJ1ZiIsImVuY29kaW5nT3JPZmZzZXQiLCJhbGxvY1Vuc2FmZSIsImZyb20iLCJpc0FycmF5QnVmZmVyIiwiYXJyYXkiLCJieXRlT2Zmc2V0IiwiZnJvbUFycmF5QnVmZmVyIiwic3RyaW5nIiwiZW5jb2RpbmciLCJpc0VuY29kaW5nIiwiYWN0dWFsIiwid3JpdGUiLCJmcm9tU3RyaW5nIiwiaXNCdWZmZXIiLCJjaGVja2VkIiwiY29weSIsImlzQXJyYXlCdWZmZXJWaWV3IiwibnVtYmVySXNOYU4iLCJmcm9tQXJyYXlMaWtlIiwiZGF0YSIsImZyb21PYmplY3QiLCJhc3NlcnRTaXplIiwic2l6ZSIsImxvd2VyZWRDYXNlIiwidXRmOFRvQnl0ZXMiLCJiYXNlNjRUb0J5dGVzIiwidG9Mb3dlckNhc2UiLCJzbG93VG9TdHJpbmciLCJoZXhTbGljZSIsInV0ZjhTbGljZSIsImFzY2lpU2xpY2UiLCJsYXRpbjFTbGljZSIsImJhc2U2NFNsaWNlIiwidXRmMTZsZVNsaWNlIiwic3dhcCIsImIiLCJuIiwibSIsImJpZGlyZWN0aW9uYWxJbmRleE9mIiwiYnVmZmVyIiwidmFsIiwiZGlyIiwiYXJyYXlJbmRleE9mIiwibGFzdEluZGV4T2YiLCJpbmRleFNpemUiLCJhcnJMZW5ndGgiLCJ2YWxMZW5ndGgiLCJyZWFkIiwicmVhZFVJbnQxNkJFIiwiZm91bmRJbmRleCIsImZvdW5kIiwiaGV4V3JpdGUiLCJvZmZzZXQiLCJOdW1iZXIiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJwYXJzZWQiLCJwYXJzZUludCIsInN1YnN0ciIsInV0ZjhXcml0ZSIsImJsaXRCdWZmZXIiLCJhc2NpaVdyaXRlIiwic3RyIiwiYnl0ZUFycmF5IiwiYXNjaWlUb0J5dGVzIiwibGF0aW4xV3JpdGUiLCJiYXNlNjRXcml0ZSIsInVjczJXcml0ZSIsImMiLCJoaSIsImxvIiwidXRmMTZsZVRvQnl0ZXMiLCJtaW4iLCJyZXMiLCJzZWNvbmRCeXRlIiwidGhpcmRCeXRlIiwiZm91cnRoQnl0ZSIsInRlbXBDb2RlUG9pbnQiLCJmaXJzdEJ5dGUiLCJjb2RlUG9pbnQiLCJieXRlc1BlclNlcXVlbmNlIiwiY29kZVBvaW50cyIsIk1BWF9BUkdVTUVOVFNfTEVOR1RIIiwiZnJvbUNoYXJDb2RlIiwiYXBwbHkiLCJkZWNvZGVDb2RlUG9pbnRzQXJyYXkiLCJrTWF4TGVuZ3RoIiwiVFlQRURfQVJSQVlfU1VQUE9SVCIsImZvbyIsImUiLCJ0eXBlZEFycmF5U3VwcG9ydCIsImNvbnNvbGUiLCJlcnJvciIsInNwZWNpZXMiLCJlbnVtZXJhYmxlIiwicG9vbFNpemUiLCJmaWxsIiwiYWxsb2NVbnNhZmVTbG93IiwiX2lzQnVmZmVyIiwiY29tcGFyZSIsImEiLCJ4IiwieSIsImNvbmNhdCIsImxpc3QiLCJwb3MiLCJzd2FwMTYiLCJzd2FwMzIiLCJzd2FwNjQiLCJhcmd1bWVudHMiLCJlcXVhbHMiLCJpbnNwZWN0IiwibWF4IiwibWF0Y2giLCJ0YXJnZXQiLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwiaW5jbHVkZXMiLCJpc0Zpbml0ZSIsInRvSlNPTiIsIl9hcnIiLCJyZXQiLCJvdXQiLCJieXRlcyIsImNoZWNrT2Zmc2V0IiwiZXh0IiwiY2hlY2tJbnQiLCJjaGVja0lFRUU3NTQiLCJ3cml0ZUZsb2F0IiwibGl0dGxlRW5kaWFuIiwibm9Bc3NlcnQiLCJ3cml0ZURvdWJsZSIsIm5ld0J1ZiIsInN1YmFycmF5IiwicmVhZFVJbnRMRSIsIm11bCIsInJlYWRVSW50QkUiLCJyZWFkVUludDgiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDMyTEUiLCJyZWFkVUludDMyQkUiLCJyZWFkSW50TEUiLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEZsb2F0TEUiLCJyZWFkRmxvYXRCRSIsInJlYWREb3VibGVMRSIsInJlYWREb3VibGVCRSIsIndyaXRlVUludExFIiwid3JpdGVVSW50QkUiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVVSW50MTZMRSIsIndyaXRlVUludDE2QkUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MzJCRSIsIndyaXRlSW50TEUiLCJsaW1pdCIsInN1YiIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsInRhcmdldFN0YXJ0Iiwic2V0IiwiSU5WQUxJRF9CQVNFNjRfUkUiLCJJbmZpbml0eSIsImxlYWRTdXJyb2dhdGUiLCJ0cmltIiwicmVwbGFjZSIsImJhc2U2NGNsZWFuIiwic3JjIiwiZHN0IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJpdCIsImNvZiIsIm1zZyIsIlVOU0NPUEFCTEVTIiwiQXJyYXlQcm90byIsImF0IiwiUyIsImluZGV4IiwidW5pY29kZSIsIkNvbnN0cnVjdG9yIiwiZm9yYmlkZGVuRmllbGQiLCJ0b09iamVjdCIsInRvQWJzb2x1dGVJbmRleCIsInRvTGVuZ3RoIiwiY29weVdpdGhpbiIsInRvIiwiY291bnQiLCJpbmMiLCJhTGVuIiwiZW5kUG9zIiwiZm9yT2YiLCJJVEVSQVRPUiIsInRvSU9iamVjdCIsIklTX0lOQ0xVREVTIiwiJHRoaXMiLCJlbCIsImZyb21JbmRleCIsImN0eCIsIklPYmplY3QiLCJhc2MiLCJUWVBFIiwiJGNyZWF0ZSIsIklTX01BUCIsIklTX0ZJTFRFUiIsIklTX1NPTUUiLCJJU19FVkVSWSIsIklTX0ZJTkRfSU5ERVgiLCJOT19IT0xFUyIsImNhbGxiYWNrZm4iLCJ0aGF0IiwiZiIsImFGdW5jdGlvbiIsIm1lbW8iLCJpc1JpZ2h0IiwiU1BFQ0lFUyIsIm9yaWdpbmFsIiwiQyIsInNwZWNpZXNDb25zdHJ1Y3RvciIsImFycmF5U2xpY2UiLCJmYWN0b3JpZXMiLCJjb25zdHJ1Y3QiLCJGIiwiYXJncyIsInBhcnRBcmdzIiwiYm91bmQiLCJUQUciLCJBUkciLCJUIiwiQiIsInRyeUdldCIsImNhbGxlZSIsImRQIiwicmVkZWZpbmVBbGwiLCJhbkluc3RhbmNlIiwiJGl0ZXJEZWZpbmUiLCJzdGVwIiwic2V0U3BlY2llcyIsIkRFU0NSSVBUT1JTIiwiZmFzdEtleSIsInZhbGlkYXRlIiwiU0laRSIsImdldEVudHJ5IiwiX2YiLCJnZXRDb25zdHJ1Y3RvciIsIndyYXBwZXIiLCJOQU1FIiwiQURERVIiLCJfdCIsIl9sIiwiY2xlYXIiLCJyIiwicCIsInYiLCJoYXMiLCJnZXQiLCJkZWYiLCJzZXRTdHJvbmciLCJpdGVyYXRlZCIsImtpbmQiLCJfayIsImNsYXNzb2YiLCJnZXRXZWFrIiwiYW5PYmplY3QiLCJjcmVhdGVBcnJheU1ldGhvZCIsIiRoYXMiLCJhcnJheUZpbmQiLCJhcnJheUZpbmRJbmRleCIsInVuY2F1Z2h0RnJvemVuU3RvcmUiLCJVbmNhdWdodEZyb3plblN0b3JlIiwiZmluZFVuY2F1Z2h0RnJvemVuIiwic3RvcmUiLCJzcGxpY2UiLCJ1ZnN0b3JlIiwiJGV4cG9ydCIsInJlZGVmaW5lIiwibWV0YSIsImZhaWxzIiwiJGl0ZXJEZXRlY3QiLCJzZXRUb1N0cmluZ1RhZyIsImluaGVyaXRJZlJlcXVpcmVkIiwibWV0aG9kcyIsImNvbW1vbiIsIklTX1dFQUsiLCJCYXNlIiwicHJvdG8iLCJmaXhNZXRob2QiLCJLRVkiLCJlbnRyaWVzIiwiaW5zdGFuY2UiLCJIQVNOVF9DSEFJTklORyIsIlRIUk9XU19PTl9QUklNSVRJVkVTIiwiQUNDRVBUX0lURVJBQkxFUyIsIkJVR0dZX1pFUk8iLCIkaW5zdGFuY2UiLCJORUVEIiwiRyIsIlciLCJjb3JlIiwidmVyc2lvbiIsIl9fZSIsIiRkZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZURlc2MiLCJnZXRUaW1lIiwiRGF0ZSIsIiR0b0lTT1N0cmluZyIsInRvSVNPU3RyaW5nIiwibHoiLCJOYU4iLCJkIiwiZ2V0VVRDRnVsbFllYXIiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJzIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsInRvUHJpbWl0aXZlIiwiTlVNQkVSIiwiaGludCIsImRvY3VtZW50IiwiaXMiLCJjcmVhdGVFbGVtZW50IiwiZ2V0S2V5cyIsImdPUFMiLCJwSUUiLCJnZXRTeW1ib2xzIiwic3ltYm9scyIsImlzRW51bSIsImhpZGUiLCJzb3VyY2UiLCJvd24iLCJleHAiLCJJU19GT1JDRUQiLCJJU19HTE9CQUwiLCJJU19TVEFUSUMiLCJJU19QUk9UTyIsIlAiLCJJU19CSU5EIiwiZXhwUHJvdG8iLCJVIiwiUiIsIk1BVENIIiwicmUiLCJleGVjIiwiZGVmaW5lZCIsIndrcyIsInJlZ2V4cEV4ZWMiLCJSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyIsImdyb3VwcyIsIlNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyIsIm9yaWdpbmFsRXhlYyIsIlNZTUJPTCIsIkRFTEVHQVRFU19UT19TWU1CT0wiLCJERUxFR0FURVNfVE9fRVhFQyIsImV4ZWNDYWxsZWQiLCJuYXRpdmVSZWdFeHBNZXRob2QiLCJmbnMiLCJuYXRpdmVNZXRob2QiLCJyZWdleHAiLCJhcmcyIiwiZm9yY2VTdHJpbmdNZXRob2QiLCJzdHJmbiIsInJ4Zm4iLCJSZWdFeHAiLCJpZ25vcmVDYXNlIiwibXVsdGlsaW5lIiwic3RpY2t5IiwiSVNfQ09OQ0FUX1NQUkVBREFCTEUiLCJmbGF0dGVuSW50b0FycmF5Iiwic291cmNlTGVuIiwiZGVwdGgiLCJtYXBwZXIiLCJ0aGlzQXJnIiwiZWxlbWVudCIsInNwcmVhZGFibGUiLCJ0YXJnZXRJbmRleCIsInNvdXJjZUluZGV4IiwibWFwRm4iLCJpc0FycmF5SXRlciIsImdldEl0ZXJGbiIsIkJSRUFLIiwiUkVUVVJOIiwiaXRlckZuIiwiX19nIiwiZG9jdW1lbnRFbGVtZW50IiwidW4iLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIkl0ZXJhdG9ycyIsImZsb29yIiwiaXNSZWdFeHAiLCJkZXNjcmlwdG9yIiwiTElCUkFSWSIsIiRpdGVyQ3JlYXRlIiwiQlVHR1kiLCJLRVlTIiwiVkFMVUVTIiwicmV0dXJuVGhpcyIsIkRFRkFVTFQiLCJJU19TRVQiLCJGT1JDRUQiLCJnZXRNZXRob2QiLCJERUZfVkFMVUVTIiwiVkFMVUVTX0JVRyIsIiRuYXRpdmUiLCIkZGVmYXVsdCIsIiRlbnRyaWVzIiwiJGFueU5hdGl2ZSIsIlNBRkVfQ0xPU0lORyIsInJpdGVyIiwic2tpcENsb3NpbmciLCJzYWZlIiwiJGV4cG0xIiwiZXhwbTEiLCJzaWduIiwiRVBTSUxPTiIsIkVQU0lMT04zMiIsIk1BWDMyIiwiTUlOMzIiLCJmcm91bmQiLCIkYWJzIiwiJHNpZ24iLCJsb2cxcCIsImxvZyIsInNjYWxlIiwiaW5Mb3ciLCJpbkhpZ2giLCJvdXRMb3ciLCJvdXRIaWdoIiwiTUVUQSIsInNldERlc2MiLCJpc0V4dGVuc2libGUiLCJGUkVFWkUiLCJwcmV2ZW50RXh0ZW5zaW9ucyIsInNldE1ldGEiLCJ3Iiwib25GcmVlemUiLCJNYXAiLCJzaGFyZWQiLCJnZXRPckNyZWF0ZU1ldGFkYXRhTWFwIiwidGFyZ2V0S2V5IiwidGFyZ2V0TWV0YWRhdGEiLCJrZXlNZXRhZGF0YSIsIk1ldGFkYXRhS2V5IiwibWV0YWRhdGFNYXAiLCJNZXRhZGF0YVZhbHVlIiwiXyIsIm1hY3JvdGFzayIsIk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCJpc05vZGUiLCJoZWFkIiwibGFzdCIsIm5vdGlmeSIsImZsdXNoIiwicGFyZW50IiwiZXhpdCIsImVudGVyIiwibmV4dFRpY2siLCJuYXZpZ2F0b3IiLCJzdGFuZGFsb25lIiwicHJvbWlzZSIsInRvZ2dsZSIsIm5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwidGFzayIsIlByb21pc2VDYXBhYmlsaXR5IiwiJCRyZXNvbHZlIiwiJCRyZWplY3QiLCIkYXNzaWduIiwiYXNzaWduIiwiQSIsIksiLCJkUHMiLCJlbnVtQnVnS2V5cyIsIklFX1BST1RPIiwiRW1wdHkiLCJjcmVhdGVEaWN0IiwiaWZyYW1lRG9jdW1lbnQiLCJpZnJhbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJjb250ZW50V2luZG93Iiwib3BlbiIsImx0IiwiY2xvc2UiLCJQcm9wZXJ0aWVzIiwiSUU4X0RPTV9ERUZJTkUiLCJBdHRyaWJ1dGVzIiwiZGVmaW5lUHJvcGVydGllcyIsInJhbmRvbSIsIl9fZGVmaW5lU2V0dGVyX18iLCJnT1BEIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ09QTiIsIndpbmRvd05hbWVzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldFdpbmRvd05hbWVzIiwiJGtleXMiLCJoaWRkZW5LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiT2JqZWN0UHJvdG8iLCJuYW1lcyIsImlzRW50cmllcyIsIlJlZmxlY3QiLCJvd25LZXlzIiwiJHBhcnNlRmxvYXQiLCIkdHJpbSIsIiRwYXJzZUludCIsIndzIiwiaGV4IiwicmFkaXgiLCJuZXdQcm9taXNlQ2FwYWJpbGl0eSIsInByb21pc2VDYXBhYmlsaXR5IiwiYml0bWFwIiwiU1JDIiwiJHRvU3RyaW5nIiwiVE9fU1RSSU5HIiwiVFBMIiwiaXNGdW5jdGlvbiIsImJ1aWx0aW5FeGVjIiwicmUxIiwicmUyIiwicmVnZXhwRmxhZ3MiLCJuYXRpdmVFeGVjIiwibmF0aXZlUmVwbGFjZSIsInBhdGNoZWRFeGVjIiwiVVBEQVRFU19MQVNUX0lOREVYX1dST05HIiwiTlBDR19JTkNMVURFRCIsImxhc3RJbmRleCIsInJlQ29weSIsInJlZ0V4cCIsInJlcGxhY2VyIiwicGFydCIsIkNPTExFQ1RJT04iLCJtYXBwaW5nIiwiY2IiLCJuZXh0SXRlbSIsIm9mIiwiY2hlY2siLCJidWdneSIsInRhZyIsInN0YXQiLCJ1aWQiLCJTSEFSRUQiLCJtb2RlIiwiY29weXJpZ2h0IiwiRCIsInRvSW50ZWdlciIsInNlYXJjaFN0cmluZyIsInF1b3QiLCJjcmVhdGVIVE1MIiwiYXR0cmlidXRlIiwicmVwZWF0IiwibWF4TGVuZ3RoIiwiZmlsbFN0cmluZyIsImxlZnQiLCJzdHJpbmdMZW5ndGgiLCJmaWxsU3RyIiwiaW50TWF4TGVuZ3RoIiwiZmlsbExlbiIsInN0cmluZ0ZpbGxlciIsImNlaWwiLCJzcGFjZXMiLCJzcGFjZSIsImx0cmltIiwicnRyaW0iLCJleHBvcnRlciIsIkFMSUFTIiwiRk9SQ0UiLCJkZWZlciIsImNoYW5uZWwiLCJwb3J0IiwiaHRtbCIsImNlbCIsInNldFRhc2siLCJzZXRJbW1lZGlhdGUiLCJjbGVhclRhc2siLCJjbGVhckltbWVkaWF0ZSIsIk1lc3NhZ2VDaGFubmVsIiwiRGlzcGF0Y2giLCJjb3VudGVyIiwicXVldWUiLCJydW4iLCJsaXN0ZW5lciIsImV2ZW50Iiwibm93IiwicG9ydDIiLCJwb3J0MSIsIm9ubWVzc2FnZSIsInBvc3RNZXNzYWdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImltcG9ydFNjcmlwdHMiLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwic2V0VGltZW91dCIsIm51bWJlciIsInZhbHVlT2YiLCIkdHlwZWQiLCIkYnVmZmVyIiwicHJvcGVydHlEZXNjIiwidG9JbmRleCIsImNyZWF0ZUFycmF5SW5jbHVkZXMiLCJBcnJheUl0ZXJhdG9ycyIsImFycmF5RmlsbCIsImFycmF5Q29weVdpdGhpbiIsIiREUCIsIiRHT1BEIiwiQVJSQVlfQlVGRkVSIiwiU0hBUkVEX0JVRkZFUiIsIkJZVEVTX1BFUl9FTEVNRU5UIiwiJEFycmF5QnVmZmVyIiwiJERhdGFWaWV3IiwiRGF0YVZpZXciLCJhcnJheUZvckVhY2giLCJhcnJheUZpbHRlciIsImFycmF5U29tZSIsImFycmF5RXZlcnkiLCJhcnJheUluY2x1ZGVzIiwiYXJyYXlWYWx1ZXMiLCJhcnJheUtleXMiLCJhcnJheUVudHJpZXMiLCJhcnJheUxhc3RJbmRleE9mIiwiYXJyYXlSZWR1Y2UiLCJyZWR1Y2UiLCJhcnJheVJlZHVjZVJpZ2h0IiwicmVkdWNlUmlnaHQiLCJhcnJheUpvaW4iLCJhcnJheVNvcnQiLCJzb3J0IiwiYXJyYXlUb1N0cmluZyIsImFycmF5VG9Mb2NhbGVTdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsIlRZUEVEX0NPTlNUUlVDVE9SIiwiREVGX0NPTlNUUlVDVE9SIiwiQUxMX0NPTlNUUlVDVE9SUyIsIkNPTlNUUiIsIlRZUEVEX0FSUkFZIiwiVFlQRUQiLCJWSUVXIiwiV1JPTkdfTEVOR1RIIiwiJG1hcCIsImFsbG9jYXRlIiwiTElUVExFX0VORElBTiIsIlVpbnQxNkFycmF5IiwiRk9SQ0VEX1NFVCIsInRvT2Zmc2V0IiwiQllURVMiLCJzcGVjaWVzRnJvbUxpc3QiLCJmcm9tTGlzdCIsImFkZEdldHRlciIsImludGVybmFsIiwiX2QiLCIkZnJvbSIsIm1hcGZuIiwiJG9mIiwiVE9fTE9DQUxFX0JVRyIsIiR0b0xvY2FsZVN0cmluZyIsImV2ZXJ5IiwiZmlsdGVyIiwiZmluZCIsInByZWRpY2F0ZSIsImZpbmRJbmRleCIsInNlYXJjaEVsZW1lbnQiLCJzZXBhcmF0b3IiLCJtaWRkbGUiLCJzb21lIiwiY29tcGFyZWZuIiwiYmVnaW4iLCIkYmVnaW4iLCIkc2xpY2UiLCIkc2V0IiwiYXJyYXlMaWtlIiwiJGl0ZXJhdG9ycyIsImlzVEFJbmRleCIsIiRnZXREZXNjIiwiJHNldERlc2MiLCJkZXNjIiwiJFR5cGVkQXJyYXlQcm90b3R5cGUkIiwiQ0xBTVBFRCIsIkdFVFRFUiIsIlNFVFRFUiIsIlR5cGVkQXJyYXkiLCJUQUMiLCJBQlYiLCJUeXBlZEFycmF5UHJvdG90eXBlIiwiYWRkRWxlbWVudCIsIm8iLCJnZXR0ZXIiLCJzZXR0ZXIiLCIkb2Zmc2V0IiwiJGxlbmd0aCIsImtsYXNzIiwiJGxlbiIsIiRuYXRpdmVJdGVyYXRvciIsIkNPUlJFQ1RfSVRFUl9OQU1FIiwiJGl0ZXJhdG9yIiwiREFUQV9WSUVXIiwiV1JPTkdfSU5ERVgiLCJCYXNlQnVmZmVyIiwiTE4yIiwiQlVGRkVSIiwiQllURV9MRU5HVEgiLCJCWVRFX09GRlNFVCIsIiRCVUZGRVIiLCIkTEVOR1RIIiwiJE9GRlNFVCIsInBhY2tJRUVFNzU0IiwibUxlbiIsIm5CeXRlcyIsImVMZW4iLCJlTWF4IiwiZUJpYXMiLCJydCIsInVucGFja0lFRUU3NTQiLCJuQml0cyIsInVucGFja0kzMiIsInBhY2tJOCIsInBhY2tJMTYiLCJwYWNrSTMyIiwicGFja0Y2NCIsInBhY2tGMzIiLCJ2aWV3IiwiaXNMaXR0bGVFbmRpYW4iLCJpbnRJbmRleCIsIl9iIiwicGFjayIsImNvbnZlcnNpb24iLCJBcnJheUJ1ZmZlclByb3RvIiwiJHNldEludDgiLCJzZXRJbnQ4IiwiZ2V0SW50OCIsInNldFVpbnQ4IiwiYnVmZmVyTGVuZ3RoIiwiZ2V0VWludDgiLCJnZXRJbnQxNiIsImdldFVpbnQxNiIsImdldEludDMyIiwiZ2V0VWludDMyIiwiZ2V0RmxvYXQzMiIsImdldEZsb2F0NjQiLCJzZXRJbnQxNiIsInNldFVpbnQxNiIsInNldEludDMyIiwic2V0VWludDMyIiwic2V0RmxvYXQzMiIsInNldEZsb2F0NjQiLCJUeXBlZCIsIlR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMiLCJweCIsInVzZXJBZ2VudCIsIndrc0V4dCIsIlVTRV9TWU1CT0wiLCIkcmUiLCJlc2NhcGUiLCIkZXZlcnkiLCIkZmlsdGVyIiwiJGZpbmQiLCJmb3JjZWQiLCIkZm9yRWFjaCIsIlNUUklDVCIsImNyZWF0ZVByb3BlcnR5IiwiJGluZGV4T2YiLCJORUdBVElWRV9aRVJPIiwiYWRkVG9VbnNjb3BhYmxlcyIsIkFyZ3VtZW50cyIsIiRyZWR1Y2UiLCJ1cFRvIiwiJHNvbWUiLCIkc29ydCIsInB2IiwiVE9fUFJJTUlUSVZFIiwiRGF0ZVByb3RvIiwiSU5WQUxJRF9EQVRFIiwiSEFTX0lOU1RBTkNFIiwiRnVuY3Rpb25Qcm90byIsIkZQcm90byIsIm5hbWVSRSIsInN0cm9uZyIsIk1BUCIsInNxcnQiLCIkYWNvc2giLCJhY29zaCIsIk1BWF9WQUxVRSIsIiRhc2luaCIsImFzaW5oIiwiJGF0YW5oIiwiYXRhbmgiLCJjYnJ0IiwiY2x6MzIiLCJMT0cyRSIsImNvc2giLCJoeXBvdCIsInZhbHVlMSIsInZhbHVlMiIsImRpdiIsInN1bSIsImxhcmciLCIkaW11bCIsImltdWwiLCJVSU5UMTYiLCJ4biIsInluIiwieGwiLCJ5bCIsImxvZzEwIiwiTE9HMTBFIiwibG9nMiIsInNpbmgiLCJFIiwidGFuaCIsInRydW5jIiwiJE51bWJlciIsIkJST0tFTl9DT0YiLCJUUklNIiwidG9OdW1iZXIiLCJhcmd1bWVudCIsInRoaXJkIiwibWF4Q29kZSIsImZpcnN0IiwiZGlnaXRzIiwiX2lzRmluaXRlIiwiaXNJbnRlZ2VyIiwiaXNTYWZlSW50ZWdlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJNSU5fU0FGRV9JTlRFR0VSIiwicGFyc2VGbG9hdCIsImFOdW1iZXJWYWx1ZSIsIiR0b0ZpeGVkIiwidG9GaXhlZCIsIkVSUk9SIiwiWkVSTyIsIm11bHRpcGx5IiwiYzIiLCJkaXZpZGUiLCJudW1Ub1N0cmluZyIsInQiLCJhY2MiLCJmcmFjdGlvbkRpZ2l0cyIsInoiLCJ4MiIsIiRmYWlscyIsIiR0b1ByZWNpc2lvbiIsInRvUHJlY2lzaW9uIiwiJGZyZWV6ZSIsIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCIkZ2V0UHJvdG90eXBlT2YiLCIkaXNFeHRlbnNpYmxlIiwiJGlzRnJvemVuIiwiJGlzU2VhbGVkIiwiJHByZXZlbnRFeHRlbnNpb25zIiwiJHNlYWwiLCJJbnRlcm5hbCIsIm5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSIsIk93blByb21pc2VDYXBhYmlsaXR5IiwiV3JhcHBlciIsIm1pY3JvdGFzayIsIm5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlIiwicGVyZm9ybSIsInByb21pc2VSZXNvbHZlIiwiUFJPTUlTRSIsInZlcnNpb25zIiwidjgiLCIkUHJvbWlzZSIsImVtcHR5IiwiVVNFX05BVElWRSIsIkZha2VQcm9taXNlIiwiUHJvbWlzZVJlamVjdGlvbkV2ZW50IiwiaXNUaGVuYWJsZSIsImlzUmVqZWN0IiwiX24iLCJjaGFpbiIsIl9jIiwiX3YiLCJvayIsIl9zIiwicmVhY3Rpb24iLCJleGl0ZWQiLCJoYW5kbGVyIiwiZmFpbCIsIl9oIiwib25IYW5kbGVVbmhhbmRsZWQiLCJvblVuaGFuZGxlZCIsInVuaGFuZGxlZCIsImlzVW5oYW5kbGVkIiwiZW1pdCIsIm9udW5oYW5kbGVkcmVqZWN0aW9uIiwicmVhc29uIiwib25yZWplY3Rpb25oYW5kbGVkIiwiJHJlamVjdCIsIl93IiwiJHJlc29sdmUiLCJleGVjdXRvciIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImNhcGFiaWxpdHkiLCJhbGwiLCIkaW5kZXgiLCJhbHJlYWR5Q2FsbGVkIiwicmFjZSIsInJBcHBseSIsImZBcHBseSIsInRoaXNBcmd1bWVudCIsImFyZ3VtZW50c0xpc3QiLCJMIiwickNvbnN0cnVjdCIsIk5FV19UQVJHRVRfQlVHIiwiQVJHU19CVUciLCJUYXJnZXQiLCJuZXdUYXJnZXQiLCIkYXJncyIsInByb3BlcnR5S2V5IiwiYXR0cmlidXRlcyIsImRlbGV0ZVByb3BlcnR5IiwiRW51bWVyYXRlIiwiZW51bWVyYXRlIiwicmVjZWl2ZXIiLCJzZXRQcm90byIsIlYiLCJleGlzdGluZ0Rlc2NyaXB0b3IiLCJvd25EZXNjIiwiJGZsYWdzIiwiJFJlZ0V4cCIsIkNPUlJFQ1RfTkVXIiwidGlSRSIsInBpUkUiLCJmaVUiLCJwcm94eSIsImZsYWdzIiwiYWR2YW5jZVN0cmluZ0luZGV4IiwicmVnRXhwRXhlYyIsIiRtYXRjaCIsIm1heWJlQ2FsbE5hdGl2ZSIsInJ4IiwiZnVsbFVuaWNvZGUiLCJtYXRjaFN0ciIsIlNVQlNUSVRVVElPTl9TWU1CT0xTIiwiU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQiLCJSRVBMQUNFIiwiJHJlcGxhY2UiLCJzZWFyY2hWYWx1ZSIsInJlcGxhY2VWYWx1ZSIsImZ1bmN0aW9uYWxSZXBsYWNlIiwicmVzdWx0cyIsImFjY3VtdWxhdGVkUmVzdWx0IiwibmV4dFNvdXJjZVBvc2l0aW9uIiwibWF0Y2hlZCIsInBvc2l0aW9uIiwiY2FwdHVyZXMiLCJuYW1lZENhcHR1cmVzIiwicmVwbGFjZXJBcmdzIiwicmVwbGFjZW1lbnQiLCJnZXRTdWJzdGl0dXRpb24iLCJ0YWlsUG9zIiwiY2giLCJjYXB0dXJlIiwic2FtZVZhbHVlIiwiU0VBUkNIIiwiJHNlYXJjaCIsInByZXZpb3VzTGFzdEluZGV4IiwiY2FsbFJlZ0V4cEV4ZWMiLCIkbWluIiwiJHB1c2giLCJNQVhfVUlOVDMyIiwiU1VQUE9SVFNfWSIsIlNQTElUIiwiJHNwbGl0IiwiaW50ZXJuYWxTcGxpdCIsImxhc3RMZW5ndGgiLCJsYXN0TGFzdEluZGV4Iiwic3BsaXRMaW1pdCIsInNlcGFyYXRvckNvcHkiLCJzcGxpdHRlciIsInVuaWNvZGVNYXRjaGluZyIsImxpbSIsInEiLCJhZGQiLCIkYXQiLCJjb2RlUG9pbnRBdCIsIkVORFNfV0lUSCIsIiRlbmRzV2l0aCIsImVuZHNXaXRoIiwiZW5kUG9zaXRpb24iLCJzZWFyY2giLCJjb2xvciIsIiRmcm9tQ29kZVBvaW50IiwiZnJvbUNvZGVQb2ludCIsIklOQ0xVREVTIiwidXJsIiwicmF3IiwiY2FsbFNpdGUiLCJ0cGwiLCJTVEFSVFNfV0lUSCIsIiRzdGFydHNXaXRoIiwic3RhcnRzV2l0aCIsIndrc0RlZmluZSIsImVudW1LZXlzIiwiX2NyZWF0ZSIsImdPUE5FeHQiLCIkR09QUyIsIiRKU09OIiwiSlNPTiIsIl9zdHJpbmdpZnkiLCJzdHJpbmdpZnkiLCJISURERU4iLCJTeW1ib2xSZWdpc3RyeSIsIkFsbFN5bWJvbHMiLCJPUFN5bWJvbHMiLCJRT2JqZWN0IiwiZmluZENoaWxkIiwic2V0U3ltYm9sRGVzYyIsInByb3RvRGVzYyIsInN5bSIsImlzU3ltYm9sIiwiJGRlZmluZVByb3BlcnRpZXMiLCIkcHJvcGVydHlJc0VudW1lcmFibGUiLCIkZ2V0T3duUHJvcGVydHlOYW1lcyIsIiRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJJU19PUCIsImVzNlN5bWJvbHMiLCJ3ZWxsS25vd25TeW1ib2xzIiwia2V5Rm9yIiwidXNlU2V0dGVyIiwidXNlU2ltcGxlIiwiRkFJTFNfT05fUFJJTUlUSVZFUyIsIiRyZXBsYWNlciIsIiRpc1ZpZXciLCJmaW4iLCJ2aWV3UyIsInZpZXdUIiwiaW5pdCIsIkludGVybmFsTWFwIiwiZWFjaCIsIndlYWsiLCJOQVRJVkVfV0VBS19NQVAiLCJJU19JRTExIiwiQWN0aXZlWE9iamVjdCIsIldFQUtfTUFQIiwiJFdlYWtNYXAiLCJXRUFLX1NFVCIsImFycmF5U3BlY2llc0NyZWF0ZSIsImZsYXRNYXAiLCJmbGF0dGVuIiwiZGVwdGhBcmciLCIkaW5jbHVkZXMiLCJhc2FwIiwiaXNFcnJvciIsImNsYW1wIiwibG93ZXIiLCJ1cHBlciIsIkRFR19QRVJfUkFEIiwiUkFEX1BFUl9ERUciLCJmc2NhbGUiLCJpYWRkaCIsIngwIiwieDEiLCJ5MCIsInkxIiwiJHgwIiwiJHkwIiwiaW11bGgiLCJ1IiwiJHUiLCIkdiIsInUwIiwidjAiLCJ1MSIsInYxIiwiaXN1YmgiLCJzaWduYml0IiwidW11bGgiLCJfX2RlZmluZUdldHRlcl9fIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImdldERlc2MiLCJfX2xvb2t1cEdldHRlcl9fIiwiX19sb29rdXBTZXR0ZXJfXyIsIiR2YWx1ZXMiLCJPQlNFUlZBQkxFIiwiY2xlYW51cFN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvbiIsImNsZWFudXAiLCJzdWJzY3JpcHRpb25DbG9zZWQiLCJfbyIsImNsb3NlU3Vic2NyaXB0aW9uIiwiU3Vic2NyaXB0aW9uIiwib2JzZXJ2ZXIiLCJzdWJzY3JpYmVyIiwiU3Vic2NyaXB0aW9uT2JzZXJ2ZXIiLCJ1bnN1YnNjcmliZSIsIiRPYnNlcnZhYmxlIiwic3Vic2NyaWJlIiwib2JzZXJ2YWJsZSIsIml0ZW1zIiwiT2JzZXJ2YWJsZSIsIm9uRmluYWxseSIsIm1ldGFkYXRhIiwidG9NZXRhS2V5Iiwib3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSIsImRlZmluZU1ldGFkYXRhIiwibWV0YWRhdGFLZXkiLCJtZXRhZGF0YVZhbHVlIiwiZGVsZXRlTWV0YWRhdGEiLCJTZXQiLCJvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyIsIm9yZGluYXJ5TWV0YWRhdGFLZXlzIiwib0tleXMiLCJwS2V5cyIsImdldE1ldGFkYXRhS2V5cyIsIm9yZGluYXJ5SGFzT3duTWV0YWRhdGEiLCJvcmRpbmFyeUdldE93bk1ldGFkYXRhIiwib3JkaW5hcnlHZXRNZXRhZGF0YSIsImdldE1ldGFkYXRhIiwiZ2V0T3duTWV0YWRhdGFLZXlzIiwiZ2V0T3duTWV0YWRhdGEiLCJvcmRpbmFyeUhhc01ldGFkYXRhIiwiaGFzTWV0YWRhdGEiLCJoYXNPd25NZXRhZGF0YSIsIiRtZXRhZGF0YSIsImdldEZsYWdzIiwiUmVnRXhwUHJvdG8iLCIkUmVnRXhwU3RyaW5nSXRlcmF0b3IiLCJfciIsIm1hdGNoQWxsIiwiJHBhZCIsIldFQktJVF9CVUciLCJUT19TVFJJTkdfVEFHIiwiQXJyYXlWYWx1ZXMiLCJET01JdGVyYWJsZXMiLCJDU1NSdWxlTGlzdCIsIkNTU1N0eWxlRGVjbGFyYXRpb24iLCJDU1NWYWx1ZUxpc3QiLCJDbGllbnRSZWN0TGlzdCIsIkRPTVJlY3RMaXN0IiwiRE9NU3RyaW5nTGlzdCIsIkRPTVRva2VuTGlzdCIsIkRhdGFUcmFuc2Zlckl0ZW1MaXN0IiwiRmlsZUxpc3QiLCJIVE1MQWxsQ29sbGVjdGlvbiIsIkhUTUxDb2xsZWN0aW9uIiwiSFRNTEZvcm1FbGVtZW50IiwiSFRNTFNlbGVjdEVsZW1lbnQiLCJNZWRpYUxpc3QiLCJNaW1lVHlwZUFycmF5IiwiTmFtZWROb2RlTWFwIiwiTm9kZUxpc3QiLCJQYWludFJlcXVlc3RMaXN0IiwiUGx1Z2luIiwiUGx1Z2luQXJyYXkiLCJTVkdMZW5ndGhMaXN0IiwiU1ZHTnVtYmVyTGlzdCIsIlNWR1BhdGhTZWdMaXN0IiwiU1ZHUG9pbnRMaXN0IiwiU1ZHU3RyaW5nTGlzdCIsIlNWR1RyYW5zZm9ybUxpc3QiLCJTb3VyY2VCdWZmZXJMaXN0IiwiU3R5bGVTaGVldExpc3QiLCJUZXh0VHJhY2tDdWVMaXN0IiwiVGV4dFRyYWNrTGlzdCIsIlRvdWNoTGlzdCIsImNvbGxlY3Rpb25zIiwiZXhwbGljaXQiLCJDb2xsZWN0aW9uIiwiJHRhc2siLCJNU0lFIiwidGltZSIsImJvdW5kQXJncyIsInNldEludGVydmFsIiwiRW1pdHRlciIsIm1peGluIiwib24iLCJfY2FsbGJhY2tzIiwib25jZSIsIm9mZiIsInJlbW92ZUxpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNhbGxiYWNrcyIsImxpc3RlbmVycyIsImhhc0xpc3RlbmVycyIsIkV2ZW50RW1pdHRlciIsIl9ldmVudHMiLCJfbWF4TGlzdGVuZXJzIiwiaXNVbmRlZmluZWQiLCJkZWZhdWx0TWF4TGlzdGVuZXJzIiwic2V0TWF4TGlzdGVuZXJzIiwiZXIiLCJhZGRMaXN0ZW5lciIsIm5ld0xpc3RlbmVyIiwid2FybmVkIiwidHJhY2UiLCJmaXJlZCIsImxpc3RlbmVyQ291bnQiLCJldmxpc3RlbmVyIiwiZW1pdHRlciIsImlzTEUiLCJERUZBVUxUX0NPTVBBUkUiLCJTcGxheVRyZWUiLCJub0R1cGxpY2F0ZXMiLCJfY29tcGFyZSIsIl9yb290IiwiX3NpemUiLCJfbm9EdXBsaWNhdGVzIiwicHJvdG90eXBlQWNjZXNzb3JzIiwibG9hZFJlY3Vyc2l2ZSIsInJpZ2h0IiwicGl2b3QiLCJyb3RhdGVMZWZ0Iiwicm90YXRlUmlnaHQiLCJfc3BsYXkiLCJ0aGlzJDEiLCJzcGxheSIsImdwIiwiZ2dwIiwibWluTm9kZSIsIm1heE5vZGUiLCJpbnNlcnQiLCJjb21wIiwiY21wIiwiY29udGFpbnMiLCJjb21wYXJhdG9yIiwicmVtb3ZlIiwicmVtb3ZlTm9kZSIsImVyYXNlIiwic01heCIsInJldHVyblZhbHVlIiwic3VjY2Vzc29yIiwicHJlZGVjZXNzb3IiLCJjdXJyZW50IiwicmFuZ2UiLCJsb3ciLCJoaWdoIiwiUSIsImxvYWQiLCJwcmVzb3J0IiwiaXNFbXB0eSIsImNyZWF0ZVRyZWUiLCJjb21wdXRlRmllbGRzIiwib3BlcmF0aW9uIiwiaW5PdXQiLCJvdGhlckluT3V0IiwiaXNTdWJqZWN0IiwiaXNWZXJ0aWNhbCIsInByZXZJblJlc3VsdCIsImluUmVzdWx0IiwiU3dlZXBFdmVudCIsIm90aGVyRXZlbnQiLCJlZGdlVHlwZSIsInJlc3VsdEluT3V0IiwiaXNFeHRlcmlvclJpbmciLCJzaWduZWRBcmVhIiwicDAiLCJjb21wYXJlRXZlbnRzIiwiZTEiLCJlMiIsImlzQmVsb3ciLCJzcGVjaWFsQ2FzZXMiLCJkaXZpZGVTZWdtZW50Iiwic2UiLCJ3YXJuIiwiY29udG91cklkIiwiY3Jvc3NQcm9kdWN0IiwiZG90UHJvZHVjdCIsInBvc3NpYmxlSW50ZXJzZWN0aW9uIiwic2UxIiwic2UyIiwiaW50ZXIiLCJhMSIsImEyIiwiYjEiLCJiMiIsIm5vRW5kcG9pbnRUb3VjaCIsInZhIiwidmIiLCJ0b1BvaW50Iiwia3Jvc3MiLCJzcXJLcm9zcyIsInNxckxlbkEiLCJzYSIsInNiIiwic21pbiIsInNtYXgiLCJpbnRlcnNlY3Rpb24iLCJuaW50ZXJzZWN0aW9ucyIsImV2ZW50cyIsImxlZnRDb2luY2lkZSIsInJpZ2h0Q29pbmNpZGUiLCJjb21wYXJlU2VnbWVudHMiLCJsZTEiLCJsZTIiLCJpc0Fib3ZlIiwibmV4dFBvcyIsInJlc3VsdEV2ZW50cyIsInByb2Nlc3NlZCIsIm9yaWdJbmRleCIsIm5ld1BvcyIsImNvbm5lY3RFZGdlcyIsInNvcnRlZEV2ZW50cyIsInNvcnRlZCIsIm9yZGVyRXZlbnRzIiwiY29udG91ciIsInJpbmdJZCIsImluaXRpYWwiLCJjbG9uZSIsInRpbnlxdWV1ZSIsIlRpbnlRdWV1ZSIsImRlZmF1bHRfMSIsImRlZmF1bHRDb21wYXJlIiwiX2Rvd24iLCJfdXAiLCJ0b3AiLCJwZWVrIiwiaGFsZkxlbmd0aCIsImJlc3QiLCJkZWZhdWx0IiwicHJvY2Vzc1BvbHlnb24iLCJjb250b3VyT3JIb2xlIiwiczEiLCJzMiIsIkVNUFRZIiwiYm9vbGVhbiIsInN1YmplY3QiLCJjbGlwcGluZyIsInRyaXZpYWwiLCJ0cml2aWFsT3BlcmF0aW9uIiwic2Jib3giLCJjYmJveCIsImV2ZW50UXVldWUiLCJwb2x5Z29uU2V0IiwiaWkiLCJqaiIsImZpbGxRdWV1ZSIsImNvbXBhcmVCQm94ZXMiLCJzd2VlcExpbmUiLCJyaWdodGJvdW5kIiwicHJldkV2ZW50IiwicHJldnByZXYiLCJzdWJkaXZpZGUiLCJvcGVyYXRpb25zIiwiVU5JT04iLCJESUZGRVJFTkNFIiwiSU5URVJTRUNUSU9OIiwiWE9SIiwiZGlmZiIsInhvciIsImZhY3RvcnkiLCJyYW5kb21Db2xvciIsInNlZWQiLCJjb2xvckRpY3Rpb25hcnkiLCJkZWZpbmVDb2xvciIsImNvbG9yUmFuZ2VzIiwic3RyaW5nVG9JbnRlZ2VyIiwiSCIsInRvdGFsQ29sb3JzIiwiY29sb3JzIiwiaHN2IiwiZm9ybWF0IiwiSFNWdG9IU0wiLCJoc2wiLCJoc2xDb2xvciIsImFscGhhIiwiSFNWdG9SR0IiLCJyZ2JDb2xvciIsInJnYiIsImNvbXBvbmVudFRvSGV4IiwiSFNWdG9IZXgiLCJzZXRGb3JtYXQiLCJwaWNrSHVlIiwicGlja1NhdHVyYXRpb24iLCJwaWNrQnJpZ2h0bmVzcyIsImh1ZSIsInJhbmRvbVdpdGhpbiIsImh1ZVJhbmdlIiwiY29sb3JIdWUiLCJnZXRDb2xvckluZm8iLCJIZXhUb0hTQiIsImdldFJlYWxIdWVSYW5nZSIsImNvbG9ySW5wdXQiLCJnZXRIdWVSYW5nZSIsImx1bWlub3NpdHkiLCJzYXR1cmF0aW9uUmFuZ2UiLCJnZXRTYXR1cmF0aW9uUmFuZ2UiLCJzTWluIiwiYk1pbiIsImxvd2VyQm91bmRzIiwidjIiLCJnZXRNaW5pbXVtQnJpZ2h0bmVzcyIsImJNYXgiLCJjb2xvck5hbWUiLCJybmQiLCJicmlnaHRuZXNzUmFuZ2UiLCJoIiwiaF9pIiwicmVkIiwiZ3JlZW4iLCJibHVlIiwiY01heCIsImRlbHRhIiwic2F0dXJhdGlvbiIsInNheCIsInBhcnNlciIsInN0cmljdCIsIm9wdCIsIlNBWFBhcnNlciIsIlNBWFN0cmVhbSIsImNyZWF0ZVN0cmVhbSIsIk1BWF9CVUZGRVJfTEVOR1RIIiwiYnVmZmVycyIsImNsZWFyQnVmZmVycyIsImJ1ZmZlckNoZWNrUG9zaXRpb24iLCJsb3dlcmNhc2UiLCJsb3dlcmNhc2V0YWdzIiwibG9vc2VDYXNlIiwidGFncyIsImNsb3NlZCIsImNsb3NlZFJvb3QiLCJzYXdSb290Iiwibm9zY3JpcHQiLCJCRUdJTiIsIkVOVElUSUVTIiwiYXR0cmliTGlzdCIsInhtbG5zIiwibnMiLCJyb290TlMiLCJ0cmFja1Bvc2l0aW9uIiwibGluZSIsImNvbHVtbiIsIkVWRU5UUyIsImNodW5rIiwiT1BFTl9XQUtBIiwic3RhcnRUYWdQb3NpdGlvbiIsIm5vdCIsIndoaXRlc3BhY2UiLCJzdHJpY3RGYWlsIiwidGV4dE5vZGUiLCJURVhUIiwic3RhcnRpIiwic3Vic3RyaW5nIiwiVEVYVF9FTlRJVFkiLCJTQ1JJUFQiLCJTQ1JJUFRfRU5ESU5HIiwic2NyaXB0IiwiQ0xPU0VfVEFHIiwiU0dNTF9ERUNMIiwic2dtbERlY2wiLCJuYW1lU3RhcnQiLCJPUEVOX1RBRyIsInRhZ05hbWUiLCJQUk9DX0lOU1QiLCJwcm9jSW5zdE5hbWUiLCJwcm9jSW5zdEJvZHkiLCJwYWQiLCJ0b1VwcGVyQ2FzZSIsImVtaXROb2RlIiwiQ0RBVEEiLCJjZGF0YSIsIkNPTU1FTlQiLCJjb21tZW50IiwiRE9DVFlQRSIsImRvY3R5cGUiLCJxdW90ZSIsIlNHTUxfREVDTF9RVU9URUQiLCJET0NUWVBFX0RURCIsIkRPQ1RZUEVfUVVPVEVEIiwiRE9DVFlQRV9EVERfUVVPVEVEIiwiQ09NTUVOVF9FTkRJTkciLCJDT01NRU5UX0VOREVEIiwidGV4dG9wdHMiLCJDREFUQV9FTkRJTkciLCJDREFUQV9FTkRJTkdfMiIsIlBST0NfSU5TVF9FTkRJTkciLCJQUk9DX0lOU1RfQk9EWSIsImJvZHkiLCJuYW1lQm9keSIsIm5ld1RhZyIsIm9wZW5UYWciLCJPUEVOX1RBR19TTEFTSCIsIkFUVFJJQiIsImNsb3NlVGFnIiwiYXR0cmliTmFtZSIsImF0dHJpYlZhbHVlIiwiQVRUUklCX05BTUUiLCJBVFRSSUJfVkFMVUUiLCJhdHRyaWIiLCJBVFRSSUJfTkFNRV9TQVdfV0hJVEUiLCJBVFRSSUJfVkFMVUVfUVVPVEVEIiwiQVRUUklCX1ZBTFVFX1VOUVVPVEVEIiwiQVRUUklCX1ZBTFVFX0VOVElUWV9RIiwiQVRUUklCX1ZBTFVFX0NMT1NFRCIsImF0dHJpYkVuZCIsIkFUVFJJQl9WQUxVRV9FTlRJVFlfVSIsIkNMT1NFX1RBR19TQVdfV0hJVEUiLCJyZXR1cm5TdGF0ZSIsInBhcnNlRW50aXR5IiwiZW50aXR5IiwibWF4QWxsb3dlZCIsIm1heEFjdHVhbCIsImNsb3NlVGV4dCIsImNoZWNrQnVmZmVyTGVuZ3RoIiwicmVzdW1lIiwiU3RyZWFtIiwiZXgiLCJzdHJlYW1XcmFwcyIsImV2IiwiX3BhcnNlciIsInJlYWRhYmxlIiwibWUiLCJvbmVuZCIsIm9uZXJyb3IiLCJfZGVjb2RlciIsIlNEIiwibGV0dGVyIiwiWE1MX05BTUVTUEFDRSIsIlhNTE5TX05BTUVTUEFDRSIsInhtbCIsImNoYXJDbGFzcyIsImNoYXJjbGFzcyIsInN0cmluZ0Zyb21DaGFyQ29kZSIsIlNUQVRFIiwiQ09NTUVOVF9TVEFSVElORyIsIm5vZGVUeXBlIiwidGV4dCIsIm5vcm1hbGl6ZSIsIm1lc3NhZ2UiLCJxbmFtZSIsInF1YWxOYW1lIiwicHJlZml4IiwibG9jYWwiLCJxbiIsInNlbGZDbG9zaW5nIiwidXJpIiwibnYiLCJpc1NlbGZDbG9zaW5nIiwiY2xvc2VUbyIsImVudGl0eUxDIiwibnVtU3RyIiwiaGlnaFN1cnJvZ2F0ZSIsImxvd1N1cnJvZ2F0ZSIsIk1BWF9TSVpFIiwiY29kZVVuaXRzIiwicGlwZSIsImRlc3QiLCJvbmRhdGEiLCJwYXVzZSIsIm9uZHJhaW4iLCJfaXNTdGRpbyIsIm9uY2xvc2UiLCJkaWRPbkVuZCIsImRlc3Ryb3kiLCJTdHJpbmdEZWNvZGVyIiwibmIiLCJlbmMiLCJuZW5jIiwicmV0cmllZCIsIl9ub3JtYWxpemVFbmNvZGluZyIsIm5vcm1hbGl6ZUVuY29kaW5nIiwidXRmMTZUZXh0IiwidXRmMTZFbmQiLCJmaWxsTGFzdCIsInV0ZjhGaWxsTGFzdCIsImJhc2U2NFRleHQiLCJiYXNlNjRFbmQiLCJzaW1wbGVXcml0ZSIsInNpbXBsZUVuZCIsImxhc3ROZWVkIiwibGFzdFRvdGFsIiwibGFzdENoYXIiLCJ1dGY4Q2hlY2tCeXRlIiwiYnl0ZSIsInV0ZjhDaGVja0V4dHJhQnl0ZXMiLCJ1dGY4Q2hlY2tJbmNvbXBsZXRlIiwiY29weVByb3BzIiwiU2FmZUJ1ZmZlciIsIm1pbGxpc2Vjb25kIiwic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIm1zIiwiRXZlcnkiLCJyZWciLCJwYXJzZSIsImRvIiwiaW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwic3RyaXBCT00iLCJidWlsZGVyIiwiZGVmYXVsdHMiLCJlc2NhcGVDREFUQSIsInJlcXVpcmVzQ0RBVEEiLCJ3cmFwQ0RBVEEiLCJoYXNQcm9wIiwiQnVpbGRlciIsIm9wdHMiLCJyZWYiLCJidWlsZE9iamVjdCIsInJvb3RPYmoiLCJhdHRya2V5IiwiY2hhcmtleSIsInJlbmRlciIsInJvb3RFbGVtZW50Iiwicm9vdE5hbWUiLCJfdGhpcyIsImF0dHIiLCJjaGlsZCIsInR4dCIsImVsZSIsInVwIiwiYXR0IiwieG1sZGVjIiwiaGVhZGxlc3MiLCJhbGxvd1N1cnJvZ2F0ZUNoYXJzIiwicmVuZGVyT3B0cyIsImV4cGxpY2l0Q2hhcmtleSIsIm5vcm1hbGl6ZVRhZ3MiLCJleHBsaWNpdEFycmF5IiwiaWdub3JlQXR0cnMiLCJtZXJnZUF0dHJzIiwiZXhwbGljaXRSb290IiwidmFsaWRhdG9yIiwiZXhwbGljaXRDaGlsZHJlbiIsImNoaWxka2V5IiwiY2hhcnNBc0NoaWxkcmVuIiwiaW5jbHVkZVdoaXRlQ2hhcnMiLCJhdHRyTmFtZVByb2Nlc3NvcnMiLCJhdHRyVmFsdWVQcm9jZXNzb3JzIiwidGFnTmFtZVByb2Nlc3NvcnMiLCJ2YWx1ZVByb2Nlc3NvcnMiLCJlbXB0eVRhZyIsInByZXNlcnZlQ2hpbGRyZW5PcmRlciIsImNodW5rU2l6ZSIsImJvbSIsInByb2Nlc3NJdGVtIiwicHJvY2Vzc29ycyIsInRoaW5nIiwiUGFyc2VyIiwic3VwZXJDbGFzcyIsInBhcnNlU3RyaW5nUHJvbWlzZSIsInBhcnNlU3RyaW5nIiwiYXNzaWduT3JQdXNoIiwicHJvY2Vzc0FzeW5jIiwieG1sbnNrZXkiLCJ1bnNoaWZ0IiwiX19zdXBlcl9fIiwiZXh0ZW5kIiwic2F4UGFyc2VyIiwiZXJyb3IxIiwiZXJyVGhyb3duIiwibmV3VmFsdWUiLCJvbnRleHQiLCJzdGFjayIsImVuZGVkIiwicmVzdWx0T2JqZWN0IiwiRVhQTElDSVRfQ0hBUktFWSIsIm9ub3BlbnRhZyIsInByb2Nlc3NlZEtleSIsIm9uY2xvc2V0YWciLCJlbXB0eVN0ciIsIm5vZGVOYW1lIiwib2JqQ2xvbmUiLCJvbGQiLCJ4cGF0aCIsImNoYXJDaGlsZCIsIm9uY2RhdGEiLCJwcmVmaXhNYXRjaCIsImZpcnN0Q2hhckxvd2VyQ2FzZSIsInN0cmlwUHJlZml4IiwicGFyc2VOdW1iZXJzIiwicGFyc2VCb29sZWFucyIsIlZhbGlkYXRpb25FcnJvciIsIkRpc2Nvbm5lY3RlZCIsIlByZWNlZGluZyIsIkZvbGxvd2luZyIsIkNvbnRhaW5zIiwiQ29udGFpbmVkQnkiLCJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwiRWxlbWVudCIsIkF0dHJpYnV0ZSIsIlRleHQiLCJDRGF0YSIsIkVudGl0eVJlZmVyZW5jZSIsIkVudGl0eURlY2xhcmF0aW9uIiwiUHJvY2Vzc2luZ0luc3RydWN0aW9uIiwiQ29tbWVudCIsIkRvY3VtZW50IiwiRG9jVHlwZSIsIkRvY3VtZW50RnJhZ21lbnQiLCJOb3RhdGlvbkRlY2xhcmF0aW9uIiwiRGVjbGFyYXRpb24iLCJSYXciLCJBdHRyaWJ1dGVEZWNsYXJhdGlvbiIsIkVsZW1lbnREZWNsYXJhdGlvbiIsIkR1bW15IiwiZ2V0VmFsdWUiLCJpc1BsYWluT2JqZWN0Iiwic291cmNlcyIsIk5vbmUiLCJPcGVuVGFnIiwiSW5zaWRlVGFnIiwiQ2xvc2VUYWciLCJOb2RlVHlwZSIsIlhNTEF0dHJpYnV0ZSIsImRlYnVnSW5mbyIsImF0dFZhbHVlIiwiaXNJZCIsInNjaGVtYVR5cGVJbmZvIiwid3JpdGVyIiwiZmlsdGVyT3B0aW9ucyIsImlzRXF1YWxOb2RlIiwibmFtZXNwYWNlVVJJIiwibG9jYWxOYW1lIiwiWE1MQ2hhcmFjdGVyRGF0YSIsIlhNTENEYXRhIiwiWE1MTm9kZSIsInN1YnN0cmluZ0RhdGEiLCJhcHBlbmREYXRhIiwiaW5zZXJ0RGF0YSIsImRlbGV0ZURhdGEiLCJyZXBsYWNlRGF0YSIsIlhNTENvbW1lbnQiLCJYTUxET01FcnJvckhhbmRsZXIiLCJYTUxET01TdHJpbmdMaXN0IiwiWE1MRE9NQ29uZmlndXJhdGlvbiIsImRlZmF1bHRQYXJhbXMiLCJwYXJhbXMiLCJnZXRQYXJhbWV0ZXIiLCJjYW5TZXRQYXJhbWV0ZXIiLCJzZXRQYXJhbWV0ZXIiLCJoYW5kbGVFcnJvciIsIlhNTERPTUltcGxlbWVudGF0aW9uIiwiaGFzRmVhdHVyZSIsImNyZWF0ZURvY3VtZW50VHlwZSIsInF1YWxpZmllZE5hbWUiLCJwdWJsaWNJZCIsInN5c3RlbUlkIiwiY3JlYXRlRG9jdW1lbnQiLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJ0aXRsZSIsImdldEZlYXR1cmUiLCJYTUxEVERBdHRMaXN0IiwiZWxlbWVudE5hbWUiLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlVHlwZSIsImRlZmF1bHRWYWx1ZVR5cGUiLCJkZWZhdWx0VmFsdWUiLCJkdGRBdHRUeXBlIiwiZHRkQXR0RGVmYXVsdCIsImR0ZEF0dExpc3QiLCJYTUxEVERFbGVtZW50IiwiZHRkRWxlbWVudFZhbHVlIiwiZHRkRWxlbWVudCIsIlhNTERUREVudGl0eSIsInBlIiwicHViSUQiLCJzeXNJRCIsImR0ZFB1YklEIiwiZHRkU3lzSUQiLCJuRGF0YSIsImR0ZE5EYXRhIiwiZHRkRW50aXR5VmFsdWUiLCJkdGRFbnRpdHkiLCJYTUxEVEROb3RhdGlvbiIsImR0ZE5vdGF0aW9uIiwiWE1MRGVjbGFyYXRpb24iLCJ4bWxWZXJzaW9uIiwieG1sRW5jb2RpbmciLCJ4bWxTdGFuZGFsb25lIiwiZGVjbGFyYXRpb24iLCJYTUxOYW1lZE5vZGVNYXAiLCJYTUxEb2NUeXBlIiwicmVmMSIsInJlZjIiLCJjaGlsZHJlbiIsImRvY3VtZW50T2JqZWN0Iiwibm9kZXMiLCJhdHRMaXN0IiwicEVudGl0eSIsIm5vdGF0aW9uIiwiZG9jVHlwZSIsImVudCIsInBlbnQiLCJyb290IiwiWE1MU3RyaW5nV3JpdGVyIiwiWE1MU3RyaW5naWZpZXIiLCJYTUxEb2N1bWVudCIsImRvY3VtZW50VVJJIiwiZG9tQ29uZmlnIiwicm9vdE9iamVjdCIsIndyaXRlck9wdGlvbnMiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiY3JlYXRlQ29tbWVudCIsImNyZWF0ZUNEQVRBU2VjdGlvbiIsImNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbiIsImNyZWF0ZUF0dHJpYnV0ZSIsImNyZWF0ZUVudGl0eVJlZmVyZW5jZSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGFnbmFtZSIsImltcG9ydE5vZGUiLCJpbXBvcnRlZE5vZGUiLCJkZWVwIiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlQXR0cmlidXRlTlMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZU5TIiwiZ2V0RWxlbWVudEJ5SWQiLCJlbGVtZW50SWQiLCJhZG9wdE5vZGUiLCJub3JtYWxpemVEb2N1bWVudCIsInJlbmFtZU5vZGUiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiY2xhc3NOYW1lcyIsImNyZWF0ZUV2ZW50IiwiZXZlbnRJbnRlcmZhY2UiLCJjcmVhdGVSYW5nZSIsImNyZWF0ZU5vZGVJdGVyYXRvciIsIndoYXRUb1Nob3ciLCJjcmVhdGVUcmVlV2Fsa2VyIiwiV3JpdGVyU3RhdGUiLCJYTUxFbGVtZW50IiwiWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uIiwiWE1MUmF3IiwiWE1MVGV4dCIsIlhNTERvY3VtZW50Q0IiLCJvbkRhdGEiLCJvbkVuZCIsIm9uRGF0YUNhbGxiYWNrIiwib25FbmRDYWxsYmFjayIsImN1cnJlbnROb2RlIiwiY3VycmVudExldmVsIiwib3BlblRhZ3MiLCJkb2N1bWVudFN0YXJ0ZWQiLCJkb2N1bWVudENvbXBsZXRlZCIsImNyZWF0ZUNoaWxkTm9kZSIsImF0dE5hbWUiLCJhdHRyaWJzIiwiZHVtbXkiLCJpbnN0cnVjdGlvbiIsIm9wZW5DdXJyZW50Iiwib2xkVmFsaWRhdGlvbkZsYWciLCJub1ZhbGlkYXRpb24iLCJrZWVwTnVsbEF0dHJpYnV0ZXMiLCJpbnNUYXJnZXQiLCJpbnNWYWx1ZSIsInByb2Nlc3NpbmdJbnN0cnVjdGlvbiIsInJvb3ROb2RlTmFtZSIsImNsb3NlTm9kZSIsIm9wZW5Ob2RlIiwiaXNPcGVuIiwiaW5kZW50IiwiZW5kbGluZSIsImlzQ2xvc2VkIiwibGV2ZWwiLCJub2QiLCJkYXQiLCJjb20iLCJpbnMiLCJkZWMiLCJkdGQiLCJYTUxEdW1teSIsImlzUm9vdCIsImF0dHJpYnV0ZU1hcCIsImNsb25lZFNlbGYiLCJjbG9uZWRDaGlsZCIsInJlbW92ZUF0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZU5vZGUiLCJzZXRBdHRyaWJ1dGVOb2RlIiwibmV3QXR0ciIsInJlbW92ZUF0dHJpYnV0ZU5vZGUiLCJvbGRBdHRyIiwiZ2V0QXR0cmlidXRlTlMiLCJzZXRBdHRyaWJ1dGVOUyIsInJlbW92ZUF0dHJpYnV0ZU5TIiwiZ2V0QXR0cmlidXRlTm9kZU5TIiwic2V0QXR0cmlidXRlTm9kZU5TIiwiaGFzQXR0cmlidXRlIiwiaGFzQXR0cmlidXRlTlMiLCJzZXRJZEF0dHJpYnV0ZSIsInNldElkQXR0cmlidXRlTlMiLCJzZXRJZEF0dHJpYnV0ZU5vZGUiLCJpZEF0dHIiLCJnZXROYW1lZEl0ZW0iLCJzZXROYW1lZEl0ZW0iLCJvbGROb2RlIiwicmVtb3ZlTmFtZWRJdGVtIiwiZ2V0TmFtZWRJdGVtTlMiLCJzZXROYW1lZEl0ZW1OUyIsInJlbW92ZU5hbWVkSXRlbU5TIiwiRG9jdW1lbnRQb3NpdGlvbiIsIlhNTE5vZGVMaXN0IiwicGFyZW50MSIsImJhc2VVUkkiLCJjaGlsZE5vZGVMaXN0IiwidGV4dENvbnRlbnQiLCJzZXRQYXJlbnQiLCJjaGlsZE5vZGUiLCJsYXN0Q2hpbGQiLCJsZW4xIiwicmVmMyIsImlnbm9yZURlY29yYXRvcnMiLCJjb252ZXJ0QXR0S2V5Iiwic2VwYXJhdGVBcnJheUl0ZW1zIiwia2VlcE51bGxOb2RlcyIsImNvbnZlcnRUZXh0S2V5IiwiY29udmVydENEYXRhS2V5IiwiY29udmVydENvbW1lbnRLZXkiLCJjb252ZXJ0UmF3S2V5IiwiY29udmVydFBJS2V5IiwiaW5zZXJ0QmVmb3JlIiwibmV3Q2hpbGQiLCJyZWZDaGlsZCIsInJlbW92ZWQiLCJpbnNlcnRBZnRlciIsImNvbW1lbnRCZWZvcmUiLCJjb21tZW50QWZ0ZXIiLCJpbnN0cnVjdGlvbkJlZm9yZSIsImluc3RydWN0aW9uQWZ0ZXIiLCJkb2MiLCJpbXBvcnREb2N1bWVudCIsImNsb25lZFJvb3QiLCJpbXBvcnRYTUxCdWlsZGVyIiwicmVwbGFjZUNoaWxkIiwib2xkQ2hpbGQiLCJoYXNDaGlsZE5vZGVzIiwiY2xvbmVOb2RlIiwiaXNTdXBwb3J0ZWQiLCJoYXNBdHRyaWJ1dGVzIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJvdGhlciIsImlzQW5jZXN0b3IiLCJpc0Rlc2NlbmRhbnQiLCJpc1ByZWNlZGluZyIsImlzU2FtZU5vZGUiLCJsb29rdXBQcmVmaXgiLCJpc0RlZmF1bHROYW1lc3BhY2UiLCJsb29rdXBOYW1lc3BhY2VVUkkiLCJzZXRVc2VyRGF0YSIsImdldFVzZXJEYXRhIiwibm9kZVBvcyIsInRoaXNQb3MiLCJ0cmVlUG9zaXRpb24iLCJpc0ZvbGxvd2luZyIsImZvcmVhY2hUcmVlTm9kZSIsImZ1bmMiLCJYTUxXcml0ZXJCYXNlIiwiWE1MU3RyZWFtV3JpdGVyIiwic3RyZWFtIiwiaXNMYXN0Um9vdE5vZGUiLCJ3cml0ZUNoaWxkTm9kZSIsInNwYWNlQmVmb3JlU2xhc2giLCJjaGlsZE5vZGVDb3VudCIsImZpcnN0Q2hpbGROb2RlIiwiYWxsb3dFbXB0eSIsInByZXR0eSIsInN1cHByZXNzUHJldHR5Q291bnQiLCJuZXdsaW5lIiwiYXNzZXJ0TGVnYWxOYW1lIiwiYXNzZXJ0TGVnYWxDaGFyIiwidGV4dEVzY2FwZSIsImF0dEVzY2FwZSIsInJlZ2V4IiwiYW1wcmVnZXgiLCJub0RvdWJsZUVuY29kaW5nIiwicHJldmlvdXNTaWJsaW5nIiwibmV4dFNpYmxpbmciLCJzcGxpdFRleHQiLCJyZXBsYWNlV2hvbGVUZXh0IiwiY29udGVudCIsImZpbHRlcmVkT3B0aW9ucyIsInJlZjQiLCJyZWY1IiwicmVmNiIsImRvbnRQcmV0dHlUZXh0Tm9kZXMiLCJkb250cHJldHR5dGV4dG5vZGVzIiwic3BhY2ViZWZvcmVzbGFzaCIsInVzZXIiLCJpbmRlbnRMZXZlbCIsIm9wZW5BdHRyaWJ1dGUiLCJjbG9zZUF0dHJpYnV0ZSIsInByZXR0eVN1cHByZXNzZWQiLCJzdHJpbmdXcml0ZXIiLCJzdHJlYW1Xcml0ZXIiLCJpbXBsZW1lbnRhdGlvbiIsIndyaXRlclN0YXRlIiwiU0VDX1RPX1JBRCIsIkhBTEZfUEkiLCJFUFNMTiIsIkQyUiIsIlIyRCIsIkZPUlRQSSIsIlRXT19QSSIsIlNQSSIsImZ0IiwidG9fbWV0ZXIiLCJpZ25vcmVkQ2hhciIsInRlc3RrZXkiLCJsa2V5IiwiZGVmRGF0YSIsInBhcmFtTmFtZSIsInBhcmFtVmFsIiwicGFyYW1PdXRuYW1lIiwicGFyYW1PYmoiLCJwcm9qIiwiZGF0dW0iLCJyZiIsImxhdF8wIiwibGF0MCIsImxhdF8xIiwibGF0MSIsImxhdF8yIiwibGF0MiIsImxhdF90cyIsImxvbl8wIiwibG9uZzAiLCJsb25fMSIsImxvbmcxIiwibG9uXzIiLCJsb25nMiIsImxvbmMiLCJsb25nYyIsInhfMCIsInlfMCIsImtfMCIsImswIiwicl9hIiwiUl9BIiwiem9uZSIsInNvdXRoIiwidXRtU291dGgiLCJ0b3dnczg0IiwiZGF0dW1fcGFyYW1zIiwidW5pdCIsImZyb21fZ3JlZW53aWNoIiwicG0iLCJuYWRncmlkcyIsImRhdHVtQ29kZSIsImF4aXMiLCJsZWdhbEF4aXMiLCJsYXRpbiIsImtleXdvcmQiLCJlbmRUaGluZ3MiLCJkaWdldHMiLCJwbGFjZSIsImN1cnJlbnRPYmplY3QiLCJtYXBpdCIsIm5ld09iaiIsInNFeHByIiwic2hpZnQiLCJjb252ZXJ0IiwiZDJyIiwid2t0IiwibGlzcCIsInByb2pOYW1lIiwiUFJPSkVDVElPTiIsIkFYSVMiLCJheGlzT3JkZXIiLCJVTklUIiwiREFUVU0iLCJTUEhFUk9JRCIsImdlb2djcyIsIkdFT0dDUyIsInRvTWV0ZXIiLCJzcGhlcmUiLCJlbGxwcyIsIlRPV0dTODQiLCJvdXROYW1lIiwiaW5OYW1lIiwicmVuYW1lIiwiY2xlYW5XS1QiLCJkZWZzIiwiRVBTRyIsIkVTUkkiLCJJQVUyMDAwIiwicmVhZENoYXJpY3RlciIsImNoYXIiLCJuZXV0cmFsIiwicXVvdGVkIiwiYWZ0ZXJxdW90ZSIsIndvcmQiLCJhZnRlckl0ZW0iLCJuZXdPYmplY3RzIiwiV0dTODQiLCJHT09HTEUiLCJjb2RlV29yZHMiLCJjb2RlcyIsImRlc3RpbmF0aW9uIiwicHJvcGVydHkiLCJlY2NlbnQiLCJzaW5waGkiLCJjb3NwaGkiLCJjb24iLCJwaGkiLCJ0YW4iLCJ0cyIsImRwaGkiLCJlY2NudGgiLCJhdGFuIiwiaWRlbnRpdHkiLCJwdCIsInByb2pzIiwiZXMiLCJjb3MiLCJtc2ZueiIsImZvcndhcmQiLCJsb24iLCJsYXQiLCJhZGp1c3RfbG9uIiwidHNmbnoiLCJpbnZlcnNlIiwicGhpMnoiLCJwcm9qU3RvcmUiLCJlbGxpcHNlTmFtZSIsImVsbGlwc2UiLCJkYXR1bU5hbWUiLCJQcm9qZWN0aW9uIiwic3JzQ29kZSIsImpzb24iLCJ0ZXN0T2JqIiwidGVzdERlZiIsInRlc3RXS1QiLCJhdXRoIiwiY2hlY2tNZXJjYXRvciIsIm1heWJlUHJvalN0ciIsImNoZWNrUHJvalN0ciIsInRlc3RQcm9qIiwicGFyc2VDb2RlIiwib3VyUHJvaiIsInByb2plY3Rpb25zIiwiZGF0dW1EZWYiLCJzcGhlcmVfIiwiZWNjIiwiZXAyIiwiZGF0dW1PYmoiLCJkYXR1bV90eXBlIiwiZ2VvZGV0aWNUb0dlb2NlbnRyaWMiLCJSbiIsIlNpbl9MYXQiLCJTaW4yX0xhdCIsIkNvc19MYXQiLCJMb25naXR1ZGUiLCJMYXRpdHVkZSIsIkhlaWdodCIsImdlb2NlbnRyaWNUb0dlb2RldGljIiwiUlIiLCJDVCIsIlNUIiwiUlgiLCJSSyIsIlJOIiwiQ1BISTAiLCJTUEhJMCIsIkNQSEkiLCJTUEhJIiwiU0RQSEkiLCJYIiwiWSIsIloiLCJhdGFuMiIsImNoZWNrUGFyYW1zIiwiY3JzIiwiZGVub3JtIiwieGluIiwieWluIiwiemluIiwiY2hlY2tDb29yZCIsInRyYW5zZm9ybSIsIndnczg0IiwiY2hlY2tTYW5pdHkiLCJjaGVja05vdFdHUyIsImFkanVzdF9heGlzIiwiY29tcGFyZURhdHVtcyIsIkR4X0JGIiwiRHlfQkYiLCJEel9CRiIsIlJ4X0JGIiwiUnlfQkYiLCJSel9CRiIsIk1fQkYiLCJnZW9jZW50cmljVG9XZ3M4NCIsInhfdG1wIiwieV90bXAiLCJ6X3RtcCIsImdlb2NlbnRyaWNGcm9tV2dzODQiLCJkYXR1bV90cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1lciIsInRyYW5zZm9ybWVkQXJyYXkiLCJjaGVja1Byb2oiLCJvUHJvaiIsImZyb21Qcm9qIiwidG9Qcm9qIiwic2luZ2xlIiwiU0VUX09SSUdJTl9DT0xVTU5fTEVUVEVSUyIsIlNFVF9PUklHSU5fUk9XX0xFVFRFUlMiLCJJIiwibWdycyIsIlVUTXRvTEwiLCJkZWNvZGUiLCJib3R0b20iLCJsbCIsImFjY3VyYWN5IiwidXRtIiwicm93IiwiY29sT3JpZ2luIiwicm93T3JpZ2luIiwiY29sSW50Iiwicm93SW50Iiwicm9sbG92ZXIiLCJlYXN0aW5nIiwibm9ydGhpbmciLCJzZXRQYXJtIiwic2Vhc3RpbmciLCJzbm9ydGhpbmciLCJ6b25lTnVtYmVyIiwiem9uZUxldHRlciIsImdldDEwMGtTZXRGb3Jab25lIiwiZW5jb2RlIiwiZWNjUHJpbWVTcXVhcmVkIiwiTiIsIkxvbmdPcmlnaW5SYWQiLCJab25lTnVtYmVyIiwiTGF0IiwiTG9uZyIsImVjY1NxdWFyZWQiLCJMYXRSYWQiLCJkZWdUb1JhZCIsIkxvbmdSYWQiLCJMZXR0ZXJEZXNpZ25hdG9yIiwiVVRNRWFzdGluZyIsIlVUTU5vcnRoaW5nIiwiTEx0b1VUTSIsImRlZyIsInJhZFRvRGVnIiwiTjEiLCJUMSIsIkMxIiwiUjEiLCJMb25nT3JpZ2luIiwibXUiLCJwaGkxUmFkIiwidG9wUmlnaHQiLCJtZ3JzU3RyaW5nIiwidGVzdENoYXIiLCJodW5LIiwiZWFzdDEwMGsiLCJjdXJDb2wiLCJlYXN0aW5nVmFsdWUiLCJyZXdpbmRNYXJrZXIiLCJnZXRFYXN0aW5nRnJvbUNoYXIiLCJub3J0aDEwMGsiLCJjdXJSb3ciLCJub3J0aGluZ1ZhbHVlIiwiZ2V0Tm9ydGhpbmdGcm9tQ2hhciIsImdldE1pbk5vcnRoaW5nIiwicmVtYWluZGVyIiwiYWNjdXJhY3lCb251cyIsInNlcEVhc3RpbmdTdHJpbmciLCJzZXBOb3J0aGluZ1N0cmluZyIsInNlcCIsInNlcEVhc3RpbmciLCJzZXBOb3J0aGluZyIsIlBvaW50IiwiZnJvbU1HUlMiLCJtZ3JzU3RyIiwidG9NR1JTIiwiQzA0IiwiQzA2IiwiQzA4IiwiZW4iLCJzcGhpIiwiY3BoaSIsInBqX21sZm4iLCJwal9lbmZuIiwibWwwIiwiZGVsdGFfbG9uIiwic2luX3BoaSIsImNvc19waGkiLCJhbCIsImFscyIsImNzIiwidHEiLCJtbCIsImFjb3MiLCJwal9pbnZfbWxmbiIsInRhbl9waGkiLCJkcyIsInRlbXAiLCJhc2luIiwicHAiLCJjb3NfMkIiLCJoMSIsImgyIiwiYXJnX3IiLCJhcmdfaSIsImhyMiIsImhpMiIsInNpbl9hcmdfciIsImNvc19hcmdfciIsInNpbmhfYXJnX2kiLCJjb3NoX2FyZ19pIiwiaHIiLCJoaTEiLCJocjEiLCJjZ2IiLCJjYmciLCJ1dGciLCJndHUiLCJucCIsIlFuIiwiZ2F0ZyIsIlpiIiwiY2xlbnMiLCJDZSIsIkNuIiwic2luX0NuIiwiY29zX0NuIiwic2luX0NlIiwiY29zX0NlIiwibG9nMXB5IiwiYXNpbmh5IiwiY2xlbnNfY21wbHgiLCJhZGp1c3Rfem9uZSIsImV0bWVyYyIsImRlcGVuZHNPbiIsImVzaW5wIiwicmMiLCJwaGljMCIsInJhdGV4cCIsInNyYXQiLCJnYXVzcyIsInNpbmMwIiwiY29zYzAiLCJSMiIsInNpbmMiLCJjb3NjIiwiY29zbCIsInJobyIsImNvc2xhdDAiLCJzaW5sYXQwIiwiY29ucyIsIm1zMSIsIlgwIiwic3Nmbl8iLCJjb3NYMCIsInNpblgwIiwic2luWCIsImNvc1giLCJyaCIsInNpbmxhdCIsImNvc2xhdCIsImRsb24iLCJjZSIsIkNoaSIsInBoaXQiLCJlY2NlbiIsInBoeTAiLCJsYW1iZGEwIiwic2luUGh5MCIsInNlbWlNYWpvckF4aXMiLCJmbGF0dGVuaW5nIiwiYjAiLCJrMSIsImsyIiwiazMiLCJTYTEiLCJTYTIiLCJyb3RJIiwicm90QiIsImxhbWJkYSIsInBoeSIsInByZXZQaHkiLCJpdGVyYXRpb24iLCJub19vZmYiLCJub19yb3QiLCJibCIsImZsIiwiZ2wiLCJ0MCIsImRsIiwidDEiLCJ0MiIsImhsIiwiamwiLCJwbCIsImRsb24xMiIsImRsb24xMCIsImdhbW1hMCIsInVjIiwidXMiLCJ2cyIsInFsIiwic2wiLCJ0bCIsInZsIiwidWwiLCJQT1NJVElWRV9JTkZJTklUWSIsInFwIiwic3AiLCJ0cCIsInZwIiwic2luMSIsImNvczEiLCJ0czEiLCJzaW4yIiwiY29zMiIsIm1zMiIsInRzMiIsInRzMCIsImYwIiwicmgxIiwidGhldGEiLCJzNDUiLCJzOTAiLCJmaTAiLCJhbGZhIiwidXEiLCJuMCIsInMwIiwicm8wIiwiYWQiLCJnZmkiLCJkZWx0YXYiLCJlcHMiLCJybyIsImN6ZWNoIiwiZmkxIiwiZTAiLCJlMyIsImUwZm4iLCJlMWZuIiwiZTJmbiIsImUzZm4iLCJtbGZuIiwibGFtIiwibmwiLCJnTiIsImFzcSIsImNsIiwiZGQiLCJwaGkxIiwiaW1sZm4iLCJubDEiLCJybDEiLCJ0bDEiLCJkc3EiLCJhZGp1c3RfbGF0IiwiU19QT0xFIiwiTl9QT0xFIiwiRVFVSVQiLCJPQkxJUSIsInFzZm56IiwibW1mIiwiYXBhIiwiQVBBIiwiYXV0aHNldCIsInJxIiwieG1mIiwieW1mIiwic2luYjEiLCJjb3NiMSIsInNpbnBoMCIsImNvc3BoMCIsImNvc2xhbSIsInNpbmxhbSIsInNpbmIiLCJjb3NiIiwiY0NlIiwic0NlIiwiYWIiLCJiZXRhIiwiY29zeiIsInNpbnoiLCJzaW5fcG8iLCJjb3NfcG8iLCJxczEiLCJxczIiLCJ0MyIsInFzMCIsIm5zMCIsInFzIiwicGhpMXoiLCJhc2lueiIsImVjY250cyIsInNpbl9wMTQiLCJjb3NfcDE0IiwiaW5maW5pdHlfZGlzdCIsImNvc2xvbiIsImlxc2ZueiIsImRsYXQiLCJ0YW5waGkiLCJtbG4iLCJtbG5wIiwibWEiLCJCX3JlIiwiQl9pbSIsIkNfcmUiLCJDX2ltIiwiZGVsdGFfbGF0IiwiZF9waGkiLCJkX2xhbWJkYSIsImRfcGhpX24iLCJkX3BzaSIsInRoX25faW0xIiwidGhfcmUiLCJ0aF9pbSIsInRoX25fcmUiLCJ0aF9uX2ltIiwiel9yZSIsInpfaW0iLCJ6X25faW0xIiwiZGVsdGFfeCIsInpfbl9yZSIsInpfbl9pbSIsIml0ZXJhdGlvbnMiLCJudW1fcmUiLCJudW1faW0iLCJkZW5fcmUiLCJkZW5faW0iLCJkZW4yIiwiZF9wc2lfbiIsIkNfeSIsIkNfeCIsImRlbHRhX3RoZXRhIiwibWwxIiwibWwyIiwic2ludGgiLCJjb3N0aCIsImdzcSIsIm1zcSIsInh4IiwieXkiLCJ4eXMiLCJjMSIsImMzIiwibTEiLCJ0aDEiLCJzaW5fcDEyIiwiY29zX3AxMiIsIk1scCIsIk1sIiwiTmwxIiwiTmwiLCJwc2kiLCJBeiIsIkdIIiwiSHMiLCJrcCIsImNvc19jIiwiczMiLCJzNCIsImNvc0F6IiwiRWUiLCJzaW5wc2kiLCJxc2NfZndkX2VxdWF0X2ZhY2VfdGhldGEiLCJxc2Nfc2hpZnRfbG9uX29yaWdpbiIsInNsb24iLCJmYWNlIiwib25lX21pbnVzX2YiLCJvbmVfbWludXNfZl9zcXVhcmVkIiwieHkiLCJzaW5sb24iLCJudSIsImNvc211IiwidGFubnUiLCJ0YW50aGV0YSIsImludmVydF9zaWduIiwieGEiLCJscCIsIkNPRUZTX1giLCJDT0VGU19ZIiwiRlhDIiwiRllDIiwicG9seTNfdmFsIiwiY29lZnMiLCJOT0RFUyIsImZfZGYiLCJtYXhfZXJyIiwiaXRlcnMiLCJ1cGQiLCJuZXd0b25fcmFwc2hvbiIsInBvbHkzX2RlciIsImF6aSIsInRpbHQiLCJwbjEiLCJycCIsInBmYWN0Iiwib21lZ2EiLCJnYW1tYSIsImNnIiwic2ciLCJjdyIsInN3IiwieXQiLCJiYSIsImJtIiwiYnEiLCJwcm9qNCIsIlByb2oiLCJ0bWVyYyIsInN0ZXJlYSIsInN0ZXJlIiwic29tZXJjIiwib21lcmMiLCJsY2MiLCJrcm92YWsiLCJjYXNzIiwibGFlYSIsImFlYSIsImdub20iLCJjZWEiLCJlcWMiLCJwb2x5IiwibnptZyIsIm1pbGwiLCJzaW51IiwibW9sbCIsImVxZGMiLCJ2YW5kZyIsImFlcWQiLCJvcnRobyIsInFzYyIsInJvYmluIiwiZ2VvY2VudCIsInRwZXJzIiwiUHJvajREZWZzIiwiYXNxciIsImJzcXIiLCJjcmVhdGVFbGxpcHNvaWQiLCJnZXRQcm9wIiwicHJvcHMiLCJwcm9wIiwiZXhpc3RzIiwicGFyc2VTZXF1ZW5jZSIsImdldENvbG9yIiwidG9SYWRpYW5zIiwiYW5nbGVJbkRlZ3JlZXMiLCJ0b0RlZ3JlZXMiLCJhbmdsZUluUmFkaWFucyIsImxvbjEiLCJkQnlSIiwib3JpZ2luIiwiZGlzdGFuY2VJbk1ldGVycyIsInJhZGl1cyIsImxhbWJkYTEiLCJEZWx0YVBoaSIsInBoaTIiLCJEZWx0YVBzaSIsImNhbGN1bGF0ZVJodW1iRGVzdGluYXRpb24iLCJkaXJlY3Rpb24iLCJ6VHJhbnNsYXRpb24iLCJtdXRhdGUiLCJwb2ludENvb3JkcyIsIm5ld0Nvb3JkcyIsIlBST0pFQ1RJT05fQVVUT19ERVRFQ1QiLCJDT05WRVJUX1NVUkZBQ0VTIiwiQ09OVkVSVF9QQVJDRUxTIiwiQ09OVkVSVF9QSVBFX05FVFdPUktTIiwiY29udmVydGVycyIsInhtbE9iaiIsInByb2plY3Rpb24iLCJvcmlnaW5hbFBvaW50cyIsIm9yaWdpbmFsUGFyY2VscyIsIiQiLCJwYyIsIm9wYyIsIkNvb3JkR2VvbSIsImVuZENvb3JkIiwib3JpZ0Nvb3JkcyIsIkxpbmUiLCJvYyIsIlN0YXJ0IiwicG50UmVmIiwiRW5kIiwicGFyYW1ldGVycyIsImxhbmR4bWxDbGFzcyIsImNsYXNzIiwibGFuZHhtbFN0YXRlIiwibGFuZHhtbFBhcmNlbFR5cGUiLCJwYXJjZWxUeXBlIiwibGFuZHhtbFR5cGUiLCJzdXJmYWNlc0NvbnRhaW5lck5vZGVzIiwic2MiLCJhdHRycyIsImJhc2VQcm9wcyIsInN1cmZhY2VOb2RlcyIsImZlYXR1cmVQcm9wcyIsImRlc2NyaXB0aW9uIiwiY29sb3JPcHRzIiwic3VyZmFjZUZlYXR1cmVzIiwic3VyZmFjZSIsImJvdW5kYXJ5Tm9kZXMiLCJib3VuZGFyeSIsInNlcSIsImNvbnZlcnRCb3VuZGFyaWVzIiwicG9pbnROb2RlcyIsImZhY2VOb2RlcyIsInBvaW50SWQiLCJmYWNlcyIsInBvaW50SWRzIiwiY29udmVydEZhY2VzIiwibWVyZ2VkIiwicGlwZU5ldHdvcmtzTm9kZXMiLCJwbiIsInBpcGVOZXR3b3JrTm9kZXMiLCJzdHJ1Y3RzIiwibG9jYWxTdHJ1Y3RzIiwicGlwZU5ldHdvcmsiLCJzdHJ1Y3ROb2RlcyIsImNlbnRlck5vZGUiLCJyZWN0U3RydWN0Tm9kZSIsImNpcmNTdHJ1Y3ROb2RlIiwiaW5sZXRTdHJ1Y3ROb2RlIiwib3V0bGV0U3RydWN0Tm9kZSIsImNvbm5lY3Rpb25Ob2RlIiwic3RydWN0VHlwZSIsImxhbmR4bWxTdHJ1Y3QiLCJsYW5keG1sRWxldlJpbSIsImVsZXZSaW0iLCJsYW5keG1sRWxldlN1bXAiLCJlbGV2U3VtcCIsImxhbmR4bWxEaWFtZXRlciIsImRpYW1ldGVyIiwibGFuZHhtbFRoaWNrbmVzcyIsInRoaWNrbmVzcyIsImxhbmR4bWxMZW5ndGgiLCJsYW5keG1sV2lkdGgiLCJ3aWR0aCIsImNlbnRlciIsImNlbnRlckNvb3JkcyIsIm5vcnRoRWFzdCIsIm5vcnRoV2VzdCIsInNvdXRoV2VzdCIsInNvdXRoRWFzdCIsInNxdWFyZUFyb3VuZCIsIm51bWJlck9mU2VnbWVudHMiLCJmbGF0Q29vcmRpbmF0ZXMiLCJjaXJjbGVUb1BvbHlnb24iLCJjb252ZXJ0U3RydWN0cyIsInBpcGVzIiwicGlwZU5vZGVzIiwiY2lyY1BpcGVOb2RlIiwic3Ryb2tlIiwicmVmU3RhcnQiLCJyZWZFbmQiLCJjb252ZXJ0UGlwZXMiLCJDb252ZXJ0ZXIiLCJkZWZhdWx0T3B0aW9ucyIsImVuYWJsZWRDb252ZXJ0ZXJzIiwicHJvajREZWZzIiwiZmVhdHVyZU1hcHBlciIsInBhcnNlck9wdGlvbnMiLCJjb25maWd1cmVQcm9qNCIsImNvbnZlcnRUb0dlb0pTT04iLCJnZXRMYW5kWE1MUHJvamVjdGlvbiIsIm5ld0ZlYXR1cmVzIiwiYWRkaXRpb25hbFByb2o0RGVmcyIsIm1hbnVhbFByb2plY3Rpb24iLCJmaW5kVVRNUHJvamVjdGlvbiIsInV0bVByb2plY3Rpb24iLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJsb2FkZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJnbG9iYWxUaGlzIiwibm1kIiwicGF0aHMiXSwibWFwcGluZ3MiOiI7NkRBRUEsSUFBSUEsRUFBUyxFQUFRLE1BRWpCQyxFQUFTLFFBZ0RiLFNBQVNDLEVBQVlDLEdBQ2pCLElBQUlDLEVBQVEsRUFDWixHQUFJRCxHQUFVQSxFQUFPRSxPQUFTLEVBQUcsQ0FDN0JELEdBQVNFLEtBQUtDLElBQUlDLEVBQVNMLEVBQU8sS0FDbEMsSUFBSyxJQUFJTSxFQUFJLEVBQUdBLEVBQUlOLEVBQU9FLE9BQVFJLElBQy9CTCxHQUFTRSxLQUFLQyxJQUFJQyxFQUFTTCxFQUFPTSxLQUcxQyxPQUFPTCxFQWVYLFNBQVNJLEVBQVNMLEdBQ2QsSUFBSU8sRUFDQUMsRUFFQUMsRUFDQUMsRUFDQUMsRUFDQUwsRUFDQUwsRUFBUSxFQUNSVyxFQUFlWixFQUFPRSxPQUMxQixHQUFJVSxFQUFlLEVBQUcsQ0FDbEIsSUFBS04sRUFBSSxFQUFHQSxFQUFJTSxFQUFjTixJQUN0QkEsSUFBTU0sRUFBZSxHQUNyQkgsRUFBYUcsRUFBZSxFQUM1QkYsRUFBY0UsRUFBZSxFQUM3QkQsRUFBYSxHQUVSTCxJQUFNTSxFQUFlLEdBQzFCSCxFQUFhRyxFQUFlLEVBQzVCRixFQUFjLEVBQ2RDLEVBQWEsSUFHYkYsRUFBYUgsRUFDYkksRUFBY0osRUFBSSxFQUNsQkssRUFBYUwsRUFBSSxHQUVyQkMsRUFBS1AsRUFBT1MsR0FDWkQsRUFBS1IsRUFBT1UsR0FFWlQsSUFBVVksRUFETGIsRUFBT1csR0FDSyxJQUFNRSxFQUFJTixFQUFHLEtBQU9KLEtBQUtXLElBQUlELEVBQUlMLEVBQUcsS0FFekRQLEVBQVFBLEVBQVFILEVBQVNBLEVBQVMsRUFFdEMsT0FBT0csRUFFWCxTQUFTWSxFQUFJRSxHQUNULE9BQU9BLEVBQU1aLEtBQUthLEdBQUssSUF2RjNCQyxFQUFRLEVBTFIsU0FBY0MsR0FDVixPQUFPckIsRUFBT3NCLFdBQVdELEdBQVMsU0FBVUUsRUFBT0MsR0FDL0MsT0FBT0QsRUFXZixTQUF1QkMsR0FDbkIsSUFDSWYsRUFEQUwsRUFBUSxFQUVaLE9BQVFvQixFQUFLQyxNQUNULElBQUssVUFDRCxPQUFPdkIsRUFBWXNCLEVBQUtFLGFBQzVCLElBQUssZUFDRCxJQUFLakIsRUFBSSxFQUFHQSxFQUFJZSxFQUFLRSxZQUFZckIsT0FBUUksSUFDckNMLEdBQVNGLEVBQVlzQixFQUFLRSxZQUFZakIsSUFFMUMsT0FBT0wsRUFDWCxJQUFLLFFBQ0wsSUFBSyxhQUNMLElBQUssYUFDTCxJQUFLLGtCQUNELE9BQU8sRUFFZixPQUFPLEVBNUJZdUIsQ0FBY0gsS0FDOUIsSywwQkNtQlAsU0FBU0ksRUFBYVAsR0FDbEIsSUFBSVEsRUFBUyxDQUFFSixLQUFNLFdBZXJCLE9BYkFLLE9BQU9DLEtBQUtWLEdBQVNXLFNBQVEsU0FBVUMsR0FDbkMsT0FBUUEsR0FDSixJQUFLLE9BQ0wsSUFBSyxhQUNMLElBQUssV0FDRCxPQUNKLFFBQ0lKLEVBQU9JLEdBQU9aLEVBQVFZLE9BSWxDSixFQUFPSyxXQUFhQyxFQUFnQmQsRUFBUWEsWUFDNUNMLEVBQU9PLFNBQVdDLEVBQWNoQixFQUFRZSxVQUNqQ1AsRUFTWCxTQUFTTSxFQUFnQkQsR0FDckIsSUFBSUwsRUFBUyxHQUNiLE9BQUtLLEdBR0xKLE9BQU9DLEtBQUtHLEdBQVlGLFNBQVEsU0FBVUMsR0FDdEMsSUFBSVYsRUFBUVcsRUFBV0QsR0FDRixpQkFBVlYsRUFDTyxPQUFWQSxFQUVBTSxFQUFPSSxHQUFPLEtBRVRLLE1BQU1DLFFBQVFoQixHQUVuQk0sRUFBT0ksR0FBT1YsRUFBTWlCLEtBQUksU0FBVUMsR0FDOUIsT0FBT0EsS0FLWFosRUFBT0ksR0FBT0UsRUFBZ0JaLEdBSWxDTSxFQUFPSSxHQUFPVixLQUdmTSxHQXhCSUEsRUEwRGYsU0FBU1EsRUFBY0QsR0FDbkIsSUFBSVosRUFBTyxDQUFFQyxLQUFNVyxFQUFTWCxNQUk1QixPQUhJVyxFQUFTTSxPQUNUbEIsRUFBS2tCLEtBQU9OLEVBQVNNLE1BRUgsdUJBQWxCTixFQUFTWCxNQUNURCxFQUFLbUIsV0FBYVAsRUFBU08sV0FBV0gsS0FBSSxTQUFVSSxHQUNoRCxPQUFPUCxFQUFjTyxNQUVsQnBCLElBRVhBLEVBQUtFLFlBQWNtQixFQUFVVCxFQUFTVixhQUMvQkYsR0FTWCxTQUFTcUIsRUFBVTFDLEdBQ2YsSUFBSTBCLEVBQVMxQixFQUNiLE1BQXlCLGlCQUFkMEIsRUFBTyxHQUNQQSxFQUFPaUIsUUFFWGpCLEVBQU9XLEtBQUksU0FBVU8sR0FDeEIsT0FBT0YsRUFBVUUsTUFHekIzQixFQUFRLEVBaEpSLFNBQWVDLEdBQ1gsSUFBS0EsRUFDRCxNQUFNLElBQUkyQixNQUFNLHVCQUVwQixPQUFRM0IsRUFBUUksTUFDWixJQUFLLFVBQ0QsT0FBT0csRUFBYVAsR0FDeEIsSUFBSyxvQkFDRCxPQWlGWixTQUFnQ0EsR0FDNUIsSUFBSVEsRUFBUyxDQUFFSixLQUFNLHFCQWVyQixPQWJBSyxPQUFPQyxLQUFLVixHQUFTVyxTQUFRLFNBQVVDLEdBQ25DLE9BQVFBLEdBQ0osSUFBSyxPQUNMLElBQUssV0FDRCxPQUNKLFFBQ0lKLEVBQU9JLEdBQU9aLEVBQVFZLE9BSWxDSixFQUFPb0IsU0FBVzVCLEVBQVE0QixTQUFTVCxLQUFJLFNBQVVVLEdBQzdDLE9BQU90QixFQUFhc0IsTUFFakJyQixFQWpHUXNCLENBQXVCOUIsR0FDbEMsSUFBSyxRQUNMLElBQUssYUFDTCxJQUFLLFVBQ0wsSUFBSyxhQUNMLElBQUssa0JBQ0wsSUFBSyxlQUNMLElBQUsscUJBQ0QsT0FBT2dCLEVBQWNoQixHQUN6QixRQUNJLE1BQU0sSUFBSTJCLE1BQU0sMkIsMEJDbUU1QixTQUFTRSxFQUFRMUIsRUFBTVUsRUFBWWtCLFFBQ2YsSUFBWkEsSUFBc0JBLEVBQVUsSUFDcEMsSUFBSUMsRUFBTyxDQUFFNUIsS0FBTSxXQVNuQixPQVJtQixJQUFmMkIsRUFBUUUsSUFBWUYsRUFBUUUsTUFDNUJELEVBQUtDLEdBQUtGLEVBQVFFLElBRWxCRixFQUFRVixPQUNSVyxFQUFLWCxLQUFPVSxFQUFRVixNQUV4QlcsRUFBS25CLFdBQWFBLEdBQWMsR0FDaENtQixFQUFLakIsU0FBV1osRUFDVDZCLEVBOENYLFNBQVNFLEVBQU03QixFQUFhUSxFQUFZa0IsR0FNcEMsWUFMZ0IsSUFBWkEsSUFBc0JBLEVBQVUsSUFLN0JGLEVBSkksQ0FDUHpCLEtBQU0sUUFDTkMsWUFBYUEsR0FFSVEsRUFBWWtCLEdBNkNyQyxTQUFTSSxFQUFROUIsRUFBYVEsRUFBWWtCLFFBQ3RCLElBQVpBLElBQXNCQSxFQUFVLElBQ3BDLElBQUssSUFBSUssRUFBSyxFQUFHQyxFQUFnQmhDLEVBQWErQixFQUFLQyxFQUFjckQsT0FBUW9ELElBQU0sQ0FDM0UsSUFBSUUsRUFBT0QsRUFBY0QsR0FDekIsR0FBSUUsRUFBS3RELE9BQVMsRUFDZCxNQUFNLElBQUkyQyxNQUFNLCtEQUVwQixJQUFLLElBQUlZLEVBQUksRUFBR0EsRUFBSUQsRUFBS0EsRUFBS3RELE9BQVMsR0FBR0EsT0FBUXVELElBRTlDLEdBQUlELEVBQUtBLEVBQUt0RCxPQUFTLEdBQUd1RCxLQUFPRCxFQUFLLEdBQUdDLEdBQ3JDLE1BQU0sSUFBSVosTUFBTSwrQ0FRNUIsT0FBT0UsRUFKSSxDQUNQekIsS0FBTSxVQUNOQyxZQUFhQSxHQUVJUSxFQUFZa0IsR0E2Q3JDLFNBQVNTLEVBQVduQyxFQUFhUSxFQUFZa0IsR0FFekMsUUFEZ0IsSUFBWkEsSUFBc0JBLEVBQVUsSUFDaEMxQixFQUFZckIsT0FBUyxFQUNyQixNQUFNLElBQUkyQyxNQUFNLHlEQU1wQixPQUFPRSxFQUpJLENBQ1B6QixLQUFNLGFBQ05DLFlBQWFBLEdBRUlRLEVBQVlrQixHQW1EckMsU0FBU1UsRUFBa0JiLEVBQVVHLFFBQ2pCLElBQVpBLElBQXNCQSxFQUFVLElBQ3BDLElBQUlXLEVBQUssQ0FBRXRDLEtBQU0scUJBUWpCLE9BUEkyQixFQUFRRSxLQUNSUyxFQUFHVCxHQUFLRixFQUFRRSxJQUVoQkYsRUFBUVYsT0FDUnFCLEVBQUdyQixLQUFPVSxFQUFRVixNQUV0QnFCLEVBQUdkLFNBQVdBLEVBQ1BjLEVBb0JYLFNBQVNDLEVBQWdCdEMsRUFBYVEsRUFBWWtCLEdBTTlDLFlBTGdCLElBQVpBLElBQXNCQSxFQUFVLElBSzdCRixFQUpJLENBQ1B6QixLQUFNLGtCQUNOQyxZQUFhQSxHQUVJUSxFQUFZa0IsR0FvQnJDLFNBQVNhLEVBQVd2QyxFQUFhUSxFQUFZa0IsR0FNekMsWUFMZ0IsSUFBWkEsSUFBc0JBLEVBQVUsSUFLN0JGLEVBSkksQ0FDUHpCLEtBQU0sYUFDTkMsWUFBYUEsR0FFSVEsRUFBWWtCLEdBcUJyQyxTQUFTYyxFQUFheEMsRUFBYVEsRUFBWWtCLEdBTTNDLFlBTGdCLElBQVpBLElBQXNCQSxFQUFVLElBSzdCRixFQUpJLENBQ1B6QixLQUFNLGVBQ05DLFlBQWFBLEdBRUlRLEVBQVlrQixHQThEckMsU0FBU2UsRUFBZ0JDLEVBQVNDLFFBQ2hCLElBQVZBLElBQW9CQSxFQUFRLGNBQ2hDLElBQUlDLEVBQVNsRCxFQUFRbUQsUUFBUUYsR0FDN0IsSUFBS0MsRUFDRCxNQUFNLElBQUl0QixNQUFNcUIsRUFBUSxxQkFFNUIsT0FBT0QsRUFBVUUsRUFhckIsU0FBU0UsRUFBZ0JDLEVBQVVKLFFBQ2pCLElBQVZBLElBQW9CQSxFQUFRLGNBQ2hDLElBQUlDLEVBQVNsRCxFQUFRbUQsUUFBUUYsR0FDN0IsSUFBS0MsRUFDRCxNQUFNLElBQUl0QixNQUFNcUIsRUFBUSxxQkFFNUIsT0FBT0ksRUFBV0gsRUF3Q3RCLFNBQVNJLEVBQWlCTixHQUV0QixPQURjQSxHQUFXLEVBQUk5RCxLQUFLYSxJQUNqQixJQUFNYixLQUFLYSxHQXFFaEMsU0FBU3dELEVBQVN6RCxHQUNkLE9BQVEwRCxNQUFNMUQsSUFBZ0IsT0FBUkEsSUFBaUJvQixNQUFNQyxRQUFRckIsS0FBUyxRQUFRMkQsS0FBSzNELEdBem1CL0VZLE9BQU9nRCxlQUFlMUQsRUFBUyxhQUFjLENBQUVHLE9BQU8sSUFVdERILEVBQVEyRCxZQUFjLFVBT3RCM0QsRUFBUW1ELFFBQVUsQ0FDZFMsWUFBbUMsSUFBdEI1RCxFQUFRMkQsWUFDckJFLFlBQW1DLElBQXRCN0QsRUFBUTJELFlBQ3JCRyxRQUFTOUQsRUFBUTJELFlBQWMsT0FDL0JJLEtBQTRCLFFBQXRCL0QsRUFBUTJELFlBQ2RLLE9BQThCLE1BQXRCaEUsRUFBUTJELFlBQ2hCTSxXQUFZakUsRUFBUTJELFlBQWMsSUFDbENPLFdBQVlsRSxFQUFRMkQsWUFBYyxJQUNsQ1EsT0FBUW5FLEVBQVEyRCxZQUNoQlMsT0FBUXBFLEVBQVEyRCxZQUNoQlUsTUFBT3JFLEVBQVEyRCxZQUFjLFNBQzdCVyxZQUFtQyxJQUF0QnRFLEVBQVEyRCxZQUNyQlksWUFBbUMsSUFBdEJ2RSxFQUFRMkQsWUFDckJhLGNBQWV4RSxFQUFRMkQsWUFBYyxLQUNyQ1gsUUFBUyxFQUNUeUIsTUFBT3pFLEVBQVEyRCxZQUFjLFFBUWpDM0QsRUFBUTBFLGFBQWUsQ0FDbkJkLFlBQWEsSUFDYkMsWUFBYSxJQUNiQyxRQUFTLEVBQUksT0FDYkMsS0FBTSxRQUNOQyxPQUFRLE1BQ1JDLFdBQVksS0FDWkMsV0FBWSxLQUNaQyxPQUFRLEVBQ1JDLE9BQVEsRUFDUkMsTUFBTyxFQUFJLFNBQ1hDLFlBQWEsSUFDYkMsWUFBYSxJQUNiQyxjQUFlLEVBQUksS0FDbkJ4QixRQUFTLEVBQUloRCxFQUFRMkQsWUFDckJjLE1BQU8sRUFBSSxRQVFmekUsRUFBUTJFLFlBQWMsQ0FDbEJDLE1BQU8sVUFDUGhCLFlBQWEsSUFDYkMsWUFBYSxJQUNiRSxLQUFNLGFBQ05DLE9BQVEsZUFDUkMsV0FBWSxLQUNaQyxXQUFZLEtBQ1pDLE9BQVEsRUFDUkMsT0FBUSxFQUNSQyxNQUFPLE9BQ1BDLFlBQWEsSUFDYkMsWUFBYSxJQUNiRSxNQUFPLGFBbUNYekUsRUFBUThCLFFBQVVBLEVBNEJsQjlCLEVBQVFnQixTQVpSLFNBQWtCWCxFQUFNQyxFQUFhMEIsR0FFakMsWUFEZ0IsSUFBWkEsSUFBc0JBLEVBQVUsSUFDNUIzQixHQUNKLElBQUssUUFBUyxPQUFPOEIsRUFBTTdCLEdBQWFVLFNBQ3hDLElBQUssYUFBYyxPQUFPeUIsRUFBV25DLEdBQWFVLFNBQ2xELElBQUssVUFBVyxPQUFPb0IsRUFBUTlCLEdBQWFVLFNBQzVDLElBQUssYUFBYyxPQUFPNkIsRUFBV3ZDLEdBQWFVLFNBQ2xELElBQUssa0JBQW1CLE9BQU80QixFQUFnQnRDLEdBQWFVLFNBQzVELElBQUssZUFBZ0IsT0FBTzhCLEVBQWF4QyxHQUFhVSxTQUN0RCxRQUFTLE1BQU0sSUFBSVksTUFBTXZCLEVBQU8saUJBMkJ4Q0wsRUFBUW1DLE1BQVFBLEVBMkJoQm5DLEVBQVE2RSxPQU5SLFNBQWdCdkUsRUFBYVEsRUFBWWtCLEdBRXJDLFlBRGdCLElBQVpBLElBQXNCQSxFQUFVLElBQzdCVSxFQUFrQnBDLEVBQVljLEtBQUksU0FBVXJDLEdBQy9DLE9BQU9vRCxFQUFNcEQsRUFBUStCLE1BQ3JCa0IsSUFzQ1JoQyxFQUFRb0MsUUFBVUEsRUF5QmxCcEMsRUFBUThFLFNBTlIsU0FBa0J4RSxFQUFhUSxFQUFZa0IsR0FFdkMsWUFEZ0IsSUFBWkEsSUFBc0JBLEVBQVUsSUFDN0JVLEVBQWtCcEMsRUFBWWMsS0FBSSxTQUFVckMsR0FDL0MsT0FBT3FELEVBQVFyRCxFQUFRK0IsTUFDdkJrQixJQStCUmhDLEVBQVF5QyxXQUFhQSxFQTBCckJ6QyxFQUFRK0UsWUFOUixTQUFxQnpFLEVBQWFRLEVBQVlrQixHQUUxQyxZQURnQixJQUFaQSxJQUFzQkEsRUFBVSxJQUM3QlUsRUFBa0JwQyxFQUFZYyxLQUFJLFNBQVVyQyxHQUMvQyxPQUFPMEQsRUFBVzFELEVBQVErQixNQUMxQmtCLElBcUNSaEMsRUFBUTBDLGtCQUFvQkEsRUEwQjVCMUMsRUFBUTRDLGdCQUFrQkEsRUEwQjFCNUMsRUFBUTZDLFdBQWFBLEVBMkJyQjdDLEVBQVE4QyxhQUFlQSxFQTJCdkI5QyxFQUFRZ0YsbUJBUlIsU0FBNEJ6RCxFQUFZVCxFQUFZa0IsR0FNaEQsWUFMZ0IsSUFBWkEsSUFBc0JBLEVBQVUsSUFLN0JGLEVBSkksQ0FDUHpCLEtBQU0scUJBQ05rQixXQUFZQSxHQUVLVCxFQUFZa0IsSUF3QnJDaEMsRUFBUWlGLE1BUlIsU0FBZW5GLEVBQUtvRixHQUVoQixRQURrQixJQUFkQSxJQUF3QkEsRUFBWSxHQUNwQ0EsS0FBZUEsR0FBYSxHQUM1QixNQUFNLElBQUl0RCxNQUFNLHVDQUVwQixJQUFJdUQsRUFBYWpHLEtBQUtrRyxJQUFJLEdBQUlGLEdBQWEsR0FDM0MsT0FBT2hHLEtBQUsrRixNQUFNbkYsRUFBTXFGLEdBQWNBLEdBcUIxQ25GLEVBQVErQyxnQkFBa0JBLEVBbUIxQi9DLEVBQVFvRCxnQkFBa0JBLEVBYzFCcEQsRUFBUXFGLGdCQUhSLFNBQXlCaEMsRUFBVUosR0FDL0IsT0FBT0ssRUFBaUJGLEVBQWdCQyxFQUFVSixLQWtCdERqRCxFQUFRc0YsaUJBUFIsU0FBMEJDLEdBQ3RCLElBQUlDLEVBQVFELEVBQVUsSUFJdEIsT0FISUMsRUFBUSxJQUNSQSxHQUFTLEtBRU5BLEdBY1h4RixFQUFRc0QsaUJBQW1CQSxFQVkzQnRELEVBQVF5RixpQkFKUixTQUEwQjNCLEdBRXRCLE9BRGNBLEVBQVUsSUFDUDVFLEtBQUthLEdBQUssS0FvQi9CQyxFQUFRMEYsY0FSUixTQUF1QnpHLEVBQVEwRyxFQUFjQyxHQUd6QyxRQUZxQixJQUFqQkQsSUFBMkJBLEVBQWUsbUJBQzVCLElBQWRDLElBQXdCQSxFQUFZLGdCQUNsQzNHLEdBQVUsR0FDWixNQUFNLElBQUkyQyxNQUFNLG9DQUVwQixPQUFPbUIsRUFBZ0JLLEVBQWdCbkUsRUFBUTBHLEdBQWVDLElBMkJsRTVGLEVBQVE2RixZQWhCUixTQUFxQkMsRUFBTUgsRUFBY0MsR0FHckMsUUFGcUIsSUFBakJELElBQTJCQSxFQUFlLGVBQzVCLElBQWRDLElBQXdCQSxFQUFZLGdCQUNsQ0UsR0FBUSxHQUNWLE1BQU0sSUFBSWxFLE1BQU0sa0NBRXBCLElBQUltRSxFQUFjL0YsRUFBUTJFLFlBQVlnQixHQUN0QyxJQUFLSSxFQUNELE1BQU0sSUFBSW5FLE1BQU0sMEJBRXBCLElBQUlvRSxFQUFjaEcsRUFBUTJFLFlBQVlpQixHQUN0QyxJQUFLSSxFQUNELE1BQU0sSUFBSXBFLE1BQU0sdUJBRXBCLE9BQVFrRSxFQUFPQyxFQUFlQyxHQWlCbENoRyxFQUFRdUQsU0FBV0EsRUFlbkJ2RCxFQUFRaUcsU0FIUixTQUFrQkMsR0FDZCxRQUFVQSxHQUFXQSxFQUFNQyxjQUFnQnpGLFFBd0MvQ1YsRUFBUW9HLGFBaEJSLFNBQXNCOUUsR0FDbEIsSUFBS0EsRUFDRCxNQUFNLElBQUlNLE1BQU0sb0JBRXBCLElBQUtWLE1BQU1DLFFBQVFHLEdBQ2YsTUFBTSxJQUFJTSxNQUFNLHlCQUVwQixHQUFvQixJQUFoQk4sRUFBS3JDLFFBQWdDLElBQWhCcUMsRUFBS3JDLE9BQzFCLE1BQU0sSUFBSTJDLE1BQU0sMkNBRXBCTixFQUFLVixTQUFRLFNBQVVkLEdBQ25CLElBQUt5RCxFQUFTekQsR0FDVixNQUFNLElBQUk4QixNQUFNLHNDQWtDNUI1QixFQUFRcUcsV0FSUixTQUFvQm5FLEdBQ2hCLElBQUtBLEVBQ0QsTUFBTSxJQUFJTixNQUFNLGtCQUVwQixJQUFpRCxJQUE3QyxDQUFDLFNBQVUsVUFBVTBFLGVBQWVwRSxHQUNwQyxNQUFNLElBQUlOLE1BQU0sb0NBUXhCNUIsRUFBUXVHLGdCQUhSLFdBQ0ksTUFBTSxJQUFJM0UsTUFBTSxrREFNcEI1QixFQUFRd0csZ0JBSFIsV0FDSSxNQUFNLElBQUk1RSxNQUFNLGtEQU1wQjVCLEVBQVF5RyxrQkFIUixXQUNJLE1BQU0sSUFBSTdFLE1BQU0saURBTXBCNUIsRUFBUTBHLGtCQUhSLFdBQ0ksTUFBTSxJQUFJOUUsTUFBTSxpREFNcEI1QixFQUFRMkcsa0JBSFIsV0FDSSxNQUFNLElBQUkvRSxNQUFNLGlEQU1wQjVCLEVBQVE0RyxlQUhSLFdBQ0ksTUFBTSxJQUFJaEYsTUFBTSxrREFNcEI1QixFQUFRNkcsZ0JBSFIsV0FDSSxNQUFNLElBQUlqRixNQUFNLGdELDRCQ3h0QnBCbEIsT0FBT2dELGVBQWUxRCxFQUFTLGFBQS9CLENBQStDRyxPQUFPLElBRXRELElBQUkyRyxFQUFVLEVBQVEsTUFtQ3RCLFNBQVNDLEVBQVU5RyxFQUFTK0csRUFBVUMsR0FFbEMsR0FBZ0IsT0FBWmhILEVBdUJKLElBdEJBLElBQUl1QyxFQUFHMEUsRUFBR0MsRUFBR25HLEVBQVVvRyxFQUFPckksRUFDMUJzSSxFQUdBQyxFQUZBQyxFQUFhLEVBQ2JDLEVBQWEsRUFFYm5ILEVBQU9KLEVBQVFJLEtBQ2ZvSCxFQUErQixzQkFBVHBILEVBQ3RCcUgsRUFBcUIsWUFBVHJILEVBQ1pzSCxFQUFPRixFQUFzQnhILEVBQVE0QixTQUFTNUMsT0FBUyxFQWNsRDJJLEVBQWUsRUFBR0EsRUFBZUQsRUFBTUMsSUFBZ0IsQ0FJNURSLEdBREFFLEtBRkFELEVBQTJCSSxFQUFzQnhILEVBQVE0QixTQUFTK0YsR0FBYzVHLFNBQzNFMEcsRUFBWXpILEVBQVFlLFNBQVdmLElBQ2dELHVCQUFqQ29ILEVBQXdCaEgsTUFDNUNnSCxFQUF3QjlGLFdBQVd0QyxPQUFTLEVBRTNFLElBQUssSUFBSTRJLEVBQVksRUFBR0EsRUFBWVQsRUFBT1MsSUFBYSxDQUNwRCxJQUFJQyxFQUFvQixFQUNwQkMsRUFBZ0IsRUFLcEIsR0FBaUIsUUFKakIvRyxFQUFXc0csRUFDUEQsRUFBd0I5RixXQUFXc0csR0FBYVIsR0FHcEQsQ0FDQXRJLEVBQVNpQyxFQUFTVixZQUNsQixJQUFJMEgsRUFBV2hILEVBQVNYLEtBSXhCLE9BRkFrSCxHQUFjTixHQUFrQyxZQUFiZSxHQUF1QyxpQkFBYkEsRUFBb0MsRUFBSixFQUVyRkEsR0FDUixLQUFLLEtBQ0QsTUFDSixJQUFLLFFBQ0QsSUFBcUYsSUFBakZoQixFQUFTakksRUFBUXlJLEVBQVlJLEVBQWNFLEVBQW1CQyxHQUEwQixPQUFPLEVBQ25HUCxJQUNBTSxJQUNBLE1BQ0osSUFBSyxhQUNMLElBQUssYUFDRCxJQUFLdEYsRUFBSSxFQUFHQSxFQUFJekQsRUFBT0UsT0FBUXVELElBQUssQ0FDaEMsSUFBd0YsSUFBcEZ3RSxFQUFTakksRUFBT3lELEdBQUlnRixFQUFZSSxFQUFjRSxFQUFtQkMsR0FBMEIsT0FBTyxFQUN0R1AsSUFDaUIsZUFBYlEsR0FBMkJGLElBRWxCLGVBQWJFLEdBQTJCRixJQUMvQixNQUNKLElBQUssVUFDTCxJQUFLLGtCQUNELElBQUt0RixFQUFJLEVBQUdBLEVBQUl6RCxFQUFPRSxPQUFRdUQsSUFBSyxDQUNoQyxJQUFLMEUsRUFBSSxFQUFHQSxFQUFJbkksRUFBT3lELEdBQUd2RCxPQUFTc0ksRUFBWUwsSUFBSyxDQUNoRCxJQUEyRixJQUF2RkYsRUFBU2pJLEVBQU95RCxHQUFHMEUsR0FBSU0sRUFBWUksRUFBY0UsRUFBbUJDLEdBQTBCLE9BQU8sRUFDekdQLElBRWEsb0JBQWJRLEdBQWdDRixJQUNuQixZQUFiRSxHQUF3QkQsSUFFZixZQUFiQyxHQUF3QkYsSUFDNUIsTUFDSixJQUFLLGVBQ0QsSUFBS3RGLEVBQUksRUFBR0EsRUFBSXpELEVBQU9FLE9BQVF1RCxJQUFLLENBRWhDLElBREF1RixFQUFnQixFQUNYYixFQUFJLEVBQUdBLEVBQUluSSxFQUFPeUQsR0FBR3ZELE9BQVFpSSxJQUFLLENBQ25DLElBQUtDLEVBQUksRUFBR0EsRUFBSXBJLEVBQU95RCxHQUFHMEUsR0FBR2pJLE9BQVNzSSxFQUFZSixJQUFLLENBQ25ELElBQThGLElBQTFGSCxFQUFTakksRUFBT3lELEdBQUcwRSxHQUFHQyxHQUFJSyxFQUFZSSxFQUFjRSxFQUFtQkMsR0FBMEIsT0FBTyxFQUM1R1AsSUFFSk8sSUFFSkQsSUFFSixNQUNKLElBQUsscUJBQ0QsSUFBS3RGLEVBQUksRUFBR0EsRUFBSXhCLEVBQVNPLFdBQVd0QyxPQUFRdUQsSUFDeEMsSUFBc0UsSUFBbEV1RSxFQUFVL0YsRUFBU08sV0FBV2lCLEdBQUl3RSxFQUFVQyxHQUE2QixPQUFPLEVBQ3hGLE1BQ0osUUFDSSxNQUFNLElBQUlyRixNQUFNLDZCQTJGaEMsU0FBU3FHLEVBQVNoSSxFQUFTK0csR0FDdkIsSUFBSTNILEVBQ0osT0FBUVksRUFBUUksTUFDaEIsSUFBSyxvQkFDRCxJQUFLaEIsRUFBSSxFQUFHQSxFQUFJWSxFQUFRNEIsU0FBUzVDLFNBQ3VCLElBQWhEK0gsRUFBUy9HLEVBQVE0QixTQUFTeEMsR0FBR3lCLFdBQVl6QixHQURSQSxLQUd6QyxNQUNKLElBQUssVUFDRDJILEVBQVMvRyxFQUFRYSxXQUFZLElBc0ZyQyxTQUFTb0gsRUFBWWpJLEVBQVMrRyxHQUMxQixHQUFxQixZQUFqQi9HLEVBQVFJLEtBQ1IyRyxFQUFTL0csRUFBUyxRQUNmLEdBQXFCLHNCQUFqQkEsRUFBUUksS0FDZixJQUFLLElBQUloQixFQUFJLEVBQUdBLEVBQUlZLEVBQVE0QixTQUFTNUMsU0FDUSxJQUFyQytILEVBQVMvRyxFQUFRNEIsU0FBU3hDLEdBQUlBLEdBRE9BLE1BZ0hyRCxTQUFTOEksRUFBU2xJLEVBQVMrRyxHQUN2QixJQUFJM0gsRUFBR21ELEVBQUdoQixFQUFHUixFQUFVb0csRUFDbkJDLEVBQ0FDLEVBQ0FjLEVBQ0FDLEVBQ0FDLEVBQ0FWLEVBQWUsRUFDZkgsRUFBdUMsc0JBQWpCeEgsRUFBUUksS0FDOUJxSCxFQUE2QixZQUFqQnpILEVBQVFJLEtBQ3BCc0gsRUFBT0YsRUFBc0J4SCxFQUFRNEIsU0FBUzVDLE9BQVMsRUFjM0QsSUFBS0ksRUFBSSxFQUFHQSxFQUFJc0ksRUFBTXRJLElBQUssQ0FhdkIsSUFYQWdJLEVBQTJCSSxFQUFzQnhILEVBQVE0QixTQUFTeEMsR0FBRzJCLFNBQ2hFMEcsRUFBWXpILEVBQVFlLFNBQVdmLEVBQ3BDbUksRUFBcUJYLEVBQXNCeEgsRUFBUTRCLFNBQVN4QyxHQUFHeUIsV0FDMUQ0RyxFQUFZekgsRUFBUWEsV0FBYSxHQUN0Q3VILEVBQWVaLEVBQXNCeEgsRUFBUTRCLFNBQVN4QyxHQUFHaUMsS0FDcERvRyxFQUFZekgsRUFBUXFCLFVBQU9pSCxFQUNoQ0QsRUFBYWIsRUFBc0J4SCxFQUFRNEIsU0FBU3hDLEdBQUc2QyxHQUNsRHdGLEVBQVl6SCxFQUFRaUMsUUFBS3FHLEVBRTlCbkIsR0FEQUUsSUFBdUIsR0FBNkQsdUJBQWpDRCxFQUF3QmhILE1BQzVDZ0gsRUFBd0I5RixXQUFXdEMsT0FBUyxFQUV0RXVDLEVBQUksRUFBR0EsRUFBSTRGLEVBQU81RixJQUtuQixHQUFpQixRQUpqQlIsRUFBV3NHLEVBQ1BELEVBQXdCOUYsV0FBV0MsR0FBSzZGLEdBTzVDLE9BQVFyRyxFQUFTWCxNQUNqQixJQUFLLFFBQ0wsSUFBSyxhQUNMLElBQUssYUFDTCxJQUFLLFVBQ0wsSUFBSyxrQkFDTCxJQUFLLGVBQ0QsSUFBb0YsSUFBaEYyRyxFQUFTaEcsRUFBVTRHLEVBQWNRLEVBQW1CQyxFQUFhQyxHQUFzQixPQUFPLEVBQ2xHLE1BRUosSUFBSyxxQkFDRCxJQUFLOUYsRUFBSSxFQUFHQSxFQUFJeEIsRUFBU08sV0FBV3RDLE9BQVF1RCxJQUN4QyxJQUFrRyxJQUE5RndFLEVBQVNoRyxFQUFTTyxXQUFXaUIsR0FBSW9GLEVBQWNRLEVBQW1CQyxFQUFhQyxHQUFzQixPQUFPLEVBRXBILE1BRUosUUFDSSxNQUFNLElBQUkxRyxNQUFNLDhCQXBCaEIsSUFBZ0YsSUFBNUVvRixFQUFTLEtBQU1ZLEVBQWNRLEVBQW1CQyxFQUFhQyxHQUFzQixPQUFPLEVBd0J0R1YsS0F5RlIsU0FBU1ksRUFBWXZJLEVBQVMrRyxHQUMxQm1CLEVBQVNsSSxHQUFTLFNBQVVlLEVBQVU0RyxFQUFjOUcsRUFBWVEsRUFBTVksR0FFbEUsSUFVSThGLEVBVkEzSCxFQUFxQixPQUFiVyxFQUFxQixLQUFPQSxFQUFTWCxLQUNqRCxPQUFRQSxHQUNSLEtBQUssS0FDTCxJQUFLLFFBQ0wsSUFBSyxhQUNMLElBQUssVUFDRCxPQUErRixJQUEzRjJHLEVBQVNGLEVBQVFoRixRQUFRZCxFQUFVRixFQUFZLENBQUNRLEtBQU1BLEVBQU1ZLEdBQUlBLElBQU0wRixFQUFjLFNBQ3hGLEVBTUosT0FBUXZILEdBQ1IsSUFBSyxhQUNEMkgsRUFBVyxRQUNYLE1BQ0osSUFBSyxrQkFDREEsRUFBVyxhQUNYLE1BQ0osSUFBSyxlQUNEQSxFQUFXLFVBSWYsSUFBSyxJQUFJRixFQUFvQixFQUFHQSxFQUFvQjlHLEVBQVNWLFlBQVlyQixPQUFRNkksSUFBcUIsQ0FDbEcsSUFDSTFILEVBQU8sQ0FDUEMsS0FBTTJILEVBQ04xSCxZQUhhVSxFQUFTVixZQUFZd0gsSUFLdEMsSUFBcUYsSUFBakZkLEVBQVNGLEVBQVFoRixRQUFRMUIsRUFBTVUsR0FBYThHLEVBQWNFLEdBQThCLE9BQU8sTUErRi9HLFNBQVNXLEVBQVl4SSxFQUFTK0csR0FDMUJ3QixFQUFZdkksR0FBUyxTQUFVNkIsRUFBUzhGLEVBQWNFLEdBQ2xELElBQUlZLEVBQWUsRUFHbkIsR0FBSzVHLEVBQVFkLFNBQWIsQ0FFQSxJQUFJWCxFQUFPeUIsRUFBUWQsU0FBU1gsS0FDNUIsR0FBYSxVQUFUQSxHQUE2QixlQUFUQSxFQUF4QixDQUdBLElBQUlzSSxFQUNBQyxFQUF1QixFQUN2QkMsRUFBcUIsRUFDckJDLEVBQWdCLEVBQ3BCLE9BY08sSUFkSC9CLEVBQVVqRixHQUFTLFNBQVVpSCxFQUFjdkIsRUFBWXdCLEVBQW1CQyxFQUFxQmxCLEdBRS9GLFFBQXVCUSxJQUFuQkksR0FBZ0NmLEVBQWVnQixHQUF3QkssRUFBc0JKLEdBQXNCZCxFQUFnQmUsRUFNbkksT0FMQUgsRUFBaUJJLEVBQ2pCSCxFQUF1QmhCLEVBQ3ZCaUIsRUFBcUJJLEVBQ3JCSCxFQUFnQmYsT0FDaEJXLEVBQWUsR0FHbkIsSUFBSVEsRUFBaUJwQyxFQUFRckUsV0FBVyxDQUFDa0csRUFBZ0JJLEdBQWVqSCxFQUFRaEIsWUFDaEYsSUFBK0YsSUFBM0ZrRyxFQUFTa0MsRUFBZ0J0QixFQUFjRSxFQUFtQkMsRUFBZVcsR0FBeUIsT0FBTyxFQUM3R0EsSUFDQUMsRUFBaUJJLFdBYnJCLE9BZ0hSLFNBQVNJLEVBQVNsSixFQUFTK0csR0FFdkIsSUFBSy9HLEVBQVMsTUFBTSxJQUFJMkIsTUFBTSx1QkFFOUI0RyxFQUFZdkksR0FBUyxTQUFVNkIsRUFBUzhGLEVBQWNFLEdBQ2xELEdBQXlCLE9BQXJCaEcsRUFBUWQsU0FBWixDQUNBLElBQUlYLEVBQU95QixFQUFRZCxTQUFTWCxLQUN4QnRCLEVBQVMrQyxFQUFRZCxTQUFTVixZQUM5QixPQUFRRCxHQUNSLElBQUssYUFDRCxJQUFpRSxJQUE3RDJHLEVBQVNsRixFQUFTOEYsRUFBY0UsRUFBbUIsRUFBRyxHQUFjLE9BQU8sRUFDL0UsTUFDSixJQUFLLFVBQ0QsSUFBSyxJQUFJQyxFQUFnQixFQUFHQSxFQUFnQmhKLEVBQU9FLE9BQVE4SSxJQUN2RCxJQUFnSSxJQUE1SGYsRUFBU0YsRUFBUXJFLFdBQVcxRCxFQUFPZ0osR0FBZ0JqRyxFQUFRaEIsWUFBYThHLEVBQWNFLEVBQW1CQyxHQUEwQixPQUFPLE9BaVE5Si9ILEVBQVErRyxVQUFZQSxFQUNwQi9HLEVBQVFvSixZQWw2QlIsU0FBcUJuSixFQUFTK0csRUFBVXFDLEVBQWNwQyxHQUNsRCxJQUFJcUMsRUFBZ0JELEVBS3BCLE9BSkF0QyxFQUFVOUcsR0FBUyxTQUFVOEksRUFBY3ZCLEVBQVlJLEVBQWNFLEVBQW1CQyxHQUNoQ3VCLEVBQWpDLElBQWY5QixRQUFxQ2UsSUFBakJjLEVBQTRDTixFQUMvQy9CLEVBQVNzQyxFQUFlUCxFQUFjdkIsRUFBWUksRUFBY0UsRUFBbUJDLEtBQ3pHZCxHQUNJcUMsR0E2NUJYdEosRUFBUWlJLFNBQVdBLEVBQ25CakksRUFBUXVKLFdBdDBCUixTQUFvQnRKLEVBQVMrRyxFQUFVcUMsR0FDbkMsSUFBSUMsRUFBZ0JELEVBS3BCLE9BSkFwQixFQUFTaEksR0FBUyxTQUFVdUosRUFBbUI1QixHQUNXMEIsRUFBakMsSUFBakIxQixRQUF1Q1csSUFBakJjLEVBQTRDRyxFQUNqRHhDLEVBQVNzQyxFQUFlRSxFQUFtQjVCLE1BRTdEMEIsR0FpMEJYdEosRUFBUWtJLFlBQWNBLEVBQ3RCbEksRUFBUXlKLGNBaHZCUixTQUF1QnhKLEVBQVMrRyxFQUFVcUMsR0FDdEMsSUFBSUMsRUFBZ0JELEVBS3BCLE9BSkFuQixFQUFZakksR0FBUyxTQUFVeUosRUFBZ0I5QixHQUNXMEIsRUFBakMsSUFBakIxQixRQUF1Q1csSUFBakJjLEVBQTRDSyxFQUNqRDFDLEVBQVNzQyxFQUFlSSxFQUFnQjlCLE1BRTFEMEIsR0EydUJYdEosRUFBUTJKLFNBenRCUixTQUFrQjFKLEdBQ2QsSUFBSWxCLEVBQVMsR0FJYixPQUhBZ0ksRUFBVTlHLEdBQVMsU0FBVTBCLEdBQ3pCNUMsRUFBTzZLLEtBQUtqSSxNQUVUNUMsR0FxdEJYaUIsRUFBUW1JLFNBQVdBLEVBQ25CbkksRUFBUUUsV0E1akJSLFNBQW9CRCxFQUFTK0csRUFBVXFDLEdBQ25DLElBQUlDLEVBQWdCRCxFQUtwQixPQUpBbEIsRUFBU2xJLEdBQVMsU0FBVTRKLEVBQWlCakMsRUFBY1EsRUFBbUJDLEVBQWFDLEdBQ2pDZ0IsRUFBakMsSUFBakIxQixRQUF1Q1csSUFBakJjLEVBQTRDUSxFQUNqRDdDLEVBQVNzQyxFQUFlTyxFQUFpQmpDLEVBQWNRLEVBQW1CQyxFQUFhQyxNQUV6R2dCLEdBdWpCWHRKLEVBQVF3SSxZQUFjQSxFQUN0QnhJLEVBQVE4SixjQXRjUixTQUF1QjdKLEVBQVMrRyxFQUFVcUMsR0FDdEMsSUFBSUMsRUFBZ0JELEVBS3BCLE9BSkFiLEVBQVl2SSxHQUFTLFNBQVV5SixFQUFnQjlCLEVBQWNFLEdBQ3dCd0IsRUFBNUQsSUFBakIxQixHQUE0QyxJQUF0QkUsUUFBNENTLElBQWpCYyxFQUE0Q0ssRUFDNUUxQyxFQUFTc0MsRUFBZUksRUFBZ0I5QixFQUFjRSxNQUV4RXdCLEdBaWNYdEosRUFBUXlJLFlBQWNBLEVBQ3RCekksRUFBUStKLGNBcFVSLFNBQXVCOUosRUFBUytHLEVBQVVxQyxHQUN0QyxJQUFJQyxFQUFnQkQsRUFDaEJXLEdBQVUsRUFNZCxPQUxBdkIsRUFBWXhJLEdBQVMsU0FBVWlKLEVBQWdCdEIsRUFBY0UsRUFBbUJDLEVBQWVXLEdBQ3RDWSxHQUFyQyxJQUFaVSxRQUFzQ3pCLElBQWpCYyxFQUE0Q0gsRUFDaERsQyxFQUFTc0MsRUFBZUosRUFBZ0J0QixFQUFjRSxFQUFtQkMsRUFBZVcsR0FDN0dzQixHQUFVLEtBRVBWLEdBNlRYdEosRUFBUW1KLFNBQVdBLEVBQ25CbkosRUFBUWlLLFdBMU5SLFNBQW9CaEssRUFBUytHLEVBQVVxQyxHQUNuQyxJQUFJQyxFQUFnQkQsRUFLcEIsT0FKQUYsRUFBU2xKLEdBQVMsU0FBVWlLLEVBQWF0QyxFQUFjRSxFQUFtQkMsR0FDaEJ1QixFQUFqQyxJQUFqQjFCLFFBQXVDVyxJQUFqQmMsRUFBNENhLEVBQ2pEbEQsRUFBU3NDLEVBQWVZLEVBQWF0QyxFQUFjRSxFQUFtQkMsTUFFeEZ1QixHQXFOWHRKLEVBQVFtSyxZQWhMUixTQUFxQmxLLEVBQVMrQixHQUcxQixHQURBQSxFQUFVQSxHQUFXLElBQ2hCOEUsRUFBUWIsU0FBU2pFLEdBQVUsTUFBTSxJQUFJSixNQUFNLHNCQUNoRCxJQU9JWixFQVBBNEcsRUFBZTVGLEVBQVE0RixjQUFnQixFQUN2Q0UsRUFBb0I5RixFQUFROEYsbUJBQXFCLEVBQ2pEQyxFQUFnQi9GLEVBQVErRixlQUFpQixFQUN6Q1csRUFBZTFHLEVBQVEwRyxjQUFnQixFQUd2QzVILEVBQWFrQixFQUFRbEIsV0FHekIsT0FBUWIsRUFBUUksTUFDaEIsSUFBSyxvQkFDR3VILEVBQWUsSUFBR0EsRUFBZTNILEVBQVE0QixTQUFTNUMsT0FBUzJJLEdBQy9EOUcsRUFBYUEsR0FBY2IsRUFBUTRCLFNBQVMrRixHQUFjOUcsV0FDMURFLEVBQVdmLEVBQVE0QixTQUFTK0YsR0FBYzVHLFNBQzFDLE1BQ0osSUFBSyxVQUNERixFQUFhQSxHQUFjYixFQUFRYSxXQUNuQ0UsRUFBV2YsRUFBUWUsU0FDbkIsTUFDSixJQUFLLFFBQ0wsSUFBSyxhQUNELE9BQU8sS0FDWCxJQUFLLGFBQ0wsSUFBSyxVQUNMLElBQUssa0JBQ0wsSUFBSyxlQUNEQSxFQUFXZixFQUNYLE1BQ0osUUFDSSxNQUFNLElBQUkyQixNQUFNLHNCQUlwQixHQUFpQixPQUFiWixFQUFtQixPQUFPLEtBQzlCLElBQUlqQyxFQUFTaUMsRUFBU1YsWUFDdEIsT0FBUVUsRUFBU1gsTUFDakIsSUFBSyxRQUNMLElBQUssYUFDRCxPQUFPLEtBQ1gsSUFBSyxhQUVELE9BRElxSSxFQUFlLElBQUdBLEVBQWUzSixFQUFPRSxPQUFTeUosRUFBZSxHQUM3RDVCLEVBQVFyRSxXQUFXLENBQUMxRCxFQUFPMkosR0FBZTNKLEVBQU8ySixFQUFlLElBQUs1SCxFQUFZa0IsR0FDNUYsSUFBSyxVQUdELE9BRkkrRixFQUFnQixJQUFHQSxFQUFnQmhKLEVBQU9FLE9BQVM4SSxHQUNuRFcsRUFBZSxJQUFHQSxFQUFlM0osRUFBT2dKLEdBQWU5SSxPQUFTeUosRUFBZSxHQUM1RTVCLEVBQVFyRSxXQUFXLENBQUMxRCxFQUFPZ0osR0FBZVcsR0FBZTNKLEVBQU9nSixHQUFlVyxFQUFlLElBQUs1SCxFQUFZa0IsR0FDMUgsSUFBSyxrQkFHRCxPQUZJOEYsRUFBb0IsSUFBR0EsRUFBb0IvSSxFQUFPRSxPQUFTNkksR0FDM0RZLEVBQWUsSUFBR0EsRUFBZTNKLEVBQU8rSSxHQUFtQjdJLE9BQVN5SixFQUFlLEdBQ2hGNUIsRUFBUXJFLFdBQVcsQ0FBQzFELEVBQU8rSSxHQUFtQlksR0FBZTNKLEVBQU8rSSxHQUFtQlksRUFBZSxJQUFLNUgsRUFBWWtCLEdBQ2xJLElBQUssZUFJRCxPQUhJOEYsRUFBb0IsSUFBR0EsRUFBb0IvSSxFQUFPRSxPQUFTNkksR0FDM0RDLEVBQWdCLElBQUdBLEVBQWdCaEosRUFBTytJLEdBQW1CN0ksT0FBUzhJLEdBQ3RFVyxFQUFlLElBQUdBLEVBQWUzSixFQUFPK0ksR0FBbUJDLEdBQWU5SSxPQUFTeUosRUFBZSxHQUMvRjVCLEVBQVFyRSxXQUFXLENBQUMxRCxFQUFPK0ksR0FBbUJDLEdBQWVXLEdBQWUzSixFQUFPK0ksR0FBbUJDLEdBQWVXLEVBQWUsSUFBSzVILEVBQVlrQixHQUVoSyxNQUFNLElBQUlKLE1BQU0sdUJBcUhwQjVCLEVBQVFvSyxVQWpGUixTQUFtQm5LLEVBQVMrQixHQUd4QixHQURBQSxFQUFVQSxHQUFXLElBQ2hCOEUsRUFBUWIsU0FBU2pFLEdBQVUsTUFBTSxJQUFJSixNQUFNLHNCQUNoRCxJQU9JWixFQVBBNEcsRUFBZTVGLEVBQVE0RixjQUFnQixFQUN2Q0UsRUFBb0I5RixFQUFROEYsbUJBQXFCLEVBQ2pEQyxFQUFnQi9GLEVBQVErRixlQUFpQixFQUN6Q1AsRUFBYXhGLEVBQVF3RixZQUFjLEVBR25DMUcsRUFBYWtCLEVBQVFsQixXQUd6QixPQUFRYixFQUFRSSxNQUNoQixJQUFLLG9CQUNHdUgsRUFBZSxJQUFHQSxFQUFlM0gsRUFBUTRCLFNBQVM1QyxPQUFTMkksR0FDL0Q5RyxFQUFhQSxHQUFjYixFQUFRNEIsU0FBUytGLEdBQWM5RyxXQUMxREUsRUFBV2YsRUFBUTRCLFNBQVMrRixHQUFjNUcsU0FDMUMsTUFDSixJQUFLLFVBQ0RGLEVBQWFBLEdBQWNiLEVBQVFhLFdBQ25DRSxFQUFXZixFQUFRZSxTQUNuQixNQUNKLElBQUssUUFDTCxJQUFLLGFBQ0QsT0FBTyxLQUNYLElBQUssYUFDTCxJQUFLLFVBQ0wsSUFBSyxrQkFDTCxJQUFLLGVBQ0RBLEVBQVdmLEVBQ1gsTUFDSixRQUNJLE1BQU0sSUFBSTJCLE1BQU0sc0JBSXBCLEdBQWlCLE9BQWJaLEVBQW1CLE9BQU8sS0FDOUIsSUFBSWpDLEVBQVNpQyxFQUFTVixZQUN0QixPQUFRVSxFQUFTWCxNQUNqQixJQUFLLFFBQ0QsT0FBT3lHLEVBQVEzRSxNQUFNcEQsRUFBUStCLEVBQVlrQixHQUM3QyxJQUFLLGFBRUQsT0FESThGLEVBQW9CLElBQUdBLEVBQW9CL0ksRUFBT0UsT0FBUzZJLEdBQ3hEaEIsRUFBUTNFLE1BQU1wRCxFQUFPK0ksR0FBb0JoSCxFQUFZa0IsR0FDaEUsSUFBSyxhQUVELE9BREl3RixFQUFhLElBQUdBLEVBQWF6SSxFQUFPRSxPQUFTdUksR0FDMUNWLEVBQVEzRSxNQUFNcEQsRUFBT3lJLEdBQWExRyxFQUFZa0IsR0FDekQsSUFBSyxVQUdELE9BRkkrRixFQUFnQixJQUFHQSxFQUFnQmhKLEVBQU9FLE9BQVM4SSxHQUNuRFAsRUFBYSxJQUFHQSxFQUFhekksRUFBT2dKLEdBQWU5SSxPQUFTdUksR0FDekRWLEVBQVEzRSxNQUFNcEQsRUFBT2dKLEdBQWVQLEdBQWExRyxFQUFZa0IsR0FDeEUsSUFBSyxrQkFHRCxPQUZJOEYsRUFBb0IsSUFBR0EsRUFBb0IvSSxFQUFPRSxPQUFTNkksR0FDM0ROLEVBQWEsSUFBR0EsRUFBYXpJLEVBQU8rSSxHQUFtQjdJLE9BQVN1SSxHQUM3RFYsRUFBUTNFLE1BQU1wRCxFQUFPK0ksR0FBbUJOLEdBQWExRyxFQUFZa0IsR0FDNUUsSUFBSyxlQUlELE9BSEk4RixFQUFvQixJQUFHQSxFQUFvQi9JLEVBQU9FLE9BQVM2SSxHQUMzREMsRUFBZ0IsSUFBR0EsRUFBZ0JoSixFQUFPK0ksR0FBbUI3SSxPQUFTOEksR0FDdEVQLEVBQWEsSUFBR0EsRUFBYXpJLEVBQU8rSSxHQUFtQkMsR0FBZTlJLE9BQVN1SSxHQUM1RVYsRUFBUTNFLE1BQU1wRCxFQUFPK0ksR0FBbUJDLEdBQWVQLEdBQWExRyxFQUFZa0IsR0FFM0YsTUFBTSxJQUFJSixNQUFNLHdCLDRCQ3RsQ3BCLElBQUl5SSxFQUFXLEVBQVEsTUFDbkJDLEVBQWMsRUFBUSxLQUN0QkMsRUFBWSxFQUFRLE1BMkN4QnZLLEVBQVEsRUFaUixTQUFld0ssRUFBVUMsRUFBVXpJLFFBQ2YsSUFBWkEsSUFBc0JBLEVBQVUsSUFDcEMsSUFBSTBJLEVBQVVKLEVBQVlLLFFBQVFILEdBQVVsSyxZQUN4Q3NLLEVBQVVOLEVBQVlLLFFBQVFGLEdBQVVuSyxZQUN4Q3VLLEVBQVVSLEVBQVNTLE1BQU1KLEVBQVNFLEdBQ3RDLE9BQXVCLElBQW5CQyxFQUFRNUwsT0FDRCxLQUNZLElBQW5CNEwsRUFBUTVMLE9BQ0RzTCxFQUFVbkksUUFBUXlJLEVBQVEsR0FBSTdJLEVBQVFsQixZQUV0Q3lKLEVBQVV6SCxhQUFhK0gsRUFBUzdJLEVBQVFsQixjLDJCQzVDdkRKLE9BQU9nRCxlQUFlMUQsRUFBUyxhQUFjLENBQUVHLE9BQU8sSUFDdEQsSUFBSW9LLEVBQVksRUFBUSxNQThCeEJ2SyxFQUFRK0ssU0FqQlIsU0FBa0JwSixHQUNkLElBQUtBLEVBQ0QsTUFBTSxJQUFJQyxNQUFNLHFCQUVwQixJQUFLVixNQUFNQyxRQUFRUSxHQUFRLENBQ3ZCLEdBQW1CLFlBQWZBLEVBQU10QixNQUF5QyxPQUFuQnNCLEVBQU1YLFVBQTZDLFVBQXhCVyxFQUFNWCxTQUFTWCxLQUN0RSxPQUFPc0IsRUFBTVgsU0FBU1YsWUFFMUIsR0FBbUIsVUFBZnFCLEVBQU10QixLQUNOLE9BQU9zQixFQUFNckIsWUFHckIsR0FBSVksTUFBTUMsUUFBUVEsSUFBVUEsRUFBTTFDLFFBQVUsSUFBTWlDLE1BQU1DLFFBQVFRLEVBQU0sTUFBUVQsTUFBTUMsUUFBUVEsRUFBTSxJQUM5RixPQUFPQSxFQUVYLE1BQU0sSUFBSUMsTUFBTSx1REFpQ3BCNUIsRUFBUWdMLFVBbEJSLFNBQW1Cak0sR0FDZixHQUFJbUMsTUFBTUMsUUFBUXBDLEdBQ2QsT0FBT0EsRUFHWCxHQUFvQixZQUFoQkEsRUFBT3NCLE1BQ1AsR0FBd0IsT0FBcEJ0QixFQUFPaUMsU0FDUCxPQUFPakMsRUFBT2lDLFNBQVNWLGlCQUszQixHQUFJdkIsRUFBT3VCLFlBQ1AsT0FBT3ZCLEVBQU91QixZQUd0QixNQUFNLElBQUlzQixNQUFNLGdFQW1CcEI1QixFQUFRaUwsZUFUUixTQUFTQSxFQUFlM0ssR0FDcEIsR0FBSUEsRUFBWXJCLE9BQVMsR0FBS3NMLEVBQVVoSCxTQUFTakQsRUFBWSxLQUFPaUssRUFBVWhILFNBQVNqRCxFQUFZLElBQy9GLE9BQU8sRUFFWCxHQUFJWSxNQUFNQyxRQUFRYixFQUFZLEtBQU9BLEVBQVksR0FBR3JCLE9BQ2hELE9BQU9nTSxFQUFlM0ssRUFBWSxJQUV0QyxNQUFNLElBQUlzQixNQUFNLDBDQW9CcEI1QixFQUFRa0wsWUFSUixTQUFxQi9LLEVBQU9FLEVBQU04SyxHQUM5QixJQUFLOUssSUFBUzhLLEVBQ1YsTUFBTSxJQUFJdkosTUFBTSwwQkFFcEIsSUFBS3pCLEdBQVNBLEVBQU1FLE9BQVNBLEVBQ3pCLE1BQU0sSUFBSXVCLE1BQU0sb0JBQXNCdUosRUFBTyxlQUFpQjlLLEVBQU8sV0FBYUYsRUFBTUUsT0E0QmhHTCxFQUFRb0wsVUFkUixTQUFtQnRKLEVBQVN6QixFQUFNOEssR0FDOUIsSUFBS3JKLEVBQ0QsTUFBTSxJQUFJRixNQUFNLHFCQUVwQixJQUFLdUosRUFDRCxNQUFNLElBQUl2SixNQUFNLGdDQUVwQixJQUFLRSxHQUE0QixZQUFqQkEsRUFBUXpCLE9BQXVCeUIsRUFBUWQsU0FDbkQsTUFBTSxJQUFJWSxNQUFNLG9CQUFzQnVKLEVBQU8sb0NBRWpELElBQUtySixFQUFRZCxVQUFZYyxFQUFRZCxTQUFTWCxPQUFTQSxFQUMvQyxNQUFNLElBQUl1QixNQUFNLG9CQUFzQnVKLEVBQU8sZUFBaUI5SyxFQUFPLFdBQWF5QixFQUFRZCxTQUFTWCxPQWtDM0dMLEVBQVFxTCxhQXBCUixTQUFzQjNJLEVBQW1CckMsRUFBTThLLEdBQzNDLElBQUt6SSxFQUNELE1BQU0sSUFBSWQsTUFBTSwrQkFFcEIsSUFBS3VKLEVBQ0QsTUFBTSxJQUFJdkosTUFBTSxtQ0FFcEIsSUFBS2MsR0FBZ0Qsc0JBQTNCQSxFQUFrQnJDLEtBQ3hDLE1BQU0sSUFBSXVCLE1BQU0sb0JBQXNCdUosRUFBTyxnQ0FFakQsSUFBSyxJQUFJOUksRUFBSyxFQUFHaUosRUFBSzVJLEVBQWtCYixTQUFVUSxFQUFLaUosRUFBR3JNLE9BQVFvRCxJQUFNLENBQ3BFLElBQUlQLEVBQVV3SixFQUFHakosR0FDakIsSUFBS1AsR0FBNEIsWUFBakJBLEVBQVF6QixPQUF1QnlCLEVBQVFkLFNBQ25ELE1BQU0sSUFBSVksTUFBTSxvQkFBc0J1SixFQUFPLG9DQUVqRCxJQUFLckosRUFBUWQsVUFBWWMsRUFBUWQsU0FBU1gsT0FBU0EsRUFDL0MsTUFBTSxJQUFJdUIsTUFBTSxvQkFBc0J1SixFQUFPLGVBQWlCOUssRUFBTyxXQUFheUIsRUFBUWQsU0FBU1gsUUE2Qi9HTCxFQUFRMkssUUFOUixTQUFpQjFLLEdBQ2IsTUFBcUIsWUFBakJBLEVBQVFJLEtBQ0RKLEVBQVFlLFNBRVpmLEdBaUNYRCxFQUFRdUwsUUFaUixTQUFpQnRMLEVBQVNrTCxHQUN0QixNQUFxQixzQkFBakJsTCxFQUFRSSxLQUNELG9CQUVVLHVCQUFqQkosRUFBUUksS0FDRCxxQkFFVSxZQUFqQkosRUFBUUksTUFBMkMsT0FBckJKLEVBQVFlLFNBQy9CZixFQUFRZSxTQUFTWCxLQUVyQkosRUFBUUksTyw0QkN4TW5CLEdBTkEsRUFBUSxNQUVSLEVBQVEsTUFFUixFQUFRLE1BRUosRUFBQW1CLEVBQU9nSyxlQUNULE1BQU0sSUFBSTVKLE1BQU0sa0RBS2xCLFNBQVM2SixFQUFPQyxFQUFHN0ssRUFBS1YsR0FDdEJ1TCxFQUFFN0ssSUFBUUgsT0FBc0IsZUFBRWdMLEVBQUc3SyxFQUFLLENBQ3hDOEssVUFBVSxFQUNWQyxjQUFjLEVBQ2R6TCxNQUFPQSxJQVBYLEVBQUFxQixFQUFPZ0ssZ0JBQWlCLEVBV3hCQyxFQUFPSSxPQUFPQyxVQUFXLFVBQVcsR0FBR0MsVUFDdkNOLEVBQU9JLE9BQU9DLFVBQVcsV0FBWSxHQUFHRSxRQUV4QyxnTUFBZ01DLE1BQU0sS0FBS3JMLFNBQVEsU0FBVUMsR0FDM04sR0FBR0EsSUFBUTRLLEVBQU92SyxNQUFPTCxFQUFLcUwsU0FBU0MsS0FBS0MsS0FBSyxHQUFHdkwsUyxzQkNoQnJELFNBQVV3TCxHQUNULGFBRUEsSUFFSTlELEVBRkErRCxFQUFLNUwsT0FBT29MLFVBQ1pTLEVBQVNELEVBQUdFLGVBRVpDLEVBQTRCLG1CQUFYQyxPQUF3QkEsT0FBUyxHQUNsREMsRUFBaUJGLEVBQVFHLFVBQVksYUFDckNDLEVBQXNCSixFQUFRSyxlQUFpQixrQkFDL0NDLEVBQW9CTixFQUFRTyxhQUFlLGdCQUczQ0MsRUFBVVosRUFBT2EsbUJBQ3JCLEdBQUlELEVBSUFFLEVBQU9uTixRQUFVaU4sTUFKckIsRUFhQUEsRUFBVVosRUFBT2EsbUJBQWdDQyxFQUFPbk4sU0FjaERvTixLQUFPQSxFQW9CZixJQUFJQyxFQUF5QixpQkFDekJDLEVBQXlCLGlCQUN6QkMsRUFBb0IsWUFDcEJDLEVBQW9CLFlBSXBCQyxFQUFtQixHQVluQkMsRUFBb0IsR0FDeEJBLEVBQWtCZixHQUFrQixXQUNsQyxPQUFPZ0IsTUFHVCxJQUFJQyxFQUFXbE4sT0FBT21OLGVBQ2xCQyxFQUEwQkYsR0FBWUEsRUFBU0EsRUFBU0csRUFBTyxNQUMvREQsR0FDQUEsSUFBNEJ4QixHQUM1QkMsRUFBT0osS0FBSzJCLEVBQXlCbkIsS0FHdkNlLEVBQW9CSSxHQUd0QixJQUFJRSxFQUFLQyxFQUEyQm5DLFVBQ2xDb0MsRUFBVXBDLFVBQVlwTCxPQUFPeU4sT0FBT1QsR0FDdENVLEVBQWtCdEMsVUFBWWtDLEVBQUc3SCxZQUFjOEgsRUFDL0NBLEVBQTJCOUgsWUFBY2lJLEVBQ3pDSCxFQUEyQmxCLEdBQ3pCcUIsRUFBa0JDLFlBQWMsb0JBWWxDcEIsRUFBUXFCLG9CQUFzQixTQUFTQyxHQUNyQyxJQUFJQyxFQUF5QixtQkFBWEQsR0FBeUJBLEVBQU9wSSxZQUNsRCxRQUFPcUksSUFDSEEsSUFBU0osR0FHMkIsdUJBQW5DSSxFQUFLSCxhQUFlRyxFQUFLckQsUUFJaEM4QixFQUFRd0IsS0FBTyxTQUFTRixHQVV0QixPQVRJN04sT0FBT2dPLGVBQ1RoTyxPQUFPZ08sZUFBZUgsRUFBUU4sSUFFOUJNLEVBQU9JLFVBQVlWLEVBQ2JsQixLQUFxQndCLElBQ3pCQSxFQUFPeEIsR0FBcUIsc0JBR2hDd0IsRUFBT3pDLFVBQVlwTCxPQUFPeU4sT0FBT0gsR0FDMUJPLEdBT1R0QixFQUFRMkIsTUFBUSxTQUFTQyxHQUN2QixNQUFPLENBQUVDLFFBQVNELElBa0ZwQkUsRUFBc0JDLEVBQWNsRCxXQUNwQ2tELEVBQWNsRCxVQUFVZSxHQUF1QixXQUM3QyxPQUFPYyxNQUVUVixFQUFRK0IsY0FBZ0JBLEVBS3hCL0IsRUFBUWdDLE1BQVEsU0FBU0MsRUFBU0MsRUFBU0MsRUFBTUMsR0FDL0MsSUFBSUMsRUFBTyxJQUFJTixFQUNiNUIsRUFBSzhCLEVBQVNDLEVBQVNDLEVBQU1DLElBRy9CLE9BQU9wQyxFQUFRcUIsb0JBQW9CYSxHQUMvQkcsRUFDQUEsRUFBS0MsT0FBT0MsTUFBSyxTQUFTQyxHQUN4QixPQUFPQSxFQUFPQyxLQUFPRCxFQUFPdFAsTUFBUW1QLEVBQUtDLFdBc0tqRFIsRUFBc0JmLEdBRXRCQSxFQUFHakIsR0FBcUIsWUFPeEJpQixFQUFHckIsR0FBa0IsV0FDbkIsT0FBT2dCLE1BR1RLLEVBQUcyQixTQUFXLFdBQ1osTUFBTyxzQkFrQ1QxQyxFQUFRdE0sS0FBTyxTQUFTaVAsR0FDdEIsSUFBSWpQLEVBQU8sR0FDWCxJQUFLLElBQUlFLEtBQU8rTyxFQUNkalAsRUFBS2lKLEtBQUsvSSxHQU1aLE9BSkFGLEVBQUtrUCxVQUlFLFNBQVNOLElBQ2QsS0FBTzVPLEVBQUsxQixRQUFRLENBQ2xCLElBQUk0QixFQUFNRixFQUFLbVAsTUFDZixHQUFJalAsS0FBTytPLEVBR1QsT0FGQUwsRUFBS3BQLE1BQVFVLEVBQ2IwTyxFQUFLRyxNQUFPLEVBQ0xILEVBUVgsT0FEQUEsRUFBS0csTUFBTyxFQUNMSCxJQXNDWHRDLEVBQVFjLE9BQVNBLEVBTWpCZ0MsRUFBUWpFLFVBQVksQ0FDbEIzRixZQUFhNEosRUFFYkMsTUFBTyxTQUFTQyxHQWNkLEdBYkF0QyxLQUFLdUMsS0FBTyxFQUNadkMsS0FBSzRCLEtBQU8sRUFHWjVCLEtBQUt3QyxLQUFPeEMsS0FBS3lDLE1BQVE3SCxFQUN6Qm9GLEtBQUsrQixNQUFPLEVBQ1ovQixLQUFLMEMsU0FBVyxLQUVoQjFDLEtBQUsyQyxPQUFTLE9BQ2QzQyxLQUFLa0IsSUFBTXRHLEVBRVhvRixLQUFLNEMsV0FBVzNQLFFBQVE0UCxJQUVuQlAsRUFDSCxJQUFLLElBQUk5RSxLQUFRd0MsS0FFUSxNQUFuQnhDLEVBQUtzRixPQUFPLElBQ1psRSxFQUFPSixLQUFLd0IsS0FBTXhDLEtBQ2pCM0gsT0FBTzJILEVBQUt6SixNQUFNLE1BQ3JCaU0sS0FBS3hDLEdBQVE1QyxJQU1yQlosS0FBTSxXQUNKZ0csS0FBSytCLE1BQU8sRUFFWixJQUNJZ0IsRUFEWS9DLEtBQUs0QyxXQUFXLEdBQ0xJLFdBQzNCLEdBQXdCLFVBQXBCRCxFQUFXclEsS0FDYixNQUFNcVEsRUFBVzdCLElBR25CLE9BQU9sQixLQUFLaUQsTUFHZEMsa0JBQW1CLFNBQVNDLEdBQzFCLEdBQUluRCxLQUFLK0IsS0FDUCxNQUFNb0IsRUFHUixJQUFJQyxFQUFVcEQsS0FDZCxTQUFTcUQsRUFBT0MsRUFBS0MsR0FZbkIsT0FYQUMsRUFBTzlRLEtBQU8sUUFDZDhRLEVBQU90QyxJQUFNaUMsRUFDYkMsRUFBUXhCLEtBQU8wQixFQUVYQyxJQUdGSCxFQUFRVCxPQUFTLE9BQ2pCUyxFQUFRbEMsSUFBTXRHLEtBR04ySSxFQUdaLElBQUssSUFBSTdSLEVBQUlzTyxLQUFLNEMsV0FBV3RSLE9BQVMsRUFBR0ksR0FBSyxJQUFLQSxFQUFHLENBQ3BELElBQUkrUixFQUFRekQsS0FBSzRDLFdBQVdsUixHQUN4QjhSLEVBQVNDLEVBQU1ULFdBRW5CLEdBQXFCLFNBQWpCUyxFQUFNQyxPQUlSLE9BQU9MLEVBQU8sT0FHaEIsR0FBSUksRUFBTUMsUUFBVTFELEtBQUt1QyxLQUFNLENBQzdCLElBQUlvQixFQUFXL0UsRUFBT0osS0FBS2lGLEVBQU8sWUFDOUJHLEVBQWFoRixFQUFPSixLQUFLaUYsRUFBTyxjQUVwQyxHQUFJRSxHQUFZQyxFQUFZLENBQzFCLEdBQUk1RCxLQUFLdUMsS0FBT2tCLEVBQU1JLFNBQ3BCLE9BQU9SLEVBQU9JLEVBQU1JLFVBQVUsR0FDekIsR0FBSTdELEtBQUt1QyxLQUFPa0IsRUFBTUssV0FDM0IsT0FBT1QsRUFBT0ksRUFBTUssaUJBR2pCLEdBQUlILEdBQ1QsR0FBSTNELEtBQUt1QyxLQUFPa0IsRUFBTUksU0FDcEIsT0FBT1IsRUFBT0ksRUFBTUksVUFBVSxPQUczQixLQUFJRCxFQU1ULE1BQU0sSUFBSTNQLE1BQU0sMENBTGhCLEdBQUkrTCxLQUFLdUMsS0FBT2tCLEVBQU1LLFdBQ3BCLE9BQU9ULEVBQU9JLEVBQU1LLGdCQVU5QkMsT0FBUSxTQUFTclIsRUFBTXdPLEdBQ3JCLElBQUssSUFBSXhQLEVBQUlzTyxLQUFLNEMsV0FBV3RSLE9BQVMsRUFBR0ksR0FBSyxJQUFLQSxFQUFHLENBQ3BELElBQUkrUixFQUFRekQsS0FBSzRDLFdBQVdsUixHQUM1QixHQUFJK1IsRUFBTUMsUUFBVTFELEtBQUt1QyxNQUNyQjNELEVBQU9KLEtBQUtpRixFQUFPLGVBQ25CekQsS0FBS3VDLEtBQU9rQixFQUFNSyxXQUFZLENBQ2hDLElBQUlFLEVBQWVQLEVBQ25CLE9BSUFPLElBQ1UsVUFBVHRSLEdBQ1MsYUFBVEEsSUFDRHNSLEVBQWFOLFFBQVV4QyxHQUN2QkEsR0FBTzhDLEVBQWFGLGFBR3RCRSxFQUFlLE1BR2pCLElBQUlSLEVBQVNRLEVBQWVBLEVBQWFoQixXQUFhLEdBSXRELE9BSEFRLEVBQU85USxLQUFPQSxFQUNkOFEsRUFBT3RDLElBQU1BLEVBRVQ4QyxHQUNGaEUsS0FBSzJDLE9BQVMsT0FDZDNDLEtBQUs0QixLQUFPb0MsRUFBYUYsV0FDbEJoRSxHQUdGRSxLQUFLaUUsU0FBU1QsSUFHdkJTLFNBQVUsU0FBU1QsRUFBUVUsR0FDekIsR0FBb0IsVUFBaEJWLEVBQU85USxLQUNULE1BQU04USxFQUFPdEMsSUFjZixNQVhvQixVQUFoQnNDLEVBQU85USxNQUNTLGFBQWhCOFEsRUFBTzlRLEtBQ1RzTixLQUFLNEIsS0FBTzRCLEVBQU90QyxJQUNNLFdBQWhCc0MsRUFBTzlRLE1BQ2hCc04sS0FBS2lELEtBQU9qRCxLQUFLa0IsSUFBTXNDLEVBQU90QyxJQUM5QmxCLEtBQUsyQyxPQUFTLFNBQ2QzQyxLQUFLNEIsS0FBTyxPQUNhLFdBQWhCNEIsRUFBTzlRLE1BQXFCd1IsSUFDckNsRSxLQUFLNEIsS0FBT3NDLEdBR1BwRSxHQUdUcUUsT0FBUSxTQUFTTCxHQUNmLElBQUssSUFBSXBTLEVBQUlzTyxLQUFLNEMsV0FBV3RSLE9BQVMsRUFBR0ksR0FBSyxJQUFLQSxFQUFHLENBQ3BELElBQUkrUixFQUFRekQsS0FBSzRDLFdBQVdsUixHQUM1QixHQUFJK1IsRUFBTUssYUFBZUEsRUFHdkIsT0FGQTlELEtBQUtpRSxTQUFTUixFQUFNVCxXQUFZUyxFQUFNUyxVQUN0Q3JCLEVBQWNZLEdBQ1AzRCxJQUtiLE1BQVMsU0FBUzRELEdBQ2hCLElBQUssSUFBSWhTLEVBQUlzTyxLQUFLNEMsV0FBV3RSLE9BQVMsRUFBR0ksR0FBSyxJQUFLQSxFQUFHLENBQ3BELElBQUkrUixFQUFRekQsS0FBSzRDLFdBQVdsUixHQUM1QixHQUFJK1IsRUFBTUMsU0FBV0EsRUFBUSxDQUMzQixJQUFJRixFQUFTQyxFQUFNVCxXQUNuQixHQUFvQixVQUFoQlEsRUFBTzlRLEtBQWtCLENBQzNCLElBQUkwUixFQUFTWixFQUFPdEMsSUFDcEIyQixFQUFjWSxHQUVoQixPQUFPVyxHQU1YLE1BQU0sSUFBSW5RLE1BQU0sMEJBR2xCb1EsY0FBZSxTQUFTQyxFQUFVQyxFQUFZQyxHQWE1QyxPQVpBeEUsS0FBSzBDLFNBQVcsQ0FDZHpELFNBQVVtQixFQUFPa0UsR0FDakJDLFdBQVlBLEVBQ1pDLFFBQVNBLEdBR1MsU0FBaEJ4RSxLQUFLMkMsU0FHUDNDLEtBQUtrQixJQUFNdEcsR0FHTmtGLElBL3FCWCxTQUFTTCxFQUFLOEIsRUFBU0MsRUFBU0MsRUFBTUMsR0FFcEMsSUFBSStDLEVBQWlCakQsR0FBV0EsRUFBUXJELHFCQUFxQm9DLEVBQVlpQixFQUFVakIsRUFDL0VtRSxFQUFZM1IsT0FBT3lOLE9BQU9pRSxFQUFldEcsV0FDekNpRixFQUFVLElBQUloQixFQUFRVixHQUFlLElBTXpDLE9BRkFnRCxFQUFVQyxRQThNWixTQUEwQnBELEVBQVNFLEVBQU0yQixHQUN2QyxJQUFJd0IsRUFBUWxGLEVBRVosT0FBTyxTQUFnQmlELEVBQVF6QixHQUM3QixHQUFJMEQsSUFBVWhGLEVBQ1osTUFBTSxJQUFJM0wsTUFBTSxnQ0FHbEIsR0FBSTJRLElBQVUvRSxFQUFtQixDQUMvQixHQUFlLFVBQVg4QyxFQUNGLE1BQU16QixFQUtSLE9BQU8yRCxJQU1ULElBSEF6QixFQUFRVCxPQUFTQSxFQUNqQlMsRUFBUWxDLElBQU1BLElBRUQsQ0FDWCxJQUFJd0IsRUFBV1UsRUFBUVYsU0FDdkIsR0FBSUEsRUFBVSxDQUNaLElBQUlvQyxFQUFpQkMsRUFBb0JyQyxFQUFVVSxHQUNuRCxHQUFJMEIsRUFBZ0IsQ0FDbEIsR0FBSUEsSUFBbUJoRixFQUFrQixTQUN6QyxPQUFPZ0YsR0FJWCxHQUF1QixTQUFuQjFCLEVBQVFULE9BR1ZTLEVBQVFaLEtBQU9ZLEVBQVFYLE1BQVFXLEVBQVFsQyxTQUVsQyxHQUF1QixVQUFuQmtDLEVBQVFULE9BQW9CLENBQ3JDLEdBQUlpQyxJQUFVbEYsRUFFWixNQURBa0YsRUFBUS9FLEVBQ0Z1RCxFQUFRbEMsSUFHaEJrQyxFQUFRRixrQkFBa0JFLEVBQVFsQyxTQUVOLFdBQW5Ca0MsRUFBUVQsUUFDakJTLEVBQVFXLE9BQU8sU0FBVVgsRUFBUWxDLEtBR25DMEQsRUFBUWhGLEVBRVIsSUFBSTRELEVBQVN3QixFQUFTekQsRUFBU0UsRUFBTTJCLEdBQ3JDLEdBQW9CLFdBQWhCSSxFQUFPOVEsS0FBbUIsQ0FPNUIsR0FKQWtTLEVBQVF4QixFQUFRckIsS0FDWmxDLEVBQ0FGLEVBRUE2RCxFQUFPdEMsTUFBUXBCLEVBQ2pCLFNBR0YsTUFBTyxDQUNMdE4sTUFBT2dSLEVBQU90QyxJQUNkYSxLQUFNcUIsRUFBUXJCLE1BR1MsVUFBaEJ5QixFQUFPOVEsT0FDaEJrUyxFQUFRL0UsRUFHUnVELEVBQVFULE9BQVMsUUFDakJTLEVBQVFsQyxJQUFNc0MsRUFBT3RDLE9BdFJQK0QsQ0FBaUIxRCxFQUFTRSxFQUFNMkIsR0FFN0NzQixFQWNULFNBQVNNLEVBQVNFLEVBQUlDLEVBQUtqRSxHQUN6QixJQUNFLE1BQU8sQ0FBRXhPLEtBQU0sU0FBVXdPLElBQUtnRSxFQUFHMUcsS0FBSzJHLEVBQUtqRSxJQUMzQyxNQUFPa0UsR0FDUCxNQUFPLENBQUUxUyxLQUFNLFFBQVN3TyxJQUFLa0UsSUFpQmpDLFNBQVM3RSxLQUNULFNBQVNFLEtBQ1QsU0FBU0gsS0E0QlQsU0FBU2MsRUFBc0JqRCxHQUM3QixDQUFDLE9BQVEsUUFBUyxVQUFVbEwsU0FBUSxTQUFTMFAsR0FDM0N4RSxFQUFVd0UsR0FBVSxTQUFTekIsR0FDM0IsT0FBT2xCLEtBQUsyRSxRQUFRaEMsRUFBUXpCLE9Bb0NsQyxTQUFTRyxFQUFjcUQsR0FDckIsU0FBU1csRUFBTzFDLEVBQVF6QixFQUFLb0UsRUFBU0MsR0FDcEMsSUFBSS9CLEVBQVN3QixFQUFTTixFQUFVL0IsR0FBUytCLEVBQVd4RCxHQUNwRCxHQUFvQixVQUFoQnNDLEVBQU85USxLQUVKLENBQ0wsSUFBSW9QLEVBQVMwQixFQUFPdEMsSUFDaEIxTyxFQUFRc1AsRUFBT3RQLE1BQ25CLE9BQUlBLEdBQ2lCLGlCQUFWQSxHQUNQb00sRUFBT0osS0FBS2hNLEVBQU8sV0FDZGdULFFBQVFGLFFBQVE5UyxFQUFNMk8sU0FBU1UsTUFBSyxTQUFTclAsR0FDbEQ2UyxFQUFPLE9BQVE3UyxFQUFPOFMsRUFBU0MsTUFDOUIsU0FBU0gsR0FDVkMsRUFBTyxRQUFTRCxFQUFLRSxFQUFTQyxNQUkzQkMsUUFBUUYsUUFBUTlTLEdBQU9xUCxNQUFLLFNBQVM0RCxHQWdCMUMzRCxFQUFPdFAsTUFBUWlULEVBQ2ZILEVBQVF4RCxLQUNQeUQsR0FoQ0hBLEVBQU8vQixFQUFPdEMsS0F3Q2xCLElBQUl3RSxFQUowQixpQkFBbkJoSCxFQUFPaUgsU0FBd0JqSCxFQUFPaUgsUUFBUUMsU0FDdkRQLEVBQVMzRyxFQUFPaUgsUUFBUUMsT0FBT25ILEtBQUs0RyxJQW1DdENyRixLQUFLMkUsUUE5QkwsU0FBaUJoQyxFQUFRekIsR0FDdkIsU0FBUzJFLElBQ1AsT0FBTyxJQUFJTCxTQUFRLFNBQVNGLEVBQVNDLEdBQ25DRixFQUFPMUMsRUFBUXpCLEVBQUtvRSxFQUFTQyxNQUlqQyxPQUFPRyxFQWFMQSxFQUFrQkEsRUFBZ0I3RCxLQUNoQ2dFLEVBR0FBLEdBQ0VBLEtBK0dWLFNBQVNkLEVBQW9CckMsRUFBVVUsR0FDckMsSUFBSVQsRUFBU0QsRUFBU3pELFNBQVNtRSxFQUFRVCxRQUN2QyxHQUFJQSxJQUFXL0gsRUFBVyxDQUt4QixHQUZBd0ksRUFBUVYsU0FBVyxLQUVJLFVBQW5CVSxFQUFRVCxPQUFvQixDQUM5QixHQUFJRCxFQUFTekQsU0FBUzZHLFNBR3BCMUMsRUFBUVQsT0FBUyxTQUNqQlMsRUFBUWxDLElBQU10RyxFQUNkbUssRUFBb0JyQyxFQUFVVSxHQUVQLFVBQW5CQSxFQUFRVCxRQUdWLE9BQU83QyxFQUlYc0QsRUFBUVQsT0FBUyxRQUNqQlMsRUFBUWxDLElBQU0sSUFBSTZFLFVBQ2hCLGtEQUdKLE9BQU9qRyxFQUdULElBQUkwRCxFQUFTd0IsRUFBU3JDLEVBQVFELEVBQVN6RCxTQUFVbUUsRUFBUWxDLEtBRXpELEdBQW9CLFVBQWhCc0MsRUFBTzlRLEtBSVQsT0FIQTBRLEVBQVFULE9BQVMsUUFDakJTLEVBQVFsQyxJQUFNc0MsRUFBT3RDLElBQ3JCa0MsRUFBUVYsU0FBVyxLQUNaNUMsRUFHVCxJQUFJa0csRUFBT3hDLEVBQU90QyxJQUVsQixPQUFNOEUsRUFPRkEsRUFBS2pFLE1BR1BxQixFQUFRVixFQUFTNkIsWUFBY3lCLEVBQUt4VCxNQUdwQzRRLEVBQVF4QixLQUFPYyxFQUFTOEIsUUFRRCxXQUFuQnBCLEVBQVFULFNBQ1ZTLEVBQVFULE9BQVMsT0FDakJTLEVBQVFsQyxJQUFNdEcsR0FVbEJ3SSxFQUFRVixTQUFXLEtBQ1o1QyxHQU5Fa0csR0EzQlA1QyxFQUFRVCxPQUFTLFFBQ2pCUyxFQUFRbEMsSUFBTSxJQUFJNkUsVUFBVSxvQ0FDNUIzQyxFQUFRVixTQUFXLEtBQ1o1QyxHQW9EWCxTQUFTbUcsRUFBYUMsR0FDcEIsSUFBSXpDLEVBQVEsQ0FBRUMsT0FBUXdDLEVBQUssSUFFdkIsS0FBS0EsSUFDUHpDLEVBQU1JLFNBQVdxQyxFQUFLLElBR3BCLEtBQUtBLElBQ1B6QyxFQUFNSyxXQUFhb0MsRUFBSyxHQUN4QnpDLEVBQU1TLFNBQVdnQyxFQUFLLElBR3hCbEcsS0FBSzRDLFdBQVczRyxLQUFLd0gsR0FHdkIsU0FBU1osRUFBY1ksR0FDckIsSUFBSUQsRUFBU0MsRUFBTVQsWUFBYyxHQUNqQ1EsRUFBTzlRLEtBQU8sZ0JBQ1A4USxFQUFPdEMsSUFDZHVDLEVBQU1ULFdBQWFRLEVBR3JCLFNBQVNwQixFQUFRVixHQUlmMUIsS0FBSzRDLFdBQWEsQ0FBQyxDQUFFYyxPQUFRLFNBQzdCaEMsRUFBWXpPLFFBQVFnVCxFQUFjakcsTUFDbENBLEtBQUtxQyxPQUFNLEdBOEJiLFNBQVNqQyxFQUFPa0UsR0FDZCxHQUFJQSxFQUFVLENBQ1osSUFBSTZCLEVBQWlCN0IsRUFBU3RGLEdBQzlCLEdBQUltSCxFQUNGLE9BQU9BLEVBQWUzSCxLQUFLOEYsR0FHN0IsR0FBNkIsbUJBQWxCQSxFQUFTMUMsS0FDbEIsT0FBTzBDLEVBR1QsSUFBS3pPLE1BQU15TyxFQUFTaFQsUUFBUyxDQUMzQixJQUFJSSxHQUFLLEVBQUdrUSxFQUFPLFNBQVNBLElBQzFCLE9BQVNsUSxFQUFJNFMsRUFBU2hULFFBQ3BCLEdBQUlzTixFQUFPSixLQUFLOEYsRUFBVTVTLEdBR3hCLE9BRkFrUSxFQUFLcFAsTUFBUThSLEVBQVM1UyxHQUN0QmtRLEVBQUtHLE1BQU8sRUFDTEgsRUFPWCxPQUhBQSxFQUFLcFAsTUFBUW9JLEVBQ2JnSCxFQUFLRyxNQUFPLEVBRUxILEdBR1QsT0FBT0EsRUFBS0EsS0FBT0EsR0FLdkIsTUFBTyxDQUFFQSxLQUFNaUQsR0FJakIsU0FBU0EsSUFDUCxNQUFPLENBQUVyUyxNQUFPb0ksRUFBV21ILE1BQU0sSUFwZ0JwQyxDQWt0Qm1CLGlCQUFYLEVBQUFsTyxFQUFzQixFQUFBQSxFQUNYLGlCQUFYdVMsT0FBc0JBLE9BQ2IsaUJBQVQzRSxLQUFvQkEsS0FBT3pCLE8sMEJDNXRCcEMzTixFQUFRZ1UsV0F1Q1IsU0FBcUJDLEdBQ25CLElBQUlDLEVBQU9DLEVBQVFGLEdBQ2ZHLEVBQVdGLEVBQUssR0FDaEJHLEVBQWtCSCxFQUFLLEdBQzNCLE9BQXVDLEdBQTlCRSxFQUFXQyxHQUF1QixFQUFLQSxHQTFDbERyVSxFQUFRc1UsWUFpRFIsU0FBc0JMLEdBQ3BCLElBQUlNLEVBY0FsVixFQWJBNlUsRUFBT0MsRUFBUUYsR0FDZkcsRUFBV0YsRUFBSyxHQUNoQkcsRUFBa0JILEVBQUssR0FFdkJNLEVBQU0sSUFBSUMsRUFWaEIsU0FBc0JSLEVBQUtHLEVBQVVDLEdBQ25DLE9BQXVDLEdBQTlCRCxFQUFXQyxHQUF1QixFQUFLQSxFQVM5QkssQ0FBWVQsRUFBS0csRUFBVUMsSUFFekNNLEVBQVUsRUFHVkMsRUFBTVAsRUFBa0IsRUFDeEJELEVBQVcsRUFDWEEsRUFHSixJQUFLL1UsRUFBSSxFQUFHQSxFQUFJdVYsRUFBS3ZWLEdBQUssRUFDeEJrVixFQUNHTSxFQUFVWixFQUFJYSxXQUFXelYsS0FBTyxHQUNoQ3dWLEVBQVVaLEVBQUlhLFdBQVd6VixFQUFJLEtBQU8sR0FDcEN3VixFQUFVWixFQUFJYSxXQUFXelYsRUFBSSxLQUFPLEVBQ3JDd1YsRUFBVVosRUFBSWEsV0FBV3pWLEVBQUksSUFDL0JtVixFQUFJRyxLQUFjSixHQUFPLEdBQU0sSUFDL0JDLEVBQUlHLEtBQWNKLEdBQU8sRUFBSyxJQUM5QkMsRUFBSUcsS0FBbUIsSUFBTkosRUFtQm5CLE9BaEJ3QixJQUFwQkYsSUFDRkUsRUFDR00sRUFBVVosRUFBSWEsV0FBV3pWLEtBQU8sRUFDaEN3VixFQUFVWixFQUFJYSxXQUFXelYsRUFBSSxLQUFPLEVBQ3ZDbVYsRUFBSUcsS0FBbUIsSUFBTkosR0FHSyxJQUFwQkYsSUFDRkUsRUFDR00sRUFBVVosRUFBSWEsV0FBV3pWLEtBQU8sR0FDaEN3VixFQUFVWixFQUFJYSxXQUFXelYsRUFBSSxLQUFPLEVBQ3BDd1YsRUFBVVosRUFBSWEsV0FBV3pWLEVBQUksS0FBTyxFQUN2Q21WLEVBQUlHLEtBQWNKLEdBQU8sRUFBSyxJQUM5QkMsRUFBSUcsS0FBbUIsSUFBTkosR0FHWkMsR0EzRlR4VSxFQUFRK1UsY0FrSFIsU0FBd0JDLEdBUXRCLElBUEEsSUFBSVQsRUFDQUssRUFBTUksRUFBTS9WLE9BQ1pnVyxFQUFhTCxFQUFNLEVBQ25CTSxFQUFRLEdBQ1JDLEVBQWlCLE1BR1o5VixFQUFJLEVBQUcrVixFQUFPUixFQUFNSyxFQUFZNVYsRUFBSStWLEVBQU0vVixHQUFLOFYsRUFDdERELEVBQU10TCxLQUFLeUwsRUFBWUwsRUFBTzNWLEVBQUlBLEVBQUk4VixFQUFrQkMsRUFBT0EsRUFBUS9WLEVBQUk4VixJQXFCN0UsT0FqQm1CLElBQWZGLEdBQ0ZWLEVBQU1TLEVBQU1KLEVBQU0sR0FDbEJNLEVBQU10TCxLQUNKMEwsRUFBT2YsR0FBTyxHQUNkZSxFQUFRZixHQUFPLEVBQUssSUFDcEIsT0FFc0IsSUFBZlUsSUFDVFYsR0FBT1MsRUFBTUosRUFBTSxJQUFNLEdBQUtJLEVBQU1KLEVBQU0sR0FDMUNNLEVBQU10TCxLQUNKMEwsRUFBT2YsR0FBTyxJQUNkZSxFQUFRZixHQUFPLEVBQUssSUFDcEJlLEVBQVFmLEdBQU8sRUFBSyxJQUNwQixNQUlHVyxFQUFNSyxLQUFLLEtBeklwQixJQUxBLElBQUlELEVBQVMsR0FDVFQsRUFBWSxHQUNaSixFQUE0QixvQkFBZmUsV0FBNkJBLFdBQWF0VSxNQUV2RHVVLEVBQU8sbUVBQ0ZwVyxFQUFJLEVBQUd1VixFQUFNYSxFQUFLeFcsT0FBUUksRUFBSXVWLElBQU92VixFQUM1Q2lXLEVBQU9qVyxHQUFLb1csRUFBS3BXLEdBQ2pCd1YsRUFBVVksRUFBS1gsV0FBV3pWLElBQU1BLEVBUWxDLFNBQVM4VSxFQUFTRixHQUNoQixJQUFJVyxFQUFNWCxFQUFJaFYsT0FFZCxHQUFJMlYsRUFBTSxFQUFJLEVBQ1osTUFBTSxJQUFJaFQsTUFBTSxrREFLbEIsSUFBSXdTLEVBQVdILEVBQUkzTixRQUFRLEtBTzNCLE9BTmtCLElBQWQ4TixJQUFpQkEsRUFBV1EsR0FNekIsQ0FBQ1IsRUFKY0EsSUFBYVEsRUFDL0IsRUFDQSxFQUFLUixFQUFXLEdBc0V0QixTQUFTaUIsRUFBYUwsRUFBT1UsRUFBT0MsR0FHbEMsSUFGQSxJQUFJcEIsRUFSb0J6VSxFQVNwQjhWLEVBQVMsR0FDSnZXLEVBQUlxVyxFQUFPclcsRUFBSXNXLEVBQUt0VyxHQUFLLEVBQ2hDa1YsR0FDSVMsRUFBTTNWLElBQU0sR0FBTSxXQUNsQjJWLEVBQU0zVixFQUFJLElBQU0sRUFBSyxRQUNQLElBQWYyVixFQUFNM1YsRUFBSSxJQUNidVcsRUFBT2hNLEtBZEYwTCxHQURpQnhWLEVBZU15VSxJQWRULEdBQUssSUFDeEJlLEVBQU94VixHQUFPLEdBQUssSUFDbkJ3VixFQUFPeFYsR0FBTyxFQUFJLElBQ2xCd1YsRUFBYSxHQUFOeFYsSUFhVCxPQUFPOFYsRUFBT0wsS0FBSyxJQWpHckJWLEVBQVUsSUFBSUMsV0FBVyxJQUFNLEdBQy9CRCxFQUFVLElBQUlDLFdBQVcsSUFBTSxJLDRCQ1QvQixJQUFJZSxFQUFTLEVBQVEsTUFDakJDLEVBQVUsRUFBUSxNQUV0QjlWLEVBQVErVixPQUFTQSxFQUNqQi9WLEVBQVFnVyxXQXlRUixTQUFxQi9XLEdBSW5CLE9BSEtBLEdBQVVBLElBQ2JBLEVBQVMsR0FFSjhXLEVBQU9FLE9BQU9oWCxJQTVRdkJlLEVBQVFrVyxrQkFBb0IsR0FFNUIsSUFBSUMsRUFBZSxXQXNDbkIsU0FBU0MsRUFBY25YLEdBQ3JCLEdBQUlBLEVBQVNrWCxFQUNYLE1BQU0sSUFBSUUsV0FBVyw4QkFHdkIsSUFBSUMsRUFBTSxJQUFJZCxXQUFXdlcsR0FFekIsT0FEQXFYLEVBQUkzSCxVQUFZb0gsRUFBT2pLLFVBQ2hCd0ssRUFhVCxTQUFTUCxFQUFRbEgsRUFBSzBILEVBQWtCdFgsR0FFdEMsR0FBbUIsaUJBQVI0UCxFQUFrQixDQUMzQixHQUFnQyxpQkFBckIwSCxFQUNULE1BQU0sSUFBSTNVLE1BQ1IscUVBR0osT0FBTzRVLEVBQVkzSCxHQUVyQixPQUFPNEgsRUFBSzVILEVBQUswSCxFQUFrQnRYLEdBZ0JyQyxTQUFTd1gsRUFBTXRXLEVBQU9vVyxFQUFrQnRYLEdBQ3RDLEdBQXFCLGlCQUFWa0IsRUFDVCxNQUFNLElBQUl1VCxVQUFVLHlDQUd0QixPQUFJZ0QsRUFBY3ZXLEdBK0dwQixTQUEwQndXLEVBQU9DLEVBQVkzWCxHQUMzQyxHQUFJMlgsRUFBYSxHQUFLRCxFQUFNM0MsV0FBYTRDLEVBQ3ZDLE1BQU0sSUFBSVAsV0FBVyw2QkFHdkIsR0FBSU0sRUFBTTNDLFdBQWE0QyxHQUFjM1gsR0FBVSxHQUM3QyxNQUFNLElBQUlvWCxXQUFXLDZCQUd2QixJQUFJQyxFQVdKLE9BVEVBLE9BRGlCL04sSUFBZnFPLFFBQXVDck8sSUFBWHRKLEVBQ3hCLElBQUl1VyxXQUFXbUIsUUFDRHBPLElBQVh0SixFQUNILElBQUl1VyxXQUFXbUIsRUFBT0MsR0FFdEIsSUFBSXBCLFdBQVdtQixFQUFPQyxFQUFZM1gsSUFJdEMwUCxVQUFZb0gsRUFBT2pLLFVBQ2hCd0ssRUFsSUVPLENBQWdCMVcsRUFBT29XLEVBQWtCdFgsR0FHN0IsaUJBQVZrQixFQTBFYixTQUFxQjJXLEVBQVFDLEdBSzNCLEdBSndCLGlCQUFiQSxHQUFzQyxLQUFiQSxJQUNsQ0EsRUFBVyxTQUdSaEIsRUFBT2lCLFdBQVdELEdBQ3JCLE1BQU0sSUFBSXJELFVBQVUsOENBR3RCLElBQUl6VSxFQUF3QyxFQUEvQitVLEVBQVc4QyxFQUFRQyxHQUM1QlQsRUFBTUYsRUFBYW5YLEdBRW5CZ1ksRUFBU1gsRUFBSVksTUFBTUosRUFBUUMsR0FTL0IsT0FQSUUsSUFBV2hZLElBSWJxWCxFQUFNQSxFQUFJNVUsTUFBTSxFQUFHdVYsSUFHZFgsRUE5RkVhLENBQVdoWCxFQUFPb1csR0FpSTdCLFNBQXFCekQsR0FDbkIsR0FBSWlELEVBQU9xQixTQUFTdEUsR0FBTSxDQUN4QixJQUFJOEIsRUFBNEIsRUFBdEJ5QyxFQUFRdkUsRUFBSTdULFFBQ2xCcVgsRUFBTUYsRUFBYXhCLEdBRXZCLE9BQW1CLElBQWYwQixFQUFJclgsUUFJUjZULEVBQUl3RSxLQUFLaEIsRUFBSyxFQUFHLEVBQUcxQixHQUhYMEIsRUFPWCxHQUFJeEQsRUFBSyxDQUNQLEdBQUl5RSxFQUFrQnpFLElBQVEsV0FBWUEsRUFDeEMsTUFBMEIsaUJBQWZBLEVBQUk3VCxRQUF1QnVZLEVBQVkxRSxFQUFJN1QsUUFDN0NtWCxFQUFhLEdBRWZxQixFQUFjM0UsR0FHdkIsR0FBaUIsV0FBYkEsRUFBSXpTLE1BQXFCYSxNQUFNQyxRQUFRMlIsRUFBSTRFLE1BQzdDLE9BQU9ELEVBQWMzRSxFQUFJNEUsTUFJN0IsTUFBTSxJQUFJaEUsVUFBVSxzRkF4SmJpRSxDQUFXeFgsR0FvQnBCLFNBQVN5WCxFQUFZQyxHQUNuQixHQUFvQixpQkFBVEEsRUFDVCxNQUFNLElBQUluRSxVQUFVLG9DQUNmLEdBQUltRSxFQUFPLEVBQ2hCLE1BQU0sSUFBSXhCLFdBQVcsd0NBNEJ6QixTQUFTRyxFQUFhcUIsR0FFcEIsT0FEQUQsRUFBV0MsR0FDSnpCLEVBQWF5QixFQUFPLEVBQUksRUFBb0IsRUFBaEJSLEVBQVFRLElBd0M3QyxTQUFTSixFQUFlZCxHQUd0QixJQUZBLElBQUkxWCxFQUFTMFgsRUFBTTFYLE9BQVMsRUFBSSxFQUE0QixFQUF4Qm9ZLEVBQVFWLEVBQU0xWCxRQUM5Q3FYLEVBQU1GLEVBQWFuWCxHQUNkSSxFQUFJLEVBQUdBLEVBQUlKLEVBQVFJLEdBQUssRUFDL0JpWCxFQUFJalgsR0FBZ0IsSUFBWHNYLEVBQU10WCxHQUVqQixPQUFPaVgsRUF1RFQsU0FBU2UsRUFBU3BZLEdBR2hCLEdBQUlBLEdBQVVrWCxFQUNaLE1BQU0sSUFBSUUsV0FBVywwREFDYUYsRUFBYXhHLFNBQVMsSUFBTSxVQUVoRSxPQUFnQixFQUFUMVEsRUFzRlQsU0FBUytVLEVBQVk4QyxFQUFRQyxHQUMzQixHQUFJaEIsRUFBT3FCLFNBQVNOLEdBQ2xCLE9BQU9BLEVBQU83WCxPQUVoQixHQUFJc1ksRUFBa0JULElBQVdKLEVBQWNJLEdBQzdDLE9BQU9BLEVBQU85QyxXQUVNLGlCQUFYOEMsSUFDVEEsRUFBUyxHQUFLQSxHQUdoQixJQUFJbEMsRUFBTWtDLEVBQU83WCxPQUNqQixHQUFZLElBQVIyVixFQUFXLE9BQU8sRUFJdEIsSUFEQSxJQUFJa0QsR0FBYyxJQUVoQixPQUFRZixHQUNOLElBQUssUUFDTCxJQUFLLFNBQ0wsSUFBSyxTQUNILE9BQU9uQyxFQUNULElBQUssT0FDTCxJQUFLLFFBQ0wsVUFBS3JNLEVBQ0gsT0FBT3dQLEVBQVlqQixHQUFRN1gsT0FDN0IsSUFBSyxPQUNMLElBQUssUUFDTCxJQUFLLFVBQ0wsSUFBSyxXQUNILE9BQWEsRUFBTjJWLEVBQ1QsSUFBSyxNQUNILE9BQU9BLElBQVEsRUFDakIsSUFBSyxTQUNILE9BQU9vRCxFQUFjbEIsR0FBUTdYLE9BQy9CLFFBQ0UsR0FBSTZZLEVBQWEsT0FBT0MsRUFBWWpCLEdBQVE3WCxPQUM1QzhYLEdBQVksR0FBS0EsR0FBVWtCLGNBQzNCSCxHQUFjLEdBTXRCLFNBQVNJLEVBQWNuQixFQUFVckIsRUFBT0MsR0FDdEMsSUFBSW1DLEdBQWMsRUFjbEIsU0FMY3ZQLElBQVZtTixHQUF1QkEsRUFBUSxLQUNqQ0EsRUFBUSxHQUlOQSxFQUFRL0gsS0FBSzFPLE9BQ2YsTUFBTyxHQU9ULFNBSllzSixJQUFSb04sR0FBcUJBLEVBQU1oSSxLQUFLMU8sVUFDbEMwVyxFQUFNaEksS0FBSzFPLFFBR1QwVyxHQUFPLEVBQ1QsTUFBTyxHQU9ULElBSEFBLEtBQVMsS0FDVEQsS0FBVyxHQUdULE1BQU8sR0FLVCxJQUZLcUIsSUFBVUEsRUFBVyxVQUd4QixPQUFRQSxHQUNOLElBQUssTUFDSCxPQUFPb0IsRUFBU3hLLEtBQU0rSCxFQUFPQyxHQUUvQixJQUFLLE9BQ0wsSUFBSyxRQUNILE9BQU95QyxFQUFVekssS0FBTStILEVBQU9DLEdBRWhDLElBQUssUUFDSCxPQUFPMEMsRUFBVzFLLEtBQU0rSCxFQUFPQyxHQUVqQyxJQUFLLFNBQ0wsSUFBSyxTQUNILE9BQU8yQyxFQUFZM0ssS0FBTStILEVBQU9DLEdBRWxDLElBQUssU0FDSCxPQUFPNEMsRUFBWTVLLEtBQU0rSCxFQUFPQyxHQUVsQyxJQUFLLE9BQ0wsSUFBSyxRQUNMLElBQUssVUFDTCxJQUFLLFdBQ0gsT0FBTzZDLEVBQWE3SyxLQUFNK0gsRUFBT0MsR0FFbkMsUUFDRSxHQUFJbUMsRUFBYSxNQUFNLElBQUlwRSxVQUFVLHFCQUF1QnFELEdBQzVEQSxHQUFZQSxFQUFXLElBQUlrQixjQUMzQkgsR0FBYyxHQWF0QixTQUFTVyxFQUFNQyxFQUFHQyxFQUFHQyxHQUNuQixJQUFJdlosRUFBSXFaLEVBQUVDLEdBQ1ZELEVBQUVDLEdBQUtELEVBQUVFLEdBQ1RGLEVBQUVFLEdBQUt2WixFQW1JVCxTQUFTd1osRUFBc0JDLEVBQVFDLEVBQUtuQyxFQUFZRyxFQUFVaUMsR0FFaEUsR0FBc0IsSUFBbEJGLEVBQU83WixPQUFjLE9BQVEsRUFtQmpDLEdBaEIwQixpQkFBZjJYLEdBQ1RHLEVBQVdILEVBQ1hBLEVBQWEsR0FDSkEsRUFBYSxXQUN0QkEsRUFBYSxXQUNKQSxHQUFjLGFBQ3ZCQSxHQUFjLFlBR1pZLEVBREpaLEdBQWNBLEtBR1pBLEVBQWFvQyxFQUFNLEVBQUtGLEVBQU83WixPQUFTLEdBSXRDMlgsRUFBYSxJQUFHQSxFQUFha0MsRUFBTzdaLE9BQVMyWCxHQUM3Q0EsR0FBY2tDLEVBQU83WixPQUFRLENBQy9CLEdBQUkrWixFQUFLLE9BQVEsRUFDWnBDLEVBQWFrQyxFQUFPN1osT0FBUyxPQUM3QixHQUFJMlgsRUFBYSxFQUFHLENBQ3pCLElBQUlvQyxFQUNDLE9BQVEsRUFESnBDLEVBQWEsRUFVeEIsR0FMbUIsaUJBQVJtQyxJQUNUQSxFQUFNaEQsRUFBT1UsS0FBS3NDLEVBQUtoQyxJQUlyQmhCLEVBQU9xQixTQUFTMkIsR0FFbEIsT0FBbUIsSUFBZkEsRUFBSTlaLFFBQ0UsRUFFSGdhLEVBQWFILEVBQVFDLEVBQUtuQyxFQUFZRyxFQUFVaUMsR0FDbEQsR0FBbUIsaUJBQVJELEVBRWhCLE9BREFBLEdBQVksSUFDZ0MsbUJBQWpDdkQsV0FBVzFKLFVBQVV4RixRQUMxQjBTLEVBQ0t4RCxXQUFXMUosVUFBVXhGLFFBQVE2RixLQUFLMk0sRUFBUUMsRUFBS25DLEdBRS9DcEIsV0FBVzFKLFVBQVVvTixZQUFZL00sS0FBSzJNLEVBQVFDLEVBQUtuQyxHQUd2RHFDLEVBQWFILEVBQVEsQ0FBRUMsR0FBT25DLEVBQVlHLEVBQVVpQyxHQUc3RCxNQUFNLElBQUl0RixVQUFVLHdDQUd0QixTQUFTdUYsRUFBY3pFLEVBQUt1RSxFQUFLbkMsRUFBWUcsRUFBVWlDLEdBQ3JELElBMEJJM1osRUExQkE4WixFQUFZLEVBQ1pDLEVBQVk1RSxFQUFJdlYsT0FDaEJvYSxFQUFZTixFQUFJOVosT0FFcEIsUUFBaUJzSixJQUFid08sSUFFZSxVQURqQkEsRUFBV2xMLE9BQU9rTCxHQUFVa0IsZ0JBQ1ksVUFBYmxCLEdBQ1YsWUFBYkEsR0FBdUMsYUFBYkEsR0FBeUIsQ0FDckQsR0FBSXZDLEVBQUl2VixPQUFTLEdBQUs4WixFQUFJOVosT0FBUyxFQUNqQyxPQUFRLEVBRVZrYSxFQUFZLEVBQ1pDLEdBQWEsRUFDYkMsR0FBYSxFQUNiekMsR0FBYyxFQUlsQixTQUFTMEMsRUFBTWhELEVBQUtqWCxHQUNsQixPQUFrQixJQUFkOFosRUFDSzdDLEVBQUlqWCxHQUVKaVgsRUFBSWlELGFBQWFsYSxFQUFJOFosR0FLaEMsR0FBSUgsRUFBSyxDQUNQLElBQUlRLEdBQWMsRUFDbEIsSUFBS25hLEVBQUl1WCxFQUFZdlgsRUFBSStaLEVBQVcvWixJQUNsQyxHQUFJaWEsRUFBSzlFLEVBQUtuVixLQUFPaWEsRUFBS1AsR0FBcUIsSUFBaEJTLEVBQW9CLEVBQUluYSxFQUFJbWEsSUFFekQsSUFEb0IsSUFBaEJBLElBQW1CQSxFQUFhbmEsR0FDaENBLEVBQUltYSxFQUFhLElBQU1ILEVBQVcsT0FBT0csRUFBYUwsT0FFdEMsSUFBaEJLLElBQW1CbmEsR0FBS0EsRUFBSW1hLEdBQ2hDQSxHQUFjLE9BS2xCLElBREk1QyxFQUFheUMsRUFBWUQsSUFBV3hDLEVBQWF3QyxFQUFZQyxHQUM1RGhhLEVBQUl1WCxFQUFZdlgsR0FBSyxFQUFHQSxJQUFLLENBRWhDLElBREEsSUFBSW9hLEdBQVEsRUFDSGpYLEVBQUksRUFBR0EsRUFBSTZXLEVBQVc3VyxJQUM3QixHQUFJOFcsRUFBSzlFLEVBQUtuVixFQUFJbUQsS0FBTzhXLEVBQUtQLEVBQUt2VyxHQUFJLENBQ3JDaVgsR0FBUSxFQUNSLE1BR0osR0FBSUEsRUFBTyxPQUFPcGEsRUFJdEIsT0FBUSxFQWVWLFNBQVNxYSxFQUFVcEQsRUFBS1EsRUFBUTZDLEVBQVExYSxHQUN0QzBhLEVBQVNDLE9BQU9ELElBQVcsRUFDM0IsSUFBSUUsRUFBWXZELEVBQUlyWCxPQUFTMGEsRUFDeEIxYSxHQUdIQSxFQUFTMmEsT0FBTzNhLElBQ0g0YSxJQUNYNWEsRUFBUzRhLEdBSlg1YSxFQUFTNGEsRUFTWCxJQUFJQyxFQUFTaEQsRUFBTzdYLE9BQ3BCLEdBQUk2YSxFQUFTLEdBQU0sRUFBRyxNQUFNLElBQUlwRyxVQUFVLHNCQUV0Q3pVLEVBQVM2YSxFQUFTLElBQ3BCN2EsRUFBUzZhLEVBQVMsR0FFcEIsSUFBSyxJQUFJemEsRUFBSSxFQUFHQSxFQUFJSixJQUFVSSxFQUFHLENBQy9CLElBQUkwYSxFQUFTQyxTQUFTbEQsRUFBT21ELE9BQVcsRUFBSjVhLEVBQU8sR0FBSSxJQUMvQyxHQUFJbVksRUFBWXVDLEdBQVMsT0FBTzFhLEVBQ2hDaVgsRUFBSXFELEVBQVN0YSxHQUFLMGEsRUFFcEIsT0FBTzFhLEVBR1QsU0FBUzZhLEVBQVc1RCxFQUFLUSxFQUFRNkMsRUFBUTFhLEdBQ3ZDLE9BQU9rYixFQUFXcEMsRUFBWWpCLEVBQVFSLEVBQUlyWCxPQUFTMGEsR0FBU3JELEVBQUtxRCxFQUFRMWEsR0FHM0UsU0FBU21iLEVBQVk5RCxFQUFLUSxFQUFRNkMsRUFBUTFhLEdBQ3hDLE9BQU9rYixFQXUzQlQsU0FBdUJFLEdBRXJCLElBREEsSUFBSUMsRUFBWSxHQUNQamIsRUFBSSxFQUFHQSxFQUFJZ2IsRUFBSXBiLFNBQVVJLEVBRWhDaWIsRUFBVTFRLEtBQXlCLElBQXBCeVEsRUFBSXZGLFdBQVd6VixJQUVoQyxPQUFPaWIsRUE3M0JXQyxDQUFhekQsR0FBU1IsRUFBS3FELEVBQVExYSxHQUd2RCxTQUFTdWIsRUFBYWxFLEVBQUtRLEVBQVE2QyxFQUFRMWEsR0FDekMsT0FBT21iLEVBQVc5RCxFQUFLUSxFQUFRNkMsRUFBUTFhLEdBR3pDLFNBQVN3YixFQUFhbkUsRUFBS1EsRUFBUTZDLEVBQVExYSxHQUN6QyxPQUFPa2IsRUFBV25DLEVBQWNsQixHQUFTUixFQUFLcUQsRUFBUTFhLEdBR3hELFNBQVN5YixFQUFXcEUsRUFBS1EsRUFBUTZDLEVBQVExYSxHQUN2QyxPQUFPa2IsRUFvM0JULFNBQXlCRSxFQUFLcFgsR0FHNUIsSUFGQSxJQUFJMFgsRUFBR0MsRUFBSUMsRUFDUFAsRUFBWSxHQUNQamIsRUFBSSxFQUFHQSxFQUFJZ2IsRUFBSXBiLFdBQ2pCZ0UsR0FBUyxHQUFLLEtBRGE1RCxFQUloQ3ViLEdBREFELEVBQUlOLEVBQUl2RixXQUFXelYsS0FDVCxFQUNWd2IsRUFBS0YsRUFBSSxJQUNUTCxFQUFVMVEsS0FBS2lSLEdBQ2ZQLEVBQVUxUSxLQUFLZ1IsR0FHakIsT0FBT04sRUFqNEJXUSxDQUFlaEUsRUFBUVIsRUFBSXJYLE9BQVMwYSxHQUFTckQsRUFBS3FELEVBQVExYSxHQWlGOUUsU0FBU3NaLEVBQWFqQyxFQUFLWixFQUFPQyxHQUNoQyxPQUFjLElBQVZELEdBQWVDLElBQVFXLEVBQUlyWCxPQUN0QjRXLEVBQU9kLGNBQWN1QixHQUVyQlQsRUFBT2QsY0FBY3VCLEVBQUk1VSxNQUFNZ1UsRUFBT0MsSUFJakQsU0FBU3lDLEVBQVc5QixFQUFLWixFQUFPQyxHQUM5QkEsRUFBTXpXLEtBQUs2YixJQUFJekUsRUFBSXJYLE9BQVEwVyxHQUkzQixJQUhBLElBQUlxRixFQUFNLEdBRU4zYixFQUFJcVcsRUFDRHJXLEVBQUlzVyxHQUFLLENBQ2QsSUFRTXNGLEVBQVlDLEVBQVdDLEVBQVlDLEVBUnJDQyxFQUFZL0UsRUFBSWpYLEdBQ2hCaWMsRUFBWSxLQUNaQyxFQUFvQkYsRUFBWSxJQUFRLEVBQ3ZDQSxFQUFZLElBQVEsRUFDcEJBLEVBQVksSUFBUSxFQUNyQixFQUVKLEdBQUloYyxFQUFJa2MsR0FBb0I1RixFQUcxQixPQUFRNEYsR0FDTixLQUFLLEVBQ0NGLEVBQVksTUFDZEMsRUFBWUQsR0FFZCxNQUNGLEtBQUssRUFFeUIsTUFBVixLQURsQkosRUFBYTNFLEVBQUlqWCxFQUFJLE9BRW5CK2IsR0FBNkIsR0FBWkMsSUFBcUIsRUFBb0IsR0FBYkosR0FDekIsTUFDbEJLLEVBQVlGLEdBR2hCLE1BQ0YsS0FBSyxFQUNISCxFQUFhM0UsRUFBSWpYLEVBQUksR0FDckI2YixFQUFZNUUsRUFBSWpYLEVBQUksR0FDUSxNQUFWLElBQWI0YixJQUFzRCxNQUFWLElBQVpDLEtBQ25DRSxHQUE2QixHQUFaQyxJQUFvQixJQUFvQixHQUFiSixJQUFzQixFQUFtQixHQUFaQyxHQUNyRCxPQUFVRSxFQUFnQixPQUFVQSxFQUFnQixTQUN0RUUsRUFBWUYsR0FHaEIsTUFDRixLQUFLLEVBQ0hILEVBQWEzRSxFQUFJalgsRUFBSSxHQUNyQjZiLEVBQVk1RSxFQUFJalgsRUFBSSxHQUNwQjhiLEVBQWE3RSxFQUFJalgsRUFBSSxHQUNPLE1BQVYsSUFBYjRiLElBQXNELE1BQVYsSUFBWkMsSUFBc0QsTUFBVixJQUFiQyxLQUNsRUMsR0FBNkIsR0FBWkMsSUFBb0IsSUFBcUIsR0FBYkosSUFBc0IsSUFBbUIsR0FBWkMsSUFBcUIsRUFBb0IsR0FBYkMsR0FDbEYsT0FBVUMsRUFBZ0IsVUFDNUNFLEVBQVlGLEdBTUosT0FBZEUsR0FHRkEsRUFBWSxNQUNaQyxFQUFtQixHQUNWRCxFQUFZLFFBRXJCQSxHQUFhLE1BQ2JOLEVBQUlwUixLQUFLMFIsSUFBYyxHQUFLLEtBQVEsT0FDcENBLEVBQVksTUFBcUIsS0FBWkEsR0FHdkJOLEVBQUlwUixLQUFLMFIsR0FDVGpjLEdBQUtrYyxFQUdQLE9BUUYsU0FBZ0NDLEdBQzlCLElBQUk1RyxFQUFNNEcsRUFBV3ZjLE9BQ3JCLEdBQUkyVixHQUFPNkcsRUFDVCxPQUFPNVAsT0FBTzZQLGFBQWFDLE1BQU05UCxPQUFRMlAsR0FNM0MsSUFGQSxJQUFJUixFQUFNLEdBQ04zYixFQUFJLEVBQ0RBLEVBQUl1VixHQUNUb0csR0FBT25QLE9BQU82UCxhQUFhQyxNQUN6QjlQLE9BQ0EyUCxFQUFXOVosTUFBTXJDLEVBQUdBLEdBQUtvYyxJQUc3QixPQUFPVCxFQXZCQVksQ0FBc0JaLEdBLzVCL0JoYixFQUFRNmIsV0FBYTFGLEVBZ0JyQkosRUFBTytGLG9CQVVQLFdBRUUsSUFDRSxJQUFJdEgsRUFBTSxJQUFJZ0IsV0FBVyxHQUV6QixPQURBaEIsRUFBSTdGLFVBQVksQ0FBQ0EsVUFBVzZHLFdBQVcxSixVQUFXaVEsSUFBSyxXQUFjLE9BQU8sS0FDdkQsS0FBZHZILEVBQUl1SCxNQUNYLE1BQU9DLEdBQ1AsT0FBTyxHQWpCa0JDLEdBRXhCbEcsRUFBTytGLHFCQUEwQyxvQkFBWkksU0FDYixtQkFBbEJBLFFBQVFDLE9BQ2pCRCxRQUFRQyxNQUNOLGlKQWtEa0Isb0JBQVh6UCxRQUEwQkEsT0FBTzBQLFNBQ3hDckcsRUFBT3JKLE9BQU8wUCxXQUFhckcsR0FDN0JyVixPQUFPZ0QsZUFBZXFTLEVBQVFySixPQUFPMFAsUUFBUyxDQUM1Q2pjLE1BQU8sS0FDUHlMLGNBQWMsRUFDZHlRLFlBQVksRUFDWjFRLFVBQVUsSUFJZG9LLEVBQU91RyxTQUFXLEtBMEJsQnZHLEVBQU9VLEtBQU8sU0FBVXRXLEVBQU9vVyxFQUFrQnRYLEdBQy9DLE9BQU93WCxFQUFLdFcsRUFBT29XLEVBQWtCdFgsSUFLdkM4VyxFQUFPakssVUFBVTZDLFVBQVk2RyxXQUFXMUosVUFDeENpSyxFQUFPcEgsVUFBWTZHLFdBOEJuQk8sRUFBT0UsTUFBUSxTQUFVNEIsRUFBTTBFLEVBQU14RixHQUNuQyxPQXJCRixTQUFnQmMsRUFBTTBFLEVBQU14RixHQUUxQixPQURBYSxFQUFXQyxHQUNQQSxHQUFRLEVBQ0h6QixFQUFheUIsUUFFVHRQLElBQVRnVSxFQUl5QixpQkFBYnhGLEVBQ1ZYLEVBQWF5QixHQUFNMEUsS0FBS0EsRUFBTXhGLEdBQzlCWCxFQUFheUIsR0FBTTBFLEtBQUtBLEdBRXZCbkcsRUFBYXlCLEdBUWI1QixDQUFNNEIsRUFBTTBFLEVBQU14RixJQVczQmhCLEVBQU9TLFlBQWMsU0FBVXFCLEdBQzdCLE9BQU9yQixFQUFZcUIsSUFLckI5QixFQUFPeUcsZ0JBQWtCLFNBQVUzRSxHQUNqQyxPQUFPckIsRUFBWXFCLElBeUdyQjlCLEVBQU9xQixTQUFXLFNBQW1Cc0IsR0FDbkMsT0FBWSxNQUFMQSxJQUE2QixJQUFoQkEsRUFBRStELFdBR3hCMUcsRUFBTzJHLFFBQVUsU0FBa0JDLEVBQUdqRSxHQUNwQyxJQUFLM0MsRUFBT3FCLFNBQVN1RixLQUFPNUcsRUFBT3FCLFNBQVNzQixHQUMxQyxNQUFNLElBQUloRixVQUFVLDZCQUd0QixHQUFJaUosSUFBTWpFLEVBQUcsT0FBTyxFQUtwQixJQUhBLElBQUlrRSxFQUFJRCxFQUFFMWQsT0FDTjRkLEVBQUluRSxFQUFFelosT0FFREksRUFBSSxFQUFHdVYsRUFBTTFWLEtBQUs2YixJQUFJNkIsRUFBR0MsR0FBSXhkLEVBQUl1VixJQUFPdlYsRUFDL0MsR0FBSXNkLEVBQUV0ZCxLQUFPcVosRUFBRXJaLEdBQUksQ0FDakJ1ZCxFQUFJRCxFQUFFdGQsR0FDTndkLEVBQUluRSxFQUFFclosR0FDTixNQUlKLE9BQUl1ZCxFQUFJQyxHQUFXLEVBQ2ZBLEVBQUlELEVBQVUsRUFDWCxHQUdUN0csRUFBT2lCLFdBQWEsU0FBcUJELEdBQ3ZDLE9BQVFsTCxPQUFPa0wsR0FBVWtCLGVBQ3ZCLElBQUssTUFDTCxJQUFLLE9BQ0wsSUFBSyxRQUNMLElBQUssUUFDTCxJQUFLLFNBQ0wsSUFBSyxTQUNMLElBQUssU0FDTCxJQUFLLE9BQ0wsSUFBSyxRQUNMLElBQUssVUFDTCxJQUFLLFdBQ0gsT0FBTyxFQUNULFFBQ0UsT0FBTyxJQUlibEMsRUFBTytHLE9BQVMsU0FBaUJDLEVBQU05ZCxHQUNyQyxJQUFLaUMsTUFBTUMsUUFBUTRiLEdBQ2pCLE1BQU0sSUFBSXJKLFVBQVUsK0NBR3RCLEdBQW9CLElBQWhCcUosRUFBSzlkLE9BQ1AsT0FBTzhXLEVBQU9FLE1BQU0sR0FHdEIsSUFBSTVXLEVBQ0osUUFBZWtKLElBQVh0SixFQUVGLElBREFBLEVBQVMsRUFDSkksRUFBSSxFQUFHQSxFQUFJMGQsRUFBSzlkLFNBQVVJLEVBQzdCSixHQUFVOGQsRUFBSzFkLEdBQUdKLE9BSXRCLElBQUk2WixFQUFTL0MsRUFBT1MsWUFBWXZYLEdBQzVCK2QsRUFBTSxFQUNWLElBQUszZCxFQUFJLEVBQUdBLEVBQUkwZCxFQUFLOWQsU0FBVUksRUFBRyxDQUNoQyxJQUFJaVgsRUFBTXlHLEVBQUsxZCxHQUNmLElBQUswVyxFQUFPcUIsU0FBU2QsR0FDbkIsTUFBTSxJQUFJNUMsVUFBVSwrQ0FFdEI0QyxFQUFJZ0IsS0FBS3dCLEVBQVFrRSxHQUNqQkEsR0FBTzFHLEVBQUlyWCxPQUViLE9BQU82WixHQTZDVC9DLEVBQU8vQixXQUFhQSxFQThFcEIrQixFQUFPakssVUFBVTJRLFdBQVksRUFRN0IxRyxFQUFPakssVUFBVW1SLE9BQVMsV0FDeEIsSUFBSXJJLEVBQU1qSCxLQUFLMU8sT0FDZixHQUFJMlYsRUFBTSxHQUFNLEVBQ2QsTUFBTSxJQUFJeUIsV0FBVyw2Q0FFdkIsSUFBSyxJQUFJaFgsRUFBSSxFQUFHQSxFQUFJdVYsRUFBS3ZWLEdBQUssRUFDNUJvWixFQUFLOUssS0FBTXRPLEVBQUdBLEVBQUksR0FFcEIsT0FBT3NPLE1BR1RvSSxFQUFPakssVUFBVW9SLE9BQVMsV0FDeEIsSUFBSXRJLEVBQU1qSCxLQUFLMU8sT0FDZixHQUFJMlYsRUFBTSxHQUFNLEVBQ2QsTUFBTSxJQUFJeUIsV0FBVyw2Q0FFdkIsSUFBSyxJQUFJaFgsRUFBSSxFQUFHQSxFQUFJdVYsRUFBS3ZWLEdBQUssRUFDNUJvWixFQUFLOUssS0FBTXRPLEVBQUdBLEVBQUksR0FDbEJvWixFQUFLOUssS0FBTXRPLEVBQUksRUFBR0EsRUFBSSxHQUV4QixPQUFPc08sTUFHVG9JLEVBQU9qSyxVQUFVcVIsT0FBUyxXQUN4QixJQUFJdkksRUFBTWpILEtBQUsxTyxPQUNmLEdBQUkyVixFQUFNLEdBQU0sRUFDZCxNQUFNLElBQUl5QixXQUFXLDZDQUV2QixJQUFLLElBQUloWCxFQUFJLEVBQUdBLEVBQUl1VixFQUFLdlYsR0FBSyxFQUM1Qm9aLEVBQUs5SyxLQUFNdE8sRUFBR0EsRUFBSSxHQUNsQm9aLEVBQUs5SyxLQUFNdE8sRUFBSSxFQUFHQSxFQUFJLEdBQ3RCb1osRUFBSzlLLEtBQU10TyxFQUFJLEVBQUdBLEVBQUksR0FDdEJvWixFQUFLOUssS0FBTXRPLEVBQUksRUFBR0EsRUFBSSxHQUV4QixPQUFPc08sTUFHVG9JLEVBQU9qSyxVQUFVNkQsU0FBVyxXQUMxQixJQUFJMVEsRUFBUzBPLEtBQUsxTyxPQUNsQixPQUFlLElBQVhBLEVBQXFCLEdBQ0EsSUFBckJtZSxVQUFVbmUsT0FBcUJtWixFQUFVekssS0FBTSxFQUFHMU8sR0FDL0NpWixFQUFheUQsTUFBTWhPLEtBQU15UCxZQUdsQ3JILEVBQU9qSyxVQUFVdVIsT0FBUyxTQUFpQjNFLEdBQ3pDLElBQUszQyxFQUFPcUIsU0FBU3NCLEdBQUksTUFBTSxJQUFJaEYsVUFBVSw2QkFDN0MsT0FBSS9GLE9BQVMrSyxHQUNzQixJQUE1QjNDLEVBQU8yRyxRQUFRL08sS0FBTStLLElBRzlCM0MsRUFBT2pLLFVBQVV3UixRQUFVLFdBQ3pCLElBQUlqRCxFQUFNLEdBQ05rRCxFQUFNdmQsRUFBUWtXLGtCQUtsQixPQUpJdkksS0FBSzFPLE9BQVMsSUFDaEJvYixFQUFNMU0sS0FBS2dDLFNBQVMsTUFBTyxFQUFHNE4sR0FBS0MsTUFBTSxTQUFTakksS0FBSyxLQUNuRDVILEtBQUsxTyxPQUFTc2UsSUFBS2xELEdBQU8sVUFFekIsV0FBYUEsRUFBTSxLQUc1QnRFLEVBQU9qSyxVQUFVNFEsUUFBVSxTQUFrQmUsRUFBUS9ILEVBQU9DLEVBQUsrSCxFQUFXQyxHQUMxRSxJQUFLNUgsRUFBT3FCLFNBQVNxRyxHQUNuQixNQUFNLElBQUkvSixVQUFVLDZCQWdCdEIsUUFiY25MLElBQVZtTixJQUNGQSxFQUFRLFFBRUVuTixJQUFSb04sSUFDRkEsRUFBTThILEVBQVNBLEVBQU94ZSxPQUFTLFFBRWZzSixJQUFkbVYsSUFDRkEsRUFBWSxRQUVFblYsSUFBWm9WLElBQ0ZBLEVBQVVoUSxLQUFLMU8sUUFHYnlXLEVBQVEsR0FBS0MsRUFBTThILEVBQU94ZSxRQUFVeWUsRUFBWSxHQUFLQyxFQUFVaFEsS0FBSzFPLE9BQ3RFLE1BQU0sSUFBSW9YLFdBQVcsc0JBR3ZCLEdBQUlxSCxHQUFhQyxHQUFXakksR0FBU0MsRUFDbkMsT0FBTyxFQUVULEdBQUkrSCxHQUFhQyxFQUNmLE9BQVEsRUFFVixHQUFJakksR0FBU0MsRUFDWCxPQUFPLEVBUVQsR0FBSWhJLE9BQVM4UCxFQUFRLE9BQU8sRUFTNUIsSUFQQSxJQUFJYixHQUpKZSxLQUFhLElBRGJELEtBQWUsR0FNWGIsR0FQSmxILEtBQVMsSUFEVEQsS0FBVyxHQVNQZCxFQUFNMVYsS0FBSzZiLElBQUk2QixFQUFHQyxHQUVsQmUsRUFBV2pRLEtBQUtqTSxNQUFNZ2MsRUFBV0MsR0FDakNFLEVBQWFKLEVBQU8vYixNQUFNZ1UsRUFBT0MsR0FFNUJ0VyxFQUFJLEVBQUdBLEVBQUl1VixJQUFPdlYsRUFDekIsR0FBSXVlLEVBQVN2ZSxLQUFPd2UsRUFBV3hlLEdBQUksQ0FDakN1ZCxFQUFJZ0IsRUFBU3ZlLEdBQ2J3ZCxFQUFJZ0IsRUFBV3hlLEdBQ2YsTUFJSixPQUFJdWQsRUFBSUMsR0FBVyxFQUNmQSxFQUFJRCxFQUFVLEVBQ1gsR0E0SFQ3RyxFQUFPakssVUFBVWdTLFNBQVcsU0FBbUIvRSxFQUFLbkMsRUFBWUcsR0FDOUQsT0FBb0QsSUFBN0NwSixLQUFLckgsUUFBUXlTLEVBQUtuQyxFQUFZRyxJQUd2Q2hCLEVBQU9qSyxVQUFVeEYsUUFBVSxTQUFrQnlTLEVBQUtuQyxFQUFZRyxHQUM1RCxPQUFPOEIsRUFBcUJsTCxLQUFNb0wsRUFBS25DLEVBQVlHLEdBQVUsSUFHL0RoQixFQUFPakssVUFBVW9OLFlBQWMsU0FBc0JILEVBQUtuQyxFQUFZRyxHQUNwRSxPQUFPOEIsRUFBcUJsTCxLQUFNb0wsRUFBS25DLEVBQVlHLEdBQVUsSUFrRC9EaEIsRUFBT2pLLFVBQVVvTCxNQUFRLFNBQWdCSixFQUFRNkMsRUFBUTFhLEVBQVE4WCxHQUUvRCxRQUFleE8sSUFBWG9SLEVBQ0Y1QyxFQUFXLE9BQ1g5WCxFQUFTME8sS0FBSzFPLE9BQ2QwYSxFQUFTLE9BRUosUUFBZXBSLElBQVh0SixHQUEwQyxpQkFBWDBhLEVBQ3hDNUMsRUFBVzRDLEVBQ1gxYSxFQUFTME8sS0FBSzFPLE9BQ2QwYSxFQUFTLE1BRUosS0FBSW9FLFNBQVNwRSxHQVVsQixNQUFNLElBQUkvWCxNQUNSLDJFQVZGK1gsS0FBb0IsRUFDaEJvRSxTQUFTOWUsSUFDWEEsS0FBb0IsT0FDSHNKLElBQWJ3TyxJQUF3QkEsRUFBVyxVQUV2Q0EsRUFBVzlYLEVBQ1hBLE9BQVNzSixHQVFiLElBQUlzUixFQUFZbE0sS0FBSzFPLE9BQVMwYSxFQUc5QixTQUZlcFIsSUFBWHRKLEdBQXdCQSxFQUFTNGEsS0FBVzVhLEVBQVM0YSxHQUVwRC9DLEVBQU83WCxPQUFTLElBQU1BLEVBQVMsR0FBSzBhLEVBQVMsSUFBT0EsRUFBU2hNLEtBQUsxTyxPQUNyRSxNQUFNLElBQUlvWCxXQUFXLDBDQUdsQlUsSUFBVUEsRUFBVyxRQUcxQixJQURBLElBQUllLEdBQWMsSUFFaEIsT0FBUWYsR0FDTixJQUFLLE1BQ0gsT0FBTzJDLEVBQVMvTCxLQUFNbUosRUFBUTZDLEVBQVExYSxHQUV4QyxJQUFLLE9BQ0wsSUFBSyxRQUNILE9BQU9pYixFQUFVdk0sS0FBTW1KLEVBQVE2QyxFQUFRMWEsR0FFekMsSUFBSyxRQUNILE9BQU9tYixFQUFXek0sS0FBTW1KLEVBQVE2QyxFQUFRMWEsR0FFMUMsSUFBSyxTQUNMLElBQUssU0FDSCxPQUFPdWIsRUFBWTdNLEtBQU1tSixFQUFRNkMsRUFBUTFhLEdBRTNDLElBQUssU0FFSCxPQUFPd2IsRUFBWTlNLEtBQU1tSixFQUFRNkMsRUFBUTFhLEdBRTNDLElBQUssT0FDTCxJQUFLLFFBQ0wsSUFBSyxVQUNMLElBQUssV0FDSCxPQUFPeWIsRUFBVS9NLEtBQU1tSixFQUFRNkMsRUFBUTFhLEdBRXpDLFFBQ0UsR0FBSTZZLEVBQWEsTUFBTSxJQUFJcEUsVUFBVSxxQkFBdUJxRCxHQUM1REEsR0FBWSxHQUFLQSxHQUFVa0IsY0FDM0JILEdBQWMsSUFLdEIvQixFQUFPakssVUFBVWtTLE9BQVMsV0FDeEIsTUFBTyxDQUNMM2QsS0FBTSxTQUNOcVgsS0FBTXhXLE1BQU00SyxVQUFVcEssTUFBTXlLLEtBQUt3QixLQUFLc1EsTUFBUXRRLEtBQU0sS0F3RnhELElBQUk4TixFQUF1QixLQW9CM0IsU0FBU3BELEVBQVkvQixFQUFLWixFQUFPQyxHQUMvQixJQUFJdUksRUFBTSxHQUNWdkksRUFBTXpXLEtBQUs2YixJQUFJekUsRUFBSXJYLE9BQVEwVyxHQUUzQixJQUFLLElBQUl0VyxFQUFJcVcsRUFBT3JXLEVBQUlzVyxJQUFPdFcsRUFDN0I2ZSxHQUFPclMsT0FBTzZQLGFBQXNCLElBQVRwRixFQUFJalgsSUFFakMsT0FBTzZlLEVBR1QsU0FBUzVGLEVBQWFoQyxFQUFLWixFQUFPQyxHQUNoQyxJQUFJdUksRUFBTSxHQUNWdkksRUFBTXpXLEtBQUs2YixJQUFJekUsRUFBSXJYLE9BQVEwVyxHQUUzQixJQUFLLElBQUl0VyxFQUFJcVcsRUFBT3JXLEVBQUlzVyxJQUFPdFcsRUFDN0I2ZSxHQUFPclMsT0FBTzZQLGFBQWFwRixFQUFJalgsSUFFakMsT0FBTzZlLEVBR1QsU0FBUy9GLEVBQVU3QixFQUFLWixFQUFPQyxHQUM3QixJQXdrQmNnRCxFQXhrQlYvRCxFQUFNMEIsRUFBSXJYLFNBRVR5VyxHQUFTQSxFQUFRLEtBQUdBLEVBQVEsS0FDNUJDLEdBQU9BLEVBQU0sR0FBS0EsRUFBTWYsS0FBS2UsRUFBTWYsR0FHeEMsSUFEQSxJQUFJdUosRUFBTSxHQUNEOWUsRUFBSXFXLEVBQU9yVyxFQUFJc1csSUFBT3RXLEVBQzdCOGUsSUFpa0JZeEYsRUFqa0JDckMsRUFBSWpYLElBa2tCWCxHQUFXLElBQU1zWixFQUFFaEosU0FBUyxJQUM3QmdKLEVBQUVoSixTQUFTLElBamtCbEIsT0FBT3dPLEVBR1QsU0FBUzNGLEVBQWNsQyxFQUFLWixFQUFPQyxHQUdqQyxJQUZBLElBQUl5SSxFQUFROUgsRUFBSTVVLE1BQU1nVSxFQUFPQyxHQUN6QnFGLEVBQU0sR0FDRDNiLEVBQUksRUFBR0EsRUFBSStlLEVBQU1uZixPQUFRSSxHQUFLLEVBQ3JDMmIsR0FBT25QLE9BQU82UCxhQUFhMEMsRUFBTS9lLEdBQXFCLElBQWYrZSxFQUFNL2UsRUFBSSxJQUVuRCxPQUFPMmIsRUFpQ1QsU0FBU3FELEVBQWExRSxFQUFRMkUsRUFBS3JmLEdBQ2pDLEdBQUswYSxFQUFTLEdBQU8sR0FBS0EsRUFBUyxFQUFHLE1BQU0sSUFBSXRELFdBQVcsc0JBQzNELEdBQUlzRCxFQUFTMkUsRUFBTXJmLEVBQVEsTUFBTSxJQUFJb1gsV0FBVyx5Q0E2S2xELFNBQVNrSSxFQUFVakksRUFBS25XLEVBQU93WixFQUFRMkUsRUFBS2YsRUFBS3hDLEdBQy9DLElBQUtoRixFQUFPcUIsU0FBU2QsR0FBTSxNQUFNLElBQUk1QyxVQUFVLCtDQUMvQyxHQUFJdlQsRUFBUW9kLEdBQU9wZCxFQUFRNGEsRUFBSyxNQUFNLElBQUkxRSxXQUFXLHFDQUNyRCxHQUFJc0QsRUFBUzJFLEVBQU1oSSxFQUFJclgsT0FBUSxNQUFNLElBQUlvWCxXQUFXLHNCQXlMdEQsU0FBU21JLEVBQWNsSSxFQUFLblcsRUFBT3daLEVBQVEyRSxFQUFLZixFQUFLeEMsR0FDbkQsR0FBSXBCLEVBQVMyRSxFQUFNaEksRUFBSXJYLE9BQVEsTUFBTSxJQUFJb1gsV0FBVyxzQkFDcEQsR0FBSXNELEVBQVMsRUFBRyxNQUFNLElBQUl0RCxXQUFXLHNCQUd2QyxTQUFTb0ksRUFBWW5JLEVBQUtuVyxFQUFPd1osRUFBUStFLEVBQWNDLEdBT3JELE9BTkF4ZSxHQUFTQSxFQUNUd1osS0FBb0IsRUFDZmdGLEdBQ0hILEVBQWFsSSxFQUFLblcsRUFBT3daLEVBQVEsR0FFbkM3RCxFQUFRb0IsTUFBTVosRUFBS25XLEVBQU93WixFQUFRK0UsRUFBYyxHQUFJLEdBQzdDL0UsRUFBUyxFQVdsQixTQUFTaUYsRUFBYXRJLEVBQUtuVyxFQUFPd1osRUFBUStFLEVBQWNDLEdBT3RELE9BTkF4ZSxHQUFTQSxFQUNUd1osS0FBb0IsRUFDZmdGLEdBQ0hILEVBQWFsSSxFQUFLblcsRUFBT3daLEVBQVEsR0FFbkM3RCxFQUFRb0IsTUFBTVosRUFBS25XLEVBQU93WixFQUFRK0UsRUFBYyxHQUFJLEdBQzdDL0UsRUFBUyxFQXZhbEI1RCxFQUFPakssVUFBVXBLLE1BQVEsU0FBZ0JnVSxFQUFPQyxHQUM5QyxJQUFJZixFQUFNakgsS0FBSzFPLFFBQ2Z5VyxJQUFVQSxHQUdFLEdBQ1ZBLEdBQVNkLEdBQ0csSUFBR2MsRUFBUSxHQUNkQSxFQUFRZCxJQUNqQmMsRUFBUWQsSUFOVmUsT0FBY3BOLElBQVJvTixFQUFvQmYsSUFBUWUsR0FTeEIsR0FDUkEsR0FBT2YsR0FDRyxJQUFHZSxFQUFNLEdBQ1ZBLEVBQU1mLElBQ2ZlLEVBQU1mLEdBR0plLEVBQU1ELElBQU9DLEVBQU1ELEdBRXZCLElBQUltSixFQUFTbFIsS0FBS21SLFNBQVNwSixFQUFPQyxHQUdsQyxPQURBa0osRUFBT2xRLFVBQVlvSCxFQUFPakssVUFDbkIrUyxHQVdUOUksRUFBT2pLLFVBQVVpVCxXQUFhLFNBQXFCcEYsRUFBUTNGLEVBQVkySyxHQUNyRWhGLEtBQW9CLEVBQ3BCM0YsS0FBNEIsRUFDdkIySyxHQUFVTixFQUFZMUUsRUFBUTNGLEVBQVlyRyxLQUFLMU8sUUFLcEQsSUFIQSxJQUFJOFosRUFBTXBMLEtBQUtnTSxHQUNYcUYsRUFBTSxFQUNOM2YsRUFBSSxJQUNDQSxFQUFJMlUsSUFBZWdMLEdBQU8sTUFDakNqRyxHQUFPcEwsS0FBS2dNLEVBQVN0YSxHQUFLMmYsRUFHNUIsT0FBT2pHLEdBR1RoRCxFQUFPakssVUFBVW1ULFdBQWEsU0FBcUJ0RixFQUFRM0YsRUFBWTJLLEdBQ3JFaEYsS0FBb0IsRUFDcEIzRixLQUE0QixFQUN2QjJLLEdBQ0hOLEVBQVkxRSxFQUFRM0YsRUFBWXJHLEtBQUsxTyxRQUt2QyxJQUZBLElBQUk4WixFQUFNcEwsS0FBS2dNLElBQVczRixHQUN0QmdMLEVBQU0sRUFDSGhMLEVBQWEsSUFBTWdMLEdBQU8sTUFDL0JqRyxHQUFPcEwsS0FBS2dNLElBQVczRixHQUFjZ0wsRUFHdkMsT0FBT2pHLEdBR1RoRCxFQUFPakssVUFBVW9ULFVBQVksU0FBb0J2RixFQUFRZ0YsR0FHdkQsT0FGQWhGLEtBQW9CLEVBQ2ZnRixHQUFVTixFQUFZMUUsRUFBUSxFQUFHaE0sS0FBSzFPLFFBQ3BDME8sS0FBS2dNLElBR2Q1RCxFQUFPakssVUFBVXFULGFBQWUsU0FBdUJ4RixFQUFRZ0YsR0FHN0QsT0FGQWhGLEtBQW9CLEVBQ2ZnRixHQUFVTixFQUFZMUUsRUFBUSxFQUFHaE0sS0FBSzFPLFFBQ3BDME8sS0FBS2dNLEdBQVdoTSxLQUFLZ00sRUFBUyxJQUFNLEdBRzdDNUQsRUFBT2pLLFVBQVV5TixhQUFlLFNBQXVCSSxFQUFRZ0YsR0FHN0QsT0FGQWhGLEtBQW9CLEVBQ2ZnRixHQUFVTixFQUFZMUUsRUFBUSxFQUFHaE0sS0FBSzFPLFFBQ25DME8sS0FBS2dNLElBQVcsRUFBS2hNLEtBQUtnTSxFQUFTLElBRzdDNUQsRUFBT2pLLFVBQVVzVCxhQUFlLFNBQXVCekYsRUFBUWdGLEdBSTdELE9BSEFoRixLQUFvQixFQUNmZ0YsR0FBVU4sRUFBWTFFLEVBQVEsRUFBR2hNLEtBQUsxTyxTQUVsQzBPLEtBQUtnTSxHQUNUaE0sS0FBS2dNLEVBQVMsSUFBTSxFQUNwQmhNLEtBQUtnTSxFQUFTLElBQU0sSUFDRCxTQUFuQmhNLEtBQUtnTSxFQUFTLElBR3JCNUQsRUFBT2pLLFVBQVV1VCxhQUFlLFNBQXVCMUYsRUFBUWdGLEdBSTdELE9BSEFoRixLQUFvQixFQUNmZ0YsR0FBVU4sRUFBWTFFLEVBQVEsRUFBR2hNLEtBQUsxTyxRQUVwQixTQUFmME8sS0FBS2dNLElBQ1RoTSxLQUFLZ00sRUFBUyxJQUFNLEdBQ3JCaE0sS0FBS2dNLEVBQVMsSUFBTSxFQUNyQmhNLEtBQUtnTSxFQUFTLEtBR2xCNUQsRUFBT2pLLFVBQVV3VCxVQUFZLFNBQW9CM0YsRUFBUTNGLEVBQVkySyxHQUNuRWhGLEtBQW9CLEVBQ3BCM0YsS0FBNEIsRUFDdkIySyxHQUFVTixFQUFZMUUsRUFBUTNGLEVBQVlyRyxLQUFLMU8sUUFLcEQsSUFIQSxJQUFJOFosRUFBTXBMLEtBQUtnTSxHQUNYcUYsRUFBTSxFQUNOM2YsRUFBSSxJQUNDQSxFQUFJMlUsSUFBZWdMLEdBQU8sTUFDakNqRyxHQUFPcEwsS0FBS2dNLEVBQVN0YSxHQUFLMmYsRUFNNUIsT0FGSWpHLElBRkppRyxHQUFPLE9BRVNqRyxHQUFPN1osS0FBS2tHLElBQUksRUFBRyxFQUFJNE8sSUFFaEMrRSxHQUdUaEQsRUFBT2pLLFVBQVV5VCxVQUFZLFNBQW9CNUYsRUFBUTNGLEVBQVkySyxHQUNuRWhGLEtBQW9CLEVBQ3BCM0YsS0FBNEIsRUFDdkIySyxHQUFVTixFQUFZMUUsRUFBUTNGLEVBQVlyRyxLQUFLMU8sUUFLcEQsSUFIQSxJQUFJSSxFQUFJMlUsRUFDSmdMLEVBQU0sRUFDTmpHLEVBQU1wTCxLQUFLZ00sSUFBV3RhLEdBQ25CQSxFQUFJLElBQU0yZixHQUFPLE1BQ3RCakcsR0FBT3BMLEtBQUtnTSxJQUFXdGEsR0FBSzJmLEVBTTlCLE9BRklqRyxJQUZKaUcsR0FBTyxPQUVTakcsR0FBTzdaLEtBQUtrRyxJQUFJLEVBQUcsRUFBSTRPLElBRWhDK0UsR0FHVGhELEVBQU9qSyxVQUFVMFQsU0FBVyxTQUFtQjdGLEVBQVFnRixHQUdyRCxPQUZBaEYsS0FBb0IsRUFDZmdGLEdBQVVOLEVBQVkxRSxFQUFRLEVBQUdoTSxLQUFLMU8sUUFDdEIsSUFBZjBPLEtBQUtnTSxJQUMwQixHQUE1QixJQUFPaE0sS0FBS2dNLEdBQVUsR0FES2hNLEtBQUtnTSxJQUkzQzVELEVBQU9qSyxVQUFVMlQsWUFBYyxTQUFzQjlGLEVBQVFnRixHQUMzRGhGLEtBQW9CLEVBQ2ZnRixHQUFVTixFQUFZMUUsRUFBUSxFQUFHaE0sS0FBSzFPLFFBQzNDLElBQUk4WixFQUFNcEwsS0FBS2dNLEdBQVdoTSxLQUFLZ00sRUFBUyxJQUFNLEVBQzlDLE9BQWMsTUFBTlosRUFBc0IsV0FBTkEsRUFBbUJBLEdBRzdDaEQsRUFBT2pLLFVBQVU0VCxZQUFjLFNBQXNCL0YsRUFBUWdGLEdBQzNEaEYsS0FBb0IsRUFDZmdGLEdBQVVOLEVBQVkxRSxFQUFRLEVBQUdoTSxLQUFLMU8sUUFDM0MsSUFBSThaLEVBQU1wTCxLQUFLZ00sRUFBUyxHQUFNaE0sS0FBS2dNLElBQVcsRUFDOUMsT0FBYyxNQUFOWixFQUFzQixXQUFOQSxFQUFtQkEsR0FHN0NoRCxFQUFPakssVUFBVTZULFlBQWMsU0FBc0JoRyxFQUFRZ0YsR0FJM0QsT0FIQWhGLEtBQW9CLEVBQ2ZnRixHQUFVTixFQUFZMUUsRUFBUSxFQUFHaE0sS0FBSzFPLFFBRW5DME8sS0FBS2dNLEdBQ1ZoTSxLQUFLZ00sRUFBUyxJQUFNLEVBQ3BCaE0sS0FBS2dNLEVBQVMsSUFBTSxHQUNwQmhNLEtBQUtnTSxFQUFTLElBQU0sSUFHekI1RCxFQUFPakssVUFBVThULFlBQWMsU0FBc0JqRyxFQUFRZ0YsR0FJM0QsT0FIQWhGLEtBQW9CLEVBQ2ZnRixHQUFVTixFQUFZMUUsRUFBUSxFQUFHaE0sS0FBSzFPLFFBRW5DME8sS0FBS2dNLElBQVcsR0FDckJoTSxLQUFLZ00sRUFBUyxJQUFNLEdBQ3BCaE0sS0FBS2dNLEVBQVMsSUFBTSxFQUNwQmhNLEtBQUtnTSxFQUFTLElBR25CNUQsRUFBT2pLLFVBQVUrVCxZQUFjLFNBQXNCbEcsRUFBUWdGLEdBRzNELE9BRkFoRixLQUFvQixFQUNmZ0YsR0FBVU4sRUFBWTFFLEVBQVEsRUFBR2hNLEtBQUsxTyxRQUNwQzZXLEVBQVF3RCxLQUFLM0wsS0FBTWdNLEdBQVEsRUFBTSxHQUFJLElBRzlDNUQsRUFBT2pLLFVBQVVnVSxZQUFjLFNBQXNCbkcsRUFBUWdGLEdBRzNELE9BRkFoRixLQUFvQixFQUNmZ0YsR0FBVU4sRUFBWTFFLEVBQVEsRUFBR2hNLEtBQUsxTyxRQUNwQzZXLEVBQVF3RCxLQUFLM0wsS0FBTWdNLEdBQVEsRUFBTyxHQUFJLElBRy9DNUQsRUFBT2pLLFVBQVVpVSxhQUFlLFNBQXVCcEcsRUFBUWdGLEdBRzdELE9BRkFoRixLQUFvQixFQUNmZ0YsR0FBVU4sRUFBWTFFLEVBQVEsRUFBR2hNLEtBQUsxTyxRQUNwQzZXLEVBQVF3RCxLQUFLM0wsS0FBTWdNLEdBQVEsRUFBTSxHQUFJLElBRzlDNUQsRUFBT2pLLFVBQVVrVSxhQUFlLFNBQXVCckcsRUFBUWdGLEdBRzdELE9BRkFoRixLQUFvQixFQUNmZ0YsR0FBVU4sRUFBWTFFLEVBQVEsRUFBR2hNLEtBQUsxTyxRQUNwQzZXLEVBQVF3RCxLQUFLM0wsS0FBTWdNLEdBQVEsRUFBTyxHQUFJLElBUy9DNUQsRUFBT2pLLFVBQVVtVSxZQUFjLFNBQXNCOWYsRUFBT3daLEVBQVEzRixFQUFZMkssR0FDOUV4ZSxHQUFTQSxFQUNUd1osS0FBb0IsRUFDcEIzRixLQUE0QixFQUN2QjJLLEdBRUhKLEVBQVM1USxLQUFNeE4sRUFBT3daLEVBQVEzRixFQURmOVUsS0FBS2tHLElBQUksRUFBRyxFQUFJNE8sR0FBYyxFQUNPLEdBR3RELElBQUlnTCxFQUFNLEVBQ04zZixFQUFJLEVBRVIsSUFEQXNPLEtBQUtnTSxHQUFrQixJQUFSeFosSUFDTmQsRUFBSTJVLElBQWVnTCxHQUFPLE1BQ2pDclIsS0FBS2dNLEVBQVN0YSxHQUFNYyxFQUFRNmUsRUFBTyxJQUdyQyxPQUFPckYsRUFBUzNGLEdBR2xCK0IsRUFBT2pLLFVBQVVvVSxZQUFjLFNBQXNCL2YsRUFBT3daLEVBQVEzRixFQUFZMkssR0FDOUV4ZSxHQUFTQSxFQUNUd1osS0FBb0IsRUFDcEIzRixLQUE0QixFQUN2QjJLLEdBRUhKLEVBQVM1USxLQUFNeE4sRUFBT3daLEVBQVEzRixFQURmOVUsS0FBS2tHLElBQUksRUFBRyxFQUFJNE8sR0FBYyxFQUNPLEdBR3RELElBQUkzVSxFQUFJMlUsRUFBYSxFQUNqQmdMLEVBQU0sRUFFVixJQURBclIsS0FBS2dNLEVBQVN0YSxHQUFhLElBQVJjLElBQ1ZkLEdBQUssSUFBTTJmLEdBQU8sTUFDekJyUixLQUFLZ00sRUFBU3RhLEdBQU1jLEVBQVE2ZSxFQUFPLElBR3JDLE9BQU9yRixFQUFTM0YsR0FHbEIrQixFQUFPakssVUFBVXFVLFdBQWEsU0FBcUJoZ0IsRUFBT3daLEVBQVFnRixHQUtoRSxPQUpBeGUsR0FBU0EsRUFDVHdaLEtBQW9CLEVBQ2ZnRixHQUFVSixFQUFTNVEsS0FBTXhOLEVBQU93WixFQUFRLEVBQUcsSUFBTSxHQUN0RGhNLEtBQUtnTSxHQUFtQixJQUFSeFosRUFDVHdaLEVBQVMsR0FHbEI1RCxFQUFPakssVUFBVXNVLGNBQWdCLFNBQXdCamdCLEVBQU93WixFQUFRZ0YsR0FNdEUsT0FMQXhlLEdBQVNBLEVBQ1R3WixLQUFvQixFQUNmZ0YsR0FBVUosRUFBUzVRLEtBQU14TixFQUFPd1osRUFBUSxFQUFHLE1BQVEsR0FDeERoTSxLQUFLZ00sR0FBbUIsSUFBUnhaLEVBQ2hCd04sS0FBS2dNLEVBQVMsR0FBTXhaLElBQVUsRUFDdkJ3WixFQUFTLEdBR2xCNUQsRUFBT2pLLFVBQVV1VSxjQUFnQixTQUF3QmxnQixFQUFPd1osRUFBUWdGLEdBTXRFLE9BTEF4ZSxHQUFTQSxFQUNUd1osS0FBb0IsRUFDZmdGLEdBQVVKLEVBQVM1USxLQUFNeE4sRUFBT3daLEVBQVEsRUFBRyxNQUFRLEdBQ3hEaE0sS0FBS2dNLEdBQVd4WixJQUFVLEVBQzFCd04sS0FBS2dNLEVBQVMsR0FBYyxJQUFSeFosRUFDYndaLEVBQVMsR0FHbEI1RCxFQUFPakssVUFBVXdVLGNBQWdCLFNBQXdCbmdCLEVBQU93WixFQUFRZ0YsR0FRdEUsT0FQQXhlLEdBQVNBLEVBQ1R3WixLQUFvQixFQUNmZ0YsR0FBVUosRUFBUzVRLEtBQU14TixFQUFPd1osRUFBUSxFQUFHLFdBQVksR0FDNURoTSxLQUFLZ00sRUFBUyxHQUFNeFosSUFBVSxHQUM5QndOLEtBQUtnTSxFQUFTLEdBQU14WixJQUFVLEdBQzlCd04sS0FBS2dNLEVBQVMsR0FBTXhaLElBQVUsRUFDOUJ3TixLQUFLZ00sR0FBbUIsSUFBUnhaLEVBQ1R3WixFQUFTLEdBR2xCNUQsRUFBT2pLLFVBQVV5VSxjQUFnQixTQUF3QnBnQixFQUFPd1osRUFBUWdGLEdBUXRFLE9BUEF4ZSxHQUFTQSxFQUNUd1osS0FBb0IsRUFDZmdGLEdBQVVKLEVBQVM1USxLQUFNeE4sRUFBT3daLEVBQVEsRUFBRyxXQUFZLEdBQzVEaE0sS0FBS2dNLEdBQVd4WixJQUFVLEdBQzFCd04sS0FBS2dNLEVBQVMsR0FBTXhaLElBQVUsR0FDOUJ3TixLQUFLZ00sRUFBUyxHQUFNeFosSUFBVSxFQUM5QndOLEtBQUtnTSxFQUFTLEdBQWMsSUFBUnhaLEVBQ2J3WixFQUFTLEdBR2xCNUQsRUFBT2pLLFVBQVUwVSxXQUFhLFNBQXFCcmdCLEVBQU93WixFQUFRM0YsRUFBWTJLLEdBRzVFLEdBRkF4ZSxHQUFTQSxFQUNUd1osS0FBb0IsR0FDZmdGLEVBQVUsQ0FDYixJQUFJOEIsRUFBUXZoQixLQUFLa0csSUFBSSxFQUFJLEVBQUk0TyxFQUFjLEdBRTNDdUssRUFBUzVRLEtBQU14TixFQUFPd1osRUFBUTNGLEVBQVl5TSxFQUFRLEdBQUlBLEdBR3hELElBQUlwaEIsRUFBSSxFQUNKMmYsRUFBTSxFQUNOMEIsRUFBTSxFQUVWLElBREEvUyxLQUFLZ00sR0FBa0IsSUFBUnhaLElBQ05kLEVBQUkyVSxJQUFlZ0wsR0FBTyxNQUM3QjdlLEVBQVEsR0FBYSxJQUFSdWdCLEdBQXNDLElBQXpCL1MsS0FBS2dNLEVBQVN0YSxFQUFJLEtBQzlDcWhCLEVBQU0sR0FFUi9TLEtBQUtnTSxFQUFTdGEsSUFBT2MsRUFBUTZlLEdBQVEsR0FBSzBCLEVBQU0sSUFHbEQsT0FBTy9HLEVBQVMzRixHQUdsQitCLEVBQU9qSyxVQUFVNlUsV0FBYSxTQUFxQnhnQixFQUFPd1osRUFBUTNGLEVBQVkySyxHQUc1RSxHQUZBeGUsR0FBU0EsRUFDVHdaLEtBQW9CLEdBQ2ZnRixFQUFVLENBQ2IsSUFBSThCLEVBQVF2aEIsS0FBS2tHLElBQUksRUFBSSxFQUFJNE8sRUFBYyxHQUUzQ3VLLEVBQVM1USxLQUFNeE4sRUFBT3daLEVBQVEzRixFQUFZeU0sRUFBUSxHQUFJQSxHQUd4RCxJQUFJcGhCLEVBQUkyVSxFQUFhLEVBQ2pCZ0wsRUFBTSxFQUNOMEIsRUFBTSxFQUVWLElBREEvUyxLQUFLZ00sRUFBU3RhLEdBQWEsSUFBUmMsSUFDVmQsR0FBSyxJQUFNMmYsR0FBTyxNQUNyQjdlLEVBQVEsR0FBYSxJQUFSdWdCLEdBQXNDLElBQXpCL1MsS0FBS2dNLEVBQVN0YSxFQUFJLEtBQzlDcWhCLEVBQU0sR0FFUi9TLEtBQUtnTSxFQUFTdGEsSUFBT2MsRUFBUTZlLEdBQVEsR0FBSzBCLEVBQU0sSUFHbEQsT0FBTy9HLEVBQVMzRixHQUdsQitCLEVBQU9qSyxVQUFVOFUsVUFBWSxTQUFvQnpnQixFQUFPd1osRUFBUWdGLEdBTTlELE9BTEF4ZSxHQUFTQSxFQUNUd1osS0FBb0IsRUFDZmdGLEdBQVVKLEVBQVM1USxLQUFNeE4sRUFBT3daLEVBQVEsRUFBRyxLQUFPLEtBQ25EeFosRUFBUSxJQUFHQSxFQUFRLElBQU9BLEVBQVEsR0FDdEN3TixLQUFLZ00sR0FBbUIsSUFBUnhaLEVBQ1R3WixFQUFTLEdBR2xCNUQsRUFBT2pLLFVBQVUrVSxhQUFlLFNBQXVCMWdCLEVBQU93WixFQUFRZ0YsR0FNcEUsT0FMQXhlLEdBQVNBLEVBQ1R3WixLQUFvQixFQUNmZ0YsR0FBVUosRUFBUzVRLEtBQU14TixFQUFPd1osRUFBUSxFQUFHLE9BQVMsT0FDekRoTSxLQUFLZ00sR0FBbUIsSUFBUnhaLEVBQ2hCd04sS0FBS2dNLEVBQVMsR0FBTXhaLElBQVUsRUFDdkJ3WixFQUFTLEdBR2xCNUQsRUFBT2pLLFVBQVVnVixhQUFlLFNBQXVCM2dCLEVBQU93WixFQUFRZ0YsR0FNcEUsT0FMQXhlLEdBQVNBLEVBQ1R3WixLQUFvQixFQUNmZ0YsR0FBVUosRUFBUzVRLEtBQU14TixFQUFPd1osRUFBUSxFQUFHLE9BQVMsT0FDekRoTSxLQUFLZ00sR0FBV3haLElBQVUsRUFDMUJ3TixLQUFLZ00sRUFBUyxHQUFjLElBQVJ4WixFQUNid1osRUFBUyxHQUdsQjVELEVBQU9qSyxVQUFVaVYsYUFBZSxTQUF1QjVnQixFQUFPd1osRUFBUWdGLEdBUXBFLE9BUEF4ZSxHQUFTQSxFQUNUd1osS0FBb0IsRUFDZmdGLEdBQVVKLEVBQVM1USxLQUFNeE4sRUFBT3daLEVBQVEsRUFBRyxZQUFhLFlBQzdEaE0sS0FBS2dNLEdBQW1CLElBQVJ4WixFQUNoQndOLEtBQUtnTSxFQUFTLEdBQU14WixJQUFVLEVBQzlCd04sS0FBS2dNLEVBQVMsR0FBTXhaLElBQVUsR0FDOUJ3TixLQUFLZ00sRUFBUyxHQUFNeFosSUFBVSxHQUN2QndaLEVBQVMsR0FHbEI1RCxFQUFPakssVUFBVWtWLGFBQWUsU0FBdUI3Z0IsRUFBT3daLEVBQVFnRixHQVNwRSxPQVJBeGUsR0FBU0EsRUFDVHdaLEtBQW9CLEVBQ2ZnRixHQUFVSixFQUFTNVEsS0FBTXhOLEVBQU93WixFQUFRLEVBQUcsWUFBYSxZQUN6RHhaLEVBQVEsSUFBR0EsRUFBUSxXQUFhQSxFQUFRLEdBQzVDd04sS0FBS2dNLEdBQVd4WixJQUFVLEdBQzFCd04sS0FBS2dNLEVBQVMsR0FBTXhaLElBQVUsR0FDOUJ3TixLQUFLZ00sRUFBUyxHQUFNeFosSUFBVSxFQUM5QndOLEtBQUtnTSxFQUFTLEdBQWMsSUFBUnhaLEVBQ2J3WixFQUFTLEdBa0JsQjVELEVBQU9qSyxVQUFVbVYsYUFBZSxTQUF1QjlnQixFQUFPd1osRUFBUWdGLEdBQ3BFLE9BQU9GLEVBQVc5USxLQUFNeE4sRUFBT3daLEdBQVEsRUFBTWdGLElBRy9DNUksRUFBT2pLLFVBQVVvVixhQUFlLFNBQXVCL2dCLEVBQU93WixFQUFRZ0YsR0FDcEUsT0FBT0YsRUFBVzlRLEtBQU14TixFQUFPd1osR0FBUSxFQUFPZ0YsSUFhaEQ1SSxFQUFPakssVUFBVXFWLGNBQWdCLFNBQXdCaGhCLEVBQU93WixFQUFRZ0YsR0FDdEUsT0FBT0MsRUFBWWpSLEtBQU14TixFQUFPd1osR0FBUSxFQUFNZ0YsSUFHaEQ1SSxFQUFPakssVUFBVXNWLGNBQWdCLFNBQXdCamhCLEVBQU93WixFQUFRZ0YsR0FDdEUsT0FBT0MsRUFBWWpSLEtBQU14TixFQUFPd1osR0FBUSxFQUFPZ0YsSUFJakQ1SSxFQUFPakssVUFBVXdMLEtBQU8sU0FBZW1HLEVBQVE0RCxFQUFhM0wsRUFBT0MsR0FRakUsR0FQS0QsSUFBT0EsRUFBUSxHQUNmQyxHQUFlLElBQVJBLElBQVdBLEVBQU1oSSxLQUFLMU8sUUFDOUJvaUIsR0FBZTVELEVBQU94ZSxTQUFRb2lCLEVBQWM1RCxFQUFPeGUsUUFDbERvaUIsSUFBYUEsRUFBYyxHQUM1QjFMLEVBQU0sR0FBS0EsRUFBTUQsSUFBT0MsRUFBTUQsR0FHOUJDLElBQVFELEVBQU8sT0FBTyxFQUMxQixHQUFzQixJQUFsQitILEVBQU94ZSxRQUFnQyxJQUFoQjBPLEtBQUsxTyxPQUFjLE9BQU8sRUFHckQsR0FBSW9pQixFQUFjLEVBQ2hCLE1BQU0sSUFBSWhMLFdBQVcsNkJBRXZCLEdBQUlYLEVBQVEsR0FBS0EsR0FBUy9ILEtBQUsxTyxPQUFRLE1BQU0sSUFBSW9YLFdBQVcsNkJBQzVELEdBQUlWLEVBQU0sRUFBRyxNQUFNLElBQUlVLFdBQVcsMkJBRzlCVixFQUFNaEksS0FBSzFPLFNBQVEwVyxFQUFNaEksS0FBSzFPLFFBQzlCd2UsRUFBT3hlLE9BQVNvaUIsRUFBYzFMLEVBQU1ELElBQ3RDQyxFQUFNOEgsRUFBT3hlLE9BQVNvaUIsRUFBYzNMLEdBR3RDLElBQ0lyVyxFQURBdVYsRUFBTWUsRUFBTUQsRUFHaEIsR0FBSS9ILE9BQVM4UCxHQUFVL0gsRUFBUTJMLEdBQWVBLEVBQWMxTCxFQUUxRCxJQUFLdFcsRUFBSXVWLEVBQU0sRUFBR3ZWLEdBQUssSUFBS0EsRUFDMUJvZSxFQUFPcGUsRUFBSWdpQixHQUFlMVQsS0FBS3RPLEVBQUlxVyxRQUVoQyxHQUFJZCxFQUFNLElBRWYsSUFBS3ZWLEVBQUksRUFBR0EsRUFBSXVWLElBQU92VixFQUNyQm9lLEVBQU9wZSxFQUFJZ2lCLEdBQWUxVCxLQUFLdE8sRUFBSXFXLFFBR3JDRixXQUFXMUosVUFBVXdWLElBQUluVixLQUN2QnNSLEVBQ0E5UCxLQUFLbVIsU0FBU3BKLEVBQU9BLEVBQVFkLEdBQzdCeU0sR0FJSixPQUFPek0sR0FPVG1CLEVBQU9qSyxVQUFVeVEsS0FBTyxTQUFleEQsRUFBS3JELEVBQU9DLEVBQUtvQixHQUV0RCxHQUFtQixpQkFBUmdDLEVBQWtCLENBUzNCLEdBUnFCLGlCQUFWckQsR0FDVHFCLEVBQVdyQixFQUNYQSxFQUFRLEVBQ1JDLEVBQU1oSSxLQUFLMU8sUUFDYSxpQkFBUjBXLElBQ2hCb0IsRUFBV3BCLEVBQ1hBLEVBQU1oSSxLQUFLMU8sUUFFTSxJQUFmOFosRUFBSTlaLE9BQWMsQ0FDcEIsSUFBSXdXLEVBQU9zRCxFQUFJakUsV0FBVyxHQUN0QlcsRUFBTyxNQUNUc0QsRUFBTXRELEdBR1YsUUFBaUJsTixJQUFid08sR0FBOEMsaUJBQWJBLEVBQ25DLE1BQU0sSUFBSXJELFVBQVUsNkJBRXRCLEdBQXdCLGlCQUFicUQsSUFBMEJoQixFQUFPaUIsV0FBV0QsR0FDckQsTUFBTSxJQUFJckQsVUFBVSxxQkFBdUJxRCxPQUVyQixpQkFBUmdDLElBQ2hCQSxHQUFZLEtBSWQsR0FBSXJELEVBQVEsR0FBSy9ILEtBQUsxTyxPQUFTeVcsR0FBUy9ILEtBQUsxTyxPQUFTMFcsRUFDcEQsTUFBTSxJQUFJVSxXQUFXLHNCQUd2QixHQUFJVixHQUFPRCxFQUNULE9BQU8vSCxLQVFULElBQUl0TyxFQUNKLEdBTkFxVyxLQUFrQixFQUNsQkMsT0FBY3BOLElBQVJvTixFQUFvQmhJLEtBQUsxTyxPQUFTMFcsSUFBUSxFQUUzQ29ELElBQUtBLEVBQU0sR0FHRyxpQkFBUkEsRUFDVCxJQUFLMVosRUFBSXFXLEVBQU9yVyxFQUFJc1csSUFBT3RXLEVBQ3pCc08sS0FBS3RPLEdBQUswWixNQUVQLENBQ0wsSUFBSXFGLEVBQVFySSxFQUFPcUIsU0FBUzJCLEdBQ3hCQSxFQUNBLElBQUloRCxFQUFPZ0QsRUFBS2hDLEdBQ2hCbkMsRUFBTXdKLEVBQU1uZixPQUNoQixJQUFLSSxFQUFJLEVBQUdBLEVBQUlzVyxFQUFNRCxJQUFTclcsRUFDN0JzTyxLQUFLdE8sRUFBSXFXLEdBQVMwSSxFQUFNL2UsRUFBSXVWLEdBSWhDLE9BQU9qSCxNQU1ULElBQUk0VCxFQUFvQixvQkFtQnhCLFNBQVN4SixFQUFhakIsRUFBUTdULEdBRTVCLElBQUlxWSxFQURKclksRUFBUUEsR0FBU3VlLElBTWpCLElBSkEsSUFBSXZpQixFQUFTNlgsRUFBTzdYLE9BQ2hCd2lCLEVBQWdCLEtBQ2hCckQsRUFBUSxHQUVIL2UsRUFBSSxFQUFHQSxFQUFJSixJQUFVSSxFQUFHLENBSS9CLElBSEFpYyxFQUFZeEUsRUFBT2hDLFdBQVd6VixJQUdkLE9BQVVpYyxFQUFZLE1BQVEsQ0FFNUMsSUFBS21HLEVBQWUsQ0FFbEIsR0FBSW5HLEVBQVksTUFBUSxFQUVqQnJZLEdBQVMsSUFBTSxHQUFHbWIsRUFBTXhVLEtBQUssSUFBTSxJQUFNLEtBQzlDLFNBQ0ssR0FBSXZLLEVBQUksSUFBTUosRUFBUSxFQUV0QmdFLEdBQVMsSUFBTSxHQUFHbWIsRUFBTXhVLEtBQUssSUFBTSxJQUFNLEtBQzlDLFNBSUY2WCxFQUFnQm5HLEVBRWhCLFNBSUYsR0FBSUEsRUFBWSxNQUFRLEVBQ2pCclksR0FBUyxJQUFNLEdBQUdtYixFQUFNeFUsS0FBSyxJQUFNLElBQU0sS0FDOUM2WCxFQUFnQm5HLEVBQ2hCLFNBSUZBLEVBQWtFLE9BQXJEbUcsRUFBZ0IsT0FBVSxHQUFLbkcsRUFBWSxZQUMvQ21HLElBRUp4ZSxHQUFTLElBQU0sR0FBR21iLEVBQU14VSxLQUFLLElBQU0sSUFBTSxLQU1oRCxHQUhBNlgsRUFBZ0IsS0FHWm5HLEVBQVksSUFBTSxDQUNwQixJQUFLclksR0FBUyxHQUFLLEVBQUcsTUFDdEJtYixFQUFNeFUsS0FBSzBSLFFBQ04sR0FBSUEsRUFBWSxLQUFPLENBQzVCLElBQUtyWSxHQUFTLEdBQUssRUFBRyxNQUN0Qm1iLEVBQU14VSxLQUNKMFIsR0FBYSxFQUFNLElBQ1AsR0FBWkEsRUFBbUIsVUFFaEIsR0FBSUEsRUFBWSxNQUFTLENBQzlCLElBQUtyWSxHQUFTLEdBQUssRUFBRyxNQUN0Qm1iLEVBQU14VSxLQUNKMFIsR0FBYSxHQUFNLElBQ25CQSxHQUFhLEVBQU0sR0FBTyxJQUNkLEdBQVpBLEVBQW1CLFNBRWhCLE1BQUlBLEVBQVksU0FTckIsTUFBTSxJQUFJMVosTUFBTSxzQkFSaEIsSUFBS3FCLEdBQVMsR0FBSyxFQUFHLE1BQ3RCbWIsRUFBTXhVLEtBQ0owUixHQUFhLEdBQU8sSUFDcEJBLEdBQWEsR0FBTSxHQUFPLElBQzFCQSxHQUFhLEVBQU0sR0FBTyxJQUNkLEdBQVpBLEVBQW1CLE1BT3pCLE9BQU84QyxFQTRCVCxTQUFTcEcsRUFBZXFDLEdBQ3RCLE9BQU94RSxFQUFPdkIsWUEzSGhCLFNBQXNCK0YsR0FJcEIsSUFGQUEsRUFBTUEsRUFBSXFILE9BQU9DLFFBQVFKLEVBQW1CLEtBRXBDdGlCLE9BQVMsRUFBRyxNQUFPLEdBRTNCLEtBQU9vYixFQUFJcGIsT0FBUyxHQUFNLEdBQ3hCb2IsR0FBWSxJQUVkLE9BQU9BLEVBa0htQnVILENBQVl2SCxJQUd4QyxTQUFTRixFQUFZMEgsRUFBS0MsRUFBS25JLEVBQVExYSxHQUNyQyxJQUFLLElBQUlJLEVBQUksRUFBR0EsRUFBSUosS0FDYkksRUFBSXNhLEdBQVVtSSxFQUFJN2lCLFFBQVlJLEdBQUt3aUIsRUFBSTVpQixVQURoQkksRUFFNUJ5aUIsRUFBSXppQixFQUFJc2EsR0FBVWtJLEVBQUl4aUIsR0FFeEIsT0FBT0EsRUFLVCxTQUFTcVgsRUFBZTVELEdBQ3RCLE9BQU9BLGFBQWVpUCxhQUNaLE1BQVBqUCxHQUFrQyxNQUFuQkEsRUFBSTNNLGFBQWdELGdCQUF6QjJNLEVBQUkzTSxZQUFZZ0YsTUFDL0IsaUJBQW5CMkgsRUFBSWtCLFdBSWpCLFNBQVN1RCxFQUFtQnpFLEdBQzFCLE1BQXNDLG1CQUF2QmlQLFlBQVlDLFFBQTBCRCxZQUFZQyxPQUFPbFAsR0FHMUUsU0FBUzBFLEVBQWExRSxHQUNwQixPQUFPQSxHQUFRQSxJLGVDaHJEakIsRUFBUSxNQUNSM0YsRUFBT25OLFFBQVUsRUFBakIscUIsU0NEQW1OLEVBQU9uTixRQUFVLFNBQVVpaUIsR0FDekIsR0FBaUIsbUJBQU5BLEVBQWtCLE1BQU12TyxVQUFVdU8sRUFBSyx1QkFDbEQsT0FBT0EsSSxjQ0ZULElBQUlDLEVBQU0sRUFBUSxNQUNsQi9VLEVBQU9uTixRQUFVLFNBQVVpaUIsRUFBSUUsR0FDN0IsR0FBaUIsaUJBQU5GLEdBQTZCLFVBQVhDLEVBQUlELEdBQWlCLE1BQU12TyxVQUFVeU8sR0FDbEUsT0FBUUYsSSxlQ0ZWLElBQUlHLEVBQWMsRUFBUSxLQUFSLENBQWtCLGVBQ2hDQyxFQUFhbmhCLE1BQU00SyxVQUNRdkQsTUFBM0I4WixFQUFXRCxJQUEyQixFQUFRLElBQVIsQ0FBbUJDLEVBQVlELEVBQWEsSUFDdEZqVixFQUFPbk4sUUFBVSxTQUFVYSxHQUN6QndoQixFQUFXRCxHQUFhdmhCLElBQU8sSSw0QkNKakMsSUFBSXloQixFQUFLLEVBQVEsS0FBUixFQUF3QixHQUlqQ25WLEVBQU9uTixRQUFVLFNBQVV1aUIsRUFBR0MsRUFBT0MsR0FDbkMsT0FBT0QsR0FBU0MsRUFBVUgsRUFBR0MsRUFBR0MsR0FBT3ZqQixPQUFTLEssU0NObERrTyxFQUFPbk4sUUFBVSxTQUFVaWlCLEVBQUlTLEVBQWF2WCxFQUFNd1gsR0FDaEQsS0FBTVYsYUFBY1MsU0FBb0NuYSxJQUFuQm9hLEdBQWdDQSxLQUFrQlYsRUFDckYsTUFBTXZPLFVBQVV2SSxFQUFPLDJCQUN2QixPQUFPOFcsSSxlQ0hYLElBQUloYyxFQUFXLEVBQVEsTUFDdkJrSCxFQUFPbk4sUUFBVSxTQUFVaWlCLEdBQ3pCLElBQUtoYyxFQUFTZ2MsR0FBSyxNQUFNdk8sVUFBVXVPLEVBQUssc0JBQ3hDLE9BQU9BLEksNEJDRFQsSUFBSVcsRUFBVyxFQUFRLE1BQ25CQyxFQUFrQixFQUFRLE1BQzFCQyxFQUFXLEVBQVEsTUFFdkIzVixFQUFPbk4sUUFBVSxHQUFHK2lCLFlBQWMsU0FBb0J0RixFQUFrQi9ILEdBQ3RFLElBQUloSyxFQUFJa1gsRUFBU2pWLE1BQ2JpSCxFQUFNa08sRUFBU3BYLEVBQUV6TSxRQUNqQitqQixFQUFLSCxFQUFnQnBGLEVBQVE3SSxHQUM3QjZCLEVBQU9vTSxFQUFnQm5OLEVBQU9kLEdBQzlCZSxFQUFNeUgsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLEVBQzVDMGEsRUFBUS9qQixLQUFLNmIsVUFBYXhTLElBQVJvTixFQUFvQmYsRUFBTWlPLEVBQWdCbE4sRUFBS2YsSUFBUTZCLEVBQU03QixFQUFNb08sR0FDckZFLEVBQU0sRUFNVixJQUxJek0sRUFBT3VNLEdBQU1BLEVBQUt2TSxFQUFPd00sSUFDM0JDLEdBQU8sRUFDUHpNLEdBQVF3TSxFQUFRLEVBQ2hCRCxHQUFNQyxFQUFRLEdBRVRBLEtBQVUsR0FDWHhNLEtBQVEvSyxFQUFHQSxFQUFFc1gsR0FBTXRYLEVBQUUrSyxVQUNiL0ssRUFBRXNYLEdBQ2RBLEdBQU1FLEVBQ056TSxHQUFReU0sRUFDUixPQUFPeFgsSSw0QkN0QlgsSUFBSWtYLEVBQVcsRUFBUSxNQUNuQkMsRUFBa0IsRUFBUSxNQUMxQkMsRUFBVyxFQUFRLE1BQ3ZCM1YsRUFBT25OLFFBQVUsU0FBY0csR0FPN0IsSUFOQSxJQUFJdUwsRUFBSWtYLEVBQVNqVixNQUNiMU8sRUFBUzZqQixFQUFTcFgsRUFBRXpNLFFBQ3BCa2tCLEVBQU8vRixVQUFVbmUsT0FDakJ1akIsRUFBUUssRUFBZ0JNLEVBQU8sRUFBSS9GLFVBQVUsUUFBSzdVLEVBQVd0SixHQUM3RDBXLEVBQU13TixFQUFPLEVBQUkvRixVQUFVLFFBQUs3VSxFQUNoQzZhLE9BQWlCN2EsSUFBUm9OLEVBQW9CMVcsRUFBUzRqQixFQUFnQmxOLEVBQUsxVyxHQUN4RG1rQixFQUFTWixHQUFPOVcsRUFBRThXLEtBQVdyaUIsRUFDcEMsT0FBT3VMLEksZUNiVCxJQUFJMlgsRUFBUSxFQUFRLE1BRXBCbFcsRUFBT25OLFFBQVUsU0FBVXNQLEVBQU1nVSxHQUMvQixJQUFJN1QsRUFBUyxHQUViLE9BREE0VCxFQUFNL1QsR0FBTSxFQUFPRyxFQUFPN0YsS0FBTTZGLEVBQVE2VCxHQUNqQzdULEksZUNIVCxJQUFJOFQsRUFBWSxFQUFRLE1BQ3BCVCxFQUFXLEVBQVEsTUFDbkJELEVBQWtCLEVBQVEsTUFDOUIxVixFQUFPbk4sUUFBVSxTQUFVd2pCLEdBQ3pCLE9BQU8sU0FBVUMsRUFBT0MsRUFBSUMsR0FDMUIsSUFHSXhqQixFQUhBdUwsRUFBSTZYLEVBQVVFLEdBQ2R4a0IsRUFBUzZqQixFQUFTcFgsRUFBRXpNLFFBQ3BCdWpCLEVBQVFLLEVBQWdCYyxFQUFXMWtCLEdBSXZDLEdBQUl1a0IsR0FBZUUsR0FBTUEsR0FBSSxLQUFPemtCLEVBQVN1akIsR0FHM0MsSUFGQXJpQixFQUFRdUwsRUFBRThXLE9BRUdyaUIsRUFBTyxPQUFPLE9BRXRCLEtBQU1sQixFQUFTdWpCLEVBQU9BLElBQVMsSUFBSWdCLEdBQWVoQixLQUFTOVcsSUFDNURBLEVBQUU4VyxLQUFXa0IsRUFBSSxPQUFPRixHQUFlaEIsR0FBUyxFQUNwRCxPQUFRZ0IsSUFBZ0IsSyxlQ2I5QixJQUFJSSxFQUFNLEVBQVEsTUFDZEMsRUFBVSxFQUFRLE1BQ2xCakIsRUFBVyxFQUFRLE1BQ25CRSxFQUFXLEVBQVEsTUFDbkJnQixFQUFNLEVBQVEsTUFDbEIzVyxFQUFPbk4sUUFBVSxTQUFVK2pCLEVBQU1DLEdBQy9CLElBQUlDLEVBQWlCLEdBQVJGLEVBQ1RHLEVBQW9CLEdBQVJILEVBQ1pJLEVBQWtCLEdBQVJKLEVBQ1ZLLEVBQW1CLEdBQVJMLEVBQ1hNLEVBQXdCLEdBQVJOLEVBQ2hCTyxFQUFtQixHQUFSUCxHQUFhTSxFQUN4QmxXLEVBQVM2VixHQUFXRixFQUN4QixPQUFPLFNBQVVMLEVBQU9jLEVBQVlDLEdBUWxDLElBUEEsSUFNSXpMLEVBQUtpQyxFQU5MdFAsRUFBSWtYLEVBQVNhLEdBQ2JyVSxFQUFPeVUsRUFBUW5ZLEdBQ2YrWSxFQUFJYixFQUFJVyxFQUFZQyxFQUFNLEdBQzFCdmxCLEVBQVM2akIsRUFBUzFULEVBQUtuUSxRQUN2QnVqQixFQUFRLEVBQ1IvUyxFQUFTd1UsRUFBUzlWLEVBQU9zVixFQUFPeGtCLEdBQVVpbEIsRUFBWS9WLEVBQU9zVixFQUFPLFFBQUtsYixFQUV2RXRKLEVBQVN1akIsRUFBT0EsSUFBUyxJQUFJOEIsR0FBWTlCLEtBQVNwVCxLQUV0RDRMLEVBQU15SixFQUROMUwsRUFBTTNKLEVBQUtvVCxHQUNFQSxFQUFPOVcsR0FDaEJxWSxHQUNGLEdBQUlFLEVBQVF4VSxFQUFPK1MsR0FBU3hILE9BQ3ZCLEdBQUlBLEVBQUssT0FBUStJLEdBQ3BCLEtBQUssRUFBRyxPQUFPLEVBQ2YsS0FBSyxFQUFHLE9BQU9oTCxFQUNmLEtBQUssRUFBRyxPQUFPeUosRUFDZixLQUFLLEVBQUcvUyxFQUFPN0YsS0FBS21QLFFBQ2YsR0FBSXFMLEVBQVUsT0FBTyxFQUdoQyxPQUFPQyxHQUFpQixFQUFJRixHQUFXQyxFQUFXQSxFQUFXM1UsSyxlQ3pDakUsSUFBSWlWLEVBQVksRUFBUSxNQUNwQjlCLEVBQVcsRUFBUSxNQUNuQmlCLEVBQVUsRUFBUSxNQUNsQmYsRUFBVyxFQUFRLE1BRXZCM1YsRUFBT25OLFFBQVUsU0FBVXdrQixFQUFNRCxFQUFZcEIsRUFBTXdCLEVBQU1DLEdBQ3ZERixFQUFVSCxHQUNWLElBQUk3WSxFQUFJa1gsRUFBUzRCLEdBQ2JwVixFQUFPeVUsRUFBUW5ZLEdBQ2Z6TSxFQUFTNmpCLEVBQVNwWCxFQUFFek0sUUFDcEJ1akIsRUFBUW9DLEVBQVUzbEIsRUFBUyxFQUFJLEVBQy9CSSxFQUFJdWxCLEdBQVcsRUFBSSxFQUN2QixHQUFJekIsRUFBTyxFQUFHLE9BQVMsQ0FDckIsR0FBSVgsS0FBU3BULEVBQU0sQ0FDakJ1VixFQUFPdlYsRUFBS29ULEdBQ1pBLEdBQVNuakIsRUFDVCxNQUdGLEdBREFtakIsR0FBU25qQixFQUNMdWxCLEVBQVVwQyxFQUFRLEVBQUl2akIsR0FBVXVqQixFQUNsQyxNQUFNOU8sVUFBVSwrQ0FHcEIsS0FBTWtSLEVBQVVwQyxHQUFTLEVBQUl2akIsRUFBU3VqQixFQUFPQSxHQUFTbmpCLEVBQU9takIsS0FBU3BULElBQ3BFdVYsRUFBT0osRUFBV0ksRUFBTXZWLEVBQUtvVCxHQUFRQSxFQUFPOVcsSUFFOUMsT0FBT2laLEksZUMxQlQsSUFBSTFlLEVBQVcsRUFBUSxNQUNuQjlFLEVBQVUsRUFBUSxNQUNsQjBqQixFQUFVLEVBQVEsS0FBUixDQUFrQixXQUVoQzFYLEVBQU9uTixRQUFVLFNBQVU4a0IsR0FDekIsSUFBSUMsRUFTRixPQVJFNWpCLEVBQVEyakIsS0FHTSxtQkFGaEJDLEVBQUlELEVBQVMzZSxjQUVrQjRlLElBQU03akIsUUFBU0MsRUFBUTRqQixFQUFFalosYUFBYWlaLE9BQUl4YyxHQUNyRXRDLEVBQVM4ZSxJQUVELFFBRFZBLEVBQUlBLEVBQUVGLE1BQ1VFLE9BQUl4YyxTQUVUQSxJQUFOd2MsRUFBa0I3akIsTUFBUTZqQixJLGVDYnJDLElBQUlDLEVBQXFCLEVBQVEsTUFFakM3WCxFQUFPbk4sUUFBVSxTQUFVOGtCLEVBQVU3bEIsR0FDbkMsT0FBTyxJQUFLK2xCLEVBQW1CRixHQUF4QixDQUFtQzdsQixLLDRCQ0g1QyxJQUFJeWxCLEVBQVksRUFBUSxNQUNwQnplLEVBQVcsRUFBUSxNQUNuQitNLEVBQVMsRUFBUSxNQUNqQmlTLEVBQWEsR0FBR3ZqQixNQUNoQndqQixFQUFZLEdBRVpDLEVBQVksU0FBVUMsRUFBR3hRLEVBQUt5USxHQUNoQyxLQUFNelEsS0FBT3NRLEdBQVksQ0FDdkIsSUFBSyxJQUFJdk0sRUFBSSxHQUFJdFosRUFBSSxFQUFHQSxFQUFJdVYsRUFBS3ZWLElBQUtzWixFQUFFdFosR0FBSyxLQUFPQSxFQUFJLElBRXhENmxCLEVBQVV0USxHQUFPMUksU0FBUyxNQUFPLGdCQUFrQnlNLEVBQUVwRCxLQUFLLEtBQU8sS0FDakUsT0FBTzJQLEVBQVV0USxHQUFLd1EsRUFBR0MsSUFHN0JsWSxFQUFPbk4sUUFBVWtNLFNBQVNFLE1BQVEsU0FBY29ZLEdBQzlDLElBQUkzUixFQUFLNlIsRUFBVS9XLE1BQ2YyWCxFQUFXTCxFQUFXOVksS0FBS2lSLFVBQVcsR0FDdENtSSxFQUFRLFdBQ1YsSUFBSUYsRUFBT0MsRUFBU3hJLE9BQU9tSSxFQUFXOVksS0FBS2lSLFlBQzNDLE9BQU96UCxnQkFBZ0I0WCxFQUFRSixFQUFVdFMsRUFBSXdTLEVBQUtwbUIsT0FBUW9tQixHQUFRclMsRUFBT0gsRUFBSXdTLEVBQU1iLElBR3JGLE9BREl2ZSxFQUFTNE0sRUFBRy9HLGFBQVl5WixFQUFNelosVUFBWStHLEVBQUcvRyxXQUMxQ3laLEksZUN0QlQsSUFBSXJELEVBQU0sRUFBUSxNQUNkc0QsRUFBTSxFQUFRLEtBQVIsQ0FBa0IsZUFFeEJDLEVBQWtELGFBQTVDdkQsRUFBSSxXQUFjLE9BQU85RSxVQUFyQixJQVNkalEsRUFBT25OLFFBQVUsU0FBVWlpQixHQUN6QixJQUFJdlcsRUFBR2dhLEVBQUdDLEVBQ1YsWUFBY3BkLElBQVAwWixFQUFtQixZQUFxQixPQUFQQSxFQUFjLE9BRU4saUJBQXBDeUQsRUFWRCxTQUFVekQsRUFBSXBoQixHQUN6QixJQUNFLE9BQU9vaEIsRUFBR3BoQixHQUNWLE1BQU9tYixLQU9PNEosQ0FBT2xhLEVBQUloTCxPQUFPdWhCLEdBQUt1RCxJQUFvQkUsRUFFdkRELEVBQU12RCxFQUFJeFcsR0FFTSxXQUFmaWEsRUFBSXpELEVBQUl4VyxLQUFzQyxtQkFBWkEsRUFBRW1hLE9BQXVCLFlBQWNGLEksU0NyQmhGLElBQUloVyxFQUFXLEdBQUdBLFNBRWxCeEMsRUFBT25OLFFBQVUsU0FBVWlpQixHQUN6QixPQUFPdFMsRUFBU3hELEtBQUs4VixHQUFJdmdCLE1BQU0sR0FBSSxLLDRCQ0ZyQyxJQUFJb2tCLEVBQUssVUFDTDNYLEVBQVMsRUFBUSxNQUNqQjRYLEVBQWMsRUFBUSxNQUN0Qm5DLEVBQU0sRUFBUSxNQUNkb0MsRUFBYSxFQUFRLE1BQ3JCM0MsRUFBUSxFQUFRLE1BQ2hCNEMsRUFBYyxFQUFRLE1BQ3RCQyxFQUFPLEVBQVEsTUFDZkMsRUFBYSxFQUFRLE1BQ3JCQyxFQUFjLEVBQVEsTUFDdEJDLEVBQVUsZ0JBQ1ZDLEVBQVcsRUFBUSxNQUNuQkMsRUFBT0gsRUFBYyxLQUFPLE9BRTVCSSxFQUFXLFNBQVVoQyxFQUFNM2pCLEdBRTdCLElBQ0l1USxFQURBb1IsRUFBUTZELEVBQVF4bEIsR0FFcEIsR0FBYyxNQUFWMmhCLEVBQWUsT0FBT2dDLEVBQUtuaUIsR0FBR21nQixHQUVsQyxJQUFLcFIsRUFBUW9ULEVBQUtpQyxHQUFJclYsRUFBT0EsRUFBUUEsRUFBTXVILEVBQ3pDLEdBQUl2SCxFQUFNbEssR0FBS3JHLEVBQUssT0FBT3VRLEdBSS9CakUsRUFBT25OLFFBQVUsQ0FDZjBtQixlQUFnQixTQUFVQyxFQUFTQyxFQUFNM0MsRUFBUTRDLEdBQy9DLElBQUk5QixFQUFJNEIsR0FBUSxTQUFVbkMsRUFBTXZTLEdBQzlCK1QsRUFBV3hCLEVBQU1PLEVBQUc2QixFQUFNLE1BQzFCcEMsRUFBS3NDLEdBQUtGLEVBQ1ZwQyxFQUFLbmlCLEdBQUs4TCxFQUFPLE1BQ2pCcVcsRUFBS2lDLFFBQUtsZSxFQUNWaWMsRUFBS3VDLFFBQUt4ZSxFQUNWaWMsRUFBSytCLEdBQVEsRUFDR2hlLE1BQVowSixHQUF1Qm9SLEVBQU1wUixFQUFVZ1MsRUFBUU8sRUFBS3FDLEdBQVFyQyxNQXNEbEUsT0FwREF1QixFQUFZaEIsRUFBRWpaLFVBQVcsQ0FHdkJrYixNQUFPLFdBQ0wsSUFBSyxJQUFJeEMsRUFBTzhCLEVBQVMzWSxLQUFNaVosR0FBT2xQLEVBQU84TSxFQUFLbmlCLEdBQUkrTyxFQUFRb1QsRUFBS2lDLEdBQUlyVixFQUFPQSxFQUFRQSxFQUFNdUgsRUFDMUZ2SCxFQUFNNlYsR0FBSSxFQUNON1YsRUFBTThWLElBQUc5VixFQUFNOFYsRUFBSTlWLEVBQU04VixFQUFFdk8sT0FBSXBRLFVBQzVCbVAsRUFBS3RHLEVBQU0vUixHQUVwQm1sQixFQUFLaUMsR0FBS2pDLEVBQUt1QyxRQUFLeGUsRUFDcEJpYyxFQUFLK0IsR0FBUSxHQUlmLE9BQVUsU0FBVTFsQixHQUNsQixJQUFJMmpCLEVBQU84QixFQUFTM1ksS0FBTWlaLEdBQ3RCeFYsRUFBUW9WLEVBQVNoQyxFQUFNM2pCLEdBQzNCLEdBQUl1USxFQUFPLENBQ1QsSUFBSTdCLEVBQU82QixFQUFNdUgsRUFDYnpJLEVBQU9rQixFQUFNOFYsU0FDVjFDLEVBQUtuaUIsR0FBRytPLEVBQU0vUixHQUNyQitSLEVBQU02VixHQUFJLEVBQ04vVyxJQUFNQSxFQUFLeUksRUFBSXBKLEdBQ2ZBLElBQU1BLEVBQUsyWCxFQUFJaFgsR0FDZnNVLEVBQUtpQyxJQUFNclYsSUFBT29ULEVBQUtpQyxHQUFLbFgsR0FDNUJpVixFQUFLdUMsSUFBTTNWLElBQU9vVCxFQUFLdUMsR0FBSzdXLEdBQ2hDc1UsRUFBSytCLEtBQ0wsUUFBU25WLEdBSWJ4USxRQUFTLFNBQWlCMmpCLEdBQ3hCK0IsRUFBUzNZLEtBQU1pWixHQUdmLElBRkEsSUFDSXhWLEVBREFxVCxFQUFJYixFQUFJVyxFQUFZbkgsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLEVBQVcsR0FFbEU2SSxFQUFRQSxFQUFRQSxFQUFNdUgsRUFBSWhMLEtBQUs4WSxJQUdwQyxJQUZBaEMsRUFBRXJULEVBQU0rVixFQUFHL1YsRUFBTWxLLEVBQUd5RyxNQUVieUQsR0FBU0EsRUFBTTZWLEdBQUc3VixFQUFRQSxFQUFNOFYsR0FLM0NFLElBQUssU0FBYXZtQixHQUNoQixRQUFTMmxCLEVBQVNGLEVBQVMzWSxLQUFNaVosR0FBTy9sQixNQUd4Q3VsQixHQUFhTixFQUFHZixFQUFFalosVUFBVyxPQUFRLENBQ3ZDdWIsSUFBSyxXQUNILE9BQU9mLEVBQVMzWSxLQUFNaVosR0FBTUwsTUFHekJ4QixHQUVUdUMsSUFBSyxTQUFVOUMsRUFBTTNqQixFQUFLVixHQUN4QixJQUNJK1AsRUFBTXNTLEVBRE5wUixFQUFRb1YsRUFBU2hDLEVBQU0zakIsR0FvQnpCLE9BakJFdVEsRUFDRkEsRUFBTStWLEVBQUlobkIsR0FHVnFrQixFQUFLdUMsR0FBSzNWLEVBQVEsQ0FDaEIvUixFQUFHbWpCLEVBQVE2RCxFQUFReGxCLEdBQUssR0FDeEJxRyxFQUFHckcsRUFDSHNtQixFQUFHaG5CLEVBQ0grbUIsRUFBR2hYLEVBQU9zVSxFQUFLdUMsR0FDZnBPLE9BQUdwUSxFQUNIMGUsR0FBRyxHQUVBekMsRUFBS2lDLEtBQUlqQyxFQUFLaUMsR0FBS3JWLEdBQ3BCbEIsSUFBTUEsRUFBS3lJLEVBQUl2SCxHQUNuQm9ULEVBQUsrQixLQUVTLE1BQVYvRCxJQUFlZ0MsRUFBS25pQixHQUFHbWdCLEdBQVNwUixJQUM3Qm9ULEdBRVhnQyxTQUFVQSxFQUNWZSxVQUFXLFNBQVV4QyxFQUFHNkIsRUFBTTNDLEdBRzVCZ0MsRUFBWWxCLEVBQUc2QixHQUFNLFNBQVVZLEVBQVVDLEdBQ3ZDOVosS0FBS21aLEdBQUtSLEVBQVNrQixFQUFVWixHQUM3QmpaLEtBQUsrWixHQUFLRCxFQUNWOVosS0FBS29aLFFBQUt4ZSxLQUNULFdBS0QsSUFKQSxJQUFJaWMsRUFBTzdXLEtBQ1A4WixFQUFPakQsRUFBS2tELEdBQ1p0VyxFQUFRb1QsRUFBS3VDLEdBRVYzVixHQUFTQSxFQUFNNlYsR0FBRzdWLEVBQVFBLEVBQU04VixFQUV2QyxPQUFLMUMsRUFBS3NDLEtBQVF0QyxFQUFLdUMsR0FBSzNWLEVBQVFBLEVBQVFBLEVBQU11SCxFQUFJNkwsRUFBS3NDLEdBQUdMLElBTW5DUCxFQUFLLEVBQXBCLFFBQVJ1QixFQUErQnJXLEVBQU1sSyxFQUM3QixVQUFSdWdCLEVBQWlDclcsRUFBTStWLEVBQzVCLENBQUMvVixFQUFNbEssRUFBR2tLLEVBQU0rVixLQU43QjNDLEVBQUtzQyxRQUFLdmUsRUFDSDJkLEVBQUssTUFNYmpDLEVBQVMsVUFBWSxVQUFXQSxHQUFRLEdBRzNDa0MsRUFBV1MsTSxlQzVJZixJQUFJZSxFQUFVLEVBQVEsTUFDbEJsUixFQUFPLEVBQVEsTUFDbkJ0SixFQUFPbk4sUUFBVSxTQUFVNG1CLEdBQ3pCLE9BQU8sV0FDTCxHQUFJZSxFQUFRaGEsT0FBU2laLEVBQU0sTUFBTWxULFVBQVVrVCxFQUFPLHlCQUNsRCxPQUFPblEsRUFBSzlJLFMsNEJDTGhCLElBQUlvWSxFQUFjLEVBQVEsTUFDdEI2QixFQUFVLGdCQUNWQyxFQUFXLEVBQVEsTUFDbkI1aEIsRUFBVyxFQUFRLE1BQ25CK2YsRUFBYSxFQUFRLE1BQ3JCM0MsRUFBUSxFQUFRLE1BQ2hCeUUsRUFBb0IsRUFBUSxNQUM1QkMsRUFBTyxFQUFRLE1BQ2Z6QixFQUFXLEVBQVEsTUFDbkIwQixFQUFZRixFQUFrQixHQUM5QkcsRUFBaUJILEVBQWtCLEdBQ25DNWxCLEVBQUssRUFHTGdtQixFQUFzQixTQUFVMUQsR0FDbEMsT0FBT0EsRUFBS3VDLEtBQU92QyxFQUFLdUMsR0FBSyxJQUFJb0IsSUFFL0JBLEVBQXNCLFdBQ3hCeGEsS0FBS2dQLEVBQUksSUFFUHlMLEVBQXFCLFNBQVVDLEVBQU94bkIsR0FDeEMsT0FBT21uQixFQUFVSyxFQUFNMUwsR0FBRyxTQUFVc0YsR0FDbEMsT0FBT0EsRUFBRyxLQUFPcGhCLE1BR3JCc25CLEVBQW9CcmMsVUFBWSxDQUM5QnViLElBQUssU0FBVXhtQixHQUNiLElBQUl1USxFQUFRZ1gsRUFBbUJ6YSxLQUFNOU0sR0FDckMsR0FBSXVRLEVBQU8sT0FBT0EsRUFBTSxJQUUxQmdXLElBQUssU0FBVXZtQixHQUNiLFFBQVN1bkIsRUFBbUJ6YSxLQUFNOU0sSUFFcEN5Z0IsSUFBSyxTQUFVemdCLEVBQUtWLEdBQ2xCLElBQUlpUixFQUFRZ1gsRUFBbUJ6YSxLQUFNOU0sR0FDakN1USxFQUFPQSxFQUFNLEdBQUtqUixFQUNqQndOLEtBQUtnUCxFQUFFL1MsS0FBSyxDQUFDL0ksRUFBS1YsS0FFekIsT0FBVSxTQUFVVSxHQUNsQixJQUFJMmhCLEVBQVF5RixFQUFldGEsS0FBS2dQLEdBQUcsU0FBVXNGLEdBQzNDLE9BQU9BLEVBQUcsS0FBT3BoQixLQUduQixPQURLMmhCLEdBQU83VSxLQUFLZ1AsRUFBRTJMLE9BQU85RixFQUFPLE1BQ3ZCQSxJQUlkclYsRUFBT25OLFFBQVUsQ0FDZjBtQixlQUFnQixTQUFVQyxFQUFTQyxFQUFNM0MsRUFBUTRDLEdBQy9DLElBQUk5QixFQUFJNEIsR0FBUSxTQUFVbkMsRUFBTXZTLEdBQzlCK1QsRUFBV3hCLEVBQU1PLEVBQUc2QixFQUFNLE1BQzFCcEMsRUFBS3NDLEdBQUtGLEVBQ1ZwQyxFQUFLbmlCLEdBQUtILElBQ1ZzaUIsRUFBS3VDLFFBQUt4ZSxFQUNNQSxNQUFaMEosR0FBdUJvUixFQUFNcFIsRUFBVWdTLEVBQVFPLEVBQUtxQyxHQUFRckMsTUFvQmxFLE9BbEJBdUIsRUFBWWhCLEVBQUVqWixVQUFXLENBR3ZCLE9BQVUsU0FBVWpMLEdBQ2xCLElBQUtvRixFQUFTcEYsR0FBTSxPQUFPLEVBQzNCLElBQUk2VyxFQUFPa1EsRUFBUS9tQixHQUNuQixPQUFhLElBQVQ2VyxFQUFzQndRLEVBQW9CNUIsRUFBUzNZLEtBQU1pWixJQUFlLE9BQUUvbEIsR0FDdkU2VyxHQUFRcVEsRUFBS3JRLEVBQU0vSixLQUFLdEwsWUFBY3FWLEVBQUsvSixLQUFLdEwsS0FJekQra0IsSUFBSyxTQUFhdm1CLEdBQ2hCLElBQUtvRixFQUFTcEYsR0FBTSxPQUFPLEVBQzNCLElBQUk2VyxFQUFPa1EsRUFBUS9tQixHQUNuQixPQUFhLElBQVQ2VyxFQUFzQndRLEVBQW9CNUIsRUFBUzNZLEtBQU1pWixJQUFPUSxJQUFJdm1CLEdBQ2pFNlcsR0FBUXFRLEVBQUtyUSxFQUFNL0osS0FBS3RMLE9BRzVCMGlCLEdBRVR1QyxJQUFLLFNBQVU5QyxFQUFNM2pCLEVBQUtWLEdBQ3hCLElBQUl1WCxFQUFPa1EsRUFBUUMsRUFBU2huQixJQUFNLEdBR2xDLE9BRmEsSUFBVDZXLEVBQWV3USxFQUFvQjFELEdBQU1sRCxJQUFJemdCLEVBQUtWLEdBQ2pEdVgsRUFBSzhNLEVBQUtuaUIsSUFBTWxDLEVBQ2Rxa0IsR0FFVCtELFFBQVNMLEksNEJDbEZYLElBQUk3YixFQUFTLEVBQVEsTUFDakJtYyxFQUFVLEVBQVEsTUFDbEJDLEVBQVcsRUFBUSxNQUNuQjFDLEVBQWMsRUFBUSxNQUN0QjJDLEVBQU8sRUFBUSxNQUNmckYsRUFBUSxFQUFRLE1BQ2hCMkMsRUFBYSxFQUFRLE1BQ3JCL2YsRUFBVyxFQUFRLE1BQ25CMGlCLEVBQVEsRUFBUSxNQUNoQkMsRUFBYyxFQUFRLE1BQ3RCQyxFQUFpQixFQUFRLEtBQ3pCQyxFQUFvQixFQUFRLE1BRWhDM2IsRUFBT25OLFFBQVUsU0FBVTRtQixFQUFNRCxFQUFTb0MsRUFBU0MsRUFBUS9FLEVBQVFnRixHQUNqRSxJQUFJQyxFQUFPN2MsRUFBT3VhLEdBQ2Q3QixFQUFJbUUsRUFDSnJDLEVBQVE1QyxFQUFTLE1BQVEsTUFDekJrRixFQUFRcEUsR0FBS0EsRUFBRWpaLFVBQ2ZKLEVBQUksR0FDSjBkLEVBQVksU0FBVUMsR0FDeEIsSUFBSXhXLEVBQUtzVyxFQUFNRSxHQUNmWixFQUFTVSxFQUFPRSxFQUNQLFVBQVBBLEdBRVcsT0FBUEEsRUFGYyxTQUFVMU0sR0FDMUIsUUFBT3NNLElBQVloakIsRUFBUzBXLEtBQWE5SixFQUFHMUcsS0FBS3dCLEtBQVksSUFBTmdQLEVBQVUsRUFBSUEsSUFHNUQsT0FBUDBNLEVBQWUsU0FBYTFNLEdBQzlCLE9BQU9zTSxJQUFZaGpCLEVBQVMwVyxRQUFLcFUsRUFBWXNLLEVBQUcxRyxLQUFLd0IsS0FBWSxJQUFOZ1AsRUFBVSxFQUFJQSxJQUNoRSxPQUFQME0sRUFBZSxTQUFhMU0sR0FBcUMsT0FBaEM5SixFQUFHMUcsS0FBS3dCLEtBQVksSUFBTmdQLEVBQVUsRUFBSUEsR0FBV2hQLE1BQ3hFLFNBQWFnUCxFQUFHakUsR0FBd0MsT0FBbkM3RixFQUFHMUcsS0FBS3dCLEtBQVksSUFBTmdQLEVBQVUsRUFBSUEsRUFBR2pFLEdBQVcvSyxRQUd2RSxHQUFnQixtQkFBTG9YLElBQXFCa0UsR0FBV0UsRUFBTXZvQixVQUFZK25CLEdBQU0sWUFDakUsSUFBSTVELEdBQUl1RSxVQUFVL1osV0FNYixDQUNMLElBQUlnYSxFQUFXLElBQUl4RSxFQUVmeUUsRUFBaUJELEVBQVMxQyxHQUFPb0MsRUFBVSxJQUFNLEVBQUcsSUFBTU0sRUFFMURFLEVBQXVCZCxHQUFNLFdBQWNZLEVBQVNuQyxJQUFJLE1BRXhEc0MsRUFBbUJkLEdBQVksU0FBVXRaLEdBQVEsSUFBSXlWLEVBQUV6VixNQUV2RHFhLEdBQWNWLEdBQVdOLEdBQU0sV0FJakMsSUFGQSxJQUFJaUIsRUFBWSxJQUFJN0UsRUFDaEJ2QyxFQUFRLEVBQ0xBLEtBQVNvSCxFQUFVL0MsR0FBT3JFLEVBQU9BLEdBQ3hDLE9BQVFvSCxFQUFVeEMsS0FBSyxNQUVwQnNDLEtBQ0gzRSxFQUFJNEIsR0FBUSxTQUFVbEosRUFBUXhMLEdBQzVCK1QsRUFBV3ZJLEVBQVFzSCxFQUFHNkIsR0FDdEIsSUFBSXBDLEVBQU9zRSxFQUFrQixJQUFJSSxFQUFRekwsRUFBUXNILEdBRWpELE9BRGdCeGMsTUFBWjBKLEdBQXVCb1IsRUFBTXBSLEVBQVVnUyxFQUFRTyxFQUFLcUMsR0FBUXJDLEdBQ3pEQSxNQUVQMVksVUFBWXFkLEVBQ2RBLEVBQU1oakIsWUFBYzRlLElBRWxCMEUsR0FBd0JFLEtBQzFCUCxFQUFVLFVBQ1ZBLEVBQVUsT0FDVm5GLEdBQVVtRixFQUFVLFNBRWxCTyxHQUFjSCxJQUFnQkosRUFBVXZDLEdBRXhDb0MsR0FBV0UsRUFBTW5DLGNBQWNtQyxFQUFNbkMsV0FwQ3pDakMsRUFBSWlFLEVBQU90QyxlQUFlQyxFQUFTQyxFQUFNM0MsRUFBUTRDLEdBQ2pEZCxFQUFZaEIsRUFBRWpaLFVBQVdpZCxHQUN6QkwsRUFBS21CLE1BQU8sRUE0Q2QsT0FQQWhCLEVBQWU5RCxFQUFHNkIsR0FFbEJsYixFQUFFa2IsR0FBUTdCLEVBQ1Z5RCxFQUFRQSxFQUFRc0IsRUFBSXRCLEVBQVF1QixFQUFJdkIsRUFBUXBELEdBQUtMLEdBQUttRSxHQUFPeGQsR0FFcER1ZCxHQUFTRCxFQUFPekIsVUFBVXhDLEVBQUc2QixFQUFNM0MsR0FFakNjLEksU0NuRlQsSUFBSWlGLEVBQU83YyxFQUFPbk4sUUFBVSxDQUFFaXFCLFFBQVMsVUFDckIsaUJBQVBDLE1BQWlCQSxJQUFNRixJLDRCQ0FsQyxJQUFJRyxFQUFrQixFQUFRLE1BQzFCQyxFQUFhLEVBQVEsTUFFekJqZCxFQUFPbk4sUUFBVSxTQUFVNFAsRUFBUTRTLEVBQU9yaUIsR0FDcENxaUIsS0FBUzVTLEVBQVF1YSxFQUFnQjFGLEVBQUU3VSxFQUFRNFMsRUFBTzRILEVBQVcsRUFBR2pxQixJQUMvRHlQLEVBQU80UyxHQUFTcmlCLEksZUNMdkIsSUFBSXVrQixFQUFZLEVBQVEsTUFDeEJ2WCxFQUFPbk4sUUFBVSxTQUFVNlMsRUFBSTJSLEVBQU12bEIsR0FFbkMsR0FEQXlsQixFQUFVN1IsUUFDR3RLLElBQVRpYyxFQUFvQixPQUFPM1IsRUFDL0IsT0FBUTVULEdBQ04sS0FBSyxFQUFHLE9BQU8sU0FBVTBkLEdBQ3ZCLE9BQU85SixFQUFHMUcsS0FBS3FZLEVBQU03SCxJQUV2QixLQUFLLEVBQUcsT0FBTyxTQUFVQSxFQUFHakUsR0FDMUIsT0FBTzdGLEVBQUcxRyxLQUFLcVksRUFBTTdILEVBQUdqRSxJQUUxQixLQUFLLEVBQUcsT0FBTyxTQUFVaUUsRUFBR2pFLEVBQUdpQyxHQUM3QixPQUFPOUgsRUFBRzFHLEtBQUtxWSxFQUFNN0gsRUFBR2pFLEVBQUdpQyxJQUcvQixPQUFPLFdBQ0wsT0FBTzlILEVBQUc4SSxNQUFNNkksRUFBTXBILGMsNEJDZjFCLElBQUl1TCxFQUFRLEVBQVEsTUFDaEIwQixFQUFVQyxLQUFLeGUsVUFBVXVlLFFBQ3pCRSxFQUFlRCxLQUFLeGUsVUFBVTBlLFlBRTlCQyxFQUFLLFNBQVUzcUIsR0FDakIsT0FBT0EsRUFBTSxFQUFJQSxFQUFNLElBQU1BLEdBSS9CcU4sRUFBT25OLFFBQVcyb0IsR0FBTSxXQUN0QixNQUFpRCw0QkFBMUM0QixFQUFhcGUsS0FBSyxJQUFJbWUsTUFBSyxzQkFDN0IzQixHQUFNLFdBQ1g0QixFQUFhcGUsS0FBSyxJQUFJbWUsS0FBS0ksU0FDdkIsV0FDSixJQUFLM00sU0FBU3NNLEVBQVFsZSxLQUFLd0IsT0FBUSxNQUFNMEksV0FBVyxzQkFDcEQsSUFBSXNVLEVBQUloZCxLQUNKa1AsRUFBSThOLEVBQUVDLGlCQUNOaFMsRUFBSStSLEVBQUVFLHFCQUNOQyxFQUFJak8sRUFBSSxFQUFJLElBQU1BLEVBQUksS0FBTyxJQUFNLEdBQ3ZDLE9BQU9pTyxHQUFLLFFBQVU1ckIsS0FBS0MsSUFBSTBkLElBQUluYixNQUFNb3BCLEdBQUssR0FBSyxHQUNqRCxJQUFNTCxFQUFHRSxFQUFFSSxjQUFnQixHQUFLLElBQU1OLEVBQUdFLEVBQUVLLGNBQzNDLElBQU1QLEVBQUdFLEVBQUVNLGVBQWlCLElBQU1SLEVBQUdFLEVBQUVPLGlCQUN2QyxJQUFNVCxFQUFHRSxFQUFFUSxpQkFBbUIsS0FBT3ZTLEVBQUksR0FBS0EsRUFBSSxJQUFNNlIsRUFBRzdSLElBQU0sS0FDakUyUixHLDRCQ3hCSixJQUFJMUMsRUFBVyxFQUFRLE1BQ25CdUQsRUFBYyxFQUFRLE1BQ3RCQyxFQUFTLFNBRWJsZSxFQUFPbk4sUUFBVSxTQUFVc3JCLEdBQ3pCLEdBQWEsV0FBVEEsR0FBcUJBLElBQVNELEdBQW1CLFlBQVRDLEVBQW9CLE1BQU01WCxVQUFVLGtCQUNoRixPQUFPMFgsRUFBWXZELEVBQVNsYSxNQUFPMmQsR0FBUUQsSyxTQ043Q2xlLEVBQU9uTixRQUFVLFNBQVVpaUIsR0FDekIsR0FBVTFaLE1BQU4wWixFQUFpQixNQUFNdk8sVUFBVSx5QkFBMkJ1TyxHQUNoRSxPQUFPQSxJLGVDRlQ5VSxFQUFPbk4sU0FBVyxFQUFRLEtBQVIsRUFBb0IsV0FDcEMsT0FBK0UsR0FBeEVVLE9BQU9nRCxlQUFlLEdBQUksSUFBSyxDQUFFMmpCLElBQUssV0FBYyxPQUFPLEtBQVExSyxNLGVDRjVFLElBQUkxVyxFQUFXLEVBQVEsTUFDbkJzbEIsRUFBVyxpQkFFWEMsRUFBS3ZsQixFQUFTc2xCLElBQWF0bEIsRUFBU3NsQixFQUFTRSxlQUNqRHRlLEVBQU9uTixRQUFVLFNBQVVpaUIsR0FDekIsT0FBT3VKLEVBQUtELEVBQVNFLGNBQWN4SixHQUFNLEssU0NKM0M5VSxFQUFPbk4sUUFBVSxnR0FFZmlNLE1BQU0sTSxjQ0ZSLElBQUl5ZixFQUFVLEVBQVEsTUFDbEJDLEVBQU8sRUFBUSxNQUNmQyxFQUFNLEVBQVEsTUFDbEJ6ZSxFQUFPbk4sUUFBVSxTQUFVaWlCLEdBQ3pCLElBQUl4UyxFQUFTaWMsRUFBUXpKLEdBQ2pCNEosRUFBYUYsRUFBS2xILEVBQ3RCLEdBQUlvSCxFQUtGLElBSkEsSUFHSWhyQixFQUhBaXJCLEVBQVVELEVBQVc1SixHQUNyQjhKLEVBQVNILEVBQUluSCxFQUNicGxCLEVBQUksRUFFRHlzQixFQUFRN3NCLE9BQVNJLEdBQU8wc0IsRUFBTzVmLEtBQUs4VixFQUFJcGhCLEVBQU1pckIsRUFBUXpzQixPQUFPb1EsRUFBTzdGLEtBQUsvSSxHQUNoRixPQUFPNE8sSSxlQ2JYLElBQUlwRCxFQUFTLEVBQVEsTUFDakIyZCxFQUFPLEVBQVEsTUFDZmdDLEVBQU8sRUFBUSxLQUNmdkQsRUFBVyxFQUFRLE1BQ25CN0UsRUFBTSxFQUFRLE1BR2Q0RSxFQUFVLFNBQVVub0IsRUFBTThLLEVBQU04Z0IsR0FDbEMsSUFRSXByQixFQUFLcXJCLEVBQUsvTixFQUFLZ08sRUFSZkMsRUFBWS9yQixFQUFPbW9CLEVBQVFwRCxFQUMzQmlILEVBQVloc0IsRUFBT21vQixFQUFRc0IsRUFDM0J3QyxFQUFZanNCLEVBQU9tb0IsRUFBUWpHLEVBQzNCZ0ssRUFBV2xzQixFQUFPbW9CLEVBQVFnRSxFQUMxQkMsRUFBVXBzQixFQUFPbW9CLEVBQVE3QyxFQUN6QmxJLEVBQVM0TyxFQUFZaGdCLEVBQVNpZ0IsRUFBWWpnQixFQUFPbEIsS0FBVWtCLEVBQU9sQixHQUFRLEtBQU9rQixFQUFPbEIsSUFBUyxJQUFhLFVBQzlHbkwsRUFBVXFzQixFQUFZckMsRUFBT0EsRUFBSzdlLEtBQVU2ZSxFQUFLN2UsR0FBUSxJQUN6RHVoQixFQUFXMXNCLEVBQWlCLFlBQU1BLEVBQWlCLFVBQUksSUFHM0QsSUFBS2EsS0FERHdyQixJQUFXSixFQUFTOWdCLEdBQ1o4Z0IsRUFJVjlOLElBRkErTixHQUFPRSxHQUFhM08sUUFBMEJsVixJQUFoQmtWLEVBQU81YyxJQUV4QjRjLEVBQVN3TyxHQUFRcHJCLEdBRTlCc3JCLEVBQU1NLEdBQVdQLEVBQU10SSxFQUFJekYsRUFBSzlSLEdBQVVrZ0IsR0FBMEIsbUJBQVBwTyxFQUFvQnlGLEVBQUkxWCxTQUFTQyxLQUFNZ1MsR0FBT0EsRUFFdkdWLEdBQVFnTCxFQUFTaEwsRUFBUTVjLEVBQUtzZCxFQUFLOWQsRUFBT21vQixFQUFRbUUsR0FFbEQzc0IsRUFBUWEsSUFBUXNkLEdBQUs2TixFQUFLaHNCLEVBQVNhLEVBQUtzckIsR0FDeENJLEdBQVlHLEVBQVM3ckIsSUFBUXNkLElBQUt1TyxFQUFTN3JCLEdBQU9zZCxJQUcxRDlSLEVBQU8yZCxLQUFPQSxFQUVkeEIsRUFBUXBELEVBQUksRUFDWm9ELEVBQVFzQixFQUFJLEVBQ1p0QixFQUFRakcsRUFBSSxFQUNaaUcsRUFBUWdFLEVBQUksRUFDWmhFLEVBQVE3QyxFQUFJLEdBQ1o2QyxFQUFRdUIsRUFBSSxHQUNadkIsRUFBUW1FLEVBQUksR0FDWm5FLEVBQVFvRSxFQUFJLElBQ1p6ZixFQUFPbk4sUUFBVXdvQixHLGVDMUNqQixJQUFJcUUsRUFBUSxFQUFRLEtBQVIsQ0FBa0IsU0FDOUIxZixFQUFPbk4sUUFBVSxTQUFVcXBCLEdBQ3pCLElBQUl5RCxFQUFLLElBQ1QsSUFDRSxNQUFNekQsR0FBS3lELEdBQ1gsTUFBTzlRLEdBQ1AsSUFFRSxPQURBOFEsRUFBR0QsSUFBUyxHQUNKLE1BQU14RCxHQUFLeUQsR0FDbkIsTUFBT3JJLEtBQ1QsT0FBTyxJLFNDVlh0WCxFQUFPbk4sUUFBVSxTQUFVK3NCLEdBQ3pCLElBQ0UsUUFBU0EsSUFDVCxNQUFPL1EsR0FDUCxPQUFPLEssNEJDSFgsRUFBUSxNQUNSLElBQUl5TSxFQUFXLEVBQVEsTUFDbkJ1RCxFQUFPLEVBQVEsS0FDZnJELEVBQVEsRUFBUSxNQUNoQnFFLEVBQVUsRUFBUSxNQUNsQkMsRUFBTSxFQUFRLE1BQ2RDLEVBQWEsRUFBUSxLQUVyQnJJLEVBQVVvSSxFQUFJLFdBRWRFLEdBQWlDeEUsR0FBTSxXQUl6QyxJQUFJbUUsRUFBSyxJQU1ULE9BTEFBLEVBQUdDLEtBQU8sV0FDUixJQUFJdGQsRUFBUyxHQUViLE9BREFBLEVBQU8yZCxPQUFTLENBQUV6USxFQUFHLEtBQ2RsTixHQUV5QixNQUEzQixHQUFHa1MsUUFBUW1MLEVBQUksV0FHcEJPLEVBQW9DLFdBRXRDLElBQUlQLEVBQUssT0FDTFEsRUFBZVIsRUFBR0MsS0FDdEJELEVBQUdDLEtBQU8sV0FBYyxPQUFPTyxFQUFhM1IsTUFBTWhPLEtBQU15UCxZQUN4RCxJQUFJM04sRUFBUyxLQUFLeEQsTUFBTTZnQixHQUN4QixPQUF5QixJQUFsQnJkLEVBQU94USxRQUE4QixNQUFkd1EsRUFBTyxJQUE0QixNQUFkQSxFQUFPLEdBTnBCLEdBU3hDdEMsRUFBT25OLFFBQVUsU0FBVXFwQixFQUFLcHFCLEVBQVE4dEIsR0FDdEMsSUFBSVEsRUFBU04sRUFBSTVELEdBRWJtRSxHQUF1QjdFLEdBQU0sV0FFL0IsSUFBSWpkLEVBQUksR0FFUixPQURBQSxFQUFFNmhCLEdBQVUsV0FBYyxPQUFPLEdBQ1osR0FBZCxHQUFHbEUsR0FBSzNkLE1BR2IraEIsRUFBb0JELEdBQXVCN0UsR0FBTSxXQUVuRCxJQUFJK0UsR0FBYSxFQUNiWixFQUFLLElBU1QsT0FSQUEsRUFBR0MsS0FBTyxXQUFpQyxPQUFuQlcsR0FBYSxFQUFhLE1BQ3RDLFVBQVJyRSxJQUdGeUQsRUFBRzNtQixZQUFjLEdBQ2pCMm1CLEVBQUczbUIsWUFBWTBlLEdBQVcsV0FBYyxPQUFPaUksSUFFakRBLEVBQUdTLEdBQVEsS0FDSEcsVUFDTG5sQixFQUVMLElBQ0dpbEIsSUFDQUMsR0FDUSxZQUFScEUsSUFBc0I4RCxHQUNkLFVBQVI5RCxJQUFvQmdFLEVBQ3JCLENBQ0EsSUFBSU0sRUFBcUIsSUFBSUosR0FDekJLLEVBQU1iLEVBQ1JDLEVBQ0FPLEVBQ0EsR0FBR2xFLElBQ0gsU0FBeUJ3RSxFQUFjQyxFQUFRelQsRUFBSzBULEVBQU1DLEdBQ3hELE9BQUlGLEVBQU9mLE9BQVNHLEVBQ2RNLElBQXdCUSxFQUluQixDQUFFdGUsTUFBTSxFQUFNdlAsTUFBT3d0QixFQUFtQnhoQixLQUFLMmhCLEVBQVF6VCxFQUFLMFQsSUFFNUQsQ0FBRXJlLE1BQU0sRUFBTXZQLE1BQU8wdEIsRUFBYTFoQixLQUFLa08sRUFBS3lULEVBQVFDLElBRXRELENBQUVyZSxNQUFNLE1BR2Z1ZSxFQUFRTCxFQUFJLEdBQ1pNLEVBQU9OLEVBQUksR0FFZm5GLEVBQVM1YyxPQUFPQyxVQUFXdWQsRUFBSzRFLEdBQ2hDakMsRUFBS21DLE9BQU9yaUIsVUFBV3loQixFQUFrQixHQUFWdHVCLEVBRzNCLFNBQVU2WCxFQUFRakksR0FBTyxPQUFPcWYsRUFBSy9oQixLQUFLMkssRUFBUW5KLEtBQU1rQixJQUd4RCxTQUFVaUksR0FBVSxPQUFPb1gsRUFBSy9oQixLQUFLMkssRUFBUW5KLFcsNEJDMUZyRCxJQUFJa2EsRUFBVyxFQUFRLE1BQ3ZCMWEsRUFBT25OLFFBQVUsV0FDZixJQUFJd2tCLEVBQU9xRCxFQUFTbGEsTUFDaEI4QixFQUFTLEdBTWIsT0FMSStVLEVBQUtuWSxTQUFRb0QsR0FBVSxLQUN2QitVLEVBQUs0SixhQUFZM2UsR0FBVSxLQUMzQitVLEVBQUs2SixZQUFXNWUsR0FBVSxLQUMxQitVLEVBQUsvQixVQUFTaFQsR0FBVSxLQUN4QitVLEVBQUs4SixTQUFRN2UsR0FBVSxLQUNwQkEsSSw0QkNUVCxJQUFJdE8sRUFBVSxFQUFRLE1BQ2xCOEUsRUFBVyxFQUFRLE1BQ25CNmMsRUFBVyxFQUFRLE1BQ25CYyxFQUFNLEVBQVEsTUFDZDJLLEVBQXVCLEVBQVEsS0FBUixDQUFrQixzQkFnQzdDcGhCLEVBQU9uTixRQTlCUCxTQUFTd3VCLEVBQWlCL1EsRUFBUXFILEVBQVVtSCxFQUFRd0MsRUFBVy9ZLEVBQU9nWixFQUFPQyxFQUFRQyxHQU1uRixJQUxBLElBR0lDLEVBQVNDLEVBSFRDLEVBQWNyWixFQUNkc1osRUFBYyxFQUNkQyxJQUFRTixHQUFTL0ssRUFBSStLLEVBQVFDLEVBQVMsR0FHbkNJLEVBQWNQLEdBQVcsQ0FDOUIsR0FBSU8sS0FBZS9DLEVBQVEsQ0FTekIsR0FSQTRDLEVBQVVJLEVBQVFBLEVBQU1oRCxFQUFPK0MsR0FBY0EsRUFBYWxLLEdBQVltSCxFQUFPK0MsR0FFN0VGLEdBQWEsRUFDVDdvQixFQUFTNG9CLEtBRVhDLE9BQTRCdm1CLEtBRDVCdW1CLEVBQWFELEVBQVFOLE1BQ3FCTyxFQUFhM3RCLEVBQVEwdEIsSUFHN0RDLEdBQWNKLEVBQVEsRUFDeEJLLEVBQWNQLEVBQWlCL1EsRUFBUXFILEVBQVUrSixFQUFTL0wsRUFBUytMLEVBQVE1dkIsUUFBUzh2QixFQUFhTCxFQUFRLEdBQUssTUFDekcsQ0FDTCxHQUFJSyxHQUFlLGlCQUFrQixNQUFNcmIsWUFDM0MrSixFQUFPc1IsR0FBZUYsRUFHeEJFLElBRUZDLElBRUYsT0FBT0QsSSxlQ25DVCxJQUFJbkwsRUFBTSxFQUFRLE1BQ2R6WCxFQUFPLEVBQVEsTUFDZitpQixFQUFjLEVBQVEsTUFDdEJySCxFQUFXLEVBQVEsTUFDbkIvRSxFQUFXLEVBQVEsTUFDbkJxTSxFQUFZLEVBQVEsS0FDcEJDLEVBQVEsR0FDUkMsRUFBUyxHQUNUcnZCLEVBQVVtTixFQUFPbk4sUUFBVSxTQUFVaVMsRUFBVXFYLEVBQVN6VyxFQUFJMlIsRUFBTWxCLEdBQ3BFLElBR0lya0IsRUFBUWluQixFQUFNdFosRUFBVTZDLEVBSHhCNmYsRUFBU2hNLEVBQVcsV0FBYyxPQUFPclIsR0FBY2tkLEVBQVVsZCxHQUNqRXdTLEVBQUliLEVBQUkvUSxFQUFJMlIsRUFBTThFLEVBQVUsRUFBSSxHQUNoQzlHLEVBQVEsRUFFWixHQUFxQixtQkFBVjhNLEVBQXNCLE1BQU01YixVQUFVekIsRUFBVyxxQkFFNUQsR0FBSWlkLEVBQVlJLElBQVMsSUFBS3J3QixFQUFTNmpCLEVBQVM3USxFQUFTaFQsUUFBU0EsRUFBU3VqQixFQUFPQSxJQUVoRixJQURBL1MsRUFBUzZaLEVBQVU3RSxFQUFFb0QsRUFBUzNCLEVBQU9qVSxFQUFTdVEsSUFBUSxHQUFJMEQsRUFBSyxJQUFNekIsRUFBRXhTLEVBQVN1USxPQUNqRTRNLEdBQVMzZixJQUFXNGYsRUFBUSxPQUFPNWYsT0FDN0MsSUFBSzdDLEVBQVcwaUIsRUFBT25qQixLQUFLOEYsS0FBYWlVLEVBQU90WixFQUFTMkMsUUFBUUcsTUFFdEUsSUFEQUQsRUFBU3RELEVBQUtTLEVBQVU2WCxFQUFHeUIsRUFBSy9sQixNQUFPbXBCLE1BQ3hCOEYsR0FBUzNmLElBQVc0ZixFQUFRLE9BQU81ZixHQUd0RHpQLEVBQVFvdkIsTUFBUUEsRUFDaEJwdkIsRUFBUXF2QixPQUFTQSxHLGNDeEJqQmxpQixFQUFPbk4sUUFBVSxFQUFRLEtBQVIsQ0FBcUIsNEJBQTZCa00sU0FBU3lELFcsU0NDNUUsSUFBSXRELEVBQVNjLEVBQU9uTixRQUEyQixvQkFBVitULFFBQXlCQSxPQUFPN1UsTUFBUUEsS0FDekU2VSxPQUF3QixvQkFBUjNFLE1BQXVCQSxLQUFLbFEsTUFBUUEsS0FBT2tRLEtBRTNEbEQsU0FBUyxjQUFUQSxHQUNjLGlCQUFQcWpCLE1BQWlCQSxJQUFNbGpCLEksU0NMbEMsSUFBSUcsRUFBaUIsR0FBR0EsZUFDeEJXLEVBQU9uTixRQUFVLFNBQVVpaUIsRUFBSXBoQixHQUM3QixPQUFPMkwsRUFBZUwsS0FBSzhWLEVBQUlwaEIsSyxjQ0ZqQyxJQUFJaWxCLEVBQUssRUFBUSxNQUNic0UsRUFBYSxFQUFRLE1BQ3pCamQsRUFBT25OLFFBQVUsRUFBUSxNQUFvQixTQUFVNFAsRUFBUS9PLEVBQUtWLEdBQ2xFLE9BQU8ybEIsRUFBR3JCLEVBQUU3VSxFQUFRL08sRUFBS3VwQixFQUFXLEVBQUdqcUIsS0FDckMsU0FBVXlQLEVBQVEvTyxFQUFLVixHQUV6QixPQURBeVAsRUFBTy9PLEdBQU9WLEVBQ1B5UCxJLGVDTlQsSUFBSTJiLEVBQVcsaUJBQ2ZwZSxFQUFPbk4sUUFBVXVyQixHQUFZQSxFQUFTaUUsaUIsY0NEdENyaUIsRUFBT25OLFNBQVcsRUFBUSxRQUFzQixFQUFRLEtBQVIsRUFBb0IsV0FDbEUsT0FBNEcsR0FBckdVLE9BQU9nRCxlQUFlLEVBQVEsS0FBUixDQUF5QixPQUFRLElBQUssQ0FBRTJqQixJQUFLLFdBQWMsT0FBTyxLQUFRMUssTSxlQ0R6RyxJQUFJMVcsRUFBVyxFQUFRLE1BQ25CeUksRUFBaUIsWUFDckJ2QixFQUFPbk4sUUFBVSxTQUFVd2tCLEVBQU0vRyxFQUFRc0gsR0FDdkMsSUFDSXlILEVBREFqSyxFQUFJOUUsRUFBT3RYLFlBSWIsT0FGRW9jLElBQU13QyxHQUFpQixtQkFBTHhDLElBQW9CaUssRUFBSWpLLEVBQUV6VyxhQUFlaVosRUFBRWpaLFdBQWE3RixFQUFTdW1CLElBQU05ZCxHQUMzRkEsRUFBZThWLEVBQU1nSSxHQUNkaEksSSxTQ05YclgsRUFBT25OLFFBQVUsU0FBVTZTLEVBQUl3UyxFQUFNYixHQUNuQyxJQUFJaUwsT0FBY2xuQixJQUFUaWMsRUFDVCxPQUFRYSxFQUFLcG1CLFFBQ1gsS0FBSyxFQUFHLE9BQU93d0IsRUFBSzVjLElBQ0FBLEVBQUcxRyxLQUFLcVksR0FDNUIsS0FBSyxFQUFHLE9BQU9pTCxFQUFLNWMsRUFBR3dTLEVBQUssSUFDUnhTLEVBQUcxRyxLQUFLcVksRUFBTWEsRUFBSyxJQUN2QyxLQUFLLEVBQUcsT0FBT29LLEVBQUs1YyxFQUFHd1MsRUFBSyxHQUFJQSxFQUFLLElBQ2pCeFMsRUFBRzFHLEtBQUtxWSxFQUFNYSxFQUFLLEdBQUlBLEVBQUssSUFDaEQsS0FBSyxFQUFHLE9BQU9vSyxFQUFLNWMsRUFBR3dTLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLElBQzFCeFMsRUFBRzFHLEtBQUtxWSxFQUFNYSxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxJQUN6RCxLQUFLLEVBQUcsT0FBT29LLEVBQUs1YyxFQUFHd1MsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxJQUNuQ3hTLEVBQUcxRyxLQUFLcVksRUFBTWEsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxJQUNsRSxPQUFPeFMsRUFBRzhJLE1BQU02SSxFQUFNYSxLLGVDYjFCLElBQUluRCxFQUFNLEVBQVEsTUFFbEIvVSxFQUFPbk4sUUFBVVUsT0FBTyxLQUFLZ3ZCLHFCQUFxQixHQUFLaHZCLE9BQVMsU0FBVXVoQixHQUN4RSxNQUFrQixVQUFYQyxFQUFJRCxHQUFrQkEsRUFBR2hXLE1BQU0sSUFBTXZMLE9BQU91aEIsSyxlQ0hyRCxJQUFJME4sRUFBWSxFQUFRLEtBQ3BCck0sRUFBVyxFQUFRLEtBQVIsQ0FBa0IsWUFDN0JqQixFQUFhbmhCLE1BQU00SyxVQUV2QnFCLEVBQU9uTixRQUFVLFNBQVVpaUIsR0FDekIsWUFBYzFaLElBQVAwWixJQUFxQjBOLEVBQVV6dUIsUUFBVStnQixHQUFNSSxFQUFXaUIsS0FBY3JCLEssZUNMakYsSUFBSUMsRUFBTSxFQUFRLE1BQ2xCL1UsRUFBT25OLFFBQVVrQixNQUFNQyxTQUFXLFNBQWlCME4sR0FDakQsTUFBbUIsU0FBWnFULEVBQUlyVCxLLGVDRmIsSUFBSTVJLEVBQVcsRUFBUSxNQUNuQjJwQixFQUFRMXdCLEtBQUswd0IsTUFDakJ6aUIsRUFBT25OLFFBQVUsU0FBbUJpaUIsR0FDbEMsT0FBUWhjLEVBQVNnYyxJQUFPbEUsU0FBU2tFLElBQU8yTixFQUFNM04sS0FBUUEsSSxTQ0p4RDlVLEVBQU9uTixRQUFVLFNBQVVpaUIsR0FDekIsTUFBcUIsaUJBQVBBLEVBQXlCLE9BQVBBLEVBQTRCLG1CQUFQQSxJLGVDQXZELElBQUloYyxFQUFXLEVBQVEsTUFDbkJpYyxFQUFNLEVBQVEsTUFDZDJLLEVBQVEsRUFBUSxLQUFSLENBQWtCLFNBQzlCMWYsRUFBT25OLFFBQVUsU0FBVWlpQixHQUN6QixJQUFJNE4sRUFDSixPQUFPNXBCLEVBQVNnYyxVQUFtQzFaLEtBQTFCc25CLEVBQVc1TixFQUFHNEssTUFBMEJnRCxFQUFzQixVQUFYM04sRUFBSUQsTSxlQ0xsRixJQUFJNEYsRUFBVyxFQUFRLE1BQ3ZCMWEsRUFBT25OLFFBQVUsU0FBVTRNLEVBQVVpRyxFQUFJMVMsRUFBT21wQixHQUM5QyxJQUNFLE9BQU9BLEVBQVV6VyxFQUFHZ1YsRUFBUzFuQixHQUFPLEdBQUlBLEVBQU0sSUFBTTBTLEVBQUcxUyxHQUV2RCxNQUFPNmIsR0FDUCxJQUFJa0MsRUFBTXRSLEVBQWlCLE9BRTNCLFdBRFlyRSxJQUFSMlYsR0FBbUIySixFQUFTM0osRUFBSS9SLEtBQUtTLElBQ25Db1AsSyw0QkNSVixJQUFJN04sRUFBUyxFQUFRLE1BQ2pCMmhCLEVBQWEsRUFBUSxNQUNyQmpILEVBQWlCLEVBQVEsS0FDekJuYixFQUFvQixHQUd4QixFQUFRLElBQVIsQ0FBbUJBLEVBQW1CLEVBQVEsS0FBUixDQUFrQixhQUFhLFdBQWMsT0FBT0MsUUFFMUZSLEVBQU9uTixRQUFVLFNBQVUwaUIsRUFBYWtFLEVBQU1yWCxHQUM1Q21ULEVBQVk1VyxVQUFZcUMsRUFBT1QsRUFBbUIsQ0FBRTZCLEtBQU11Z0IsRUFBVyxFQUFHdmdCLEtBQ3hFc1osRUFBZW5HLEVBQWFrRSxFQUFPLGUsNEJDVnJDLElBQUltSixFQUFVLEVBQVEsTUFDbEJ2SCxFQUFVLEVBQVEsTUFDbEJDLEVBQVcsRUFBUSxNQUNuQnVELEVBQU8sRUFBUSxLQUNmMkQsRUFBWSxFQUFRLEtBQ3BCSyxFQUFjLEVBQVEsTUFDdEJuSCxFQUFpQixFQUFRLEtBQ3pCaGIsRUFBaUIsRUFBUSxNQUN6QnlWLEVBQVcsRUFBUSxLQUFSLENBQWtCLFlBQzdCMk0sSUFBVSxHQUFHdHZCLE1BQVEsUUFBVSxHQUFHQSxRQUVsQ3V2QixFQUFPLE9BQ1BDLEVBQVMsU0FFVEMsRUFBYSxXQUFjLE9BQU96aUIsTUFFdENSLEVBQU9uTixRQUFVLFNBQVVrcEIsRUFBTXRDLEVBQU1sRSxFQUFhblQsRUFBTThnQixFQUFTQyxFQUFRQyxHQUN6RVAsRUFBWXROLEVBQWFrRSxFQUFNclgsR0FDL0IsSUFlSXdaLEVBQVNsb0IsRUFBSzZNLEVBZmQ4aUIsRUFBWSxTQUFVL0ksR0FDeEIsSUFBS3dJLEdBQVN4SSxLQUFRMEIsRUFBTyxPQUFPQSxFQUFNMUIsR0FDMUMsT0FBUUEsR0FDTixLQUFLeUksRUFDTCxLQUFLQyxFQUFRLE9BQU8sV0FBb0IsT0FBTyxJQUFJek4sRUFBWS9VLEtBQU04WixJQUNyRSxPQUFPLFdBQXFCLE9BQU8sSUFBSS9FLEVBQVkvVSxLQUFNOFosS0FFekRqQyxFQUFNb0IsRUFBTyxZQUNiNkosRUFBYUosR0FBV0YsRUFDeEJPLEdBQWEsRUFDYnZILEVBQVFELEVBQUtwZCxVQUNiNmtCLEVBQVV4SCxFQUFNN0YsSUFBYTZGLEVBbkJqQixlQW1CdUNrSCxHQUFXbEgsRUFBTWtILEdBQ3BFTyxFQUFXRCxHQUFXSCxFQUFVSCxHQUNoQ1EsRUFBV1IsRUFBV0ksRUFBd0JELEVBQVUsV0FBckJJLE9BQWtDcm9CLEVBQ3JFdW9CLEVBQXFCLFNBQVJsSyxHQUFrQnVDLEVBQU1HLFNBQXFCcUgsRUF3QjlELEdBckJJRyxJQUNGcGpCLEVBQW9CRyxFQUFlaWpCLEVBQVcza0IsS0FBSyxJQUFJK2MsT0FDN0J4b0IsT0FBT29MLFdBQWE0QixFQUFrQjZCLE9BRTlEc1osRUFBZW5iLEVBQW1COFgsR0FBSyxHQUVsQ3VLLEdBQWlELG1CQUEvQnJpQixFQUFrQjRWLElBQXlCMEksRUFBS3RlLEVBQW1CNFYsRUFBVThNLElBSXBHSyxHQUFjRSxHQUFXQSxFQUFReGxCLE9BQVNnbEIsSUFDNUNPLEdBQWEsRUFDYkUsRUFBVyxXQUFvQixPQUFPRCxFQUFReGtCLEtBQUt3QixRQUcvQ29pQixJQUFXUSxJQUFZTixJQUFTUyxHQUFldkgsRUFBTTdGLElBQ3pEMEksRUFBSzdDLEVBQU83RixFQUFVc04sR0FHeEJqQixFQUFVL0ksR0FBUWdLLEVBQ2xCakIsRUFBVW5LLEdBQU80SyxFQUNiQyxFQU1GLEdBTEF0SCxFQUFVLENBQ1JoYixPQUFRMGlCLEVBQWFHLEVBQVdKLEVBQVVMLEdBQzFDeHZCLEtBQU0ydkIsRUFBU00sRUFBV0osRUFBVU4sR0FDcEM1RyxRQUFTdUgsR0FFUE4sRUFBUSxJQUFLMXZCLEtBQU9rb0IsRUFDaEJsb0IsS0FBT3NvQixHQUFRVixFQUFTVSxFQUFPdG9CLEVBQUtrb0IsRUFBUWxvQixTQUM3QzJuQixFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxHQUFLNkssR0FBU1MsR0FBYTlKLEVBQU1tQyxHQUV0RSxPQUFPQSxJLGVDbkVULElBQUl6RixFQUFXLEVBQVEsS0FBUixDQUFrQixZQUM3QnlOLEdBQWUsRUFFbkIsSUFDRSxJQUFJQyxFQUFRLENBQUMsR0FBRzFOLEtBQ2hCME4sRUFBYyxPQUFJLFdBQWNELEdBQWUsR0FFL0M3dkIsTUFBTXVWLEtBQUt1YSxHQUFPLFdBQWMsTUFBTSxLQUN0QyxNQUFPaFYsSUFFVDdPLEVBQU9uTixRQUFVLFNBQVUrc0IsRUFBTWtFLEdBQy9CLElBQUtBLElBQWdCRixFQUFjLE9BQU8sRUFDMUMsSUFBSUcsR0FBTyxFQUNYLElBQ0UsSUFBSTFjLEVBQU0sQ0FBQyxHQUNQbEYsRUFBT2tGLEVBQUk4TyxLQUNmaFUsRUFBS0MsS0FBTyxXQUFjLE1BQU8sQ0FBRUcsS0FBTXdoQixHQUFPLElBQ2hEMWMsRUFBSThPLEdBQVksV0FBYyxPQUFPaFUsR0FDckN5ZCxFQUFLdlksR0FDTCxNQUFPd0gsSUFDVCxPQUFPa1YsSSxTQ3BCVC9qQixFQUFPbk4sUUFBVSxTQUFVMFAsRUFBTXZQLEdBQy9CLE1BQU8sQ0FBRUEsTUFBT0EsRUFBT3VQLE9BQVFBLEssUUNEakN2QyxFQUFPbk4sUUFBVSxJLFNDQWpCbU4sRUFBT25OLFNBQVUsRyxTQ0NqQixJQUFJbXhCLEVBQVNqeUIsS0FBS2t5QixNQUNsQmprQixFQUFPbk4sU0FBWW14QixHQUVkQSxFQUFPLElBQU0sb0JBQXNCQSxFQUFPLElBQU0scUJBRTdCLE9BQW5CQSxHQUFRLE9BQ1QsU0FBZXZVLEdBQ2pCLE9BQW1CLElBQVhBLEdBQUtBLEdBQVVBLEVBQUlBLEdBQUssTUFBUUEsRUFBSSxLQUFPQSxFQUFJQSxFQUFJQSxFQUFJLEVBQUkxZCxLQUFLaXRCLElBQUl2UCxHQUFLLEdBQy9FdVUsRyxlQ1JKLElBQUlFLEVBQU8sRUFBUSxNQUNmanNCLEVBQU1sRyxLQUFLa0csSUFDWGtzQixFQUFVbHNCLEVBQUksR0FBSSxJQUNsQm1zQixFQUFZbnNCLEVBQUksR0FBSSxJQUNwQm9zQixFQUFRcHNCLEVBQUksRUFBRyxNQUFRLEVBQUltc0IsR0FDM0JFLEVBQVFyc0IsRUFBSSxHQUFJLEtBTXBCK0gsRUFBT25OLFFBQVVkLEtBQUt3eUIsUUFBVSxTQUFnQjlVLEdBQzlDLElBRUlELEVBQUdsTixFQUZIa2lCLEVBQU96eUIsS0FBS0MsSUFBSXlkLEdBQ2hCZ1YsRUFBUVAsRUFBS3pVLEdBRWpCLE9BQUkrVSxFQUFPRixFQUFjRyxHQUF3QkQsRUFBT0YsRUFBUUYsRUFQckQsRUFBSUQsRUFBVSxFQUFJQSxHQU9nREcsRUFBUUYsR0FFckY5aEIsR0FEQWtOLEdBQUssRUFBSTRVLEVBQVlELEdBQVdLLElBQ2xCaFYsRUFBSWdWLElBRUxILEdBQVMvaEIsR0FBVUEsRUFBZW1pQixHQUFRcFEsS0FDaERvUSxFQUFRbmlCLEksU0NwQmpCdEMsRUFBT25OLFFBQVVkLEtBQUsyeUIsT0FBUyxTQUFlalYsR0FDNUMsT0FBUUEsR0FBS0EsSUFBTSxNQUFRQSxFQUFJLEtBQU9BLEVBQUlBLEVBQUlBLEVBQUksRUFBSTFkLEtBQUs0eUIsSUFBSSxFQUFJbFYsSyxTQ0RyRXpQLEVBQU9uTixRQUFVZCxLQUFLNnlCLE9BQVMsU0FBZW5WLEVBQUdvVixFQUFPQyxFQUFRQyxFQUFRQyxHQUN0RSxPQUN1QixJQUFyQi9VLFVBQVVuZSxRQUVMMmQsR0FBS0EsR0FFTG9WLEdBQVNBLEdBRVRDLEdBQVVBLEdBRVZDLEdBQVVBLEdBRVZDLEdBQVdBLEVBQ1R6SCxJQUNMOU4sSUFBTTRFLEtBQVk1RSxLQUFNLElBQWtCQSxHQUN0Q0EsRUFBSW9WLElBQVVHLEVBQVVELElBQVdELEVBQVNELEdBQVNFLEksU0NmL0Qva0IsRUFBT25OLFFBQVVkLEtBQUtteUIsTUFBUSxTQUFjelUsR0FFMUMsT0FBbUIsSUFBWEEsR0FBS0EsSUFBV0EsR0FBS0EsRUFBSUEsRUFBSUEsRUFBSSxHQUFLLEVBQUksSSxlQ0hwRCxJQUFJd1YsRUFBTyxFQUFRLEtBQVIsQ0FBa0IsUUFDekJuc0IsRUFBVyxFQUFRLE1BQ25CbWhCLEVBQU0sRUFBUSxNQUNkaUwsRUFBVSxVQUNWbndCLEVBQUssRUFDTG93QixFQUFlNXhCLE9BQU80eEIsY0FBZ0IsV0FDeEMsT0FBTyxHQUVMQyxHQUFVLEVBQVEsS0FBUixFQUFvQixXQUNoQyxPQUFPRCxFQUFhNXhCLE9BQU84eEIsa0JBQWtCLFFBRTNDQyxFQUFVLFNBQVV4USxHQUN0Qm9RLEVBQVFwUSxFQUFJbVEsRUFBTSxDQUFFanlCLE1BQU8sQ0FDekJkLEVBQUcsT0FBUTZDLEVBQ1h3d0IsRUFBRyxPQWdDSGhLLEVBQU92YixFQUFPbk4sUUFBVSxDQUMxQnFwQixJQUFLK0ksRUFDTHZJLE1BQU0sRUFDTnhELFFBaENZLFNBQVVwRSxFQUFJOVQsR0FFMUIsSUFBS2xJLEVBQVNnYyxHQUFLLE1BQW9CLGlCQUFOQSxFQUFpQkEsR0FBbUIsaUJBQU5BLEVBQWlCLElBQU0sS0FBT0EsRUFDN0YsSUFBS21GLEVBQUluRixFQUFJbVEsR0FBTyxDQUVsQixJQUFLRSxFQUFhclEsR0FBSyxNQUFPLElBRTlCLElBQUs5VCxFQUFRLE1BQU8sSUFFcEJza0IsRUFBUXhRLEdBRVIsT0FBT0EsRUFBR21RLEdBQU0veUIsR0FzQmxCdW9CLFFBcEJZLFNBQVUzRixFQUFJOVQsR0FDMUIsSUFBS2laLEVBQUluRixFQUFJbVEsR0FBTyxDQUVsQixJQUFLRSxFQUFhclEsR0FBSyxPQUFPLEVBRTlCLElBQUs5VCxFQUFRLE9BQU8sRUFFcEJza0IsRUFBUXhRLEdBRVIsT0FBT0EsRUFBR21RLEdBQU1NLEdBWWxCQyxTQVRhLFNBQVUxUSxHQUV2QixPQURJc1EsR0FBVTdKLEVBQUttQixNQUFReUksRUFBYXJRLEtBQVFtRixFQUFJbkYsRUFBSW1RLElBQU9LLEVBQVF4USxHQUNoRUEsSyxlQzVDVCxJQUFJMlEsRUFBTSxFQUFRLE1BQ2RwSyxFQUFVLEVBQVEsTUFDbEJxSyxFQUFTLEVBQVEsS0FBUixDQUFxQixZQUM5QnhLLEVBQVF3SyxFQUFPeEssUUFBVXdLLEVBQU94SyxNQUFRLElBQUssRUFBUSxPQUVyRHlLLEVBQXlCLFNBQVVyVixFQUFRc1YsRUFBVzVrQixHQUN4RCxJQUFJNmtCLEVBQWlCM0ssRUFBTWhCLElBQUk1SixHQUMvQixJQUFLdVYsRUFBZ0IsQ0FDbkIsSUFBSzdrQixFQUFRLE9BQ2JrYSxFQUFNL0csSUFBSTdELEVBQVF1VixFQUFpQixJQUFJSixHQUV6QyxJQUFJSyxFQUFjRCxFQUFlM0wsSUFBSTBMLEdBQ3JDLElBQUtFLEVBQWEsQ0FDaEIsSUFBSzlrQixFQUFRLE9BQ2I2a0IsRUFBZTFSLElBQUl5UixFQUFXRSxFQUFjLElBQUlMLEdBQ2hELE9BQU9LLEdBMEJYOWxCLEVBQU9uTixRQUFVLENBQ2Zxb0IsTUFBT0EsRUFDUGpuQixJQUFLMHhCLEVBQ0wxTCxJQTNCMkIsU0FBVThMLEVBQWF4bkIsRUFBRzhnQixHQUNyRCxJQUFJMkcsRUFBY0wsRUFBdUJwbkIsRUFBRzhnQixHQUFHLEdBQy9DLFlBQXVCamtCLElBQWhCNHFCLEdBQW9DQSxFQUFZL0wsSUFBSThMLElBMEIzRDdMLElBeEIyQixTQUFVNkwsRUFBYXhuQixFQUFHOGdCLEdBQ3JELElBQUkyRyxFQUFjTCxFQUF1QnBuQixFQUFHOGdCLEdBQUcsR0FDL0MsWUFBdUJqa0IsSUFBaEI0cUIsT0FBNEI1cUIsRUFBWTRxQixFQUFZOUwsSUFBSTZMLElBdUIvRDVSLElBckI4QixTQUFVNFIsRUFBYUUsRUFBZTFuQixFQUFHOGdCLEdBQ3ZFc0csRUFBdUJwbkIsRUFBRzhnQixHQUFHLEdBQU1sTCxJQUFJNFIsRUFBYUUsSUFxQnBEenlCLEtBbkI0QixTQUFVOGMsRUFBUXNWLEdBQzlDLElBQUlJLEVBQWNMLEVBQXVCclYsRUFBUXNWLEdBQVcsR0FDeERweUIsRUFBTyxHQUVYLE9BREl3eUIsR0FBYUEsRUFBWXZ5QixTQUFRLFNBQVV5eUIsRUFBR3h5QixHQUFPRixFQUFLaUosS0FBSy9JLE1BQzVERixHQWdCUEUsSUFkYyxTQUFVb2hCLEdBQ3hCLFlBQWMxWixJQUFQMFosR0FBaUMsaUJBQU5BLEVBQWlCQSxFQUFLcFcsT0FBT29XLElBYy9Ea0ssSUFaUSxTQUFVemdCLEdBQ2xCOGMsRUFBUUEsRUFBUWpHLEVBQUcsVUFBVzdXLE0sYUN0Q2hDLElBQUlXLEVBQVMsRUFBUSxNQUNqQmluQixFQUFZLFlBQ1pDLEVBQVdsbkIsRUFBT21uQixrQkFBb0JubkIsRUFBT29uQix1QkFDN0NuZ0IsRUFBVWpILEVBQU9pSCxRQUNqQkgsRUFBVTlHLEVBQU84RyxRQUNqQnVnQixFQUF1QyxXQUE5QixFQUFRLEtBQVIsQ0FBa0JwZ0IsR0FFL0JuRyxFQUFPbk4sUUFBVSxXQUNmLElBQUkyekIsRUFBTUMsRUFBTUMsRUFFWkMsRUFBUSxXQUNWLElBQUlDLEVBQVFsaEIsRUFFWixJQURJNmdCLElBQVdLLEVBQVN6Z0IsRUFBUUMsU0FBU3dnQixFQUFPQyxPQUN6Q0wsR0FBTSxDQUNYOWdCLEVBQUs4Z0IsRUFBSzlnQixHQUNWOGdCLEVBQU9BLEVBQUtwa0IsS0FDWixJQUNFc0QsSUFDQSxNQUFPbUosR0FHUCxNQUZJMlgsRUFBTUUsSUFDTEQsT0FBT3JyQixFQUNOeVQsR0FFUjRYLE9BQU9yckIsRUFDTHdyQixHQUFRQSxFQUFPRSxTQUlyQixHQUFJUCxFQUNGRyxFQUFTLFdBQ1B2Z0IsRUFBUTRnQixTQUFTSixTQUdkLElBQUlQLEdBQWNsbkIsRUFBTzhuQixXQUFhOW5CLEVBQU84bkIsVUFBVUMsV0FRdkQsR0FBSWpoQixHQUFXQSxFQUFRRixRQUFTLENBRXJDLElBQUlvaEIsRUFBVWxoQixFQUFRRixhQUFRMUssR0FDOUJzckIsRUFBUyxXQUNQUSxFQUFRN2tCLEtBQUtza0IsU0FTZkQsRUFBUyxXQUVQUCxFQUFVbm5CLEtBQUtFLEVBQVF5bkIsUUF2QmdELENBQ3pFLElBQUlRLEdBQVMsRUFDVEMsRUFBT2hKLFNBQVNpSixlQUFlLElBQ25DLElBQUlqQixFQUFTTyxHQUFPVyxRQUFRRixFQUFNLENBQUVHLGVBQWUsSUFDbkRiLEVBQVMsV0FDUFUsRUFBSzdjLEtBQU80YyxHQUFVQSxHQXNCMUIsT0FBTyxTQUFVemhCLEdBQ2YsSUFBSThoQixFQUFPLENBQUU5aEIsR0FBSUEsRUFBSXRELFVBQU1oSCxHQUN2QnFyQixJQUFNQSxFQUFLcmtCLEtBQU9vbEIsR0FDakJoQixJQUNIQSxFQUFPZ0IsRUFDUGQsS0FDQUQsRUFBT2UsSyw0QkNoRWIsSUFBSWpRLEVBQVksRUFBUSxNQUV4QixTQUFTa1EsRUFBa0I3UCxHQUN6QixJQUFJOVIsRUFBU0MsRUFDYnZGLEtBQUswbUIsUUFBVSxJQUFJdFAsR0FBRSxTQUFVOFAsRUFBV0MsR0FDeEMsUUFBZ0J2c0IsSUFBWjBLLFFBQW9DMUssSUFBWDJLLEVBQXNCLE1BQU1RLFVBQVUsMkJBQ25FVCxFQUFVNGhCLEVBQ1YzaEIsRUFBUzRoQixLQUVYbm5CLEtBQUtzRixRQUFVeVIsRUFBVXpSLEdBQ3pCdEYsS0FBS3VGLE9BQVN3UixFQUFVeFIsR0FHMUIvRixFQUFPbk4sUUFBUXlrQixFQUFJLFNBQVVNLEdBQzNCLE9BQU8sSUFBSTZQLEVBQWtCN1AsSyw0QkNkL0IsSUFBSXFCLEVBQWMsRUFBUSxNQUN0QnNGLEVBQVUsRUFBUSxNQUNsQkMsRUFBTyxFQUFRLE1BQ2ZDLEVBQU0sRUFBUSxNQUNkaEosRUFBVyxFQUFRLE1BQ25CaUIsRUFBVSxFQUFRLE1BQ2xCa1IsRUFBVXIwQixPQUFPczBCLE9BR3JCN25CLEVBQU9uTixTQUFXKzBCLEdBQVcsRUFBUSxLQUFSLEVBQW9CLFdBQy9DLElBQUlFLEVBQUksR0FDSnRQLEVBQUksR0FFSnBELEVBQUk3VixTQUNKd29CLEVBQUksdUJBR1IsT0FGQUQsRUFBRTFTLEdBQUssRUFDUDJTLEVBQUVqcEIsTUFBTSxJQUFJckwsU0FBUSxTQUFVc0csR0FBS3llLEVBQUV6ZSxHQUFLQSxLQUNkLEdBQXJCNnRCLEVBQVEsR0FBSUUsR0FBRzFTLElBQVc3aEIsT0FBT0MsS0FBS28wQixFQUFRLEdBQUlwUCxJQUFJcFEsS0FBSyxLQUFPMmYsS0FDdEUsU0FBZ0J6WCxFQUFRd08sR0FNM0IsSUFMQSxJQUFJdkcsRUFBSTlDLEVBQVNuRixHQUNiMEYsRUFBTy9GLFVBQVVuZSxPQUNqQnVqQixFQUFRLEVBQ1JxSixFQUFhRixFQUFLbEgsRUFDbEJzSCxFQUFTSCxFQUFJbkgsRUFDVnRCLEVBQU9YLEdBTVosSUFMQSxJQUlJM2hCLEVBSkEwaEIsRUFBSXNCLEVBQVF6RyxVQUFVb0YsTUFDdEI3aEIsRUFBT2tyQixFQUFhSCxFQUFRbkosR0FBR3pGLE9BQU8rTyxFQUFXdEosSUFBTW1KLEVBQVFuSixHQUMvRHRqQixFQUFTMEIsRUFBSzFCLE9BQ2R1RCxFQUFJLEVBRUR2RCxFQUFTdUQsR0FDZDNCLEVBQU1GLEVBQUs2QixLQUNONGpCLElBQWUyRixFQUFPNWYsS0FBS29XLEVBQUcxaEIsS0FBTTZrQixFQUFFN2tCLEdBQU8waEIsRUFBRTFoQixJQUV0RCxPQUFPNmtCLEdBQ1BxUCxHLGVDcENKLElBQUlsTixFQUFXLEVBQVEsTUFDbkJzTixFQUFNLEVBQVEsTUFDZEMsRUFBYyxFQUFRLE1BQ3RCQyxFQUFXLEVBQVEsS0FBUixDQUF5QixZQUNwQ0MsRUFBUSxhQUlSQyxFQUFhLFdBRWYsSUFJSUMsRUFKQUMsRUFBUyxFQUFRLEtBQVIsQ0FBeUIsVUFDbENwMkIsRUFBSSsxQixFQUFZbjJCLE9BY3BCLElBVkF3MkIsRUFBT0MsTUFBTUMsUUFBVSxPQUN2QixvQkFBK0JGLEdBQy9CQSxFQUFPNVQsSUFBTSxlQUdiMlQsRUFBaUJDLEVBQU9HLGNBQWNySyxVQUN2QnNLLE9BQ2ZMLEVBQWV0ZSxNQUFNNGUsdUNBQ3JCTixFQUFlTyxRQUNmUixFQUFhQyxFQUFlcFEsRUFDckIvbEIsWUFBWWsyQixFQUFvQixVQUFFSCxFQUFZLzFCLElBQ3JELE9BQU9rMkIsS0FHVHBvQixFQUFPbk4sUUFBVVUsT0FBT3lOLFFBQVUsU0FBZ0J6QyxFQUFHc3FCLEdBQ25ELElBQUl2bUIsRUFRSixPQVBVLE9BQU4vRCxHQUNGNHBCLEVBQWUsVUFBSXpOLEVBQVNuYyxHQUM1QitELEVBQVMsSUFBSTZsQixFQUNiQSxFQUFlLFVBQUksS0FFbkI3bEIsRUFBTzRsQixHQUFZM3BCLEdBQ2QrRCxFQUFTOGxCLFNBQ01odEIsSUFBZnl0QixFQUEyQnZtQixFQUFTMGxCLEVBQUkxbEIsRUFBUXVtQixLLGVDdkN6RCxJQUFJbk8sRUFBVyxFQUFRLE1BQ25Cb08sRUFBaUIsRUFBUSxLQUN6QjdLLEVBQWMsRUFBUSxNQUN0QnRGLEVBQUtwbEIsT0FBT2dELGVBRWhCMUQsRUFBUXlrQixFQUFJLEVBQVEsTUFBb0IvakIsT0FBT2dELGVBQWlCLFNBQXdCZ0ksRUFBRzhnQixFQUFHMEosR0FJNUYsR0FIQXJPLEVBQVNuYyxHQUNUOGdCLEVBQUlwQixFQUFZb0IsR0FBRyxHQUNuQjNFLEVBQVNxTyxHQUNMRCxFQUFnQixJQUNsQixPQUFPblEsRUFBR3BhLEVBQUc4Z0IsRUFBRzBKLEdBQ2hCLE1BQU9sYSxJQUNULEdBQUksUUFBU2thLEdBQWMsUUFBU0EsRUFBWSxNQUFNeGlCLFVBQVUsNEJBRWhFLE1BREksVUFBV3dpQixJQUFZeHFCLEVBQUU4Z0IsR0FBSzBKLEVBQVcvMUIsT0FDdEN1TCxJLGVDZFQsSUFBSW9hLEVBQUssRUFBUSxNQUNiK0IsRUFBVyxFQUFRLE1BQ25CNkQsRUFBVSxFQUFRLE1BRXRCdmUsRUFBT25OLFFBQVUsRUFBUSxNQUFvQlUsT0FBT3kxQixpQkFBbUIsU0FBMEJ6cUIsRUFBR3NxQixHQUNsR25PLEVBQVNuYyxHQUtULElBSkEsSUFHSThnQixFQUhBN3JCLEVBQU8rcUIsRUFBUXNLLEdBQ2YvMkIsRUFBUzBCLEVBQUsxQixPQUNkSSxFQUFJLEVBRURKLEVBQVNJLEdBQUd5bUIsRUFBR3JCLEVBQUUvWSxFQUFHOGdCLEVBQUk3ckIsRUFBS3RCLEtBQU0yMkIsRUFBV3hKLElBQ3JELE9BQU85Z0IsSSw0QkNUVHlCLEVBQU9uTixRQUFVLEVBQVEsUUFBa0IsRUFBUSxLQUFSLEVBQW9CLFdBQzdELElBQUlrMUIsRUFBSWgyQixLQUFLazNCLFNBR2JDLGlCQUFpQmxxQixLQUFLLEtBQU0rb0IsR0FBRyxzQkFDeEIsRUFBUSxNQUFhQSxPLGVDUDlCLElBQUl0SixFQUFNLEVBQVEsTUFDZHhCLEVBQWEsRUFBUSxNQUNyQjdHLEVBQVksRUFBUSxNQUNwQjZILEVBQWMsRUFBUSxNQUN0QmhFLEVBQU0sRUFBUSxNQUNkNk8sRUFBaUIsRUFBUSxLQUN6QkssRUFBTzUxQixPQUFPNjFCLHlCQUVsQnYyQixFQUFReWtCLEVBQUksRUFBUSxNQUFvQjZSLEVBQU8sU0FBa0M1cUIsRUFBRzhnQixHQUdsRixHQUZBOWdCLEVBQUk2WCxFQUFVN1gsR0FDZDhnQixFQUFJcEIsRUFBWW9CLEdBQUcsR0FDZnlKLEVBQWdCLElBQ2xCLE9BQU9LLEVBQUs1cUIsRUFBRzhnQixHQUNmLE1BQU94USxJQUNULEdBQUlvTCxFQUFJMWIsRUFBRzhnQixHQUFJLE9BQU9wQyxHQUFZd0IsRUFBSW5ILEVBQUV0WSxLQUFLVCxFQUFHOGdCLEdBQUk5Z0IsRUFBRThnQixNLGVDYnhELElBQUlqSixFQUFZLEVBQVEsTUFDcEJpVCxFQUFPLFVBQ1A3bUIsRUFBVyxHQUFHQSxTQUVkOG1CLEVBQStCLGlCQUFWMWlCLFFBQXNCQSxRQUFVclQsT0FBT2cyQixvQkFDNURoMkIsT0FBT2cyQixvQkFBb0IzaUIsUUFBVSxHQVV6QzVHLEVBQU9uTixRQUFReWtCLEVBQUksU0FBNkJ4QyxHQUM5QyxPQUFPd1UsR0FBb0MsbUJBQXJCOW1CLEVBQVN4RCxLQUFLOFYsR0FUakIsU0FBVUEsR0FDN0IsSUFDRSxPQUFPdVUsRUFBS3ZVLEdBQ1osTUFBT2pHLEdBQ1AsT0FBT3lhLEVBQVkvMEIsU0FLMENpMUIsQ0FBZTFVLEdBQU11VSxFQUFLalQsRUFBVXRCLE0sZUNoQnJHLElBQUkyVSxFQUFRLEVBQVEsTUFDaEJDLEVBQWEsZUFBbUMsU0FBVSxhQUU5RDcyQixFQUFReWtCLEVBQUkvakIsT0FBT2cyQixxQkFBdUIsU0FBNkJockIsR0FDckUsT0FBT2tyQixFQUFNbHJCLEVBQUdtckIsSyxhQ0xsQjcyQixFQUFReWtCLEVBQUkvakIsT0FBT28yQix1QixlQ0NuQixJQUFJMVAsRUFBTSxFQUFRLE1BQ2R4RSxFQUFXLEVBQVEsTUFDbkJ5UyxFQUFXLEVBQVEsS0FBUixDQUF5QixZQUNwQzBCLEVBQWNyMkIsT0FBT29MLFVBRXpCcUIsRUFBT25OLFFBQVVVLE9BQU9tTixnQkFBa0IsU0FBVW5DLEdBRWxELE9BREFBLEVBQUlrWCxFQUFTbFgsR0FDVDBiLEVBQUkxYixFQUFHMnBCLEdBQWtCM3BCLEVBQUUycEIsR0FDSCxtQkFBakIzcEIsRUFBRXZGLGFBQTZCdUYsYUFBYUEsRUFBRXZGLFlBQ2hEdUYsRUFBRXZGLFlBQVkyRixVQUNkSixhQUFhaEwsT0FBU3EyQixFQUFjLE8sZUNYL0MsSUFBSTNQLEVBQU0sRUFBUSxNQUNkN0QsRUFBWSxFQUFRLE1BQ3BCdEssRUFBZSxFQUFRLEtBQVIsRUFBNkIsR0FDNUNvYyxFQUFXLEVBQVEsS0FBUixDQUF5QixZQUV4Q2xvQixFQUFPbk4sUUFBVSxTQUFVNFAsRUFBUW9uQixHQUNqQyxJQUdJbjJCLEVBSEE2SyxFQUFJNlgsRUFBVTNULEdBQ2R2USxFQUFJLEVBQ0pvUSxFQUFTLEdBRWIsSUFBSzVPLEtBQU82SyxFQUFPN0ssR0FBT3cwQixHQUFVak8sRUFBSTFiLEVBQUc3SyxJQUFRNE8sRUFBTzdGLEtBQUsvSSxHQUUvRCxLQUFPbTJCLEVBQU0vM0IsT0FBU0ksR0FBTytuQixFQUFJMWIsRUFBRzdLLEVBQU1tMkIsRUFBTTMzQixTQUM3QzRaLEVBQWF4SixFQUFRNU8sSUFBUTRPLEVBQU83RixLQUFLL0ksSUFFNUMsT0FBTzRPLEksZUNkVCxJQUFJbW5CLEVBQVEsRUFBUSxNQUNoQnhCLEVBQWMsRUFBUSxNQUUxQmpvQixFQUFPbk4sUUFBVVUsT0FBT0MsTUFBUSxTQUFjK0ssR0FDNUMsT0FBT2tyQixFQUFNbHJCLEVBQUcwcEIsSyxhQ0xsQnAxQixFQUFReWtCLEVBQUksR0FBR2lMLHNCLGVDQ2YsSUFBSWxILEVBQVUsRUFBUSxNQUNsQndCLEVBQU8sRUFBUSxNQUNmckIsRUFBUSxFQUFRLE1BQ3BCeGIsRUFBT25OLFFBQVUsU0FBVXFwQixFQUFLMEQsR0FDOUIsSUFBSWxhLEdBQU1tWCxFQUFLdHBCLFFBQVUsSUFBSTJvQixJQUFRM29CLE9BQU8yb0IsR0FDeEM4QyxFQUFNLEdBQ1ZBLEVBQUk5QyxHQUFPMEQsRUFBS2xhLEdBQ2hCMlYsRUFBUUEsRUFBUWpHLEVBQUlpRyxFQUFRcEQsRUFBSXVELEdBQU0sV0FBYzlWLEVBQUcsTUFBUSxTQUFVc1osSyxlQ1IzRSxJQUFJL0YsRUFBYyxFQUFRLE1BQ3RCc0YsRUFBVSxFQUFRLE1BQ2xCbkksRUFBWSxFQUFRLE1BQ3BCd0ksRUFBUyxVQUNiNWUsRUFBT25OLFFBQVUsU0FBVWkzQixHQUN6QixPQUFPLFNBQVVoVixHQU9mLElBTkEsSUFLSXBoQixFQUxBNkssRUFBSTZYLEVBQVV0QixHQUNkdGhCLEVBQU8rcUIsRUFBUWhnQixHQUNmek0sRUFBUzBCLEVBQUsxQixPQUNkSSxFQUFJLEVBQ0pvUSxFQUFTLEdBRU54USxFQUFTSSxHQUNkd0IsRUFBTUYsRUFBS3RCLEtBQ04rbUIsSUFBZTJGLEVBQU81ZixLQUFLVCxFQUFHN0ssSUFDakM0TyxFQUFPN0YsS0FBS3F0QixFQUFZLENBQUNwMkIsRUFBSzZLLEVBQUU3SyxJQUFRNkssRUFBRTdLLElBRzlDLE9BQU80TyxLLGVDakJYLElBQUkrbUIsRUFBTyxFQUFRLE1BQ2Y3SyxFQUFPLEVBQVEsTUFDZjlELEVBQVcsRUFBUSxNQUNuQnFQLEVBQVUsZ0JBQ2QvcEIsRUFBT25OLFFBQVVrM0IsR0FBV0EsRUFBUUMsU0FBVyxTQUFpQmxWLEdBQzlELElBQUl0aEIsRUFBTzYxQixFQUFLL1IsRUFBRW9ELEVBQVM1RixJQUN2QjRKLEVBQWFGLEVBQUtsSCxFQUN0QixPQUFPb0gsRUFBYWxyQixFQUFLbWMsT0FBTytPLEVBQVc1SixJQUFPdGhCLEksZUNScEQsSUFBSXkyQixFQUFjLG1CQUNkQyxFQUFRLGFBRVpscUIsRUFBT25OLFFBQVUsRUFBSW8zQixFQUFZLEVBQVEsTUFBa0IsUUFBVSxJQUFZLFNBQW9CL2MsR0FDbkcsSUFBSXZELEVBQVN1Z0IsRUFBTXhyQixPQUFPd08sR0FBTSxHQUM1QjVLLEVBQVMybkIsRUFBWXRnQixHQUN6QixPQUFrQixJQUFYckgsR0FBb0MsS0FBcEJxSCxFQUFPckcsT0FBTyxJQUFhLEVBQUloQixHQUNwRDJuQixHLGVDUEosSUFBSUUsRUFBWSxpQkFDWkQsRUFBUSxhQUNSRSxFQUFLLEVBQVEsTUFDYkMsRUFBTSxjQUVWcnFCLEVBQU9uTixRQUFtQyxJQUF6QnMzQixFQUFVQyxFQUFLLE9BQTBDLEtBQTNCRCxFQUFVQyxFQUFLLFFBQWlCLFNBQWtCbGQsRUFBS29kLEdBQ3BHLElBQUkzZ0IsRUFBU3VnQixFQUFNeHJCLE9BQU93TyxHQUFNLEdBQ2hDLE9BQU9pZCxFQUFVeGdCLEVBQVMyZ0IsSUFBVSxJQUFPRCxFQUFJL3pCLEtBQUtxVCxHQUFVLEdBQUssTUFDakV3Z0IsRyxTQ1JKbnFCLEVBQU9uTixRQUFVLFNBQVUrc0IsR0FDekIsSUFDRSxNQUFPLENBQUUvUSxHQUFHLEVBQU9tTCxFQUFHNEYsS0FDdEIsTUFBTy9RLEdBQ1AsTUFBTyxDQUFFQSxHQUFHLEVBQU1tTCxFQUFHbkwsTSxjQ0p6QixJQUFJNkwsRUFBVyxFQUFRLE1BQ25CNWhCLEVBQVcsRUFBUSxNQUNuQnl4QixFQUF1QixFQUFRLE1BRW5DdnFCLEVBQU9uTixRQUFVLFNBQVUra0IsRUFBR25JLEdBRTVCLEdBREFpTCxFQUFTOUMsR0FDTDllLEVBQVMyVyxJQUFNQSxFQUFFelcsY0FBZ0I0ZSxFQUFHLE9BQU9uSSxFQUMvQyxJQUFJK2EsRUFBb0JELEVBQXFCalQsRUFBRU0sR0FHL0MsT0FEQTlSLEVBRGMwa0IsRUFBa0Ixa0IsU0FDeEIySixHQUNEK2EsRUFBa0J0RCxVLFNDVjNCbG5CLEVBQU9uTixRQUFVLFNBQVU0M0IsRUFBUXozQixHQUNqQyxNQUFPLENBQ0xrYyxhQUF1QixFQUFUdWIsR0FDZGhzQixlQUF5QixFQUFUZ3NCLEdBQ2hCanNCLFdBQXFCLEVBQVRpc0IsR0FDWnozQixNQUFPQSxLLGVDTFgsSUFBSXNvQixFQUFXLEVBQVEsTUFDdkJ0YixFQUFPbk4sUUFBVSxTQUFVeWQsRUFBUW9FLEVBQUtxUCxHQUN0QyxJQUFLLElBQUlyd0IsS0FBT2doQixFQUFLNEcsRUFBU2hMLEVBQVE1YyxFQUFLZ2hCLEVBQUloaEIsR0FBTXF3QixHQUNyRCxPQUFPelQsSSxlQ0hULElBQUlwUixFQUFTLEVBQVEsTUFDakIyZixFQUFPLEVBQVEsS0FDZjVFLEVBQU0sRUFBUSxNQUNkeVEsRUFBTSxFQUFRLEtBQVIsQ0FBa0IsT0FDeEJDLEVBQVksRUFBUSxLQUNwQkMsRUFBWSxXQUNaQyxHQUFPLEdBQUtGLEdBQVc3ckIsTUFBTThyQixHQUVqQyxzQkFBbUMsU0FBVTlWLEdBQzNDLE9BQU82VixFQUFVM3JCLEtBQUs4VixLQUd2QjlVLEVBQU9uTixRQUFVLFNBQVUwTCxFQUFHN0ssRUFBS2tZLEVBQUttWSxHQUN2QyxJQUFJK0csRUFBMkIsbUJBQVBsZixFQUNwQmtmLElBQVk3USxFQUFJck8sRUFBSyxTQUFXaVQsRUFBS2pULEVBQUssT0FBUWxZLElBQ2xENkssRUFBRTdLLEtBQVNrWSxJQUNYa2YsSUFBWTdRLEVBQUlyTyxFQUFLOGUsSUFBUTdMLEVBQUtqVCxFQUFLOGUsRUFBS25zQixFQUFFN0ssR0FBTyxHQUFLNkssRUFBRTdLLEdBQU9tM0IsRUFBSXppQixLQUFLMUosT0FBT2hMLE1BQ25GNkssSUFBTVcsRUFDUlgsRUFBRTdLLEdBQU9rWSxFQUNDbVksRUFHRHhsQixFQUFFN0ssR0FDWDZLLEVBQUU3SyxHQUFPa1ksRUFFVGlULEVBQUt0Z0IsRUFBRzdLLEVBQUtrWSxXQUxOck4sRUFBRTdLLEdBQ1RtckIsRUFBS3RnQixFQUFHN0ssRUFBS2tZLE9BT2Q3TSxTQUFTSixVQUFXaXNCLEdBQVcsV0FDaEMsTUFBc0IsbUJBQVJwcUIsTUFBc0JBLEtBQUtrcUIsSUFBUUMsRUFBVTNyQixLQUFLd0IsVSw0QkMzQmxFLElBQUlnYSxFQUFVLEVBQVEsTUFDbEJ1USxFQUFjL0osT0FBT3JpQixVQUFVaWhCLEtBSW5DNWYsRUFBT25OLFFBQVUsU0FBVTRzQixFQUFHckssR0FDNUIsSUFBSXdLLEVBQU9ILEVBQUVHLEtBQ2IsR0FBb0IsbUJBQVRBLEVBQXFCLENBQzlCLElBQUl0ZCxFQUFTc2QsRUFBSzVnQixLQUFLeWdCLEVBQUdySyxHQUMxQixHQUFzQixpQkFBWDlTLEVBQ1QsTUFBTSxJQUFJaUUsVUFBVSxzRUFFdEIsT0FBT2pFLEVBRVQsR0FBbUIsV0FBZmtZLEVBQVFpRixHQUNWLE1BQU0sSUFBSWxaLFVBQVUsK0NBRXRCLE9BQU93a0IsRUFBWS9yQixLQUFLeWdCLEVBQUdySyxLLDJCQ2pCN0IsSUFhTTRWLEVBQ0FDLEVBZEZDLEVBQWMsRUFBUSxNQUV0QkMsRUFBYW5LLE9BQU9yaUIsVUFBVWloQixLQUk5QndMLEVBQWdCMXNCLE9BQU9DLFVBQVU2VixRQUVqQzZXLEVBQWNGLEVBSWRHLEdBQ0VOLEVBQU0sSUFDTkMsRUFBTSxNQUNWRSxFQUFXbnNCLEtBQUtnc0IsRUFBSyxLQUNyQkcsRUFBV25zQixLQUFLaXNCLEVBQUssS0FDTSxJQUFwQkQsRUFBYyxXQUErQixJQUFwQkMsRUFBYyxXQUk1Q00sT0FBdUNud0IsSUFBdkIsT0FBT3drQixLQUFLLElBQUksSUFFeEIwTCxHQUE0QkMsS0FHdENGLEVBQWMsU0FBY25lLEdBQzFCLElBQ0lzZSxFQUFXQyxFQUFRcGIsRUFBT25lLEVBRDFCeXRCLEVBQUtuZixLQXdCVCxPQXJCSStxQixJQUNGRSxFQUFTLElBQUl6SyxPQUFPLElBQU1yQixFQUFHYixPQUFTLFdBQVlvTSxFQUFZbHNCLEtBQUsyZ0IsS0FFakUyTCxJQUEwQkUsRUFBWTdMLEVBQWEsV0FFdkR0UCxFQUFROGEsRUFBV25zQixLQUFLMmdCLEVBQUl6UyxHQUV4Qm9lLEdBQTRCamIsSUFDOUJzUCxFQUFhLFVBQUlBLEVBQUd6Z0IsT0FBU21SLEVBQU1nRixNQUFRaEYsRUFBTSxHQUFHdmUsT0FBUzA1QixHQUUzREQsR0FBaUJsYixHQUFTQSxFQUFNdmUsT0FBUyxHQUkzQ3M1QixFQUFjcHNCLEtBQUtxUixFQUFNLEdBQUlvYixHQUFRLFdBQ25DLElBQUt2NUIsRUFBSSxFQUFHQSxFQUFJK2QsVUFBVW5lLE9BQVMsRUFBR0ksU0FDZmtKLElBQWpCNlUsVUFBVS9kLEtBQWtCbWUsRUFBTW5lLFFBQUtrSixNQUsxQ2lWLElBSVhyUSxFQUFPbk4sUUFBVXc0QixHLFNDekRqQnJyQixFQUFPbk4sUUFBVSxTQUFVNjRCLEVBQVFsWCxHQUNqQyxJQUFJbVgsRUFBV25YLElBQVlqaEIsT0FBT2loQixHQUFXLFNBQVVvWCxHQUNyRCxPQUFPcFgsRUFBUW9YLElBQ2JwWCxFQUNKLE9BQU8sU0FBVU0sR0FDZixPQUFPcFcsT0FBT29XLEdBQUlOLFFBQVFrWCxFQUFRQyxNLFNDSnRDM3JCLEVBQU9uTixRQUFVVSxPQUFPOHFCLElBQU0sU0FBWTVPLEVBQUdDLEdBRTNDLE9BQU9ELElBQU1DLEVBQVUsSUFBTkQsR0FBVyxFQUFJQSxHQUFNLEVBQUlDLEVBQUlELEdBQUtBLEdBQUtDLEdBQUtBLEksNEJDRC9ELElBQUkyTCxFQUFVLEVBQVEsTUFDbEI5RCxFQUFZLEVBQVEsTUFDcEJkLEVBQU0sRUFBUSxNQUNkUCxFQUFRLEVBQVEsTUFFcEJsVyxFQUFPbk4sUUFBVSxTQUFVZzVCLEdBQ3pCeFEsRUFBUUEsRUFBUWpHLEVBQUd5VyxFQUFZLENBQUV2aUIsS0FBTSxTQUFjd1YsR0FDbkQsSUFDSWdOLEVBQVNoRSxFQUFHdGMsRUFBR3VnQixFQURmakssRUFBUTdSLFVBQVUsR0FLdEIsT0FIQXNILEVBQVUvVyxPQUNWc3JCLE9BQW9CMXdCLElBQVYwbUIsSUFDR3ZLLEVBQVV1SyxHQUNUMW1CLE1BQVYwakIsRUFBNEIsSUFBSXRlLE1BQ3BDc25CLEVBQUksR0FDQWdFLEdBQ0Z0Z0IsRUFBSSxFQUNKdWdCLEVBQUt0VixFQUFJcUwsRUFBTzdSLFVBQVUsR0FBSSxHQUM5QmlHLEVBQU00SSxHQUFRLEdBQU8sU0FBVWtOLEdBQzdCbEUsRUFBRXJyQixLQUFLc3ZCLEVBQUdDLEVBQVV4Z0IsVUFHdEIwSyxFQUFNNEksR0FBUSxFQUFPZ0osRUFBRXJyQixLQUFNcXJCLEdBRXhCLElBQUl0bkIsS0FBS3NuQixTLDRCQ3ZCcEIsSUFBSXpNLEVBQVUsRUFBUSxNQUV0QnJiLEVBQU9uTixRQUFVLFNBQVVnNUIsR0FDekJ4USxFQUFRQSxFQUFRakcsRUFBR3lXLEVBQVksQ0FBRUksR0FBSSxXQUduQyxJQUZBLElBQUluNkIsRUFBU21lLFVBQVVuZSxPQUNuQmcyQixFQUFJLElBQUkvekIsTUFBTWpDLEdBQ1hBLEtBQVVnMkIsRUFBRWgyQixHQUFVbWUsVUFBVW5lLEdBQ3ZDLE9BQU8sSUFBSTBPLEtBQUtzbkIsUSxlQ1BwQixJQUFJaHZCLEVBQVcsRUFBUSxNQUNuQjRoQixFQUFXLEVBQVEsTUFDbkJ3UixFQUFRLFNBQVUzdEIsRUFBR3lkLEdBRXZCLEdBREF0QixFQUFTbmMsSUFDSnpGLEVBQVNrakIsSUFBb0IsT0FBVkEsRUFBZ0IsTUFBTXpWLFVBQVV5VixFQUFRLDhCQUVsRWhjLEVBQU9uTixRQUFVLENBQ2ZzaEIsSUFBSzVnQixPQUFPZ08saUJBQW1CLGFBQWUsR0FDNUMsU0FBVWpMLEVBQU02MUIsRUFBT2hZLEdBQ3JCLEtBQ0VBLEVBQU0sRUFBUSxLQUFSLENBQWtCcFYsU0FBU0MsS0FBTSxVQUE0QnpMLE9BQU9vTCxVQUFXLGFBQWF3VixJQUFLLElBQ25HN2QsRUFBTSxJQUNWNjFCLElBQVU3MUIsYUFBZ0J2QyxPQUMxQixNQUFPOGEsR0FBS3NkLEdBQVEsRUFDdEIsT0FBTyxTQUF3QjV0QixFQUFHeWQsR0FJaEMsT0FIQWtRLEVBQU0zdEIsRUFBR3lkLEdBQ0xtUSxFQUFPNXRCLEVBQUVpRCxVQUFZd2EsRUFDcEI3SCxFQUFJNVYsRUFBR3lkLEdBQ0x6ZCxHQVZYLENBWUUsSUFBSSxRQUFTbkQsR0FDakI4d0IsTUFBT0EsSSw0QkN0QlQsSUFBSWh0QixFQUFTLEVBQVEsTUFDakJ5WixFQUFLLEVBQVEsTUFDYk0sRUFBYyxFQUFRLE1BQ3RCdkIsRUFBVSxFQUFRLEtBQVIsQ0FBa0IsV0FFaEMxWCxFQUFPbk4sUUFBVSxTQUFVcXBCLEdBQ3pCLElBQUl0RSxFQUFJMVksRUFBT2dkLEdBQ1hqRCxHQUFlckIsSUFBTUEsRUFBRUYsSUFBVWlCLEVBQUdyQixFQUFFTSxFQUFHRixFQUFTLENBQ3BEalosY0FBYyxFQUNkeWIsSUFBSyxXQUFjLE9BQU8xWixVLGNDVjlCLElBQUkyWixFQUFNLFVBQ05GLEVBQU0sRUFBUSxNQUNkNUIsRUFBTSxFQUFRLEtBQVIsQ0FBa0IsZUFFNUJyWSxFQUFPbk4sUUFBVSxTQUFVaWlCLEVBQUlzWCxFQUFLQyxHQUM5QnZYLElBQU9tRixFQUFJbkYsRUFBS3VYLEVBQU92WCxFQUFLQSxFQUFHblcsVUFBVzBaLElBQU04QixFQUFJckYsRUFBSXVELEVBQUssQ0FBRTVaLGNBQWMsRUFBTXpMLE1BQU9vNUIsTSxlQ0xoRyxJQUFJMUcsRUFBUyxFQUFRLEtBQVIsQ0FBcUIsUUFDOUI0RyxFQUFNLEVBQVEsTUFDbEJ0c0IsRUFBT25OLFFBQVUsU0FBVWEsR0FDekIsT0FBT2d5QixFQUFPaHlCLEtBQVNneUIsRUFBT2h5QixHQUFPNDRCLEVBQUk1NEIsTSxlQ0gzQyxJQUFJbXBCLEVBQU8sRUFBUSxNQUNmM2QsRUFBUyxFQUFRLE1BQ2pCcXRCLEVBQVMscUJBQ1RyUixFQUFRaGMsRUFBT3F0QixLQUFZcnRCLEVBQU9xdEIsR0FBVSxLQUUvQ3ZzQixFQUFPbk4sUUFBVSxTQUFVYSxFQUFLVixHQUMvQixPQUFPa29CLEVBQU14bkIsS0FBU3duQixFQUFNeG5CLFFBQWlCMEgsSUFBVnBJLEVBQXNCQSxFQUFRLE1BQ2hFLFdBQVksSUFBSXlKLEtBQUssQ0FDdEJxZ0IsUUFBU0QsRUFBS0MsUUFDZDBQLEtBQU0sRUFBUSxNQUFnQixPQUFTLFNBQ3ZDQyxVQUFXLDBDLGVDVGIsSUFBSS9SLEVBQVcsRUFBUSxNQUNuQm5ELEVBQVksRUFBUSxNQUNwQkcsRUFBVSxFQUFRLEtBQVIsQ0FBa0IsV0FDaEMxWCxFQUFPbk4sUUFBVSxTQUFVMEwsRUFBR211QixHQUM1QixJQUNJdFgsRUFEQXdDLEVBQUk4QyxFQUFTbmMsR0FBR3ZGLFlBRXBCLFlBQWFvQyxJQUFOd2MsR0FBaUR4YyxPQUE3QmdhLEVBQUlzRixFQUFTOUMsR0FBR0YsSUFBeUJnVixFQUFJblYsRUFBVW5DLEssNEJDTnBGLElBQUlvRyxFQUFRLEVBQVEsTUFFcEJ4YixFQUFPbk4sUUFBVSxTQUFVc1EsRUFBUXpCLEdBQ2pDLFFBQVN5QixHQUFVcVksR0FBTSxXQUV2QjlaLEVBQU15QixFQUFPbkUsS0FBSyxNQUFNLGNBQTZCLEdBQUttRSxFQUFPbkUsS0FBSyxXLGVDTjFFLElBQUkydEIsRUFBWSxFQUFRLE1BQ3BCOU0sRUFBVSxFQUFRLE1BR3RCN2YsRUFBT25OLFFBQVUsU0FBVSszQixHQUN6QixPQUFPLFNBQVV2VCxFQUFNeEgsR0FDckIsSUFHSUwsRUFBR2pFLEVBSEhvUyxFQUFJamYsT0FBT21oQixFQUFReEksSUFDbkJubEIsRUFBSXk2QixFQUFVOWMsR0FDZDdWLEVBQUkyakIsRUFBRTdyQixPQUVWLE9BQUlJLEVBQUksR0FBS0EsR0FBSzhILEVBQVU0d0IsRUFBWSxRQUFLeHZCLEdBQzdDb1UsRUFBSW1PLEVBQUVoVyxXQUFXelYsSUFDTixPQUFVc2QsRUFBSSxPQUFVdGQsRUFBSSxJQUFNOEgsSUFBTXVSLEVBQUlvUyxFQUFFaFcsV0FBV3pWLEVBQUksSUFBTSxPQUFVcVosRUFBSSxNQUN4RnFmLEVBQVlqTixFQUFFcmEsT0FBT3BSLEdBQUtzZCxFQUMxQm9iLEVBQVlqTixFQUFFcHBCLE1BQU1yQyxFQUFHQSxFQUFJLEdBQTJCcVosRUFBSSxPQUF6QmlFLEVBQUksT0FBVSxJQUFxQixTLGNDYjVFLElBQUlrVCxFQUFXLEVBQVEsTUFDbkI3QyxFQUFVLEVBQVEsTUFFdEI3ZixFQUFPbk4sUUFBVSxTQUFVd2tCLEVBQU11VixFQUFjblQsR0FDN0MsR0FBSWlKLEVBQVNrSyxHQUFlLE1BQU1ybUIsVUFBVSxVQUFZa1QsRUFBTywwQkFDL0QsT0FBTy9hLE9BQU9taEIsRUFBUXhJLE0sZUNOeEIsSUFBSWdFLEVBQVUsRUFBUSxNQUNsQkcsRUFBUSxFQUFRLE1BQ2hCcUUsRUFBVSxFQUFRLE1BQ2xCZ04sRUFBTyxLQUVQQyxFQUFhLFNBQVVuakIsRUFBUXlpQixFQUFLVyxFQUFXLzVCLEdBQ2pELElBQUlvaUIsRUFBSTFXLE9BQU9taEIsRUFBUWxXLElBQ25CeFgsRUFBSyxJQUFNaTZCLEVBRWYsTUFEa0IsS0FBZFcsSUFBa0I1NkIsR0FBTSxJQUFNNDZCLEVBQVksS0FBT3J1QixPQUFPMUwsR0FBT3doQixRQUFRcVksRUFBTSxVQUFZLEtBQ3RGMTZCLEVBQUssSUFBTWlqQixFQUFJLEtBQU9nWCxFQUFNLEtBRXJDcHNCLEVBQU9uTixRQUFVLFNBQVU0bUIsRUFBTW1HLEdBQy9CLElBQUlyaEIsRUFBSSxHQUNSQSxFQUFFa2IsR0FBUW1HLEVBQUtrTixHQUNmelIsRUFBUUEsRUFBUWdFLEVBQUloRSxFQUFRcEQsRUFBSXVELEdBQU0sV0FDcEMsSUFBSWxsQixFQUFPLEdBQUdtakIsR0FBTSxLQUNwQixPQUFPbmpCLElBQVNBLEVBQUt3VSxlQUFpQnhVLEVBQUt3SSxNQUFNLEtBQUtoTixPQUFTLEtBQzdELFNBQVV5TSxLLGVDaEJoQixJQUFJb1gsRUFBVyxFQUFRLE1BQ25CcVgsRUFBUyxFQUFRLE1BQ2pCbk4sRUFBVSxFQUFRLE1BRXRCN2YsRUFBT25OLFFBQVUsU0FBVXdrQixFQUFNNFYsRUFBV0MsRUFBWUMsR0FDdEQsSUFBSS9YLEVBQUkxVyxPQUFPbWhCLEVBQVF4SSxJQUNuQitWLEVBQWVoWSxFQUFFdGpCLE9BQ2pCdTdCLE9BQXlCanlCLElBQWY4eEIsRUFBMkIsSUFBTXh1QixPQUFPd3VCLEdBQ2xESSxFQUFlM1gsRUFBU3NYLEdBQzVCLEdBQUlLLEdBQWdCRixHQUEyQixJQUFYQyxFQUFlLE9BQU9qWSxFQUMxRCxJQUFJbVksRUFBVUQsRUFBZUYsRUFDekJJLEVBQWVSLEVBQU9odUIsS0FBS3F1QixFQUFTdDdCLEtBQUswN0IsS0FBS0YsRUFBVUYsRUFBUXY3QixTQUVwRSxPQURJMDdCLEVBQWExN0IsT0FBU3k3QixJQUFTQyxFQUFlQSxFQUFhajVCLE1BQU0sRUFBR2c1QixJQUNqRUosRUFBT0ssRUFBZXBZLEVBQUlBLEVBQUlvWSxJLDRCQ2J2QyxJQUFJYixFQUFZLEVBQVEsTUFDcEI5TSxFQUFVLEVBQVEsTUFFdEI3ZixFQUFPbk4sUUFBVSxTQUFnQmlqQixHQUMvQixJQUFJNUksRUFBTXhPLE9BQU9taEIsRUFBUXJmLE9BQ3JCcU4sRUFBTSxHQUNOckMsRUFBSW1oQixFQUFVN1csR0FDbEIsR0FBSXRLLEVBQUksR0FBS0EsR0FBSzZJLElBQVUsTUFBTW5MLFdBQVcsMkJBQzdDLEtBQU1zQyxFQUFJLEdBQUlBLEtBQU8sS0FBTzBCLEdBQU9BLEdBQWMsRUFBSjFCLElBQU9xQyxHQUFPWCxHQUMzRCxPQUFPVyxJLGVDVlQsSUFBSXdOLEVBQVUsRUFBUSxNQUNsQndFLEVBQVUsRUFBUSxNQUNsQnJFLEVBQVEsRUFBUSxNQUNoQmtTLEVBQVMsRUFBUSxNQUNqQkMsRUFBUSxJQUFNRCxFQUFTLElBRXZCRSxFQUFRNU0sT0FBTyxJQUFNMk0sRUFBUUEsRUFBUSxLQUNyQ0UsRUFBUTdNLE9BQU8yTSxFQUFRQSxFQUFRLE1BRS9CRyxFQUFXLFNBQVU1UixFQUFLMEQsRUFBTW1PLEdBQ2xDLElBQUkvTyxFQUFNLEdBQ05nUCxFQUFReFMsR0FBTSxXQUNoQixRQUFTa1MsRUFBT3hSLE1BUFYsV0FPd0JBLFFBRTVCeFcsRUFBS3NaLEVBQUk5QyxHQUFPOFIsRUFBUXBPLEVBQUtyTCxHQUFRbVosRUFBT3hSLEdBQzVDNlIsSUFBTy9PLEVBQUkrTyxHQUFTcm9CLEdBQ3hCMlYsRUFBUUEsRUFBUWdFLEVBQUloRSxFQUFRcEQsRUFBSStWLEVBQU8sU0FBVWhQLElBTS9DekssRUFBT3VaLEVBQVN2WixLQUFPLFNBQVU1SyxFQUFRaU4sR0FJM0MsT0FIQWpOLEVBQVNqTCxPQUFPbWhCLEVBQVFsVyxJQUNiLEVBQVBpTixJQUFVak4sRUFBU0EsRUFBTzZLLFFBQVFvWixFQUFPLEtBQ2xDLEVBQVBoWCxJQUFVak4sRUFBU0EsRUFBTzZLLFFBQVFxWixFQUFPLEtBQ3RDbGtCLEdBR1QzSixFQUFPbk4sUUFBVWk3QixHLFNDN0JqQjl0QixFQUFPbk4sUUFBVSxrRCxlQ0FqQixJQWFJbzdCLEVBQU9DLEVBQVNDLEVBYmhCMVgsRUFBTSxFQUFRLE1BQ2Q1USxFQUFTLEVBQVEsTUFDakJ1b0IsRUFBTyxFQUFRLE1BQ2ZDLEVBQU0sRUFBUSxNQUNkbnZCLEVBQVMsRUFBUSxNQUNqQmlILEVBQVVqSCxFQUFPaUgsUUFDakJtb0IsRUFBVXB2QixFQUFPcXZCLGFBQ2pCQyxFQUFZdHZCLEVBQU91dkIsZUFDbkJDLEVBQWlCeHZCLEVBQU93dkIsZUFDeEJDLEVBQVd6dkIsRUFBT3l2QixTQUNsQkMsRUFBVSxFQUNWQyxFQUFRLEdBR1JDLEVBQU0sV0FDUixJQUFJLzVCLEdBQU15TCxLQUVWLEdBQUlxdUIsRUFBTXh2QixlQUFldEssR0FBSyxDQUM1QixJQUFJMlEsRUFBS21wQixFQUFNOTVCLFVBQ1I4NUIsRUFBTTk1QixHQUNiMlEsTUFHQXFwQixFQUFXLFNBQVVDLEdBQ3ZCRixFQUFJOXZCLEtBQUtnd0IsRUFBTXprQixPQUdaK2pCLEdBQVlFLElBQ2ZGLEVBQVUsU0FBc0I1b0IsR0FHOUIsSUFGQSxJQUFJd1MsRUFBTyxHQUNQaG1CLEVBQUksRUFDRCtkLFVBQVVuZSxPQUFTSSxHQUFHZ21CLEVBQUt6YixLQUFLd1QsVUFBVS9kLE1BTWpELE9BTEEyOEIsSUFBUUQsR0FBVyxXQUVqQi9vQixFQUFvQixtQkFBTkgsRUFBbUJBLEVBQUszRyxTQUFTMkcsR0FBS3dTLElBRXREK1YsRUFBTVcsR0FDQ0EsR0FFVEosRUFBWSxTQUF3Qno1QixVQUMzQjg1QixFQUFNOTVCLElBR21CLFdBQTlCLEVBQVEsS0FBUixDQUFrQm9SLEdBQ3BCOG5CLEVBQVEsU0FBVWw1QixHQUNoQm9SLEVBQVE0Z0IsU0FBU3RRLEVBQUlxWSxFQUFLLzVCLEVBQUksS0FHdkI0NUIsR0FBWUEsRUFBU00sSUFDOUJoQixFQUFRLFNBQVVsNUIsR0FDaEI0NUIsRUFBU00sSUFBSXhZLEVBQUlxWSxFQUFLLzVCLEVBQUksS0FHbkIyNUIsR0FFVFAsR0FEQUQsRUFBVSxJQUFJUSxHQUNDUSxNQUNmaEIsRUFBUWlCLE1BQU1DLFVBQVlMLEVBQzFCZCxFQUFReFgsRUFBSTBYLEVBQUtrQixZQUFhbEIsRUFBTSxJQUczQmp2QixFQUFPb3dCLGtCQUEwQyxtQkFBZkQsY0FBOEJud0IsRUFBT3F3QixlQUNoRnRCLEVBQVEsU0FBVWw1QixHQUNoQm1LLEVBQU9td0IsWUFBWXQ2QixFQUFLLEdBQUksTUFFOUJtSyxFQUFPb3dCLGlCQUFpQixVQUFXUCxHQUFVLElBRzdDZCxFQXZEcUIsdUJBc0RVSSxFQUFJLFVBQzNCLFNBQVV0NUIsR0FDaEJxNUIsRUFBS29CLFlBQVluQixFQUFJLFdBQTZCLG1CQUFJLFdBQ3BERCxFQUFLcUIsWUFBWWp2QixNQUNqQnN1QixFQUFJOXZCLEtBQUtqSyxLQUtMLFNBQVVBLEdBQ2hCMjZCLFdBQVdqWixFQUFJcVksRUFBSy81QixFQUFJLEdBQUksS0FJbENpTCxFQUFPbk4sUUFBVSxDQUNmc2hCLElBQUttYSxFQUNMelUsTUFBTzJVLEksZUNsRlQsSUFBSTdCLEVBQVksRUFBUSxNQUNwQnZjLEVBQU1yZSxLQUFLcWUsSUFDWHhDLEVBQU03YixLQUFLNmIsSUFDZjVOLEVBQU9uTixRQUFVLFNBQVV3aUIsRUFBT3ZqQixHQUVoQyxPQURBdWpCLEVBQVFzWCxFQUFVdFgsSUFDSCxFQUFJakYsRUFBSWlGLEVBQVF2akIsRUFBUSxHQUFLOGIsRUFBSXlILEVBQU92akIsSyxlQ0p6RCxJQUFJNjZCLEVBQVksRUFBUSxNQUNwQmhYLEVBQVcsRUFBUSxNQUN2QjNWLEVBQU9uTixRQUFVLFNBQVVpaUIsR0FDekIsUUFBVzFaLElBQVAwWixFQUFrQixPQUFPLEVBQzdCLElBQUk2YSxFQUFTaEQsRUFBVTdYLEdBQ25CaGpCLEVBQVM2akIsRUFBU2dhLEdBQ3RCLEdBQUlBLElBQVc3OUIsRUFBUSxNQUFNb1gsV0FBVyxpQkFDeEMsT0FBT3BYLEksU0NQVCxJQUFJMjdCLEVBQU8xN0IsS0FBSzA3QixLQUNaaEwsRUFBUTF3QixLQUFLMHdCLE1BQ2pCemlCLEVBQU9uTixRQUFVLFNBQVVpaUIsR0FDekIsT0FBT3plLE1BQU15ZSxHQUFNQSxHQUFNLEdBQUtBLEVBQUssRUFBSTJOLEVBQVFnTCxHQUFNM1ksSyxlQ0h2RCxJQUFJNEIsRUFBVSxFQUFRLE1BQ2xCbUosRUFBVSxFQUFRLE1BQ3RCN2YsRUFBT25OLFFBQVUsU0FBVWlpQixHQUN6QixPQUFPNEIsRUFBUW1KLEVBQVEvSyxNLGVDSHpCLElBQUk2WCxFQUFZLEVBQVEsTUFDcEIvZSxFQUFNN2IsS0FBSzZiLElBQ2Y1TixFQUFPbk4sUUFBVSxTQUFVaWlCLEdBQ3pCLE9BQU9BLEVBQUssRUFBSWxILEVBQUkrZSxFQUFVN1gsR0FBSyxrQkFBb0IsSSxlQ0h6RCxJQUFJK0ssRUFBVSxFQUFRLE1BQ3RCN2YsRUFBT25OLFFBQVUsU0FBVWlpQixHQUN6QixPQUFPdmhCLE9BQU9zc0IsRUFBUS9LLE0sZUNGeEIsSUFBSWhjLEVBQVcsRUFBUSxNQUd2QmtILEVBQU9uTixRQUFVLFNBQVVpaUIsRUFBSU0sR0FDN0IsSUFBS3RjLEVBQVNnYyxHQUFLLE9BQU9BLEVBQzFCLElBQUlwUCxFQUFJa0csRUFDUixHQUFJd0osR0FBa0MsbUJBQXJCMVAsRUFBS29QLEVBQUd0UyxZQUE0QjFKLEVBQVM4UyxFQUFNbEcsRUFBRzFHLEtBQUs4VixJQUFNLE9BQU9sSixFQUN6RixHQUFnQyxtQkFBcEJsRyxFQUFLb1AsRUFBRzhhLFdBQTJCOTJCLEVBQVM4UyxFQUFNbEcsRUFBRzFHLEtBQUs4VixJQUFNLE9BQU9sSixFQUNuRixJQUFLd0osR0FBa0MsbUJBQXJCMVAsRUFBS29QLEVBQUd0UyxZQUE0QjFKLEVBQVM4UyxFQUFNbEcsRUFBRzFHLEtBQUs4VixJQUFNLE9BQU9sSixFQUMxRixNQUFNckYsVUFBVSw2Qyw0QkNUbEIsR0FBSSxFQUFRLE1BQW1CLENBQzdCLElBQUlxYyxFQUFVLEVBQVEsTUFDbEIxakIsRUFBUyxFQUFRLE1BQ2pCc2MsRUFBUSxFQUFRLE1BQ2hCSCxFQUFVLEVBQVEsTUFDbEJ3VSxFQUFTLEVBQVEsTUFDakJDLEVBQVUsRUFBUSxNQUNsQnJaLEVBQU0sRUFBUSxNQUNkb0MsRUFBYSxFQUFRLE1BQ3JCa1gsRUFBZSxFQUFRLE1BQ3ZCbFIsRUFBTyxFQUFRLEtBQ2ZqRyxFQUFjLEVBQVEsTUFDdEIrVCxFQUFZLEVBQVEsTUFDcEJoWCxFQUFXLEVBQVEsTUFDbkJxYSxFQUFVLEVBQVEsTUFDbEJ0YSxFQUFrQixFQUFRLE1BQzFCdUksRUFBYyxFQUFRLE1BQ3RCaEUsRUFBTSxFQUFRLE1BQ2RPLEVBQVUsRUFBUSxNQUNsQjFoQixFQUFXLEVBQVEsTUFDbkIyYyxFQUFXLEVBQVEsTUFDbkJzTSxFQUFjLEVBQVEsTUFDdEIvZ0IsRUFBUyxFQUFRLE1BQ2pCTixFQUFpQixFQUFRLE1BQ3pCMm9CLEVBQU8sVUFDUHJILEVBQVksRUFBUSxLQUNwQnNLLEVBQU0sRUFBUSxNQUNkeE0sRUFBTSxFQUFRLE1BQ2RuRixFQUFvQixFQUFRLE1BQzVCc1YsRUFBc0IsRUFBUSxNQUM5QnBZLEVBQXFCLEVBQVEsTUFDN0JxWSxFQUFpQixFQUFRLE1BQ3pCMU4sRUFBWSxFQUFRLEtBQ3BCL0csRUFBYyxFQUFRLE1BQ3RCekMsRUFBYSxFQUFRLE1BQ3JCbVgsRUFBWSxFQUFRLE1BQ3BCQyxFQUFrQixFQUFRLE1BQzFCQyxFQUFNLEVBQVEsTUFDZEMsRUFBUSxFQUFRLE1BQ2hCM1gsRUFBSzBYLEVBQUkvWSxFQUNUNlIsRUFBT21ILEVBQU1oWixFQUNicE8sRUFBYWhLLEVBQU9nSyxXQUNwQjNDLEVBQVlySCxFQUFPcUgsVUFDbkI4QixFQUFhbkosRUFBT21KLFdBQ3BCa29CLEVBQWUsY0FDZkMsRUFBZ0Isb0JBQ2hCQyxFQUFvQixvQkFFcEJ2YixFQUFhbmhCLE1BQWUsVUFDNUIyOEIsRUFBZVosRUFBUWxiLFlBQ3ZCK2IsRUFBWWIsRUFBUWMsU0FDcEJDLEVBQWVsVyxFQUFrQixHQUNqQ21XLEVBQWNuVyxFQUFrQixHQUNoQ29XLEdBQVlwVyxFQUFrQixHQUM5QnFXLEdBQWFyVyxFQUFrQixHQUMvQkUsR0FBWUYsRUFBa0IsR0FDOUJHLEdBQWlCSCxFQUFrQixHQUNuQ3NXLEdBQWdCaEIsR0FBb0IsR0FDcENua0IsR0FBZW1rQixHQUFvQixHQUNuQ2lCLEdBQWNoQixFQUFldHZCLE9BQzdCdXdCLEdBQVlqQixFQUFlMThCLEtBQzNCNDlCLEdBQWVsQixFQUFlL1QsUUFDOUJrVixHQUFtQm5jLEVBQVduSixZQUM5QnVsQixHQUFjcGMsRUFBV3FjLE9BQ3pCQyxHQUFtQnRjLEVBQVd1YyxZQUM5QkMsR0FBWXhjLEVBQVc5TSxLQUN2QnVwQixHQUFZemMsRUFBVzBjLEtBQ3ZCOVosR0FBYTVDLEVBQVczZ0IsTUFDeEJzOUIsR0FBZ0IzYyxFQUFXMVMsU0FDM0JzdkIsR0FBc0I1YyxFQUFXNmMsZUFDakM1YixHQUFXMkosRUFBSSxZQUNmekgsR0FBTXlILEVBQUksZUFDVmtTLEdBQW9CMUYsRUFBSSxxQkFDeEIyRixHQUFrQjNGLEVBQUksbUJBQ3RCNEYsR0FBbUJyQyxFQUFPc0MsT0FDMUJDLEdBQWN2QyxFQUFPd0MsTUFDckJDLEdBQU96QyxFQUFPeUMsS0FDZEMsR0FBZSxnQkFFZkMsR0FBTzdYLEVBQWtCLEdBQUcsU0FBVXBjLEVBQUd6TSxHQUMzQyxPQUFPMmdDLEdBQVM1YSxFQUFtQnRaLEVBQUdBLEVBQUUwekIsS0FBbUJuZ0MsTUFHekQ0Z0MsR0FBZ0JsWCxHQUFNLFdBRXhCLE9BQTBELElBQW5ELElBQUluVCxFQUFXLElBQUlzcUIsWUFBWSxDQUFDLElBQUlobkIsUUFBUSxNQUdqRGluQixLQUFldnFCLEtBQWdCQSxFQUFvQixVQUFFOEwsS0FBT3FILEdBQU0sV0FDcEUsSUFBSW5ULEVBQVcsR0FBRzhMLElBQUksT0FHcEIwZSxHQUFXLFNBQVUvZCxFQUFJZ2UsR0FDM0IsSUFBSXRtQixFQUFTbWdCLEVBQVU3WCxHQUN2QixHQUFJdEksRUFBUyxHQUFLQSxFQUFTc21CLEVBQU8sTUFBTTVwQixFQUFXLGlCQUNuRCxPQUFPc0QsR0FHTDJNLEdBQVcsU0FBVXJFLEdBQ3ZCLEdBQUloYyxFQUFTZ2MsSUFBT3NkLE1BQWV0ZCxFQUFJLE9BQU9BLEVBQzlDLE1BQU12TyxFQUFVdU8sRUFBSywyQkFHbkIyZCxHQUFXLFNBQVU3YSxFQUFHOWxCLEdBQzFCLElBQU1nSCxFQUFTOGUsTUFBTW9hLE1BQXFCcGEsR0FDeEMsTUFBTXJSLEVBQVUsd0NBQ2hCLE9BQU8sSUFBSXFSLEVBQUU5bEIsSUFHYmloQyxHQUFrQixTQUFVeDBCLEVBQUdxUixHQUNqQyxPQUFPb2pCLEdBQVNuYixFQUFtQnRaLEVBQUdBLEVBQUUwekIsS0FBbUJyaUIsSUFHekRvakIsR0FBVyxTQUFVcGIsRUFBR2hJLEdBSTFCLElBSEEsSUFBSXlGLEVBQVEsRUFDUnZqQixFQUFTOGQsRUFBSzlkLE9BQ2R3USxFQUFTbXdCLEdBQVM3YSxFQUFHOWxCLEdBQ2xCQSxFQUFTdWpCLEdBQU8vUyxFQUFPK1MsR0FBU3pGLEVBQUt5RixLQUM1QyxPQUFPL1MsR0FHTDJ3QixHQUFZLFNBQVVuZSxFQUFJcGhCLEVBQUt3L0IsR0FDakN2YSxFQUFHN0QsRUFBSXBoQixFQUFLLENBQUV3bUIsSUFBSyxXQUFjLE9BQU8xWixLQUFLMnlCLEdBQUdELE9BRzlDRSxHQUFRLFNBQWN0VSxHQUN4QixJQUtJNXNCLEVBQUdKLEVBQVE4TyxFQUFRMEIsRUFBUXlXLEVBQU10WixFQUxqQ2xCLEVBQUlrWCxFQUFTcUosR0FDYjlJLEVBQU8vRixVQUFVbmUsT0FDakJ1aEMsRUFBUXJkLEVBQU8sRUFBSS9GLFVBQVUsUUFBSzdVLEVBQ2xDMHdCLE9BQW9CMXdCLElBQVZpNEIsRUFDVmxSLEVBQVNILEVBQVV6akIsR0FFdkIsR0FBY25ELE1BQVYrbUIsSUFBd0JKLEVBQVlJLEdBQVMsQ0FDL0MsSUFBSzFpQixFQUFXMGlCLEVBQU9uakIsS0FBS1QsR0FBSXFDLEVBQVMsR0FBSTFPLEVBQUksSUFBSzZtQixFQUFPdFosRUFBUzJDLFFBQVFHLEtBQU1yUSxJQUNsRjBPLEVBQU9uRSxLQUFLc2MsRUFBSy9sQixPQUNqQnVMLEVBQUlxQyxFQUdSLElBRElrckIsR0FBVzlWLEVBQU8sSUFBR3FkLEVBQVE1YyxFQUFJNGMsRUFBT3BqQixVQUFVLEdBQUksSUFDckQvZCxFQUFJLEVBQUdKLEVBQVM2akIsRUFBU3BYLEVBQUV6TSxRQUFTd1EsRUFBU213QixHQUFTanlCLEtBQU0xTyxHQUFTQSxFQUFTSSxFQUFHQSxJQUNwRm9RLEVBQU9wUSxHQUFLNDVCLEVBQVV1SCxFQUFNOTBCLEVBQUVyTSxHQUFJQSxHQUFLcU0sRUFBRXJNLEdBRTNDLE9BQU9vUSxHQUdMZ3hCLEdBQU0sV0FJUixJQUhBLElBQUlqZSxFQUFRLEVBQ1J2akIsRUFBU21lLFVBQVVuZSxPQUNuQndRLEVBQVNtd0IsR0FBU2p5QixLQUFNMU8sR0FDckJBLEVBQVN1akIsR0FBTy9TLEVBQU8rUyxHQUFTcEYsVUFBVW9GLEtBQ2pELE9BQU8vUyxHQUlMaXhCLEtBQWtCbHJCLEdBQWNtVCxHQUFNLFdBQWNzVyxHQUFvQjl5QixLQUFLLElBQUlxSixFQUFXLE9BRTVGbXJCLEdBQWtCLFdBQ3BCLE9BQU8xQixHQUFvQnRqQixNQUFNK2tCLEdBQWdCemIsR0FBVzlZLEtBQUttYSxHQUFTM1ksT0FBUzJZLEdBQVMzWSxNQUFPeVAsWUFHakcrTCxHQUFRLENBQ1ZwRyxXQUFZLFNBQW9CdEYsRUFBUS9ILEdBQ3RDLE9BQU82bkIsRUFBZ0JweEIsS0FBS21hLEdBQVMzWSxNQUFPOFAsRUFBUS9ILEVBQU8wSCxVQUFVbmUsT0FBUyxFQUFJbWUsVUFBVSxRQUFLN1UsSUFFbkdxNEIsTUFBTyxTQUFlcmMsR0FDcEIsT0FBTzRaLEdBQVc3WCxHQUFTM1ksTUFBTzRXLEVBQVluSCxVQUFVbmUsT0FBUyxFQUFJbWUsVUFBVSxRQUFLN1UsSUFFdEZnVSxLQUFNLFNBQWNwYyxHQUNsQixPQUFPbTlCLEVBQVUzaEIsTUFBTTJLLEdBQVMzWSxNQUFPeVAsWUFFekN5akIsT0FBUSxTQUFnQnRjLEdBQ3RCLE9BQU8yYixHQUFnQnZ5QixLQUFNc3dCLEVBQVkzWCxHQUFTM1ksTUFBTzRXLEVBQ3ZEbkgsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLEtBRTFDdTRCLEtBQU0sU0FBY0MsR0FDbEIsT0FBTy9ZLEdBQVUxQixHQUFTM1ksTUFBT296QixFQUFXM2pCLFVBQVVuZSxPQUFTLEVBQUltZSxVQUFVLFFBQUs3VSxJQUVwRnk0QixVQUFXLFNBQW1CRCxHQUM1QixPQUFPOVksR0FBZTNCLEdBQVMzWSxNQUFPb3pCLEVBQVczakIsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLElBRXpGM0gsUUFBUyxTQUFpQjJqQixHQUN4QnlaLEVBQWExWCxHQUFTM1ksTUFBTzRXLEVBQVluSCxVQUFVbmUsT0FBUyxFQUFJbWUsVUFBVSxRQUFLN1UsSUFFakZqQyxRQUFTLFNBQWlCMjZCLEdBQ3hCLE9BQU9ob0IsR0FBYXFOLEdBQVMzWSxNQUFPc3pCLEVBQWU3akIsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLElBRTNGdVYsU0FBVSxTQUFrQm1qQixHQUMxQixPQUFPN0MsR0FBYzlYLEdBQVMzWSxNQUFPc3pCLEVBQWU3akIsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLElBRTVGZ04sS0FBTSxTQUFjMnJCLEdBQ2xCLE9BQU9yQyxHQUFVbGpCLE1BQU0ySyxHQUFTM1ksTUFBT3lQLFlBRXpDbEUsWUFBYSxTQUFxQituQixHQUNoQyxPQUFPekMsR0FBaUI3aUIsTUFBTTJLLEdBQVMzWSxNQUFPeVAsWUFFaERoYyxJQUFLLFNBQWFvL0IsR0FDaEIsT0FBT2IsR0FBS3JaLEdBQVMzWSxNQUFPNnlCLEVBQU9wakIsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLElBRTNFbTJCLE9BQVEsU0FBZ0JuYSxHQUN0QixPQUFPa2EsR0FBWTlpQixNQUFNMkssR0FBUzNZLE1BQU95UCxZQUUzQ3doQixZQUFhLFNBQXFCcmEsR0FDaEMsT0FBT29hLEdBQWlCaGpCLE1BQU0ySyxHQUFTM1ksTUFBT3lQLFlBRWhEdk4sUUFBUyxXQU1QLElBTEEsSUFJSTFQLEVBSkFxa0IsRUFBTzdXLEtBQ1AxTyxFQUFTcW5CLEdBQVM5QixHQUFNdmxCLE9BQ3hCa2lDLEVBQVNqaUMsS0FBSzB3QixNQUFNM3dCLEVBQVMsR0FDN0J1akIsRUFBUSxFQUVMQSxFQUFRMmUsR0FDYmhoQyxFQUFRcWtCLEVBQUtoQyxHQUNiZ0MsRUFBS2hDLEtBQVdnQyxJQUFPdmxCLEdBQ3ZCdWxCLEVBQUt2bEIsR0FBVWtCLEVBQ2YsT0FBT3FrQixHQUVYNGMsS0FBTSxTQUFjN2MsR0FDbEIsT0FBTzJaLEdBQVU1WCxHQUFTM1ksTUFBTzRXLEVBQVluSCxVQUFVbmUsT0FBUyxFQUFJbWUsVUFBVSxRQUFLN1UsSUFFckZ3MkIsS0FBTSxTQUFjc0MsR0FDbEIsT0FBT3ZDLEdBQVUzeUIsS0FBS21hLEdBQVMzWSxNQUFPMHpCLElBRXhDdmlCLFNBQVUsU0FBa0J3aUIsRUFBTzNyQixHQUNqQyxJQUFJakssRUFBSTRhLEdBQVMzWSxNQUNiMU8sRUFBU3lNLEVBQUV6TSxPQUNYc2lDLEVBQVMxZSxFQUFnQnllLEVBQU9yaUMsR0FDcEMsT0FBTyxJQUFLK2xCLEVBQW1CdFosRUFBR0EsRUFBRTB6QixLQUE3QixDQUNMMXpCLEVBQUVvTixPQUNGcE4sRUFBRWtMLFdBQWEycUIsRUFBUzcxQixFQUFFa3lCLGtCQUMxQjlhLFFBQWtCdmEsSUFBUm9OLEVBQW9CMVcsRUFBUzRqQixFQUFnQmxOLEVBQUsxVyxJQUFXc2lDLE1BS3pFQyxHQUFTLFNBQWU5ckIsRUFBT0MsR0FDakMsT0FBT3VxQixHQUFnQnZ5QixLQUFNc1gsR0FBVzlZLEtBQUttYSxHQUFTM1ksTUFBTytILEVBQU9DLEtBR2xFOHJCLEdBQU8sU0FBYUMsR0FDdEJwYixHQUFTM1ksTUFDVCxJQUFJZ00sRUFBU3FtQixHQUFTNWlCLFVBQVUsR0FBSSxHQUNoQ25lLEVBQVMwTyxLQUFLMU8sT0FDZDRpQixFQUFNZSxFQUFTOGUsR0FDZjlzQixFQUFNa08sRUFBU2pCLEVBQUk1aUIsUUFDbkJ1akIsRUFBUSxFQUNaLEdBQUk1TixFQUFNK0UsRUFBUzFhLEVBQVEsTUFBTW9YLEVBQVdxcEIsSUFDNUMsS0FBT2xkLEVBQVE1TixHQUFLakgsS0FBS2dNLEVBQVM2SSxHQUFTWCxFQUFJVyxNQUc3Q21mLEdBQWEsQ0FDZnJZLFFBQVMsV0FDUCxPQUFPaVYsR0FBYXB5QixLQUFLbWEsR0FBUzNZLFFBRXBDaE4sS0FBTSxXQUNKLE9BQU8yOUIsR0FBVW55QixLQUFLbWEsR0FBUzNZLFFBRWpDSSxPQUFRLFdBQ04sT0FBT3N3QixHQUFZbHlCLEtBQUttYSxHQUFTM1ksU0FJakNpMEIsR0FBWSxTQUFVbmtCLEVBQVE1YyxHQUNoQyxPQUFPb0YsRUFBU3dYLElBQ1hBLEVBQU84aEIsS0FDTyxpQkFBUDErQixHQUNQQSxLQUFPNGMsR0FDUDVSLFFBQVFoTCxJQUFRZ0wsT0FBT2hMLElBRTFCZ2hDLEdBQVcsU0FBa0Nwa0IsRUFBUTVjLEdBQ3ZELE9BQU8rZ0MsR0FBVW5rQixFQUFRNWMsRUFBTXVxQixFQUFZdnFCLEdBQUssSUFDNUNxOEIsRUFBYSxFQUFHemYsRUFBTzVjLElBQ3ZCeTFCLEVBQUs3WSxFQUFRNWMsSUFFZmloQyxHQUFXLFNBQXdCcmtCLEVBQVE1YyxFQUFLa2hDLEdBQ2xELFFBQUlILEdBQVVua0IsRUFBUTVjLEVBQU11cUIsRUFBWXZxQixHQUFLLEtBQ3hDb0YsRUFBUzg3QixJQUNUM2EsRUFBSTJhLEVBQU0sV0FDVDNhLEVBQUkyYSxFQUFNLFFBQ1YzYSxFQUFJMmEsRUFBTSxRQUVWQSxFQUFLbjJCLGNBQ0p3YixFQUFJMmEsRUFBTSxjQUFlQSxFQUFLcDJCLFVBQzlCeWIsRUFBSTJhLEVBQU0sZ0JBQWlCQSxFQUFLMWxCLFdBSTlCeUosRUFBR3JJLEVBQVE1YyxFQUFLa2hDLElBRnZCdGtCLEVBQU81YyxHQUFPa2hDLEVBQUs1aEMsTUFDWnNkLElBSU40aEIsS0FDSDVCLEVBQU1oWixFQUFJb2QsR0FDVnJFLEVBQUkvWSxFQUFJcWQsSUFHVnRaLEVBQVFBLEVBQVFqRyxFQUFJaUcsRUFBUXBELEdBQUtpYSxHQUFrQixTQUFVLENBQzNEOUkseUJBQTBCc0wsR0FDMUJuK0IsZUFBZ0JvK0IsS0FHZG5aLEdBQU0sV0FBY3FXLEdBQWM3eUIsS0FBSyxTQUN6QzZ5QixHQUFnQkMsR0FBc0IsV0FDcEMsT0FBT0osR0FBVTF5QixLQUFLd0IsUUFJMUIsSUFBSXEwQixHQUF3QmpjLEVBQVksR0FBSW9ELElBQzVDcEQsRUFBWWljLEdBQXVCTCxJQUNuQzNWLEVBQUtnVyxHQUF1QjFlLEdBQVVxZSxHQUFXNXpCLFFBQ2pEZ1ksRUFBWWljLEdBQXVCLENBQ2pDdGdDLE1BQU84L0IsR0FDUGxnQixJQUFLbWdCLEdBQ0x0N0IsWUFBYSxhQUNid0osU0FBVXF2QixHQUNWRSxlQUFnQnlCLEtBRWxCUCxHQUFVNEIsR0FBdUIsU0FBVSxLQUMzQzVCLEdBQVU0QixHQUF1QixhQUFjLEtBQy9DNUIsR0FBVTRCLEdBQXVCLGFBQWMsS0FDL0M1QixHQUFVNEIsR0FBdUIsU0FBVSxLQUMzQ2xjLEVBQUdrYyxHQUF1QnhjLEdBQUssQ0FDN0I2QixJQUFLLFdBQWMsT0FBTzFaLEtBQUs0eEIsT0FJakNweUIsRUFBT25OLFFBQVUsU0FBVXFwQixFQUFLNFcsRUFBT3RaLEVBQVNzYixHQUU5QyxJQUFJcmIsRUFBT3lDLElBRFg0WSxJQUFZQSxHQUNnQixVQUFZLElBQU0sUUFDMUNDLEVBQVMsTUFBUTdZLEVBQ2pCOFksRUFBUyxNQUFROVksRUFDakIrWSxFQUFhLzFCLEVBQU91YSxHQUNwQnNDLEVBQU9rWixHQUFjLEdBQ3JCQyxFQUFNRCxHQUFjdjBCLEVBQWV1MEIsR0FDbkM3UixHQUFVNlIsSUFBZXBGLEVBQU9zRixJQUNoQzUyQixFQUFJLEdBQ0o2MkIsRUFBc0JILEdBQWNBLEVBQW9CLFVBVXhESSxFQUFhLFNBQVVoZSxFQUFNaEMsR0FDL0JzRCxFQUFHdEIsRUFBTWhDLEVBQU8sQ0FDZDZFLElBQUssV0FDSCxPQVpPLFNBQVU3QyxFQUFNaEMsR0FDM0IsSUFBSTlLLEVBQU84TSxFQUFLOGIsR0FDaEIsT0FBTzVvQixFQUFLeVAsRUFBRSthLEdBQVExZixFQUFReWQsRUFBUXZvQixFQUFLK3FCLEVBQUc1QyxJQVVuQzZDLENBQU8vMEIsS0FBTTZVLElBRXRCbEIsSUFBSyxTQUFVbmhCLEdBQ2IsT0FYTyxTQUFVcWtCLEVBQU1oQyxFQUFPcmlCLEdBQ2xDLElBQUl1WCxFQUFPOE0sRUFBSzhiLEdBQ1oyQixJQUFTOWhDLEdBQVNBLEVBQVFqQixLQUFLK0YsTUFBTTlFLElBQVUsRUFBSSxFQUFJQSxFQUFRLElBQU8sSUFBZSxJQUFSQSxHQUNqRnVYLEVBQUt5UCxFQUFFZ2IsR0FBUTNmLEVBQVF5ZCxFQUFRdm9CLEVBQUsrcUIsRUFBR3RpQyxFQUFPMC9CLElBUW5DOEMsQ0FBT2gxQixLQUFNNlUsRUFBT3JpQixJQUU3QmtjLFlBQVksS0FHWmtVLEdBQ0Y2UixFQUFhemIsR0FBUSxTQUFVbkMsRUFBTTlNLEVBQU1rckIsRUFBU0MsR0FDbEQ3YyxFQUFXeEIsRUFBTTRkLEVBQVl4YixFQUFNLE1BQ25DLElBRUk5TixFQUFROUUsRUFBWS9VLEVBQVE2akMsRUFGNUJ0Z0IsRUFBUSxFQUNSN0ksRUFBUyxFQUViLEdBQUsxVCxFQUFTeVIsR0FJUCxNQUFJQSxhQUFnQm1tQixJQUFpQmlGLEVBQVFuYixFQUFRalEsS0FBVWdtQixHQUFnQm9GLEdBQVNuRixHQWF4RixPQUFJNEIsTUFBZTduQixFQUNqQnlvQixHQUFTaUMsRUFBWTFxQixHQUVyQjZvQixHQUFNcDBCLEtBQUtpMkIsRUFBWTFxQixHQWY5Qm9CLEVBQVNwQixFQUNUaUMsRUFBU3FtQixHQUFTNEMsRUFBUzNDLEdBQzNCLElBQUk4QyxFQUFPcnJCLEVBQUsxRCxXQUNoQixRQUFnQnpMLElBQVpzNkIsRUFBdUIsQ0FDekIsR0FBSUUsRUFBTzlDLEVBQU8sTUFBTTVwQixFQUFXcXBCLElBRW5DLElBREExckIsRUFBYSt1QixFQUFPcHBCLEdBQ0gsRUFBRyxNQUFNdEQsRUFBV3FwQixTQUdyQyxJQURBMXJCLEVBQWE4TyxFQUFTK2YsR0FBVzVDLEdBQ2hCdG1CLEVBQVNvcEIsRUFBTSxNQUFNMXNCLEVBQVdxcEIsSUFFbkR6Z0MsRUFBUytVLEVBQWFpc0IsT0FmdEJoaEMsRUFBU2srQixFQUFRemxCLEdBRWpCb0IsRUFBUyxJQUFJK2tCLEVBRGI3cEIsRUFBYS9VLEVBQVNnaEMsR0EyQnhCLElBUEFqVSxFQUFLeEgsRUFBTSxLQUFNLENBQ2Y5TCxFQUFHSSxFQUNIMnBCLEVBQUc5b0IsRUFDSHhTLEVBQUc2TSxFQUNIZ0ksRUFBRy9jLEVBQ0hrb0IsRUFBRyxJQUFJMlcsRUFBVWhsQixLQUVaMEosRUFBUXZqQixHQUFRdWpDLEVBQVdoZSxFQUFNaEMsUUFFMUMrZixFQUFzQkgsRUFBb0IsVUFBSWowQixFQUFPNnpCLElBQ3JEaFcsRUFBS3VXLEVBQXFCLGNBQWVILElBQy9CelosR0FBTSxXQUNoQnlaLEVBQVcsT0FDTnpaLEdBQU0sV0FDWCxJQUFJeVosR0FBWSxPQUNYeFosR0FBWSxTQUFVdFosR0FDM0IsSUFBSTh5QixFQUNKLElBQUlBLEVBQVcsTUFDZixJQUFJQSxFQUFXLEtBQ2YsSUFBSUEsRUFBVzl5QixNQUNkLEtBQ0Q4eUIsRUFBYXpiLEdBQVEsU0FBVW5DLEVBQU05TSxFQUFNa3JCLEVBQVNDLEdBRWxELElBQUlDLEVBR0osT0FKQTljLEVBQVd4QixFQUFNNGQsRUFBWXhiLEdBSXhCM2dCLEVBQVN5UixHQUNWQSxhQUFnQm1tQixJQUFpQmlGLEVBQVFuYixFQUFRalEsS0FBVWdtQixHQUFnQm9GLEdBQVNuRixPQUNuRXAxQixJQUFaczZCLEVBQ0gsSUFBSTNaLEVBQUt4UixFQUFNc29CLEdBQVM0QyxFQUFTM0MsR0FBUTRDLFFBQzdCdDZCLElBQVpxNkIsRUFDRSxJQUFJMVosRUFBS3hSLEVBQU1zb0IsR0FBUzRDLEVBQVMzQyxJQUNqQyxJQUFJL1csRUFBS3hSLEdBRWI2bkIsTUFBZTduQixFQUFheW9CLEdBQVNpQyxFQUFZMXFCLEdBQzlDNm9CLEdBQU1wMEIsS0FBS2kyQixFQUFZMXFCLEdBVEYsSUFBSXdSLEVBQUtpVSxFQUFRemxCLE9BVy9Dc21CLEVBQWFxRSxJQUFRbjJCLFNBQVNKLFVBQVkwcUIsRUFBS3ROLEdBQU1wTSxPQUFPMFosRUFBSzZMLElBQVE3TCxFQUFLdE4sSUFBTyxTQUFVcm9CLEdBQ3ZGQSxLQUFPdWhDLEdBQWFwVyxFQUFLb1csRUFBWXZoQyxFQUFLcW9CLEVBQUtyb0IsT0FFdkR1aEMsRUFBb0IsVUFBSUcsRUFDbkJ4UyxJQUFTd1MsRUFBb0JwOEIsWUFBY2k4QixJQUVsRCxJQUFJWSxFQUFrQlQsRUFBb0JqZixJQUN0QzJmLElBQXNCRCxJQUNJLFVBQXhCQSxFQUFnQjczQixNQUE0QzVDLE1BQXhCeTZCLEVBQWdCNzNCLE1BQ3REKzNCLEVBQVl2QixHQUFXNXpCLE9BQzNCaWUsRUFBS29XLEVBQVlqRCxJQUFtQixHQUNwQ25ULEVBQUt1VyxFQUFxQmhELEdBQWEzWSxHQUN2Q29GLEVBQUt1VyxFQUFxQjlDLElBQU0sR0FDaEN6VCxFQUFLdVcsRUFBcUJuRCxHQUFpQmdELElBRXZDSCxFQUFVLElBQUlHLEVBQVcsR0FBRzVjLEtBQVFvQixFQUFTcEIsTUFBTytjLElBQ3REemMsRUFBR3ljLEVBQXFCL2MsR0FBSyxDQUMzQjZCLElBQUssV0FBYyxPQUFPVCxLQUk5QmxiLEVBQUVrYixHQUFRd2IsRUFFVjVaLEVBQVFBLEVBQVFzQixFQUFJdEIsRUFBUXVCLEVBQUl2QixFQUFRcEQsR0FBS2dkLEdBQWNsWixHQUFPeGQsR0FFbEU4YyxFQUFRQSxFQUFRakcsRUFBR3FFLEVBQU0sQ0FDdkJnWCxrQkFBbUJxQyxJQUdyQnpYLEVBQVFBLEVBQVFqRyxFQUFJaUcsRUFBUXBELEVBQUl1RCxHQUFNLFdBQWNPLEVBQUtrUSxHQUFHanRCLEtBQUtpMkIsRUFBWSxNQUFReGIsRUFBTSxDQUN6Rm5RLEtBQU04cEIsR0FDTm5ILEdBQUlxSCxLQUdBN0MsS0FBcUIyRSxHQUFzQnZXLEVBQUt1VyxFQUFxQjNFLEVBQW1CcUMsR0FFOUZ6WCxFQUFRQSxFQUFRZ0UsRUFBRzVGLEVBQU11QyxJQUV6QmhELEVBQVdTLEdBRVg0QixFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxFQUFJMmEsR0FBWW5aLEVBQU0sQ0FBRXRGLElBQUttZ0IsS0FFekRqWixFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxHQUFLNmQsRUFBbUJyYyxFQUFNK2EsSUFFckQ1UixHQUFXd1MsRUFBb0I1eUIsVUFBWXF2QixLQUFldUQsRUFBb0I1eUIsU0FBV3F2QixJQUU5RnhXLEVBQVFBLEVBQVFnRSxFQUFJaEUsRUFBUXBELEVBQUl1RCxHQUFNLFdBQ3BDLElBQUl5WixFQUFXLEdBQUcxZ0MsV0FDaEJrbEIsRUFBTSxDQUFFbGxCLE1BQU84L0IsS0FFbkJoWixFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxHQUFLdUQsR0FBTSxXQUNyQyxNQUFPLENBQUMsRUFBRyxHQUFHdVcsa0JBQW9CLElBQUlrRCxFQUFXLENBQUMsRUFBRyxJQUFJbEQsc0JBQ3BEdlcsR0FBTSxXQUNYNFosRUFBb0JyRCxlQUFlL3lCLEtBQUssQ0FBQyxFQUFHLFFBQ3pDeWEsRUFBTSxDQUFFc1ksZUFBZ0J5QixLQUU3QmhSLEVBQVUvSSxHQUFRcWMsRUFBb0JELEVBQWtCRSxFQUNuRG5ULEdBQVlrVCxHQUFtQmpYLEVBQUt1VyxFQUFxQmpmLEdBQVU0ZixTQUVyRS8xQixFQUFPbk4sUUFBVSxjLDRCQzlkeEIsSUFBSXFNLEVBQVMsRUFBUSxNQUNqQitaLEVBQWMsRUFBUSxNQUN0QjJKLEVBQVUsRUFBUSxNQUNsQmlOLEVBQVMsRUFBUSxNQUNqQmhSLEVBQU8sRUFBUSxLQUNmakcsRUFBYyxFQUFRLE1BQ3RCNEMsRUFBUSxFQUFRLE1BQ2hCM0MsRUFBYSxFQUFRLE1BQ3JCOFQsRUFBWSxFQUFRLE1BQ3BCaFgsRUFBVyxFQUFRLE1BQ25CcWEsRUFBVSxFQUFRLE1BQ2xCM0csRUFBTyxVQUNQMVEsRUFBSyxVQUNMd1gsRUFBWSxFQUFRLE1BQ3BCelUsRUFBaUIsRUFBUSxLQUN6QjZVLEVBQWUsY0FDZnlGLEVBQVksV0FHWkMsRUFBYyxlQUNkdkYsRUFBZXh4QixFQUFtQixZQUNsQ3l4QixFQUFZenhCLEVBQWdCLFNBQzVCbk4sRUFBT21OLEVBQU9uTixLQUNkbVgsRUFBYWhLLEVBQU9nSyxXQUVwQm1MLEVBQVduVixFQUFPbVYsU0FDbEI2aEIsRUFBYXhGLEVBQ2IxK0IsRUFBTUQsRUFBS0MsSUFDWGlHLEVBQU1sRyxFQUFLa0csSUFDWHdxQixFQUFRMXdCLEVBQUswd0IsTUFDYmtDLEVBQU01eUIsRUFBSzR5QixJQUNYd1IsRUFBTXBrQyxFQUFLb2tDLElBQ1hDLEVBQVMsU0FDVEMsRUFBYyxhQUNkQyxFQUFjLGFBQ2RDLEVBQVV0ZCxFQUFjLEtBQU9tZCxFQUMvQkksRUFBVXZkLEVBQWMsS0FBT29kLEVBQy9CSSxFQUFVeGQsRUFBYyxLQUFPcWQsRUFHbkMsU0FBU0ksRUFBWTFqQyxFQUFPMmpDLEVBQU1DLEdBQ2hDLElBT0kvbkIsRUFBR3BELEVBQUcrQixFQVBON0IsRUFBUyxJQUFJNVgsTUFBTTZpQyxHQUNuQkMsRUFBZ0IsRUFBVEQsRUFBYUQsRUFBTyxFQUMzQkcsR0FBUSxHQUFLRCxHQUFRLEVBQ3JCRSxFQUFRRCxHQUFRLEVBQ2hCRSxFQUFjLEtBQVRMLEVBQWMxK0IsRUFBSSxHQUFJLElBQU1BLEVBQUksR0FBSSxJQUFNLEVBQy9DL0YsRUFBSSxFQUNKeXJCLEVBQUkzcUIsRUFBUSxHQUFlLElBQVZBLEdBQWUsRUFBSUEsRUFBUSxFQUFJLEVBQUksRUFrQ3hELEtBaENBQSxFQUFRaEIsRUFBSWdCLEtBRUNBLEdBQVNBLElBQVVxaEIsR0FFOUI1SSxFQUFJelksR0FBU0EsRUFBUSxFQUFJLEVBQ3pCNmIsRUFBSWlvQixJQUVKam9CLEVBQUk0VCxFQUFNa0MsRUFBSTN4QixHQUFTbWpDLEdBQ25CbmpDLEdBQVN3YSxFQUFJdlYsRUFBSSxHQUFJNFcsSUFBTSxJQUM3QkEsSUFDQXJCLEdBQUssSUFHTHhhLEdBREU2YixFQUFJa29CLEdBQVMsRUFDTkMsRUFBS3hwQixFQUVMd3BCLEVBQUsvK0IsRUFBSSxFQUFHLEVBQUk4K0IsSUFFZnZwQixHQUFLLElBQ2ZxQixJQUNBckIsR0FBSyxHQUVIcUIsRUFBSWtvQixHQUFTRCxHQUNmcnJCLEVBQUksRUFDSm9ELEVBQUlpb0IsR0FDS2pvQixFQUFJa29CLEdBQVMsR0FDdEJ0ckIsR0FBS3pZLEVBQVF3YSxFQUFJLEdBQUt2VixFQUFJLEVBQUcwK0IsR0FDN0I5bkIsR0FBUWtvQixJQUVSdHJCLEVBQUl6WSxFQUFRaUYsRUFBSSxFQUFHOCtCLEVBQVEsR0FBSzkrQixFQUFJLEVBQUcwK0IsR0FDdkM5bkIsRUFBSSxJQUdEOG5CLEdBQVEsRUFBR2hyQixFQUFPelosS0FBVyxJQUFKdVosRUFBU0EsR0FBSyxJQUFLa3JCLEdBQVEsR0FHM0QsSUFGQTluQixFQUFJQSxHQUFLOG5CLEVBQU9sckIsRUFDaEJvckIsR0FBUUYsRUFDREUsRUFBTyxFQUFHbHJCLEVBQU96WixLQUFXLElBQUoyYyxFQUFTQSxHQUFLLElBQUtnb0IsR0FBUSxHQUUxRCxPQURBbHJCLElBQVN6WixJQUFVLElBQUp5ckIsRUFDUmhTLEVBRVQsU0FBU3NyQixFQUFjdHJCLEVBQVFnckIsRUFBTUMsR0FDbkMsSUFPSW5yQixFQVBBb3JCLEVBQWdCLEVBQVRELEVBQWFELEVBQU8sRUFDM0JHLEdBQVEsR0FBS0QsR0FBUSxFQUNyQkUsRUFBUUQsR0FBUSxFQUNoQkksRUFBUUwsRUFBTyxFQUNmM2tDLEVBQUkwa0MsRUFBUyxFQUNialosRUFBSWhTLEVBQU96WixLQUNYMmMsRUFBUSxJQUFKOE8sRUFHUixJQURBQSxJQUFNLEVBQ0N1WixFQUFRLEVBQUdyb0IsRUFBUSxJQUFKQSxFQUFVbEQsRUFBT3paLEdBQUlBLElBQUtnbEMsR0FBUyxHQUl6RCxJQUhBenJCLEVBQUlvRCxHQUFLLElBQU1xb0IsR0FBUyxFQUN4QnJvQixLQUFPcW9CLEVBQ1BBLEdBQVNQLEVBQ0ZPLEVBQVEsRUFBR3pyQixFQUFRLElBQUpBLEVBQVVFLEVBQU96WixHQUFJQSxJQUFLZ2xDLEdBQVMsR0FDekQsR0FBVSxJQUFOcm9CLEVBQ0ZBLEVBQUksRUFBSWtvQixNQUNILElBQUlsb0IsSUFBTWlvQixFQUNmLE9BQU9yckIsRUFBSThSLElBQU1JLEdBQUt0SixFQUFXQSxFQUVqQzVJLEdBQVF4VCxFQUFJLEVBQUcwK0IsR0FDZjluQixHQUFRa29CLEVBQ1IsT0FBUXBaLEdBQUssRUFBSSxHQUFLbFMsRUFBSXhULEVBQUksRUFBRzRXLEVBQUk4bkIsR0FHekMsU0FBU1EsRUFBVWxtQixHQUNqQixPQUFPQSxFQUFNLElBQU0sR0FBS0EsRUFBTSxJQUFNLEdBQUtBLEVBQU0sSUFBTSxFQUFJQSxFQUFNLEdBRWpFLFNBQVNtbUIsRUFBT3RpQixHQUNkLE1BQU8sQ0FBTSxJQUFMQSxHQUVWLFNBQVN1aUIsRUFBUXZpQixHQUNmLE1BQU8sQ0FBTSxJQUFMQSxFQUFXQSxHQUFNLEVBQUksS0FFL0IsU0FBU3dpQixFQUFReGlCLEdBQ2YsTUFBTyxDQUFNLElBQUxBLEVBQVdBLEdBQU0sRUFBSSxJQUFNQSxHQUFNLEdBQUssSUFBTUEsR0FBTSxHQUFLLEtBRWpFLFNBQVN5aUIsRUFBUXppQixHQUNmLE9BQU80aEIsRUFBWTVoQixFQUFJLEdBQUksR0FFN0IsU0FBUzBpQixFQUFRMWlCLEdBQ2YsT0FBTzRoQixFQUFZNWhCLEVBQUksR0FBSSxHQUc3QixTQUFTbWUsRUFBVXJiLEVBQUdsa0IsRUFBS3cvQixHQUN6QnZhLEVBQUdmLEVBQVcsVUFBR2xrQixFQUFLLENBQUV3bUIsSUFBSyxXQUFjLE9BQU8xWixLQUFLMHlCLE1BR3pELFNBQVNoWixFQUFJdWQsRUFBTXhtQixFQUFPb0UsRUFBT3FpQixHQUMvQixJQUNJQyxFQUFXM0gsR0FEQzNhLEdBRWhCLEdBQUlzaUIsRUFBVzFtQixFQUFRd21CLEVBQUtqQixHQUFVLE1BQU10dEIsRUFBVytzQixHQUN2RCxJQUFJL2EsRUFBUXVjLEVBQUtsQixHQUFTcUIsR0FDdEJydkIsRUFBUW92QixFQUFXRixFQUFLaEIsR0FDeEJvQixFQUFPM2MsRUFBTTNtQixNQUFNZ1UsRUFBT0EsRUFBUTBJLEdBQ3RDLE9BQU95bUIsRUFBaUJHLEVBQU9BLEVBQUtuMUIsVUFFdEMsU0FBU3lSLEVBQUlzakIsRUFBTXhtQixFQUFPb0UsRUFBT3lpQixFQUFZOWtDLEVBQU8wa0MsR0FDbEQsSUFDSUMsRUFBVzNILEdBREMzYSxHQUVoQixHQUFJc2lCLEVBQVcxbUIsRUFBUXdtQixFQUFLakIsR0FBVSxNQUFNdHRCLEVBQVcrc0IsR0FJdkQsSUFIQSxJQUFJL2EsRUFBUXVjLEVBQUtsQixHQUFTcUIsR0FDdEJydkIsRUFBUW92QixFQUFXRixFQUFLaEIsR0FDeEJvQixFQUFPQyxHQUFZOWtDLEdBQ2RkLEVBQUksRUFBR0EsRUFBSStlLEVBQU8vZSxJQUFLZ3BCLEVBQU0zUyxFQUFRclcsR0FBSzJsQyxFQUFLSCxFQUFpQnhsQyxFQUFJK2UsRUFBUS9lLEVBQUksR0FHM0YsR0FBSzI5QixFQUFPc0YsSUFnRkwsQ0FDTCxJQUFLM1osR0FBTSxXQUNUa1YsRUFBYSxRQUNSbFYsR0FBTSxXQUNYLElBQUlrVixHQUFjLE9BQ2RsVixHQUFNLFdBSVYsT0FIQSxJQUFJa1YsRUFDSixJQUFJQSxFQUFhLEtBQ2pCLElBQUlBLEVBQWFuVCxLQUNWbVQsRUFBYTF5QixNQUFRdXlCLEtBQzFCLENBTUYsSUFEQSxJQUN5Qzc4QixFQURyQ3FrQyxHQUpKckgsRUFBZSxTQUFxQjUrQixHQUVsQyxPQURBK21CLEVBQVdyWSxLQUFNa3dCLEdBQ1YsSUFBSXdGLEVBQVdsRyxFQUFRbCtCLE1BRWEsVUFBSW9rQyxFQUFvQixVQUM1RDFpQyxFQUFPNjFCLEVBQUs2TSxHQUFhN2dDLEVBQUksRUFBUTdCLEVBQUsxQixPQUFTdUQsSUFDbkQzQixFQUFNRixFQUFLNkIsUUFBU3E3QixHQUFlN1IsRUFBSzZSLEVBQWNoOUIsRUFBS3dpQyxFQUFXeGlDLElBRTFFa3ZCLElBQVNtVixFQUFpQi8rQixZQUFjMDNCLEdBRy9DLElBQUkrRyxFQUFPLElBQUk5RyxFQUFVLElBQUlELEVBQWEsSUFDdENzSCxHQUFXckgsRUFBbUIsVUFBRXNILFFBQ3BDUixFQUFLUSxRQUFRLEVBQUcsWUFDaEJSLEVBQUtRLFFBQVEsRUFBRyxhQUNaUixFQUFLUyxRQUFRLElBQU9ULEVBQUtTLFFBQVEsSUFBSXRmLEVBQVkrWCxFQUFtQixVQUFHLENBQ3pFc0gsUUFBUyxTQUFpQnh1QixFQUFZelcsR0FDcENnbEMsR0FBU2g1QixLQUFLd0IsS0FBTWlKLEVBQVl6VyxHQUFTLElBQU0sS0FFakRtbEMsU0FBVSxTQUFrQjF1QixFQUFZelcsR0FDdENnbEMsR0FBU2g1QixLQUFLd0IsS0FBTWlKLEVBQVl6VyxHQUFTLElBQU0sT0FFaEQsUUFoSEgwOUIsRUFBZSxTQUFxQjUrQixHQUNsQyttQixFQUFXclksS0FBTWt3QixFQUFjSCxHQUMvQixJQUFJMXBCLEVBQWFtcEIsRUFBUWwrQixHQUN6QjBPLEtBQUtvM0IsR0FBS3pILEVBQVVueEIsS0FBSyxJQUFJakwsTUFBTThTLEdBQWEsR0FDaERyRyxLQUFLZzJCLEdBQVczdkIsR0FHbEI4cEIsRUFBWSxTQUFrQmhsQixFQUFRbEMsRUFBWTVDLEdBQ2hEZ1MsRUFBV3JZLEtBQU1td0IsRUFBV3FGLEdBQzVCbmQsRUFBV2xOLEVBQVEra0IsRUFBY3NGLEdBQ2pDLElBQUlvQyxFQUFlenNCLEVBQU82cUIsR0FDdEJocUIsRUFBU21nQixFQUFVbGpCLEdBQ3ZCLEdBQUkrQyxFQUFTLEdBQUtBLEVBQVM0ckIsRUFBYyxNQUFNbHZCLEVBQVcsaUJBRTFELEdBQUlzRCxHQURKM0YsT0FBNEJ6TCxJQUFmeUwsRUFBMkJ1eEIsRUFBZTVyQixFQUFTbUosRUFBUzlPLElBQy9DdXhCLEVBQWMsTUFBTWx2QixFQXhKL0IsaUJBeUpmMUksS0FBSysxQixHQUFXNXFCLEVBQ2hCbkwsS0FBS2kyQixHQUFXanFCLEVBQ2hCaE0sS0FBS2cyQixHQUFXM3ZCLEdBR2RvUyxJQUNGZ2EsRUFBVXZDLEVBQWMyRixFQUFhLE1BQ3JDcEQsRUFBVXRDLEVBQVd5RixFQUFRLE1BQzdCbkQsRUFBVXRDLEVBQVcwRixFQUFhLE1BQ2xDcEQsRUFBVXRDLEVBQVcyRixFQUFhLE9BR3BDMWQsRUFBWStYLEVBQW1CLFVBQUcsQ0FDaEN1SCxRQUFTLFNBQWlCenVCLEdBQ3hCLE9BQU95USxFQUFJMVosS0FBTSxFQUFHaUosR0FBWSxJQUFNLElBQU0sSUFFOUM0dUIsU0FBVSxTQUFrQjV1QixHQUMxQixPQUFPeVEsRUFBSTFaLEtBQU0sRUFBR2lKLEdBQVksSUFFbEM2dUIsU0FBVSxTQUFrQjd1QixHQUMxQixJQUFJd0gsRUFBUWlKLEVBQUkxWixLQUFNLEVBQUdpSixFQUFZd0csVUFBVSxJQUMvQyxPQUFRZ0IsRUFBTSxJQUFNLEVBQUlBLEVBQU0sS0FBTyxJQUFNLElBRTdDc25CLFVBQVcsU0FBbUI5dUIsR0FDNUIsSUFBSXdILEVBQVFpSixFQUFJMVosS0FBTSxFQUFHaUosRUFBWXdHLFVBQVUsSUFDL0MsT0FBT2dCLEVBQU0sSUFBTSxFQUFJQSxFQUFNLElBRS9CdW5CLFNBQVUsU0FBa0IvdUIsR0FDMUIsT0FBTzB0QixFQUFVamQsRUFBSTFaLEtBQU0sRUFBR2lKLEVBQVl3RyxVQUFVLE1BRXREd29CLFVBQVcsU0FBbUJodkIsR0FDNUIsT0FBTzB0QixFQUFVamQsRUFBSTFaLEtBQU0sRUFBR2lKLEVBQVl3RyxVQUFVLE9BQVMsR0FFL0R5b0IsV0FBWSxTQUFvQmp2QixHQUM5QixPQUFPd3RCLEVBQWMvYyxFQUFJMVosS0FBTSxFQUFHaUosRUFBWXdHLFVBQVUsSUFBSyxHQUFJLElBRW5FMG9CLFdBQVksU0FBb0JsdkIsR0FDOUIsT0FBT3d0QixFQUFjL2MsRUFBSTFaLEtBQU0sRUFBR2lKLEVBQVl3RyxVQUFVLElBQUssR0FBSSxJQUVuRWdvQixRQUFTLFNBQWlCeHVCLEVBQVl6VyxHQUNwQ21oQixFQUFJM1QsS0FBTSxFQUFHaUosRUFBWTJ0QixFQUFRcGtDLElBRW5DbWxDLFNBQVUsU0FBa0IxdUIsRUFBWXpXLEdBQ3RDbWhCLEVBQUkzVCxLQUFNLEVBQUdpSixFQUFZMnRCLEVBQVFwa0MsSUFFbkM0bEMsU0FBVSxTQUFrQm52QixFQUFZelcsR0FDdENtaEIsRUFBSTNULEtBQU0sRUFBR2lKLEVBQVk0dEIsRUFBU3JrQyxFQUFPaWQsVUFBVSxLQUVyRDRvQixVQUFXLFNBQW1CcHZCLEVBQVl6VyxHQUN4Q21oQixFQUFJM1QsS0FBTSxFQUFHaUosRUFBWTR0QixFQUFTcmtDLEVBQU9pZCxVQUFVLEtBRXJENm9CLFNBQVUsU0FBa0JydkIsRUFBWXpXLEdBQ3RDbWhCLEVBQUkzVCxLQUFNLEVBQUdpSixFQUFZNnRCLEVBQVN0a0MsRUFBT2lkLFVBQVUsS0FFckQ4b0IsVUFBVyxTQUFtQnR2QixFQUFZelcsR0FDeENtaEIsRUFBSTNULEtBQU0sRUFBR2lKLEVBQVk2dEIsRUFBU3RrQyxFQUFPaWQsVUFBVSxLQUVyRCtvQixXQUFZLFNBQW9CdnZCLEVBQVl6VyxHQUMxQ21oQixFQUFJM1QsS0FBTSxFQUFHaUosRUFBWSt0QixFQUFTeGtDLEVBQU9pZCxVQUFVLEtBRXJEZ3BCLFdBQVksU0FBb0J4dkIsRUFBWXpXLEdBQzFDbWhCLEVBQUkzVCxLQUFNLEVBQUdpSixFQUFZOHRCLEVBQVN2a0MsRUFBT2lkLFVBQVUsT0FzQ3pEeUwsRUFBZWdWLEVBQWNILEdBQzdCN1UsRUFBZWlWLEVBQVdxRixHQUMxQm5YLEVBQUs4UixFQUFtQixVQUFHZCxFQUFPeUMsTUFBTSxHQUN4Q3ovQixFQUFvQixZQUFJNjlCLEVBQ3hCNzlCLEVBQWlCLFNBQUk4OUIsRyxlQ3BRckIsSUFmQSxJQVNJdUksRUFUQWg2QixFQUFTLEVBQVEsTUFDakIyZixFQUFPLEVBQVEsS0FDZnlOLEVBQU0sRUFBUSxNQUNkK0YsRUFBUS9GLEVBQUksZUFDWmdHLEVBQU9oRyxFQUFJLFFBQ1g2SSxLQUFTajJCLEVBQU8wVixjQUFlMVYsRUFBTzB4QixVQUN0Q3VCLEVBQVNnRCxFQUNUampDLEVBQUksRUFJSmluQyxFQUF5QixpSEFFM0JyNkIsTUFBTSxLQUVENU0sRUFQQyxJQVFGZ25DLEVBQVFoNkIsRUFBT2k2QixFQUF1QmpuQyxRQUN4QzJzQixFQUFLcWEsRUFBTXY2QixVQUFXMHpCLEdBQU8sR0FDN0J4VCxFQUFLcWEsRUFBTXY2QixVQUFXMnpCLEdBQU0sSUFDdkJILEdBQVMsRUFHbEJueUIsRUFBT25OLFFBQVUsQ0FDZnNpQyxJQUFLQSxFQUNMaEQsT0FBUUEsRUFDUkUsTUFBT0EsRUFDUEMsS0FBTUEsSSxTQzFCUixJQUFJdjlCLEVBQUssRUFDTHFrQyxFQUFLcm5DLEtBQUtrM0IsU0FDZGpwQixFQUFPbk4sUUFBVSxTQUFVYSxHQUN6QixNQUFPLFVBQVVpYyxZQUFldlUsSUFBUjFILEVBQW9CLEdBQUtBLEVBQUssUUFBU3FCLEVBQUtxa0MsR0FBSTUyQixTQUFTLE8sZUNIbkYsSUFDSXdrQixFQURTLEVBQVEsTUFDRUEsVUFFdkJobkIsRUFBT25OLFFBQVVtMEIsR0FBYUEsRUFBVXFTLFdBQWEsSSxlQ0hyRCxJQUFJdmdDLEVBQVcsRUFBUSxNQUN2QmtILEVBQU9uTixRQUFVLFNBQVVpaUIsRUFBSThCLEdBQzdCLElBQUs5ZCxFQUFTZ2MsSUFBT0EsRUFBRzZFLEtBQU8vQyxFQUFNLE1BQU1yUSxVQUFVLDBCQUE0QnFRLEVBQU8sY0FDeEYsT0FBTzlCLEksZUNIVCxJQUFJNVYsRUFBUyxFQUFRLE1BQ2pCMmQsRUFBTyxFQUFRLE1BQ2YrRixFQUFVLEVBQVEsTUFDbEIwVyxFQUFTLEVBQVEsTUFDakIvaUMsRUFBaUIsVUFDckJ5SixFQUFPbk4sUUFBVSxTQUFVbUwsR0FDekIsSUFBSXNCLEVBQVV1ZCxFQUFLdGQsU0FBV3NkLEVBQUt0ZCxPQUFTcWpCLEVBQVUsR0FBSzFqQixFQUFPSyxRQUFVLElBQ3RELEtBQWxCdkIsRUFBS3NGLE9BQU8sSUFBZXRGLEtBQVFzQixHQUFVL0ksRUFBZStJLEVBQVN0QixFQUFNLENBQUVoTCxNQUFPc21DLEVBQU9oaUIsRUFBRXRaLE8sZUNQbkduTCxFQUFReWtCLEVBQUksRUFBWixPLGVDQUEsSUFBSTRELEVBQVEsRUFBUSxLQUFSLENBQXFCLE9BQzdCb1IsRUFBTSxFQUFRLE1BQ2Qvc0IsRUFBUyxlQUNUZzZCLEVBQThCLG1CQUFWaDZCLEdBRVRTLEVBQU9uTixRQUFVLFNBQVVtTCxHQUN4QyxPQUFPa2QsRUFBTWxkLEtBQVVrZCxFQUFNbGQsR0FDM0J1N0IsR0FBY2g2QixFQUFPdkIsS0FBVXU3QixFQUFhaDZCLEVBQVMrc0IsR0FBSyxVQUFZdHVCLE1BR2pFa2QsTUFBUUEsRyxjQ1ZqQixJQUFJVixFQUFVLEVBQVEsTUFDbEJyRSxFQUFXLEVBQVEsS0FBUixDQUFrQixZQUM3QnFNLEVBQVksRUFBUSxLQUN4QnhpQixFQUFPbk4sUUFBVSwwQkFBdUMsU0FBVWlpQixHQUNoRSxHQUFVMVosTUFBTjBaLEVBQWlCLE9BQU9BLEVBQUdxQixJQUMxQnJCLEVBQUcsZUFDSDBOLEVBQVVoSSxFQUFRMUYsTSxlQ0x6QixJQUFJdUcsRUFBVSxFQUFRLE1BQ2xCbWUsRUFBTSxFQUFRLEtBQVIsQ0FBdUIsc0JBQXVCLFFBRXhEbmUsRUFBUUEsRUFBUWpHLEVBQUcsU0FBVSxDQUFFcWtCLE9BQVEsU0FBZ0Iza0IsR0FBTSxPQUFPMGtCLEVBQUkxa0IsTyxlQ0h4RSxJQUFJdUcsRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRZ0UsRUFBRyxRQUFTLENBQUV6SixXQUFZLEVBQVEsUUFFbEQsRUFBUSxLQUFSLENBQWlDLGUsNEJDSmpDLElBQUl5RixFQUFVLEVBQVEsTUFDbEJxZSxFQUFTLEVBQVEsS0FBUixDQUE0QixHQUV6Q3JlLEVBQVFBLEVBQVFnRSxFQUFJaEUsRUFBUXBELEdBQUssRUFBUSxLQUFSLENBQTRCLEdBQUd3YixPQUFPLEdBQU8sUUFBUyxDQUVyRkEsTUFBTyxTQUFlcmMsR0FDcEIsT0FBT3NpQixFQUFPbDVCLEtBQU00VyxFQUFZbkgsVUFBVSxRLGVDTjlDLElBQUlvTCxFQUFVLEVBQVEsTUFFdEJBLEVBQVFBLEVBQVFnRSxFQUFHLFFBQVMsQ0FBRWpRLEtBQU0sRUFBUSxRQUU1QyxFQUFRLEtBQVIsQ0FBaUMsUyw0QkNKakMsSUFBSWlNLEVBQVUsRUFBUSxNQUNsQnNlLEVBQVUsRUFBUSxLQUFSLENBQTRCLEdBRTFDdGUsRUFBUUEsRUFBUWdFLEVBQUloRSxFQUFRcEQsR0FBSyxFQUFRLEtBQVIsQ0FBNEIsR0FBR3liLFFBQVEsR0FBTyxRQUFTLENBRXRGQSxPQUFRLFNBQWdCdGMsR0FDdEIsT0FBT3VpQixFQUFRbjVCLEtBQU00VyxFQUFZbkgsVUFBVSxRLDRCQ0wvQyxJQUFJb0wsRUFBVSxFQUFRLE1BQ2xCdWUsRUFBUSxFQUFRLEtBQVIsQ0FBNEIsR0FDcEMxZCxFQUFNLFlBQ04yZCxHQUFTLEVBRVQzZCxJQUFPLElBQUlub0IsTUFBTSxHQUFHbW9CLElBQUssV0FBYzJkLEdBQVMsS0FDcER4ZSxFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxFQUFJNGhCLEVBQVEsUUFBUyxDQUMvQ2hHLFVBQVcsU0FBbUJ6YyxHQUM1QixPQUFPd2lCLEVBQU1wNUIsS0FBTTRXLEVBQVluSCxVQUFVbmUsT0FBUyxFQUFJbWUsVUFBVSxRQUFLN1UsTUFHekUsRUFBUSxLQUFSLENBQWlDOGdCLEksNEJDWGpDLElBQUliLEVBQVUsRUFBUSxNQUNsQnVlLEVBQVEsRUFBUSxLQUFSLENBQTRCLEdBQ3BDMWQsRUFBTSxPQUNOMmQsR0FBUyxFQUVUM2QsSUFBTyxJQUFJbm9CLE1BQU0sR0FBTSxNQUFFLFdBQWM4bEMsR0FBUyxLQUNwRHhlLEVBQVFBLEVBQVFnRSxFQUFJaEUsRUFBUXBELEVBQUk0aEIsRUFBUSxRQUFTLENBQy9DbEcsS0FBTSxTQUFjdmMsR0FDbEIsT0FBT3dpQixFQUFNcDVCLEtBQU00VyxFQUFZbkgsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLE1BR3pFLEVBQVEsS0FBUixDQUFpQzhnQixJLDRCQ1pqQyxJQUFJYixFQUFVLEVBQVEsTUFDbEJ5ZSxFQUFXLEVBQVEsS0FBUixDQUE0QixHQUN2Q0MsRUFBUyxFQUFRLEtBQVIsQ0FBNEIsR0FBR3RtQyxTQUFTLEdBRXJENG5CLEVBQVFBLEVBQVFnRSxFQUFJaEUsRUFBUXBELEdBQUs4aEIsRUFBUSxRQUFTLENBRWhEdG1DLFFBQVMsU0FBaUIyakIsR0FDeEIsT0FBTzBpQixFQUFTdDVCLEtBQU00VyxFQUFZbkgsVUFBVSxRLDRCQ1BoRCxJQUFJd0csRUFBTSxFQUFRLE1BQ2Q0RSxFQUFVLEVBQVEsTUFDbEI1RixFQUFXLEVBQVEsTUFDbkJ6VyxFQUFPLEVBQVEsTUFDZitpQixFQUFjLEVBQVEsTUFDdEJwTSxFQUFXLEVBQVEsTUFDbkJxa0IsRUFBaUIsRUFBUSxNQUN6QmhZLEVBQVksRUFBUSxLQUV4QjNHLEVBQVFBLEVBQVFqRyxFQUFJaUcsRUFBUXBELEdBQUssRUFBUSxLQUFSLEVBQTBCLFNBQVU5VixHQUFRcE8sTUFBTXVWLEtBQUtuSCxNQUFXLFFBQVMsQ0FFMUdtSCxLQUFNLFNBQWNpckIsR0FDbEIsSUFPSXppQyxFQUFRd1EsRUFBUXlXLEVBQU10WixFQVB0QmxCLEVBQUlrWCxFQUFTOGUsR0FDYjNjLEVBQW1CLG1CQUFScFgsS0FBcUJBLEtBQU96TSxNQUN2Q2lpQixFQUFPL0YsVUFBVW5lLE9BQ2pCdWhDLEVBQVFyZCxFQUFPLEVBQUkvRixVQUFVLFFBQUs3VSxFQUNsQzB3QixPQUFvQjF3QixJQUFWaTRCLEVBQ1ZoZSxFQUFRLEVBQ1I4TSxFQUFTSCxFQUFVempCLEdBSXZCLEdBRkl1dEIsSUFBU3VILEVBQVE1YyxFQUFJNGMsRUFBT3JkLEVBQU8sRUFBSS9GLFVBQVUsUUFBSzdVLEVBQVcsSUFFdkRBLE1BQVYrbUIsR0FBeUJ2SyxHQUFLN2pCLE9BQVNndUIsRUFBWUksR0FNckQsSUFBSzdmLEVBQVMsSUFBSXNWLEVBRGxCOWxCLEVBQVM2akIsRUFBU3BYLEVBQUV6TSxTQUNTQSxFQUFTdWpCLEVBQU9BLElBQzNDMmtCLEVBQWUxM0IsRUFBUStTLEVBQU95VyxFQUFVdUgsRUFBTTkwQixFQUFFOFcsR0FBUUEsR0FBUzlXLEVBQUU4VyxTQU5yRSxJQUFLNVYsRUFBVzBpQixFQUFPbmpCLEtBQUtULEdBQUkrRCxFQUFTLElBQUlzVixJQUFPbUIsRUFBT3RaLEVBQVMyQyxRQUFRRyxLQUFNOFMsSUFDaEYya0IsRUFBZTEzQixFQUFRK1MsRUFBT3lXLEVBQVU5c0IsRUFBS1MsRUFBVTR6QixFQUFPLENBQUN0YSxFQUFLL2xCLE1BQU9xaUIsSUFBUSxHQUFRMEQsRUFBSy9sQixPQVNwRyxPQURBc1AsRUFBT3hRLE9BQVN1akIsRUFDVC9TLE0sNEJDakNYLElBQUkrWSxFQUFVLEVBQVEsTUFDbEI0ZSxFQUFXLEVBQVEsS0FBUixFQUE2QixHQUN4Q3pXLEVBQVUsR0FBR3JxQixRQUNiK2dDLElBQWtCMVcsR0FBVyxFQUFJLENBQUMsR0FBR3JxQixRQUFRLEdBQUksR0FBSyxFQUUxRGtpQixFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxHQUFLaWlCLElBQWtCLEVBQVEsS0FBUixDQUE0QjFXLElBQVcsUUFBUyxDQUVqR3JxQixRQUFTLFNBQWlCMjZCLEdBQ3hCLE9BQU9vRyxFQUVIMVcsRUFBUWhWLE1BQU1oTyxLQUFNeVAsWUFBYyxFQUNsQ2dxQixFQUFTejVCLEtBQU1zekIsRUFBZTdqQixVQUFVLFEsZUNYaEQsSUFBSW9MLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUcsUUFBUyxDQUFFcGhCLFFBQVMsRUFBUSxTLDRCQ0YvQyxJQUFJbW1DLEVBQW1CLEVBQVEsTUFDM0JwaEIsRUFBTyxFQUFRLE1BQ2Z5SixFQUFZLEVBQVEsS0FDcEJwTSxFQUFZLEVBQVEsTUFNeEJwVyxFQUFPbk4sUUFBVSxFQUFRLEtBQVIsQ0FBMEJrQixNQUFPLFNBQVMsU0FBVXNtQixFQUFVQyxHQUM3RTlaLEtBQUttWixHQUFLdkQsRUFBVWlFLEdBQ3BCN1osS0FBS3RMLEdBQUssRUFDVnNMLEtBQUsrWixHQUFLRCxLQUVULFdBQ0QsSUFBSS9iLEVBQUlpQyxLQUFLbVosR0FDVFcsRUFBTzlaLEtBQUsrWixHQUNabEYsRUFBUTdVLEtBQUt0TCxLQUNqQixPQUFLcUosR0FBSzhXLEdBQVM5VyxFQUFFek0sUUFDbkIwTyxLQUFLbVosUUFBS3ZlLEVBQ0gyZCxFQUFLLElBRWFBLEVBQUssRUFBcEIsUUFBUnVCLEVBQStCakYsRUFDdkIsVUFBUmlGLEVBQWlDL2IsRUFBRThXLEdBQ3hCLENBQUNBLEVBQU85VyxFQUFFOFcsT0FDeEIsVUFHSG1OLEVBQVU0WCxVQUFZNVgsRUFBVXp1QixNQUVoQ29tQyxFQUFpQixRQUNqQkEsRUFBaUIsVUFDakJBLEVBQWlCLFksNEJDL0JqQixJQUFJOWUsRUFBVSxFQUFRLE1BQ2xCakYsRUFBWSxFQUFRLE1BQ3BCc2IsRUFBWSxHQUFHdHBCLEtBR25CaVQsRUFBUUEsRUFBUWdFLEVBQUloRSxFQUFRcEQsR0FBSyxFQUFRLE9BQWlCMWtCLFNBQVcsRUFBUSxLQUFSLENBQTRCbStCLElBQWEsUUFBUyxDQUNySHRwQixLQUFNLFNBQWMyckIsR0FDbEIsT0FBT3JDLEVBQVUxeUIsS0FBS29YLEVBQVU1VixXQUFxQnBGLElBQWQyNEIsRUFBMEIsSUFBTUEsTyw0QkNSM0UsSUFBSTFZLEVBQVUsRUFBUSxNQUNsQmpGLEVBQVksRUFBUSxNQUNwQnVXLEVBQVksRUFBUSxNQUNwQmhYLEVBQVcsRUFBUSxNQUNuQjZOLEVBQVUsR0FBR3pYLFlBQ2JtdUIsSUFBa0IxVyxHQUFXLEVBQUksQ0FBQyxHQUFHelgsWUFBWSxHQUFJLEdBQUssRUFFOURzUCxFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxHQUFLaWlCLElBQWtCLEVBQVEsS0FBUixDQUE0QjFXLElBQVcsUUFBUyxDQUVqR3pYLFlBQWEsU0FBcUIrbkIsR0FFaEMsR0FBSW9HLEVBQWUsT0FBTzFXLEVBQVFoVixNQUFNaE8sS0FBTXlQLFlBQWMsRUFDNUQsSUFBSTFSLEVBQUk2WCxFQUFVNVYsTUFDZDFPLEVBQVM2akIsRUFBU3BYLEVBQUV6TSxRQUNwQnVqQixFQUFRdmpCLEVBQVMsRUFHckIsSUFGSW1lLFVBQVVuZSxPQUFTLElBQUd1akIsRUFBUXRqQixLQUFLNmIsSUFBSXlILEVBQU9zWCxFQUFVMWMsVUFBVSxNQUNsRW9GLEVBQVEsSUFBR0EsRUFBUXZqQixFQUFTdWpCLEdBQzFCQSxHQUFTLEVBQUdBLElBQVMsR0FBSUEsS0FBUzlXLEdBQU9BLEVBQUU4VyxLQUFXeWUsRUFBZSxPQUFPemUsR0FBUyxFQUMzRixPQUFRLE0sNEJDbEJaLElBQUlnRyxFQUFVLEVBQVEsTUFDbEJtWCxFQUFPLEVBQVEsS0FBUixDQUE0QixHQUV2Q25YLEVBQVFBLEVBQVFnRSxFQUFJaEUsRUFBUXBELEdBQUssRUFBUSxLQUFSLENBQTRCLEdBQUdoa0IsS0FBSyxHQUFPLFFBQVMsQ0FFbkZBLElBQUssU0FBYW1qQixHQUNoQixPQUFPb2IsRUFBS2h5QixLQUFNNFcsRUFBWW5ILFVBQVUsUSw0QkNONUMsSUFBSW9MLEVBQVUsRUFBUSxNQUNsQjJlLEVBQWlCLEVBQVEsTUFHN0IzZSxFQUFRQSxFQUFRakcsRUFBSWlHLEVBQVFwRCxFQUFJLEVBQVEsS0FBUixFQUFvQixXQUNsRCxTQUFTQSxLQUNULFFBQVNsa0IsTUFBTWs0QixHQUFHanRCLEtBQUtpWixhQUFjQSxNQUNuQyxRQUFTLENBRVhnVSxHQUFJLFdBSUYsSUFIQSxJQUFJNVcsRUFBUSxFQUNSVyxFQUFPL0YsVUFBVW5lLE9BQ2pCd1EsRUFBUyxJQUFvQixtQkFBUjlCLEtBQXFCQSxLQUFPek0sT0FBT2lpQixHQUNyREEsRUFBT1gsR0FBTzJrQixFQUFlMTNCLEVBQVErUyxFQUFPcEYsVUFBVW9GLE1BRTdELE9BREEvUyxFQUFPeFEsT0FBU2trQixFQUNUMVQsTSw0QkNmWCxJQUFJK1ksRUFBVSxFQUFRLE1BQ2xCZ2YsRUFBVSxFQUFRLE1BRXRCaGYsRUFBUUEsRUFBUWdFLEVBQUloRSxFQUFRcEQsR0FBSyxFQUFRLEtBQVIsQ0FBNEIsR0FBR3daLGFBQWEsR0FBTyxRQUFTLENBRTNGQSxZQUFhLFNBQXFCcmEsR0FDaEMsT0FBT2lqQixFQUFRNzVCLEtBQU00VyxFQUFZbkgsVUFBVW5lLE9BQVFtZSxVQUFVLElBQUksTyw0QkNOckUsSUFBSW9MLEVBQVUsRUFBUSxNQUNsQmdmLEVBQVUsRUFBUSxNQUV0QmhmLEVBQVFBLEVBQVFnRSxFQUFJaEUsRUFBUXBELEdBQUssRUFBUSxLQUFSLENBQTRCLEdBQUdzWixRQUFRLEdBQU8sUUFBUyxDQUV0RkEsT0FBUSxTQUFnQm5hLEdBQ3RCLE9BQU9pakIsRUFBUTc1QixLQUFNNFcsRUFBWW5ILFVBQVVuZSxPQUFRbWUsVUFBVSxJQUFJLE8sMkJDTnJFLElBQUlvTCxFQUFVLEVBQVEsTUFDbEIrUyxFQUFPLEVBQVEsTUFDZnJaLEVBQU0sRUFBUSxNQUNkVyxFQUFrQixFQUFRLE1BQzFCQyxFQUFXLEVBQVEsTUFDbkJtQyxFQUFhLEdBQUd2akIsTUFHcEI4bUIsRUFBUUEsRUFBUWdFLEVBQUloRSxFQUFRcEQsRUFBSSxFQUFRLEtBQVIsRUFBb0IsV0FDOUNtVyxHQUFNdFcsRUFBVzlZLEtBQUtvdkIsTUFDeEIsUUFBUyxDQUNYNzVCLE1BQU8sU0FBZTQvQixFQUFPM3JCLEdBQzNCLElBQUlmLEVBQU1rTyxFQUFTblYsS0FBSzFPLFFBQ3BCNmpDLEVBQVE1Z0IsRUFBSXZVLE1BRWhCLEdBREFnSSxPQUFjcE4sSUFBUm9OLEVBQW9CZixFQUFNZSxFQUNuQixTQUFUbXRCLEVBQWtCLE9BQU83ZCxFQUFXOVksS0FBS3dCLEtBQU0yekIsRUFBTzNyQixHQU0xRCxJQUxBLElBQUlELEVBQVFtTixFQUFnQnllLEVBQU8xc0IsR0FDL0I2eUIsRUFBTzVrQixFQUFnQmxOLEVBQUtmLEdBQzVCaUQsRUFBT2lMLEVBQVMya0IsRUFBTy94QixHQUN2QmpWLEVBQVMsSUFBSVMsTUFBTTJXLEdBQ25CeFksRUFBSSxFQUNEQSxFQUFJd1ksRUFBTXhZLElBQUtvQixFQUFPcEIsR0FBYyxVQUFUeWpDLEVBQzlCbjFCLEtBQUs4QyxPQUFPaUYsRUFBUXJXLEdBQ3BCc08sS0FBSytILEVBQVFyVyxHQUNqQixPQUFPb0IsTSw0QkN4QlgsSUFBSStuQixFQUFVLEVBQVEsTUFDbEJrZixFQUFRLEVBQVEsS0FBUixDQUE0QixHQUV4Q2xmLEVBQVFBLEVBQVFnRSxFQUFJaEUsRUFBUXBELEdBQUssRUFBUSxLQUFSLENBQTRCLEdBQUdnYyxNQUFNLEdBQU8sUUFBUyxDQUVwRkEsS0FBTSxTQUFjN2MsR0FDbEIsT0FBT21qQixFQUFNLzVCLEtBQU00VyxFQUFZbkgsVUFBVSxRLDRCQ043QyxJQUFJb0wsRUFBVSxFQUFRLE1BQ2xCOUQsRUFBWSxFQUFRLE1BQ3BCOUIsRUFBVyxFQUFRLE1BQ25CK0YsRUFBUSxFQUFRLE1BQ2hCZ2YsRUFBUSxHQUFHNUksS0FDWHQ3QixFQUFPLENBQUMsRUFBRyxFQUFHLEdBRWxCK2tCLEVBQVFBLEVBQVFnRSxFQUFJaEUsRUFBUXBELEdBQUt1RCxHQUFNLFdBRXJDbGxCLEVBQUtzN0IsVUFBS3gyQixRQUNMb2dCLEdBQU0sV0FFWGxsQixFQUFLczdCLEtBQUssV0FFTCxFQUFRLEtBQVIsQ0FBNEI0SSxJQUFTLFFBQVMsQ0FFbkQ1SSxLQUFNLFNBQWNzQyxHQUNsQixZQUFxQjk0QixJQUFkODRCLEVBQ0hzRyxFQUFNeDdCLEtBQUt5VyxFQUFTalYsT0FDcEJnNkIsRUFBTXg3QixLQUFLeVcsRUFBU2pWLE1BQU8rVyxFQUFVMmMsUSxlQ3BCN0MsRUFBUSxLQUFSLENBQTBCLFUsZUNDMUIsSUFBSTdZLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUcsT0FBUSxDQUFFNlosSUFBSyxXQUFjLE9BQU8sSUFBSTlSLE1BQU9ELGMsY0NGbEUsSUFBSTdCLEVBQVUsRUFBUSxNQUNsQmdDLEVBQWMsRUFBUSxNQUcxQmhDLEVBQVFBLEVBQVFnRSxFQUFJaEUsRUFBUXBELEdBQUtrRixLQUFLeGUsVUFBVTBlLGNBQWdCQSxHQUFjLE9BQVEsQ0FDcEZBLFlBQWFBLEssNEJDTGYsSUFBSWhDLEVBQVUsRUFBUSxNQUNsQjVGLEVBQVcsRUFBUSxNQUNuQndJLEVBQWMsRUFBUSxNQUUxQjVDLEVBQVFBLEVBQVFnRSxFQUFJaEUsRUFBUXBELEVBQUksRUFBUSxLQUFSLEVBQW9CLFdBQ2xELE9BQWtDLE9BQTNCLElBQUlrRixLQUFLSSxLQUFLMU0sVUFDMkQsSUFBM0VzTSxLQUFLeGUsVUFBVWtTLE9BQU83UixLQUFLLENBQUVxZSxZQUFhLFdBQWMsT0FBTyxRQUNsRSxPQUFRLENBRVZ4TSxPQUFRLFNBQWdCbmQsR0FDdEIsSUFBSTZLLEVBQUlrWCxFQUFTalYsTUFDYmk2QixFQUFLeGMsRUFBWTFmLEdBQ3JCLE1BQW9CLGlCQUFOazhCLEdBQW1CN3BCLFNBQVM2cEIsR0FBYWw4QixFQUFFOGUsY0FBVCxTLGVDYnBELElBQUlxZCxFQUFlLEVBQVEsS0FBUixDQUFrQixlQUNqQzFlLEVBQVFtQixLQUFLeGUsVUFFWCs3QixLQUFnQjFlLEdBQVEsRUFBUSxJQUFSLENBQW1CQSxFQUFPMGUsRUFBYyxFQUFRLFEsZUNIOUUsSUFBSUMsRUFBWXhkLEtBQUt4ZSxVQUNqQmk4QixFQUFlLGVBRWZqUSxFQUFZZ1EsRUFBbUIsU0FDL0J6ZCxFQUFVeWQsRUFBVXpkLFFBQ3BCLElBQUlDLEtBQUtJLEtBQU8sSUFBTXFkLEdBQ3hCLEVBQVEsS0FBUixDQUF1QkQsRUFKVCxZQUkrQixXQUMzQyxJQUFJM25DLEVBQVFrcUIsRUFBUWxlLEtBQUt3QixNQUV6QixPQUFPeE4sR0FBVUEsRUFBUTIzQixFQUFVM3JCLEtBQUt3QixNQUFRbzZCLE0sZUNScEQsSUFBSXZmLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWdFLEVBQUcsV0FBWSxDQUFFcGdCLEtBQU0sRUFBUSxTLDJCQ0YvQyxJQUFJbkcsRUFBVyxFQUFRLE1BQ25CNEgsRUFBaUIsRUFBUSxNQUN6Qm02QixFQUFlLEVBQVEsS0FBUixDQUFrQixlQUNqQ0MsRUFBZ0IvN0IsU0FBU0osVUFFdkJrOEIsS0FBZ0JDLEdBQWdCLFVBQTBCQSxFQUFlRCxFQUFjLENBQUU3bkMsTUFBTyxTQUFVdUwsR0FDOUcsR0FBbUIsbUJBQVJpQyxPQUF1QjFILEVBQVN5RixHQUFJLE9BQU8sRUFDdEQsSUFBS3pGLEVBQVMwSCxLQUFLN0IsV0FBWSxPQUFPSixhQUFhaUMsS0FFbkQsS0FBT2pDLEVBQUltQyxFQUFlbkMsT0FBUWlDLEtBQUs3QixZQUFjSixFQUFHLE9BQU8sRUFDL0QsT0FBTyxNLGVDWFQsSUFBSW9hLEVBQUssVUFDTG9pQixFQUFTaDhCLFNBQVNKLFVBQ2xCcThCLEVBQVMsd0JBQ1R2aEIsRUFBTyxPQUdYQSxLQUFRc2hCLEdBQVUsRUFBUSxPQUFxQnBpQixFQUFHb2lCLEVBQVF0aEIsRUFBTSxDQUM5RGhiLGNBQWMsRUFDZHliLElBQUssV0FDSCxJQUNFLE9BQVEsR0FBSzFaLE1BQU02UCxNQUFNMnFCLEdBQVEsR0FDakMsTUFBT25zQixHQUNQLE1BQU8sUSw0QkNYYixJQUFJb3NCLEVBQVMsRUFBUSxNQUNqQjloQixFQUFXLEVBQVEsTUFDbkIraEIsRUFBTSxNQUdWbDdCLEVBQU9uTixRQUFVLEVBQVEsS0FBUixDQUF5QnFvQyxHQUFLLFNBQVVoaEIsR0FDdkQsT0FBTyxXQUFpQixPQUFPQSxFQUFJMVosS0FBTXlQLFVBQVVuZSxPQUFTLEVBQUltZSxVQUFVLFFBQUs3VSxNQUM5RSxDQUVEOGUsSUFBSyxTQUFheG1CLEdBQ2hCLElBQUl1USxFQUFRZzNCLEVBQU81aEIsU0FBU0YsRUFBUzNZLEtBQU0wNkIsR0FBTXhuQyxHQUNqRCxPQUFPdVEsR0FBU0EsRUFBTStWLEdBR3hCN0YsSUFBSyxTQUFhemdCLEVBQUtWLEdBQ3JCLE9BQU9pb0MsRUFBTzlnQixJQUFJaEIsRUFBUzNZLEtBQU0wNkIsR0FBYyxJQUFSeG5DLEVBQVksRUFBSUEsRUFBS1YsS0FFN0Rpb0MsR0FBUSxJLGVDakJYLElBQUk1ZixFQUFVLEVBQVEsTUFDbEJxSixFQUFRLEVBQVEsTUFDaEJ5VyxFQUFPcHBDLEtBQUtvcEMsS0FDWkMsRUFBU3JwQyxLQUFLc3BDLE1BRWxCaGdCLEVBQVFBLEVBQVFqRyxFQUFJaUcsRUFBUXBELElBQU1takIsR0FFVyxLQUF4Q3JwQyxLQUFLMHdCLE1BQU0yWSxFQUFPM3VCLE9BQU82dUIsYUFFekJGLEVBQU8vbUIsTUFBYUEsS0FDdEIsT0FBUSxDQUNUZ25CLE1BQU8sU0FBZTVyQixHQUNwQixPQUFRQSxHQUFLQSxHQUFLLEVBQUk4TixJQUFNOU4sRUFBSSxrQkFDNUIxZCxLQUFLNHlCLElBQUlsVixHQUFLMWQsS0FBS29rQyxJQUNuQnpSLEVBQU1qVixFQUFJLEVBQUkwckIsRUFBSzFyQixFQUFJLEdBQUswckIsRUFBSzFyQixFQUFJLFEsZUNkN0MsSUFBSTRMLEVBQVUsRUFBUSxNQUNsQmtnQixFQUFTeHBDLEtBQUt5cEMsTUFPbEJuZ0IsRUFBUUEsRUFBUWpHLEVBQUlpRyxFQUFRcEQsSUFBTXNqQixHQUFVLEVBQUlBLEVBQU8sR0FBSyxHQUFJLE9BQVEsQ0FBRUMsTUFMMUUsU0FBU0EsRUFBTS9yQixHQUNiLE9BQVFtQixTQUFTbkIsR0FBS0EsSUFBVyxHQUFMQSxFQUFhQSxFQUFJLEdBQUsrckIsR0FBTy9yQixHQUFLMWQsS0FBSzR5QixJQUFJbFYsRUFBSTFkLEtBQUtvcEMsS0FBSzFyQixFQUFJQSxFQUFJLElBQXhEQSxNLGVDSnZDLElBQUk0TCxFQUFVLEVBQVEsTUFDbEJvZ0IsRUFBUzFwQyxLQUFLMnBDLE1BR2xCcmdCLEVBQVFBLEVBQVFqRyxFQUFJaUcsRUFBUXBELElBQU13akIsR0FBVSxFQUFJQSxHQUFRLEdBQUssR0FBSSxPQUFRLENBQ3ZFQyxNQUFPLFNBQWVqc0IsR0FDcEIsT0FBbUIsSUFBWEEsR0FBS0EsR0FBVUEsRUFBSTFkLEtBQUs0eUIsS0FBSyxFQUFJbFYsSUFBTSxFQUFJQSxJQUFNLE0sZUNON0QsSUFBSTRMLEVBQVUsRUFBUSxNQUNsQjZJLEVBQU8sRUFBUSxNQUVuQjdJLEVBQVFBLEVBQVFqRyxFQUFHLE9BQVEsQ0FDekJ1bUIsS0FBTSxTQUFjbHNCLEdBQ2xCLE9BQU95VSxFQUFLelUsR0FBS0EsR0FBSzFkLEtBQUtrRyxJQUFJbEcsS0FBS0MsSUFBSXlkLEdBQUksRUFBSSxPLGVDTHBELElBQUk0TCxFQUFVLEVBQVEsTUFFdEJBLEVBQVFBLEVBQVFqRyxFQUFHLE9BQVEsQ0FDekJ3bUIsTUFBTyxTQUFlbnNCLEdBQ3BCLE9BQVFBLEtBQU8sR0FBSyxHQUFLMWQsS0FBSzB3QixNQUFNMXdCLEtBQUs0eUIsSUFBSWxWLEVBQUksSUFBTzFkLEtBQUs4cEMsT0FBUyxPLGVDSjFFLElBQUl4Z0IsRUFBVSxFQUFRLE1BQ2xCMkQsRUFBTWp0QixLQUFLaXRCLElBRWYzRCxFQUFRQSxFQUFRakcsRUFBRyxPQUFRLENBQ3pCMG1CLEtBQU0sU0FBY3JzQixHQUNsQixPQUFRdVAsRUFBSXZQLEdBQUtBLEdBQUt1UCxHQUFLdlAsSUFBTSxNLGVDTHJDLElBQUk0TCxFQUFVLEVBQVEsTUFDbEIySSxFQUFTLEVBQVEsTUFFckIzSSxFQUFRQSxFQUFRakcsRUFBSWlHLEVBQVFwRCxHQUFLK0wsR0FBVWp5QixLQUFLa3lCLE9BQVEsT0FBUSxDQUFFQSxNQUFPRCxLLGVDSHpFLElBQUkzSSxFQUFVLEVBQVEsTUFFdEJBLEVBQVFBLEVBQVFqRyxFQUFHLE9BQVEsQ0FBRW1QLE9BQVEsRUFBUSxTLGVDRjdDLElBQUlsSixFQUFVLEVBQVEsTUFDbEJycEIsRUFBTUQsS0FBS0MsSUFFZnFwQixFQUFRQSxFQUFRakcsRUFBRyxPQUFRLENBQ3pCMm1CLE1BQU8sU0FBZUMsRUFBUUMsR0FNNUIsSUFMQSxJQUlJdjZCLEVBQUt3NkIsRUFKTEMsRUFBTSxFQUNOanFDLEVBQUksRUFDSjhqQixFQUFPL0YsVUFBVW5lLE9BQ2pCc3FDLEVBQU8sRUFFSmxxQyxFQUFJOGpCLEdBRUxvbUIsR0FESjE2QixFQUFNMVAsRUFBSWllLFVBQVUvZCxRQUdsQmlxQyxFQUFNQSxHQURORCxFQUFNRSxFQUFPMTZCLEdBQ0t3NkIsRUFBTSxFQUN4QkUsRUFBTzE2QixHQUdQeTZCLEdBRlN6NkIsRUFBTSxHQUNmdzZCLEVBQU14NkIsRUFBTTA2QixHQUNDRixFQUNEeDZCLEVBRWhCLE9BQU8wNkIsSUFBUy9uQixJQUFXQSxJQUFXK25CLEVBQU9ycUMsS0FBS29wQyxLQUFLZ0IsTyxlQ3JCM0QsSUFBSTlnQixFQUFVLEVBQVEsTUFDbEJnaEIsRUFBUXRxQyxLQUFLdXFDLEtBR2pCamhCLEVBQVFBLEVBQVFqRyxFQUFJaUcsRUFBUXBELEVBQUksRUFBUSxLQUFSLEVBQW9CLFdBQ2xELE9BQWdDLEdBQXpCb2tCLEVBQU0sV0FBWSxJQUE0QixHQUFoQkEsRUFBTXZxQyxVQUN6QyxPQUFRLENBQ1Z3cUMsS0FBTSxTQUFjN3NCLEVBQUdDLEdBQ3JCLElBQUk2c0IsRUFBUyxNQUNUQyxHQUFNL3NCLEVBQ05ndEIsR0FBTS9zQixFQUNOZ3RCLEVBQUtILEVBQVNDLEVBQ2RHLEVBQUtKLEVBQVNFLEVBQ2xCLE9BQU8sRUFBSUMsRUFBS0MsSUFBT0osRUFBU0MsSUFBTyxJQUFNRyxFQUFLRCxHQUFNSCxFQUFTRSxJQUFPLEtBQU8sS0FBTyxPLGNDYjFGLElBQUlwaEIsRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRakcsRUFBRyxPQUFRLENBQ3pCd25CLE1BQU8sU0FBZW50QixHQUNwQixPQUFPMWQsS0FBSzR5QixJQUFJbFYsR0FBSzFkLEtBQUs4cUMsVyxlQ0o5QixJQUFJeGhCLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUcsT0FBUSxDQUFFc1AsTUFBTyxFQUFRLFMsZUNGNUMsSUFBSXJKLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUcsT0FBUSxDQUN6QjBuQixLQUFNLFNBQWNydEIsR0FDbEIsT0FBTzFkLEtBQUs0eUIsSUFBSWxWLEdBQUsxZCxLQUFLb2tDLFEsZUNKOUIsSUFBSTlhLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUcsT0FBUSxDQUFFOE8sS0FBTSxFQUFRLFMsZUNGM0MsSUFBSTdJLEVBQVUsRUFBUSxNQUNsQjRJLEVBQVEsRUFBUSxNQUNoQmpGLEVBQU1qdEIsS0FBS2l0QixJQUdmM0QsRUFBUUEsRUFBUWpHLEVBQUlpRyxFQUFRcEQsRUFBSSxFQUFRLEtBQVIsRUFBb0IsV0FDbEQsT0FBOEIsUUFBdEJsbUIsS0FBS2dyQyxNQUFNLFVBQ2pCLE9BQVEsQ0FDVkEsS0FBTSxTQUFjdHRCLEdBQ2xCLE9BQU8xZCxLQUFLQyxJQUFJeWQsR0FBS0EsR0FBSyxHQUNyQndVLEVBQU14VSxHQUFLd1UsR0FBT3hVLElBQU0sR0FDeEJ1UCxFQUFJdlAsRUFBSSxHQUFLdVAsR0FBS3ZQLEVBQUksS0FBTzFkLEtBQUtpckMsRUFBSSxPLGVDWC9DLElBQUkzaEIsRUFBVSxFQUFRLE1BQ2xCNEksRUFBUSxFQUFRLE1BQ2hCakYsRUFBTWp0QixLQUFLaXRCLElBRWYzRCxFQUFRQSxFQUFRakcsRUFBRyxPQUFRLENBQ3pCNm5CLEtBQU0sU0FBY3h0QixHQUNsQixJQUFJRCxFQUFJeVUsRUFBTXhVLEdBQUtBLEdBQ2ZsRSxFQUFJMFksR0FBT3hVLEdBQ2YsT0FBT0QsR0FBSzZFLElBQVcsRUFBSTlJLEdBQUs4SSxLQUFZLEdBQUs3RSxFQUFJakUsSUFBTXlULEVBQUl2UCxHQUFLdVAsR0FBS3ZQLFEsY0NSN0UsSUFBSTRMLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUcsT0FBUSxDQUN6QjhuQixNQUFPLFNBQWVwb0IsR0FDcEIsT0FBUUEsRUFBSyxFQUFJL2lCLEtBQUswd0IsTUFBUTF3QixLQUFLMDdCLE1BQU0zWSxPLDRCQ0o3QyxJQUFJNVYsRUFBUyxFQUFRLE1BQ2pCK2EsRUFBTSxFQUFRLE1BQ2RsRixFQUFNLEVBQVEsTUFDZDRHLEVBQW9CLEVBQVEsTUFDNUJzQyxFQUFjLEVBQVEsTUFDdEJ6QyxFQUFRLEVBQVEsTUFDaEI2TixFQUFPLFVBQ1BGLEVBQU8sVUFDUHhRLEVBQUssVUFDTHVSLEVBQVEsYUFDUmhNLEVBQVMsU0FDVGlmLEVBQVVqK0IsRUFBYSxPQUN2QjZjLEVBQU9vaEIsRUFDUG5oQixFQUFRbWhCLEVBQVF4K0IsVUFFaEJ5K0IsRUFBYXJvQixFQUFJLEVBQVEsS0FBUixDQUE0QmlILEtBQVdrQyxFQUN4RG1mLEVBQU8sU0FBVTMrQixPQUFPQyxVQUd4QjIrQixFQUFXLFNBQVVDLEdBQ3ZCLElBQUl6b0IsRUFBS21KLEVBQVlzZixHQUFVLEdBQy9CLEdBQWlCLGlCQUFOem9CLEdBQWtCQSxFQUFHaGpCLE9BQVMsRUFBRyxDQUUxQyxJQUNJMHJDLEVBQU9sVCxFQUFPbVQsRUFEZEMsR0FESjVvQixFQUFLdW9CLEVBQU92b0IsRUFBR1AsT0FBUzJWLEVBQU1wVixFQUFJLElBQ25Cbk4sV0FBVyxHQUUxQixHQUFjLEtBQVYrMUIsR0FBMEIsS0FBVkEsR0FFbEIsR0FBYyxNQURkRixFQUFRMW9CLEVBQUduTixXQUFXLEtBQ1EsTUFBVjYxQixFQUFlLE9BQU9qZ0IsU0FDckMsR0FBYyxLQUFWbWdCLEVBQWMsQ0FDdkIsT0FBUTVvQixFQUFHbk4sV0FBVyxJQUNwQixLQUFLLEdBQUksS0FBSyxHQUFJMmlCLEVBQVEsRUFBR21ULEVBQVUsR0FBSSxNQUMzQyxLQUFLLEdBQUksS0FBSyxJQUFLblQsRUFBUSxFQUFHbVQsRUFBVSxHQUFJLE1BQzVDLFFBQVMsT0FBUTNvQixFQUVuQixJQUFLLElBQW9EeE0sRUFBaERxMUIsRUFBUzdvQixFQUFHdmdCLE1BQU0sR0FBSXJDLEVBQUksRUFBRzhILEVBQUkyakMsRUFBTzdyQyxPQUFjSSxFQUFJOEgsRUFBRzlILElBSXBFLElBSEFvVyxFQUFPcTFCLEVBQU9oMkIsV0FBV3pWLElBR2QsSUFBTW9XLEVBQU9tMUIsRUFBUyxPQUFPbGdCLElBQ3hDLE9BQU8xUSxTQUFTOHdCLEVBQVFyVCxJQUU1QixPQUFReFYsR0FHWixJQUFLcW9CLEVBQVEsVUFBWUEsRUFBUSxRQUFVQSxFQUFRLFFBQVMsQ0FDMURBLEVBQVUsU0FBZ0JucUMsR0FDeEIsSUFBSThoQixFQUFLN0UsVUFBVW5lLE9BQVMsRUFBSSxFQUFJa0IsRUFDaENxa0IsRUFBTzdXLEtBQ1gsT0FBTzZXLGFBQWdCOGxCLElBRWpCQyxFQUFhNWhCLEdBQU0sV0FBY1EsRUFBTTRULFFBQVE1d0IsS0FBS3FZLE1BQVl0QyxFQUFJc0MsSUFBUzZHLEdBQzdFdkMsRUFBa0IsSUFBSUksRUFBS3VoQixFQUFTeG9CLElBQU11QyxFQUFNOGxCLEdBQVdHLEVBQVN4b0IsSUFFNUUsSUFBSyxJQU1nQnBoQixFQU5aRixFQUFPLEVBQVEsTUFBb0I2MUIsRUFBS3ROLEdBQVEsNktBTXZEamQsTUFBTSxLQUFNekosRUFBSSxFQUFRN0IsRUFBSzFCLE9BQVN1RCxFQUFHQSxJQUNyQzRrQixFQUFJOEIsRUFBTXJvQixFQUFNRixFQUFLNkIsTUFBUTRrQixFQUFJa2pCLEVBQVN6cEMsSUFDNUNpbEIsRUFBR3drQixFQUFTenBDLEVBQUt5MUIsRUFBS3BOLEVBQU1yb0IsSUFHaEN5cEMsRUFBUXgrQixVQUFZcWQsRUFDcEJBLEVBQU1oakIsWUFBY21rQyxFQUNwQixFQUFRLEtBQVIsQ0FBdUJqK0IsRUFBUWdmLEVBQVFpZixLLGVDbEV6QyxJQUFJOWhCLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUcsU0FBVSxDQUFFK08sUUFBU3B5QixLQUFLa0csSUFBSSxHQUFJLE8sZUNGckQsSUFBSW9qQixFQUFVLEVBQVEsTUFDbEJ1aUIsRUFBWSxpQkFFaEJ2aUIsRUFBUUEsRUFBUWpHLEVBQUcsU0FBVSxDQUMzQnhFLFNBQVUsU0FBa0JrRSxHQUMxQixNQUFvQixpQkFBTkEsR0FBa0I4b0IsRUFBVTlvQixPLGVDTDlDLElBQUl1RyxFQUFVLEVBQVEsTUFFdEJBLEVBQVFBLEVBQVFqRyxFQUFHLFNBQVUsQ0FBRXlvQixVQUFXLEVBQVEsUyxjQ0ZsRCxJQUFJeGlCLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUcsU0FBVSxDQUMzQi9lLE1BQU8sU0FBZXM1QixHQUVwQixPQUFPQSxHQUFVQSxNLGVDTHJCLElBQUl0VSxFQUFVLEVBQVEsTUFDbEJ3aUIsRUFBWSxFQUFRLE1BQ3BCN3JDLEVBQU1ELEtBQUtDLElBRWZxcEIsRUFBUUEsRUFBUWpHLEVBQUcsU0FBVSxDQUMzQjBvQixjQUFlLFNBQXVCbk8sR0FDcEMsT0FBT2tPLEVBQVVsTyxJQUFXMzlCLEVBQUkyOUIsSUFBVyxxQixlQ04vQyxJQUFJdFUsRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRakcsRUFBRyxTQUFVLENBQUUyb0IsaUJBQWtCLG9CLGVDRmpELElBQUkxaUIsRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRakcsRUFBRyxTQUFVLENBQUU0b0Isa0JBQW1CLG9CLGVDSGxELElBQUkzaUIsRUFBVSxFQUFRLE1BQ2xCNE8sRUFBYyxFQUFRLE1BRTFCNU8sRUFBUUEsRUFBUWpHLEVBQUlpRyxFQUFRcEQsR0FBS3hMLE9BQU93eEIsWUFBY2hVLEdBQWMsU0FBVSxDQUFFZ1UsV0FBWWhVLEssZUNINUYsSUFBSTVPLEVBQVUsRUFBUSxNQUNsQjhPLEVBQVksRUFBUSxNQUV4QjlPLEVBQVFBLEVBQVFqRyxFQUFJaUcsRUFBUXBELEdBQUt4TCxPQUFPSSxVQUFZc2QsR0FBWSxTQUFVLENBQUV0ZCxTQUFVc2QsSyw0QkNGdEYsSUFBSTlPLEVBQVUsRUFBUSxNQUNsQnNSLEVBQVksRUFBUSxNQUNwQnVSLEVBQWUsRUFBUSxLQUN2QmxSLEVBQVMsRUFBUSxNQUNqQm1SLEVBQVcsR0FBSUMsUUFDZjNiLEVBQVExd0IsS0FBSzB3QixNQUNibFksRUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUN2Qjh6QixFQUFRLHdDQUNSQyxFQUFPLElBRVBDLEVBQVcsU0FBVS95QixFQUFHZ0MsR0FHMUIsSUFGQSxJQUFJdGIsR0FBSyxFQUNMc3NDLEVBQUtoeEIsSUFDQXRiLEVBQUksR0FDWHNzQyxHQUFNaHpCLEVBQUlqQixFQUFLclksR0FDZnFZLEVBQUtyWSxHQUFLc3NDLEVBQUssSUFDZkEsRUFBSy9iLEVBQU0rYixFQUFLLE1BR2hCQyxFQUFTLFNBQVVqekIsR0FHckIsSUFGQSxJQUFJdFosRUFBSSxFQUNKc2IsRUFBSSxJQUNDdGIsR0FBSyxHQUNac2IsR0FBS2pELEVBQUtyWSxHQUNWcVksRUFBS3JZLEdBQUt1d0IsRUFBTWpWLEVBQUloQyxHQUNwQmdDLEVBQUtBLEVBQUloQyxFQUFLLEtBR2RrekIsRUFBYyxXQUdoQixJQUZBLElBQUl4c0MsRUFBSSxFQUNKeXJCLEVBQUksS0FDQ3pyQixHQUFLLEdBQ1osR0FBVSxLQUFOeXJCLEdBQWtCLElBQU56ckIsR0FBdUIsSUFBWnFZLEVBQUtyWSxHQUFVLENBQ3hDLElBQUl5c0MsRUFBSWpnQyxPQUFPNkwsRUFBS3JZLElBQ3BCeXJCLEVBQVUsS0FBTkEsRUFBV2doQixFQUFJaGhCLEVBQUlxUCxFQUFPaHVCLEtBQUtzL0IsRUFBTSxFQUFJSyxFQUFFN3NDLFFBQVU2c0MsRUFFM0QsT0FBT2hoQixHQUVQMWxCLEVBQU0sU0FBVXdYLEVBQUdqRSxFQUFHb3pCLEdBQ3hCLE9BQWEsSUFBTnB6QixFQUFVb3pCLEVBQU1wekIsRUFBSSxHQUFNLEVBQUl2VCxFQUFJd1gsRUFBR2pFLEVBQUksRUFBR296QixFQUFNbnZCLEdBQUt4WCxFQUFJd1gsRUFBSUEsRUFBR2pFLEVBQUksRUFBR296QixJQWVsRnZqQixFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxLQUFPa21CLElBQ1YsVUFBdkIsS0FBUUMsUUFBUSxJQUNHLE1BQW5CLEdBQUlBLFFBQVEsSUFDUyxTQUFyQixNQUFNQSxRQUFRLElBQ3VCLHlCQUFyQyxtQkFBc0JBLFFBQVEsTUFDMUIsRUFBUSxLQUFSLEVBQW9CLFdBRXhCRCxFQUFTbi9CLEtBQUssUUFDWCxTQUFVLENBQ2JvL0IsUUFBUyxTQUFpQlMsR0FDeEIsSUFJSWh3QixFQUFHaXdCLEVBQUd6cEMsRUFBRzBFLEVBSlQwVixFQUFJeXVCLEVBQWExOUIsS0FBTTY5QixHQUN2Qi9tQixFQUFJcVYsRUFBVWtTLEdBQ2RsaEIsRUFBSSxHQUNKbFMsRUFBSTZ5QixFQUVSLEdBQUlobkIsRUFBSSxHQUFLQSxFQUFJLEdBQUksTUFBTXBPLFdBQVdtMUIsR0FFdEMsR0FBSTV1QixHQUFLQSxFQUFHLE1BQU8sTUFDbkIsR0FBSUEsSUFBTSxNQUFRQSxHQUFLLEtBQU0sT0FBTy9RLE9BQU8rUSxHQUszQyxHQUpJQSxFQUFJLElBQ05rTyxFQUFJLElBQ0psTyxHQUFLQSxHQUVIQSxFQUFJLE1BS04sR0FIQXF2QixHQURBandCLEVBckNJLFNBQVVZLEdBR2xCLElBRkEsSUFBSWpFLEVBQUksRUFDSnV6QixFQUFLdHZCLEVBQ0ZzdkIsR0FBTSxNQUNYdnpCLEdBQUssR0FDTHV6QixHQUFNLEtBRVIsS0FBT0EsR0FBTSxHQUNYdnpCLEdBQUssRUFDTHV6QixHQUFNLEVBQ04sT0FBT3Z6QixFQTJCRG1aLENBQUlsVixFQUFJeFgsRUFBSSxFQUFHLEdBQUksSUFBTSxJQUNyQixFQUFJd1gsRUFBSXhYLEVBQUksR0FBSTRXLEVBQUcsR0FBS1ksRUFBSXhYLEVBQUksRUFBRzRXLEVBQUcsR0FDOUNpd0IsR0FBSyxrQkFDTGp3QixFQUFJLEdBQUtBLEdBQ0QsRUFBRyxDQUdULElBRkEwdkIsRUFBUyxFQUFHTyxHQUNaenBDLEVBQUlpaUIsRUFDR2ppQixHQUFLLEdBQ1ZrcEMsRUFBUyxJQUFLLEdBQ2RscEMsR0FBSyxFQUlQLElBRkFrcEMsRUFBU3RtQyxFQUFJLEdBQUk1QyxFQUFHLEdBQUksR0FDeEJBLEVBQUl3WixFQUFJLEVBQ0R4WixHQUFLLElBQ1ZvcEMsRUFBTyxHQUFLLElBQ1pwcEMsR0FBSyxHQUVQb3BDLEVBQU8sR0FBS3BwQyxHQUNaa3BDLEVBQVMsRUFBRyxHQUNaRSxFQUFPLEdBQ1BoekIsRUFBSWl6QixTQUVKSCxFQUFTLEVBQUdPLEdBQ1pQLEVBQVMsSUFBTTF2QixFQUFHLEdBQ2xCcEQsRUFBSWl6QixJQUFnQjFSLEVBQU9odUIsS0FBS3MvQixFQUFNaG5CLEdBUXhDLE9BTEVBLEVBQUksRUFFRnFHLElBREo1akIsRUFBSTBSLEVBQUUzWixTQUNRd2xCLEVBQUksS0FBTzBWLEVBQU9odUIsS0FBS3MvQixFQUFNaG5CLEVBQUl2ZCxHQUFLMFIsRUFBSUEsRUFBRWxYLE1BQU0sRUFBR3dGLEVBQUl1ZCxHQUFLLElBQU03TCxFQUFFbFgsTUFBTXdGLEVBQUl1ZCxJQUUxRnFHLEVBQUlsUyxNLDRCQzdHZCxJQUFJNFAsRUFBVSxFQUFRLE1BQ2xCMmpCLEVBQVMsRUFBUSxNQUNqQmQsRUFBZSxFQUFRLEtBQ3ZCZSxFQUFlLEdBQUlDLFlBRXZCN2pCLEVBQVFBLEVBQVFnRSxFQUFJaEUsRUFBUXBELEdBQUsrbUIsR0FBTyxXQUV0QyxNQUEyQyxNQUFwQ0MsRUFBYWpnQyxLQUFLLE9BQUc1RCxRQUN2QjRqQyxHQUFPLFdBRVpDLEVBQWFqZ0MsS0FBSyxRQUNmLFNBQVUsQ0FDYmtnQyxZQUFhLFNBQXFCbm5DLEdBQ2hDLElBQUlzZixFQUFPNm1CLEVBQWExOUIsS0FBTSw2Q0FDOUIsWUFBcUJwRixJQUFkckQsRUFBMEJrbkMsRUFBYWpnQyxLQUFLcVksR0FBUTRuQixFQUFhamdDLEtBQUtxWSxFQUFNdGYsTyxlQ2R2RixJQUFJc2pCLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUlpRyxFQUFRcEQsRUFBRyxTQUFVLENBQUU0UCxPQUFRLEVBQVEsUyxjQ0gzRCxJQUFJeE0sRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRakcsRUFBRyxTQUFVLENBQUVwVSxPQUFRLEVBQVEsUyxlQ0YvQyxJQUFJcWEsRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRakcsRUFBSWlHLEVBQVFwRCxHQUFLLEVBQVEsTUFBbUIsU0FBVSxDQUFFK1EsaUJBQWtCLEVBQVEsUyxlQ0ZsRyxJQUFJM04sRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRakcsRUFBSWlHLEVBQVFwRCxHQUFLLEVBQVEsTUFBbUIsU0FBVSxDQUFFMWhCLGVBQWdCLGEsZUNEeEYsSUFBSXVDLEVBQVcsRUFBUSxNQUNuQnlpQixFQUFPLGlCQUVYLEVBQVEsS0FBUixDQUF5QixVQUFVLFNBQVU0akIsR0FDM0MsT0FBTyxTQUFnQnJxQixHQUNyQixPQUFPcXFCLEdBQVdybUMsRUFBU2djLEdBQU1xcUIsRUFBUTVqQixFQUFLekcsSUFBT0EsTyxlQ0x6RCxJQUFJc0IsRUFBWSxFQUFRLE1BQ3BCZ3BCLEVBQTRCLFVBRWhDLEVBQVEsS0FBUixDQUF5Qiw0QkFBNEIsV0FDbkQsT0FBTyxTQUFrQ3RxQixFQUFJcGhCLEdBQzNDLE9BQU8wckMsRUFBMEJocEIsRUFBVXRCLEdBQUtwaEIsUSxlQ0xwRCxFQUFRLEtBQVIsQ0FBeUIsdUJBQXVCLFdBQzlDLE9BQU8sYyxjQ0RULElBQUkraEIsRUFBVyxFQUFRLE1BQ25CNHBCLEVBQWtCLEVBQVEsTUFFOUIsRUFBUSxLQUFSLENBQXlCLGtCQUFrQixXQUN6QyxPQUFPLFNBQXdCdnFCLEdBQzdCLE9BQU91cUIsRUFBZ0I1cEIsRUFBU1gsUyxlQ0xwQyxJQUFJaGMsRUFBVyxFQUFRLE1BRXZCLEVBQVEsS0FBUixDQUF5QixnQkFBZ0IsU0FBVXdtQyxHQUNqRCxPQUFPLFNBQXNCeHFCLEdBQzNCLFFBQU9oYyxFQUFTZ2MsTUFBTXdxQixHQUFnQkEsRUFBY3hxQixTLGNDSnhELElBQUloYyxFQUFXLEVBQVEsTUFFdkIsRUFBUSxLQUFSLENBQXlCLFlBQVksU0FBVXltQyxHQUM3QyxPQUFPLFNBQWtCenFCLEdBQ3ZCLE9BQU9oYyxFQUFTZ2MsTUFBTXlxQixHQUFZQSxFQUFVenFCLFEsY0NKaEQsSUFBSWhjLEVBQVcsRUFBUSxNQUV2QixFQUFRLEtBQVIsQ0FBeUIsWUFBWSxTQUFVMG1DLEdBQzdDLE9BQU8sU0FBa0IxcUIsR0FDdkIsT0FBT2hjLEVBQVNnYyxNQUFNMHFCLEdBQVlBLEVBQVUxcUIsUSxlQ0poRCxJQUFJdUcsRUFBVSxFQUFRLE1BQ3RCQSxFQUFRQSxFQUFRakcsRUFBRyxTQUFVLENBQUVpSixHQUFJLEVBQVEsUyxlQ0QzQyxJQUFJNUksRUFBVyxFQUFRLE1BQ25CZ1UsRUFBUSxFQUFRLE1BRXBCLEVBQVEsS0FBUixDQUF5QixRQUFRLFdBQy9CLE9BQU8sU0FBYzNVLEdBQ25CLE9BQU8yVSxFQUFNaFUsRUFBU1gsUyxlQ0wxQixJQUFJaGMsRUFBVyxFQUFRLE1BQ25CeWlCLEVBQU8saUJBRVgsRUFBUSxLQUFSLENBQXlCLHFCQUFxQixTQUFVa2tCLEdBQ3RELE9BQU8sU0FBMkIzcUIsR0FDaEMsT0FBTzJxQixHQUFzQjNtQyxFQUFTZ2MsR0FBTTJxQixFQUFtQmxrQixFQUFLekcsSUFBT0EsTyxlQ0wvRSxJQUFJaGMsRUFBVyxFQUFRLE1BQ25CeWlCLEVBQU8saUJBRVgsRUFBUSxLQUFSLENBQXlCLFFBQVEsU0FBVW1rQixHQUN6QyxPQUFPLFNBQWM1cUIsR0FDbkIsT0FBTzRxQixHQUFTNW1DLEVBQVNnYyxHQUFNNHFCLEVBQU1ua0IsRUFBS3pHLElBQU9BLE8sZUNMckQsSUFBSXVHLEVBQVUsRUFBUSxNQUN0QkEsRUFBUUEsRUFBUWpHLEVBQUcsU0FBVSxDQUFFN1QsZUFBZ0IsZSwyQkNBL0MsSUFBSWlaLEVBQVUsRUFBUSxNQUNsQmxrQixFQUFPLEdBQ1hBLEVBQUssRUFBUSxLQUFSLENBQWtCLGdCQUFrQixJQUNyQ0EsRUFBTyxJQUFNLGNBQ2YsRUFBUSxLQUFSLENBQXVCL0MsT0FBT29MLFVBQVcsWUFBWSxXQUNuRCxNQUFPLFdBQWE2YixFQUFRaGEsTUFBUSxPQUNuQyxJLGNDUkwsSUFBSTZhLEVBQVUsRUFBUSxNQUNsQjRPLEVBQWMsRUFBUSxNQUUxQjVPLEVBQVFBLEVBQVFzQixFQUFJdEIsRUFBUXBELEdBQUtnbUIsWUFBY2hVLEdBQWMsQ0FBRWdVLFdBQVloVSxLLGVDSDNFLElBQUk1TyxFQUFVLEVBQVEsTUFDbEI4TyxFQUFZLEVBQVEsTUFFeEI5TyxFQUFRQSxFQUFRc0IsRUFBSXRCLEVBQVFwRCxHQUFLcEwsVUFBWXNkLEdBQVksQ0FBRXRkLFNBQVVzZCxLLDRCQ0ZyRSxJQXdCSXdWLEVBQVVDLEVBQTZCQyxFQUFzQkMsRUF4QjdEbGQsRUFBVSxFQUFRLE1BQ2xCMWpCLEVBQVMsRUFBUSxNQUNqQnVYLEVBQU0sRUFBUSxNQUNkK0QsRUFBVSxFQUFRLE1BQ2xCYSxFQUFVLEVBQVEsTUFDbEJ2aUIsRUFBVyxFQUFRLE1BQ25CeWUsRUFBWSxFQUFRLE1BQ3BCc0IsRUFBYSxFQUFRLE1BQ3JCM0MsRUFBUSxFQUFRLE1BQ2hCMkIsRUFBcUIsRUFBUSxNQUM3QjJQLEVBQU8sWUFDUHVZLEVBQVksRUFBUSxHQUFSLEdBQ1pDLEVBQTZCLEVBQVEsTUFDckNDLEVBQVUsRUFBUSxNQUNsQjVHLEVBQVksRUFBUSxNQUNwQjZHLEVBQWlCLEVBQVEsS0FDekJDLEVBQVUsVUFDVjU1QixFQUFZckgsRUFBT3FILFVBQ25CSixFQUFVakgsRUFBT2lILFFBQ2pCaTZCLEVBQVdqNkIsR0FBV0EsRUFBUWk2QixTQUM5QkMsRUFBS0QsR0FBWUEsRUFBU0MsSUFBTSxHQUNoQ0MsRUFBV3BoQyxFQUFjLFFBQ3pCcW5CLEVBQTZCLFdBQXBCL0wsRUFBUXJVLEdBQ2pCbzZCLEVBQVEsYUFFUmhXLEVBQXVCcVYsRUFBOEJJLEVBQTJCMW9CLEVBRWhGa3BCLElBQWUsV0FDakIsSUFFRSxJQUFJdFosRUFBVW9aLEVBQVN4NkIsUUFBUSxHQUMzQjI2QixHQUFldlosRUFBUWx1QixZQUFjLElBQUksRUFBUSxLQUFSLENBQWtCLFlBQWMsU0FBVTRtQixHQUNyRkEsRUFBSzJnQixFQUFPQSxJQUdkLE9BQVFoYSxHQUEwQyxtQkFBekJtYSx3QkFDcEJ4WixFQUFRN2tCLEtBQUtrK0IsYUFBa0JFLEdBSVQsSUFBdEJKLEVBQUdsbkMsUUFBUSxTQUN5QixJQUFwQ2tnQyxFQUFVbGdDLFFBQVEsYUFDdkIsTUFBTzBWLEtBZlEsR0FtQmY4eEIsRUFBYSxTQUFVN3JCLEdBQ3pCLElBQUl6UyxFQUNKLFNBQU92SixFQUFTZ2MsSUFBa0MsbUJBQW5CelMsRUFBT3lTLEVBQUd6UyxRQUFzQkEsR0FFN0Rxa0IsRUFBUyxTQUFVUSxFQUFTMFosR0FDOUIsSUFBSTFaLEVBQVEyWixHQUFaLENBQ0EzWixFQUFRMlosSUFBSyxFQUNiLElBQUlDLEVBQVE1WixFQUFRNlosR0FDcEJoQixHQUFVLFdBb0NSLElBbkNBLElBQUkvc0MsRUFBUWswQixFQUFROFosR0FDaEJDLEVBQW1CLEdBQWQvWixFQUFRZ2EsR0FDYmh2QyxFQUFJLEVBQ0o0OEIsRUFBTSxTQUFVcVMsR0FDbEIsSUFJSTcrQixFQUFRRCxFQUFNKytCLEVBSmRDLEVBQVVKLEVBQUtFLEVBQVNGLEdBQUtFLEVBQVNHLEtBQ3RDeDdCLEVBQVVxN0IsRUFBU3I3QixRQUNuQkMsRUFBU283QixFQUFTcDdCLE9BQ2xCSyxFQUFTKzZCLEVBQVMvNkIsT0FFdEIsSUFDTWk3QixHQUNHSixJQUNlLEdBQWQvWixFQUFRcWEsSUFBU0MsRUFBa0J0YSxHQUN2Q0EsRUFBUXFhLEdBQUssSUFFQyxJQUFaRixFQUFrQi8rQixFQUFTdFAsR0FFekJvVCxHQUFRQSxFQUFPMGdCLFFBQ25CeGtCLEVBQVMrK0IsRUFBUXJ1QyxHQUNib1QsSUFDRkEsRUFBT3lnQixPQUNQdWEsR0FBUyxJQUdUOStCLElBQVc2K0IsRUFBU2phLFFBQ3RCbmhCLEVBQU9RLEVBQVUseUJBQ1JsRSxFQUFPcytCLEVBQVdyK0IsSUFDM0JELEVBQUtyRCxLQUFLc0QsRUFBUXdELEVBQVNDLEdBQ3RCRCxFQUFReEQsSUFDVnlELEVBQU8vUyxHQUNkLE1BQU82YixHQUNIekksSUFBV2c3QixHQUFRaDdCLEVBQU95Z0IsT0FDOUI5Z0IsRUFBTzhJLEtBR0ppeUIsRUFBTWh2QyxPQUFTSSxHQUFHNDhCLEVBQUlnUyxFQUFNNXVDLE1BQ25DZzFCLEVBQVE2WixHQUFLLEdBQ2I3WixFQUFRMlosSUFBSyxFQUNURCxJQUFhMVosRUFBUXFhLElBQUlFLEVBQVl2YSxRQUd6Q3VhLEVBQWMsU0FBVXZhLEdBQzFCTSxFQUFLeG9CLEtBQUtFLEdBQVEsV0FDaEIsSUFFSW9ELEVBQVErK0IsRUFBU3R5QixFQUZqQi9iLEVBQVFrMEIsRUFBUThaLEdBQ2hCVSxFQUFZQyxFQUFZemEsR0FlNUIsR0FiSXdhLElBQ0ZwL0IsRUFBUzI5QixHQUFRLFdBQ1gxWixFQUNGcGdCLEVBQVF5N0IsS0FBSyxxQkFBc0I1dUMsRUFBT2swQixJQUNqQ21hLEVBQVVuaUMsRUFBTzJpQyxzQkFDMUJSLEVBQVEsQ0FBRW5hLFFBQVNBLEVBQVM0YSxPQUFROXVDLEtBQzFCK2IsRUFBVTdQLEVBQU82UCxVQUFZQSxFQUFRQyxPQUMvQ0QsRUFBUUMsTUFBTSw4QkFBK0JoYyxNQUlqRGswQixFQUFRcWEsR0FBS2hiLEdBQVVvYixFQUFZemEsR0FBVyxFQUFJLEdBQ2xEQSxFQUFRL29CLFFBQUsvQyxFQUNYc21DLEdBQWFwL0IsRUFBT3VNLEVBQUcsTUFBTXZNLEVBQU8wWCxNQUd4QzJuQixFQUFjLFNBQVV6YSxHQUMxQixPQUFzQixJQUFmQSxFQUFRcWEsSUFBa0QsS0FBckNyYSxFQUFRL29CLElBQU0rb0IsRUFBUTZaLElBQUlqdkMsUUFFcEQwdkMsRUFBb0IsU0FBVXRhLEdBQ2hDTSxFQUFLeG9CLEtBQUtFLEdBQVEsV0FDaEIsSUFBSW1pQyxFQUNBOWEsRUFDRnBnQixFQUFReTdCLEtBQUssbUJBQW9CMWEsSUFDeEJtYSxFQUFVbmlDLEVBQU82aUMscUJBQzFCVixFQUFRLENBQUVuYSxRQUFTQSxFQUFTNGEsT0FBUTVhLEVBQVE4WixTQUk5Q2dCLEVBQVUsU0FBVWh2QyxHQUN0QixJQUFJazBCLEVBQVUxbUIsS0FDVjBtQixFQUFRaU0sS0FDWmpNLEVBQVFpTSxJQUFLLEdBQ2JqTSxFQUFVQSxFQUFRK2EsSUFBTS9hLEdBQ2hCOFosR0FBS2h1QyxFQUNiazBCLEVBQVFnYSxHQUFLLEVBQ1JoYSxFQUFRL29CLEtBQUkrb0IsRUFBUS9vQixHQUFLK29CLEVBQVE2WixHQUFHeHNDLFNBQ3pDbXlCLEVBQU9RLEdBQVMsS0FFZGdiLEVBQVcsU0FBVWx2QyxHQUN2QixJQUNJcVAsRUFEQTZrQixFQUFVMW1CLEtBRWQsSUFBSTBtQixFQUFRaU0sR0FBWixDQUNBak0sRUFBUWlNLElBQUssRUFDYmpNLEVBQVVBLEVBQVErYSxJQUFNL2EsRUFDeEIsSUFDRSxHQUFJQSxJQUFZbDBCLEVBQU8sTUFBTXVULEVBQVUscUNBQ25DbEUsRUFBT3MrQixFQUFXM3RDLElBQ3BCK3NDLEdBQVUsV0FDUixJQUFJdm1CLEVBQVUsQ0FBRXlvQixHQUFJL2EsRUFBU2lNLElBQUksR0FDakMsSUFDRTl3QixFQUFLckQsS0FBS2hNLEVBQU95akIsRUFBSXlyQixFQUFVMW9CLEVBQVMsR0FBSS9DLEVBQUl1ckIsRUFBU3hvQixFQUFTLElBQ2xFLE1BQU8zSyxHQUNQbXpCLEVBQVFoakMsS0FBS3dhLEVBQVMzSyxRQUkxQnFZLEVBQVE4WixHQUFLaHVDLEVBQ2JrMEIsRUFBUWdhLEdBQUssRUFDYnhhLEVBQU9RLEdBQVMsSUFFbEIsTUFBT3JZLEdBQ1BtekIsRUFBUWhqQyxLQUFLLENBQUVpakMsR0FBSS9hLEVBQVNpTSxJQUFJLEdBQVN0a0IsTUFLeEMyeEIsSUFFSEYsRUFBVyxTQUFpQjZCLEdBQzFCdHBCLEVBQVdyWSxLQUFNOC9CLEVBQVVILEVBQVMsTUFDcEM1b0IsRUFBVTRxQixHQUNWeEMsRUFBUzNnQyxLQUFLd0IsTUFDZCxJQUNFMmhDLEVBQVMxckIsRUFBSXlyQixFQUFVMWhDLEtBQU0sR0FBSWlXLEVBQUl1ckIsRUFBU3hoQyxLQUFNLElBQ3BELE1BQU9vRixHQUNQbzhCLEVBQVFoakMsS0FBS3dCLEtBQU1vRixNQUl2Qis1QixFQUFXLFNBQWlCd0MsR0FDMUIzaEMsS0FBS3VnQyxHQUFLLEdBQ1Z2Z0MsS0FBS3JDLFFBQUsvQyxFQUNWb0YsS0FBSzBnQyxHQUFLLEVBQ1YxZ0MsS0FBSzJ5QixJQUFLLEVBQ1YzeUIsS0FBS3dnQyxRQUFLNWxDLEVBQ1ZvRixLQUFLK2dDLEdBQUssRUFDVi9nQyxLQUFLcWdDLElBQUssSUFFSGxpQyxVQUFZLEVBQVEsS0FBUixDQUEyQjJoQyxFQUFTM2hDLFVBQVcsQ0FFbEUwRCxLQUFNLFNBQWMrL0IsRUFBYUMsR0FDL0IsSUFBSWxCLEVBQVc1VyxFQUFxQjFTLEVBQW1CclgsS0FBTTgvQixJQU83RCxPQU5BYSxFQUFTRixHQUEyQixtQkFBZm1CLEdBQTRCQSxFQUNqRGpCLEVBQVNHLEtBQTRCLG1CQUFkZSxHQUE0QkEsRUFDbkRsQixFQUFTLzZCLE9BQVNtZ0IsRUFBU3BnQixFQUFRQyxZQUFTaEwsRUFDNUNvRixLQUFLdWdDLEdBQUd0a0MsS0FBSzBrQyxHQUNUM2dDLEtBQUtyQyxJQUFJcUMsS0FBS3JDLEdBQUcxQixLQUFLMGtDLEdBQ3RCM2dDLEtBQUswZ0MsSUFBSXhhLEVBQU9sbUIsTUFBTSxHQUNuQjJnQyxFQUFTamEsU0FHbEIsTUFBUyxTQUFVbWIsR0FDakIsT0FBTzdoQyxLQUFLNkIsVUFBS2pILEVBQVdpbkMsTUFHaEN4QyxFQUF1QixXQUNyQixJQUFJM1ksRUFBVSxJQUFJeVksRUFDbEJuL0IsS0FBSzBtQixRQUFVQSxFQUNmMW1CLEtBQUtzRixRQUFVMlEsRUFBSXlyQixFQUFVaGIsRUFBUyxHQUN0QzFtQixLQUFLdUYsT0FBUzBRLEVBQUl1ckIsRUFBUzlhLEVBQVMsSUFFdEM4WSxFQUEyQjFvQixFQUFJaVQsRUFBdUIsU0FBVTNTLEdBQzlELE9BQU9BLElBQU0wb0IsR0FBWTFvQixJQUFNa29CLEVBQzNCLElBQUlELEVBQXFCam9CLEdBQ3pCZ29CLEVBQTRCaG9CLEtBSXBDeUQsRUFBUUEsRUFBUXNCLEVBQUl0QixFQUFRdUIsRUFBSXZCLEVBQVFwRCxHQUFLdW9CLEVBQVksQ0FBRXg2QixRQUFTczZCLElBQ3BFLEVBQVEsSUFBUixDQUFnQ0EsRUFBVUgsR0FDMUMsRUFBUSxLQUFSLENBQTBCQSxHQUMxQkwsRUFBVSxFQUFRLE1BQWtCLFFBR3BDemtCLEVBQVFBLEVBQVFqRyxFQUFJaUcsRUFBUXBELEdBQUt1b0IsRUFBWUwsRUFBUyxDQUVwRHA2QixPQUFRLFNBQWdCK1QsR0FDdEIsSUFBSXdvQixFQUFhL1gsRUFBcUIvcEIsTUFHdEMsT0FEQW1uQixFQURlMmEsRUFBV3Y4QixRQUNqQitULEdBQ0Z3b0IsRUFBV3BiLFdBR3RCN0wsRUFBUUEsRUFBUWpHLEVBQUlpRyxFQUFRcEQsR0FBSzJLLElBQVk0ZCxHQUFhTCxFQUFTLENBRWpFcjZCLFFBQVMsU0FBaUIySixHQUN4QixPQUFPeXdCLEVBQWV0ZCxHQUFXcGlCLE9BQVNzL0IsRUFBVVEsRUFBVzkvQixLQUFNaVAsTUFHekU0TCxFQUFRQSxFQUFRakcsRUFBSWlHLEVBQVFwRCxJQUFNdW9CLEdBQWMsRUFBUSxLQUFSLEVBQTBCLFNBQVVyK0IsR0FDbEZtK0IsRUFBU2lDLElBQUlwZ0MsR0FBYSxNQUFFbytCLE9BQ3pCSixFQUFTLENBRVpvQyxJQUFLLFNBQWF6OUIsR0FDaEIsSUFBSThTLEVBQUlwWCxLQUNKOGhDLEVBQWEvWCxFQUFxQjNTLEdBQ2xDOVIsRUFBVXc4QixFQUFXeDhCLFFBQ3JCQyxFQUFTdThCLEVBQVd2OEIsT0FDcEJ6RCxFQUFTMjlCLEdBQVEsV0FDbkIsSUFBSXIvQixFQUFTLEdBQ1R5VSxFQUFRLEVBQ1IzSSxFQUFZLEVBQ2hCd0osRUFBTXBSLEdBQVUsR0FBTyxTQUFVb2lCLEdBQy9CLElBQUlzYixFQUFTbnRCLElBQ1RvdEIsR0FBZ0IsRUFDcEI3aEMsRUFBT25FLFVBQUtyQixHQUNac1IsSUFDQWtMLEVBQUU5UixRQUFRb2hCLEdBQVM3a0IsTUFBSyxTQUFVclAsR0FDNUJ5dkMsSUFDSkEsR0FBZ0IsRUFDaEI3aEMsRUFBTzRoQyxHQUFVeHZDLElBQ2YwWixHQUFhNUcsRUFBUWxGLE1BQ3RCbUYsUUFFSDJHLEdBQWE1RyxFQUFRbEYsTUFHekIsT0FESTBCLEVBQU91TSxHQUFHOUksRUFBT3pELEVBQU8wWCxHQUNyQnNvQixFQUFXcGIsU0FHcEJ3YixLQUFNLFNBQWM1OUIsR0FDbEIsSUFBSThTLEVBQUlwWCxLQUNKOGhDLEVBQWEvWCxFQUFxQjNTLEdBQ2xDN1IsRUFBU3U4QixFQUFXdjhCLE9BQ3BCekQsRUFBUzI5QixHQUFRLFdBQ25CL3BCLEVBQU1wUixHQUFVLEdBQU8sU0FBVW9pQixHQUMvQnRQLEVBQUU5UixRQUFRb2hCLEdBQVM3a0IsS0FBS2lnQyxFQUFXeDhCLFFBQVNDLFNBSWhELE9BREl6RCxFQUFPdU0sR0FBRzlJLEVBQU96RCxFQUFPMFgsR0FDckJzb0IsRUFBV3BiLFksZUMxUnRCLElBQUk3TCxFQUFVLEVBQVEsTUFDbEI5RCxFQUFZLEVBQVEsTUFDcEJtRCxFQUFXLEVBQVEsTUFDbkJpb0IsR0FBVSxpQkFBZ0MsSUFBSW4wQixNQUM5Q28wQixFQUFTN2pDLFNBQVN5UCxNQUV0QjZNLEVBQVFBLEVBQVFqRyxFQUFJaUcsRUFBUXBELEdBQUssRUFBUSxLQUFSLEVBQW9CLFdBQ25EMHFCLEdBQU8sa0JBQ0wsVUFBVyxDQUNibjBCLE1BQU8sU0FBZThCLEVBQVF1eUIsRUFBY0MsR0FDMUMsSUFBSXZxQixFQUFJaEIsRUFBVWpILEdBQ2R5eUIsRUFBSXJvQixFQUFTb29CLEdBQ2pCLE9BQU9ILEVBQVNBLEVBQU9wcUIsRUFBR3NxQixFQUFjRSxHQUFLSCxFQUFPNWpDLEtBQUt1WixFQUFHc3FCLEVBQWNFLE8sZUNaOUUsSUFBSTFuQixFQUFVLEVBQVEsTUFDbEJyYSxFQUFTLEVBQVEsTUFDakJ1VyxFQUFZLEVBQVEsTUFDcEJtRCxFQUFXLEVBQVEsTUFDbkI1aEIsRUFBVyxFQUFRLE1BQ25CMGlCLEVBQVEsRUFBUSxNQUNoQnZjLEVBQU8sRUFBUSxNQUNmK2pDLEdBQWMsaUJBQWdDLElBQUlockIsVUFJbERpckIsRUFBaUJ6bkIsR0FBTSxXQUN6QixTQUFTdkQsS0FDVCxRQUFTK3FCLEdBQVcsY0FBNkIsR0FBSS9xQixhQUFjQSxNQUVqRWlyQixHQUFZMW5CLEdBQU0sV0FDcEJ3bkIsR0FBVyxrQkFHYjNuQixFQUFRQSxFQUFRakcsRUFBSWlHLEVBQVFwRCxHQUFLZ3JCLEdBQWtCQyxHQUFXLFVBQVcsQ0FDdkVsckIsVUFBVyxTQUFtQm1yQixFQUFRanJCLEdBQ3BDWCxFQUFVNHJCLEdBQ1Z6b0IsRUFBU3hDLEdBQ1QsSUFBSWtyQixFQUFZbnpCLFVBQVVuZSxPQUFTLEVBQUlxeEMsRUFBUzVyQixFQUFVdEgsVUFBVSxJQUNwRSxHQUFJaXpCLElBQWFELEVBQWdCLE9BQU9ELEVBQVdHLEVBQVFqckIsRUFBTWtyQixHQUNqRSxHQUFJRCxHQUFVQyxFQUFXLENBRXZCLE9BQVFsckIsRUFBS3BtQixRQUNYLEtBQUssRUFBRyxPQUFPLElBQUlxeEMsRUFDbkIsS0FBSyxFQUFHLE9BQU8sSUFBSUEsRUFBT2pyQixFQUFLLElBQy9CLEtBQUssRUFBRyxPQUFPLElBQUlpckIsRUFBT2pyQixFQUFLLEdBQUlBLEVBQUssSUFDeEMsS0FBSyxFQUFHLE9BQU8sSUFBSWlyQixFQUFPanJCLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLElBQ2pELEtBQUssRUFBRyxPQUFPLElBQUlpckIsRUFBT2pyQixFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLElBRzVELElBQUltckIsRUFBUSxDQUFDLE1BRWIsT0FEQUEsRUFBTTVtQyxLQUFLK1IsTUFBTTYwQixFQUFPbnJCLEdBQ2pCLElBQUtqWixFQUFLdVAsTUFBTTIwQixFQUFRRSxJQUdqQyxJQUFJcm5CLEVBQVFvbkIsRUFBVXprQyxVQUNsQnlkLEVBQVdwYixFQUFPbEksRUFBU2tqQixHQUFTQSxFQUFRem9CLE9BQU9vTCxXQUNuRDJELEVBQVN2RCxTQUFTeVAsTUFBTXhQLEtBQUtta0MsRUFBUS9tQixFQUFVbEUsR0FDbkQsT0FBT3BmLEVBQVN3SixHQUFVQSxFQUFTOFosTSxlQzNDdkMsSUFBSXpELEVBQUssRUFBUSxNQUNiMEMsRUFBVSxFQUFRLE1BQ2xCWCxFQUFXLEVBQVEsTUFDbkJ1RCxFQUFjLEVBQVEsTUFHMUI1QyxFQUFRQSxFQUFRakcsRUFBSWlHLEVBQVFwRCxFQUFJLEVBQVEsS0FBUixFQUFvQixXQUVsRDhSLFFBQVF4ekIsZUFBZW9pQixFQUFHckIsRUFBRSxHQUFJLEVBQUcsQ0FBRXRrQixNQUFPLElBQU0sRUFBRyxDQUFFQSxNQUFPLE9BQzVELFVBQVcsQ0FDYnVELGVBQWdCLFNBQXdCK1osRUFBUWd6QixFQUFhQyxHQUMzRDdvQixFQUFTcEssR0FDVGd6QixFQUFjcmxCLEVBQVlxbEIsR0FBYSxHQUN2QzVvQixFQUFTNm9CLEdBQ1QsSUFFRSxPQURBNXFCLEVBQUdyQixFQUFFaEgsRUFBUWd6QixFQUFhQyxJQUNuQixFQUNQLE1BQU8xMEIsR0FDUCxPQUFPLE8sY0NsQmIsSUFBSXdNLEVBQVUsRUFBUSxNQUNsQjhOLEVBQU8sVUFDUHpPLEVBQVcsRUFBUSxNQUV2QlcsRUFBUUEsRUFBUWpHLEVBQUcsVUFBVyxDQUM1Qm91QixlQUFnQixTQUF3Qmx6QixFQUFRZ3pCLEdBQzlDLElBQUkxTyxFQUFPekwsRUFBS3pPLEVBQVNwSyxHQUFTZ3pCLEdBQ2xDLFFBQU8xTyxJQUFTQSxFQUFLbjJCLHNCQUE4QjZSLEVBQU9nekIsTyw0QkNOOUQsSUFBSWpvQixFQUFVLEVBQVEsTUFDbEJYLEVBQVcsRUFBUSxNQUNuQitvQixFQUFZLFNBQVVwcEIsR0FDeEI3WixLQUFLbVosR0FBS2UsRUFBU0wsR0FDbkI3WixLQUFLdEwsR0FBSyxFQUNWLElBQ0l4QixFQURBRixFQUFPZ04sS0FBSytaLEdBQUssR0FFckIsSUFBSzdtQixLQUFPMm1CLEVBQVU3bUIsRUFBS2lKLEtBQUsvSSxJQUVsQyxFQUFRLEtBQVIsQ0FBMEIrdkMsRUFBVyxVQUFVLFdBQzdDLElBRUkvdkMsRUFGQTJqQixFQUFPN1csS0FDUGhOLEVBQU82akIsRUFBS2tELEdBRWhCLEdBQ0UsR0FBSWxELEVBQUtuaUIsSUFBTTFCLEVBQUsxQixPQUFRLE1BQU8sQ0FBRWtCLFdBQU9vSSxFQUFXbUgsTUFBTSxZQUNuRDdPLEVBQU1GLEVBQUs2akIsRUFBS25pQixTQUFVbWlCLEVBQUtzQyxLQUMzQyxNQUFPLENBQUUzbUIsTUFBT1UsRUFBSzZPLE1BQU0sTUFHN0I4WSxFQUFRQSxFQUFRakcsRUFBRyxVQUFXLENBQzVCc3VCLFVBQVcsU0FBbUJwekIsR0FDNUIsT0FBTyxJQUFJbXpCLEVBQVVuekIsTyxlQ3RCekIsSUFBSTZZLEVBQU8sRUFBUSxNQUNmOU4sRUFBVSxFQUFRLE1BQ2xCWCxFQUFXLEVBQVEsTUFFdkJXLEVBQVFBLEVBQVFqRyxFQUFHLFVBQVcsQ0FDNUJnVSx5QkFBMEIsU0FBa0M5WSxFQUFRZ3pCLEdBQ2xFLE9BQU9uYSxFQUFLN1IsRUFBRW9ELEVBQVNwSyxHQUFTZ3pCLE8sZUNOcEMsSUFBSWpvQixFQUFVLEVBQVEsTUFDbEI1YSxFQUFXLEVBQVEsTUFDbkJpYSxFQUFXLEVBQVEsTUFFdkJXLEVBQVFBLEVBQVFqRyxFQUFHLFVBQVcsQ0FDNUIxVSxlQUFnQixTQUF3QjRQLEdBQ3RDLE9BQU83UCxFQUFTaWEsRUFBU3BLLFEsZUNON0IsSUFBSTZZLEVBQU8sRUFBUSxNQUNmem9CLEVBQWlCLEVBQVEsTUFDekJ1WixFQUFNLEVBQVEsTUFDZG9CLEVBQVUsRUFBUSxNQUNsQnZpQixFQUFXLEVBQVEsTUFDbkI0aEIsRUFBVyxFQUFRLE1BY3ZCVyxFQUFRQSxFQUFRakcsRUFBRyxVQUFXLENBQUU4RSxJQVpoQyxTQUFTQSxFQUFJNUosRUFBUWd6QixHQUNuQixJQUNJMU8sRUFBTTVZLEVBRE4ybkIsRUFBVzF6QixVQUFVbmUsT0FBUyxFQUFJd2UsRUFBU0wsVUFBVSxHQUV6RCxPQUFJeUssRUFBU3BLLEtBQVlxekIsRUFBaUJyekIsRUFBT2d6QixJQUM3QzFPLEVBQU96TCxFQUFLN1IsRUFBRWhILEVBQVFnekIsSUFBcUJycEIsRUFBSTJhLEVBQU0sU0FDckRBLEVBQUs1aEMsV0FDUW9JLElBQWJ3NUIsRUFBSzFhLElBQ0gwYSxFQUFLMWEsSUFBSWxiLEtBQUsya0MsUUFDZHZvQyxFQUNGdEMsRUFBU2tqQixFQUFRdGIsRUFBZTRQLElBQWlCNEosRUFBSThCLEVBQU9zbkIsRUFBYUssUUFBN0UsTSxlQ2hCRixJQUFJdG9CLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUcsVUFBVyxDQUM1QjZFLElBQUssU0FBYTNKLEVBQVFnekIsR0FDeEIsT0FBT0EsS0FBZWh6QixNLGVDSjFCLElBQUkrSyxFQUFVLEVBQVEsTUFDbEJYLEVBQVcsRUFBUSxNQUNuQjRrQixFQUFnQi9yQyxPQUFPNHhCLGFBRTNCOUosRUFBUUEsRUFBUWpHLEVBQUcsVUFBVyxDQUM1QitQLGFBQWMsU0FBc0I3VSxHQUVsQyxPQURBb0ssRUFBU3BLLElBQ0ZndkIsR0FBZ0JBLEVBQWNodkIsTyxlQ1B6QyxJQUFJK0ssRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRakcsRUFBRyxVQUFXLENBQUU0VSxRQUFTLEVBQVEsUyxlQ0ZqRCxJQUFJM08sRUFBVSxFQUFRLE1BQ2xCWCxFQUFXLEVBQVEsTUFDbkIra0IsRUFBcUJsc0MsT0FBTzh4QixrQkFFaENoSyxFQUFRQSxFQUFRakcsRUFBRyxVQUFXLENBQzVCaVEsa0JBQW1CLFNBQTJCL1UsR0FDNUNvSyxFQUFTcEssR0FDVCxJQUVFLE9BREltdkIsR0FBb0JBLEVBQW1CbnZCLElBQ3BDLEVBQ1AsTUFBT3pCLEdBQ1AsT0FBTyxPLGVDWGIsSUFBSXdNLEVBQVUsRUFBUSxNQUNsQnVvQixFQUFXLEVBQVEsTUFFbkJBLEdBQVV2b0IsRUFBUUEsRUFBUWpHLEVBQUcsVUFBVyxDQUMxQzdULGVBQWdCLFNBQXdCK08sRUFBUTBMLEdBQzlDNG5CLEVBQVMxWCxNQUFNNWIsRUFBUTBMLEdBQ3ZCLElBRUUsT0FEQTRuQixFQUFTenZCLElBQUk3RCxFQUFRMEwsSUFDZCxFQUNQLE1BQU9uTixHQUNQLE9BQU8sTyxjQ1ZiLElBQUk4SixFQUFLLEVBQVEsTUFDYndRLEVBQU8sRUFBUSxNQUNmem9CLEVBQWlCLEVBQVEsTUFDekJ1WixFQUFNLEVBQVEsTUFDZG9CLEVBQVUsRUFBUSxNQUNsQjRCLEVBQWEsRUFBUSxNQUNyQnZDLEVBQVcsRUFBUSxNQUNuQjVoQixFQUFXLEVBQVEsTUF3QnZCdWlCLEVBQVFBLEVBQVFqRyxFQUFHLFVBQVcsQ0FBRWpCLElBdEJoQyxTQUFTQSxFQUFJN0QsRUFBUWd6QixFQUFhTyxHQUNoQyxJQUVJQyxFQUFvQjluQixFQUZwQjJuQixFQUFXMXpCLFVBQVVuZSxPQUFTLEVBQUl3ZSxFQUFTTCxVQUFVLEdBQ3JEOHpCLEVBQVU1YSxFQUFLN1IsRUFBRW9ELEVBQVNwSyxHQUFTZ3pCLEdBRXZDLElBQUtTLEVBQVMsQ0FDWixHQUFJanJDLEVBQVNrakIsRUFBUXRiLEVBQWU0UCxJQUNsQyxPQUFPNkQsRUFBSTZILEVBQU9zbkIsRUFBYU8sRUFBR0YsR0FFcENJLEVBQVU5bUIsRUFBVyxHQUV2QixHQUFJaEQsRUFBSThwQixFQUFTLFNBQVUsQ0FDekIsSUFBeUIsSUFBckJBLEVBQVF2bEMsV0FBdUIxRixFQUFTNnFDLEdBQVcsT0FBTyxFQUM5RCxHQUFJRyxFQUFxQjNhLEVBQUs3UixFQUFFcXNCLEVBQVVMLEdBQWMsQ0FDdEQsR0FBSVEsRUFBbUI1cEIsS0FBTzRwQixFQUFtQjN2QixNQUF1QyxJQUFoQzJ2QixFQUFtQnRsQyxTQUFvQixPQUFPLEVBQ3RHc2xDLEVBQW1COXdDLE1BQVE2d0MsRUFDM0JsckIsRUFBR3JCLEVBQUVxc0IsRUFBVUwsRUFBYVEsUUFDdkJuckIsRUFBR3JCLEVBQUVxc0IsRUFBVUwsRUFBYXJtQixFQUFXLEVBQUc0bUIsSUFDakQsT0FBTyxFQUVULFlBQXVCem9DLElBQWhCMm9DLEVBQVE1dkIsTUFBNkI0dkIsRUFBUTV2QixJQUFJblYsS0FBSzJrQyxFQUFVRSxJQUFJLE8sZUM3QjdFLElBQUkza0MsRUFBUyxFQUFRLE1BQ2pCeWMsRUFBb0IsRUFBUSxNQUM1QmhELEVBQUssVUFDTDBRLEVBQU8sVUFDUDNHLEVBQVcsRUFBUSxNQUNuQnNoQixFQUFTLEVBQVEsTUFDakJDLEVBQVUva0MsRUFBTzhoQixPQUNqQmpGLEVBQU9rb0IsRUFDUGpvQixFQUFRaW9CLEVBQVF0bEMsVUFDaEJxc0IsRUFBTSxLQUNOQyxFQUFNLEtBRU5pWixFQUFjLElBQUlELEVBQVFqWixLQUFTQSxFQUV2QyxHQUFJLEVBQVEsU0FBdUJrWixHQUFlLEVBQVEsS0FBUixFQUFvQixXQUdwRSxPQUZBalosRUFBSSxFQUFRLEtBQVIsQ0FBa0IsV0FBWSxFQUUzQmdaLEVBQVFqWixJQUFRQSxHQUFPaVosRUFBUWhaLElBQVFBLEdBQTRCLFFBQXJCZ1osRUFBUWpaLEVBQUssU0FDL0QsQ0FDSGlaLEVBQVUsU0FBZ0JscUIsRUFBR3pDLEdBQzNCLElBQUk2c0IsRUFBTzNqQyxnQkFBZ0J5akMsRUFDdkJHLEVBQU8xaEIsRUFBUzNJLEdBQ2hCc3FCLE9BQVlqcEMsSUFBTmtjLEVBQ1YsT0FBUTZzQixHQUFRQyxHQUFRcnFCLEVBQUUvZ0IsY0FBZ0JpckMsR0FBV0ksRUFBTXRxQixFQUN2RDRCLEVBQWtCdW9CLEVBQ2hCLElBQUlub0IsRUFBS3FvQixJQUFTQyxFQUFNdHFCLEVBQUUrRSxPQUFTL0UsRUFBR3pDLEdBQ3RDeUUsR0FBTXFvQixFQUFPcnFCLGFBQWFrcUIsR0FBV2xxQixFQUFFK0UsT0FBUy9FLEVBQUdxcUIsR0FBUUMsRUFBTUwsRUFBT2hsQyxLQUFLK2EsR0FBS3pDLEdBQ3BGNnNCLEVBQU8zakMsS0FBT3diLEVBQU9pb0IsSUFTM0IsSUFQQSxJQUFJSyxFQUFRLFNBQVU1d0MsR0FDcEJBLEtBQU91d0MsR0FBV3RyQixFQUFHc3JCLEVBQVN2d0MsRUFBSyxDQUNqQytLLGNBQWMsRUFDZHliLElBQUssV0FBYyxPQUFPNkIsRUFBS3JvQixJQUMvQnlnQixJQUFLLFNBQVVXLEdBQU1pSCxFQUFLcm9CLEdBQU9vaEIsTUFHNUJ0aEIsRUFBTzYxQixFQUFLdE4sR0FBTzdwQixFQUFJLEVBQUdzQixFQUFLMUIsT0FBU0ksR0FBSW95QyxFQUFNOXdDLEVBQUt0QixNQUNoRThwQixFQUFNaGpCLFlBQWNpckMsRUFDcEJBLEVBQVF0bEMsVUFBWXFkLEVBQ3BCLEVBQVEsS0FBUixDQUF1QjljLEVBQVEsU0FBVStrQyxHQUczQyxFQUFRLEtBQVIsQ0FBMEIsVyw0QkN6QzFCLElBQUlsa0IsRUFBYSxFQUFRLEtBQ3pCLEVBQVEsS0FBUixDQUFxQixDQUNuQnpQLE9BQVEsU0FDUjBMLE9BQU8sRUFDUDZkLE9BQVE5WixJQUFlLElBQUlILE1BQzFCLENBQ0RBLEtBQU1HLEssY0NOSixFQUFRLE9BQW1DLEtBQWQsS0FBS3drQixPQUFjLFVBQTBCdmpCLE9BQU9yaUIsVUFBVyxRQUFTLENBQ3ZHRixjQUFjLEVBQ2R5YixJQUFLLEVBQVEsUyw0QkNEZixJQUFJUSxFQUFXLEVBQVEsTUFDbkIvRSxFQUFXLEVBQVEsTUFDbkI2dUIsRUFBcUIsRUFBUSxNQUM3QkMsRUFBYSxFQUFRLE1BR3pCLEVBQVEsS0FBUixDQUF5QixRQUFTLEdBQUcsU0FBVTVrQixFQUFTSCxFQUFPZ2xCLEVBQVFDLEdBQ3JFLE1BQU8sQ0FHTCxTQUFlaGtCLEdBQ2IsSUFBSXBpQixFQUFJc2hCLEVBQVFyZixNQUNaa0YsRUFBZXRLLE1BQVZ1bEIsT0FBc0J2bEIsRUFBWXVsQixFQUFPakIsR0FDbEQsWUFBY3RrQixJQUFQc0ssRUFBbUJBLEVBQUcxRyxLQUFLMmhCLEVBQVFwaUIsR0FBSyxJQUFJeWlCLE9BQU9MLEdBQVFqQixHQUFPaGhCLE9BQU9ILEtBSWxGLFNBQVVvaUIsR0FDUixJQUFJOVMsRUFBTTgyQixFQUFnQkQsRUFBUS9qQixFQUFRbmdCLE1BQzFDLEdBQUlxTixFQUFJdEwsS0FBTSxPQUFPc0wsRUFBSTdhLE1BQ3pCLElBQUk0eEMsRUFBS2xxQixFQUFTaUcsR0FDZHZMLEVBQUkxVyxPQUFPOEIsTUFDZixJQUFLb2tDLEVBQUcxbEMsT0FBUSxPQUFPdWxDLEVBQVdHLEVBQUl4dkIsR0FDdEMsSUFBSXl2QixFQUFjRCxFQUFHdHZCLFFBQ3JCc3ZCLEVBQUdwWixVQUFZLEVBSWYsSUFIQSxJQUVJbHBCLEVBRkF3bEIsRUFBSSxHQUNKdGMsRUFBSSxFQUVnQyxRQUFoQ2xKLEVBQVNtaUMsRUFBV0csRUFBSXh2QixLQUFjLENBQzVDLElBQUkwdkIsRUFBV3BtQyxPQUFPNEQsRUFBTyxJQUM3QndsQixFQUFFdGMsR0FBS3M1QixFQUNVLEtBQWJBLElBQWlCRixFQUFHcFosVUFBWWdaLEVBQW1CcHZCLEVBQUdPLEVBQVNpdkIsRUFBR3BaLFdBQVlxWixJQUNsRnI1QixJQUVGLE9BQWEsSUFBTkEsRUFBVSxLQUFPc2MsUSwwQkNsQzlCLElBQUlwTixFQUFXLEVBQVEsTUFDbkJqRixFQUFXLEVBQVEsTUFDbkJFLEVBQVcsRUFBUSxNQUNuQmdYLEVBQVksRUFBUSxNQUNwQjZYLEVBQXFCLEVBQVEsTUFDN0JDLEVBQWEsRUFBUSxNQUNyQnIwQixFQUFNcmUsS0FBS3FlLElBQ1h4QyxFQUFNN2IsS0FBSzZiLElBQ1g2VSxFQUFRMXdCLEtBQUswd0IsTUFDYnNpQixFQUF1Qiw0QkFDdkJDLEVBQWdDLG9CQU9wQyxFQUFRLEtBQVIsQ0FBeUIsVUFBVyxHQUFHLFNBQVVubEIsRUFBU29sQixFQUFTQyxFQUFVUCxHQUMzRSxNQUFPLENBR0wsU0FBaUJRLEVBQWFDLEdBQzVCLElBQUk3bUMsRUFBSXNoQixFQUFRcmYsTUFDWmtGLEVBQW9CdEssTUFBZitwQyxPQUEyQi9wQyxFQUFZK3BDLEVBQVlGLEdBQzVELFlBQWM3cEMsSUFBUHNLLEVBQ0hBLEVBQUcxRyxLQUFLbW1DLEVBQWE1bUMsRUFBRzZtQyxHQUN4QkYsRUFBU2xtQyxLQUFLTixPQUFPSCxHQUFJNG1DLEVBQWFDLElBSTVDLFNBQVV6a0IsRUFBUXlrQixHQUNoQixJQUFJdjNCLEVBQU04MkIsRUFBZ0JPLEVBQVV2a0IsRUFBUW5nQixLQUFNNGtDLEdBQ2xELEdBQUl2M0IsRUFBSXRMLEtBQU0sT0FBT3NMLEVBQUk3YSxNQUV6QixJQUFJNHhDLEVBQUtscUIsRUFBU2lHLEdBQ2R2TCxFQUFJMVcsT0FBTzhCLE1BQ1g2a0MsRUFBNEMsbUJBQWpCRCxFQUMxQkMsSUFBbUJELEVBQWUxbUMsT0FBTzBtQyxJQUM5QyxJQUFJbG1DLEVBQVMwbEMsRUFBRzFsQyxPQUNoQixHQUFJQSxFQUFRLENBQ1YsSUFBSTJsQyxFQUFjRCxFQUFHdHZCLFFBQ3JCc3ZCLEVBQUdwWixVQUFZLEVBR2pCLElBREEsSUFBSThaLEVBQVUsS0FDRCxDQUNYLElBQUloakMsRUFBU21pQyxFQUFXRyxFQUFJeHZCLEdBQzVCLEdBQWUsT0FBWDlTLEVBQWlCLE1BRXJCLEdBREFnakMsRUFBUTdvQyxLQUFLNkYsSUFDUnBELEVBQVEsTUFFSSxLQURGUixPQUFPNEQsRUFBTyxNQUNSc2lDLEVBQUdwWixVQUFZZ1osRUFBbUJwdkIsRUFBR08sRUFBU2l2QixFQUFHcFosV0FBWXFaLElBSXBGLElBRkEsSUF4Q3dCL3ZCLEVBd0NwQnl3QixFQUFvQixHQUNwQkMsRUFBcUIsRUFDaEJ0ekMsRUFBSSxFQUFHQSxFQUFJb3pDLEVBQVF4ekMsT0FBUUksSUFBSyxDQUN2Q29RLEVBQVNnakMsRUFBUXB6QyxHQVNqQixJQVJBLElBQUl1ekMsRUFBVS9tQyxPQUFPNEQsRUFBTyxJQUN4Qm9qQyxFQUFXdDFCLEVBQUl4QyxFQUFJK2UsRUFBVXJxQixFQUFPK1MsT0FBUUQsRUFBRXRqQixRQUFTLEdBQ3ZENnpDLEVBQVcsR0FNTnR3QyxFQUFJLEVBQUdBLEVBQUlpTixFQUFPeFEsT0FBUXVELElBQUtzd0MsRUFBU2xwQyxVQW5EekNyQixLQURjMFosRUFvRDhDeFMsRUFBT2pOLElBbkR2RHlmLEVBQUtwVyxPQUFPb1csSUFvRGhDLElBQUk4d0IsRUFBZ0J0akMsRUFBTzJkLE9BQzNCLEdBQUlvbEIsRUFBbUIsQ0FDckIsSUFBSVEsRUFBZSxDQUFDSixHQUFTOTFCLE9BQU9nMkIsRUFBVUQsRUFBVXR3QixRQUNsQ2hhLElBQWxCd3FDLEdBQTZCQyxFQUFhcHBDLEtBQUttcEMsR0FDbkQsSUFBSUUsRUFBY3BuQyxPQUFPMG1DLEVBQWE1MkIsV0FBTXBULEVBQVd5cUMsU0FFdkRDLEVBQWNDLEVBQWdCTixFQUFTcndCLEVBQUdzd0IsRUFBVUMsRUFBVUMsRUFBZVIsR0FFM0VNLEdBQVlGLElBQ2RELEdBQXFCbndCLEVBQUU3Z0IsTUFBTWl4QyxFQUFvQkUsR0FBWUksRUFDN0ROLEVBQXFCRSxFQUFXRCxFQUFRM3pDLFFBRzVDLE9BQU95ekMsRUFBb0Jud0IsRUFBRTdnQixNQUFNaXhDLEtBS3ZDLFNBQVNPLEVBQWdCTixFQUFTdjRCLEVBQUt3NEIsRUFBVUMsRUFBVUMsRUFBZUUsR0FDeEUsSUFBSUUsRUFBVU4sRUFBV0QsRUFBUTN6QyxPQUM3QjJaLEVBQUlrNkIsRUFBUzd6QyxPQUNiNnNCLEVBQVVxbUIsRUFLZCxZQUpzQjVwQyxJQUFsQndxQyxJQUNGQSxFQUFnQm53QixFQUFTbXdCLEdBQ3pCam5CLEVBQVVvbUIsR0FFTEcsRUFBU2xtQyxLQUFLOG1DLEVBQWFubkIsR0FBUyxTQUFVdE8sRUFBTzQxQixHQUMxRCxJQUFJQyxFQUNKLE9BQVFELEVBQUczaUMsT0FBTyxJQUNoQixJQUFLLElBQUssTUFBTyxJQUNqQixJQUFLLElBQUssT0FBT21pQyxFQUNqQixJQUFLLElBQUssT0FBT3Y0QixFQUFJM1ksTUFBTSxFQUFHbXhDLEdBQzlCLElBQUssSUFBSyxPQUFPeDRCLEVBQUkzWSxNQUFNeXhDLEdBQzNCLElBQUssSUFDSEUsRUFBVU4sRUFBY0ssRUFBRzF4QyxNQUFNLEdBQUksSUFDckMsTUFDRixRQUNFLElBQUlpWCxHQUFLeTZCLEVBQ1QsR0FBVSxJQUFOejZCLEVBQVMsT0FBTzZFLEVBQ3BCLEdBQUk3RSxFQUFJQyxFQUFHLENBQ1QsSUFBSTZMLEVBQUltTCxFQUFNalgsRUFBSSxJQUNsQixPQUFVLElBQU44TCxFQUFnQmpILEVBQ2hCaUgsR0FBSzdMLE9BQThCclEsSUFBcEJ1cUMsRUFBU3J1QixFQUFJLEdBQW1CMnVCLEVBQUczaUMsT0FBTyxHQUFLcWlDLEVBQVNydUIsRUFBSSxHQUFLMnVCLEVBQUczaUMsT0FBTyxHQUN2RitNLEVBRVQ2MUIsRUFBVVAsRUFBU242QixFQUFJLEdBRTNCLFlBQW1CcFEsSUFBWjhxQyxFQUF3QixHQUFLQSxVLDRCQ2hIMUMsSUFBSXhyQixFQUFXLEVBQVEsTUFDbkJ5ckIsRUFBWSxFQUFRLE1BQ3BCMUIsRUFBYSxFQUFRLE1BR3pCLEVBQVEsS0FBUixDQUF5QixTQUFVLEdBQUcsU0FBVTVrQixFQUFTdW1CLEVBQVFDLEVBQVMxQixHQUN4RSxNQUFPLENBR0wsU0FBZ0Joa0IsR0FDZCxJQUFJcGlCLEVBQUlzaEIsRUFBUXJmLE1BQ1prRixFQUFldEssTUFBVnVsQixPQUFzQnZsQixFQUFZdWxCLEVBQU95bEIsR0FDbEQsWUFBY2hyQyxJQUFQc0ssRUFBbUJBLEVBQUcxRyxLQUFLMmhCLEVBQVFwaUIsR0FBSyxJQUFJeWlCLE9BQU9MLEdBQVF5bEIsR0FBUTFuQyxPQUFPSCxLQUluRixTQUFVb2lCLEdBQ1IsSUFBSTlTLEVBQU04MkIsRUFBZ0IwQixFQUFTMWxCLEVBQVFuZ0IsTUFDM0MsR0FBSXFOLEVBQUl0TCxLQUFNLE9BQU9zTCxFQUFJN2EsTUFDekIsSUFBSTR4QyxFQUFLbHFCLEVBQVNpRyxHQUNkdkwsRUFBSTFXLE9BQU84QixNQUNYOGxDLEVBQW9CMUIsRUFBR3BaLFVBQ3RCMmEsRUFBVUcsRUFBbUIsS0FBSTFCLEVBQUdwWixVQUFZLEdBQ3JELElBQUlscEIsRUFBU21pQyxFQUFXRyxFQUFJeHZCLEdBRTVCLE9BREsrd0IsRUFBVXZCLEVBQUdwWixVQUFXOGEsS0FBb0IxQixFQUFHcFosVUFBWThhLEdBQzlDLE9BQVhoa0MsR0FBbUIsRUFBSUEsRUFBTytTLFksNEJDekIzQyxJQUFJcU4sRUFBVyxFQUFRLE1BQ25CaEksRUFBVyxFQUFRLE1BQ25CN0MsRUFBcUIsRUFBUSxNQUM3QjJzQixFQUFxQixFQUFRLE1BQzdCN3VCLEVBQVcsRUFBUSxNQUNuQjR3QixFQUFpQixFQUFRLE1BQ3pCeG1CLEVBQWEsRUFBUSxLQUNyQnZFLEVBQVEsRUFBUSxNQUNoQmdyQixFQUFPejBDLEtBQUs2YixJQUNaNjRCLEVBQVEsR0FBR2hxQyxLQUlYaXFDLEVBQWEsV0FHYkMsR0FBY25yQixHQUFNLFdBQWN3RixPQUFPMGxCLEVBQVksUUFHekQsRUFBUSxLQUFSLENBQXlCLFFBQVMsR0FBRyxTQUFVN21CLEVBQVMrbUIsRUFBT0MsRUFBUWxDLEdBQ3JFLElBQUltQyxFQWtESixPQXhDRUEsRUFSNkIsS0FBN0IsT0FBYSxNQUFFLFFBQVEsSUFDZSxHQUF0QyxPQUFhLE1BQUUsUUFBUyxHQUFTLFFBQ0UsR0FBbkMsS0FBVyxNQUFFLFdBQWlCLFFBQ0ssR0FBbkMsSUFBVSxNQUFFLFlBQWtCLFFBQzlCLElBQVUsTUFBRSxRQUFjLE9BQUksR0FDOUIsR0FBUyxNQUFFLE1BQVksT0FHUCxTQUFVL1MsRUFBV3pnQixHQUNuQyxJQUFJM0osRUFBU2pMLE9BQU84QixNQUNwQixRQUFrQnBGLElBQWQyNEIsR0FBcUMsSUFBVnpnQixFQUFhLE1BQU8sR0FFbkQsSUFBS29QLEVBQVNxUixHQUFZLE9BQU84UyxFQUFPN25DLEtBQUsySyxFQUFRb3FCLEVBQVd6Z0IsR0FXaEUsSUFWQSxJQVNJakQsRUFBT21iLEVBQVd1YixFQVRsQnQrQixFQUFTLEdBQ1Q4N0IsR0FBU3hRLEVBQVU5UyxXQUFhLElBQU0sS0FDN0I4UyxFQUFVN1MsVUFBWSxJQUFNLEtBQzVCNlMsRUFBVXplLFFBQVUsSUFBTSxLQUMxQnllLEVBQVU1UyxPQUFTLElBQU0sSUFDbEM2bEIsRUFBZ0IsRUFDaEJDLE9BQXVCN3JDLElBQVZrWSxFQUFzQm96QixFQUFhcHpCLElBQVUsRUFFMUQ0ekIsRUFBZ0IsSUFBSWxtQixPQUFPK1MsRUFBVWpWLE9BQVF5bEIsRUFBUSxNQUVsRGwwQixFQUFRMFAsRUFBVy9nQixLQUFLa29DLEVBQWV2OUIsUUFDNUM2aEIsRUFBWTBiLEVBQXdCLFdBQ3BCRixJQUNkditCLEVBQU9oTSxLQUFLa04sRUFBT3BWLE1BQU15eUMsRUFBZTMyQixFQUFNZ0YsUUFDMUNoRixFQUFZLE9BQUksR0FBS0EsRUFBTWdGLE1BQVExTCxFQUFhLFFBQUc4OEIsRUFBTWo0QixNQUFNL0YsRUFBUTRILEVBQU05YixNQUFNLElBQ3ZGd3lDLEVBQWExMkIsRUFBTSxHQUFTLE9BQzVCMjJCLEVBQWdCeGIsRUFDWi9pQixFQUFhLFFBQUt3K0IsS0FFcEJDLEVBQXdCLFlBQU03MkIsRUFBTWdGLE9BQU82eEIsRUFBd0IsWUFLekUsT0FISUYsSUFBa0JyOUIsRUFBYSxRQUM3Qm85QixHQUFlRyxFQUFjNXdDLEtBQUssS0FBS21TLEVBQU9oTSxLQUFLLElBQ2xEZ00sRUFBT2hNLEtBQUtrTixFQUFPcFYsTUFBTXl5QyxJQUN6QnYrQixFQUFhLE9BQUl3K0IsRUFBYXgrQixFQUFPbFUsTUFBTSxFQUFHMHlDLEdBQWN4K0IsR0FHNUQsSUFBVSxXQUFFck4sRUFBVyxHQUFTLE9BQ3pCLFNBQVUyNEIsRUFBV3pnQixHQUNuQyxZQUFxQmxZLElBQWQyNEIsR0FBcUMsSUFBVnpnQixFQUFjLEdBQUt1ekIsRUFBTzduQyxLQUFLd0IsS0FBTXV6QixFQUFXemdCLElBR3BFdXpCLEVBR1gsQ0FHTCxTQUFlOVMsRUFBV3pnQixHQUN4QixJQUFJL1UsRUFBSXNoQixFQUFRcmYsTUFDWjJtQyxFQUF3Qi9yQyxNQUFiMjRCLE9BQXlCMzRCLEVBQVkyNEIsRUFBVTZTLEdBQzlELFlBQW9CeHJDLElBQWIrckMsRUFDSEEsRUFBU25vQyxLQUFLKzBCLEVBQVd4MUIsRUFBRytVLEdBQzVCd3pCLEVBQWM5bkMsS0FBS04sT0FBT0gsR0FBSXcxQixFQUFXemdCLElBTy9DLFNBQVVxTixFQUFRck4sR0FDaEIsSUFBSXpGLEVBQU04MkIsRUFBZ0JtQyxFQUFlbm1CLEVBQVFuZ0IsS0FBTThTLEVBQU93ekIsSUFBa0JELEdBQ2hGLEdBQUloNUIsRUFBSXRMLEtBQU0sT0FBT3NMLEVBQUk3YSxNQUV6QixJQUFJNHhDLEVBQUtscUIsRUFBU2lHLEdBQ2R2TCxFQUFJMVcsT0FBTzhCLE1BQ1hvWCxFQUFJQyxFQUFtQitzQixFQUFJNWpCLFFBRTNCb21CLEVBQWtCeEMsRUFBR3R2QixRQUNyQml2QixHQUFTSyxFQUFHM2pCLFdBQWEsSUFBTSxLQUN0QjJqQixFQUFHMWpCLFVBQVksSUFBTSxLQUNyQjBqQixFQUFHdHZCLFFBQVUsSUFBTSxLQUNuQnF4QixFQUFhLElBQU0sS0FJNUJRLEVBQVcsSUFBSXZ2QixFQUFFK3VCLEVBQWEvQixFQUFLLE9BQVNBLEVBQUc5bEIsT0FBUyxJQUFLeWxCLEdBQzdEOEMsT0FBZ0Jqc0MsSUFBVmtZLEVBQXNCb3pCLEVBQWFwekIsSUFBVSxFQUN2RCxHQUFZLElBQVIrekIsRUFBVyxNQUFPLEdBQ3RCLEdBQWlCLElBQWJqeUIsRUFBRXRqQixPQUFjLE9BQXVDLE9BQWhDeTBDLEVBQWVZLEVBQVUveEIsR0FBYyxDQUFDQSxHQUFLLEdBSXhFLElBSEEsSUFBSTJFLEVBQUksRUFDSnV0QixFQUFJLEVBQ0p4ZixFQUFJLEdBQ0R3ZixFQUFJbHlCLEVBQUV0akIsUUFBUSxDQUNuQnExQyxFQUFTM2IsVUFBWW1iLEVBQWFXLEVBQUksRUFDdEMsSUFDSXo0QixFQURBaXdCLEVBQUl5SCxFQUFlWSxFQUFVUixFQUFhdnhCLEVBQUlBLEVBQUU3Z0IsTUFBTSt5QyxJQUUxRCxHQUNRLE9BQU54SSxJQUNDandCLEVBQUkyM0IsRUFBSzd3QixFQUFTd3hCLEVBQVMzYixXQUFhbWIsRUFBYSxFQUFJVyxJQUFLbHlCLEVBQUV0akIsV0FBYWlvQixFQUU5RXV0QixFQUFJOUMsRUFBbUJwdkIsRUFBR2t5QixFQUFHRixPQUN4QixDQUVMLEdBREF0ZixFQUFFcnJCLEtBQUsyWSxFQUFFN2dCLE1BQU13bEIsRUFBR3V0QixJQUNkeGYsRUFBRWgyQixTQUFXdTFDLEVBQUssT0FBT3ZmLEVBQzdCLElBQUssSUFBSTUxQixFQUFJLEVBQUdBLEdBQUs0c0MsRUFBRWh0QyxPQUFTLEVBQUdJLElBRWpDLEdBREE0MUIsRUFBRXJyQixLQUFLcWlDLEVBQUU1c0MsSUFDTDQxQixFQUFFaDJCLFNBQVd1MUMsRUFBSyxPQUFPdmYsRUFFL0J3ZixFQUFJdnRCLEVBQUlsTCxHQUlaLE9BREFpWixFQUFFcnJCLEtBQUsyWSxFQUFFN2dCLE1BQU13bEIsSUFDUitOLFEsNEJDakliLEVBQVEsS0FDUixJQUFJcE4sRUFBVyxFQUFRLE1BQ25Cc3BCLEVBQVMsRUFBUSxNQUNqQi9xQixFQUFjLEVBQVEsTUFDdEIyUixFQUFZLFdBQ1pELEVBQVksSUFBYSxTQUV6QnJzQixFQUFTLFNBQVVvSCxHQUNyQixFQUFRLEtBQVIsQ0FBdUJzYixPQUFPcmlCLFVBQVdpc0IsRUFBV2xsQixHQUFJLElBSXRELEVBQVEsS0FBUixFQUFvQixXQUFjLE1BQXNELFFBQS9DaWxCLEVBQVUzckIsS0FBSyxDQUFFOGYsT0FBUSxJQUFLeWxCLE1BQU8sU0FDaEZqbUMsR0FBTyxXQUNMLElBQUltaEIsRUFBSS9FLEVBQVNsYSxNQUNqQixNQUFPLElBQUltUCxPQUFPOFAsRUFBRVgsT0FBUSxJQUMxQixVQUFXVyxFQUFJQSxFQUFFOGtCLE9BQVN0ckIsR0FBZXdHLGFBQWF1QixPQUFTZ2pCLEVBQU9obEMsS0FBS3lnQixRQUFLcmtCLE1BRzNFdXZCLEVBQVUzc0IsTUFBUTRzQixHQUMzQnRzQixHQUFPLFdBQ0wsT0FBT3FzQixFQUFVM3JCLEtBQUt3QixVLDRCQ3JCMUIsSUFBSXk2QixFQUFTLEVBQVEsTUFDakI5aEIsRUFBVyxFQUFRLE1BSXZCblosRUFBT25OLFFBQVUsRUFBUSxLQUFSLENBSFAsT0FHcUMsU0FBVXFuQixHQUN2RCxPQUFPLFdBQWlCLE9BQU9BLEVBQUkxWixLQUFNeVAsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLE1BQzlFLENBRURtc0MsSUFBSyxTQUFhdjBDLEdBQ2hCLE9BQU9pb0MsRUFBTzlnQixJQUFJaEIsRUFBUzNZLEtBUnJCLE9BUWlDeE4sRUFBa0IsSUFBVkEsRUFBYyxFQUFJQSxFQUFPQSxLQUV6RWlvQyxJLDRCQ1hILEVBQVEsS0FBUixDQUEwQixVQUFVLFNBQVVuTyxHQUM1QyxPQUFPLFNBQWdCOXVCLEdBQ3JCLE9BQU84dUIsRUFBV3RzQixLQUFNLElBQUssT0FBUXhDLFEsNEJDRnpDLEVBQVEsS0FBUixDQUEwQixPQUFPLFNBQVU4dUIsR0FDekMsT0FBTyxXQUNMLE9BQU9BLEVBQVd0c0IsS0FBTSxNQUFPLEdBQUksUyw0QkNGdkMsRUFBUSxLQUFSLENBQTBCLFNBQVMsU0FBVXNzQixHQUMzQyxPQUFPLFdBQ0wsT0FBT0EsRUFBV3RzQixLQUFNLFFBQVMsR0FBSSxTLDRCQ0Z6QyxFQUFRLEtBQVIsQ0FBMEIsUUFBUSxTQUFVc3NCLEdBQzFDLE9BQU8sV0FDTCxPQUFPQSxFQUFXdHNCLEtBQU0sSUFBSyxHQUFJLFMsNEJDSHJDLElBQUk2YSxFQUFVLEVBQVEsTUFDbEJtc0IsRUFBTSxFQUFRLEtBQVIsRUFBd0IsR0FDbENuc0IsRUFBUUEsRUFBUWdFLEVBQUcsU0FBVSxDQUUzQm9vQixZQUFhLFNBQXFCNTNCLEdBQ2hDLE9BQU8yM0IsRUFBSWhuQyxLQUFNcVAsTyw0QkNKckIsSUFBSXdMLEVBQVUsRUFBUSxNQUNsQjFGLEVBQVcsRUFBUSxNQUNuQi9SLEVBQVUsRUFBUSxLQUNsQjhqQyxFQUFZLFdBQ1pDLEVBQVksR0FBWSxTQUU1QnRzQixFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxFQUFJLEVBQVEsS0FBUixDQUE4Qnl2QixHQUFZLFNBQVUsQ0FDbEZFLFNBQVUsU0FBa0JoYixHQUMxQixJQUFJdlYsRUFBT3pULEVBQVFwRCxLQUFNb3NCLEVBQWM4YSxHQUNuQ0csRUFBYzUzQixVQUFVbmUsT0FBUyxFQUFJbWUsVUFBVSxRQUFLN1UsRUFDcERxTSxFQUFNa08sRUFBUzBCLEVBQUt2bEIsUUFDcEIwVyxPQUFzQnBOLElBQWhCeXNDLEVBQTRCcGdDLEVBQU0xVixLQUFLNmIsSUFBSStILEVBQVNreUIsR0FBY3BnQyxHQUN4RXFnQyxFQUFTcHBDLE9BQU9rdUIsR0FDcEIsT0FBTythLEVBQ0hBLEVBQVUzb0MsS0FBS3FZLEVBQU15d0IsRUFBUXQvQixHQUM3QjZPLEVBQUs5aUIsTUFBTWlVLEVBQU1zL0IsRUFBT2gyQyxPQUFRMFcsS0FBU3MvQixNLDRCQ2ZqRCxFQUFRLEtBQVIsQ0FBMEIsU0FBUyxTQUFVaGIsR0FDM0MsT0FBTyxXQUNMLE9BQU9BLEVBQVd0c0IsS0FBTSxLQUFNLEdBQUksUyw0QkNGdEMsRUFBUSxLQUFSLENBQTBCLGFBQWEsU0FBVXNzQixHQUMvQyxPQUFPLFNBQW1CaWIsR0FDeEIsT0FBT2piLEVBQVd0c0IsS0FBTSxPQUFRLFFBQVN1bkMsUSw0QkNGN0MsRUFBUSxLQUFSLENBQTBCLFlBQVksU0FBVWpiLEdBQzlDLE9BQU8sU0FBa0JwaUIsR0FDdkIsT0FBT29pQixFQUFXdHNCLEtBQU0sT0FBUSxPQUFRa0ssUSxlQ0o1QyxJQUFJMlEsRUFBVSxFQUFRLE1BQ2xCM0YsRUFBa0IsRUFBUSxNQUMxQm5ILEVBQWU3UCxPQUFPNlAsYUFDdEJ5NUIsRUFBaUJ0cEMsT0FBT3VwQyxjQUc1QjVzQixFQUFRQSxFQUFRakcsRUFBSWlHLEVBQVFwRCxLQUFPK3ZCLEdBQTJDLEdBQXpCQSxFQUFlbDJDLFFBQWMsU0FBVSxDQUUxRm0yQyxjQUFlLFNBQXVCeDRCLEdBS3BDLElBSkEsSUFHSW5ILEVBSEF1RixFQUFNLEdBQ05tSSxFQUFPL0YsVUFBVW5lLE9BQ2pCSSxFQUFJLEVBRUQ4akIsRUFBTzlqQixHQUFHLENBRWYsR0FEQW9XLEdBQVEySCxVQUFVL2QsS0FDZHdqQixFQUFnQnBOLEVBQU0sV0FBY0EsRUFBTSxNQUFNWSxXQUFXWixFQUFPLDhCQUN0RXVGLEVBQUlwUixLQUFLNkwsRUFBTyxNQUNaaUcsRUFBYWpHLEdBQ2JpRyxFQUF5QyxRQUExQmpHLEdBQVEsUUFBWSxJQUFjQSxFQUFPLEtBQVEsUUFFcEUsT0FBT3VGLEVBQUl6RixLQUFLLFEsNEJDbEJ0QixJQUFJaVQsRUFBVSxFQUFRLE1BQ2xCelgsRUFBVSxFQUFRLEtBQ2xCc2tDLEVBQVcsV0FFZjdzQixFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxFQUFJLEVBQVEsS0FBUixDQUE4Qml3QixHQUFXLFNBQVUsQ0FDakZ2M0IsU0FBVSxTQUFrQmljLEdBQzFCLFNBQVVocEIsRUFBUXBELEtBQU1vc0IsRUFBY3NiLEdBQ25DL3VDLFFBQVF5ekIsRUFBYzNjLFVBQVVuZSxPQUFTLEVBQUltZSxVQUFVLFFBQUs3VSxPLDRCQ1BuRSxFQUFRLEtBQVIsQ0FBMEIsV0FBVyxTQUFVMHhCLEdBQzdDLE9BQU8sV0FDTCxPQUFPQSxFQUFXdHNCLEtBQU0sSUFBSyxHQUFJLFMsNEJDSHJDLElBQUlnbkMsRUFBTSxFQUFRLEtBQVIsRUFBd0IsR0FHbEMsRUFBUSxLQUFSLENBQTBCOW9DLE9BQVEsVUFBVSxTQUFVMmIsR0FDcEQ3WixLQUFLbVosR0FBS2piLE9BQU8yYixHQUNqQjdaLEtBQUt0TCxHQUFLLEtBRVQsV0FDRCxJQUVJRixFQUZBdUosRUFBSWlDLEtBQUttWixHQUNUdEUsRUFBUTdVLEtBQUt0TCxHQUVqQixPQUFJbWdCLEdBQVM5VyxFQUFFek0sT0FBZSxDQUFFa0IsV0FBT29JLEVBQVdtSCxNQUFNLElBQ3hEdk4sRUFBUXd5QyxFQUFJanBDLEVBQUc4VyxHQUNmN1UsS0FBS3RMLElBQU1GLEVBQU1sRCxPQUNWLENBQUVrQixNQUFPZ0MsRUFBT3VOLE1BQU0sUSw0QkNiL0IsRUFBUSxLQUFSLENBQTBCLFFBQVEsU0FBVXVxQixHQUMxQyxPQUFPLFNBQWNxYixHQUNuQixPQUFPcmIsRUFBV3RzQixLQUFNLElBQUssT0FBUTJuQyxRLGVDSnpDLElBQUk5c0IsRUFBVSxFQUFRLE1BQ2xCakYsRUFBWSxFQUFRLE1BQ3BCVCxFQUFXLEVBQVEsTUFFdkIwRixFQUFRQSxFQUFRakcsRUFBRyxTQUFVLENBRTNCZ3pCLElBQUssU0FBYUMsR0FNaEIsSUFMQSxJQUFJQyxFQUFNbHlCLEVBQVVpeUIsRUFBU0QsS0FDekIzZ0MsRUFBTWtPLEVBQVMyeUIsRUFBSXgyQyxRQUNuQmtrQixFQUFPL0YsVUFBVW5lLE9BQ2pCK2IsRUFBTSxHQUNOM2IsRUFBSSxFQUNEdVYsRUFBTXZWLEdBQ1gyYixFQUFJcFIsS0FBS2lDLE9BQU80cEMsRUFBSXAyQyxPQUNoQkEsRUFBSThqQixHQUFNbkksRUFBSXBSLEtBQUtpQyxPQUFPdVIsVUFBVS9kLEtBQ3hDLE9BQU8yYixFQUFJekYsS0FBSyxRLGVDZnRCLElBQUlpVCxFQUFVLEVBQVEsTUFFdEJBLEVBQVFBLEVBQVFnRSxFQUFHLFNBQVUsQ0FFM0IyTixPQUFRLEVBQVEsUyw0QkNGbEIsRUFBUSxLQUFSLENBQTBCLFNBQVMsU0FBVUYsR0FDM0MsT0FBTyxXQUNMLE9BQU9BLEVBQVd0c0IsS0FBTSxRQUFTLEdBQUksUyw0QkNGekMsSUFBSTZhLEVBQVUsRUFBUSxNQUNsQjFGLEVBQVcsRUFBUSxNQUNuQi9SLEVBQVUsRUFBUSxLQUNsQjJrQyxFQUFjLGFBQ2RDLEVBQWMsR0FBYyxXQUVoQ250QixFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxFQUFJLEVBQVEsS0FBUixDQUE4QnN3QixHQUFjLFNBQVUsQ0FDcEZFLFdBQVksU0FBb0I3YixHQUM5QixJQUFJdlYsRUFBT3pULEVBQVFwRCxLQUFNb3NCLEVBQWMyYixHQUNuQ2x6QixFQUFRTSxFQUFTNWpCLEtBQUs2YixJQUFJcUMsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLEVBQVdpYyxFQUFLdmxCLFNBQ2hGZzJDLEVBQVNwcEMsT0FBT2t1QixHQUNwQixPQUFPNGIsRUFDSEEsRUFBWXhwQyxLQUFLcVksRUFBTXl3QixFQUFRenlCLEdBQy9CZ0MsRUFBSzlpQixNQUFNOGdCLEVBQU9BLEVBQVF5eUIsRUFBT2gyQyxVQUFZZzJDLE0sMkJDYnJELEVBQVEsS0FBUixDQUEwQixVQUFVLFNBQVVoYixHQUM1QyxPQUFPLFdBQ0wsT0FBT0EsRUFBV3RzQixLQUFNLFNBQVUsR0FBSSxTLDRCQ0YxQyxFQUFRLEtBQVIsQ0FBMEIsT0FBTyxTQUFVc3NCLEdBQ3pDLE9BQU8sV0FDTCxPQUFPQSxFQUFXdHNCLEtBQU0sTUFBTyxHQUFJLFMsNEJDRnZDLEVBQVEsS0FBUixDQUEwQixPQUFPLFNBQVVzc0IsR0FDekMsT0FBTyxXQUNMLE9BQU9BLEVBQVd0c0IsS0FBTSxNQUFPLEdBQUksUyw0QkNGdkMsRUFBUSxLQUFSLENBQTBCLFFBQVEsU0FBVTBwQixHQUMxQyxPQUFPLFdBQ0wsT0FBT0EsRUFBTTFwQixLQUFNLFEsNEJDRnZCLElBQUl0QixFQUFTLEVBQVEsTUFDakIrYSxFQUFNLEVBQVEsTUFDZGhCLEVBQWMsRUFBUSxNQUN0Qm9DLEVBQVUsRUFBUSxNQUNsQkMsRUFBVyxFQUFRLE1BQ25CMkosRUFBTyxZQUNQK1osRUFBUyxFQUFRLE1BQ2pCdFosRUFBUyxFQUFRLE1BQ2pCaEssRUFBaUIsRUFBUSxLQUN6QjRRLEVBQU0sRUFBUSxNQUNkeE0sRUFBTSxFQUFRLE1BQ2R3WixFQUFTLEVBQVEsTUFDakJvUCxFQUFZLEVBQVEsTUFDcEJDLEVBQVcsRUFBUSxLQUNuQjMwQyxFQUFVLEVBQVEsTUFDbEIwbUIsRUFBVyxFQUFRLE1BQ25CNWhCLEVBQVcsRUFBUSxNQUNuQjJjLEVBQVcsRUFBUSxNQUNuQlcsRUFBWSxFQUFRLE1BQ3BCNkgsRUFBYyxFQUFRLE1BQ3RCaEIsRUFBYSxFQUFRLE1BQ3JCMnJCLEVBQVUsRUFBUSxNQUNsQkMsRUFBVSxFQUFRLE1BQ2xCdlksRUFBUSxFQUFRLE1BQ2hCd1ksRUFBUSxFQUFRLE1BQ2hCelksRUFBTSxFQUFRLE1BQ2Q1RyxFQUFRLEVBQVEsTUFDaEJOLEVBQU9tSCxFQUFNaFosRUFDYnFCLEVBQUswWCxFQUFJL1ksRUFDVCtSLEVBQU93ZixFQUFRdnhCLEVBQ2ZoWSxFQUFVSixFQUFPSyxPQUNqQndwQyxFQUFRN3BDLEVBQU84cEMsS0FDZkMsRUFBYUYsR0FBU0EsRUFBTUcsVUFFNUJDLEVBQVNycEIsRUFBSSxXQUNiNGEsRUFBZTVhLEVBQUksZUFDbkJsQixFQUFTLEdBQUcyRCxxQkFDWjZtQixFQUFpQjFqQixFQUFPLG1CQUN4QjJqQixFQUFhM2pCLEVBQU8sV0FDcEI0akIsRUFBWTVqQixFQUFPLGNBQ25Ca0UsRUFBY3IyQixPQUFnQixVQUM5Qml0QyxFQUErQixtQkFBWGxoQyxLQUEyQndwQyxFQUFNeHhCLEVBQ3JEaXlCLEVBQVVycUMsRUFBT3FxQyxRQUVqQi9ULEdBQVUrVCxJQUFZQSxFQUFpQixZQUFNQSxFQUFpQixVQUFFQyxVQUdoRUMsRUFBZ0J4d0IsR0FBZStsQixHQUFPLFdBQ3hDLE9BRVMsR0FGRjRKLEVBQVFqd0IsRUFBRyxHQUFJLElBQUssQ0FDekJ1QixJQUFLLFdBQWMsT0FBT3ZCLEVBQUduWSxLQUFNLElBQUssQ0FBRXhOLE1BQU8sSUFBS3djLE1BQ3BEQSxLQUNELFNBQVVzRixFQUFJcGhCLEVBQUtnNUIsR0FDdEIsSUFBSWdkLEVBQVl2Z0IsRUFBS1MsRUFBYWwyQixHQUM5QmcyQyxVQUFrQjlmLEVBQVlsMkIsR0FDbENpbEIsRUFBRzdELEVBQUlwaEIsRUFBS2c1QixHQUNSZ2QsR0FBYTUwQixJQUFPOFUsR0FBYWpSLEVBQUdpUixFQUFhbDJCLEVBQUtnMkMsSUFDeEQvd0IsRUFFQTFZLEVBQU8sU0FBVW1zQixHQUNuQixJQUFJdWQsRUFBTU4sRUFBV2pkLEdBQU93YyxFQUFRdHBDLEVBQWlCLFdBRXJELE9BREFxcUMsRUFBSXB2QixHQUFLNlIsRUFDRnVkLEdBR0xDLEVBQVdwSixHQUF5QyxpQkFBcEJsaEMsRUFBUUcsU0FBdUIsU0FBVXFWLEdBQzNFLE1BQW9CLGlCQUFOQSxHQUNaLFNBQVVBLEdBQ1osT0FBT0EsYUFBY3hWLEdBR25CMGQsRUFBa0IsU0FBd0JsSSxFQUFJcGhCLEVBQUtnNUIsR0FLckQsT0FKSTVYLElBQU84VSxHQUFhNU0sRUFBZ0Jzc0IsRUFBVzUxQyxFQUFLZzVCLEdBQ3hEaFMsRUFBUzVGLEdBQ1RwaEIsRUFBTXVxQixFQUFZdnFCLEdBQUssR0FDdkJnbkIsRUFBU2dTLEdBQ0x6UyxFQUFJb3ZCLEVBQVkzMUMsSUFDYmc1QixFQUFFeGQsWUFJRCtLLEVBQUluRixFQUFJcTBCLElBQVdyMEIsRUFBR3EwQixHQUFRejFDLEtBQU1vaEIsRUFBR3EwQixHQUFRejFDLElBQU8sR0FDMURnNUIsRUFBSWtjLEVBQVFsYyxFQUFHLENBQUV4ZCxXQUFZK04sRUFBVyxHQUFHLE9BSnRDaEQsRUFBSW5GLEVBQUlxMEIsSUFBU3h3QixFQUFHN0QsRUFBSXEwQixFQUFRbHNCLEVBQVcsRUFBRyxLQUNuRG5JLEVBQUdxMEIsR0FBUXoxQyxJQUFPLEdBSVgrMUMsRUFBYzMwQixFQUFJcGhCLEVBQUtnNUIsSUFDekIvVCxFQUFHN0QsRUFBSXBoQixFQUFLZzVCLElBRW5CbWQsRUFBb0IsU0FBMEIvMEIsRUFBSXVLLEdBQ3BEM0UsRUFBUzVGLEdBS1QsSUFKQSxJQUdJcGhCLEVBSEFGLEVBQU9tMUMsRUFBU3RwQixFQUFJakosRUFBVWlKLElBQzlCbnRCLEVBQUksRUFDSjhILEVBQUl4RyxFQUFLMUIsT0FFTmtJLEVBQUk5SCxHQUFHOHFCLEVBQWdCbEksRUFBSXBoQixFQUFNRixFQUFLdEIsS0FBTW10QixFQUFFM3JCLElBQ3JELE9BQU9vaEIsR0FLTGcxQixFQUF3QixTQUE4QnAyQyxHQUN4RCxJQUFJc3BDLEVBQUlwZSxFQUFPNWYsS0FBS3dCLEtBQU05TSxFQUFNdXFCLEVBQVl2cUIsR0FBSyxJQUNqRCxRQUFJOE0sT0FBU29wQixHQUFlM1AsRUFBSW92QixFQUFZMzFDLEtBQVN1bUIsRUFBSXF2QixFQUFXNTFDLFFBQzdEc3BDLElBQU0vaUIsRUFBSXpaLEtBQU05TSxLQUFTdW1CLEVBQUlvdkIsRUFBWTMxQyxJQUFRdW1CLEVBQUl6WixLQUFNMm9DLElBQVczb0MsS0FBSzJvQyxHQUFRejFDLEtBQU9zcEMsSUFFL0ZvQyxFQUE0QixTQUFrQ3RxQixFQUFJcGhCLEdBR3BFLEdBRkFvaEIsRUFBS3NCLEVBQVV0QixHQUNmcGhCLEVBQU11cUIsRUFBWXZxQixHQUFLLEdBQ25Cb2hCLElBQU84VSxJQUFlM1AsRUFBSW92QixFQUFZMzFDLElBQVN1bUIsRUFBSXF2QixFQUFXNTFDLEdBQWxFLENBQ0EsSUFBSWc1QixFQUFJdkQsRUFBS3JVLEVBQUlwaEIsR0FFakIsT0FESWc1QixJQUFLelMsRUFBSW92QixFQUFZMzFDLElBQVV1bUIsRUFBSW5GLEVBQUlxMEIsSUFBV3IwQixFQUFHcTBCLEdBQVF6MUMsS0FBT2c1QixFQUFFeGQsWUFBYSxHQUNoRndkLElBRUxxZCxFQUF1QixTQUE2QmoxQixHQUt0RCxJQUpBLElBR0lwaEIsRUFIQW0yQixFQUFRUixFQUFLalQsRUFBVXRCLElBQ3ZCeFMsRUFBUyxHQUNUcFEsRUFBSSxFQUVEMjNCLEVBQU0vM0IsT0FBU0ksR0FDZituQixFQUFJb3ZCLEVBQVkzMUMsRUFBTW0yQixFQUFNMzNCLE9BQVN3QixHQUFPeTFDLEdBQVV6MUMsR0FBT3V4QixHQUFNM2lCLEVBQU83RixLQUFLL0ksR0FDcEYsT0FBTzRPLEdBRVAwbkMsR0FBeUIsU0FBK0JsMUIsR0FNMUQsSUFMQSxJQUlJcGhCLEVBSkF1MkMsRUFBUW4xQixJQUFPOFUsRUFDZkMsRUFBUVIsRUFBSzRnQixFQUFRWCxFQUFZbHpCLEVBQVV0QixJQUMzQ3hTLEVBQVMsR0FDVHBRLEVBQUksRUFFRDIzQixFQUFNLzNCLE9BQVNJLElBQ2hCK25CLEVBQUlvdkIsRUFBWTMxQyxFQUFNbTJCLEVBQU0zM0IsT0FBVSszQyxJQUFRaHdCLEVBQUkyUCxFQUFhbDJCLElBQWM0TyxFQUFPN0YsS0FBSzRzQyxFQUFXMzFDLElBQ3hHLE9BQU80TyxHQUlOaytCLElBWUhsbEIsR0FYQWhjLEVBQVUsV0FDUixHQUFJa0IsZ0JBQWdCbEIsRUFBUyxNQUFNaUgsVUFBVSxnQ0FDN0MsSUFBSTZsQixFQUFNRSxFQUFJcmMsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLEdBQ2hEazVCLEVBQU8sU0FBVXRoQyxHQUNmd04sT0FBU29wQixHQUFhMEssRUFBS3QxQixLQUFLc3FDLEVBQVd0MkMsR0FDM0NpbkIsRUFBSXpaLEtBQU0yb0MsSUFBV2x2QixFQUFJelosS0FBSzJvQyxHQUFTL2MsS0FBTTVyQixLQUFLMm9DLEdBQVEvYyxJQUFPLEdBQ3JFcWQsRUFBY2pwQyxLQUFNNHJCLEVBQUtuUCxFQUFXLEVBQUdqcUIsS0FHekMsT0FESWltQixHQUFldWMsR0FBUWlVLEVBQWM3ZixFQUFhd0MsRUFBSyxDQUFFM3RCLGNBQWMsRUFBTTBWLElBQUttZ0IsSUFDL0VyMEIsRUFBS21zQixLQUVZLFVBQUcsWUFBWSxXQUN2QyxPQUFPNXJCLEtBQUsrWixNQUdkK1YsRUFBTWhaLEVBQUk4bkIsRUFDVi9PLEVBQUkvWSxFQUFJMEYsRUFDUixVQUE4QjZyQixFQUFRdnhCLEVBQUl5eUIsRUFDMUMsVUFBNkJELEVBQzdCaEIsRUFBTXh4QixFQUFJMHlCLEdBRU4vd0IsSUFBZ0IsRUFBUSxPQUMxQnFDLEVBQVNzTyxFQUFhLHVCQUF3QmtnQixHQUF1QixHQUd2RXhRLEVBQU9oaUIsRUFBSSxTQUFVdFosR0FDbkIsT0FBT2lDLEVBQUs2ZixFQUFJOWhCLE1BSXBCcWQsRUFBUUEsRUFBUXNCLEVBQUl0QixFQUFRdUIsRUFBSXZCLEVBQVFwRCxHQUFLdW9CLEVBQVksQ0FBRWpoQyxPQUFRRCxJQUVuRSxJQUFLLElBQUk0cUMsR0FBYSxpSEFHcEJwckMsTUFBTSxLQUFNekosR0FBSSxFQUFHNjBDLEdBQVdwNEMsT0FBU3VELElBQUd5cUIsRUFBSW9xQixHQUFXNzBDLE9BRTNELElBQUssSUFBSTgwQyxHQUFtQjFnQixFQUFNM0osRUFBSTVFLE9BQVFuaEIsR0FBSSxFQUFHb3dDLEdBQWlCcjRDLE9BQVNpSSxJQUFJMnVDLEVBQVV5QixHQUFpQnB3QyxPQUU5R3NoQixFQUFRQSxFQUFRakcsRUFBSWlHLEVBQVFwRCxHQUFLdW9CLEVBQVksU0FBVSxDQUVyRCxJQUFPLFNBQVU5c0MsR0FDZixPQUFPdW1CLEVBQUltdkIsRUFBZ0IxMUMsR0FBTyxJQUM5QjAxQyxFQUFlMTFDLEdBQ2YwMUMsRUFBZTExQyxHQUFPNEwsRUFBUTVMLElBR3BDMDJDLE9BQVEsU0FBZ0JULEdBQ3RCLElBQUtDLEVBQVNELEdBQU0sTUFBTXBqQyxVQUFVb2pDLEVBQU0scUJBQzFDLElBQUssSUFBSWoyQyxLQUFPMDFDLEVBQWdCLEdBQUlBLEVBQWUxMUMsS0FBU2kyQyxFQUFLLE9BQU9qMkMsR0FFMUUyMkMsVUFBVyxXQUFjN1UsR0FBUyxHQUNsQzhVLFVBQVcsV0FBYzlVLEdBQVMsS0FHcENuYSxFQUFRQSxFQUFRakcsRUFBSWlHLEVBQVFwRCxHQUFLdW9CLEVBQVksU0FBVSxDQUVyRHgvQixPQS9GWSxTQUFnQjhULEVBQUl1SyxHQUNoQyxZQUFhamtCLElBQU5pa0IsRUFBa0J1cEIsRUFBUTl6QixHQUFNKzBCLEVBQWtCakIsRUFBUTl6QixHQUFLdUssSUFnR3RFOW9CLGVBQWdCeW1CLEVBRWhCZ00saUJBQWtCNmdCLEVBRWxCemdCLHlCQUEwQmdXLEVBRTFCN1Ysb0JBQXFCd2dCLEVBRXJCcGdCLHNCQUF1QnFnQixLQUt6QixJQUFJTyxHQUFzQnZMLEdBQU8sV0FBYzhKLEVBQU14eEIsRUFBRSxNQUV2RCtELEVBQVFBLEVBQVFqRyxFQUFJaUcsRUFBUXBELEVBQUlzeUIsR0FBcUIsU0FBVSxDQUM3RDVnQixzQkFBdUIsU0FBK0I3VSxHQUNwRCxPQUFPZzBCLEVBQU14eEIsRUFBRTdCLEVBQVNYLE9BSzVCaTBCLEdBQVMxdEIsRUFBUUEsRUFBUWpHLEVBQUlpRyxFQUFRcEQsSUFBTXVvQixHQUFjeEIsR0FBTyxXQUM5RCxJQUFJNXBCLEVBQUk5VixJQUlSLE1BQTBCLFVBQW5CMnBDLEVBQVcsQ0FBQzd6QixLQUEyQyxNQUF4QjZ6QixFQUFXLENBQUV6NUIsRUFBRzRGLEtBQXlDLE1BQXpCNnpCLEVBQVcxMUMsT0FBTzZoQixRQUNyRixPQUFRLENBQ1g4ekIsVUFBVyxTQUFtQnAwQixHQUk1QixJQUhBLElBRUk2VyxFQUFVNmUsRUFGVnR5QixFQUFPLENBQUNwRCxHQUNSNWlCLEVBQUksRUFFRCtkLFVBQVVuZSxPQUFTSSxHQUFHZ21CLEVBQUt6YixLQUFLd1QsVUFBVS9kLE1BRWpELEdBREFzNEMsRUFBWTdlLEVBQVd6VCxFQUFLLElBQ3ZCcGYsRUFBUzZ5QixTQUFvQnZ3QixJQUFQMFosS0FBb0I4MEIsRUFBUzkwQixHQU14RCxPQUxLOWdCLEVBQVEyM0IsS0FBV0EsRUFBVyxTQUFVajRCLEVBQUtWLEdBRWhELEdBRHdCLG1CQUFidzNDLElBQXlCeDNDLEVBQVF3M0MsRUFBVXhyQyxLQUFLd0IsS0FBTTlNLEVBQUtWLEtBQ2pFNDJDLEVBQVM1MkMsR0FBUSxPQUFPQSxJQUUvQmtsQixFQUFLLEdBQUt5VCxFQUNIc2QsRUFBV3o2QixNQUFNdTZCLEVBQU83d0IsTUFLbkM1WSxFQUFpQixVQUFFbzdCLElBQWlCLEVBQVEsSUFBUixDQUFtQnA3QixFQUFpQixVQUFHbzdCLEVBQWNwN0IsRUFBaUIsVUFBRXN3QixTQUU1R2xVLEVBQWVwYyxFQUFTLFVBRXhCb2MsRUFBZTNwQixLQUFNLFFBQVEsR0FFN0IycEIsRUFBZXhjLEVBQU84cEMsS0FBTSxRQUFRLEksNEJDcFBwQyxJQUFJM3RCLEVBQVUsRUFBUSxNQUNsQndVLEVBQVMsRUFBUSxNQUNqQmxrQixFQUFTLEVBQVEsTUFDakIrTyxFQUFXLEVBQVEsTUFDbkJoRixFQUFrQixFQUFRLE1BQzFCQyxFQUFXLEVBQVEsTUFDbkI3YyxFQUFXLEVBQVEsTUFDbkI4YixFQUFjLG9CQUNkaUQsRUFBcUIsRUFBUSxNQUM3QjZZLEVBQWUva0IsRUFBT2lKLFlBQ3RCK2IsRUFBWWhsQixFQUFPaWxCLFNBQ25CNlosRUFBVTVhLEVBQU9zRixLQUFPdmdCLEVBQVlDLE9BQ3BDd2YsRUFBUzNELEVBQWEveEIsVUFBVXBLLE1BQ2hDKzlCLEVBQU96QyxFQUFPeUMsS0FDZC9CLEVBQWUsY0FFbkJsVixFQUFRQSxFQUFRc0IsRUFBSXRCLEVBQVF1QixFQUFJdkIsRUFBUXBELEdBQUtyRCxJQUFnQjhiLEdBQWUsQ0FBRTliLFlBQWE4YixJQUUzRnJWLEVBQVFBLEVBQVFqRyxFQUFJaUcsRUFBUXBELEdBQUs0WCxFQUFPc0MsT0FBUTVCLEVBQWMsQ0FFNUQxYixPQUFRLFNBQWdCQyxHQUN0QixPQUFPMjFCLEdBQVdBLEVBQVEzMUIsSUFBT2hjLEVBQVNnYyxJQUFPd2QsS0FBUXhkLEtBSTdEdUcsRUFBUUEsRUFBUWdFLEVBQUloRSxFQUFRbUUsRUFBSW5FLEVBQVFwRCxFQUFJLEVBQVEsS0FBUixFQUFvQixXQUM5RCxPQUFRLElBQUl5WSxFQUFhLEdBQUduOEIsTUFBTSxPQUFHNkcsR0FBV3lMLGNBQzlDMHBCLEVBQWMsQ0FFaEJoOEIsTUFBTyxTQUFlZ1UsRUFBT0MsR0FDM0IsUUFBZXBOLElBQVhpNUIsUUFBZ0NqNUIsSUFBUm9OLEVBQW1CLE9BQU82ckIsRUFBT3IxQixLQUFLMGIsRUFBU2xhLE1BQU8rSCxHQVFsRixJQVBBLElBQUlkLEVBQU1pVCxFQUFTbGEsTUFBTXFHLFdBQ3JCNjJCLEVBQVFob0IsRUFBZ0JuTixFQUFPZCxHQUMvQmlqQyxFQUFNaDFCLE9BQXdCdGEsSUFBUm9OLEVBQW9CZixFQUFNZSxFQUFLZixHQUNyRG5GLEVBQVMsSUFBS3VWLEVBQW1CclgsS0FBTWt3QixHQUE5QixDQUE2Qy9hLEVBQVMrMEIsRUFBTWhOLElBQ3JFaU4sRUFBUSxJQUFJaGEsRUFBVW53QixNQUN0Qm9xQyxFQUFRLElBQUlqYSxFQUFVcnVCLEdBQ3RCK1MsRUFBUSxFQUNMcW9CLEVBQVFnTixHQUNiRSxFQUFNelMsU0FBUzlpQixJQUFTczFCLEVBQU10UyxTQUFTcUYsTUFDdkMsT0FBT3A3QixLQUliLEVBQVEsS0FBUixDQUEwQml1QixJLGVDN0MxQixJQUFJbFYsRUFBVSxFQUFRLE1BQ3RCQSxFQUFRQSxFQUFRc0IsRUFBSXRCLEVBQVF1QixFQUFJdkIsRUFBUXBELEdBQUssWUFBeUIsQ0FDcEUyWSxTQUFVLG9CLGVDRlosRUFBUSxLQUFSLENBQTBCLFVBQVcsR0FBRyxTQUFVaWEsR0FDaEQsT0FBTyxTQUFzQnRnQyxFQUFNZCxFQUFZM1gsR0FDN0MsT0FBTys0QyxFQUFLcnFDLEtBQU0rSixFQUFNZCxFQUFZM1gsUSxlQ0Z4QyxFQUFRLEtBQVIsQ0FBMEIsVUFBVyxHQUFHLFNBQVUrNEMsR0FDaEQsT0FBTyxTQUFzQnRnQyxFQUFNZCxFQUFZM1gsR0FDN0MsT0FBTys0QyxFQUFLcnFDLEtBQU0rSixFQUFNZCxFQUFZM1gsUSxlQ0Z4QyxFQUFRLEtBQVIsQ0FBMEIsUUFBUyxHQUFHLFNBQVUrNEMsR0FDOUMsT0FBTyxTQUFvQnRnQyxFQUFNZCxFQUFZM1gsR0FDM0MsT0FBTys0QyxFQUFLcnFDLEtBQU0rSixFQUFNZCxFQUFZM1gsUSxlQ0Z4QyxFQUFRLEtBQVIsQ0FBMEIsUUFBUyxHQUFHLFNBQVUrNEMsR0FDOUMsT0FBTyxTQUFvQnRnQyxFQUFNZCxFQUFZM1gsR0FDM0MsT0FBTys0QyxFQUFLcnFDLEtBQU0rSixFQUFNZCxFQUFZM1gsUSxlQ0Z4QyxFQUFRLEtBQVIsQ0FBMEIsT0FBUSxHQUFHLFNBQVUrNEMsR0FDN0MsT0FBTyxTQUFtQnRnQyxFQUFNZCxFQUFZM1gsR0FDMUMsT0FBTys0QyxFQUFLcnFDLEtBQU0rSixFQUFNZCxFQUFZM1gsUSxlQ0Z4QyxFQUFRLEtBQVIsQ0FBMEIsU0FBVSxHQUFHLFNBQVUrNEMsR0FDL0MsT0FBTyxTQUFxQnRnQyxFQUFNZCxFQUFZM1gsR0FDNUMsT0FBTys0QyxFQUFLcnFDLEtBQU0rSixFQUFNZCxFQUFZM1gsUSxlQ0Z4QyxFQUFRLEtBQVIsQ0FBMEIsU0FBVSxHQUFHLFNBQVUrNEMsR0FDL0MsT0FBTyxTQUFxQnRnQyxFQUFNZCxFQUFZM1gsR0FDNUMsT0FBTys0QyxFQUFLcnFDLEtBQU0rSixFQUFNZCxFQUFZM1gsUSxlQ0Z4QyxFQUFRLEtBQVIsQ0FBMEIsUUFBUyxHQUFHLFNBQVUrNEMsR0FDOUMsT0FBTyxTQUFvQnRnQyxFQUFNZCxFQUFZM1gsR0FDM0MsT0FBTys0QyxFQUFLcnFDLEtBQU0rSixFQUFNZCxFQUFZM1gsUSxlQ0Z4QyxFQUFRLEtBQVIsQ0FBMEIsUUFBUyxHQUFHLFNBQVUrNEMsR0FDOUMsT0FBTyxTQUEyQnRnQyxFQUFNZCxFQUFZM1gsR0FDbEQsT0FBTys0QyxFQUFLcnFDLEtBQU0rSixFQUFNZCxFQUFZM1gsT0FFckMsSSwyQkNISCxJQWNJZzVDLEVBZEE1ckMsRUFBUyxFQUFRLE1BQ2pCNnJDLEVBQU8sRUFBUSxLQUFSLENBQTRCLEdBQ25DenZCLEVBQVcsRUFBUSxNQUNuQkMsRUFBTyxFQUFRLE1BQ2ZzTSxFQUFTLEVBQVEsTUFDakJtakIsRUFBTyxFQUFRLE1BQ2ZseUMsRUFBVyxFQUFRLE1BQ25CcWdCLEVBQVcsRUFBUSxNQUNuQjh4QixFQUFrQixFQUFRLE1BQzFCQyxHQUFXaHNDLEVBQU9pc0MsZUFBaUIsa0JBQW1CanNDLEVBQ3REa3NDLEVBQVcsVUFDWDN3QixFQUFVYyxFQUFLZCxRQUNmMEssRUFBZTV4QixPQUFPNHhCLGFBQ3RCcEssRUFBc0Jpd0IsRUFBSzV2QixRQUczQjVCLEVBQVUsU0FBVVUsR0FDdEIsT0FBTyxXQUNMLE9BQU9BLEVBQUkxWixLQUFNeVAsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLEtBSXZEd2dCLEVBQVUsQ0FFWjFCLElBQUssU0FBYXhtQixHQUNoQixHQUFJb0YsRUFBU3BGLEdBQU0sQ0FDakIsSUFBSTZXLEVBQU9rUSxFQUFRL21CLEdBQ25CLE9BQWEsSUFBVDZXLEVBQXNCd1EsRUFBb0I1QixFQUFTM1ksS0FBTTRxQyxJQUFXbHhCLElBQUl4bUIsR0FDckU2VyxFQUFPQSxFQUFLL0osS0FBS3RMLFNBQU1rRyxJQUlsQytZLElBQUssU0FBYXpnQixFQUFLVixHQUNyQixPQUFPZzRDLEVBQUs3d0IsSUFBSWhCLEVBQVMzWSxLQUFNNHFDLEdBQVcxM0MsRUFBS1YsS0FLL0NxNEMsRUFBV3JyQyxFQUFPbk4sUUFBVSxFQUFRLEtBQVIsQ0FBeUJ1NEMsRUFBVTV4QixFQUFTb0MsRUFBU292QixHQUFNLEdBQU0sR0FHN0ZDLEdBQW1CQyxJQUVyQnJqQixHQURBaWpCLEVBQWNFLEVBQUt6eEIsZUFBZUMsRUFBUzR4QixJQUN4QnpzQyxVQUFXaWQsR0FDOUJMLEVBQUttQixNQUFPLEVBQ1pxdUIsRUFBSyxDQUFDLFNBQVUsTUFBTyxNQUFPLFFBQVEsU0FBVXIzQyxHQUM5QyxJQUFJc29CLEVBQVFxdkIsRUFBUzFzQyxVQUNqQndFLEVBQVM2WSxFQUFNdG9CLEdBQ25CNG5CLEVBQVNVLEVBQU90b0IsR0FBSyxTQUFVOGIsRUFBR2pFLEdBRWhDLEdBQUl6UyxFQUFTMFcsS0FBTzJWLEVBQWEzVixHQUFJLENBQzlCaFAsS0FBSzhZLEtBQUk5WSxLQUFLOFksR0FBSyxJQUFJd3hCLEdBQzVCLElBQUl4b0MsRUFBUzlCLEtBQUs4WSxHQUFHNWxCLEdBQUs4YixFQUFHakUsR0FDN0IsTUFBYyxPQUFQN1gsRUFBZThNLEtBQU84QixFQUU3QixPQUFPYSxFQUFPbkUsS0FBS3dCLEtBQU1nUCxFQUFHakUsVyw0QkN2RHBDLElBQUl5L0IsRUFBTyxFQUFRLE1BQ2Y3eEIsRUFBVyxFQUFRLE1BQ25CbXlCLEVBQVcsVUFHZixFQUFRLEtBQVIsQ0FBeUJBLEdBQVUsU0FBVXB4QixHQUMzQyxPQUFPLFdBQXFCLE9BQU9BLEVBQUkxWixLQUFNeVAsVUFBVW5lLE9BQVMsRUFBSW1lLFVBQVUsUUFBSzdVLE1BQ2xGLENBRURtc0MsSUFBSyxTQUFhdjBDLEdBQ2hCLE9BQU9nNEMsRUFBSzd3QixJQUFJaEIsRUFBUzNZLEtBQU04cUMsR0FBV3Q0QyxHQUFPLEtBRWxEZzRDLEdBQU0sR0FBTyxJLDRCQ1hoQixJQUFJM3ZCLEVBQVUsRUFBUSxNQUNsQmdHLEVBQW1CLEVBQVEsTUFDM0I1TCxFQUFXLEVBQVEsTUFDbkJFLEVBQVcsRUFBUSxNQUNuQjRCLEVBQVksRUFBUSxNQUNwQmcwQixFQUFxQixFQUFRLE1BRWpDbHdCLEVBQVFBLEVBQVFnRSxFQUFHLFFBQVMsQ0FDMUJtc0IsUUFBUyxTQUFpQnAwQixHQUN4QixJQUNJa0ssRUFBV3dHLEVBRFh2cEIsRUFBSWtYLEVBQVNqVixNQU1qQixPQUpBK1csRUFBVUgsR0FDVmtLLEVBQVkzTCxFQUFTcFgsRUFBRXpNLFFBQ3ZCZzJCLEVBQUl5akIsRUFBbUJodEMsRUFBRyxHQUMxQjhpQixFQUFpQnlHLEVBQUd2cEIsRUFBR0EsRUFBRytpQixFQUFXLEVBQUcsRUFBR2xLLEVBQVluSCxVQUFVLElBQzFENlgsS0FJWCxFQUFRLEtBQVIsQ0FBaUMsWSwwQkNuQmpDLElBQUl6TSxFQUFVLEVBQVEsTUFDbEJnRyxFQUFtQixFQUFRLE1BQzNCNUwsRUFBVyxFQUFRLE1BQ25CRSxFQUFXLEVBQVEsTUFDbkJnWCxFQUFZLEVBQVEsTUFDcEI0ZSxFQUFxQixFQUFRLE1BRWpDbHdCLEVBQVFBLEVBQVFnRSxFQUFHLFFBQVMsQ0FDMUJvc0IsUUFBUyxXQUNQLElBQUlDLEVBQVd6N0IsVUFBVSxHQUNyQjFSLEVBQUlrWCxFQUFTalYsTUFDYjhnQixFQUFZM0wsRUFBU3BYLEVBQUV6TSxRQUN2QmcyQixFQUFJeWpCLEVBQW1CaHRDLEVBQUcsR0FFOUIsT0FEQThpQixFQUFpQnlHLEVBQUd2cEIsRUFBR0EsRUFBRytpQixFQUFXLE9BQWdCbG1CLElBQWJzd0MsRUFBeUIsRUFBSS9lLEVBQVUrZSxJQUN4RTVqQixLQUlYLEVBQVEsS0FBUixDQUFpQyxZLDRCQ2xCakMsSUFBSXpNLEVBQVUsRUFBUSxNQUNsQnN3QixFQUFZLEVBQVEsS0FBUixFQUE2QixHQUU3Q3R3QixFQUFRQSxFQUFRZ0UsRUFBRyxRQUFTLENBQzFCMU8sU0FBVSxTQUFrQjRGLEdBQzFCLE9BQU9vMUIsRUFBVW5yQyxLQUFNK1YsRUFBSXRHLFVBQVVuZSxPQUFTLEVBQUltZSxVQUFVLFFBQUs3VSxNQUlyRSxFQUFRLEtBQVIsQ0FBaUMsYSxlQ1ZqQyxJQUFJaWdCLEVBQVUsRUFBUSxNQUNsQjBrQixFQUFZLEVBQVEsR0FBUixHQUNaNTVCLEVBQVUsZ0JBQ1ZvZ0IsRUFBdUMsV0FBOUIsRUFBUSxLQUFSLENBQWtCcGdCLEdBRS9Ca1YsRUFBUUEsRUFBUXNCLEVBQUcsQ0FDakJpdkIsS0FBTSxTQUFjbG1DLEdBQ2xCLElBQUlVLEVBQVNtZ0IsR0FBVXBnQixFQUFRQyxPQUMvQjI1QixFQUFVMzVCLEVBQVNBLEVBQU9uSCxLQUFLeUcsR0FBTUEsTyxjQ1J6QyxJQUFJMlYsRUFBVSxFQUFRLE1BQ2xCdEcsRUFBTSxFQUFRLE1BRWxCc0csRUFBUUEsRUFBUWpHLEVBQUcsUUFBUyxDQUMxQnkyQixRQUFTLFNBQWlCLzJCLEdBQ3hCLE1BQW1CLFVBQVpDLEVBQUlELE8sZUNMZixJQUFJdUcsRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRc0IsRUFBRyxDQUFFemQsT0FBUSxFQUFRLFMsZUNGckMsRUFBUSxLQUFSLENBQWtDLFEsZUNBbEMsRUFBUSxLQUFSLENBQWdDLFEsZUNBaEMsSUFBSW1jLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWdFLEVBQUloRSxFQUFRb0UsRUFBRyxNQUFPLENBQUU1TyxPQUFRLEVBQVEsS0FBUixDQUFpQyxVLGVDRmpGLElBQUl3SyxFQUFVLEVBQVEsTUFFdEJBLEVBQVFBLEVBQVFqRyxFQUFHLE9BQVEsQ0FDekIwMkIsTUFBTyxTQUFlcjhCLEVBQUdzOEIsRUFBT0MsR0FDOUIsT0FBT2o2QyxLQUFLNmIsSUFBSW8rQixFQUFPajZDLEtBQUtxZSxJQUFJMjdCLEVBQU90OEIsUSxlQ0ozQyxJQUFJNEwsRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRakcsRUFBRyxPQUFRLENBQUU2MkIsWUFBYWw2QyxLQUFLYSxHQUFLLE8sZUNGcEQsSUFBSXlvQixFQUFVLEVBQVEsTUFDbEI2d0IsRUFBYyxJQUFNbjZDLEtBQUthLEdBRTdCeW9CLEVBQVFBLEVBQVFqRyxFQUFHLE9BQVEsQ0FDekJ6ZSxRQUFTLFNBQWlCZCxHQUN4QixPQUFPQSxFQUFVcTJDLE0sZUNMckIsSUFBSTd3QixFQUFVLEVBQVEsTUFDbEJ1SixFQUFRLEVBQVEsTUFDaEJMLEVBQVMsRUFBUSxNQUVyQmxKLEVBQVFBLEVBQVFqRyxFQUFHLE9BQVEsQ0FDekIrMkIsT0FBUSxTQUFnQjE4QixFQUFHb1YsRUFBT0MsRUFBUUMsRUFBUUMsR0FDaEQsT0FBT1QsRUFBT0ssRUFBTW5WLEVBQUdvVixFQUFPQyxFQUFRQyxFQUFRQyxRLGVDTmxELElBQUkzSixFQUFVLEVBQVEsTUFFdEJBLEVBQVFBLEVBQVFqRyxFQUFHLE9BQVEsQ0FDekJnM0IsTUFBTyxTQUFlQyxFQUFJQyxFQUFJQyxFQUFJQyxHQUNoQyxJQUFJQyxFQUFNSixJQUFPLEVBRWJLLEVBQU1ILElBQU8sRUFDakIsT0FGVUQsSUFBTyxJQUVIRSxJQUFPLEtBQU9DLEVBQU1DLEdBQU9ELEVBQU1DLEtBQVNELEVBQU1DLElBQVEsTUFBUSxJQUFNLE0sZUNQeEYsSUFBSXJ4QixFQUFVLEVBQVEsTUFFdEJBLEVBQVFBLEVBQVFqRyxFQUFHLE9BQVEsQ0FDekJ1M0IsTUFBTyxTQUFlQyxFQUFHNXlCLEdBQ3ZCLElBQUl1aUIsRUFBUyxNQUNUc1EsR0FBTUQsRUFDTkUsR0FBTTl5QixFQUNOK3lCLEVBQUtGLEVBQUt0USxFQUNWeVEsRUFBS0YsRUFBS3ZRLEVBQ1YwUSxFQUFLSixHQUFNLEdBQ1hLLEVBQUtKLEdBQU0sR0FDWG5PLEdBQUtzTyxFQUFLRCxJQUFPLElBQU1ELEVBQUtDLElBQU8sSUFDdkMsT0FBT0MsRUFBS0MsR0FBTXZPLEdBQUssTUFBUW9PLEVBQUtHLElBQU8sSUFBTXZPLEVBQUlwQyxJQUFXLFEsZUNacEUsSUFBSWxoQixFQUFVLEVBQVEsTUFFdEJBLEVBQVFBLEVBQVFqRyxFQUFHLE9BQVEsQ0FDekIrM0IsTUFBTyxTQUFlZCxFQUFJQyxFQUFJQyxFQUFJQyxHQUNoQyxJQUFJQyxFQUFNSixJQUFPLEVBRWJLLEVBQU1ILElBQU8sRUFDakIsT0FGVUQsSUFBTyxJQUVIRSxJQUFPLE1BQVFDLEVBQU1DLElBQVFELEVBQU1DLEdBQU9ELEVBQU1DLElBQVEsS0FBTyxJQUFNLE0sZUNQdkYsSUFBSXJ4QixFQUFVLEVBQVEsTUFFdEJBLEVBQVFBLEVBQVFqRyxFQUFHLE9BQVEsQ0FBRTgyQixZQUFhLElBQU1uNkMsS0FBS2EsTSxlQ0ZyRCxJQUFJeW9CLEVBQVUsRUFBUSxNQUNsQjR3QixFQUFjbDZDLEtBQUthLEdBQUssSUFFNUJ5b0IsRUFBUUEsRUFBUWpHLEVBQUcsT0FBUSxDQUN6QnZmLFFBQVMsU0FBaUJjLEdBQ3hCLE9BQU9BLEVBQVVzMUMsTSxlQ0xyQixJQUFJNXdCLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUcsT0FBUSxDQUFFd1AsTUFBTyxFQUFRLFMsZUNGNUMsSUFBSXZKLEVBQVUsRUFBUSxNQUV0QkEsRUFBUUEsRUFBUWpHLEVBQUcsT0FBUSxDQUFFZzRCLFFBQVMsU0FBaUIzOUIsR0FFckQsT0FBUUEsR0FBS0EsSUFBTUEsRUFBSUEsRUFBUyxHQUFMQSxFQUFTLEVBQUlBLEdBQUs0RSxJQUFXNUUsRUFBSSxNLGVDSjlELElBQUk0TCxFQUFVLEVBQVEsTUFFdEJBLEVBQVFBLEVBQVFqRyxFQUFHLE9BQVEsQ0FDekJpNEIsTUFBTyxTQUFlVCxFQUFHNXlCLEdBQ3ZCLElBQUl1aUIsRUFBUyxNQUNUc1EsR0FBTUQsRUFDTkUsR0FBTTl5QixFQUNOK3lCLEVBQUtGLEVBQUt0USxFQUNWeVEsRUFBS0YsRUFBS3ZRLEVBQ1YwUSxFQUFLSixJQUFPLEdBQ1pLLEVBQUtKLElBQU8sR0FDWm5PLEdBQUtzTyxFQUFLRCxJQUFPLElBQU1ELEVBQUtDLElBQU8sSUFDdkMsT0FBT0MsRUFBS0MsR0FBTXZPLElBQU0sTUFBUW9PLEVBQUtHLElBQU8sSUFBTXZPLEVBQUlwQyxLQUFZLFEsNEJDWnRFLElBQUlsaEIsRUFBVSxFQUFRLE1BQ2xCNUYsRUFBVyxFQUFRLE1BQ25COEIsRUFBWSxFQUFRLE1BQ3BCeUYsRUFBa0IsRUFBUSxNQUc5QixFQUFRLE9BQXFCM0IsRUFBUUEsRUFBUWdFLEVBQUksRUFBUSxNQUF5QixTQUFVLENBQzFGaXVCLGlCQUFrQixTQUEwQmp1QixFQUFHa1csR0FDN0N2WSxFQUFnQjFGLEVBQUU3QixFQUFTalYsTUFBTzZlLEVBQUcsQ0FBRW5GLElBQUszQyxFQUFVZ2UsR0FBU3JtQixZQUFZLEVBQU16USxjQUFjLFEsNEJDUm5HLElBQUk0YyxFQUFVLEVBQVEsTUFDbEI1RixFQUFXLEVBQVEsTUFDbkI4QixFQUFZLEVBQVEsTUFDcEJ5RixFQUFrQixFQUFRLE1BRzlCLEVBQVEsT0FBcUIzQixFQUFRQSxFQUFRZ0UsRUFBSSxFQUFRLE1BQXlCLFNBQVUsQ0FDMUY2SixpQkFBa0IsU0FBMEI3SixFQUFHbVcsR0FDN0N4WSxFQUFnQjFGLEVBQUU3QixFQUFTalYsTUFBTzZlLEVBQUcsQ0FBRWxMLElBQUtvRCxFQUFVaWUsR0FBU3RtQixZQUFZLEVBQU16USxjQUFjLFEsZUNSbkcsSUFBSTRjLEVBQVUsRUFBUSxNQUNsQnFJLEVBQVcsRUFBUSxLQUFSLEVBQThCLEdBRTdDckksRUFBUUEsRUFBUWpHLEVBQUcsU0FBVSxDQUMzQitHLFFBQVMsU0FBaUJySCxHQUN4QixPQUFPNE8sRUFBUzVPLE8sY0NMcEIsSUFBSXVHLEVBQVUsRUFBUSxNQUNsQjJPLEVBQVUsRUFBUSxNQUNsQjVULEVBQVksRUFBUSxNQUNwQitTLEVBQU8sRUFBUSxNQUNmNlEsRUFBaUIsRUFBUSxNQUU3QjNlLEVBQVFBLEVBQVFqRyxFQUFHLFNBQVUsQ0FDM0JtNEIsMEJBQTJCLFNBQW1DOXFDLEdBTzVELElBTkEsSUFLSS9PLEVBQUtraEMsRUFMTHIyQixFQUFJNlgsRUFBVTNULEdBQ2QrcUMsRUFBVXJrQixFQUFLN1IsRUFDZjlqQixFQUFPdzJCLEVBQVF6ckIsR0FDZitELEVBQVMsR0FDVHBRLEVBQUksRUFFRHNCLEVBQUsxQixPQUFTSSxRQUVOa0osS0FEYnc1QixFQUFPNFksRUFBUWp2QyxFQUFHN0ssRUFBTUYsRUFBS3RCLFFBQ0w4bkMsRUFBZTEzQixFQUFRNU8sRUFBS2toQyxHQUV0RCxPQUFPdHlCLE0sNEJDbEJYLElBQUkrWSxFQUFVLEVBQVEsTUFDbEI1RixFQUFXLEVBQVEsTUFDbkJ3SSxFQUFjLEVBQVEsTUFDdEJ2ZCxFQUFpQixFQUFRLE1BQ3pCMG9CLEVBQTJCLFVBRy9CLEVBQVEsT0FBcUIvTixFQUFRQSxFQUFRZ0UsRUFBSSxFQUFRLE1BQXlCLFNBQVUsQ0FDMUZvdUIsaUJBQWtCLFNBQTBCcHVCLEdBQzFDLElBRUlxTixFQUZBbnVCLEVBQUlrWCxFQUFTalYsTUFDYnVuQixFQUFJOUosRUFBWW9CLEdBQUcsR0FFdkIsR0FDRSxHQUFJcU4sRUFBSXRELEVBQXlCN3FCLEVBQUd3cEIsR0FBSSxPQUFPMkUsRUFBRXhTLFVBQzFDM2IsRUFBSW1DLEVBQWVuQyxRLDRCQ2RoQyxJQUFJOGMsRUFBVSxFQUFRLE1BQ2xCNUYsRUFBVyxFQUFRLE1BQ25Cd0ksRUFBYyxFQUFRLE1BQ3RCdmQsRUFBaUIsRUFBUSxNQUN6QjBvQixFQUEyQixVQUcvQixFQUFRLE9BQXFCL04sRUFBUUEsRUFBUWdFLEVBQUksRUFBUSxNQUF5QixTQUFVLENBQzFGcXVCLGlCQUFrQixTQUEwQnJ1QixHQUMxQyxJQUVJcU4sRUFGQW51QixFQUFJa1gsRUFBU2pWLE1BQ2J1bkIsRUFBSTlKLEVBQVlvQixHQUFHLEdBRXZCLEdBQ0UsR0FBSXFOLEVBQUl0RCxFQUF5QjdxQixFQUFHd3BCLEdBQUksT0FBTzJFLEVBQUV2WSxVQUMxQzVWLEVBQUltQyxFQUFlbkMsUSxlQ2RoQyxJQUFJOGMsRUFBVSxFQUFRLE1BQ2xCc3lCLEVBQVUsRUFBUSxLQUFSLEVBQThCLEdBRTVDdHlCLEVBQVFBLEVBQVFqRyxFQUFHLFNBQVUsQ0FDM0J4VSxPQUFRLFNBQWdCa1UsR0FDdEIsT0FBTzY0QixFQUFRNzRCLE8sNEJDSm5CLElBQUl1RyxFQUFVLEVBQVEsTUFDbEJuYyxFQUFTLEVBQVEsTUFDakIyZCxFQUFPLEVBQVEsTUFDZmtqQixFQUFZLEVBQVEsR0FBUixHQUNaNk4sRUFBYSxFQUFRLEtBQVIsQ0FBa0IsY0FDL0JyMkIsRUFBWSxFQUFRLE1BQ3BCbUQsRUFBVyxFQUFRLE1BQ25CN0IsRUFBYSxFQUFRLE1BQ3JCRCxFQUFjLEVBQVEsTUFDdEJpRyxFQUFPLEVBQVEsS0FDZjNJLEVBQVEsRUFBUSxNQUNoQmdNLEVBQVNoTSxFQUFNZ00sT0FFZm1CLEVBQVksU0FBVTNkLEdBQ3hCLE9BQWEsTUFBTkEsT0FBYXRLLEVBQVltYyxFQUFVN1IsSUFHeENtb0MsRUFBc0IsU0FBVUMsR0FDbEMsSUFBSUMsRUFBVUQsRUFBYS9NLEdBQ3ZCZ04sSUFDRkQsRUFBYS9NLFFBQUszbEMsRUFDbEIyeUMsTUFJQUMsRUFBcUIsU0FBVUYsR0FDakMsWUFBMkIxeUMsSUFBcEIweUMsRUFBYUcsSUFHbEJDLEVBQW9CLFNBQVVKLEdBQzNCRSxFQUFtQkYsS0FDdEJBLEVBQWFHLFFBQUs3eUMsRUFDbEJ5eUMsRUFBb0JDLEtBSXBCSyxFQUFlLFNBQVVDLEVBQVVDLEdBQ3JDM3pCLEVBQVMwekIsR0FDVDV0QyxLQUFLdWdDLFFBQUszbEMsRUFDVm9GLEtBQUt5dEMsR0FBS0csRUFDVkEsRUFBVyxJQUFJRSxFQUFxQjl0QyxNQUNwQyxJQUNFLElBQUl1dEMsRUFBVU0sRUFBV0QsR0FDckJOLEVBQWVDLEVBQ0osTUFBWEEsSUFDaUMsbUJBQXhCQSxFQUFRUSxZQUE0QlIsRUFBVSxXQUFjRCxFQUFhUyxlQUMvRWgzQixFQUFVdzJCLEdBQ2Z2dEMsS0FBS3VnQyxHQUFLZ04sR0FFWixNQUFPbC9CLEdBRVAsWUFEQXUvQixFQUFTcC9CLE1BQU1ILEdBRVhtL0IsRUFBbUJ4dEMsT0FBT3F0QyxFQUFvQnJ0QyxPQUd0RDJ0QyxFQUFheHZDLFVBQVlpYSxFQUFZLEdBQUksQ0FDdkMyMUIsWUFBYSxXQUF5QkwsRUFBa0IxdEMsU0FHMUQsSUFBSTh0QyxFQUF1QixTQUFVUixHQUNuQ3R0QyxLQUFLMGdDLEdBQUs0TSxHQUdaUSxFQUFxQjN2QyxVQUFZaWEsRUFBWSxHQUFJLENBQy9DeFcsS0FBTSxTQUFjcFAsR0FDbEIsSUFBSTg2QyxFQUFldHRDLEtBQUswZ0MsR0FDeEIsSUFBSzhNLEVBQW1CRixHQUFlLENBQ3JDLElBQUlNLEVBQVdOLEVBQWFHLEdBQzVCLElBQ0UsSUFBSXhpQyxFQUFJNFgsRUFBVStxQixFQUFTaHNDLE1BQzNCLEdBQUlxSixFQUFHLE9BQU9BLEVBQUV6TSxLQUFLb3ZDLEVBQVVwN0MsR0FDL0IsTUFBTzZiLEdBQ1AsSUFDRXEvQixFQUFrQkosR0FDbEIsUUFDQSxNQUFNai9CLE1BS2RHLE1BQU8sU0FBZWhjLEdBQ3BCLElBQUk4NkMsRUFBZXR0QyxLQUFLMGdDLEdBQ3hCLEdBQUk4TSxFQUFtQkYsR0FBZSxNQUFNOTZDLEVBQzVDLElBQUlvN0MsRUFBV04sRUFBYUcsR0FDNUJILEVBQWFHLFFBQUs3eUMsRUFDbEIsSUFDRSxJQUFJcVEsRUFBSTRYLEVBQVUrcUIsRUFBU3AvQixPQUMzQixJQUFLdkQsRUFBRyxNQUFNelksRUFDZEEsRUFBUXlZLEVBQUV6TSxLQUFLb3ZDLEVBQVVwN0MsR0FDekIsTUFBTzZiLEdBQ1AsSUFDRWcvQixFQUFvQkMsR0FDcEIsUUFDQSxNQUFNai9CLEdBR1YsT0FERWcvQixFQUFvQkMsR0FDZjk2QyxHQUVUeVIsU0FBVSxTQUFrQnpSLEdBQzFCLElBQUk4NkMsRUFBZXR0QyxLQUFLMGdDLEdBQ3hCLElBQUs4TSxFQUFtQkYsR0FBZSxDQUNyQyxJQUFJTSxFQUFXTixFQUFhRyxHQUM1QkgsRUFBYUcsUUFBSzd5QyxFQUNsQixJQUNFLElBQUlxUSxFQUFJNFgsRUFBVStxQixFQUFTM3BDLFVBQzNCelIsRUFBUXlZLEVBQUlBLEVBQUV6TSxLQUFLb3ZDLEVBQVVwN0MsUUFBU29JLEVBQ3RDLE1BQU95VCxHQUNQLElBQ0VnL0IsRUFBb0JDLEdBQ3BCLFFBQ0EsTUFBTWovQixHQUdWLE9BREVnL0IsRUFBb0JDLEdBQ2Y5NkMsTUFLYixJQUFJdzdDLEVBQWMsU0FBb0JILEdBQ3BDeDFCLEVBQVdyWSxLQUFNZ3VDLEVBQWEsYUFBYyxNQUFNbDFCLEdBQUsvQixFQUFVODJCLElBR25FejFCLEVBQVk0MUIsRUFBWTd2QyxVQUFXLENBQ2pDOHZDLFVBQVcsU0FBbUJMLEdBQzVCLE9BQU8sSUFBSUQsRUFBYUMsRUFBVTV0QyxLQUFLOFksS0FFekM3bEIsUUFBUyxTQUFpQmlTLEdBQ3hCLElBQUkyUixFQUFPN1csS0FDWCxPQUFPLElBQUtxYyxFQUFLN1csU0FBVzlHLEVBQU84RyxVQUFTLFNBQVVGLEVBQVNDLEdBQzdEd1IsRUFBVTdSLEdBQ1YsSUFBSW9vQyxFQUFlejJCLEVBQUtvM0IsVUFBVSxDQUNoQ3JzQyxLQUFNLFNBQVVwUCxHQUNkLElBQ0UsT0FBTzBTLEVBQUcxUyxHQUNWLE1BQU82YixHQUNQOUksRUFBTzhJLEdBQ1BpL0IsRUFBYVMsZ0JBR2pCdi9CLE1BQU9qSixFQUNQdEIsU0FBVXFCLFVBTWxCOFMsRUFBWTQxQixFQUFhLENBQ3ZCbGxDLEtBQU0sU0FBY21HLEdBQ2xCLElBQUltSSxFQUFvQixtQkFBVHBYLEtBQXNCQSxLQUFPZ3VDLEVBQ3hDcnJDLEVBQVNrZ0IsRUFBVTNJLEVBQVNqTCxHQUFHbStCLElBQ25DLEdBQUl6cUMsRUFBUSxDQUNWLElBQUl1ckMsRUFBYWgwQixFQUFTdlgsRUFBT25FLEtBQUt5USxJQUN0QyxPQUFPaS9CLEVBQVcxMUMsY0FBZ0I0ZSxFQUFJODJCLEVBQWEsSUFBSTkyQixHQUFFLFNBQVV3MkIsR0FDakUsT0FBT00sRUFBV0QsVUFBVUwsTUFHaEMsT0FBTyxJQUFJeDJCLEdBQUUsU0FBVXcyQixHQUNyQixJQUFJN3JDLEdBQU8sRUFlWCxPQWRBdzlCLEdBQVUsV0FDUixJQUFLeDlCLEVBQU0sQ0FDVCxJQUNFLEdBQUkyVCxFQUFNekcsR0FBRyxHQUFPLFNBQVVxRixHQUU1QixHQURBczVCLEVBQVNoc0MsS0FBSzBTLEdBQ1Z2UyxFQUFNLE9BQU8yZixPQUNaQSxFQUFRLE9BQ2YsTUFBT3JULEdBQ1AsR0FBSXRNLEVBQU0sTUFBTXNNLEVBRWhCLFlBREF1L0IsRUFBU3AvQixNQUFNSCxHQUVmdS9CLEVBQVMzcEMsZUFHUixXQUFjbEMsR0FBTyxPQUdoQzBwQixHQUFJLFdBQ0YsSUFBSyxJQUFJLzVCLEVBQUksRUFBRzhILEVBQUlpVyxVQUFVbmUsT0FBUTY4QyxFQUFRLElBQUk1NkMsTUFBTWlHLEdBQUk5SCxFQUFJOEgsR0FBSTIwQyxFQUFNejhDLEdBQUsrZCxVQUFVL2QsS0FDekYsT0FBTyxJQUFxQixtQkFBVHNPLEtBQXNCQSxLQUFPZ3VDLElBQWEsU0FBVUosR0FDckUsSUFBSTdyQyxHQUFPLEVBU1gsT0FSQXc5QixHQUFVLFdBQ1IsSUFBS3g5QixFQUFNLENBQ1QsSUFBSyxJQUFJbE4sRUFBSSxFQUFHQSxFQUFJczVDLEVBQU03OEMsU0FBVXVELEVBRWxDLEdBREErNEMsRUFBU2hzQyxLQUFLdXNDLEVBQU10NUMsSUFDaEJrTixFQUFNLE9BQ1Y2ckMsRUFBUzNwQyxlQUdSLFdBQWNsQyxHQUFPLFNBS2xDc2MsRUFBSzJ2QixFQUFZN3ZDLFVBQVdpdkMsR0FBWSxXQUFjLE9BQU9wdEMsUUFFN0Q2YSxFQUFRQSxFQUFRc0IsRUFBRyxDQUFFaXlCLFdBQVlKLElBRWpDLEVBQVEsS0FBUixDQUEwQixlLDRCQ3BNMUIsSUFBSW56QixFQUFVLEVBQVEsTUFDbEJ3QixFQUFPLEVBQVEsTUFDZjNkLEVBQVMsRUFBUSxNQUNqQjJZLEVBQXFCLEVBQVEsTUFDN0Jxb0IsRUFBaUIsRUFBUSxLQUU3QjdrQixFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFvRSxFQUFHLFVBQVcsQ0FBRSxRQUFXLFNBQVVvdkIsR0FDL0QsSUFBSWozQixFQUFJQyxFQUFtQnJYLEtBQU1xYyxFQUFLN1csU0FBVzlHLEVBQU84RyxTQUNwRDhrQixFQUFpQyxtQkFBYitqQixFQUN4QixPQUFPcnVDLEtBQUs2QixLQUNWeW9CLEVBQWEsU0FBVXJiLEdBQ3JCLE9BQU95d0IsRUFBZXRvQixFQUFHaTNCLEtBQWF4c0MsTUFBSyxXQUFjLE9BQU9vTixNQUM5RG8vQixFQUNKL2pCLEVBQWEsU0FBVWpjLEdBQ3JCLE9BQU9xeEIsRUFBZXRvQixFQUFHaTNCLEtBQWF4c0MsTUFBSyxXQUFjLE1BQU13TSxNQUM3RGdnQyxPLDRCQ2ZSLElBQUl4ekIsRUFBVSxFQUFRLE1BQ2xCa1AsRUFBdUIsRUFBUSxNQUMvQjBWLEVBQVUsRUFBUSxNQUV0QjVrQixFQUFRQSxFQUFRakcsRUFBRyxVQUFXLENBQUUsSUFBTyxTQUFVZ0MsR0FDL0MsSUFBSW9ULEVBQW9CRCxFQUFxQmpULEVBQUU5VyxNQUMzQzhCLEVBQVMyOUIsRUFBUTdvQixHQUVyQixPQURDOVUsRUFBT3VNLEVBQUkyYixFQUFrQnprQixPQUFTeWtCLEVBQWtCMWtCLFNBQVN4RCxFQUFPMFgsR0FDbEV3USxFQUFrQnRELFksZUNWM0IsSUFBSTRuQixFQUFXLEVBQVEsTUFDbkJwMEIsRUFBVyxFQUFRLE1BQ25CcTBCLEVBQVlELEVBQVNwN0MsSUFDckJzN0MsRUFBNEJGLEVBQVMzNkIsSUFFekMyNkIsRUFBUzl2QixJQUFJLENBQUVpd0IsZUFBZ0IsU0FBd0JDLEVBQWFDLEVBQWU3K0IsRUFBUXNWLEdBQ3pGb3BCLEVBQTBCRSxFQUFhQyxFQUFlejBCLEVBQVNwSyxHQUFTeStCLEVBQVVucEIsUSxlQ05wRixJQUFJa3BCLEVBQVcsRUFBUSxNQUNuQnAwQixFQUFXLEVBQVEsTUFDbkJxMEIsRUFBWUQsRUFBU3A3QyxJQUNyQml5QixFQUF5Qm1wQixFQUFTNzZDLElBQ2xDaW5CLEVBQVE0ekIsRUFBUzV6QixNQUVyQjR6QixFQUFTOXZCLElBQUksQ0FBRW93QixlQUFnQixTQUF3QkYsRUFBYTUrQixHQUNsRSxJQUFJc1YsRUFBWTNWLFVBQVVuZSxPQUFTLE9BQUlzSixFQUFZMnpDLEVBQVU5K0IsVUFBVSxJQUNuRStWLEVBQWNMLEVBQXVCakwsRUFBU3BLLEdBQVNzVixHQUFXLEdBQ3RFLFFBQW9CeHFCLElBQWhCNHFCLElBQThCQSxFQUFvQixPQUFFa3BCLEdBQWMsT0FBTyxFQUM3RSxHQUFJbHBCLEVBQVl0YixLQUFNLE9BQU8sRUFDN0IsSUFBSW1iLEVBQWlCM0ssRUFBTWhCLElBQUk1SixHQUUvQixPQURBdVYsRUFBdUIsT0FBRUQsS0FDaEJDLEVBQWVuYixNQUFRd1EsRUFBYyxPQUFFNUssTyxlQ2JsRCxJQUFJKytCLEVBQU0sRUFBUSxNQUNkL2xDLEVBQU8sRUFBUSxNQUNmd2xDLEVBQVcsRUFBUSxNQUNuQnAwQixFQUFXLEVBQVEsTUFDbkJoYSxFQUFpQixFQUFRLE1BQ3pCNHVDLEVBQTBCUixFQUFTdDdDLEtBQ25DdTdDLEVBQVlELEVBQVNwN0MsSUFFckI2N0MsRUFBdUIsU0FBVWh4QyxFQUFHOGdCLEdBQ3RDLElBQUltd0IsRUFBUUYsRUFBd0Ivd0MsRUFBRzhnQixHQUNuQ3VILEVBQVNsbUIsRUFBZW5DLEdBQzVCLEdBQWUsT0FBWHFvQixFQUFpQixPQUFPNG9CLEVBQzVCLElBQUlDLEVBQVFGLEVBQXFCM29CLEVBQVF2SCxHQUN6QyxPQUFPb3dCLEVBQU0zOUMsT0FBUzA5QyxFQUFNMTlDLE9BQVN3WCxFQUFLLElBQUkrbEMsRUFBSUcsRUFBTTcvQixPQUFPOC9CLEtBQVdBLEVBQVFELEdBR3BGVixFQUFTOXZCLElBQUksQ0FBRTB3QixnQkFBaUIsU0FBeUJwL0IsR0FDdkQsT0FBT2kvQixFQUFxQjcwQixFQUFTcEssR0FBU0wsVUFBVW5lLE9BQVMsT0FBSXNKLEVBQVkyekMsRUFBVTkrQixVQUFVLFMsZUNqQnZHLElBQUk2K0IsRUFBVyxFQUFRLE1BQ25CcDBCLEVBQVcsRUFBUSxNQUNuQmhhLEVBQWlCLEVBQVEsTUFDekJpdkMsRUFBeUJiLEVBQVM3MEIsSUFDbEMyMUIsRUFBeUJkLEVBQVM1MEIsSUFDbEM2MEIsRUFBWUQsRUFBU3A3QyxJQUVyQm04QyxFQUFzQixTQUFVOXBCLEVBQWF4bkIsRUFBRzhnQixHQUVsRCxHQURhc3dCLEVBQXVCNXBCLEVBQWF4bkIsRUFBRzhnQixHQUN4QyxPQUFPdXdCLEVBQXVCN3BCLEVBQWF4bkIsRUFBRzhnQixHQUMxRCxJQUFJdUgsRUFBU2xtQixFQUFlbkMsR0FDNUIsT0FBa0IsT0FBWHFvQixFQUFrQmlwQixFQUFvQjlwQixFQUFhYSxFQUFRdkgsUUFBS2prQixHQUd6RTB6QyxFQUFTOXZCLElBQUksQ0FBRTh3QixZQUFhLFNBQXFCWixFQUFhNStCLEdBQzVELE9BQU91L0IsRUFBb0JYLEVBQWF4MEIsRUFBU3BLLEdBQVNMLFVBQVVuZSxPQUFTLE9BQUlzSixFQUFZMnpDLEVBQVU5K0IsVUFBVSxTLGVDZm5ILElBQUk2K0IsRUFBVyxFQUFRLE1BQ25CcDBCLEVBQVcsRUFBUSxNQUNuQjQwQixFQUEwQlIsRUFBU3Q3QyxLQUNuQ3U3QyxFQUFZRCxFQUFTcDdDLElBRXpCbzdDLEVBQVM5dkIsSUFBSSxDQUFFK3dCLG1CQUFvQixTQUE0QnovQixHQUM3RCxPQUFPZy9CLEVBQXdCNTBCLEVBQVNwSyxHQUFTTCxVQUFVbmUsT0FBUyxPQUFJc0osRUFBWTJ6QyxFQUFVOStCLFVBQVUsUyxlQ04xRyxJQUFJNitCLEVBQVcsRUFBUSxNQUNuQnAwQixFQUFXLEVBQVEsTUFDbkJrMUIsRUFBeUJkLEVBQVM1MEIsSUFDbEM2MEIsRUFBWUQsRUFBU3A3QyxJQUV6Qm83QyxFQUFTOXZCLElBQUksQ0FBRWd4QixlQUFnQixTQUF3QmQsRUFBYTUrQixHQUNsRSxPQUFPcy9CLEVBQXVCVixFQUFheDBCLEVBQVNwSyxHQUNoREwsVUFBVW5lLE9BQVMsT0FBSXNKLEVBQVkyekMsRUFBVTkrQixVQUFVLFMsZUNQN0QsSUFBSTYrQixFQUFXLEVBQVEsTUFDbkJwMEIsRUFBVyxFQUFRLE1BQ25CaGEsRUFBaUIsRUFBUSxNQUN6Qml2QyxFQUF5QmIsRUFBUzcwQixJQUNsQzgwQixFQUFZRCxFQUFTcDdDLElBRXJCdThDLEVBQXNCLFNBQVVscUIsRUFBYXhuQixFQUFHOGdCLEdBRWxELEdBRGFzd0IsRUFBdUI1cEIsRUFBYXhuQixFQUFHOGdCLEdBQ3hDLE9BQU8sRUFDbkIsSUFBSXVILEVBQVNsbUIsRUFBZW5DLEdBQzVCLE9BQWtCLE9BQVhxb0IsR0FBa0JxcEIsRUFBb0JscUIsRUFBYWEsRUFBUXZILElBR3BFeXZCLEVBQVM5dkIsSUFBSSxDQUFFa3hCLFlBQWEsU0FBcUJoQixFQUFhNStCLEdBQzVELE9BQU8yL0IsRUFBb0JmLEVBQWF4MEIsRUFBU3BLLEdBQVNMLFVBQVVuZSxPQUFTLE9BQUlzSixFQUFZMnpDLEVBQVU5K0IsVUFBVSxTLGVDZG5ILElBQUk2K0IsRUFBVyxFQUFRLE1BQ25CcDBCLEVBQVcsRUFBUSxNQUNuQmkxQixFQUF5QmIsRUFBUzcwQixJQUNsQzgwQixFQUFZRCxFQUFTcDdDLElBRXpCbzdDLEVBQVM5dkIsSUFBSSxDQUFFbXhCLGVBQWdCLFNBQXdCakIsRUFBYTUrQixHQUNsRSxPQUFPcS9CLEVBQXVCVCxFQUFheDBCLEVBQVNwSyxHQUNoREwsVUFBVW5lLE9BQVMsT0FBSXNKLEVBQVkyekMsRUFBVTkrQixVQUFVLFMsZUNQN0QsSUFBSW1nQyxFQUFZLEVBQVEsTUFDcEIxMUIsRUFBVyxFQUFRLE1BQ25CbkQsRUFBWSxFQUFRLE1BQ3BCdzNCLEVBQVlxQixFQUFVMThDLElBQ3RCczdDLEVBQTRCb0IsRUFBVWo4QixJQUUxQ2k4QixFQUFVcHhCLElBQUksQ0FBRTh2QixTQUFVLFNBQWtCSSxFQUFhQyxHQUN2RCxPQUFPLFNBQW1CNytCLEVBQVFzVixHQUNoQ29wQixFQUNFRSxFQUFhQyxRQUNFL3pDLElBQWR3cUIsRUFBMEJsTCxFQUFXbkQsR0FBV2pILEdBQ2pEeStCLEVBQVVucEIsUyxjQ1ZoQixFQUFRLEtBQVIsQ0FBa0MsUSxlQ0FsQyxFQUFRLEtBQVIsQ0FBZ0MsUSxlQ0FoQyxJQUFJdkssRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFvRSxFQUFHLE1BQU8sQ0FBRTVPLE9BQVEsRUFBUSxLQUFSLENBQWlDLFUsNEJDRGpGLElBQUl3SyxFQUFVLEVBQVEsTUFDbEJtc0IsRUFBTSxFQUFRLEtBQVIsRUFBd0IsR0FHOUJwa0IsRUFGUyxFQUFRLEtBRVI0YixFQUFPLFdBQ2xCLE1BQXNCLE9BQWYsS0FBSzdwQixHQUFHLE1BR2pCa0csRUFBUUEsRUFBUWdFLEVBQUloRSxFQUFRcEQsRUFBSW1MLEVBQVEsU0FBVSxDQUNoRGpPLEdBQUksU0FBWXRGLEdBQ2QsT0FBTzIzQixFQUFJaG5DLEtBQU1xUCxPLDRCQ1ZyQixJQUFJd0wsRUFBVSxFQUFRLE1BQ2xCd0UsRUFBVSxFQUFRLE1BQ2xCbEssRUFBVyxFQUFRLE1BQ25CK00sRUFBVyxFQUFRLE1BQ25CMnRCLEVBQVcsRUFBUSxNQUNuQkMsRUFBY3R2QixPQUFPcmlCLFVBRXJCNHhDLEVBQXdCLFNBQVU1dkIsRUFBUWhYLEdBQzVDbkosS0FBS2d3QyxHQUFLN3ZCLEVBQ1ZuZ0IsS0FBSzBnQyxHQUFLdjNCLEdBR1osRUFBUSxLQUFSLENBQTBCNG1DLEVBQXVCLGlCQUFpQixXQUNoRSxJQUFJbGdDLEVBQVE3UCxLQUFLZ3dDLEdBQUc1d0IsS0FBS3BmLEtBQUswZ0MsSUFDOUIsTUFBTyxDQUFFbHVDLE1BQU9xZCxFQUFPOU4sS0FBZ0IsT0FBVjhOLE1BRy9CZ0wsRUFBUUEsRUFBUWdFLEVBQUcsU0FBVSxDQUMzQm94QixTQUFVLFNBQWtCOXZCLEdBRTFCLEdBREFkLEVBQVFyZixPQUNIa2lCLEVBQVMvQixHQUFTLE1BQU1wYSxVQUFVb2EsRUFBUyxxQkFDaEQsSUFBSXZMLEVBQUkxVyxPQUFPOEIsTUFDWCtqQyxFQUFRLFVBQVcrTCxFQUFjNXhDLE9BQU9paUIsRUFBTzRqQixPQUFTOEwsRUFBU3J4QyxLQUFLMmhCLEdBQ3RFaWtCLEVBQUssSUFBSTVqQixPQUFPTCxFQUFPN0IsUUFBU3lsQixFQUFNcHJDLFFBQVEsS0FBT29yQyxFQUFRLElBQU1BLEdBRXZFLE9BREFLLEVBQUdwWixVQUFZN1YsRUFBU2dMLEVBQU82SyxXQUN4QixJQUFJK2tCLEVBQXNCM0wsRUFBSXh2QixPLDRCQ3pCekMsSUFBSWlHLEVBQVUsRUFBUSxNQUNsQnExQixFQUFPLEVBQVEsTUFDZnJYLEVBQVksRUFBUSxNQUdwQnNYLEVBQWEsbURBQW1EcjZDLEtBQUsraUMsR0FFekVoZSxFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxFQUFJMDRCLEVBQVksU0FBVSxDQUNwRDl4QyxPQUFRLFNBQWdCb3VCLEdBQ3RCLE9BQU95akIsRUFBS2x3QyxLQUFNeXNCLEVBQVdoZCxVQUFVbmUsT0FBUyxFQUFJbWUsVUFBVSxRQUFLN1UsR0FBVyxPLDRCQ1RsRixJQUFJaWdCLEVBQVUsRUFBUSxNQUNsQnExQixFQUFPLEVBQVEsTUFDZnJYLEVBQVksRUFBUSxNQUdwQnNYLEVBQWEsbURBQW1EcjZDLEtBQUsraUMsR0FFekVoZSxFQUFRQSxFQUFRZ0UsRUFBSWhFLEVBQVFwRCxFQUFJMDRCLEVBQVksU0FBVSxDQUNwRC94QyxTQUFVLFNBQWtCcXVCLEdBQzFCLE9BQU95akIsRUFBS2x3QyxLQUFNeXNCLEVBQVdoZCxVQUFVbmUsT0FBUyxFQUFJbWUsVUFBVSxRQUFLN1UsR0FBVyxPLDRCQ1RsRixFQUFRLEtBQVIsQ0FBMEIsWUFBWSxTQUFVOHVCLEdBQzlDLE9BQU8sV0FDTCxPQUFPQSxFQUFNMXBCLEtBQU0sTUFFcEIsYyw0QkNKSCxFQUFRLEtBQVIsQ0FBMEIsYUFBYSxTQUFVMHBCLEdBQy9DLE9BQU8sV0FDTCxPQUFPQSxFQUFNMXBCLEtBQU0sTUFFcEIsWSxjQ05ILEVBQVEsS0FBUixDQUF5QixrQixlQ0F6QixFQUFRLEtBQVIsQ0FBeUIsZSxlQ0N6QixJQUFJNmEsRUFBVSxFQUFRLE1BRXRCQSxFQUFRQSxFQUFRakcsRUFBRyxTQUFVLENBQUVsVyxPQUFRLEVBQVEsUyxlQ0YvQyxFQUFRLEtBQVIsQ0FBa0MsWSxlQ0FsQyxFQUFRLEtBQVIsQ0FBZ0MsWSxlQ0FoQyxFQUFRLEtBQVIsQ0FBa0MsWSxlQ0FsQyxFQUFRLEtBQVIsQ0FBZ0MsWSxlQzRDaEMsSUE3Q0EsSUFBSXMxQixFQUFhLEVBQVEsTUFDckJqVyxFQUFVLEVBQVEsTUFDbEJqRCxFQUFXLEVBQVEsTUFDbkJwYyxFQUFTLEVBQVEsTUFDakIyZixFQUFPLEVBQVEsS0FDZjJELEVBQVksRUFBUSxLQUNwQjFDLEVBQU0sRUFBUSxNQUNkM0osRUFBVzJKLEVBQUksWUFDZjh3QixFQUFnQjl3QixFQUFJLGVBQ3BCK3dCLEVBQWNydUIsRUFBVXp1QixNQUV4Qis4QyxFQUFlLENBQ2pCQyxhQUFhLEVBQ2JDLHFCQUFxQixFQUNyQkMsY0FBYyxFQUNkQyxnQkFBZ0IsRUFDaEJDLGFBQWEsRUFDYkMsZUFBZSxFQUNmQyxjQUFjLEVBQ2RDLHNCQUFzQixFQUN0QkMsVUFBVSxFQUNWQyxtQkFBbUIsRUFDbkJDLGdCQUFnQixFQUNoQkMsaUJBQWlCLEVBQ2pCQyxtQkFBbUIsRUFDbkJDLFdBQVcsRUFDWEMsZUFBZSxFQUNmQyxjQUFjLEVBQ2RDLFVBQVUsRUFDVkMsa0JBQWtCLEVBQ2xCQyxRQUFRLEVBQ1JDLGFBQWEsRUFDYkMsZUFBZSxFQUNmQyxlQUFlLEVBQ2ZDLGdCQUFnQixFQUNoQkMsY0FBYyxFQUNkQyxlQUFlLEVBQ2ZDLGtCQUFrQixFQUNsQkMsa0JBQWtCLEVBQ2xCQyxnQkFBZ0IsRUFDaEJDLGtCQUFrQixFQUNsQkMsZUFBZSxFQUNmQyxXQUFXLEdBR0pDLEVBQWN2MEIsRUFBUXV5QixHQUFlNStDLEVBQUksRUFBR0EsRUFBSTRnRCxFQUFZaGhELE9BQVFJLElBQUssQ0FDaEYsSUFJSXdCLEVBSkErbEIsRUFBT3E1QixFQUFZNWdELEdBQ25CNmdELEVBQVdqQyxFQUFhcjNCLEdBQ3hCdTVCLEVBQWE5ekMsRUFBT3VhLEdBQ3BCdUMsRUFBUWczQixHQUFjQSxFQUFXcjBDLFVBRXJDLEdBQUlxZCxJQUNHQSxFQUFNN0YsSUFBVzBJLEVBQUs3QyxFQUFPN0YsRUFBVTA2QixHQUN2QzcwQixFQUFNNDBCLElBQWdCL3hCLEVBQUs3QyxFQUFPNDBCLEVBQWVuM0IsR0FDdEQrSSxFQUFVL0ksR0FBUW8zQixFQUNka0MsR0FBVSxJQUFLci9DLEtBQU84Z0MsRUFBaUJ4WSxFQUFNdG9CLElBQU00bkIsRUFBU1UsRUFBT3RvQixFQUFLOGdDLEVBQVc5Z0MsSUFBTSxLLGVDdkRqRyxJQUFJMm5CLEVBQVUsRUFBUSxNQUNsQjQzQixFQUFRLEVBQVEsTUFDcEI1M0IsRUFBUUEsRUFBUXNCLEVBQUl0QixFQUFRN0MsRUFBRyxDQUM3QitWLGFBQWMwa0IsRUFBTTkrQixJQUNwQnNhLGVBQWdCd2tCLEVBQU1wNUIsUyxlQ0h4QixJQUFJM2EsRUFBUyxFQUFRLE1BQ2pCbWMsRUFBVSxFQUFRLE1BQ2xCZ2UsRUFBWSxFQUFRLE1BQ3BCOWtDLEVBQVEsR0FBR0EsTUFDWDIrQyxFQUFPLFdBQVc1OEMsS0FBSytpQyxHQUN2QnA1QixFQUFPLFNBQVVrVSxHQUNuQixPQUFPLFNBQVV6TyxFQUFJeXRDLEdBQ25CLElBQUlDLEVBQVluakMsVUFBVW5lLE9BQVMsRUFDL0JvbUIsSUFBT2s3QixHQUFZNytDLEVBQU15SyxLQUFLaVIsVUFBVyxHQUM3QyxPQUFPa0UsRUFBSWkvQixFQUFZLFlBRVAsbUJBQU4xdEMsRUFBbUJBLEVBQUszRyxTQUFTMkcsSUFBSzhJLE1BQU1oTyxLQUFNMFgsSUFDeER4UyxFQUFJeXRDLEtBR1o5M0IsRUFBUUEsRUFBUXNCLEVBQUl0QixFQUFRN0MsRUFBSTZDLEVBQVFwRCxFQUFJaTdCLEVBQU0sQ0FDaER4akIsV0FBWXp2QixFQUFLZixFQUFPd3dCLFlBQ3hCMmpCLFlBQWFwekMsRUFBS2YsRUFBT20wQyxnQixlQ2xCM0IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxJQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1Is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UyxJQUNULEtBQVMsSUFDVCxNQUFVLElBQ1YsTUFBVSxJQUNWLEtBQVMsSUFDVCxPQUFXLElBQ1gsTUFBVSxJQUNWLEtBQVMsSUFDVCxNQUFVLElBQ1YsT0FBVyxJQUNYLE9BQVcsSUFDWCxPQUFXLElBQ1gsT0FBVyxJQUNYLE1BQVUsSUFDVixPQUFXLElBQ1gsTUFBVSxJQUNWLE1BQVUsSUFDVixPQUFXLElBQ1gsT0FBVyxJQUNYLEtBQVMsSUFDVCxLQUFTLElBQ1QsS0FBUyxJQUNULE1BQVUsSUFDVixNQUFVLElBQ1YsS0FBUyxJQUNULE1BQVUsSUFDVixNQUFVLElBQ1YsUUFBWSxJQUNaLEtBQVMsSUFDVCxJQUFRLElBQ1IsTUFBVSxJQUNWLEtBQVMsSUFDVCxNQUFVLElBQ1YsT0FBVyxJQUNYLEdBQU8sSUFDUCxHQUFPLElBQ1AsR0FBTyxJQUNQLFFBQVksSUFDWixHQUFPLElBQ1AsSUFBUSxJQUNSLE1BQVUsSUFDVixJQUFRLElBQ1IsUUFBWSxJQUNaLElBQVEsSUFDUixJQUFRLElBQ1IsSUFBUSxJQUNSLE1BQVUsSUFDVixNQUFVLElBQ1YsS0FBUyxJQUNULE1BQVUsSUFDVixNQUFVLElBQ1YsUUFBWSxJQUNaLEtBQVMsSUFDVCxJQUFRLElBQ1IsTUFBVSxJQUNWLEtBQVMsSUFDVCxNQUFVLElBQ1YsT0FBVyxJQUNYLEdBQU8sSUFDUCxHQUFPLElBQ1AsR0FBTyxJQUNQLFFBQVksSUFDWixHQUFPLElBQ1AsSUFBUSxJQUNSLE9BQVcsSUFDWCxNQUFVLElBQ1YsSUFBUSxJQUNSLFFBQVksSUFDWixJQUFRLElBQ1IsSUFBUSxJQUNSLElBQVEsSUFDUixNQUFVLElBQ1YsU0FBYSxJQUNiLE1BQVUsSUFDVixJQUFRLElBQ1IsS0FBUyxLQUNULEtBQVMsS0FDVCxPQUFXLEtBQ1gsS0FBUyxLQUNULElBQVEsS0FDUixJQUFRLEtBQ1IsSUFBUSxLQUNSLE1BQVUsS0FDVixNQUFVLEtBQ1YsTUFBVSxLQUNWLE1BQVUsS0FDVixNQUFVLEtBQ1YsTUFBVSxLQUNWLE1BQVUsS0FDVixNQUFVLEtBQ1YsT0FB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QUFPcTNGLE1BQVEsR0FDVnIzRixFQUFPazVELFdBQVVsNUQsRUFBT2s1RCxTQUFXLElBQ2pDbDVELEdOQVI2MkYsRUFBb0IsTUFDYkEsRUFBb0IsTyIsImZpbGUiOiJsYW5keG1sLmJyb3dzZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBtZXRhXzEgPSByZXF1aXJlKFwiQHR1cmYvbWV0YVwiKTtcbi8vIE5vdGU6IGNoYW5nZSBSQURJVVMgPT4gZWFydGhSYWRpdXNcbnZhciBSQURJVVMgPSA2Mzc4MTM3O1xuLyoqXG4gKiBUYWtlcyBvbmUgb3IgbW9yZSBmZWF0dXJlcyBhbmQgcmV0dXJucyB0aGVpciBhcmVhIGluIHNxdWFyZSBtZXRlcnMuXG4gKlxuICogQG5hbWUgYXJlYVxuICogQHBhcmFtIHtHZW9KU09OfSBnZW9qc29uIGlucHV0IEdlb0pTT04gZmVhdHVyZShzKVxuICogQHJldHVybnMge251bWJlcn0gYXJlYSBpbiBzcXVhcmUgbWV0ZXJzXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW1tbMTI1LCAtMTVdLCBbMTEzLCAtMjJdLCBbMTU0LCAtMjddLCBbMTQ0LCAtMTVdLCBbMTI1LCAtMTVdXV0pO1xuICpcbiAqIHZhciBhcmVhID0gdHVyZi5hcmVhKHBvbHlnb24pO1xuICpcbiAqIC8vYWRkVG9NYXBcbiAqIHZhciBhZGRUb01hcCA9IFtwb2x5Z29uXVxuICogcG9seWdvbi5wcm9wZXJ0aWVzLmFyZWEgPSBhcmVhXG4gKi9cbmZ1bmN0aW9uIGFyZWEoZ2VvanNvbikge1xuICAgIHJldHVybiBtZXRhXzEuZ2VvbVJlZHVjZShnZW9qc29uLCBmdW5jdGlvbiAodmFsdWUsIGdlb20pIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICsgY2FsY3VsYXRlQXJlYShnZW9tKTtcbiAgICB9LCAwKTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGFyZWE7XG4vKipcbiAqIENhbGN1bGF0ZSBBcmVhXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7R2VvbWV0cnl9IGdlb20gR2VvSlNPTiBHZW9tZXRyaWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhcmVhXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZUFyZWEoZ2VvbSkge1xuICAgIHZhciB0b3RhbCA9IDA7XG4gICAgdmFyIGk7XG4gICAgc3dpdGNoIChnZW9tLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcIlBvbHlnb25cIjpcbiAgICAgICAgICAgIHJldHVybiBwb2x5Z29uQXJlYShnZW9tLmNvb3JkaW5hdGVzKTtcbiAgICAgICAgY2FzZSBcIk11bHRpUG9seWdvblwiOlxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGdlb20uY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0b3RhbCArPSBwb2x5Z29uQXJlYShnZW9tLmNvb3JkaW5hdGVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0b3RhbDtcbiAgICAgICAgY2FzZSBcIlBvaW50XCI6XG4gICAgICAgIGNhc2UgXCJNdWx0aVBvaW50XCI6XG4gICAgICAgIGNhc2UgXCJMaW5lU3RyaW5nXCI6XG4gICAgICAgIGNhc2UgXCJNdWx0aUxpbmVTdHJpbmdcIjpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIHBvbHlnb25BcmVhKGNvb3Jkcykge1xuICAgIHZhciB0b3RhbCA9IDA7XG4gICAgaWYgKGNvb3JkcyAmJiBjb29yZHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0b3RhbCArPSBNYXRoLmFicyhyaW5nQXJlYShjb29yZHNbMF0pKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRvdGFsIC09IE1hdGguYWJzKHJpbmdBcmVhKGNvb3Jkc1tpXSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0b3RhbDtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIENhbGN1bGF0ZSB0aGUgYXBwcm94aW1hdGUgYXJlYSBvZiB0aGUgcG9seWdvbiB3ZXJlIGl0IHByb2plY3RlZCBvbnRvIHRoZSBlYXJ0aC5cbiAqIE5vdGUgdGhhdCB0aGlzIGFyZWEgd2lsbCBiZSBwb3NpdGl2ZSBpZiByaW5nIGlzIG9yaWVudGVkIGNsb2Nrd2lzZSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgbmVnYXRpdmUuXG4gKlxuICogUmVmZXJlbmNlOlxuICogUm9iZXJ0LiBHLiBDaGFtYmVybGFpbiBhbmQgV2lsbGlhbSBILiBEdXF1ZXR0ZSwgXCJTb21lIEFsZ29yaXRobXMgZm9yIFBvbHlnb25zIG9uIGEgU3BoZXJlXCIsXG4gKiBKUEwgUHVibGljYXRpb24gMDctMDMsIEpldCBQcm9wdWxzaW9uXG4gKiBMYWJvcmF0b3J5LCBQYXNhZGVuYSwgQ0EsIEp1bmUgMjAwNyBodHRwOi8vdHJzLW5ldy5qcGwubmFzYS5nb3YvZHNwYWNlL2hhbmRsZS8yMDE0LzQwNDA5XG4gKlxuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRzIFJpbmcgQ29vcmRpbmF0ZXNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBhcHByb3hpbWF0ZSBzaWduZWQgZ2VvZGVzaWMgYXJlYSBvZiB0aGUgcG9seWdvbiBpbiBzcXVhcmUgbWV0ZXJzLlxuICovXG5mdW5jdGlvbiByaW5nQXJlYShjb29yZHMpIHtcbiAgICB2YXIgcDE7XG4gICAgdmFyIHAyO1xuICAgIHZhciBwMztcbiAgICB2YXIgbG93ZXJJbmRleDtcbiAgICB2YXIgbWlkZGxlSW5kZXg7XG4gICAgdmFyIHVwcGVySW5kZXg7XG4gICAgdmFyIGk7XG4gICAgdmFyIHRvdGFsID0gMDtcbiAgICB2YXIgY29vcmRzTGVuZ3RoID0gY29vcmRzLmxlbmd0aDtcbiAgICBpZiAoY29vcmRzTGVuZ3RoID4gMikge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID09PSBjb29yZHNMZW5ndGggLSAyKSB7XG4gICAgICAgICAgICAgICAgbG93ZXJJbmRleCA9IGNvb3Jkc0xlbmd0aCAtIDI7XG4gICAgICAgICAgICAgICAgbWlkZGxlSW5kZXggPSBjb29yZHNMZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHVwcGVySW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaSA9PT0gY29vcmRzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGxvd2VySW5kZXggPSBjb29yZHNMZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIG1pZGRsZUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB1cHBlckluZGV4ID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvd2VySW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIG1pZGRsZUluZGV4ID0gaSArIDE7XG4gICAgICAgICAgICAgICAgdXBwZXJJbmRleCA9IGkgKyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcDEgPSBjb29yZHNbbG93ZXJJbmRleF07XG4gICAgICAgICAgICBwMiA9IGNvb3Jkc1ttaWRkbGVJbmRleF07XG4gICAgICAgICAgICBwMyA9IGNvb3Jkc1t1cHBlckluZGV4XTtcbiAgICAgICAgICAgIHRvdGFsICs9IChyYWQocDNbMF0pIC0gcmFkKHAxWzBdKSkgKiBNYXRoLnNpbihyYWQocDJbMV0pKTtcbiAgICAgICAgfVxuICAgICAgICB0b3RhbCA9IHRvdGFsICogUkFESVVTICogUkFESVVTIC8gMjtcbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuZnVuY3Rpb24gcmFkKG51bSkge1xuICAgIHJldHVybiBudW0gKiBNYXRoLlBJIC8gMTgwO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKipcbiAqIFJldHVybnMgYSBjbG9uZWQgY29weSBvZiB0aGUgcGFzc2VkIEdlb0pTT04gT2JqZWN0LCBpbmNsdWRpbmcgcG9zc2libGUgJ0ZvcmVpZ24gTWVtYmVycycuXG4gKiB+My01eCBmYXN0ZXIgdGhhbiB0aGUgY29tbW9uIEpTT04ucGFyc2UgKyBKU09OLnN0cmluZ2lmeSBjb21ibyBtZXRob2QuXG4gKlxuICogQG5hbWUgY2xvbmVcbiAqIEBwYXJhbSB7R2VvSlNPTn0gZ2VvanNvbiBHZW9KU09OIE9iamVjdFxuICogQHJldHVybnMge0dlb0pTT059IGNsb25lZCBHZW9KU09OIE9iamVjdFxuICogQGV4YW1wbGVcbiAqIHZhciBsaW5lID0gdHVyZi5saW5lU3RyaW5nKFtbLTc0LCA0MF0sIFstNzgsIDQyXSwgWy04MiwgMzVdXSwge2NvbG9yOiAncmVkJ30pO1xuICpcbiAqIHZhciBsaW5lQ2xvbmVkID0gdHVyZi5jbG9uZShsaW5lKTtcbiAqL1xuZnVuY3Rpb24gY2xvbmUoZ2VvanNvbikge1xuICAgIGlmICghZ2VvanNvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJnZW9qc29uIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICBzd2l0Y2ggKGdlb2pzb24udHlwZSkge1xuICAgICAgICBjYXNlIFwiRmVhdHVyZVwiOlxuICAgICAgICAgICAgcmV0dXJuIGNsb25lRmVhdHVyZShnZW9qc29uKTtcbiAgICAgICAgY2FzZSBcIkZlYXR1cmVDb2xsZWN0aW9uXCI6XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVGZWF0dXJlQ29sbGVjdGlvbihnZW9qc29uKTtcbiAgICAgICAgY2FzZSBcIlBvaW50XCI6XG4gICAgICAgIGNhc2UgXCJMaW5lU3RyaW5nXCI6XG4gICAgICAgIGNhc2UgXCJQb2x5Z29uXCI6XG4gICAgICAgIGNhc2UgXCJNdWx0aVBvaW50XCI6XG4gICAgICAgIGNhc2UgXCJNdWx0aUxpbmVTdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcIk11bHRpUG9seWdvblwiOlxuICAgICAgICBjYXNlIFwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVHZW9tZXRyeShnZW9qc29uKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gR2VvSlNPTiB0eXBlXCIpO1xuICAgIH1cbn1cbi8qKlxuICogQ2xvbmUgRmVhdHVyZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0ZlYXR1cmU8YW55Pn0gZ2VvanNvbiBHZW9KU09OIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPGFueT59IGNsb25lZCBGZWF0dXJlXG4gKi9cbmZ1bmN0aW9uIGNsb25lRmVhdHVyZShnZW9qc29uKSB7XG4gICAgdmFyIGNsb25lZCA9IHsgdHlwZTogXCJGZWF0dXJlXCIgfTtcbiAgICAvLyBQcmVzZXJ2ZSBGb3JlaWduIE1lbWJlcnNcbiAgICBPYmplY3Qua2V5cyhnZW9qc29uKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0eXBlXCI6XG4gICAgICAgICAgICBjYXNlIFwicHJvcGVydGllc1wiOlxuICAgICAgICAgICAgY2FzZSBcImdlb21ldHJ5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjbG9uZWRba2V5XSA9IGdlb2pzb25ba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEFkZCBwcm9wZXJ0aWVzICYgZ2VvbWV0cnkgbGFzdFxuICAgIGNsb25lZC5wcm9wZXJ0aWVzID0gY2xvbmVQcm9wZXJ0aWVzKGdlb2pzb24ucHJvcGVydGllcyk7XG4gICAgY2xvbmVkLmdlb21ldHJ5ID0gY2xvbmVHZW9tZXRyeShnZW9qc29uLmdlb21ldHJ5KTtcbiAgICByZXR1cm4gY2xvbmVkO1xufVxuLyoqXG4gKiBDbG9uZSBQcm9wZXJ0aWVzXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIEdlb0pTT04gUHJvcGVydGllc1xuICogQHJldHVybnMge09iamVjdH0gY2xvbmVkIFByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gY2xvbmVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgICB2YXIgY2xvbmVkID0ge307XG4gICAgaWYgKCFwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0aWVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBudWxsXG4gICAgICAgICAgICAgICAgY2xvbmVkW2tleV0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgQXJyYXlcbiAgICAgICAgICAgICAgICBjbG9uZWRba2V5XSA9IHZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBnZW5lcmljIE9iamVjdFxuICAgICAgICAgICAgICAgIGNsb25lZFtrZXldID0gY2xvbmVQcm9wZXJ0aWVzKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNsb25lZFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmVkO1xufVxuLyoqXG4gKiBDbG9uZSBGZWF0dXJlIENvbGxlY3Rpb25cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbjxhbnk+fSBnZW9qc29uIEdlb0pTT04gRmVhdHVyZSBDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248YW55Pn0gY2xvbmVkIEZlYXR1cmUgQ29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBjbG9uZUZlYXR1cmVDb2xsZWN0aW9uKGdlb2pzb24pIHtcbiAgICB2YXIgY2xvbmVkID0geyB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIgfTtcbiAgICAvLyBQcmVzZXJ2ZSBGb3JlaWduIE1lbWJlcnNcbiAgICBPYmplY3Qua2V5cyhnZW9qc29uKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0eXBlXCI6XG4gICAgICAgICAgICBjYXNlIFwiZmVhdHVyZXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNsb25lZFtrZXldID0gZ2VvanNvbltrZXldO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQWRkIGZlYXR1cmVzXG4gICAgY2xvbmVkLmZlYXR1cmVzID0gZ2VvanNvbi5mZWF0dXJlcy5tYXAoZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lRmVhdHVyZShmZWF0dXJlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmVkO1xufVxuLyoqXG4gKiBDbG9uZSBHZW9tZXRyeVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0dlb21ldHJ5PGFueT59IGdlb21ldHJ5IEdlb0pTT04gR2VvbWV0cnlcbiAqIEByZXR1cm5zIHtHZW9tZXRyeTxhbnk+fSBjbG9uZWQgR2VvbWV0cnlcbiAqL1xuZnVuY3Rpb24gY2xvbmVHZW9tZXRyeShnZW9tZXRyeSkge1xuICAgIHZhciBnZW9tID0geyB0eXBlOiBnZW9tZXRyeS50eXBlIH07XG4gICAgaWYgKGdlb21ldHJ5LmJib3gpIHtcbiAgICAgICAgZ2VvbS5iYm94ID0gZ2VvbWV0cnkuYmJveDtcbiAgICB9XG4gICAgaWYgKGdlb21ldHJ5LnR5cGUgPT09IFwiR2VvbWV0cnlDb2xsZWN0aW9uXCIpIHtcbiAgICAgICAgZ2VvbS5nZW9tZXRyaWVzID0gZ2VvbWV0cnkuZ2VvbWV0cmllcy5tYXAoZnVuY3Rpb24gKGcpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZUdlb21ldHJ5KGcpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdlb207XG4gICAgfVxuICAgIGdlb20uY29vcmRpbmF0ZXMgPSBkZWVwU2xpY2UoZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xuICAgIHJldHVybiBnZW9tO1xufVxuLyoqXG4gKiBEZWVwIFNsaWNlIGNvb3JkaW5hdGVzXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Q29vcmRpbmF0ZXN9IGNvb3JkcyBDb29yZGluYXRlc1xuICogQHJldHVybnMge0Nvb3JkaW5hdGVzfSBhbGwgY29vcmRpbmF0ZXMgc2xpY2VkXG4gKi9cbmZ1bmN0aW9uIGRlZXBTbGljZShjb29yZHMpIHtcbiAgICB2YXIgY2xvbmVkID0gY29vcmRzO1xuICAgIGlmICh0eXBlb2YgY2xvbmVkWzBdICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBjbG9uZWQuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lZC5tYXAoZnVuY3Rpb24gKGNvb3JkKSB7XG4gICAgICAgIHJldHVybiBkZWVwU2xpY2UoY29vcmQpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gY2xvbmU7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKlxuICogQG1vZHVsZSBoZWxwZXJzXG4gKi9cbi8qKlxuICogRWFydGggUmFkaXVzIHVzZWQgd2l0aCB0aGUgSGFydmVzaW5lIGZvcm11bGEgYW5kIGFwcHJveGltYXRlcyB1c2luZyBhIHNwaGVyaWNhbCAobm9uLWVsbGlwc29pZCkgRWFydGguXG4gKlxuICogQG1lbWJlcm9mIGhlbHBlcnNcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmV4cG9ydHMuZWFydGhSYWRpdXMgPSA2MzcxMDA4Ljg7XG4vKipcbiAqIFVuaXQgb2YgbWVhc3VyZW1lbnQgZmFjdG9ycyB1c2luZyBhIHNwaGVyaWNhbCAobm9uLWVsbGlwc29pZCkgZWFydGggcmFkaXVzLlxuICpcbiAqIEBtZW1iZXJvZiBoZWxwZXJzXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5leHBvcnRzLmZhY3RvcnMgPSB7XG4gICAgY2VudGltZXRlcnM6IGV4cG9ydHMuZWFydGhSYWRpdXMgKiAxMDAsXG4gICAgY2VudGltZXRyZXM6IGV4cG9ydHMuZWFydGhSYWRpdXMgKiAxMDAsXG4gICAgZGVncmVlczogZXhwb3J0cy5lYXJ0aFJhZGl1cyAvIDExMTMyNSxcbiAgICBmZWV0OiBleHBvcnRzLmVhcnRoUmFkaXVzICogMy4yODA4NCxcbiAgICBpbmNoZXM6IGV4cG9ydHMuZWFydGhSYWRpdXMgKiAzOS4zNzAsXG4gICAga2lsb21ldGVyczogZXhwb3J0cy5lYXJ0aFJhZGl1cyAvIDEwMDAsXG4gICAga2lsb21ldHJlczogZXhwb3J0cy5lYXJ0aFJhZGl1cyAvIDEwMDAsXG4gICAgbWV0ZXJzOiBleHBvcnRzLmVhcnRoUmFkaXVzLFxuICAgIG1ldHJlczogZXhwb3J0cy5lYXJ0aFJhZGl1cyxcbiAgICBtaWxlczogZXhwb3J0cy5lYXJ0aFJhZGl1cyAvIDE2MDkuMzQ0LFxuICAgIG1pbGxpbWV0ZXJzOiBleHBvcnRzLmVhcnRoUmFkaXVzICogMTAwMCxcbiAgICBtaWxsaW1ldHJlczogZXhwb3J0cy5lYXJ0aFJhZGl1cyAqIDEwMDAsXG4gICAgbmF1dGljYWxtaWxlczogZXhwb3J0cy5lYXJ0aFJhZGl1cyAvIDE4NTIsXG4gICAgcmFkaWFuczogMSxcbiAgICB5YXJkczogZXhwb3J0cy5lYXJ0aFJhZGl1cyAvIDEuMDkzNixcbn07XG4vKipcbiAqIFVuaXRzIG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgYmFzZWQgb24gMSBtZXRlci5cbiAqXG4gKiBAbWVtYmVyb2YgaGVscGVyc1xuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0cy51bml0c0ZhY3RvcnMgPSB7XG4gICAgY2VudGltZXRlcnM6IDEwMCxcbiAgICBjZW50aW1ldHJlczogMTAwLFxuICAgIGRlZ3JlZXM6IDEgLyAxMTEzMjUsXG4gICAgZmVldDogMy4yODA4NCxcbiAgICBpbmNoZXM6IDM5LjM3MCxcbiAgICBraWxvbWV0ZXJzOiAxIC8gMTAwMCxcbiAgICBraWxvbWV0cmVzOiAxIC8gMTAwMCxcbiAgICBtZXRlcnM6IDEsXG4gICAgbWV0cmVzOiAxLFxuICAgIG1pbGVzOiAxIC8gMTYwOS4zNDQsXG4gICAgbWlsbGltZXRlcnM6IDEwMDAsXG4gICAgbWlsbGltZXRyZXM6IDEwMDAsXG4gICAgbmF1dGljYWxtaWxlczogMSAvIDE4NTIsXG4gICAgcmFkaWFuczogMSAvIGV4cG9ydHMuZWFydGhSYWRpdXMsXG4gICAgeWFyZHM6IDEgLyAxLjA5MzYsXG59O1xuLyoqXG4gKiBBcmVhIG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgYmFzZWQgb24gMSBzcXVhcmUgbWV0ZXIuXG4gKlxuICogQG1lbWJlcm9mIGhlbHBlcnNcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydHMuYXJlYUZhY3RvcnMgPSB7XG4gICAgYWNyZXM6IDAuMDAwMjQ3MTA1LFxuICAgIGNlbnRpbWV0ZXJzOiAxMDAwMCxcbiAgICBjZW50aW1ldHJlczogMTAwMDAsXG4gICAgZmVldDogMTAuNzYzOTEwNDE3LFxuICAgIGluY2hlczogMTU1MC4wMDMxMDAwMDYsXG4gICAga2lsb21ldGVyczogMC4wMDAwMDEsXG4gICAga2lsb21ldHJlczogMC4wMDAwMDEsXG4gICAgbWV0ZXJzOiAxLFxuICAgIG1ldHJlczogMSxcbiAgICBtaWxlczogMy44NmUtNyxcbiAgICBtaWxsaW1ldGVyczogMTAwMDAwMCxcbiAgICBtaWxsaW1ldHJlczogMTAwMDAwMCxcbiAgICB5YXJkczogMS4xOTU5OTAwNDYsXG59O1xuLyoqXG4gKiBXcmFwcyBhIEdlb0pTT04ge0BsaW5rIEdlb21ldHJ5fSBpbiBhIEdlb0pTT04ge0BsaW5rIEZlYXR1cmV9LlxuICpcbiAqIEBuYW1lIGZlYXR1cmVcbiAqIEBwYXJhbSB7R2VvbWV0cnl9IGdlb21ldHJ5IGlucHV0IGdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmV9IGEgR2VvSlNPTiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIGdlb21ldHJ5ID0ge1xuICogICBcInR5cGVcIjogXCJQb2ludFwiLFxuICogICBcImNvb3JkaW5hdGVzXCI6IFsxMTAsIDUwXVxuICogfTtcbiAqXG4gKiB2YXIgZmVhdHVyZSA9IHR1cmYuZmVhdHVyZShnZW9tZXRyeSk7XG4gKlxuICogLy89ZmVhdHVyZVxuICovXG5mdW5jdGlvbiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBmZWF0ID0geyB0eXBlOiBcIkZlYXR1cmVcIiB9O1xuICAgIGlmIChvcHRpb25zLmlkID09PSAwIHx8IG9wdGlvbnMuaWQpIHtcbiAgICAgICAgZmVhdC5pZCA9IG9wdGlvbnMuaWQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmJib3gpIHtcbiAgICAgICAgZmVhdC5iYm94ID0gb3B0aW9ucy5iYm94O1xuICAgIH1cbiAgICBmZWF0LnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgIGZlYXQuZ2VvbWV0cnkgPSBnZW9tO1xuICAgIHJldHVybiBmZWF0O1xufVxuZXhwb3J0cy5mZWF0dXJlID0gZmVhdHVyZTtcbi8qKlxuICogQ3JlYXRlcyBhIEdlb0pTT04ge0BsaW5rIEdlb21ldHJ5fSBmcm9tIGEgR2VvbWV0cnkgc3RyaW5nIHR5cGUgJiBjb29yZGluYXRlcy5cbiAqIEZvciBHZW9tZXRyeUNvbGxlY3Rpb24gdHlwZSB1c2UgYGhlbHBlcnMuZ2VvbWV0cnlDb2xsZWN0aW9uYFxuICpcbiAqIEBuYW1lIGdlb21ldHJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBHZW9tZXRyeSBUeXBlXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGNvb3JkaW5hdGVzIENvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIHtHZW9tZXRyeX0gYSBHZW9KU09OIEdlb21ldHJ5XG4gKiBAZXhhbXBsZVxuICogdmFyIHR5cGUgPSBcIlBvaW50XCI7XG4gKiB2YXIgY29vcmRpbmF0ZXMgPSBbMTEwLCA1MF07XG4gKiB2YXIgZ2VvbWV0cnkgPSB0dXJmLmdlb21ldHJ5KHR5cGUsIGNvb3JkaW5hdGVzKTtcbiAqIC8vID0+IGdlb21ldHJ5XG4gKi9cbmZ1bmN0aW9uIGdlb21ldHJ5KHR5cGUsIGNvb3JkaW5hdGVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcIlBvaW50XCI6IHJldHVybiBwb2ludChjb29yZGluYXRlcykuZ2VvbWV0cnk7XG4gICAgICAgIGNhc2UgXCJMaW5lU3RyaW5nXCI6IHJldHVybiBsaW5lU3RyaW5nKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTtcbiAgICAgICAgY2FzZSBcIlBvbHlnb25cIjogcmV0dXJuIHBvbHlnb24oY29vcmRpbmF0ZXMpLmdlb21ldHJ5O1xuICAgICAgICBjYXNlIFwiTXVsdGlQb2ludFwiOiByZXR1cm4gbXVsdGlQb2ludChjb29yZGluYXRlcykuZ2VvbWV0cnk7XG4gICAgICAgIGNhc2UgXCJNdWx0aUxpbmVTdHJpbmdcIjogcmV0dXJuIG11bHRpTGluZVN0cmluZyhjb29yZGluYXRlcykuZ2VvbWV0cnk7XG4gICAgICAgIGNhc2UgXCJNdWx0aVBvbHlnb25cIjogcmV0dXJuIG11bHRpUG9seWdvbihjb29yZGluYXRlcykuZ2VvbWV0cnk7XG4gICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcih0eXBlICsgXCIgaXMgaW52YWxpZFwiKTtcbiAgICB9XG59XG5leHBvcnRzLmdlb21ldHJ5ID0gZ2VvbWV0cnk7XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9pbnR9IHtAbGluayBGZWF0dXJlfSBmcm9tIGEgUG9zaXRpb24uXG4gKlxuICogQG5hbWUgcG9pbnRcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gY29vcmRpbmF0ZXMgbG9uZ2l0dWRlLCBsYXRpdHVkZSBwb3NpdGlvbiAoZWFjaCBpbiBkZWNpbWFsIGRlZ3JlZXMpXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8UG9pbnQ+fSBhIFBvaW50IGZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnQgPSB0dXJmLnBvaW50KFstNzUuMzQzLCAzOS45ODRdKTtcbiAqXG4gKiAvLz1wb2ludFxuICovXG5mdW5jdGlvbiBwb2ludChjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIGdlb20gPSB7XG4gICAgICAgIHR5cGU6IFwiUG9pbnRcIixcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzLFxuICAgIH07XG4gICAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5leHBvcnRzLnBvaW50ID0gcG9pbnQ7XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9pbnR9IHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBhbiBBcnJheSBvZiBQb2ludCBjb29yZGluYXRlcy5cbiAqXG4gKiBAbmFtZSBwb2ludHNcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBUcmFuc2xhdGUgdGhlc2UgcHJvcGVydGllcyB0byBlYWNoIEZlYXR1cmVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF1cbiAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9uPFBvaW50Pn0gUG9pbnQgRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2ludHMgPSB0dXJmLnBvaW50cyhbXG4gKiAgIFstNzUsIDM5XSxcbiAqICAgWy04MCwgNDVdLFxuICogICBbLTc4LCA1MF1cbiAqIF0pO1xuICpcbiAqIC8vPXBvaW50c1xuICovXG5mdW5jdGlvbiBwb2ludHMoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihjb29yZGluYXRlcy5tYXAoZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gcG9pbnQoY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9KSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnBvaW50cyA9IHBvaW50cztcbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2x5Z29ufSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhbiBBcnJheSBvZiBMaW5lYXJSaW5ncy5cbiAqXG4gKiBAbmFtZSBwb2x5Z29uXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZWFyUmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxQb2x5Z29uPn0gUG9seWdvbiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW1tbLTUsIDUyXSwgWy00LCA1Nl0sIFstMiwgNTFdLCBbLTcsIDU0XSwgWy01LCA1Ml1dXSwgeyBuYW1lOiAncG9seTEnIH0pO1xuICpcbiAqIC8vPXBvbHlnb25cbiAqL1xuZnVuY3Rpb24gcG9seWdvbihjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgZm9yICh2YXIgX2kgPSAwLCBjb29yZGluYXRlc18xID0gY29vcmRpbmF0ZXM7IF9pIDwgY29vcmRpbmF0ZXNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIHJpbmcgPSBjb29yZGluYXRlc18xW19pXTtcbiAgICAgICAgaWYgKHJpbmcubGVuZ3RoIDwgNCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRWFjaCBMaW5lYXJSaW5nIG9mIGEgUG9seWdvbiBtdXN0IGhhdmUgNCBvciBtb3JlIFBvc2l0aW9ucy5cIik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByaW5nW3JpbmcubGVuZ3RoIC0gMV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGZpcnN0IHBvaW50IG9mIFBvbHlnb24gY29udGFpbnMgdHdvIG51bWJlcnNcbiAgICAgICAgICAgIGlmIChyaW5nW3JpbmcubGVuZ3RoIC0gMV1bal0gIT09IHJpbmdbMF1bal0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaXJzdCBhbmQgbGFzdCBQb3NpdGlvbiBhcmUgbm90IGVxdWl2YWxlbnQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBnZW9tID0ge1xuICAgICAgICB0eXBlOiBcIlBvbHlnb25cIixcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzLFxuICAgIH07XG4gICAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5leHBvcnRzLnBvbHlnb24gPSBwb2x5Z29uO1xuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvbHlnb259IHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBhbiBBcnJheSBvZiBQb2x5Z29uIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lIHBvbHlnb25zXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvbHlnb24gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24+fSBQb2x5Z29uIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb25zID0gdHVyZi5wb2x5Z29ucyhbXG4gKiAgIFtbWy01LCA1Ml0sIFstNCwgNTZdLCBbLTIsIDUxXSwgWy03LCA1NF0sIFstNSwgNTJdXV0sXG4gKiAgIFtbWy0xNSwgNDJdLCBbLTE0LCA0Nl0sIFstMTIsIDQxXSwgWy0xNywgNDRdLCBbLTE1LCA0Ml1dXSxcbiAqIF0pO1xuICpcbiAqIC8vPXBvbHlnb25zXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25zKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oY29vcmRpbmF0ZXMubWFwKGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgICAgcmV0dXJuIHBvbHlnb24oY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9KSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnBvbHlnb25zID0gcG9seWdvbnM7XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgTGluZVN0cmluZ30ge0BsaW5rIEZlYXR1cmV9IGZyb20gYW4gQXJyYXkgb2YgUG9zaXRpb25zLlxuICpcbiAqIEBuYW1lIGxpbmVTdHJpbmdcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvc2l0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBMaW5lU3RyaW5nIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgbGluZXN0cmluZzEgPSB0dXJmLmxpbmVTdHJpbmcoW1stMjQsIDYzXSwgWy0yMywgNjBdLCBbLTI1LCA2NV0sIFstMjAsIDY5XV0sIHtuYW1lOiAnbGluZSAxJ30pO1xuICogdmFyIGxpbmVzdHJpbmcyID0gdHVyZi5saW5lU3RyaW5nKFtbLTE0LCA0M10sIFstMTMsIDQwXSwgWy0xNSwgNDVdLCBbLTEwLCA0OV1dLCB7bmFtZTogJ2xpbmUgMid9KTtcbiAqXG4gKiAvLz1saW5lc3RyaW5nMVxuICogLy89bGluZXN0cmluZzJcbiAqL1xuZnVuY3Rpb24gbGluZVN0cmluZyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgaWYgKGNvb3JkaW5hdGVzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiB0d28gb3IgbW9yZSBwb3NpdGlvbnNcIik7XG4gICAgfVxuICAgIHZhciBnZW9tID0ge1xuICAgICAgICB0eXBlOiBcIkxpbmVTdHJpbmdcIixcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzLFxuICAgIH07XG4gICAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5leHBvcnRzLmxpbmVTdHJpbmcgPSBsaW5lU3RyaW5nO1xuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIExpbmVTdHJpbmd9IHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBhbiBBcnJheSBvZiBMaW5lU3RyaW5nIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lIGxpbmVTdHJpbmdzXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZWFyUmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXVxuICogYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248TGluZVN0cmluZz59IExpbmVTdHJpbmcgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBleGFtcGxlXG4gKiB2YXIgbGluZXN0cmluZ3MgPSB0dXJmLmxpbmVTdHJpbmdzKFtcbiAqICAgW1stMjQsIDYzXSwgWy0yMywgNjBdLCBbLTI1LCA2NV0sIFstMjAsIDY5XV0sXG4gKiAgIFtbLTE0LCA0M10sIFstMTMsIDQwXSwgWy0xNSwgNDVdLCBbLTEwLCA0OV1dXG4gKiBdKTtcbiAqXG4gKiAvLz1saW5lc3RyaW5nc1xuICovXG5mdW5jdGlvbiBsaW5lU3RyaW5ncyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgIHJldHVybiBsaW5lU3RyaW5nKGNvb3JkcywgcHJvcGVydGllcyk7XG4gICAgfSksIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5saW5lU3RyaW5ncyA9IGxpbmVTdHJpbmdzO1xuLyoqXG4gKiBUYWtlcyBvbmUgb3IgbW9yZSB7QGxpbmsgRmVhdHVyZXxGZWF0dXJlc30gYW5kIGNyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259LlxuICpcbiAqIEBuYW1lIGZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0ZlYXR1cmVbXX0gZmVhdHVyZXMgaW5wdXQgZmVhdHVyZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9ufSBGZWF0dXJlQ29sbGVjdGlvbiBvZiBGZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIHZhciBsb2NhdGlvbkEgPSB0dXJmLnBvaW50KFstNzUuMzQzLCAzOS45ODRdLCB7bmFtZTogJ0xvY2F0aW9uIEEnfSk7XG4gKiB2YXIgbG9jYXRpb25CID0gdHVyZi5wb2ludChbLTc1LjgzMywgMzkuMjg0XSwge25hbWU6ICdMb2NhdGlvbiBCJ30pO1xuICogdmFyIGxvY2F0aW9uQyA9IHR1cmYucG9pbnQoWy03NS41MzQsIDM5LjEyM10sIHtuYW1lOiAnTG9jYXRpb24gQyd9KTtcbiAqXG4gKiB2YXIgY29sbGVjdGlvbiA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICBsb2NhdGlvbkEsXG4gKiAgIGxvY2F0aW9uQixcbiAqICAgbG9jYXRpb25DXG4gKiBdKTtcbiAqXG4gKiAvLz1jb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgZmMgPSB7IHR5cGU6IFwiRmVhdHVyZUNvbGxlY3Rpb25cIiB9O1xuICAgIGlmIChvcHRpb25zLmlkKSB7XG4gICAgICAgIGZjLmlkID0gb3B0aW9ucy5pZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYmJveCkge1xuICAgICAgICBmYy5iYm94ID0gb3B0aW9ucy5iYm94O1xuICAgIH1cbiAgICBmYy5mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICAgIHJldHVybiBmYztcbn1cbmV4cG9ydHMuZmVhdHVyZUNvbGxlY3Rpb24gPSBmZWF0dXJlQ29sbGVjdGlvbjtcbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpTGluZVN0cmluZz59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgbXVsdGlMaW5lU3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZVN0cmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aUxpbmVTdHJpbmc+fSBhIE11bHRpTGluZVN0cmluZyBmZWF0dXJlXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aUxpbmUgPSB0dXJmLm11bHRpTGluZVN0cmluZyhbW1swLDBdLFsxMCwxMF1dXSk7XG4gKlxuICogLy89bXVsdGlMaW5lXG4gKi9cbmZ1bmN0aW9uIG11bHRpTGluZVN0cmluZyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIGdlb20gPSB7XG4gICAgICAgIHR5cGU6IFwiTXVsdGlMaW5lU3RyaW5nXCIsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlcyxcbiAgICB9O1xuICAgIHJldHVybiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5tdWx0aUxpbmVTdHJpbmcgPSBtdWx0aUxpbmVTdHJpbmc7XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxNdWx0aVBvaW50Pn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aVBvaW50XG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb3NpdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aVBvaW50Pn0gYSBNdWx0aVBvaW50IGZlYXR1cmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBjb29yZGluYXRlcyBhcmUgcGFzc2VkXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpUHQgPSB0dXJmLm11bHRpUG9pbnQoW1swLDBdLFsxMCwxMF1dKTtcbiAqXG4gKiAvLz1tdWx0aVB0XG4gKi9cbmZ1bmN0aW9uIG11bHRpUG9pbnQoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBnZW9tID0ge1xuICAgICAgICB0eXBlOiBcIk11bHRpUG9pbnRcIixcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzLFxuICAgIH07XG4gICAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5leHBvcnRzLm11bHRpUG9pbnQgPSBtdWx0aVBvaW50O1xuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8TXVsdGlQb2x5Z29uPn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aVBvbHlnb25cbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9seWdvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aVBvbHlnb24+fSBhIG11bHRpcG9seWdvbiBmZWF0dXJlXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aVBvbHkgPSB0dXJmLm11bHRpUG9seWdvbihbW1tbMCwwXSxbMCwxMF0sWzEwLDEwXSxbMTAsMF0sWzAsMF1dXV0pO1xuICpcbiAqIC8vPW11bHRpUG9seVxuICpcbiAqL1xuZnVuY3Rpb24gbXVsdGlQb2x5Z29uKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgZ2VvbSA9IHtcbiAgICAgICAgdHlwZTogXCJNdWx0aVBvbHlnb25cIixcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzLFxuICAgIH07XG4gICAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5leHBvcnRzLm11bHRpUG9seWdvbiA9IG11bHRpUG9seWdvbjtcbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPEdlb21ldHJ5Q29sbGVjdGlvbj59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgZ2VvbWV0cnlDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5PEdlb21ldHJ5Pn0gZ2VvbWV0cmllcyBhbiBhcnJheSBvZiBHZW9KU09OIEdlb21ldHJpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxHZW9tZXRyeUNvbGxlY3Rpb24+fSBhIEdlb0pTT04gR2VvbWV0cnlDb2xsZWN0aW9uIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcHQgPSB0dXJmLmdlb21ldHJ5KFwiUG9pbnRcIiwgWzEwMCwgMF0pO1xuICogdmFyIGxpbmUgPSB0dXJmLmdlb21ldHJ5KFwiTGluZVN0cmluZ1wiLCBbWzEwMSwgMF0sIFsxMDIsIDFdXSk7XG4gKiB2YXIgY29sbGVjdGlvbiA9IHR1cmYuZ2VvbWV0cnlDb2xsZWN0aW9uKFtwdCwgbGluZV0pO1xuICpcbiAqIC8vID0+IGNvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2VvbWV0cnlDb2xsZWN0aW9uKGdlb21ldHJpZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBnZW9tID0ge1xuICAgICAgICB0eXBlOiBcIkdlb21ldHJ5Q29sbGVjdGlvblwiLFxuICAgICAgICBnZW9tZXRyaWVzOiBnZW9tZXRyaWVzLFxuICAgIH07XG4gICAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5leHBvcnRzLmdlb21ldHJ5Q29sbGVjdGlvbiA9IGdlb21ldHJ5Q29sbGVjdGlvbjtcbi8qKlxuICogUm91bmQgbnVtYmVyIHRvIHByZWNpc2lvblxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW0gTnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBQcmVjaXNpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IHJvdW5kZWQgbnVtYmVyXG4gKiBAZXhhbXBsZVxuICogdHVyZi5yb3VuZCgxMjAuNDMyMSlcbiAqIC8vPTEyMFxuICpcbiAqIHR1cmYucm91bmQoMTIwLjQzMjEsIDIpXG4gKiAvLz0xMjAuNDNcbiAqL1xuZnVuY3Rpb24gcm91bmQobnVtLCBwcmVjaXNpb24pIHtcbiAgICBpZiAocHJlY2lzaW9uID09PSB2b2lkIDApIHsgcHJlY2lzaW9uID0gMDsgfVxuICAgIGlmIChwcmVjaXNpb24gJiYgIShwcmVjaXNpb24gPj0gMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJlY2lzaW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXJcIik7XG4gICAgfVxuICAgIHZhciBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKTtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW0gKiBtdWx0aXBsaWVyKSAvIG11bHRpcGxpZXI7XG59XG5leHBvcnRzLnJvdW5kID0gcm91bmQ7XG4vKipcbiAqIENvbnZlcnQgYSBkaXN0YW5jZSBtZWFzdXJlbWVudCAoYXNzdW1pbmcgYSBzcGhlcmljYWwgRWFydGgpIGZyb20gcmFkaWFucyB0byBhIG1vcmUgZnJpZW5kbHkgdW5pdC5cbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGtpbG9tZXRlcnMsIGNlbnRpbWV0ZXJzLCBmZWV0XG4gKlxuICogQG5hbWUgcmFkaWFuc1RvTGVuZ3RoXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyBpbiByYWRpYW5zIGFjcm9zcyB0aGUgc3BoZXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPVwia2lsb21ldGVyc1wiXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIG9yIGtpbG9tZXRlcnMgaW5jaGVzLCB5YXJkcywgbWV0cmVzLFxuICogbWV0ZXJzLCBraWxvbWV0cmVzLCBraWxvbWV0ZXJzLlxuICogQHJldHVybnMge251bWJlcn0gZGlzdGFuY2VcbiAqL1xuZnVuY3Rpb24gcmFkaWFuc1RvTGVuZ3RoKHJhZGlhbnMsIHVuaXRzKSB7XG4gICAgaWYgKHVuaXRzID09PSB2b2lkIDApIHsgdW5pdHMgPSBcImtpbG9tZXRlcnNcIjsgfVxuICAgIHZhciBmYWN0b3IgPSBleHBvcnRzLmZhY3RvcnNbdW5pdHNdO1xuICAgIGlmICghZmFjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih1bml0cyArIFwiIHVuaXRzIGlzIGludmFsaWRcIik7XG4gICAgfVxuICAgIHJldHVybiByYWRpYW5zICogZmFjdG9yO1xufVxuZXhwb3J0cy5yYWRpYW5zVG9MZW5ndGggPSByYWRpYW5zVG9MZW5ndGg7XG4vKipcbiAqIENvbnZlcnQgYSBkaXN0YW5jZSBtZWFzdXJlbWVudCAoYXNzdW1pbmcgYSBzcGhlcmljYWwgRWFydGgpIGZyb20gYSByZWFsLXdvcmxkIHVuaXQgaW50byByYWRpYW5zXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBraWxvbWV0ZXJzLCBjZW50aW1ldGVycywgZmVldFxuICpcbiAqIEBuYW1lIGxlbmd0aFRvUmFkaWFuc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIGluIHJlYWwgdW5pdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9XCJraWxvbWV0ZXJzXCJdIGNhbiBiZSBkZWdyZWVzLCByYWRpYW5zLCBtaWxlcywgb3Iga2lsb21ldGVycyBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsXG4gKiBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSByYWRpYW5zXG4gKi9cbmZ1bmN0aW9uIGxlbmd0aFRvUmFkaWFucyhkaXN0YW5jZSwgdW5pdHMpIHtcbiAgICBpZiAodW5pdHMgPT09IHZvaWQgMCkgeyB1bml0cyA9IFwia2lsb21ldGVyc1wiOyB9XG4gICAgdmFyIGZhY3RvciA9IGV4cG9ydHMuZmFjdG9yc1t1bml0c107XG4gICAgaWYgKCFmYWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVuaXRzICsgXCIgdW5pdHMgaXMgaW52YWxpZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpc3RhbmNlIC8gZmFjdG9yO1xufVxuZXhwb3J0cy5sZW5ndGhUb1JhZGlhbnMgPSBsZW5ndGhUb1JhZGlhbnM7XG4vKipcbiAqIENvbnZlcnQgYSBkaXN0YW5jZSBtZWFzdXJlbWVudCAoYXNzdW1pbmcgYSBzcGhlcmljYWwgRWFydGgpIGZyb20gYSByZWFsLXdvcmxkIHVuaXQgaW50byBkZWdyZWVzXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBjZW50aW1ldGVycywga2lsb21ldHJlcywgZmVldFxuICpcbiAqIEBuYW1lIGxlbmd0aFRvRGVncmVlc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIGluIHJlYWwgdW5pdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9XCJraWxvbWV0ZXJzXCJdIGNhbiBiZSBkZWdyZWVzLCByYWRpYW5zLCBtaWxlcywgb3Iga2lsb21ldGVycyBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsXG4gKiBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBkZWdyZWVzXG4gKi9cbmZ1bmN0aW9uIGxlbmd0aFRvRGVncmVlcyhkaXN0YW5jZSwgdW5pdHMpIHtcbiAgICByZXR1cm4gcmFkaWFuc1RvRGVncmVlcyhsZW5ndGhUb1JhZGlhbnMoZGlzdGFuY2UsIHVuaXRzKSk7XG59XG5leHBvcnRzLmxlbmd0aFRvRGVncmVlcyA9IGxlbmd0aFRvRGVncmVlcztcbi8qKlxuICogQ29udmVydHMgYW55IGJlYXJpbmcgYW5nbGUgZnJvbSB0aGUgbm9ydGggbGluZSBkaXJlY3Rpb24gKHBvc2l0aXZlIGNsb2Nrd2lzZSlcbiAqIGFuZCByZXR1cm5zIGFuIGFuZ2xlIGJldHdlZW4gMC0zNjAgZGVncmVlcyAocG9zaXRpdmUgY2xvY2t3aXNlKSwgMCBiZWluZyB0aGUgbm9ydGggbGluZVxuICpcbiAqIEBuYW1lIGJlYXJpbmdUb0F6aW11dGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWFyaW5nIGFuZ2xlLCBiZXR3ZWVuIC0xODAgYW5kICsxODAgZGVncmVlc1xuICogQHJldHVybnMge251bWJlcn0gYW5nbGUgYmV0d2VlbiAwIGFuZCAzNjAgZGVncmVlc1xuICovXG5mdW5jdGlvbiBiZWFyaW5nVG9BemltdXRoKGJlYXJpbmcpIHtcbiAgICB2YXIgYW5nbGUgPSBiZWFyaW5nICUgMzYwO1xuICAgIGlmIChhbmdsZSA8IDApIHtcbiAgICAgICAgYW5nbGUgKz0gMzYwO1xuICAgIH1cbiAgICByZXR1cm4gYW5nbGU7XG59XG5leHBvcnRzLmJlYXJpbmdUb0F6aW11dGggPSBiZWFyaW5nVG9BemltdXRoO1xuLyoqXG4gKiBDb252ZXJ0cyBhbiBhbmdsZSBpbiByYWRpYW5zIHRvIGRlZ3JlZXNcbiAqXG4gKiBAbmFtZSByYWRpYW5zVG9EZWdyZWVzXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyBhbmdsZSBpbiByYWRpYW5zXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBkZWdyZWVzIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXNcbiAqL1xuZnVuY3Rpb24gcmFkaWFuc1RvRGVncmVlcyhyYWRpYW5zKSB7XG4gICAgdmFyIGRlZ3JlZXMgPSByYWRpYW5zICUgKDIgKiBNYXRoLlBJKTtcbiAgICByZXR1cm4gZGVncmVlcyAqIDE4MCAvIE1hdGguUEk7XG59XG5leHBvcnRzLnJhZGlhbnNUb0RlZ3JlZXMgPSByYWRpYW5zVG9EZWdyZWVzO1xuLyoqXG4gKiBDb252ZXJ0cyBhbiBhbmdsZSBpbiBkZWdyZWVzIHRvIHJhZGlhbnNcbiAqXG4gKiBAbmFtZSBkZWdyZWVzVG9SYWRpYW5zXG4gKiBAcGFyYW0ge251bWJlcn0gZGVncmVlcyBhbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbmdsZSBpbiByYWRpYW5zXG4gKi9cbmZ1bmN0aW9uIGRlZ3JlZXNUb1JhZGlhbnMoZGVncmVlcykge1xuICAgIHZhciByYWRpYW5zID0gZGVncmVlcyAlIDM2MDtcbiAgICByZXR1cm4gcmFkaWFucyAqIE1hdGguUEkgLyAxODA7XG59XG5leHBvcnRzLmRlZ3JlZXNUb1JhZGlhbnMgPSBkZWdyZWVzVG9SYWRpYW5zO1xuLyoqXG4gKiBDb252ZXJ0cyBhIGxlbmd0aCB0byB0aGUgcmVxdWVzdGVkIHVuaXQuXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBraWxvbWV0ZXJzLCBjZW50aW1ldGVycywgZmVldFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0ge1VuaXRzfSBbb3JpZ2luYWxVbml0PVwia2lsb21ldGVyc1wiXSBvZiB0aGUgbGVuZ3RoXG4gKiBAcGFyYW0ge1VuaXRzfSBbZmluYWxVbml0PVwia2lsb21ldGVyc1wiXSByZXR1cm5lZCB1bml0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgY29udmVydGVkIGxlbmd0aFxuICovXG5mdW5jdGlvbiBjb252ZXJ0TGVuZ3RoKGxlbmd0aCwgb3JpZ2luYWxVbml0LCBmaW5hbFVuaXQpIHtcbiAgICBpZiAob3JpZ2luYWxVbml0ID09PSB2b2lkIDApIHsgb3JpZ2luYWxVbml0ID0gXCJraWxvbWV0ZXJzXCI7IH1cbiAgICBpZiAoZmluYWxVbml0ID09PSB2b2lkIDApIHsgZmluYWxVbml0ID0gXCJraWxvbWV0ZXJzXCI7IH1cbiAgICBpZiAoIShsZW5ndGggPj0gMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibGVuZ3RoIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXJcIik7XG4gICAgfVxuICAgIHJldHVybiByYWRpYW5zVG9MZW5ndGgobGVuZ3RoVG9SYWRpYW5zKGxlbmd0aCwgb3JpZ2luYWxVbml0KSwgZmluYWxVbml0KTtcbn1cbmV4cG9ydHMuY29udmVydExlbmd0aCA9IGNvbnZlcnRMZW5ndGg7XG4vKipcbiAqIENvbnZlcnRzIGEgYXJlYSB0byB0aGUgcmVxdWVzdGVkIHVuaXQuXG4gKiBWYWxpZCB1bml0czoga2lsb21ldGVycywga2lsb21ldHJlcywgbWV0ZXJzLCBtZXRyZXMsIGNlbnRpbWV0cmVzLCBtaWxsaW1ldGVycywgYWNyZXMsIG1pbGVzLCB5YXJkcywgZmVldCwgaW5jaGVzXG4gKiBAcGFyYW0ge251bWJlcn0gYXJlYSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSB7VW5pdHN9IFtvcmlnaW5hbFVuaXQ9XCJtZXRlcnNcIl0gb2YgdGhlIGRpc3RhbmNlXG4gKiBAcGFyYW0ge1VuaXRzfSBbZmluYWxVbml0PVwia2lsb21ldGVyc1wiXSByZXR1cm5lZCB1bml0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgY29udmVydGVkIGRpc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBcmVhKGFyZWEsIG9yaWdpbmFsVW5pdCwgZmluYWxVbml0KSB7XG4gICAgaWYgKG9yaWdpbmFsVW5pdCA9PT0gdm9pZCAwKSB7IG9yaWdpbmFsVW5pdCA9IFwibWV0ZXJzXCI7IH1cbiAgICBpZiAoZmluYWxVbml0ID09PSB2b2lkIDApIHsgZmluYWxVbml0ID0gXCJraWxvbWV0ZXJzXCI7IH1cbiAgICBpZiAoIShhcmVhID49IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFyZWEgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgICB9XG4gICAgdmFyIHN0YXJ0RmFjdG9yID0gZXhwb3J0cy5hcmVhRmFjdG9yc1tvcmlnaW5hbFVuaXRdO1xuICAgIGlmICghc3RhcnRGYWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBvcmlnaW5hbCB1bml0c1wiKTtcbiAgICB9XG4gICAgdmFyIGZpbmFsRmFjdG9yID0gZXhwb3J0cy5hcmVhRmFjdG9yc1tmaW5hbFVuaXRdO1xuICAgIGlmICghZmluYWxGYWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmaW5hbCB1bml0c1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIChhcmVhIC8gc3RhcnRGYWN0b3IpICogZmluYWxGYWN0b3I7XG59XG5leHBvcnRzLmNvbnZlcnRBcmVhID0gY29udmVydEFyZWE7XG4vKipcbiAqIGlzTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSBudW0gTnVtYmVyIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIHR1cmYuaXNOdW1iZXIoMTIzKVxuICogLy89dHJ1ZVxuICogdHVyZi5pc051bWJlcignZm9vJylcbiAqIC8vPWZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKG51bSkge1xuICAgIHJldHVybiAhaXNOYU4obnVtKSAmJiBudW0gIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkobnVtKSAmJiAhL15cXHMqJC8udGVzdChudW0pO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuLyoqXG4gKiBpc09iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gaW5wdXQgdmFyaWFibGUgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogdHVyZi5pc09iamVjdCh7ZWxldmF0aW9uOiAxMH0pXG4gKiAvLz10cnVlXG4gKiB0dXJmLmlzT2JqZWN0KCdmb28nKVxuICogLy89ZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICByZXR1cm4gKCEhaW5wdXQpICYmIChpbnB1dC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KTtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcbi8qKlxuICogVmFsaWRhdGUgQkJveFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGJib3ggQkJveCB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIEVycm9yIGlmIEJCb3ggaXMgbm90IHZhbGlkXG4gKiBAZXhhbXBsZVxuICogdmFsaWRhdGVCQm94KFstMTgwLCAtNDAsIDExMCwgNTBdKVxuICogLy89T0tcbiAqIHZhbGlkYXRlQkJveChbLTE4MCwgLTQwXSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3goJ0ZvbycpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KDUpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KG51bGwpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KHVuZGVmaW5lZClcbiAqIC8vPUVycm9yXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQkJveChiYm94KSB7XG4gICAgaWYgKCFiYm94KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImJib3ggaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShiYm94KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYm94IG11c3QgYmUgYW4gQXJyYXlcIik7XG4gICAgfVxuICAgIGlmIChiYm94Lmxlbmd0aCAhPT0gNCAmJiBiYm94Lmxlbmd0aCAhPT0gNikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYm94IG11c3QgYmUgYW4gQXJyYXkgb2YgNCBvciA2IG51bWJlcnNcIik7XG4gICAgfVxuICAgIGJib3guZm9yRWFjaChmdW5jdGlvbiAobnVtKSB7XG4gICAgICAgIGlmICghaXNOdW1iZXIobnVtKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYmJveCBtdXN0IG9ubHkgY29udGFpbiBudW1iZXJzXCIpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLnZhbGlkYXRlQkJveCA9IHZhbGlkYXRlQkJveDtcbi8qKlxuICogVmFsaWRhdGUgSWRcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCBJZCB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIEVycm9yIGlmIElkIGlzIG5vdCB2YWxpZFxuICogQGV4YW1wbGVcbiAqIHZhbGlkYXRlSWQoWy0xODAsIC00MCwgMTEwLCA1MF0pXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZChbLTE4MCwgLTQwXSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUlkKCdGb28nKVxuICogLy89T0tcbiAqIHZhbGlkYXRlSWQoNSlcbiAqIC8vPU9LXG4gKiB2YWxpZGF0ZUlkKG51bGwpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZCh1bmRlZmluZWQpXG4gKiAvLz1FcnJvclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUlkKGlkKSB7XG4gICAgaWYgKCFpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG4gICAgaWYgKFtcInN0cmluZ1wiLCBcIm51bWJlclwiXS5pbmRleE9mKHR5cGVvZiBpZCkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImlkIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmdcIik7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUlkID0gdmFsaWRhdGVJZDtcbi8vIERlcHJlY2F0ZWQgbWV0aG9kc1xuZnVuY3Rpb24gcmFkaWFuczJkZWdyZWVzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGByYWRpYW5zVG9EZWdyZWVzYFwiKTtcbn1cbmV4cG9ydHMucmFkaWFuczJkZWdyZWVzID0gcmFkaWFuczJkZWdyZWVzO1xuZnVuY3Rpb24gZGVncmVlczJyYWRpYW5zKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBkZWdyZWVzVG9SYWRpYW5zYFwiKTtcbn1cbmV4cG9ydHMuZGVncmVlczJyYWRpYW5zID0gZGVncmVlczJyYWRpYW5zO1xuZnVuY3Rpb24gZGlzdGFuY2VUb0RlZ3JlZXMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGxlbmd0aFRvRGVncmVlc2BcIik7XG59XG5leHBvcnRzLmRpc3RhbmNlVG9EZWdyZWVzID0gZGlzdGFuY2VUb0RlZ3JlZXM7XG5mdW5jdGlvbiBkaXN0YW5jZVRvUmFkaWFucygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgbGVuZ3RoVG9SYWRpYW5zYFwiKTtcbn1cbmV4cG9ydHMuZGlzdGFuY2VUb1JhZGlhbnMgPSBkaXN0YW5jZVRvUmFkaWFucztcbmZ1bmN0aW9uIHJhZGlhbnNUb0Rpc3RhbmNlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGByYWRpYW5zVG9MZW5ndGhgXCIpO1xufVxuZXhwb3J0cy5yYWRpYW5zVG9EaXN0YW5jZSA9IHJhZGlhbnNUb0Rpc3RhbmNlO1xuZnVuY3Rpb24gYmVhcmluZ1RvQW5nbGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGJlYXJpbmdUb0F6aW11dGhgXCIpO1xufVxuZXhwb3J0cy5iZWFyaW5nVG9BbmdsZSA9IGJlYXJpbmdUb0FuZ2xlO1xuZnVuY3Rpb24gY29udmVydERpc3RhbmNlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBjb252ZXJ0TGVuZ3RoYFwiKTtcbn1cbmV4cG9ydHMuY29udmVydERpc3RhbmNlID0gY29udmVydERpc3RhbmNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgaGVscGVycyA9IHJlcXVpcmUoJ0B0dXJmL2hlbHBlcnMnKTtcblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgY29vcmRFYWNoXG4gKlxuICogQGNhbGxiYWNrIGNvb3JkRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGN1cnJlbnRDb29yZCBUaGUgY3VycmVudCBjb29yZGluYXRlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb29yZEluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBjb29yZGluYXRlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgY29vcmRpbmF0ZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2goKVxuICpcbiAqIEBuYW1lIGNvb3JkRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KVxuICogQHBhcmFtIHtib29sZWFufSBbZXhjbHVkZVdyYXBDb29yZD1mYWxzZV0gd2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmluYWwgY29vcmRpbmF0ZSBvZiBMaW5lYXJSaW5ncyB0aGF0IHdyYXBzIHRoZSByaW5nIGluIGl0cyBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge1wiZm9vXCI6IFwiYmFyXCJ9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge1wiaGVsbG9cIjogXCJ3b3JsZFwifSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuY29vcmRFYWNoKGZlYXR1cmVzLCBmdW5jdGlvbiAoY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRDb29yZFxuICogICAvLz1jb29yZEluZGV4XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gY29vcmRFYWNoKGdlb2pzb24sIGNhbGxiYWNrLCBleGNsdWRlV3JhcENvb3JkKSB7XG4gICAgLy8gSGFuZGxlcyBudWxsIEdlb21ldHJ5IC0tIFNraXBzIHRoaXMgR2VvSlNPTlxuICAgIGlmIChnZW9qc29uID09PSBudWxsKSByZXR1cm47XG4gICAgdmFyIGosIGssIGwsIGdlb21ldHJ5LCBzdG9wRywgY29vcmRzLFxuICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbixcbiAgICAgICAgd3JhcFNocmluayA9IDAsXG4gICAgICAgIGNvb3JkSW5kZXggPSAwLFxuICAgICAgICBpc0dlb21ldHJ5Q29sbGVjdGlvbixcbiAgICAgICAgdHlwZSA9IGdlb2pzb24udHlwZSxcbiAgICAgICAgaXNGZWF0dXJlQ29sbGVjdGlvbiA9IHR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgIGlzRmVhdHVyZSA9IHR5cGUgPT09ICdGZWF0dXJlJyxcbiAgICAgICAgc3RvcCA9IGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aCA6IDE7XG5cbiAgICAvLyBUaGlzIGxvZ2ljIG1heSBsb29rIGEgbGl0dGxlIHdlaXJkLiBUaGUgcmVhc29uIHdoeSBpdCBpcyB0aGF0IHdheVxuICAgIC8vIGlzIGJlY2F1c2UgaXQncyB0cnlpbmcgdG8gYmUgZmFzdC4gR2VvSlNPTiBzdXBwb3J0cyBtdWx0aXBsZSBraW5kc1xuICAgIC8vIG9mIG9iamVjdHMgYXQgaXRzIHJvb3Q6IEZlYXR1cmVDb2xsZWN0aW9uLCBGZWF0dXJlcywgR2VvbWV0cmllcy5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgaGFuZGxpbmcgYWxsIG9mIHRoZW0sIGFuZCB0aGF0XG4gICAgLy8gbWVhbnMgdGhhdCBzb21lIG9mIHRoZSBgZm9yYCBsb29wcyB5b3Ugc2VlIGJlbG93IGFjdHVhbGx5IGp1c3QgZG9uJ3QgYXBwbHlcbiAgICAvLyB0byBjZXJ0YWluIGlucHV0cy4gRm9yIGluc3RhbmNlLCBpZiB5b3UgZ2l2ZSB0aGlzIGp1c3QgYVxuICAgIC8vIFBvaW50IGdlb21ldHJ5LCB0aGVuIGJvdGggbG9vcHMgYXJlIHNob3J0LWNpcmN1aXRlZCBhbmQgYWxsIHdlIGRvXG4gICAgLy8gaXMgZ3JhZHVhbGx5IHJlbmFtZSB0aGUgaW5wdXQgdW50aWwgaXQncyBjYWxsZWQgJ2dlb21ldHJ5Jy5cbiAgICAvL1xuICAgIC8vIFRoaXMgYWxzbyBhaW1zIHRvIGFsbG9jYXRlIGFzIGZldyByZXNvdXJjZXMgYXMgcG9zc2libGU6IGp1c3QgYVxuICAgIC8vIGZldyBudW1iZXJzIGFuZCBib29sZWFucywgcmF0aGVyIHRoYW4gYW55IHRlbXBvcmFyeSBhcnJheXMgYXMgd291bGRcbiAgICAvLyBiZSByZXF1aXJlZCB3aXRoIHRoZSBub3JtYWxpemF0aW9uIGFwcHJvYWNoLlxuICAgIGZvciAodmFyIGZlYXR1cmVJbmRleCA9IDA7IGZlYXR1cmVJbmRleCA8IHN0b3A7IGZlYXR1cmVJbmRleCsrKSB7XG4gICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uID0gKGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0uZ2VvbWV0cnkgOlxuICAgICAgICAgICAgKGlzRmVhdHVyZSA/IGdlb2pzb24uZ2VvbWV0cnkgOiBnZW9qc29uKSk7XG4gICAgICAgIGlzR2VvbWV0cnlDb2xsZWN0aW9uID0gKGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uKSA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLnR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nIDogZmFsc2U7XG4gICAgICAgIHN0b3BHID0gaXNHZW9tZXRyeUNvbGxlY3Rpb24gPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi5nZW9tZXRyaWVzLmxlbmd0aCA6IDE7XG5cbiAgICAgICAgZm9yICh2YXIgZ2VvbUluZGV4ID0gMDsgZ2VvbUluZGV4IDwgc3RvcEc7IGdlb21JbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgbXVsdGlGZWF0dXJlSW5kZXggPSAwO1xuICAgICAgICAgICAgdmFyIGdlb21ldHJ5SW5kZXggPSAwO1xuICAgICAgICAgICAgZ2VvbWV0cnkgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24uZ2VvbWV0cmllc1tnZW9tSW5kZXhdIDogZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb247XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZXMgbnVsbCBHZW9tZXRyeSAtLSBTa2lwcyB0aGlzIGdlb21ldHJ5XG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29vcmRzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgICAgICAgICB2YXIgZ2VvbVR5cGUgPSBnZW9tZXRyeS50eXBlO1xuXG4gICAgICAgICAgICB3cmFwU2hyaW5rID0gKGV4Y2x1ZGVXcmFwQ29vcmQgJiYgKGdlb21UeXBlID09PSAnUG9seWdvbicgfHwgZ2VvbVR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSkgPyAxIDogMDtcblxuICAgICAgICAgICAgc3dpdGNoIChnZW9tVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBudWxsOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUG9pbnQnOlxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhjb29yZHMsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICAgICAgICBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgICAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29vcmRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhjb29yZHNbal0sIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb29yZEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gJ011bHRpUG9pbnQnKSBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09ICdMaW5lU3RyaW5nJykgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29vcmRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjb29yZHNbal0ubGVuZ3RoIC0gd3JhcFNocmluazsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soY29vcmRzW2pdW2tdLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09ICdQb2x5Z29uJykgZ2VvbWV0cnlJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09ICdQb2x5Z29uJykgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGNvb3Jkc1tqXS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gMDsgbCA8IGNvb3Jkc1tqXVtrXS5sZW5ndGggLSB3cmFwU2hyaW5rOyBsKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soY29vcmRzW2pdW2tdW2xdLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeUluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdHZW9tZXRyeUNvbGxlY3Rpb24nOlxuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBnZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDsgaisrKVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29vcmRFYWNoKGdlb21ldHJ5Lmdlb21ldHJpZXNbal0sIGNhbGxiYWNrLCBleGNsdWRlV3JhcENvb3JkKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIEdlb21ldHJ5IFR5cGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgY29vcmRSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBjb29yZFJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjdXJyZW50Q29vcmQgVGhlIGN1cnJlbnQgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gY29vcmRJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBTdGFydHMgYXQgaW5kZXggMCwgaWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkLCBhbmQgYXQgaW5kZXggMSBvdGhlcndpc2UuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIGNvb3JkaW5hdGVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKVxuICpcbiAqIEBuYW1lIGNvb3JkUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEdlb21ldHJ5fEZlYXR1cmV9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHBhcmFtIHtib29sZWFufSBbZXhjbHVkZVdyYXBDb29yZD1mYWxzZV0gd2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmluYWwgY29vcmRpbmF0ZSBvZiBMaW5lYXJSaW5ncyB0aGF0IHdyYXBzIHRoZSByaW5nIGluIGl0cyBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtcImZvb1wiOiBcImJhclwifSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtcImhlbGxvXCI6IFwid29ybGRcIn0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmNvb3JkUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudENvb3JkXG4gKiAgIC8vPWNvb3JkSW5kZXhcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRDb29yZDtcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBjb29yZFJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlLCBleGNsdWRlV3JhcENvb3JkKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgY29vcmRFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAgICAgICAgaWYgKGNvb3JkSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50Q29vcmQ7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCk7XG4gICAgfSwgZXhjbHVkZVdyYXBDb29yZCk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHByb3BFYWNoXG4gKlxuICogQGNhbGxiYWNrIHByb3BFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdXJyZW50UHJvcGVydGllcyBUaGUgY3VycmVudCBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIHByb3BlcnRpZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2goKVxuICpcbiAqIEBuYW1lIHByb3BFYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5wcm9wRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89Y3VycmVudFByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gcHJvcEVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICB2YXIgaTtcbiAgICBzd2l0Y2ggKGdlb2pzb24udHlwZSkge1xuICAgIGNhc2UgJ0ZlYXR1cmVDb2xsZWN0aW9uJzpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhnZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMsIGkpID09PSBmYWxzZSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRmVhdHVyZSc6XG4gICAgICAgIGNhbGxiYWNrKGdlb2pzb24ucHJvcGVydGllcywgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBwcm9wUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgcHJvcFJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHsqfSBjdXJyZW50UHJvcGVydGllcyBUaGUgY3VycmVudCBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIHByb3BlcnRpZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0IGludG8gYSBzaW5nbGUgdmFsdWUsXG4gKiBzaW1pbGFyIHRvIGhvdyBBcnJheS5yZWR1Y2Ugd29ya3MuIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSB3ZSBsYXppbHkgcnVuXG4gKiB0aGUgcmVkdWN0aW9uLCBzbyBhbiBhcnJheSBvZiBhbGwgcHJvcGVydGllcyBpcyB1bm5lY2Vzc2FyeS5cbiAqXG4gKiBAbmFtZSBwcm9wUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLnByb3BSZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudFByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50UHJvcGVydGllc1xuICogfSk7XG4gKi9cbmZ1bmN0aW9uIHByb3BSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIHByb3BFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KSB7XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50UHJvcGVydGllcztcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZlYXR1cmVFYWNoXG4gKlxuICogQGNhbGxiYWNrIGZlYXR1cmVFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RmVhdHVyZTxhbnk+fSBjdXJyZW50RmVhdHVyZSBUaGUgY3VycmVudCBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0b1xuICogQXJyYXkuZm9yRWFjaC5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleClcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5mZWF0dXJlRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89Y3VycmVudEZlYXR1cmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZmVhdHVyZUVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICBpZiAoZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZScpIHtcbiAgICAgICAgY2FsbGJhY2soZ2VvanNvbiwgMCk7XG4gICAgfSBlbHNlIGlmIChnZW9qc29uLnR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soZ2VvanNvbi5mZWF0dXJlc1tpXSwgaSkgPT09IGZhbHNlKSBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZmVhdHVyZVJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGZlYXR1cmVSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7RmVhdHVyZX0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKCkuXG4gKlxuICogQG5hbWUgZmVhdHVyZVJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtcImZvb1wiOiBcImJhclwifSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtcImhlbGxvXCI6IFwid29ybGRcIn0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmZlYXR1cmVSZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudEZlYXR1cmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50RmVhdHVyZVxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIGZlYXR1cmVFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KSB7XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50RmVhdHVyZTtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogR2V0IGFsbCBjb29yZGluYXRlcyBmcm9tIGFueSBHZW9KU09OIG9iamVjdC5cbiAqXG4gKiBAbmFtZSBjb29yZEFsbFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHJldHVybnMge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlIHBvc2l0aW9uIGFycmF5XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB2YXIgY29vcmRzID0gdHVyZi5jb29yZEFsbChmZWF0dXJlcyk7XG4gKiAvLz0gW1syNiwgMzddLCBbMzYsIDUzXV1cbiAqL1xuZnVuY3Rpb24gY29vcmRBbGwoZ2VvanNvbikge1xuICAgIHZhciBjb29yZHMgPSBbXTtcbiAgICBjb29yZEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGNvb3JkKSB7XG4gICAgICAgIGNvb3Jkcy5wdXNoKGNvb3JkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29vcmRzO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBnZW9tRWFjaFxuICpcbiAqIEBjYWxsYmFjayBnZW9tRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0dlb21ldHJ5fSBjdXJyZW50R2VvbWV0cnkgVGhlIGN1cnJlbnQgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gZmVhdHVyZVByb3BlcnRpZXMgVGhlIGN1cnJlbnQgRmVhdHVyZSBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gZmVhdHVyZUJCb3ggVGhlIGN1cnJlbnQgRmVhdHVyZSBCQm94IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmVhdHVyZUlkIFRoZSBjdXJyZW50IEZlYXR1cmUgSWQgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGVhY2ggZ2VvbWV0cnkgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2goKVxuICpcbiAqIEBuYW1lIGdlb21FYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmdlb21FYWNoKGZlYXR1cmVzLCBmdW5jdGlvbiAoY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSB7XG4gKiAgIC8vPWN1cnJlbnRHZW9tZXRyeVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89ZmVhdHVyZVByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUJCb3hcbiAqICAgLy89ZmVhdHVyZUlkXG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZ2VvbUVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICB2YXIgaSwgaiwgZywgZ2VvbWV0cnksIHN0b3BHLFxuICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbixcbiAgICAgICAgaXNHZW9tZXRyeUNvbGxlY3Rpb24sXG4gICAgICAgIGZlYXR1cmVQcm9wZXJ0aWVzLFxuICAgICAgICBmZWF0dXJlQkJveCxcbiAgICAgICAgZmVhdHVyZUlkLFxuICAgICAgICBmZWF0dXJlSW5kZXggPSAwLFxuICAgICAgICBpc0ZlYXR1cmVDb2xsZWN0aW9uID0gZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICBpc0ZlYXR1cmUgPSBnZW9qc29uLnR5cGUgPT09ICdGZWF0dXJlJyxcbiAgICAgICAgc3RvcCA9IGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aCA6IDE7XG5cbiAgICAvLyBUaGlzIGxvZ2ljIG1heSBsb29rIGEgbGl0dGxlIHdlaXJkLiBUaGUgcmVhc29uIHdoeSBpdCBpcyB0aGF0IHdheVxuICAgIC8vIGlzIGJlY2F1c2UgaXQncyB0cnlpbmcgdG8gYmUgZmFzdC4gR2VvSlNPTiBzdXBwb3J0cyBtdWx0aXBsZSBraW5kc1xuICAgIC8vIG9mIG9iamVjdHMgYXQgaXRzIHJvb3Q6IEZlYXR1cmVDb2xsZWN0aW9uLCBGZWF0dXJlcywgR2VvbWV0cmllcy5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgaGFuZGxpbmcgYWxsIG9mIHRoZW0sIGFuZCB0aGF0XG4gICAgLy8gbWVhbnMgdGhhdCBzb21lIG9mIHRoZSBgZm9yYCBsb29wcyB5b3Ugc2VlIGJlbG93IGFjdHVhbGx5IGp1c3QgZG9uJ3QgYXBwbHlcbiAgICAvLyB0byBjZXJ0YWluIGlucHV0cy4gRm9yIGluc3RhbmNlLCBpZiB5b3UgZ2l2ZSB0aGlzIGp1c3QgYVxuICAgIC8vIFBvaW50IGdlb21ldHJ5LCB0aGVuIGJvdGggbG9vcHMgYXJlIHNob3J0LWNpcmN1aXRlZCBhbmQgYWxsIHdlIGRvXG4gICAgLy8gaXMgZ3JhZHVhbGx5IHJlbmFtZSB0aGUgaW5wdXQgdW50aWwgaXQncyBjYWxsZWQgJ2dlb21ldHJ5Jy5cbiAgICAvL1xuICAgIC8vIFRoaXMgYWxzbyBhaW1zIHRvIGFsbG9jYXRlIGFzIGZldyByZXNvdXJjZXMgYXMgcG9zc2libGU6IGp1c3QgYVxuICAgIC8vIGZldyBudW1iZXJzIGFuZCBib29sZWFucywgcmF0aGVyIHRoYW4gYW55IHRlbXBvcmFyeSBhcnJheXMgYXMgd291bGRcbiAgICAvLyBiZSByZXF1aXJlZCB3aXRoIHRoZSBub3JtYWxpemF0aW9uIGFwcHJvYWNoLlxuICAgIGZvciAoaSA9IDA7IGkgPCBzdG9wOyBpKyspIHtcblxuICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbiA9IChpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tpXS5nZW9tZXRyeSA6XG4gICAgICAgICAgICAoaXNGZWF0dXJlID8gZ2VvanNvbi5nZW9tZXRyeSA6IGdlb2pzb24pKTtcbiAgICAgICAgZmVhdHVyZVByb3BlcnRpZXMgPSAoaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbaV0ucHJvcGVydGllcyA6XG4gICAgICAgICAgICAoaXNGZWF0dXJlID8gZ2VvanNvbi5wcm9wZXJ0aWVzIDoge30pKTtcbiAgICAgICAgZmVhdHVyZUJCb3ggPSAoaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbaV0uYmJveCA6XG4gICAgICAgICAgICAoaXNGZWF0dXJlID8gZ2VvanNvbi5iYm94IDogdW5kZWZpbmVkKSk7XG4gICAgICAgIGZlYXR1cmVJZCA9IChpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tpXS5pZCA6XG4gICAgICAgICAgICAoaXNGZWF0dXJlID8gZ2VvanNvbi5pZCA6IHVuZGVmaW5lZCkpO1xuICAgICAgICBpc0dlb21ldHJ5Q29sbGVjdGlvbiA9IChnZW9tZXRyeU1heWJlQ29sbGVjdGlvbikgPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi50eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJyA6IGZhbHNlO1xuICAgICAgICBzdG9wRyA9IGlzR2VvbWV0cnlDb2xsZWN0aW9uID8gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24uZ2VvbWV0cmllcy5sZW5ndGggOiAxO1xuXG4gICAgICAgIGZvciAoZyA9IDA7IGcgPCBzdG9wRzsgZysrKSB7XG4gICAgICAgICAgICBnZW9tZXRyeSA9IGlzR2VvbWV0cnlDb2xsZWN0aW9uID9cbiAgICAgICAgICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi5nZW9tZXRyaWVzW2ddIDogZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb247XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSBudWxsIEdlb21ldHJ5XG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sobnVsbCwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKGdlb21ldHJ5LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICAgICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgICAgICBjYXNlICdNdWx0aVBvbHlnb24nOiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0dlb21ldHJ5Q29sbGVjdGlvbic6IHtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soZ2VvbWV0cnkuZ2VvbWV0cmllc1tqXSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gR2VvbWV0cnkgVHlwZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE9ubHkgaW5jcmVhc2UgYGZlYXR1cmVJbmRleGAgcGVyIGVhY2ggZmVhdHVyZVxuICAgICAgICBmZWF0dXJlSW5kZXgrKztcbiAgICB9XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGdlb21SZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBnZW9tUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0dlb21ldHJ5fSBjdXJyZW50R2VvbWV0cnkgVGhlIGN1cnJlbnQgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gZmVhdHVyZVByb3BlcnRpZXMgVGhlIGN1cnJlbnQgRmVhdHVyZSBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gZmVhdHVyZUJCb3ggVGhlIGN1cnJlbnQgRmVhdHVyZSBCQm94IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmVhdHVyZUlkIFRoZSBjdXJyZW50IEZlYXR1cmUgSWQgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIGdlb21ldHJ5IGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKS5cbiAqXG4gKiBAbmFtZSBnZW9tUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZ2VvbVJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRHZW9tZXRyeVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89ZmVhdHVyZVByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUJCb3hcbiAqICAgLy89ZmVhdHVyZUlkXG4gKiAgIHJldHVybiBjdXJyZW50R2VvbWV0cnlcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBnZW9tUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBnZW9tRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSB7XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50R2VvbWV0cnk7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZsYXR0ZW5FYWNoXG4gKlxuICogQGNhbGxiYWNrIGZsYXR0ZW5FYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RmVhdHVyZX0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgZmxhdHRlbmVkIGZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGZsYXR0ZW5lZCBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG9cbiAqIEFycmF5LmZvckVhY2guXG4gKlxuICogQG5hbWUgZmxhdHRlbkVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5tdWx0aVBvaW50KFtbNDAsIDMwXSwgWzM2LCA1M11dLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5mbGF0dGVuRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5FYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgZ2VvbUVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIHByb3BlcnRpZXMsIGJib3gsIGlkKSB7XG4gICAgICAgIC8vIENhbGxiYWNrIGZvciBzaW5nbGUgZ2VvbWV0cnlcbiAgICAgICAgdmFyIHR5cGUgPSAoZ2VvbWV0cnkgPT09IG51bGwpID8gbnVsbCA6IGdlb21ldHJ5LnR5cGU7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGhlbHBlcnMuZmVhdHVyZShnZW9tZXRyeSwgcHJvcGVydGllcywge2Jib3g6IGJib3gsIGlkOiBpZH0pLCBmZWF0dXJlSW5kZXgsIDApID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGdlb21UeXBlO1xuXG4gICAgICAgIC8vIENhbGxiYWNrIGZvciBtdWx0aS1nZW9tZXRyeVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgICAgICBnZW9tVHlwZSA9ICdQb2ludCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgIGdlb21UeXBlID0gJ0xpbmVTdHJpbmcnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgICAgICBnZW9tVHlwZSA9ICdQb2x5Z29uJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgbXVsdGlGZWF0dXJlSW5kZXggPSAwOyBtdWx0aUZlYXR1cmVJbmRleCA8IGdlb21ldHJ5LmNvb3JkaW5hdGVzLmxlbmd0aDsgbXVsdGlGZWF0dXJlSW5kZXgrKykge1xuICAgICAgICAgICAgdmFyIGNvb3JkaW5hdGUgPSBnZW9tZXRyeS5jb29yZGluYXRlc1ttdWx0aUZlYXR1cmVJbmRleF07XG4gICAgICAgICAgICB2YXIgZ2VvbSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBnZW9tVHlwZSxcbiAgICAgICAgICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhoZWxwZXJzLmZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcyksIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZsYXR0ZW5SZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBmbGF0dGVuUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0ZlYXR1cmV9IGN1cnJlbnRGZWF0dXJlIFRoZSBjdXJyZW50IEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIGZsYXR0ZW5lZCBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKCkuXG4gKlxuICogQG5hbWUgZmxhdHRlblJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5tdWx0aVBvaW50KFtbNDAsIDMwXSwgWzM2LCA1M11dLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5mbGF0dGVuUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50RmVhdHVyZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRGZWF0dXJlXG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgZmxhdHRlbkVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPT09IDAgJiYgbXVsdGlGZWF0dXJlSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50RmVhdHVyZTtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBzZWdtZW50RWFjaFxuICpcbiAqIEBjYWxsYmFjayBzZWdtZW50RWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmU8TGluZVN0cmluZz59IGN1cnJlbnRTZWdtZW50IFRoZSBjdXJyZW50IFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWdtZW50SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgMi12ZXJ0ZXggbGluZSBzZWdtZW50IGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqIChNdWx0aSlQb2ludCBnZW9tZXRyaWVzIGRvIG5vdCBjb250YWluIHNlZ21lbnRzIHRoZXJlZm9yZSB0aGV5IGFyZSBpZ25vcmVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT05cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbiA9IHR1cmYucG9seWdvbihbW1stNTAsIDVdLCBbLTQwLCAtMTBdLCBbLTUwLCAtMTBdLCBbLTQwLCA1XSwgWy01MCwgNV1dXSk7XG4gKlxuICogLy8gSXRlcmF0ZSBvdmVyIEdlb0pTT04gYnkgMi12ZXJ0ZXggc2VnbWVudHNcbiAqIHR1cmYuc2VnbWVudEVhY2gocG9seWdvbiwgZnVuY3Rpb24gKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpIHtcbiAqICAgLy89Y3VycmVudFNlZ21lbnRcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqICAgLy89c2VnbWVudEluZGV4XG4gKiB9KTtcbiAqXG4gKiAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBzZWdtZW50c1xuICogdmFyIHRvdGFsID0gMDtcbiAqIHR1cmYuc2VnbWVudEVhY2gocG9seWdvbiwgZnVuY3Rpb24gKCkge1xuICogICAgIHRvdGFsKys7XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gc2VnbWVudEVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICBmbGF0dGVuRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoZmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICAgICAgICB2YXIgc2VnbWVudEluZGV4ID0gMDtcblxuICAgICAgICAvLyBFeGNsdWRlIG51bGwgR2VvbWV0cmllc1xuICAgICAgICBpZiAoIWZlYXR1cmUuZ2VvbWV0cnkpIHJldHVybjtcbiAgICAgICAgLy8gKE11bHRpKVBvaW50IGdlb21ldHJpZXMgZG8gbm90IGNvbnRhaW4gc2VnbWVudHMgdGhlcmVmb3JlIHRoZXkgYXJlIGlnbm9yZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAgICB2YXIgdHlwZSA9IGZlYXR1cmUuZ2VvbWV0cnkudHlwZTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdQb2ludCcgfHwgdHlwZSA9PT0gJ011bHRpUG9pbnQnKSByZXR1cm47XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgMi12ZXJ0ZXggbGluZSBzZWdtZW50c1xuICAgICAgICB2YXIgcHJldmlvdXNDb29yZHM7XG4gICAgICAgIHZhciBwcmV2aW91c0ZlYXR1cmVJbmRleCA9IDA7XG4gICAgICAgIHZhciBwcmV2aW91c011bHRpSW5kZXggPSAwO1xuICAgICAgICB2YXIgcHJldkdlb21JbmRleCA9IDA7XG4gICAgICAgIGlmIChjb29yZEVhY2goZmVhdHVyZSwgZnVuY3Rpb24gKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4Q29vcmQsIG11bHRpUGFydEluZGV4Q29vcmQsIGdlb21ldHJ5SW5kZXgpIHtcbiAgICAgICAgICAgIC8vIFNpbXVsYXRpbmcgYSBtZXRhLmNvb3JkUmVkdWNlKCkgc2luY2UgYHJlZHVjZWAgb3BlcmF0aW9ucyBjYW5ub3QgYmUgc3RvcHBlZCBieSByZXR1cm5pbmcgYGZhbHNlYFxuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ29vcmRzID09PSB1bmRlZmluZWQgfHwgZmVhdHVyZUluZGV4ID4gcHJldmlvdXNGZWF0dXJlSW5kZXggfHwgbXVsdGlQYXJ0SW5kZXhDb29yZCA+IHByZXZpb3VzTXVsdGlJbmRleCB8fCBnZW9tZXRyeUluZGV4ID4gcHJldkdlb21JbmRleCkge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzQ29vcmRzID0gY3VycmVudENvb3JkO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzRmVhdHVyZUluZGV4ID0gZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIHByZXZpb3VzTXVsdGlJbmRleCA9IG11bHRpUGFydEluZGV4Q29vcmQ7XG4gICAgICAgICAgICAgICAgcHJldkdlb21JbmRleCA9IGdlb21ldHJ5SW5kZXg7XG4gICAgICAgICAgICAgICAgc2VnbWVudEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY3VycmVudFNlZ21lbnQgPSBoZWxwZXJzLmxpbmVTdHJpbmcoW3ByZXZpb3VzQ29vcmRzLCBjdXJyZW50Q29vcmRdLCBmZWF0dXJlLnByb3BlcnRpZXMpO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgc2VnbWVudEluZGV4Kys7XG4gICAgICAgICAgICBwcmV2aW91c0Nvb3JkcyA9IGN1cnJlbnRDb29yZDtcbiAgICAgICAgfSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHNlZ21lbnRSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBzZWdtZW50UmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0ZlYXR1cmU8TGluZVN0cmluZz59IGN1cnJlbnRTZWdtZW50IFRoZSBjdXJyZW50IFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWdtZW50SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIDItdmVydGV4IGxpbmUgc2VnbWVudCBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKClcbiAqIChNdWx0aSlQb2ludCBnZW9tZXRyaWVzIGRvIG5vdCBjb250YWluIHNlZ21lbnRzIHRoZXJlZm9yZSB0aGV5IGFyZSBpZ25vcmVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT05cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRTZWdtZW50LCBjdXJyZW50SW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW1tbLTUwLCA1XSwgWy00MCwgLTEwXSwgWy01MCwgLTEwXSwgWy00MCwgNV0sIFstNTAsIDVdXV0pO1xuICpcbiAqIC8vIEl0ZXJhdGUgb3ZlciBHZW9KU09OIGJ5IDItdmVydGV4IHNlZ21lbnRzXG4gKiB0dXJmLnNlZ21lbnRSZWR1Y2UocG9seWdvbiwgZnVuY3Rpb24gKHByZXZpb3VzU2VnbWVudCwgY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCkge1xuICogICAvLz0gcHJldmlvdXNTZWdtZW50XG4gKiAgIC8vPSBjdXJyZW50U2VnbWVudFxuICogICAvLz0gZmVhdHVyZUluZGV4XG4gKiAgIC8vPSBtdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz0gZ2VvbWV0cnlJbmRleFxuICogICAvLz0gc2VnbWVudEluZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRTZWdtZW50XG4gKiB9KTtcbiAqXG4gKiAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBzZWdtZW50c1xuICogdmFyIGluaXRpYWxWYWx1ZSA9IDBcbiAqIHZhciB0b3RhbCA9IHR1cmYuc2VnbWVudFJlZHVjZShwb2x5Z29uLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSkge1xuICogICAgIHByZXZpb3VzVmFsdWUrKztcbiAqICAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbiAqIH0sIGluaXRpYWxWYWx1ZSk7XG4gKi9cbmZ1bmN0aW9uIHNlZ21lbnRSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIHZhciBzdGFydGVkID0gZmFsc2U7XG4gICAgc2VnbWVudEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpIHtcbiAgICAgICAgaWYgKHN0YXJ0ZWQgPT09IGZhbHNlICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudFNlZ21lbnQ7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpO1xuICAgICAgICBzdGFydGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgbGluZUVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgbGluZUVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50TGluZSBUaGUgY3VycmVudCBMaW5lU3RyaW5nfExpbmVhclJpbmcgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZFxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGxpbmUgb3IgcmluZyBjb29yZGluYXRlcyBpbiBMaW5lU3RyaW5nLCBQb2x5Z29uLCBNdWx0aUxpbmVTdHJpbmcsIE11bHRpUG9seWdvbiBGZWF0dXJlcyBvciBHZW9tZXRyaWVzLFxuICogc2ltaWxhciB0byBBcnJheS5mb3JFYWNoLlxuICpcbiAqIEBuYW1lIGxpbmVFYWNoXG4gKiBAcGFyYW0ge0dlb21ldHJ5fEZlYXR1cmU8TGluZVN0cmluZ3xQb2x5Z29ufE11bHRpTGluZVN0cmluZ3xNdWx0aVBvbHlnb24+fSBnZW9qc29uIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtcbiAqICAgW1syNiwgMzddLCBbMzUsIDQ1XV0sXG4gKiAgIFtbMzYsIDUzXSwgWzM4LCA1MF0sIFs0MSwgNTVdXVxuICogXSk7XG4gKlxuICogdHVyZi5saW5lRWFjaChtdWx0aUxpbmUsIGZ1bmN0aW9uIChjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICogICAvLz1jdXJyZW50TGluZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGxpbmVFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgLy8gdmFsaWRhdGlvblxuICAgIGlmICghZ2VvanNvbikgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIHJlcXVpcmVkJyk7XG5cbiAgICBmbGF0dGVuRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoZmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICAgICAgICBpZiAoZmVhdHVyZS5nZW9tZXRyeSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICB2YXIgdHlwZSA9IGZlYXR1cmUuZ2VvbWV0cnkudHlwZTtcbiAgICAgICAgdmFyIGNvb3JkcyA9IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhmZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCAwLCAwKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgICAgIGZvciAodmFyIGdlb21ldHJ5SW5kZXggPSAwOyBnZW9tZXRyeUluZGV4IDwgY29vcmRzLmxlbmd0aDsgZ2VvbWV0cnlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGhlbHBlcnMubGluZVN0cmluZyhjb29yZHNbZ2VvbWV0cnlJbmRleF0sIGZlYXR1cmUucHJvcGVydGllcyksIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgbGluZVJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGxpbmVSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gY3VycmVudExpbmUgVGhlIGN1cnJlbnQgTGluZVN0cmluZ3xMaW5lYXJSaW5nIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpLlxuICpcbiAqIEBuYW1lIGxpbmVSZWR1Y2VcbiAqIEBwYXJhbSB7R2VvbWV0cnl8RmVhdHVyZTxMaW5lU3RyaW5nfFBvbHlnb258TXVsdGlMaW5lU3RyaW5nfE11bHRpUG9seWdvbj59IGdlb2pzb24gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpUG9seSA9IHR1cmYubXVsdGlQb2x5Z29uKFtcbiAqICAgdHVyZi5wb2x5Z29uKFtbWzEyLDQ4XSxbMiw0MV0sWzI0LDM4XSxbMTIsNDhdXSwgW1s5LDQ0XSxbMTMsNDFdLFsxMyw0NV0sWzksNDRdXV0pLFxuICogICB0dXJmLnBvbHlnb24oW1tbNSwgNV0sIFswLCAwXSwgWzIsIDJdLCBbNCwgNF0sIFs1LCA1XV1dKVxuICogXSk7XG4gKlxuICogdHVyZi5saW5lUmVkdWNlKG11bHRpUG9seSwgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudExpbmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRMaW5lXG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gbGluZVJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgbGluZUVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50TGluZTtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIEZpbmRzIGEgcGFydGljdWxhciAyLXZlcnRleCBMaW5lU3RyaW5nIFNlZ21lbnQgZnJvbSBhIEdlb0pTT04gdXNpbmcgYEB0dXJmL21ldGFgIGluZGV4ZXMuXG4gKlxuICogTmVnYXRpdmUgaW5kZXhlcyBhcmUgcGVybWl0dGVkLlxuICogUG9pbnQgJiBNdWx0aVBvaW50IHdpbGwgYWx3YXlzIHJldHVybiBudWxsLlxuICpcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBBbnkgR2VvSlNPTiBGZWF0dXJlIG9yIEdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5mZWF0dXJlSW5kZXg9MF0gRmVhdHVyZSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm11bHRpRmVhdHVyZUluZGV4PTBdIE11bHRpLUZlYXR1cmUgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5nZW9tZXRyeUluZGV4PTBdIEdlb21ldHJ5IEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2VnbWVudEluZGV4PTBdIFNlZ21lbnQgSW5kZXhcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5wcm9wZXJ0aWVzPXt9XSBUcmFuc2xhdGUgUHJvcGVydGllcyB0byBvdXRwdXQgTGluZVN0cmluZ1xuICogQHBhcmFtIHtCQm94fSBbb3B0aW9ucy5iYm94PXt9XSBUcmFuc2xhdGUgQkJveCB0byBvdXRwdXQgTGluZVN0cmluZ1xuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBbb3B0aW9ucy5pZD17fV0gVHJhbnNsYXRlIElkIHRvIG91dHB1dCBMaW5lU3RyaW5nXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gMi12ZXJ0ZXggR2VvSlNPTiBGZWF0dXJlIExpbmVTdHJpbmdcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1xuICogICAgIFtbMTAsIDEwXSwgWzUwLCAzMF0sIFszMCwgNDBdXSxcbiAqICAgICBbWy0xMCwgLTEwXSwgWy01MCwgLTMwXSwgWy0zMCwgLTQwXV1cbiAqIF0pO1xuICpcbiAqIC8vIEZpcnN0IFNlZ21lbnQgKGRlZmF1bHRzIGFyZSAwKVxuICogdHVyZi5maW5kU2VnbWVudChtdWx0aUxpbmUpO1xuICogLy8gPT4gRmVhdHVyZTxMaW5lU3RyaW5nPFtbMTAsIDEwXSwgWzUwLCAzMF1dPj5cbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IG9mIDJuZCBNdWx0aSBGZWF0dXJlXG4gKiB0dXJmLmZpbmRTZWdtZW50KG11bHRpTGluZSwge211bHRpRmVhdHVyZUluZGV4OiAxfSk7XG4gKiAvLyA9PiBGZWF0dXJlPExpbmVTdHJpbmc8W1stMTAsIC0xMF0sIFstNTAsIC0zMF1dPj5cbiAqXG4gKiAvLyBMYXN0IFNlZ21lbnQgb2YgTGFzdCBNdWx0aSBGZWF0dXJlXG4gKiB0dXJmLmZpbmRTZWdtZW50KG11bHRpTGluZSwge211bHRpRmVhdHVyZUluZGV4OiAtMSwgc2VnbWVudEluZGV4OiAtMX0pO1xuICogLy8gPT4gRmVhdHVyZTxMaW5lU3RyaW5nPFtbLTUwLCAtMzBdLCBbLTMwLCAtNDBdXT4+XG4gKi9cbmZ1bmN0aW9uIGZpbmRTZWdtZW50KGdlb2pzb24sIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFoZWxwZXJzLmlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciBmZWF0dXJlSW5kZXggPSBvcHRpb25zLmZlYXR1cmVJbmRleCB8fCAwO1xuICAgIHZhciBtdWx0aUZlYXR1cmVJbmRleCA9IG9wdGlvbnMubXVsdGlGZWF0dXJlSW5kZXggfHwgMDtcbiAgICB2YXIgZ2VvbWV0cnlJbmRleCA9IG9wdGlvbnMuZ2VvbWV0cnlJbmRleCB8fCAwO1xuICAgIHZhciBzZWdtZW50SW5kZXggPSBvcHRpb25zLnNlZ21lbnRJbmRleCB8fCAwO1xuXG4gICAgLy8gRmluZCBGZWF0dXJlSW5kZXhcbiAgICB2YXIgcHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgICB2YXIgZ2VvbWV0cnk7XG5cbiAgICBzd2l0Y2ggKGdlb2pzb24udHlwZSkge1xuICAgIGNhc2UgJ0ZlYXR1cmVDb2xsZWN0aW9uJzpcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA8IDApIGZlYXR1cmVJbmRleCA9IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoICsgZmVhdHVyZUluZGV4O1xuICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0ucHJvcGVydGllcztcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0uZ2VvbWV0cnk7XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0ZlYXR1cmUnOlxuICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCBnZW9qc29uLnByb3BlcnRpZXM7XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbi5nZW9tZXRyeTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUG9pbnQnOlxuICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICBjYXNlICdQb2x5Z29uJzpcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIFNlZ21lbnRJbmRleFxuICAgIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGNvb3JkcyA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgIHN3aXRjaCAoZ2VvbWV0cnkudHlwZSkge1xuICAgIGNhc2UgJ1BvaW50JzpcbiAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHMubGVuZ3RoICsgc2VnbWVudEluZGV4IC0gMTtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMubGluZVN0cmluZyhbY29vcmRzW3NlZ21lbnRJbmRleF0sIGNvb3Jkc1tzZWdtZW50SW5kZXggKyAxXV0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICBpZiAoZ2VvbWV0cnlJbmRleCA8IDApIGdlb21ldHJ5SW5kZXggPSBjb29yZHMubGVuZ3RoICsgZ2VvbWV0cnlJbmRleDtcbiAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA8IDApIHNlZ21lbnRJbmRleCA9IGNvb3Jkc1tnZW9tZXRyeUluZGV4XS5sZW5ndGggKyBzZWdtZW50SW5kZXggLSAxO1xuICAgICAgICByZXR1cm4gaGVscGVycy5saW5lU3RyaW5nKFtjb29yZHNbZ2VvbWV0cnlJbmRleF1bc2VnbWVudEluZGV4XSwgY29vcmRzW2dlb21ldHJ5SW5kZXhdW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIHNlZ21lbnRJbmRleCAtIDE7XG4gICAgICAgIHJldHVybiBoZWxwZXJzLmxpbmVTdHJpbmcoW2Nvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bc2VnbWVudEluZGV4XSwgY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtzZWdtZW50SW5kZXggKyAxXV0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoZ2VvbWV0cnlJbmRleCA8IDApIGdlb21ldHJ5SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCAtIHNlZ21lbnRJbmRleCAtIDE7XG4gICAgICAgIHJldHVybiBoZWxwZXJzLmxpbmVTdHJpbmcoW2Nvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF1bc2VnbWVudEluZGV4XSwgY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XVtzZWdtZW50SW5kZXggKyAxXV0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgaW52YWxpZCcpO1xufVxuXG4vKipcbiAqIEZpbmRzIGEgcGFydGljdWxhciBQb2ludCBmcm9tIGEgR2VvSlNPTiB1c2luZyBgQHR1cmYvbWV0YWAgaW5kZXhlcy5cbiAqXG4gKiBOZWdhdGl2ZSBpbmRleGVzIGFyZSBwZXJtaXR0ZWQuXG4gKlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIEFueSBHZW9KU09OIEZlYXR1cmUgb3IgR2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmZlYXR1cmVJbmRleD0wXSBGZWF0dXJlIEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubXVsdGlGZWF0dXJlSW5kZXg9MF0gTXVsdGktRmVhdHVyZSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmdlb21ldHJ5SW5kZXg9MF0gR2VvbWV0cnkgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5jb29yZEluZGV4PTBdIENvb3JkIEluZGV4XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucHJvcGVydGllcz17fV0gVHJhbnNsYXRlIFByb3BlcnRpZXMgdG8gb3V0cHV0IFBvaW50XG4gKiBAcGFyYW0ge0JCb3h9IFtvcHRpb25zLmJib3g9e31dIFRyYW5zbGF0ZSBCQm94IHRvIG91dHB1dCBQb2ludFxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBbb3B0aW9ucy5pZD17fV0gVHJhbnNsYXRlIElkIHRvIG91dHB1dCBQb2ludFxuICogQHJldHVybnMge0ZlYXR1cmU8UG9pbnQ+fSAyLXZlcnRleCBHZW9KU09OIEZlYXR1cmUgUG9pbnRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1xuICogICAgIFtbMTAsIDEwXSwgWzUwLCAzMF0sIFszMCwgNDBdXSxcbiAqICAgICBbWy0xMCwgLTEwXSwgWy01MCwgLTMwXSwgWy0zMCwgLTQwXV1cbiAqIF0pO1xuICpcbiAqIC8vIEZpcnN0IFNlZ21lbnQgKGRlZmF1bHRzIGFyZSAwKVxuICogdHVyZi5maW5kUG9pbnQobXVsdGlMaW5lKTtcbiAqIC8vID0+IEZlYXR1cmU8UG9pbnQ8WzEwLCAxMF0+PlxuICpcbiAqIC8vIEZpcnN0IFNlZ21lbnQgb2YgdGhlIDJuZCBNdWx0aS1GZWF0dXJlXG4gKiB0dXJmLmZpbmRQb2ludChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogMX0pO1xuICogLy8gPT4gRmVhdHVyZTxQb2ludDxbLTEwLCAtMTBdPj5cbiAqXG4gKiAvLyBMYXN0IFNlZ21lbnQgb2YgbGFzdCBNdWx0aS1GZWF0dXJlXG4gKiB0dXJmLmZpbmRQb2ludChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogLTEsIGNvb3JkSW5kZXg6IC0xfSk7XG4gKiAvLyA9PiBGZWF0dXJlPFBvaW50PFstMzAsIC00MF0+PlxuICovXG5mdW5jdGlvbiBmaW5kUG9pbnQoZ2VvanNvbiwgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWhlbHBlcnMuaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIGZlYXR1cmVJbmRleCA9IG9wdGlvbnMuZmVhdHVyZUluZGV4IHx8IDA7XG4gICAgdmFyIG11bHRpRmVhdHVyZUluZGV4ID0gb3B0aW9ucy5tdWx0aUZlYXR1cmVJbmRleCB8fCAwO1xuICAgIHZhciBnZW9tZXRyeUluZGV4ID0gb3B0aW9ucy5nZW9tZXRyeUluZGV4IHx8IDA7XG4gICAgdmFyIGNvb3JkSW5kZXggPSBvcHRpb25zLmNvb3JkSW5kZXggfHwgMDtcblxuICAgIC8vIEZpbmQgRmVhdHVyZUluZGV4XG4gICAgdmFyIHByb3BlcnRpZXMgPSBvcHRpb25zLnByb3BlcnRpZXM7XG4gICAgdmFyIGdlb21ldHJ5O1xuXG4gICAgc3dpdGNoIChnZW9qc29uLnR5cGUpIHtcbiAgICBjYXNlICdGZWF0dXJlQ29sbGVjdGlvbic6XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPCAwKSBmZWF0dXJlSW5kZXggPSBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aCArIGZlYXR1cmVJbmRleDtcbiAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwgZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLnByb3BlcnRpZXM7XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLmdlb21ldHJ5O1xuICAgICAgICBicmVhaztcbiAgICBjYXNlICdGZWF0dXJlJzpcbiAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwgZ2VvanNvbi5wcm9wZXJ0aWVzO1xuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb24uZ2VvbWV0cnk7XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BvaW50JzpcbiAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb247XG4gICAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLy8gRmluZCBDb29yZCBJbmRleFxuICAgIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGNvb3JkcyA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgIHN3aXRjaCAoZ2VvbWV0cnkudHlwZSkge1xuICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMucG9pbnQoY29vcmRzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICAgIHJldHVybiBoZWxwZXJzLnBvaW50KGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHMubGVuZ3RoICsgY29vcmRJbmRleDtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMucG9pbnQoY29vcmRzW2Nvb3JkSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgaWYgKGdlb21ldHJ5SW5kZXggPCAwKSBnZW9tZXRyeUluZGV4ID0gY29vcmRzLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICAgIGlmIChjb29yZEluZGV4IDwgMCkgY29vcmRJbmRleCA9IGNvb3Jkc1tnZW9tZXRyeUluZGV4XS5sZW5ndGggKyBjb29yZEluZGV4O1xuICAgICAgICByZXR1cm4gaGVscGVycy5wb2ludChjb29yZHNbZ2VvbWV0cnlJbmRleF1bY29vcmRJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIGNvb3JkSW5kZXg7XG4gICAgICAgIHJldHVybiBoZWxwZXJzLnBvaW50KGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bY29vcmRJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoZ2VvbWV0cnlJbmRleCA8IDApIGdlb21ldHJ5SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICAgIGlmIChjb29yZEluZGV4IDwgMCkgY29vcmRJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF0ubGVuZ3RoIC0gY29vcmRJbmRleDtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMucG9pbnQoY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XVtjb29yZEluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyBpbnZhbGlkJyk7XG59XG5cbmV4cG9ydHMuY29vcmRFYWNoID0gY29vcmRFYWNoO1xuZXhwb3J0cy5jb29yZFJlZHVjZSA9IGNvb3JkUmVkdWNlO1xuZXhwb3J0cy5wcm9wRWFjaCA9IHByb3BFYWNoO1xuZXhwb3J0cy5wcm9wUmVkdWNlID0gcHJvcFJlZHVjZTtcbmV4cG9ydHMuZmVhdHVyZUVhY2ggPSBmZWF0dXJlRWFjaDtcbmV4cG9ydHMuZmVhdHVyZVJlZHVjZSA9IGZlYXR1cmVSZWR1Y2U7XG5leHBvcnRzLmNvb3JkQWxsID0gY29vcmRBbGw7XG5leHBvcnRzLmdlb21FYWNoID0gZ2VvbUVhY2g7XG5leHBvcnRzLmdlb21SZWR1Y2UgPSBnZW9tUmVkdWNlO1xuZXhwb3J0cy5mbGF0dGVuRWFjaCA9IGZsYXR0ZW5FYWNoO1xuZXhwb3J0cy5mbGF0dGVuUmVkdWNlID0gZmxhdHRlblJlZHVjZTtcbmV4cG9ydHMuc2VnbWVudEVhY2ggPSBzZWdtZW50RWFjaDtcbmV4cG9ydHMuc2VnbWVudFJlZHVjZSA9IHNlZ21lbnRSZWR1Y2U7XG5leHBvcnRzLmxpbmVFYWNoID0gbGluZUVhY2g7XG5leHBvcnRzLmxpbmVSZWR1Y2UgPSBsaW5lUmVkdWNlO1xuZXhwb3J0cy5maW5kU2VnbWVudCA9IGZpbmRTZWdtZW50O1xuZXhwb3J0cy5maW5kUG9pbnQgPSBmaW5kUG9pbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgbWFydGluZXogPSByZXF1aXJlKFwibWFydGluZXotcG9seWdvbi1jbGlwcGluZ1wiKTtcclxudmFyIGludmFyaWFudF8xID0gcmVxdWlyZShcIkB0dXJmL2ludmFyaWFudFwiKTtcclxudmFyIGhlbHBlcnNfMSA9IHJlcXVpcmUoXCJAdHVyZi9oZWxwZXJzXCIpO1xyXG4vKipcclxuICogVGFrZXMgdHdvIHtAbGluayAoTXVsdGkpUG9seWdvbihzKX0gYW5kIHJldHVybnMgYSBjb21iaW5lZCBwb2x5Z29uLiBJZiB0aGUgaW5wdXQgcG9seWdvbnMgYXJlIG5vdCBjb250aWd1b3VzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSB7QGxpbmsgTXVsdGlQb2x5Z29ufSBmZWF0dXJlLlxyXG4gKlxyXG4gKiBAbmFtZSB1bmlvblxyXG4gKiBAcGFyYW0ge0ZlYXR1cmU8UG9seWdvbnxNdWx0aVBvbHlnb24+fSBwb2x5Z29uMSBpbnB1dCBQb2x5Z29uIGZlYXR1cmVcclxuICogQHBhcmFtIHtGZWF0dXJlPFBvbHlnb258TXVsdGlQb2x5Z29uPn0gcG9seWdvbjIgUG9seWdvbiBmZWF0dXJlIHRvIGRpZmZlcmVuY2UgZnJvbSBwb2x5Z29uMVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnByb3BlcnRpZXM9e31dIFRyYW5zbGF0ZSBQcm9wZXJ0aWVzIHRvIG91dHB1dCBGZWF0dXJlXHJcbiAqIEByZXR1cm5zIHtGZWF0dXJlPChQb2x5Z29ufE11bHRpUG9seWdvbik+fSBhIGNvbWJpbmVkIHtAbGluayBQb2x5Z29ufSBvciB7QGxpbmsgTXVsdGlQb2x5Z29ufSBmZWF0dXJlXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBwb2x5MSA9IHR1cmYucG9seWdvbihbW1xyXG4gKiAgICAgWy04Mi41NzQ3ODcsIDM1LjU5NDA4N10sXHJcbiAqICAgICBbLTgyLjU3NDc4NywgMzUuNjE1NTgxXSxcclxuICogICAgIFstODIuNTQ1MjYxLCAzNS42MTU1ODFdLFxyXG4gKiAgICAgWy04Mi41NDUyNjEsIDM1LjU5NDA4N10sXHJcbiAqICAgICBbLTgyLjU3NDc4NywgMzUuNTk0MDg3XVxyXG4gKiBdXSwge1wiZmlsbFwiOiBcIiMwZjBcIn0pO1xyXG4gKiB2YXIgcG9seTIgPSB0dXJmLnBvbHlnb24oW1tcclxuICogICAgIFstODIuNTYwMDI0LCAzNS41ODUxNTNdLFxyXG4gKiAgICAgWy04Mi41NjAwMjQsIDM1LjYwMjYwMl0sXHJcbiAqICAgICBbLTgyLjUyOTY0LCAzNS42MDI2MDJdLFxyXG4gKiAgICAgWy04Mi41Mjk2NCwgMzUuNTg1MTUzXSxcclxuICogICAgIFstODIuNTYwMDI0LCAzNS41ODUxNTNdXHJcbiAqIF1dLCB7XCJmaWxsXCI6IFwiIzAwZlwifSk7XHJcbiAqXHJcbiAqIHZhciB1bmlvbiA9IHR1cmYudW5pb24ocG9seTEsIHBvbHkyKTtcclxuICpcclxuICogLy9hZGRUb01hcFxyXG4gKiB2YXIgYWRkVG9NYXAgPSBbcG9seTEsIHBvbHkyLCB1bmlvbl07XHJcbiAqL1xyXG5mdW5jdGlvbiB1bmlvbihwb2x5Z29uMSwgcG9seWdvbjIsIG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICB2YXIgY29vcmRzMSA9IGludmFyaWFudF8xLmdldEdlb20ocG9seWdvbjEpLmNvb3JkaW5hdGVzO1xyXG4gICAgdmFyIGNvb3JkczIgPSBpbnZhcmlhbnRfMS5nZXRHZW9tKHBvbHlnb24yKS5jb29yZGluYXRlcztcclxuICAgIHZhciB1bmlvbmVkID0gbWFydGluZXoudW5pb24oY29vcmRzMSwgY29vcmRzMik7XHJcbiAgICBpZiAodW5pb25lZC5sZW5ndGggPT09IDApXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAodW5pb25lZC5sZW5ndGggPT09IDEpXHJcbiAgICAgICAgcmV0dXJuIGhlbHBlcnNfMS5wb2x5Z29uKHVuaW9uZWRbMF0sIG9wdGlvbnMucHJvcGVydGllcyk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIGhlbHBlcnNfMS5tdWx0aVBvbHlnb24odW5pb25lZCwgb3B0aW9ucy5wcm9wZXJ0aWVzKTtcclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSB1bmlvbjtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGhlbHBlcnNfMSA9IHJlcXVpcmUoXCJAdHVyZi9oZWxwZXJzXCIpO1xyXG4vKipcclxuICogVW53cmFwIGEgY29vcmRpbmF0ZSBmcm9tIGEgUG9pbnQgRmVhdHVyZSwgR2VvbWV0cnkgb3IgYSBzaW5nbGUgY29vcmRpbmF0ZS5cclxuICpcclxuICogQG5hbWUgZ2V0Q29vcmRcclxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fEdlb21ldHJ5PFBvaW50PnxGZWF0dXJlPFBvaW50Pn0gY29vcmQgR2VvSlNPTiBQb2ludCBvciBhbiBBcnJheSBvZiBudW1iZXJzXHJcbiAqIEByZXR1cm5zIHtBcnJheTxudW1iZXI+fSBjb29yZGluYXRlc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcHQgPSB0dXJmLnBvaW50KFsxMCwgMTBdKTtcclxuICpcclxuICogdmFyIGNvb3JkID0gdHVyZi5nZXRDb29yZChwdCk7XHJcbiAqIC8vPSBbMTAsIDEwXVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0Q29vcmQoY29vcmQpIHtcclxuICAgIGlmICghY29vcmQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb29yZCBpcyByZXF1aXJlZFwiKTtcclxuICAgIH1cclxuICAgIGlmICghQXJyYXkuaXNBcnJheShjb29yZCkpIHtcclxuICAgICAgICBpZiAoY29vcmQudHlwZSA9PT0gXCJGZWF0dXJlXCIgJiYgY29vcmQuZ2VvbWV0cnkgIT09IG51bGwgJiYgY29vcmQuZ2VvbWV0cnkudHlwZSA9PT0gXCJQb2ludFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb29yZC5nZW9tZXRyeS5jb29yZGluYXRlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvb3JkLnR5cGUgPT09IFwiUG9pbnRcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29vcmQuY29vcmRpbmF0ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29vcmQpICYmIGNvb3JkLmxlbmd0aCA+PSAyICYmICFBcnJheS5pc0FycmF5KGNvb3JkWzBdKSAmJiAhQXJyYXkuaXNBcnJheShjb29yZFsxXSkpIHtcclxuICAgICAgICByZXR1cm4gY29vcmQ7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb29yZCBtdXN0IGJlIEdlb0pTT04gUG9pbnQgb3IgYW4gQXJyYXkgb2YgbnVtYmVyc1wiKTtcclxufVxyXG5leHBvcnRzLmdldENvb3JkID0gZ2V0Q29vcmQ7XHJcbi8qKlxyXG4gKiBVbndyYXAgY29vcmRpbmF0ZXMgZnJvbSBhIEZlYXR1cmUsIEdlb21ldHJ5IE9iamVjdCBvciBhbiBBcnJheVxyXG4gKlxyXG4gKiBAbmFtZSBnZXRDb29yZHNcclxuICogQHBhcmFtIHtBcnJheTxhbnk+fEdlb21ldHJ5fEZlYXR1cmV9IGNvb3JkcyBGZWF0dXJlLCBHZW9tZXRyeSBPYmplY3Qgb3IgYW4gQXJyYXlcclxuICogQHJldHVybnMge0FycmF5PGFueT59IGNvb3JkaW5hdGVzXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBwb2x5ID0gdHVyZi5wb2x5Z29uKFtbWzExOS4zMiwgLTguN10sIFsxMTkuNTUsIC04LjY5XSwgWzExOS41MSwgLTguNTRdLCBbMTE5LjMyLCAtOC43XV1dKTtcclxuICpcclxuICogdmFyIGNvb3JkcyA9IHR1cmYuZ2V0Q29vcmRzKHBvbHkpO1xyXG4gKiAvLz0gW1tbMTE5LjMyLCAtOC43XSwgWzExOS41NSwgLTguNjldLCBbMTE5LjUxLCAtOC41NF0sIFsxMTkuMzIsIC04LjddXV1cclxuICovXHJcbmZ1bmN0aW9uIGdldENvb3Jkcyhjb29yZHMpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvb3JkcykpIHtcclxuICAgICAgICByZXR1cm4gY29vcmRzO1xyXG4gICAgfVxyXG4gICAgLy8gRmVhdHVyZVxyXG4gICAgaWYgKGNvb3Jkcy50eXBlID09PSBcIkZlYXR1cmVcIikge1xyXG4gICAgICAgIGlmIChjb29yZHMuZ2VvbWV0cnkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvb3Jkcy5nZW9tZXRyeS5jb29yZGluYXRlcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBHZW9tZXRyeVxyXG4gICAgICAgIGlmIChjb29yZHMuY29vcmRpbmF0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvb3Jkcy5jb29yZGluYXRlcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb29yZHMgbXVzdCBiZSBHZW9KU09OIEZlYXR1cmUsIEdlb21ldHJ5IE9iamVjdCBvciBhbiBBcnJheVwiKTtcclxufVxyXG5leHBvcnRzLmdldENvb3JkcyA9IGdldENvb3JkcztcclxuLyoqXHJcbiAqIENoZWNrcyBpZiBjb29yZGluYXRlcyBjb250YWlucyBhIG51bWJlclxyXG4gKlxyXG4gKiBAbmFtZSBjb250YWluc051bWJlclxyXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGNvb3JkaW5hdGVzIEdlb0pTT04gQ29vcmRpbmF0ZXNcclxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgQXJyYXkgY29udGFpbnMgYSBudW1iZXJcclxuICovXHJcbmZ1bmN0aW9uIGNvbnRhaW5zTnVtYmVyKGNvb3JkaW5hdGVzKSB7XHJcbiAgICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoID4gMSAmJiBoZWxwZXJzXzEuaXNOdW1iZXIoY29vcmRpbmF0ZXNbMF0pICYmIGhlbHBlcnNfMS5pc051bWJlcihjb29yZGluYXRlc1sxXSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzWzBdKSAmJiBjb29yZGluYXRlc1swXS5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gY29udGFpbnNOdW1iZXIoY29vcmRpbmF0ZXNbMF0pO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY29vcmRpbmF0ZXMgbXVzdCBvbmx5IGNvbnRhaW4gbnVtYmVyc1wiKTtcclxufVxyXG5leHBvcnRzLmNvbnRhaW5zTnVtYmVyID0gY29udGFpbnNOdW1iZXI7XHJcbi8qKlxyXG4gKiBFbmZvcmNlIGV4cGVjdGF0aW9ucyBhYm91dCB0eXBlcyBvZiBHZW9KU09OIG9iamVjdHMgZm9yIFR1cmYuXHJcbiAqXHJcbiAqIEBuYW1lIGdlb2pzb25UeXBlXHJcbiAqIEBwYXJhbSB7R2VvSlNPTn0gdmFsdWUgYW55IEdlb0pTT04gb2JqZWN0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIGV4cGVjdGVkIEdlb0pTT04gdHlwZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIGNhbGxpbmcgZnVuY3Rpb25cclxuICogQHRocm93cyB7RXJyb3J9IGlmIHZhbHVlIGlzIG5vdCB0aGUgZXhwZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGdlb2pzb25UeXBlKHZhbHVlLCB0eXBlLCBuYW1lKSB7XHJcbiAgICBpZiAoIXR5cGUgfHwgIW5hbWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGFuZCBuYW1lIHJlcXVpcmVkXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS50eXBlICE9PSB0eXBlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCB0byBcIiArIG5hbWUgKyBcIjogbXVzdCBiZSBhIFwiICsgdHlwZSArIFwiLCBnaXZlbiBcIiArIHZhbHVlLnR5cGUpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZ2VvanNvblR5cGUgPSBnZW9qc29uVHlwZTtcclxuLyoqXHJcbiAqIEVuZm9yY2UgZXhwZWN0YXRpb25zIGFib3V0IHR5cGVzIG9mIHtAbGluayBGZWF0dXJlfSBpbnB1dHMgZm9yIFR1cmYuXHJcbiAqIEludGVybmFsbHkgdGhpcyB1c2VzIHtAbGluayBnZW9qc29uVHlwZX0gdG8ganVkZ2UgZ2VvbWV0cnkgdHlwZXMuXHJcbiAqXHJcbiAqIEBuYW1lIGZlYXR1cmVPZlxyXG4gKiBAcGFyYW0ge0ZlYXR1cmV9IGZlYXR1cmUgYSBmZWF0dXJlIHdpdGggYW4gZXhwZWN0ZWQgZ2VvbWV0cnkgdHlwZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBleHBlY3RlZCBHZW9KU09OIHR5cGVcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiBjYWxsaW5nIGZ1bmN0aW9uXHJcbiAqIEB0aHJvd3Mge0Vycm9yfSBlcnJvciBpZiB2YWx1ZSBpcyBub3QgdGhlIGV4cGVjdGVkIHR5cGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBmZWF0dXJlT2YoZmVhdHVyZSwgdHlwZSwgbmFtZSkge1xyXG4gICAgaWYgKCFmZWF0dXJlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZmVhdHVyZSBwYXNzZWRcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIuZmVhdHVyZU9mKCkgcmVxdWlyZXMgYSBuYW1lXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmZWF0dXJlIHx8IGZlYXR1cmUudHlwZSAhPT0gXCJGZWF0dXJlXCIgfHwgIWZlYXR1cmUuZ2VvbWV0cnkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHRvIFwiICsgbmFtZSArIFwiLCBGZWF0dXJlIHdpdGggZ2VvbWV0cnkgcmVxdWlyZWRcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWZlYXR1cmUuZ2VvbWV0cnkgfHwgZmVhdHVyZS5nZW9tZXRyeS50eXBlICE9PSB0eXBlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCB0byBcIiArIG5hbWUgKyBcIjogbXVzdCBiZSBhIFwiICsgdHlwZSArIFwiLCBnaXZlbiBcIiArIGZlYXR1cmUuZ2VvbWV0cnkudHlwZSk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5mZWF0dXJlT2YgPSBmZWF0dXJlT2Y7XHJcbi8qKlxyXG4gKiBFbmZvcmNlIGV4cGVjdGF0aW9ucyBhYm91dCB0eXBlcyBvZiB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGlucHV0cyBmb3IgVHVyZi5cclxuICogSW50ZXJuYWxseSB0aGlzIHVzZXMge0BsaW5rIGdlb2pzb25UeXBlfSB0byBqdWRnZSBnZW9tZXRyeSB0eXBlcy5cclxuICpcclxuICogQG5hbWUgY29sbGVjdGlvbk9mXHJcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb259IGZlYXR1cmVDb2xsZWN0aW9uIGEgRmVhdHVyZUNvbGxlY3Rpb24gZm9yIHdoaWNoIGZlYXR1cmVzIHdpbGwgYmUganVkZ2VkXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIGV4cGVjdGVkIEdlb0pTT04gdHlwZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIGNhbGxpbmcgZnVuY3Rpb25cclxuICogQHRocm93cyB7RXJyb3J9IGlmIHZhbHVlIGlzIG5vdCB0aGUgZXhwZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZihmZWF0dXJlQ29sbGVjdGlvbiwgdHlwZSwgbmFtZSkge1xyXG4gICAgaWYgKCFmZWF0dXJlQ29sbGVjdGlvbikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGZlYXR1cmVDb2xsZWN0aW9uIHBhc3NlZFwiKTtcclxuICAgIH1cclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIi5jb2xsZWN0aW9uT2YoKSByZXF1aXJlcyBhIG5hbWVcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWZlYXR1cmVDb2xsZWN0aW9uIHx8IGZlYXR1cmVDb2xsZWN0aW9uLnR5cGUgIT09IFwiRmVhdHVyZUNvbGxlY3Rpb25cIikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgdG8gXCIgKyBuYW1lICsgXCIsIEZlYXR1cmVDb2xsZWN0aW9uIHJlcXVpcmVkXCIpO1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IGZlYXR1cmVDb2xsZWN0aW9uLmZlYXR1cmVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHZhciBmZWF0dXJlID0gX2FbX2ldO1xyXG4gICAgICAgIGlmICghZmVhdHVyZSB8fCBmZWF0dXJlLnR5cGUgIT09IFwiRmVhdHVyZVwiIHx8ICFmZWF0dXJlLmdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgdG8gXCIgKyBuYW1lICsgXCIsIEZlYXR1cmUgd2l0aCBnZW9tZXRyeSByZXF1aXJlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFmZWF0dXJlLmdlb21ldHJ5IHx8IGZlYXR1cmUuZ2VvbWV0cnkudHlwZSAhPT0gdHlwZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHRvIFwiICsgbmFtZSArIFwiOiBtdXN0IGJlIGEgXCIgKyB0eXBlICsgXCIsIGdpdmVuIFwiICsgZmVhdHVyZS5nZW9tZXRyeS50eXBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5jb2xsZWN0aW9uT2YgPSBjb2xsZWN0aW9uT2Y7XHJcbi8qKlxyXG4gKiBHZXQgR2VvbWV0cnkgZnJvbSBGZWF0dXJlIG9yIEdlb21ldHJ5IE9iamVjdFxyXG4gKlxyXG4gKiBAcGFyYW0ge0ZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gR2VvSlNPTiBGZWF0dXJlIG9yIEdlb21ldHJ5IE9iamVjdFxyXG4gKiBAcmV0dXJucyB7R2VvbWV0cnl8bnVsbH0gR2VvSlNPTiBHZW9tZXRyeSBPYmplY3RcclxuICogQHRocm93cyB7RXJyb3J9IGlmIGdlb2pzb24gaXMgbm90IGEgRmVhdHVyZSBvciBHZW9tZXRyeSBPYmplY3RcclxuICogQGV4YW1wbGVcclxuICogdmFyIHBvaW50ID0ge1xyXG4gKiAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcclxuICogICBcInByb3BlcnRpZXNcIjoge30sXHJcbiAqICAgXCJnZW9tZXRyeVwiOiB7XHJcbiAqICAgICBcInR5cGVcIjogXCJQb2ludFwiLFxyXG4gKiAgICAgXCJjb29yZGluYXRlc1wiOiBbMTEwLCA0MF1cclxuICogICB9XHJcbiAqIH1cclxuICogdmFyIGdlb20gPSB0dXJmLmdldEdlb20ocG9pbnQpXHJcbiAqIC8vPXtcInR5cGVcIjogXCJQb2ludFwiLCBcImNvb3JkaW5hdGVzXCI6IFsxMTAsIDQwXX1cclxuICovXHJcbmZ1bmN0aW9uIGdldEdlb20oZ2VvanNvbikge1xyXG4gICAgaWYgKGdlb2pzb24udHlwZSA9PT0gXCJGZWF0dXJlXCIpIHtcclxuICAgICAgICByZXR1cm4gZ2VvanNvbi5nZW9tZXRyeTtcclxuICAgIH1cclxuICAgIHJldHVybiBnZW9qc29uO1xyXG59XHJcbmV4cG9ydHMuZ2V0R2VvbSA9IGdldEdlb207XHJcbi8qKlxyXG4gKiBHZXQgR2VvSlNPTiBvYmplY3QncyB0eXBlLCBHZW9tZXRyeSB0eXBlIGlzIHByaW9yaXRpemUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7R2VvSlNPTn0gZ2VvanNvbiBHZW9KU09OIG9iamVjdFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9XCJnZW9qc29uXCJdIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGRpc3BsYXkgaW4gZXJyb3IgbWVzc2FnZVxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBHZW9KU09OIHR5cGVcclxuICogQGV4YW1wbGVcclxuICogdmFyIHBvaW50ID0ge1xyXG4gKiAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcclxuICogICBcInByb3BlcnRpZXNcIjoge30sXHJcbiAqICAgXCJnZW9tZXRyeVwiOiB7XHJcbiAqICAgICBcInR5cGVcIjogXCJQb2ludFwiLFxyXG4gKiAgICAgXCJjb29yZGluYXRlc1wiOiBbMTEwLCA0MF1cclxuICogICB9XHJcbiAqIH1cclxuICogdmFyIGdlb20gPSB0dXJmLmdldFR5cGUocG9pbnQpXHJcbiAqIC8vPVwiUG9pbnRcIlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VHlwZShnZW9qc29uLCBuYW1lKSB7XHJcbiAgICBpZiAoZ2VvanNvbi50eXBlID09PSBcIkZlYXR1cmVDb2xsZWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJGZWF0dXJlQ29sbGVjdGlvblwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGdlb2pzb24udHlwZSA9PT0gXCJHZW9tZXRyeUNvbGxlY3Rpb25cIikge1xyXG4gICAgICAgIHJldHVybiBcIkdlb21ldHJ5Q29sbGVjdGlvblwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGdlb2pzb24udHlwZSA9PT0gXCJGZWF0dXJlXCIgJiYgZ2VvanNvbi5nZW9tZXRyeSAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBnZW9qc29uLmdlb21ldHJ5LnR5cGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ2VvanNvbi50eXBlO1xyXG59XHJcbmV4cG9ydHMuZ2V0VHlwZSA9IGdldFR5cGU7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9zaGltXCIpO1xuXG5yZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lXCIpO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlXCIpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG52YXIgS19NQVhfTEVOR1RIID0gMHg3ZmZmZmZmZlxuZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFByaW50IHdhcm5pbmcgYW5kIHJlY29tbWVuZCB1c2luZyBgYnVmZmVyYCB2NC54IHdoaWNoIGhhcyBhbiBPYmplY3RcbiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIFdlIHJlcG9ydCB0aGF0IHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGlmIHRoZSBhcmUgbm90IHN1YmNsYXNzYWJsZVxuICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YFxuICogKFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4KS4gSUUgMTAgbGFja3Mgc3VwcG9ydFxuICogZm9yIF9fcHJvdG9fXyBhbmQgaGFzIGEgYnVnZ3kgdHlwZWQgYXJyYXkgaW1wbGVtZW50YXRpb24uXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5pZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICtcbiAgICAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nXG4gIClcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ/XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHtfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH19XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIGJ1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZydcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZylcbiAgfVxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbmlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSlcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKGlzQXJyYXlCdWZmZXIodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIE5vdGU6IENoYW5nZSBwcm90b3R5cGUgKmFmdGVyKiBCdWZmZXIuZnJvbSBpcyBkZWZpbmVkIHRvIHdvcmthcm91bmQgQ2hyb21lIGJ1Zzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4XG5CdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG5CdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IGJ1Zi53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgYnVmID0gYnVmLnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGJ1ZltpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgdmFyIGJ1ZlxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgYnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0IChvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW4pXG5cbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJ1ZlxuICAgIH1cblxuICAgIG9iai5jb3B5KGJ1ZiwgMCwgMCwgbGVuKVxuICAgIHJldHVybiBidWZcbiAgfVxuXG4gIGlmIChvYmopIHtcbiAgICBpZiAoaXNBcnJheUJ1ZmZlclZpZXcob2JqKSB8fCAnbGVuZ3RoJyBpbiBvYmopIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICAgIH1cblxuICAgIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgQXJyYXkuaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwgS19NQVhfTEVOR1RIYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiBiICE9IG51bGwgJiYgYi5faXNCdWZmZXIgPT09IHRydWVcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKGlzQXJyYXlCdWZmZXJWaWV3KHN0cmluZykgfHwgaXNBcnJheUJ1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChudW1iZXJJc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gbGF0aW4xV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCA+Pj4gMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIChieXRlc1tpICsgMV0gKiAyNTYpKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwKSB7XG4gICAgLy8gYXNjZW5kaW5nIGNvcHkgZnJvbSBzdGFydFxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBzdGFydCArIGxlbiksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogbmV3IEJ1ZmZlcih2YWwsIGVuY29kaW5nKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbi8vIEFycmF5QnVmZmVycyBmcm9tIGFub3RoZXIgY29udGV4dCAoaS5lLiBhbiBpZnJhbWUpIGRvIG5vdCBwYXNzIHRoZSBgaW5zdGFuY2VvZmAgY2hlY2tcbi8vIGJ1dCB0aGV5IHNob3VsZCBiZSB0cmVhdGVkIGFzIHZhbGlkLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIgKG9iaikge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHxcbiAgICAob2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBcnJheUJ1ZmZlcicgJiZcbiAgICAgIHR5cGVvZiBvYmouYnl0ZUxlbmd0aCA9PT0gJ251bWJlcicpXG59XG5cbi8vIE5vZGUgMC4xMCBzdXBwb3J0cyBgQXJyYXlCdWZmZXJgIGJ1dCBsYWNrcyBgQXJyYXlCdWZmZXIuaXNWaWV3YFxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcgKG9iaikge1xuICByZXR1cm4gKHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicpICYmIEFycmF5QnVmZmVyLmlzVmlldyhvYmopXG59XG5cbmZ1bmN0aW9uIG51bWJlcklzTmFOIChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gb2JqIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuUmVnRXhwLmVzY2FwZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnbnVtYmVyJyAmJiBjb2YoaXQpICE9ICdOdW1iZXInKSB0aHJvdyBUeXBlRXJyb3IobXNnKTtcbiAgcmV0dXJuICtpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlciwgSVRFUkFUT1IpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuZnVuY3Rpb24gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGN0eChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBzcHJlYWRhYmxlO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBzcHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoaXNPYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3ByZWFkYWJsZSA9IGVsZW1lbnRbSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICAgICAgICBzcHJlYWRhYmxlID0gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwcmVhZGFibGUgJiYgZGVwdGggPiAwKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCB0b0xlbmd0aChlbGVtZW50Lmxlbmd0aCksIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFmZmZmZmZmZmZmZmZmKSB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChPLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIFJlZmxlY3QgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ09QTi5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICByZXR1cm4gZ2V0U3ltYm9scyA/IGtleXMuY29uY2F0KGdldFN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VGbG9hdDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2UsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOCAvIDE1LjQuNC4yMSBBcnJheS5wcm90b3R5cGUucmVkdWNlKGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBpZiAoaHRtbCkgYXJyYXlTbGljZS5jYWxsKGh0bWwpO1xufSksICdBcnJheScsIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhpcy5sZW5ndGgpO1xuICAgIHZhciBrbGFzcyA9IGNvZih0aGlzKTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZDtcbiAgICBpZiAoa2xhc3MgPT0gJ0FycmF5JykgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCh0aGlzLCBiZWdpbiwgZW5kKTtcbiAgICB2YXIgc3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbik7XG4gICAgdmFyIHVwVG8gPSB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pO1xuICAgIHZhciBzaXplID0gdG9MZW5ndGgodXBUbyAtIHN0YXJ0KTtcbiAgICB2YXIgY2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgY2xvbmVkW2ldID0ga2xhc3MgPT0gJ1N0cmluZydcbiAgICAgID8gdGhpcy5jaGFyQXQoc3RhcnQgKyBpKVxuICAgICAgOiB0aGlzW3N0YXJ0ICsgaV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkc29ydCkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yNSBBcnJheS5wcm90b3R5cGUuc29ydChjb21wYXJlZm4pXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uICgkZnJlZXplKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOSBTdHJpbmcucHJvdG90eXBlLml0YWxpY3MoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnaXRhbGljcycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vcndhbGRyb24vdGMzOS1ub3Rlcy9ibG9iL21hc3Rlci9lczYvMjAxNC0wOS9zZXB0LTI1Lm1kIzUxMC1nbG9iYWxhc2FwLWZvci1lbnF1ZXVpbmctYS1taWNyb3Rhc2tcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBwcm9jZXNzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucHJvY2VzcztcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7XG4gIGFzYXA6IGZ1bmN0aW9uIGFzYXAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gaXNOb2RlICYmIHByb2Nlc3MuZG9tYWluO1xuICAgIG1pY3JvdGFzayhkb21haW4gPyBkb21haW4uYmluZChmbikgOiBmbik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKHgsIGxvd2VyLCB1cHBlcikge1xuICAgIHJldHVybiBNYXRoLm1pbih1cHBlciwgTWF0aC5tYXgobG93ZXIsIHgpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IERFR19QRVJfUkFEOiBNYXRoLlBJIC8gMTgwIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpIH0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IG1ldGFkYXRhLnNldDtcblxubWV0YWRhdGEuZXhwKHsgZGVmaW5lTWV0YWRhdGE6IGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFLZXkodGFyZ2V0S2V5KSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGE6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciAkbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvTWV0YUtleSA9ICRtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9ICRtZXRhZGF0YS5zZXQ7XG5cbiRtZXRhZGF0YS5leHAoeyBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoXG4gICAgICBtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSxcbiAgICAgICh0YXJnZXRLZXkgIT09IHVuZGVmaW5lZCA/IGFuT2JqZWN0IDogYUZ1bmN0aW9uKSh0YXJnZXQpLFxuICAgICAgdG9NZXRhS2V5KHRhcmdldEtleSlcbiAgICApO1xuICB9O1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxudmFyIEZPUkNFRCA9ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAn8KCutycuYXQoMCkgIT09ICfwoK63Jztcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL1N0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGdldEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLCAnUmVnRXhwIFN0cmluZycsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBtYXRjaCA9IHRoaXMuX3IuZXhlYyh0aGlzLl9zKTtcbiAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBtYXRjaCA9PT0gbnVsbCB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBtYXRjaEFsbDogZnVuY3Rpb24gbWF0Y2hBbGwocmVnZXhwKSB7XG4gICAgZGVmaW5lZCh0aGlzKTtcbiAgICBpZiAoIWlzUmVnRXhwKHJlZ2V4cCkpIHRocm93IFR5cGVFcnJvcihyZWdleHAgKyAnIGlzIG5vdCBhIHJlZ2V4cCEnKTtcbiAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICB2YXIgZmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cFByb3RvID8gU3RyaW5nKHJlZ2V4cC5mbGFncykgOiBnZXRGbGFncy5jYWxsKHJlZ2V4cCk7XG4gICAgdmFyIHJ4ID0gbmV3IFJlZ0V4cChyZWdleHAuc291cmNlLCB+ZmxhZ3MuaW5kZXhPZignZycpID8gZmxhZ3MgOiAnZycgKyBmbGFncyk7XG4gICAgcngubGFzdEluZGV4ID0gdG9MZW5ndGgocmVnZXhwLmxhc3RJbmRleCk7XG4gICAgcmV0dXJuIG5ldyAkUmVnRXhwU3RyaW5nSXRlcmF0b3IocngsIFMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3lzdGVtJywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiXG4vKipcbiAqIEV4cG9zZSBgRW1pdHRlcmAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBFbWl0dGVyO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYEVtaXR0ZXJgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gRW1pdHRlcihvYmopIHtcbiAgaWYgKG9iaikgcmV0dXJuIG1peGluKG9iaik7XG59O1xuXG4vKipcbiAqIE1peGluIHRoZSBlbWl0dGVyIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7T2JqZWN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbWl4aW4ob2JqKSB7XG4gIGZvciAodmFyIGtleSBpbiBFbWl0dGVyLnByb3RvdHlwZSkge1xuICAgIG9ialtrZXldID0gRW1pdHRlci5wcm90b3R5cGVba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIExpc3RlbiBvbiB0aGUgZ2l2ZW4gYGV2ZW50YCB3aXRoIGBmbmAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RW1pdHRlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUub24gPVxuRW1pdHRlci5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcbiAgKHRoaXMuX2NhbGxiYWNrc1tldmVudF0gPSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdIHx8IFtdKVxuICAgIC5wdXNoKGZuKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFkZHMgYW4gYGV2ZW50YCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgaW52b2tlZCBhIHNpbmdsZVxuICogdGltZSB0aGVuIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24oZXZlbnQsIGZuKXtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG5cbiAgZnVuY3Rpb24gb24oKSB7XG4gICAgc2VsZi5vZmYoZXZlbnQsIG9uKTtcbiAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgb24uZm4gPSBmbjtcbiAgdGhpcy5vbihldmVudCwgb24pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBnaXZlbiBjYWxsYmFjayBmb3IgYGV2ZW50YCBvciBhbGxcbiAqIHJlZ2lzdGVyZWQgY2FsbGJhY2tzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLm9mZiA9XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcblxuICAvLyBhbGxcbiAgaWYgKDAgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1tldmVudF07XG4gIGlmICghY2FsbGJhY2tzKSByZXR1cm4gdGhpcztcblxuICAvLyByZW1vdmUgYWxsIGhhbmRsZXJzXG4gIGlmICgxID09IGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tzW2V2ZW50XTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHJlbW92ZSBzcGVjaWZpYyBoYW5kbGVyXG4gIHZhciBjYjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICBjYiA9IGNhbGxiYWNrc1tpXTtcbiAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgY2FsbGJhY2tzLnNwbGljZShpLCAxKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRW1pdCBgZXZlbnRgIHdpdGggdGhlIGdpdmVuIGFyZ3MuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge01peGVkfSAuLi5cbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xuICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKVxuICAgICwgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzW2V2ZW50XTtcblxuICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIGNhbGxiYWNrc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmV0dXJuIGFycmF5IG9mIGNhbGxiYWNrcyBmb3IgYGV2ZW50YC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEByZXR1cm4ge0FycmF5fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5FbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudCl7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcbiAgcmV0dXJuIHRoaXMuX2NhbGxiYWNrc1tldmVudF0gfHwgW107XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoaXMgZW1pdHRlciBoYXMgYGV2ZW50YCBoYW5kbGVycy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgcmV0dXJuICEhIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gdGhpcy5fZXZlbnRzIHx8IHt9O1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG5FdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbihuKSB7XG4gIGlmICghaXNOdW1iZXIobikgfHwgbiA8IDAgfHwgaXNOYU4obikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCduIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBlciwgaGFuZGxlciwgbGVuLCBhcmdzLCBpLCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAodHlwZSA9PT0gJ2Vycm9yJykge1xuICAgIGlmICghdGhpcy5fZXZlbnRzLmVycm9yIHx8XG4gICAgICAgIChpc09iamVjdCh0aGlzLl9ldmVudHMuZXJyb3IpICYmICF0aGlzLl9ldmVudHMuZXJyb3IubGVuZ3RoKSkge1xuICAgICAgZXIgPSBhcmd1bWVudHNbMV07XG4gICAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkIFwiZXJyb3JcIiBldmVudC4gKCcgKyBlciArICcpJyk7XG4gICAgICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVyID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc1VuZGVmaW5lZChoYW5kbGVyKSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIC8vIGZhc3QgY2FzZXNcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0pO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIHNsb3dlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgbGlzdGVuZXJzID0gaGFuZGxlci5zbGljZSgpO1xuICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG07XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgaWYgKHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lcilcbiAgICB0aGlzLmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgaXNGdW5jdGlvbihsaXN0ZW5lci5saXN0ZW5lcikgP1xuICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgZWxzZSBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlXG4gICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gW3RoaXMuX2V2ZW50c1t0eXBlXSwgbGlzdGVuZXJdO1xuXG4gIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pICYmICF0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkKSB7XG4gICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9tYXhMaXN0ZW5lcnMpKSB7XG4gICAgICBtID0gdGhpcy5fbWF4TGlzdGVuZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gICAgfVxuXG4gICAgaWYgKG0gJiYgbSA+IDAgJiYgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCA+IG0pIHtcbiAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcignKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgJyArXG4gICAgICAgICAgICAgICAgICAgICdsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAnVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCk7XG4gICAgICBpZiAodHlwZW9mIGNvbnNvbGUudHJhY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gbm90IHN1cHBvcnRlZCBpbiBJRSAxMFxuICAgICAgICBjb25zb2xlLnRyYWNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIHZhciBmaXJlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGcoKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBnKTtcblxuICAgIGlmICghZmlyZWQpIHtcbiAgICAgIGZpcmVkID0gdHJ1ZTtcbiAgICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG5cbiAgZy5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICB0aGlzLm9uKHR5cGUsIGcpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWRcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbGlzdCwgcG9zaXRpb24sIGxlbmd0aCwgaTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICByZXR1cm4gdGhpcztcblxuICBsaXN0ID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuICBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgcG9zaXRpb24gPSAtMTtcblxuICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHxcbiAgICAgIChpc0Z1bmN0aW9uKGxpc3QubGlzdGVuZXIpICYmIGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG5cbiAgfSBlbHNlIGlmIChpc09iamVjdChsaXN0KSkge1xuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tID4gMDspIHtcbiAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fFxuICAgICAgICAgIChsaXN0W2ldLmxpc3RlbmVyICYmIGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICByZXR1cm4gdGhpcztcblxuICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgbGlzdC5sZW5ndGggPSAwO1xuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGlzdC5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGtleSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgaWYgKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIGVsc2UgaWYgKHRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBmb3IgKGtleSBpbiB0aGlzLl9ldmVudHMpIHtcbiAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzRnVuY3Rpb24obGlzdGVuZXJzKSkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgfSBlbHNlIGlmIChsaXN0ZW5lcnMpIHtcbiAgICAvLyBMSUZPIG9yZGVyXG4gICAgd2hpbGUgKGxpc3RlbmVycy5sZW5ndGgpXG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tsaXN0ZW5lcnMubGVuZ3RoIC0gMV0pO1xuICB9XG4gIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIHJldDtcbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICByZXQgPSBbXTtcbiAgZWxzZSBpZiAoaXNGdW5jdGlvbih0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIHJldCA9IFt0aGlzLl9ldmVudHNbdHlwZV1dO1xuICBlbHNlXG4gICAgcmV0ID0gdGhpcy5fZXZlbnRzW3R5cGVdLnNsaWNlKCk7XG4gIHJldHVybiByZXQ7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbih0eXBlKSB7XG4gIGlmICh0aGlzLl9ldmVudHMpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGV2bGlzdGVuZXIpKVxuICAgICAgcmV0dXJuIDE7XG4gICAgZWxzZSBpZiAoZXZsaXN0ZW5lcilcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gMDtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuIiwiLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIi8qKlxuICogbWFydGluZXogdjAuNC4zXG4gKiBNYXJ0aW5leiBwb2x5Z29uIGNsaXBwaW5nIGFsZ29yaXRobSwgZG9lcyBib29sZWFuIG9wZXJhdGlvbiBvbiBwb2x5Z29ucyAobXVsdGlwb2x5Z29ucywgcG9seWdvbnMgd2l0aCBob2xlcyBldGMpOiBpbnRlcnNlY3Rpb24sIHVuaW9uLCBkaWZmZXJlbmNlLCB4b3JcbiAqXG4gKiBAYXV0aG9yIEFsZXggTWlsZXZza2kgPGluZm9AdzhyLm5hbWU+XG4gKiBAbGljZW5zZSBNSVRcbiAqIEBwcmVzZXJ2ZVxuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGZhY3RvcnkoKGdsb2JhbC5tYXJ0aW5leiA9IHt9KSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIERFRkFVTFRfQ09NUEFSRSAoYSwgYikgeyByZXR1cm4gYSA+IGIgPyAxIDogYSA8IGIgPyAtMSA6IDA7IH1cblxuICB2YXIgU3BsYXlUcmVlID0gZnVuY3Rpb24gU3BsYXlUcmVlKGNvbXBhcmUsIG5vRHVwbGljYXRlcykge1xuICAgIGlmICggY29tcGFyZSA9PT0gdm9pZCAwICkgY29tcGFyZSA9IERFRkFVTFRfQ09NUEFSRTtcbiAgICBpZiAoIG5vRHVwbGljYXRlcyA9PT0gdm9pZCAwICkgbm9EdXBsaWNhdGVzID0gZmFsc2U7XG5cbiAgICB0aGlzLl9jb21wYXJlID0gY29tcGFyZTtcbiAgICB0aGlzLl9yb290ID0gbnVsbDtcbiAgICB0aGlzLl9zaXplID0gMDtcbiAgICB0aGlzLl9ub0R1cGxpY2F0ZXMgPSAhIW5vRHVwbGljYXRlcztcbiAgfTtcblxuICB2YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBzaXplOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLnJvdGF0ZUxlZnQgPSBmdW5jdGlvbiByb3RhdGVMZWZ0ICh4KSB7XG4gICAgdmFyIHkgPSB4LnJpZ2h0O1xuICAgIGlmICh5KSB7XG4gICAgICB4LnJpZ2h0ID0geS5sZWZ0O1xuICAgICAgaWYgKHkubGVmdCkgeyB5LmxlZnQucGFyZW50ID0geDsgfVxuICAgICAgeS5wYXJlbnQgPSB4LnBhcmVudDtcbiAgICB9XG5cbiAgICBpZiAoIXgucGFyZW50KSAgICAgICAgICAgICAgeyB0aGlzLl9yb290ID0geTsgfVxuICAgIGVsc2UgaWYgKHggPT09IHgucGFyZW50LmxlZnQpIHsgeC5wYXJlbnQubGVmdCA9IHk7IH1cbiAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgeyB4LnBhcmVudC5yaWdodCA9IHk7IH1cbiAgICBpZiAoeSkgeyB5LmxlZnQgPSB4OyB9XG4gICAgeC5wYXJlbnQgPSB5O1xuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5yb3RhdGVSaWdodCA9IGZ1bmN0aW9uIHJvdGF0ZVJpZ2h0ICh4KSB7XG4gICAgdmFyIHkgPSB4LmxlZnQ7XG4gICAgaWYgKHkpIHtcbiAgICAgIHgubGVmdCA9IHkucmlnaHQ7XG4gICAgICBpZiAoeS5yaWdodCkgeyB5LnJpZ2h0LnBhcmVudCA9IHg7IH1cbiAgICAgIHkucGFyZW50ID0geC5wYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKCF4LnBhcmVudCkgICAgICAgICAgICAgeyB0aGlzLl9yb290ID0geTsgfVxuICAgIGVsc2UgaWYoeCA9PT0geC5wYXJlbnQubGVmdCkgeyB4LnBhcmVudC5sZWZ0ID0geTsgfVxuICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgIHsgeC5wYXJlbnQucmlnaHQgPSB5OyB9XG4gICAgaWYgKHkpIHsgeS5yaWdodCA9IHg7IH1cbiAgICB4LnBhcmVudCA9IHk7XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLl9zcGxheSA9IGZ1bmN0aW9uIF9zcGxheSAoeCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB3aGlsZSAoeC5wYXJlbnQpIHtcbiAgICAgIHZhciBwID0geC5wYXJlbnQ7XG4gICAgICBpZiAoIXAucGFyZW50KSB7XG4gICAgICAgIGlmIChwLmxlZnQgPT09IHgpIHsgdGhpcyQxLnJvdGF0ZVJpZ2h0KHApOyB9XG4gICAgICAgIGVsc2UgICAgICAgICAgICB7IHRoaXMkMS5yb3RhdGVMZWZ0KHApOyB9XG4gICAgICB9IGVsc2UgaWYgKHAubGVmdCA9PT0geCAmJiBwLnBhcmVudC5sZWZ0ID09PSBwKSB7XG4gICAgICAgIHRoaXMkMS5yb3RhdGVSaWdodChwLnBhcmVudCk7XG4gICAgICAgIHRoaXMkMS5yb3RhdGVSaWdodChwKTtcbiAgICAgIH0gZWxzZSBpZiAocC5yaWdodCA9PT0geCAmJiBwLnBhcmVudC5yaWdodCA9PT0gcCkge1xuICAgICAgICB0aGlzJDEucm90YXRlTGVmdChwLnBhcmVudCk7XG4gICAgICAgIHRoaXMkMS5yb3RhdGVMZWZ0KHApO1xuICAgICAgfSBlbHNlIGlmIChwLmxlZnQgPT09IHggJiYgcC5wYXJlbnQucmlnaHQgPT09IHApIHtcbiAgICAgICAgdGhpcyQxLnJvdGF0ZVJpZ2h0KHApO1xuICAgICAgICB0aGlzJDEucm90YXRlTGVmdChwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMkMS5yb3RhdGVMZWZ0KHApO1xuICAgICAgICB0aGlzJDEucm90YXRlUmlnaHQocCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5zcGxheSA9IGZ1bmN0aW9uIHNwbGF5ICh4KSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBwLCBncCwgZ2dwLCBsLCByO1xuXG4gICAgd2hpbGUgKHgucGFyZW50KSB7XG4gICAgICBwID0geC5wYXJlbnQ7XG4gICAgICBncCA9IHAucGFyZW50O1xuXG4gICAgICBpZiAoZ3AgJiYgZ3AucGFyZW50KSB7XG4gICAgICAgIGdncCA9IGdwLnBhcmVudDtcbiAgICAgICAgaWYgKGdncC5sZWZ0ID09PSBncCkgeyBnZ3AubGVmdD0geDsgfVxuICAgICAgICBlbHNlICAgICAgICAgICAgICAgeyBnZ3AucmlnaHQgPSB4OyB9XG4gICAgICAgIHgucGFyZW50ID0gZ2dwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzJDEuX3Jvb3QgPSB4O1xuICAgICAgfVxuXG4gICAgICBsID0geC5sZWZ0OyByID0geC5yaWdodDtcblxuICAgICAgaWYgKHggPT09IHAubGVmdCkgeyAvLyBsZWZ0XG4gICAgICAgIGlmIChncCkge1xuICAgICAgICAgIGlmIChncC5sZWZ0ID09PSBwKSB7XG4gICAgICAgICAgICAvKiB6aWctemlnICovXG4gICAgICAgICAgICBpZiAocC5yaWdodCkge1xuICAgICAgICAgICAgICBncC5sZWZ0ID0gcC5yaWdodDtcbiAgICAgICAgICAgICAgZ3AubGVmdC5wYXJlbnQgPSBncDtcbiAgICAgICAgICAgIH0gZWxzZSB7IGdwLmxlZnQgPSBudWxsOyB9XG5cbiAgICAgICAgICAgIHAucmlnaHQgPSBncDtcbiAgICAgICAgICAgIGdwLnBhcmVudCA9IHA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qIHppZy16YWcgKi9cbiAgICAgICAgICAgIGlmIChsKSB7XG4gICAgICAgICAgICAgIGdwLnJpZ2h0ID0gbDtcbiAgICAgICAgICAgICAgbC5wYXJlbnQgPSBncDtcbiAgICAgICAgICAgIH0gZWxzZSB7IGdwLnJpZ2h0ID0gbnVsbDsgfVxuXG4gICAgICAgICAgICB4LmxlZnQgID0gZ3A7XG4gICAgICAgICAgICBncC5wYXJlbnQgPSB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHAubGVmdCA9IHI7XG4gICAgICAgICAgci5wYXJlbnQgPSBwO1xuICAgICAgICB9IGVsc2UgeyBwLmxlZnQgPSBudWxsOyB9XG5cbiAgICAgICAgeC5yaWdodD0gcDtcbiAgICAgICAgcC5wYXJlbnQgPSB4O1xuICAgICAgfSBlbHNlIHsgLy8gcmlnaHRcbiAgICAgICAgaWYgKGdwKSB7XG4gICAgICAgICAgaWYgKGdwLnJpZ2h0ID09PSBwKSB7XG4gICAgICAgICAgICAvKiB6aWctemlnICovXG4gICAgICAgICAgICBpZiAocC5sZWZ0KSB7XG4gICAgICAgICAgICAgIGdwLnJpZ2h0ID0gcC5sZWZ0O1xuICAgICAgICAgICAgICBncC5yaWdodC5wYXJlbnQgPSBncDtcbiAgICAgICAgICAgIH0gZWxzZSB7IGdwLnJpZ2h0ID0gbnVsbDsgfVxuXG4gICAgICAgICAgICBwLmxlZnQgPSBncDtcbiAgICAgICAgICAgIGdwLnBhcmVudCA9IHA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qIHppZy16YWcgKi9cbiAgICAgICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgICAgIGdwLmxlZnQgPSByO1xuICAgICAgICAgICAgICByLnBhcmVudCA9IGdwO1xuICAgICAgICAgICAgfSBlbHNlIHsgZ3AubGVmdCA9IG51bGw7IH1cblxuICAgICAgICAgICAgeC5yaWdodCA9IGdwO1xuICAgICAgICAgICAgZ3AucGFyZW50ID0geDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGwpIHtcbiAgICAgICAgICBwLnJpZ2h0ID0gbDtcbiAgICAgICAgICBsLnBhcmVudCA9IHA7XG4gICAgICAgIH0gZWxzZSB7IHAucmlnaHQgPSBudWxsOyB9XG5cbiAgICAgICAgeC5sZWZ0ID0gcDtcbiAgICAgICAgcC5wYXJlbnQgPSB4O1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKHUsIHYpIHtcbiAgICBpZiAoIXUucGFyZW50KSB7IHRoaXMuX3Jvb3QgPSB2OyB9XG4gICAgZWxzZSBpZiAodSA9PT0gdS5wYXJlbnQubGVmdCkgeyB1LnBhcmVudC5sZWZ0ID0gdjsgfVxuICAgIGVsc2UgeyB1LnBhcmVudC5yaWdodCA9IHY7IH1cbiAgICBpZiAodikgeyB2LnBhcmVudCA9IHUucGFyZW50OyB9XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLm1pbk5vZGUgPSBmdW5jdGlvbiBtaW5Ob2RlICh1KSB7XG4gICAgICBpZiAoIHUgPT09IHZvaWQgMCApIHUgPSB0aGlzLl9yb290O1xuXG4gICAgaWYgKHUpIHsgd2hpbGUgKHUubGVmdCkgeyB1ID0gdS5sZWZ0OyB9IH1cbiAgICByZXR1cm4gdTtcbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUubWF4Tm9kZSA9IGZ1bmN0aW9uIG1heE5vZGUgKHUpIHtcbiAgICAgIGlmICggdSA9PT0gdm9pZCAwICkgdSA9IHRoaXMuX3Jvb3Q7XG5cbiAgICBpZiAodSkgeyB3aGlsZSAodS5yaWdodCkgeyB1ID0gdS5yaWdodDsgfSB9XG4gICAgcmV0dXJuIHU7XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIGluc2VydCAoa2V5LCBkYXRhKSB7XG4gICAgdmFyIHogPSB0aGlzLl9yb290O1xuICAgIHZhciBwID0gbnVsbDtcbiAgICB2YXIgY29tcCA9IHRoaXMuX2NvbXBhcmU7XG4gICAgdmFyIGNtcDtcblxuICAgIGlmICh0aGlzLl9ub0R1cGxpY2F0ZXMpIHtcbiAgICAgIHdoaWxlICh6KSB7XG4gICAgICAgIHAgPSB6O1xuICAgICAgICBjbXAgPSBjb21wKHoua2V5LCBrZXkpO1xuICAgICAgICBpZiAoY21wID09PSAwKSB7IHJldHVybjsgfVxuICAgICAgICBlbHNlIGlmIChjb21wKHoua2V5LCBrZXkpIDwgMCkgeyB6ID0gei5yaWdodDsgfVxuICAgICAgICBlbHNlIHsgeiA9IHoubGVmdDsgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB3aGlsZSAoeikge1xuICAgICAgICBwID0gejtcbiAgICAgICAgaWYgKGNvbXAoei5rZXksIGtleSkgPCAwKSB7IHogPSB6LnJpZ2h0OyB9XG4gICAgICAgIGVsc2UgeyB6ID0gei5sZWZ0OyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgeiA9IHsga2V5OiBrZXksIGRhdGE6IGRhdGEsIGxlZnQ6IG51bGwsIHJpZ2h0OiBudWxsLCBwYXJlbnQ6IHAgfTtcblxuICAgIGlmICghcCkgICAgICAgICAgICAgICAgICAgICAgICB7IHRoaXMuX3Jvb3QgPSB6OyB9XG4gICAgZWxzZSBpZiAoY29tcChwLmtleSwgei5rZXkpIDwgMCkgeyBwLnJpZ2h0ID0gejsgfVxuICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHAubGVmdD0gejsgfVxuXG4gICAgdGhpcy5zcGxheSh6KTtcbiAgICB0aGlzLl9zaXplKys7XG4gICAgcmV0dXJuIHo7XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiBmaW5kIChrZXkpIHtcbiAgICB2YXIgeiAgPSB0aGlzLl9yb290O1xuICAgIHZhciBjb21wID0gdGhpcy5fY29tcGFyZTtcbiAgICB3aGlsZSAoeikge1xuICAgICAgdmFyIGNtcCA9IGNvbXAoei5rZXksIGtleSk7XG4gICAgICBpZiAgICAoY21wIDwgMCkgeyB6ID0gei5yaWdodDsgfVxuICAgICAgZWxzZSBpZiAoY21wID4gMCkgeyB6ID0gei5sZWZ0OyB9XG4gICAgICBlbHNlICAgICAgICAgICAgeyByZXR1cm4gejsgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdHJlZSBjb250YWlucyBhIG5vZGUgd2l0aCB0aGUgZ2l2ZW4ga2V5XG4gICAqIEBwYXJhbXtLZXl9IGtleVxuICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlL2ZhbHNlXG4gICAqL1xuICBTcGxheVRyZWUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gY29udGFpbnMgKGtleSkge1xuICAgIHZhciBub2RlICAgICA9IHRoaXMuX3Jvb3Q7XG4gICAgdmFyIGNvbXBhcmF0b3IgPSB0aGlzLl9jb21wYXJlO1xuICAgIHdoaWxlIChub2RlKXtcbiAgICAgIHZhciBjbXAgPSBjb21wYXJhdG9yKGtleSwgbm9kZS5rZXkpO1xuICAgICAgaWYgICAgKGNtcCA9PT0gMCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgZWxzZSBpZiAoY21wIDwgMCkgeyBub2RlID0gbm9kZS5sZWZ0OyB9XG4gICAgICBlbHNlICAgICAgICAgICAgICB7IG5vZGUgPSBub2RlLnJpZ2h0OyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUgKGtleSkge1xuICAgIHZhciB6ID0gdGhpcy5maW5kKGtleSk7XG5cbiAgICBpZiAoIXopIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICB0aGlzLnNwbGF5KHopO1xuXG4gICAgaWYgKCF6LmxlZnQpIHsgdGhpcy5yZXBsYWNlKHosIHoucmlnaHQpOyB9XG4gICAgZWxzZSBpZiAoIXoucmlnaHQpIHsgdGhpcy5yZXBsYWNlKHosIHoubGVmdCk7IH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciB5ID0gdGhpcy5taW5Ob2RlKHoucmlnaHQpO1xuICAgICAgaWYgKHkucGFyZW50ICE9PSB6KSB7XG4gICAgICAgIHRoaXMucmVwbGFjZSh5LCB5LnJpZ2h0KTtcbiAgICAgICAgeS5yaWdodCA9IHoucmlnaHQ7XG4gICAgICAgIHkucmlnaHQucGFyZW50ID0geTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVwbGFjZSh6LCB5KTtcbiAgICAgIHkubGVmdCA9IHoubGVmdDtcbiAgICAgIHkubGVmdC5wYXJlbnQgPSB5O1xuICAgIH1cblxuICAgIHRoaXMuX3NpemUtLTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlTm9kZSA9IGZ1bmN0aW9uIHJlbW92ZU5vZGUgKHopIHtcbiAgICBpZiAoIXopIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICB0aGlzLnNwbGF5KHopO1xuXG4gICAgaWYgKCF6LmxlZnQpIHsgdGhpcy5yZXBsYWNlKHosIHoucmlnaHQpOyB9XG4gICAgZWxzZSBpZiAoIXoucmlnaHQpIHsgdGhpcy5yZXBsYWNlKHosIHoubGVmdCk7IH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciB5ID0gdGhpcy5taW5Ob2RlKHoucmlnaHQpO1xuICAgICAgaWYgKHkucGFyZW50ICE9PSB6KSB7XG4gICAgICAgIHRoaXMucmVwbGFjZSh5LCB5LnJpZ2h0KTtcbiAgICAgICAgeS5yaWdodCA9IHoucmlnaHQ7XG4gICAgICAgIHkucmlnaHQucGFyZW50ID0geTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVwbGFjZSh6LCB5KTtcbiAgICAgIHkubGVmdCA9IHoubGVmdDtcbiAgICAgIHkubGVmdC5wYXJlbnQgPSB5O1xuICAgIH1cblxuICAgIHRoaXMuX3NpemUtLTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUuZXJhc2UgPSBmdW5jdGlvbiBlcmFzZSAoa2V5KSB7XG4gICAgdmFyIHogPSB0aGlzLmZpbmQoa2V5KTtcbiAgICBpZiAoIXopIHsgcmV0dXJuOyB9XG5cbiAgICB0aGlzLnNwbGF5KHopO1xuXG4gICAgdmFyIHMgPSB6LmxlZnQ7XG4gICAgdmFyIHQgPSB6LnJpZ2h0O1xuXG4gICAgdmFyIHNNYXggPSBudWxsO1xuICAgIGlmIChzKSB7XG4gICAgICBzLnBhcmVudCA9IG51bGw7XG4gICAgICBzTWF4ID0gdGhpcy5tYXhOb2RlKHMpO1xuICAgICAgdGhpcy5zcGxheShzTWF4KTtcbiAgICAgIHRoaXMuX3Jvb3QgPSBzTWF4O1xuICAgIH1cbiAgICBpZiAodCkge1xuICAgICAgaWYgKHMpIHsgc01heC5yaWdodCA9IHQ7IH1cbiAgICAgIGVsc2UgeyB0aGlzLl9yb290ID0gdDsgfVxuICAgICAgdC5wYXJlbnQgPSBzTWF4O1xuICAgIH1cblxuICAgIHRoaXMuX3NpemUtLTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlcyBhbmQgcmV0dXJucyB0aGUgbm9kZSB3aXRoIHNtYWxsZXN0IGtleVxuICAgKiBAcmV0dXJuIHs/Tm9kZX1cbiAgICovXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUucG9wID0gZnVuY3Rpb24gcG9wICgpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuX3Jvb3QsIHJldHVyblZhbHVlID0gbnVsbDtcbiAgICBpZiAobm9kZSkge1xuICAgICAgd2hpbGUgKG5vZGUubGVmdCkgeyBub2RlID0gbm9kZS5sZWZ0OyB9XG4gICAgICByZXR1cm5WYWx1ZSA9IHsga2V5OiBub2RlLmtleSwgZGF0YTogbm9kZS5kYXRhIH07XG4gICAgICB0aGlzLnJlbW92ZShub2RlLmtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfTtcblxuXG4gIC8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cblxuICAvKipcbiAgICogU3VjY2Vzc29yIG5vZGVcbiAgICogQHBhcmFte05vZGV9IG5vZGVcbiAgICogQHJldHVybiB7P05vZGV9XG4gICAqL1xuICBTcGxheVRyZWUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiBuZXh0IChub2RlKSB7XG4gICAgdmFyIHN1Y2Nlc3NvciA9IG5vZGU7XG4gICAgaWYgKHN1Y2Nlc3Nvcikge1xuICAgICAgaWYgKHN1Y2Nlc3Nvci5yaWdodCkge1xuICAgICAgICBzdWNjZXNzb3IgPSBzdWNjZXNzb3IucmlnaHQ7XG4gICAgICAgIHdoaWxlIChzdWNjZXNzb3IgJiYgc3VjY2Vzc29yLmxlZnQpIHsgc3VjY2Vzc29yID0gc3VjY2Vzc29yLmxlZnQ7IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3NvciA9IG5vZGUucGFyZW50O1xuICAgICAgICB3aGlsZSAoc3VjY2Vzc29yICYmIHN1Y2Nlc3Nvci5yaWdodCA9PT0gbm9kZSkge1xuICAgICAgICAgIG5vZGUgPSBzdWNjZXNzb3I7IHN1Y2Nlc3NvciA9IHN1Y2Nlc3Nvci5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3NvcjtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBQcmVkZWNlc3NvciBub2RlXG4gICAqIEBwYXJhbXtOb2RlfSBub2RlXG4gICAqIEByZXR1cm4gez9Ob2RlfVxuICAgKi9cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5wcmV2ID0gZnVuY3Rpb24gcHJldiAobm9kZSkge1xuICAgIHZhciBwcmVkZWNlc3NvciA9IG5vZGU7XG4gICAgaWYgKHByZWRlY2Vzc29yKSB7XG4gICAgICBpZiAocHJlZGVjZXNzb3IubGVmdCkge1xuICAgICAgICBwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29yLmxlZnQ7XG4gICAgICAgIHdoaWxlIChwcmVkZWNlc3NvciAmJiBwcmVkZWNlc3Nvci5yaWdodCkgeyBwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29yLnJpZ2h0OyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmVkZWNlc3NvciA9IG5vZGUucGFyZW50O1xuICAgICAgICB3aGlsZSAocHJlZGVjZXNzb3IgJiYgcHJlZGVjZXNzb3IubGVmdCA9PT0gbm9kZSkge1xuICAgICAgICAgIG5vZGUgPSBwcmVkZWNlc3NvcjtcbiAgICAgICAgICBwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29yLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJlZGVjZXNzb3I7XG4gIH07XG4gIC8qIGVzbGludC1lbmFibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xuXG5cbiAgLyoqXG4gICAqIEBwYXJhbXtmb3JFYWNoQ2FsbGJhY2t9IGNhbGxiYWNrXG4gICAqIEByZXR1cm4ge1NwbGF5VHJlZX1cbiAgICovXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2ggKGNhbGxiYWNrKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9yb290O1xuICAgIHZhciBzID0gW10sIGRvbmUgPSBmYWxzZSwgaSA9IDA7XG5cbiAgICB3aGlsZSAoIWRvbmUpIHtcbiAgICAgIC8vIFJlYWNoIHRoZSBsZWZ0IG1vc3QgTm9kZSBvZiB0aGUgY3VycmVudCBOb2RlXG4gICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICAvLyBQbGFjZSBwb2ludGVyIHRvIGEgdHJlZSBub2RlIG9uIHRoZSBzdGFja1xuICAgICAgICAvLyBiZWZvcmUgdHJhdmVyc2luZyB0aGUgbm9kZSdzIGxlZnQgc3VidHJlZVxuICAgICAgICBzLnB1c2goY3VycmVudCk7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBCYWNrVHJhY2sgZnJvbSB0aGUgZW1wdHkgc3VidHJlZSBhbmQgdmlzaXQgdGhlIE5vZGVcbiAgICAgICAgLy8gYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2s7IGhvd2V2ZXIsIGlmIHRoZSBzdGFjayBpc1xuICAgICAgICAvLyBlbXB0eSB5b3UgYXJlIGRvbmVcbiAgICAgICAgaWYgKHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGN1cnJlbnQgPSBzLnBvcCgpO1xuICAgICAgICAgIGNhbGxiYWNrKGN1cnJlbnQsIGkrKyk7XG5cbiAgICAgICAgICAvLyBXZSBoYXZlIHZpc2l0ZWQgdGhlIG5vZGUgYW5kIGl0cyBsZWZ0XG4gICAgICAgICAgLy8gc3VidHJlZS4gTm93LCBpdCdzIHJpZ2h0IHN1YnRyZWUncyB0dXJuXG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7XG4gICAgICAgIH0gZWxzZSB7IGRvbmUgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIFdhbGsga2V5IHJhbmdlIGZyb20gYGxvd2AgdG8gYGhpZ2hgLiBTdG9wcyBpZiBgZm5gIHJldHVybnMgYSB2YWx1ZS5cbiAgICogQHBhcmFte0tleX0gICAgbG93XG4gICAqIEBwYXJhbXtLZXl9ICAgIGhpZ2hcbiAgICogQHBhcmFte0Z1bmN0aW9ufSBmblxuICAgKiBAcGFyYW17Kj99ICAgICBjdHhcbiAgICogQHJldHVybiB7U3BsYXlUcmVlfVxuICAgKi9cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5yYW5nZSA9IGZ1bmN0aW9uIHJhbmdlIChsb3csIGhpZ2gsIGZuLCBjdHgpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIFEgPSBbXTtcbiAgICB2YXIgY29tcGFyZSA9IHRoaXMuX2NvbXBhcmU7XG4gICAgdmFyIG5vZGUgPSB0aGlzLl9yb290LCBjbXA7XG5cbiAgICB3aGlsZSAoUS5sZW5ndGggIT09IDAgfHwgbm9kZSkge1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgUS5wdXNoKG5vZGUpO1xuICAgICAgICBub2RlID0gbm9kZS5sZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IFEucG9wKCk7XG4gICAgICAgIGNtcCA9IGNvbXBhcmUobm9kZS5rZXksIGhpZ2gpO1xuICAgICAgICBpZiAoY21wID4gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmUobm9kZS5rZXksIGxvdykgPj0gMCkge1xuICAgICAgICAgIGlmIChmbi5jYWxsKGN0eCwgbm9kZSkpIHsgcmV0dXJuIHRoaXMkMTsgfSAvLyBzdG9wIGlmIHNtdGggaXMgcmV0dXJuZWRcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5yaWdodDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGtleXMgaW4gb3JkZXJcbiAgICogQHJldHVybiB7QXJyYXk8S2V5Pn1cbiAgICovXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uIGtleXMgKCkge1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy5fcm9vdDtcbiAgICB2YXIgcyA9IFtdLCByID0gW10sIGRvbmUgPSBmYWxzZTtcblxuICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgcy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5sZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGN1cnJlbnQgPSBzLnBvcCgpO1xuICAgICAgICAgIHIucHVzaChjdXJyZW50LmtleSk7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7XG4gICAgICAgIH0gZWxzZSB7IGRvbmUgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYGRhdGFgIGZpZWxkcyBvZiBhbGwgbm9kZXMgaW4gb3JkZXIuXG4gICAqIEByZXR1cm4ge0FycmF5PFZhbHVlPn1cbiAgICovXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gdmFsdWVzICgpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuX3Jvb3Q7XG4gICAgdmFyIHMgPSBbXSwgciA9IFtdLCBkb25lID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoIWRvbmUpIHtcbiAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgIHMucHVzaChjdXJyZW50KTtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjdXJyZW50ID0gcy5wb3AoKTtcbiAgICAgICAgICByLnB1c2goY3VycmVudC5kYXRhKTtcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDtcbiAgICAgICAgfSBlbHNlIHsgZG9uZSA9IHRydWU7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cblxuICAvKipcbiAgICogUmV0dXJucyBub2RlIGF0IGdpdmVuIGluZGV4XG4gICAqIEBwYXJhbXtudW1iZXJ9IGluZGV4XG4gICAqIEByZXR1cm4gez9Ob2RlfVxuICAgKi9cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIGF0IChpbmRleCkge1xuICAgIC8vIHJlbW92ZWQgYWZ0ZXIgYSBjb25zaWRlcmF0aW9uLCBtb3JlIG1pc2xlYWRpbmcgdGhhbiB1c2VmdWxcbiAgICAvLyBpbmRleCA9IGluZGV4ICUgdGhpcy5zaXplO1xuICAgIC8vIGlmIChpbmRleCA8IDApIGluZGV4ID0gdGhpcy5zaXplIC0gaW5kZXg7XG5cbiAgICB2YXIgY3VycmVudCA9IHRoaXMuX3Jvb3Q7XG4gICAgdmFyIHMgPSBbXSwgZG9uZSA9IGZhbHNlLCBpID0gMDtcblxuICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgcy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5sZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGN1cnJlbnQgPSBzLnBvcCgpO1xuICAgICAgICAgIGlmIChpID09PSBpbmRleCkgeyByZXR1cm4gY3VycmVudDsgfVxuICAgICAgICAgIGkrKztcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDtcbiAgICAgICAgfSBlbHNlIHsgZG9uZSA9IHRydWU7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgLyoqXG4gICAqIEJ1bGstbG9hZCBpdGVtcy4gQm90aCBhcnJheSBoYXZlIHRvIGJlIHNhbWUgc2l6ZVxuICAgKiBAcGFyYW17QXJyYXk8S2V5Pn0gIGtleXNcbiAgICogQHBhcmFte0FycmF5PFZhbHVlPn1bdmFsdWVzXVxuICAgKiBAcGFyYW17Qm9vbGVhbn0gICAgIFtwcmVzb3J0PWZhbHNlXSBQcmUtc29ydCBrZXlzIGFuZCB2YWx1ZXMsIHVzaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZSdzIGNvbXBhcmF0b3IuIFNvcnRpbmcgaXMgZG9uZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLXBsYWNlXG4gICAqIEByZXR1cm4ge0FWTFRyZWV9XG4gICAqL1xuICBTcGxheVRyZWUucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiBsb2FkIChrZXlzLCB2YWx1ZXMsIHByZXNvcnQpIHtcbiAgICAgIGlmICgga2V5cyA9PT0gdm9pZCAwICkga2V5cyA9IFtdO1xuICAgICAgaWYgKCB2YWx1ZXMgPT09IHZvaWQgMCApIHZhbHVlcyA9IFtdO1xuICAgICAgaWYgKCBwcmVzb3J0ID09PSB2b2lkIDAgKSBwcmVzb3J0ID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fc2l6ZSAhPT0gMCkgeyB0aHJvdyBuZXcgRXJyb3IoJ2J1bGstbG9hZDogdHJlZSBpcyBub3QgZW1wdHknKTsgfVxuICAgIHZhciBzaXplID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKHByZXNvcnQpIHsgc29ydChrZXlzLCB2YWx1ZXMsIDAsIHNpemUgLSAxLCB0aGlzLl9jb21wYXJlKTsgfVxuICAgIHRoaXMuX3Jvb3QgPSBsb2FkUmVjdXJzaXZlKG51bGwsIGtleXMsIHZhbHVlcywgMCwgc2l6ZSk7XG4gICAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLm1pbiA9IGZ1bmN0aW9uIG1pbiAoKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLm1pbk5vZGUodGhpcy5fcm9vdCk7XG4gICAgaWYgKG5vZGUpIHsgcmV0dXJuIG5vZGUua2V5OyB9XG4gICAgZWxzZSAgICB7IHJldHVybiBudWxsOyB9XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uIG1heCAoKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLm1heE5vZGUodGhpcy5fcm9vdCk7XG4gICAgaWYgKG5vZGUpIHsgcmV0dXJuIG5vZGUua2V5OyB9XG4gICAgZWxzZSAgICB7IHJldHVybiBudWxsOyB9XG4gIH07XG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gaXNFbXB0eSAoKSB7IHJldHVybiB0aGlzLl9yb290ID09PSBudWxsOyB9O1xuICBwcm90b3R5cGVBY2Nlc3NvcnMuc2l6ZS5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaXplOyB9O1xuXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHRyZWUgYW5kIGxvYWQgaXQgd2l0aCBpdGVtc1xuICAgKiBAcGFyYW17QXJyYXk8S2V5Pn0gICAgICAgIGtleXNcbiAgICogQHBhcmFte0FycmF5PFZhbHVlPj99ICAgICAgW3ZhbHVlc11cblxuICAgKiBAcGFyYW17RnVuY3Rpb24/fSAgICAgICAgICBbY29tcGFyYXRvcl1cbiAgICogQHBhcmFte0Jvb2xlYW4/fSAgICAgICAgICAgW3ByZXNvcnQ9ZmFsc2VdIFByZS1zb3J0IGtleXMgYW5kIHZhbHVlcywgdXNpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlJ3MgY29tcGFyYXRvci4gU29ydGluZyBpcyBkb25lXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4tcGxhY2VcbiAgICogQHBhcmFte0Jvb2xlYW4/fSAgICAgICAgICAgW25vRHVwbGljYXRlcz1mYWxzZV0gQWxsb3cgZHVwbGljYXRlc1xuICAgKiBAcmV0dXJuIHtTcGxheVRyZWV9XG4gICAqL1xuICBTcGxheVRyZWUuY3JlYXRlVHJlZSA9IGZ1bmN0aW9uIGNyZWF0ZVRyZWUgKGtleXMsIHZhbHVlcywgY29tcGFyYXRvciwgcHJlc29ydCwgbm9EdXBsaWNhdGVzKSB7XG4gICAgcmV0dXJuIG5ldyBTcGxheVRyZWUoY29tcGFyYXRvciwgbm9EdXBsaWNhdGVzKS5sb2FkKGtleXMsIHZhbHVlcywgcHJlc29ydCk7XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFNwbGF5VHJlZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG5cbiAgZnVuY3Rpb24gbG9hZFJlY3Vyc2l2ZSAocGFyZW50LCBrZXlzLCB2YWx1ZXMsIHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgc2l6ZSA9IGVuZCAtIHN0YXJ0O1xuICAgIGlmIChzaXplID4gMCkge1xuICAgICAgdmFyIG1pZGRsZSA9IHN0YXJ0ICsgTWF0aC5mbG9vcihzaXplIC8gMik7XG4gICAgICB2YXIga2V5ICAgID0ga2V5c1ttaWRkbGVdO1xuICAgICAgdmFyIGRhdGEgICA9IHZhbHVlc1ttaWRkbGVdO1xuICAgICAgdmFyIG5vZGUgICA9IHsga2V5OiBrZXksIGRhdGE6IGRhdGEsIHBhcmVudDogcGFyZW50IH07XG4gICAgICBub2RlLmxlZnQgICAgPSBsb2FkUmVjdXJzaXZlKG5vZGUsIGtleXMsIHZhbHVlcywgc3RhcnQsIG1pZGRsZSk7XG4gICAgICBub2RlLnJpZ2h0ICAgPSBsb2FkUmVjdXJzaXZlKG5vZGUsIGtleXMsIHZhbHVlcywgbWlkZGxlICsgMSwgZW5kKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gc29ydChrZXlzLCB2YWx1ZXMsIGxlZnQsIHJpZ2h0LCBjb21wYXJlKSB7XG4gICAgaWYgKGxlZnQgPj0gcmlnaHQpIHsgcmV0dXJuOyB9XG5cbiAgICB2YXIgcGl2b3QgPSBrZXlzWyhsZWZ0ICsgcmlnaHQpID4+IDFdO1xuICAgIHZhciBpID0gbGVmdCAtIDE7XG4gICAgdmFyIGogPSByaWdodCArIDE7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgZG8geyBpKys7IH0gd2hpbGUgKGNvbXBhcmUoa2V5c1tpXSwgcGl2b3QpIDwgMCk7XG4gICAgICBkbyB7IGotLTsgfSB3aGlsZSAoY29tcGFyZShrZXlzW2pdLCBwaXZvdCkgPiAwKTtcbiAgICAgIGlmIChpID49IGopIHsgYnJlYWs7IH1cblxuICAgICAgdmFyIHRtcCA9IGtleXNbaV07XG4gICAgICBrZXlzW2ldID0ga2V5c1tqXTtcbiAgICAgIGtleXNbal0gPSB0bXA7XG5cbiAgICAgIHRtcCA9IHZhbHVlc1tpXTtcbiAgICAgIHZhbHVlc1tpXSA9IHZhbHVlc1tqXTtcbiAgICAgIHZhbHVlc1tqXSA9IHRtcDtcbiAgICB9XG5cbiAgICBzb3J0KGtleXMsIHZhbHVlcywgIGxlZnQsICAgICBqLCBjb21wYXJlKTtcbiAgICBzb3J0KGtleXMsIHZhbHVlcywgaiArIDEsIHJpZ2h0LCBjb21wYXJlKTtcbiAgfVxuXG4gIHZhciBOT1JNQUwgICAgICAgICAgICAgICA9IDA7XG4gIHZhciBOT05fQ09OVFJJQlVUSU5HICAgICA9IDE7XG4gIHZhciBTQU1FX1RSQU5TSVRJT04gICAgICA9IDI7XG4gIHZhciBESUZGRVJFTlRfVFJBTlNJVElPTiA9IDM7XG5cbiAgdmFyIElOVEVSU0VDVElPTiA9IDA7XG4gIHZhciBVTklPTiAgICAgICAgPSAxO1xuICB2YXIgRElGRkVSRU5DRSAgID0gMjtcbiAgdmFyIFhPUiAgICAgICAgICA9IDM7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSAge1N3ZWVwRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSAge1N3ZWVwRXZlbnR9IHByZXZcbiAgICogQHBhcmFtICB7T3BlcmF0aW9ufSBvcGVyYXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXB1dGVGaWVsZHMgKGV2ZW50LCBwcmV2LCBvcGVyYXRpb24pIHtcbiAgICAvLyBjb21wdXRlIGluT3V0IGFuZCBvdGhlckluT3V0IGZpZWxkc1xuICAgIGlmIChwcmV2ID09PSBudWxsKSB7XG4gICAgICBldmVudC5pbk91dCAgICAgID0gZmFsc2U7XG4gICAgICBldmVudC5vdGhlckluT3V0ID0gdHJ1ZTtcblxuICAgIC8vIHByZXZpb3VzIGxpbmUgc2VnbWVudCBpbiBzd2VlcGxpbmUgYmVsb25ncyB0byB0aGUgc2FtZSBwb2x5Z29uXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChldmVudC5pc1N1YmplY3QgPT09IHByZXYuaXNTdWJqZWN0KSB7XG4gICAgICAgIGV2ZW50LmluT3V0ICAgICAgPSAhcHJldi5pbk91dDtcbiAgICAgICAgZXZlbnQub3RoZXJJbk91dCA9IHByZXYub3RoZXJJbk91dDtcblxuICAgICAgLy8gcHJldmlvdXMgbGluZSBzZWdtZW50IGluIHN3ZWVwbGluZSBiZWxvbmdzIHRvIHRoZSBjbGlwcGluZyBwb2x5Z29uXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5pbk91dCAgICAgID0gIXByZXYub3RoZXJJbk91dDtcbiAgICAgICAgZXZlbnQub3RoZXJJbk91dCA9IHByZXYuaXNWZXJ0aWNhbCgpID8gIXByZXYuaW5PdXQgOiBwcmV2LmluT3V0O1xuICAgICAgfVxuXG4gICAgICAvLyBjb21wdXRlIHByZXZJblJlc3VsdCBmaWVsZFxuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgZXZlbnQucHJldkluUmVzdWx0ID0gKCFpblJlc3VsdChwcmV2LCBvcGVyYXRpb24pIHx8IHByZXYuaXNWZXJ0aWNhbCgpKVxuICAgICAgICAgID8gcHJldi5wcmV2SW5SZXN1bHQgOiBwcmV2O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZSBsaW5lIHNlZ21lbnQgYmVsb25ncyB0byB0aGUgQm9vbGVhbiBvcGVyYXRpb25cbiAgICBldmVudC5pblJlc3VsdCA9IGluUmVzdWx0KGV2ZW50LCBvcGVyYXRpb24pO1xuICB9XG5cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBpbmRlbnQgKi9cbiAgZnVuY3Rpb24gaW5SZXN1bHQoZXZlbnQsIG9wZXJhdGlvbikge1xuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSBOT1JNQUw6XG4gICAgICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7XG4gICAgICAgICAgY2FzZSBJTlRFUlNFQ1RJT046XG4gICAgICAgICAgICByZXR1cm4gIWV2ZW50Lm90aGVySW5PdXQ7XG4gICAgICAgICAgY2FzZSBVTklPTjpcbiAgICAgICAgICAgIHJldHVybiBldmVudC5vdGhlckluT3V0O1xuICAgICAgICAgIGNhc2UgRElGRkVSRU5DRTpcbiAgICAgICAgICAgIC8vIHJldHVybiAoZXZlbnQuaXNTdWJqZWN0ICYmICFldmVudC5vdGhlckluT3V0KSB8fFxuICAgICAgICAgICAgLy8gICAgICAgICAoIWV2ZW50LmlzU3ViamVjdCAmJiBldmVudC5vdGhlckluT3V0KTtcbiAgICAgICAgICAgIHJldHVybiAoZXZlbnQuaXNTdWJqZWN0ICYmIGV2ZW50Lm90aGVySW5PdXQpIHx8XG4gICAgICAgICAgICAgICAgICAgICghZXZlbnQuaXNTdWJqZWN0ICYmICFldmVudC5vdGhlckluT3V0KTtcbiAgICAgICAgICBjYXNlIFhPUjpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTQU1FX1RSQU5TSVRJT046XG4gICAgICAgIHJldHVybiBvcGVyYXRpb24gPT09IElOVEVSU0VDVElPTiB8fCBvcGVyYXRpb24gPT09IFVOSU9OO1xuICAgICAgY2FzZSBESUZGRVJFTlRfVFJBTlNJVElPTjpcbiAgICAgICAgcmV0dXJuIG9wZXJhdGlvbiA9PT0gRElGRkVSRU5DRTtcbiAgICAgIGNhc2UgTk9OX0NPTlRSSUJVVElORzpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBpbmRlbnQgKi9cblxuICB2YXIgU3dlZXBFdmVudCA9IGZ1bmN0aW9uIFN3ZWVwRXZlbnQgKHBvaW50LCBsZWZ0LCBvdGhlckV2ZW50LCBpc1N1YmplY3QsIGVkZ2VUeXBlKSB7XG5cbiAgICAvKipcbiAgICAgKiBJcyBsZWZ0IGVuZHBvaW50P1xuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7QXJyYXkuPE51bWJlcj59XG4gICAgICovXG4gICAgdGhpcy5wb2ludCA9IHBvaW50O1xuXG4gICAgLyoqXG4gICAgICogT3RoZXIgZWRnZSByZWZlcmVuY2VcbiAgICAgKiBAdHlwZSB7U3dlZXBFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLm90aGVyRXZlbnQgPSBvdGhlckV2ZW50O1xuXG4gICAgLyoqXG4gICAgICogQmVsb25ncyB0byBzb3VyY2Ugb3IgY2xpcHBpbmcgcG9seWdvblxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNTdWJqZWN0ID0gaXNTdWJqZWN0O1xuXG4gICAgLyoqXG4gICAgICogRWRnZSBjb250cmlidXRpb24gdHlwZVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gZWRnZVR5cGUgfHwgTk9STUFMO1xuXG5cbiAgICAvKipcbiAgICAgKiBJbi1vdXQgdHJhbnNpdGlvbiBmb3IgdGhlIHN3ZWVwbGluZSBjcm9zc2luZyBwb2x5Z29uXG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pbk91dCA9IGZhbHNlO1xuXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm90aGVySW5PdXQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFByZXZpb3VzIGV2ZW50IGluIHJlc3VsdD9cbiAgICAgKiBAdHlwZSB7U3dlZXBFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLnByZXZJblJlc3VsdCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBEb2VzIGV2ZW50IGJlbG9uZyB0byByZXN1bHQ/XG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pblJlc3VsdCA9IGZhbHNlO1xuXG5cbiAgICAvLyBjb25uZWN0aW9uIHN0ZXBcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVzdWx0SW5PdXQgPSBmYWxzZTtcblxuICAgIHRoaXMuaXNFeHRlcmlvclJpbmcgPSB0cnVlO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIEBwYXJhbXtBcnJheS48TnVtYmVyPn1wXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBTd2VlcEV2ZW50LnByb3RvdHlwZS5pc0JlbG93ID0gZnVuY3Rpb24gaXNCZWxvdyAocCkge1xuICAgIHZhciBwMCA9IHRoaXMucG9pbnQsIHAxID0gdGhpcy5vdGhlckV2ZW50LnBvaW50O1xuICAgIHJldHVybiB0aGlzLmxlZnRcbiAgICAgID8gKHAwWzBdIC0gcFswXSkgKiAocDFbMV0gLSBwWzFdKSAtIChwMVswXSAtIHBbMF0pICogKHAwWzFdIC0gcFsxXSkgPiAwXG4gICAgICAvLyBzaWduZWRBcmVhKHRoaXMucG9pbnQsIHRoaXMub3RoZXJFdmVudC5wb2ludCwgcCkgPiAwIDpcbiAgICAgIDogKHAxWzBdIC0gcFswXSkgKiAocDBbMV0gLSBwWzFdKSAtIChwMFswXSAtIHBbMF0pICogKHAxWzFdIC0gcFsxXSkgPiAwO1xuICAgICAgLy9zaWduZWRBcmVhKHRoaXMub3RoZXJFdmVudC5wb2ludCwgdGhpcy5wb2ludCwgcCkgPiAwO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIEBwYXJhbXtBcnJheS48TnVtYmVyPn1wXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBTd2VlcEV2ZW50LnByb3RvdHlwZS5pc0Fib3ZlID0gZnVuY3Rpb24gaXNBYm92ZSAocCkge1xuICAgIHJldHVybiAhdGhpcy5pc0JlbG93KHApO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBTd2VlcEV2ZW50LnByb3RvdHlwZS5pc1ZlcnRpY2FsID0gZnVuY3Rpb24gaXNWZXJ0aWNhbCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucG9pbnRbMF0gPT09IHRoaXMub3RoZXJFdmVudC5wb2ludFswXTtcbiAgfTtcblxuXG4gIFN3ZWVwRXZlbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gY2xvbmUgKCkge1xuICAgIHZhciBjb3B5ID0gbmV3IFN3ZWVwRXZlbnQoXG4gICAgICB0aGlzLnBvaW50LCB0aGlzLmxlZnQsIHRoaXMub3RoZXJFdmVudCwgdGhpcy5pc1N1YmplY3QsIHRoaXMudHlwZSk7XG5cbiAgICBjb3B5LmluUmVzdWx0ICAgICA9IHRoaXMuaW5SZXN1bHQ7XG4gICAgY29weS5wcmV2SW5SZXN1bHQgPSB0aGlzLnByZXZJblJlc3VsdDtcbiAgICBjb3B5LmlzRXh0ZXJpb3JSaW5nID0gdGhpcy5pc0V4dGVyaW9yUmluZztcbiAgICBjb3B5LmluT3V0ICAgICAgICA9IHRoaXMuaW5PdXQ7XG4gICAgY29weS5vdGhlckluT3V0ICAgPSB0aGlzLm90aGVySW5PdXQ7XG5cbiAgICByZXR1cm4gY29weTtcbiAgfTtcblxuICBmdW5jdGlvbiBlcXVhbHMocDEsIHAyKSB7XG4gICAgaWYgKHAxWzBdID09PSBwMlswXSkge1xuICAgICAgaWYgKHAxWzFdID09PSBwMlsxXSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gY29uc3QgRVBTSUxPTiA9IDFlLTk7XG4gIC8vIGNvbnN0IGFicyA9IE1hdGguYWJzO1xuICAvLyBUT0RPIGh0dHBzOi8vZ2l0aHViLmNvbS93OHIvbWFydGluZXovaXNzdWVzLzYjaXNzdWVjb21tZW50LTI2Mjg0NzE2NFxuICAvLyBQcmVjaXNpb24gcHJvYmxlbS5cbiAgLy9cbiAgLy8gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlcXVhbHMocDEsIHAyKSB7XG4gIC8vICAgcmV0dXJuIGFicyhwMVswXSAtIHAyWzBdKSA8PSBFUFNJTE9OICYmIGFicyhwMVsxXSAtIHAyWzFdKSA8PSBFUFNJTE9OO1xuICAvLyB9O1xuXG4gIC8qKlxuICAgKiBTaWduZWQgYXJlYSBvZiB0aGUgdHJpYW5nbGUgKHAwLCBwMSwgcDIpXG4gICAqIEBwYXJhbSAge0FycmF5LjxOdW1iZXI+fSBwMFxuICAgKiBAcGFyYW0gIHtBcnJheS48TnVtYmVyPn0gcDFcbiAgICogQHBhcmFtICB7QXJyYXkuPE51bWJlcj59IHAyXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGZ1bmN0aW9uIHNpZ25lZEFyZWEocDAsIHAxLCBwMikge1xuICAgIHJldHVybiAocDBbMF0gLSBwMlswXSkgKiAocDFbMV0gLSBwMlsxXSkgLSAocDFbMF0gLSBwMlswXSkgKiAocDBbMV0gLSBwMlsxXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtICB7U3dlZXBFdmVudH0gZTFcbiAgICogQHBhcmFtICB7U3dlZXBFdmVudH0gZTJcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGFyZUV2ZW50cyhlMSwgZTIpIHtcbiAgICB2YXIgcDEgPSBlMS5wb2ludDtcbiAgICB2YXIgcDIgPSBlMi5wb2ludDtcblxuICAgIC8vIERpZmZlcmVudCB4LWNvb3JkaW5hdGVcbiAgICBpZiAocDFbMF0gPiBwMlswXSkgeyByZXR1cm4gMTsgfVxuICAgIGlmIChwMVswXSA8IHAyWzBdKSB7IHJldHVybiAtMTsgfVxuXG4gICAgLy8gRGlmZmVyZW50IHBvaW50cywgYnV0IHNhbWUgeC1jb29yZGluYXRlXG4gICAgLy8gRXZlbnQgd2l0aCBsb3dlciB5LWNvb3JkaW5hdGUgaXMgcHJvY2Vzc2VkIGZpcnN0XG4gICAgaWYgKHAxWzFdICE9PSBwMlsxXSkgeyByZXR1cm4gcDFbMV0gPiBwMlsxXSA/IDEgOiAtMTsgfVxuXG4gICAgcmV0dXJuIHNwZWNpYWxDYXNlcyhlMSwgZTIsIHAxLCBwMik7XG4gIH1cblxuXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gIGZ1bmN0aW9uIHNwZWNpYWxDYXNlcyhlMSwgZTIsIHAxLCBwMikge1xuICAgIC8vIFNhbWUgY29vcmRpbmF0ZXMsIGJ1dCBvbmUgaXMgYSBsZWZ0IGVuZHBvaW50IGFuZCB0aGUgb3RoZXIgaXNcbiAgICAvLyBhIHJpZ2h0IGVuZHBvaW50LiBUaGUgcmlnaHQgZW5kcG9pbnQgaXMgcHJvY2Vzc2VkIGZpcnN0XG4gICAgaWYgKGUxLmxlZnQgIT09IGUyLmxlZnQpXG4gICAgICB7IHJldHVybiBlMS5sZWZ0ID8gMSA6IC0xOyB9XG5cbiAgICAvLyBjb25zdCBwMiA9IGUxLm90aGVyRXZlbnQucG9pbnQsIHAzID0gZTIub3RoZXJFdmVudC5wb2ludDtcbiAgICAvLyBjb25zdCBzYSA9IChwMVswXSAtIHAzWzBdKSAqIChwMlsxXSAtIHAzWzFdKSAtIChwMlswXSAtIHAzWzBdKSAqIChwMVsxXSAtIHAzWzFdKVxuICAgIC8vIFNhbWUgY29vcmRpbmF0ZXMsIGJvdGggZXZlbnRzXG4gICAgLy8gYXJlIGxlZnQgZW5kcG9pbnRzIG9yIHJpZ2h0IGVuZHBvaW50cy5cbiAgICAvLyBub3QgY29sbGluZWFyXG4gICAgaWYgKHNpZ25lZEFyZWEocDEsIGUxLm90aGVyRXZlbnQucG9pbnQsIGUyLm90aGVyRXZlbnQucG9pbnQpICE9PSAwKSB7XG4gICAgICAvLyB0aGUgZXZlbnQgYXNzb2NpYXRlIHRvIHRoZSBib3R0b20gc2VnbWVudCBpcyBwcm9jZXNzZWQgZmlyc3RcbiAgICAgIHJldHVybiAoIWUxLmlzQmVsb3coZTIub3RoZXJFdmVudC5wb2ludCkpID8gMSA6IC0xO1xuICAgIH1cblxuICAgIHJldHVybiAoIWUxLmlzU3ViamVjdCAmJiBlMi5pc1N1YmplY3QpID8gMSA6IC0xO1xuICB9XG4gIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuICAvKipcbiAgICogQHBhcmFtICB7U3dlZXBFdmVudH0gc2VcbiAgICogQHBhcmFtICB7QXJyYXkuPE51bWJlcj59IHBcbiAgICogQHBhcmFtICB7UXVldWV9IHF1ZXVlXG4gICAqIEByZXR1cm4ge1F1ZXVlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGl2aWRlU2VnbWVudChzZSwgcCwgcXVldWUpICB7XG4gICAgdmFyIHIgPSBuZXcgU3dlZXBFdmVudChwLCBmYWxzZSwgc2UsICAgICAgICAgICAgc2UuaXNTdWJqZWN0KTtcbiAgICB2YXIgbCA9IG5ldyBTd2VlcEV2ZW50KHAsIHRydWUsICBzZS5vdGhlckV2ZW50LCBzZS5pc1N1YmplY3QpO1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuICAgIGlmIChlcXVhbHMoc2UucG9pbnQsIHNlLm90aGVyRXZlbnQucG9pbnQpKSB7XG5cbiAgICAgIGNvbnNvbGUud2Fybignd2hhdCBpcyB0aGF0LCBhIGNvbGxhcHNlZCBzZWdtZW50PycsIHNlKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG5cbiAgICByLmNvbnRvdXJJZCA9IGwuY29udG91cklkID0gc2UuY29udG91cklkO1xuXG4gICAgLy8gYXZvaWQgYSByb3VuZGluZyBlcnJvci4gVGhlIGxlZnQgZXZlbnQgd291bGQgYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSByaWdodCBldmVudFxuICAgIGlmIChjb21wYXJlRXZlbnRzKGwsIHNlLm90aGVyRXZlbnQpID4gMCkge1xuICAgICAgc2Uub3RoZXJFdmVudC5sZWZ0ID0gdHJ1ZTtcbiAgICAgIGwubGVmdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGF2b2lkIGEgcm91bmRpbmcgZXJyb3IuIFRoZSBsZWZ0IGV2ZW50IHdvdWxkIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgcmlnaHQgZXZlbnRcbiAgICAvLyBpZiAoY29tcGFyZUV2ZW50cyhzZSwgcikgPiAwKSB7fVxuXG4gICAgc2Uub3RoZXJFdmVudC5vdGhlckV2ZW50ID0gbDtcbiAgICBzZS5vdGhlckV2ZW50ID0gcjtcblxuICAgIHF1ZXVlLnB1c2gobCk7XG4gICAgcXVldWUucHVzaChyKTtcblxuICAgIHJldHVybiBxdWV1ZTtcbiAgfVxuXG4gIC8vY29uc3QgRVBTID0gMWUtOTtcblxuICAvKipcbiAgICogRmluZHMgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0d28gdmVjdG9ycyAoaWYgd2UgcHJldGVuZFxuICAgKiB0aGV5J3JlIGluIHRocmVlIGRpbWVuc2lvbnMpXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhIEZpcnN0IHZlY3RvclxuICAgKiBAcGFyYW0ge09iamVjdH0gYiBTZWNvbmQgdmVjdG9yXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBtYWduaXR1ZGUgb2YgdGhlIGNyb3NzIHByb2R1Y3RcbiAgICovXG4gIGZ1bmN0aW9uIGNyb3NzUHJvZHVjdChhLCBiKSB7XG4gICAgcmV0dXJuIChhWzBdICogYlsxXSkgLSAoYVsxXSAqIGJbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjdG9ycy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGEgRmlyc3QgdmVjdG9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBiIFNlY29uZCB2ZWN0b3JcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge051bWJlcn0gVGhlIGRvdCBwcm9kdWN0XG4gICAqL1xuICBmdW5jdGlvbiBkb3RQcm9kdWN0KGEsIGIpIHtcbiAgICByZXR1cm4gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYlsxXSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGludGVyc2VjdGlvbiAoaWYgYW55KSBiZXR3ZWVuIHR3byBsaW5lIHNlZ21lbnRzIGEgYW5kIGIsIGdpdmVuIHRoZVxuICAgKiBsaW5lIHNlZ21lbnRzJyBlbmQgcG9pbnRzIGExLCBhMiBhbmQgYjEsIGIyLlxuICAgKlxuICAgKiBUaGlzIGFsZ29yaXRobSBpcyBiYXNlZCBvbiBTY2huZWlkZXIgYW5kIEViZXJseS5cbiAgICogaHR0cDovL3d3dy5jaW1lYy5vcmcuYXIvfm5jYWx2by9TY2huZWlkZXJfRWJlcmx5LnBkZlxuICAgKiBQYWdlIDI0NC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48TnVtYmVyPn0gYTEgcG9pbnQgb2YgZmlyc3QgbGluZVxuICAgKiBAcGFyYW0ge0FycmF5LjxOdW1iZXI+fSBhMiBwb2ludCBvZiBmaXJzdCBsaW5lXG4gICAqIEBwYXJhbSB7QXJyYXkuPE51bWJlcj59IGIxIHBvaW50IG9mIHNlY29uZCBsaW5lXG4gICAqIEBwYXJhbSB7QXJyYXkuPE51bWJlcj59IGIyIHBvaW50IG9mIHNlY29uZCBsaW5lXG4gICAqIEBwYXJhbSB7Qm9vbGVhbj19ICAgICAgIG5vRW5kcG9pbnRUb3VjaCB3aGV0aGVyIHRvIHNraXAgc2luZ2xlIHRvdWNocG9pbnRzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVhbmluZyBjb25uZWN0ZWQgc2VnbWVudHMpIGFzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25zXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPE51bWJlcj4+fE51bGx9IElmIHRoZSBsaW5lcyBpbnRlcnNlY3QsIHRoZSBwb2ludCBvZlxuICAgKiBpbnRlcnNlY3Rpb24uIElmIHRoZXkgb3ZlcmxhcCwgdGhlIHR3byBlbmQgcG9pbnRzIG9mIHRoZSBvdmVybGFwcGluZyBzZWdtZW50LlxuICAgKiBPdGhlcndpc2UsIG51bGwuXG4gICAqL1xuICBmdW5jdGlvbiBpbnRlcnNlY3Rpb24gKGExLCBhMiwgYjEsIGIyLCBub0VuZHBvaW50VG91Y2gpIHtcbiAgICAvLyBUaGUgYWxnb3JpdGhtIGV4cGVjdHMgb3VyIGxpbmVzIGluIHRoZSBmb3JtIFAgKyBzZCwgd2hlcmUgUCBpcyBhIHBvaW50LFxuICAgIC8vIHMgaXMgb24gdGhlIGludGVydmFsIFswLCAxXSwgYW5kIGQgaXMgYSB2ZWN0b3IuXG4gICAgLy8gV2UgYXJlIHBhc3NlZCB0d28gcG9pbnRzLiBQIGNhbiBiZSB0aGUgZmlyc3QgcG9pbnQgb2YgZWFjaCBwYWlyLiBUaGVcbiAgICAvLyB2ZWN0b3IsIHRoZW4sIGNvdWxkIGJlIHRob3VnaHQgb2YgYXMgdGhlIGRpc3RhbmNlIChpbiB4IGFuZCB5IGNvbXBvbmVudHMpXG4gICAgLy8gZnJvbSB0aGUgZmlyc3QgcG9pbnQgdG8gdGhlIHNlY29uZCBwb2ludC5cbiAgICAvLyBTbyBmaXJzdCwgbGV0J3MgbWFrZSBvdXIgdmVjdG9yczpcbiAgICB2YXIgdmEgPSBbYTJbMF0gLSBhMVswXSwgYTJbMV0gLSBhMVsxXV07XG4gICAgdmFyIHZiID0gW2IyWzBdIC0gYjFbMF0sIGIyWzFdIC0gYjFbMV1dO1xuICAgIC8vIFdlIGFsc28gZGVmaW5lIGEgZnVuY3Rpb24gdG8gY29udmVydCBiYWNrIHRvIHJlZ3VsYXIgcG9pbnQgZm9ybTpcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGFycm93LWJvZHktc3R5bGUgKi9cblxuICAgIGZ1bmN0aW9uIHRvUG9pbnQocCwgcywgZCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgcFswXSArIHMgKiBkWzBdLFxuICAgICAgICBwWzFdICsgcyAqIGRbMV1cbiAgICAgIF07XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWVuYWJsZSBhcnJvdy1ib2R5LXN0eWxlICovXG5cbiAgICAvLyBUaGUgcmVzdCBpcyBwcmV0dHkgbXVjaCBhIHN0cmFpZ2h0IHBvcnQgb2YgdGhlIGFsZ29yaXRobS5cbiAgICB2YXIgZSA9IFtiMVswXSAtIGExWzBdLCBiMVsxXSAtIGExWzFdXTtcbiAgICB2YXIga3Jvc3MgICAgPSBjcm9zc1Byb2R1Y3QodmEsIHZiKTtcbiAgICB2YXIgc3FyS3Jvc3MgPSBrcm9zcyAqIGtyb3NzO1xuICAgIHZhciBzcXJMZW5BICA9IGRvdFByb2R1Y3QodmEsIHZhKTtcbiAgICAvL2NvbnN0IHNxckxlbkIgID0gZG90UHJvZHVjdCh2YiwgdmIpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGxpbmUgaW50ZXJzZWN0aW9uLiBUaGlzIHdvcmtzIGJlY2F1c2Ugb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlXG4gICAgLy8gY3Jvc3MgcHJvZHVjdCAtLSBzcGVjaWZpY2FsbHksIHR3byB2ZWN0b3JzIGFyZSBwYXJhbGxlbCBpZiBhbmQgb25seSBpZiB0aGVcbiAgICAvLyBjcm9zcyBwcm9kdWN0IGlzIHRoZSAwIHZlY3Rvci4gVGhlIGZ1bGwgY2FsY3VsYXRpb24gaW52b2x2ZXMgcmVsYXRpdmUgZXJyb3JcbiAgICAvLyB0byBhY2NvdW50IGZvciBwb3NzaWJsZSB2ZXJ5IHNtYWxsIGxpbmUgc2VnbWVudHMuIFNlZSBTY2huZWlkZXIgJiBFYmVybHlcbiAgICAvLyBmb3IgZGV0YWlscy5cbiAgICBpZiAoc3FyS3Jvc3MgPiAwLyogRVBTICogc3FyTGVuQiAqIHNxTGVuQSAqLykge1xuICAgICAgLy8gSWYgdGhleSdyZSBub3QgcGFyYWxsZWwsIHRoZW4gKGJlY2F1c2UgdGhlc2UgYXJlIGxpbmUgc2VnbWVudHMpIHRoZXlcbiAgICAgIC8vIHN0aWxsIG1pZ2h0IG5vdCBhY3R1YWxseSBpbnRlcnNlY3QuIFRoaXMgY29kZSBjaGVja3MgdGhhdCB0aGVcbiAgICAgIC8vIGludGVyc2VjdGlvbiBwb2ludCBvZiB0aGUgbGluZXMgaXMgYWN0dWFsbHkgb24gYm90aCBsaW5lIHNlZ21lbnRzLlxuICAgICAgdmFyIHMgPSBjcm9zc1Byb2R1Y3QoZSwgdmIpIC8ga3Jvc3M7XG4gICAgICBpZiAocyA8IDAgfHwgcyA+IDEpIHtcbiAgICAgICAgLy8gbm90IG9uIGxpbmUgc2VnbWVudCBhXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIHQgPSBjcm9zc1Byb2R1Y3QoZSwgdmEpIC8ga3Jvc3M7XG4gICAgICBpZiAodCA8IDAgfHwgdCA+IDEpIHtcbiAgICAgICAgLy8gbm90IG9uIGxpbmUgc2VnbWVudCBiXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHMgPT09IDAgfHwgcyA9PT0gMSkge1xuICAgICAgICAvLyBvbiBhbiBlbmRwb2ludCBvZiBsaW5lIHNlZ21lbnQgYVxuICAgICAgICByZXR1cm4gbm9FbmRwb2ludFRvdWNoID8gbnVsbCA6IFt0b1BvaW50KGExLCBzLCB2YSldO1xuICAgICAgfVxuICAgICAgaWYgKHQgPT09IDAgfHwgdCA9PT0gMSkge1xuICAgICAgICAvLyBvbiBhbiBlbmRwb2ludCBvZiBsaW5lIHNlZ21lbnQgYlxuICAgICAgICByZXR1cm4gbm9FbmRwb2ludFRvdWNoID8gbnVsbCA6IFt0b1BvaW50KGIxLCB0LCB2YildO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFt0b1BvaW50KGExLCBzLCB2YSldO1xuICAgIH1cblxuICAgIC8vIElmIHdlJ3ZlIHJlYWNoZWQgdGhpcyBwb2ludCwgdGhlbiB0aGUgbGluZXMgYXJlIGVpdGhlciBwYXJhbGxlbCBvciB0aGVcbiAgICAvLyBzYW1lLCBidXQgdGhlIHNlZ21lbnRzIGNvdWxkIG92ZXJsYXAgcGFydGlhbGx5IG9yIGZ1bGx5LCBvciBub3QgYXQgYWxsLlxuICAgIC8vIFNvIHdlIG5lZWQgdG8gZmluZCB0aGUgb3ZlcmxhcCwgaWYgYW55LiBUbyBkbyB0aGF0LCB3ZSBjYW4gdXNlIGUsIHdoaWNoIGlzXG4gICAgLy8gdGhlICh2ZWN0b3IpIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGluaXRpYWwgcG9pbnRzLiBJZiB0aGlzIGlzIHBhcmFsbGVsXG4gICAgLy8gd2l0aCB0aGUgbGluZSBpdHNlbGYsIHRoZW4gdGhlIHR3byBsaW5lcyBhcmUgdGhlIHNhbWUgbGluZSwgYW5kIHRoZXJlIHdpbGxcbiAgICAvLyBiZSBvdmVybGFwLlxuICAgIC8vY29uc3Qgc3FyTGVuRSA9IGRvdFByb2R1Y3QoZSwgZSk7XG4gICAga3Jvc3MgPSBjcm9zc1Byb2R1Y3QoZSwgdmEpO1xuICAgIHNxcktyb3NzID0ga3Jvc3MgKiBrcm9zcztcblxuICAgIGlmIChzcXJLcm9zcyA+IDAgLyogRVBTICogc3FMZW5CICogc3FMZW5FICovKSB7XG4gICAgLy8gTGluZXMgYXJlIGp1c3QgcGFyYWxsZWwsIG5vdCB0aGUgc2FtZS4gTm8gb3ZlcmxhcC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBzYSA9IGRvdFByb2R1Y3QodmEsIGUpIC8gc3FyTGVuQTtcbiAgICB2YXIgc2IgPSBzYSArIGRvdFByb2R1Y3QodmEsIHZiKSAvIHNxckxlbkE7XG4gICAgdmFyIHNtaW4gPSBNYXRoLm1pbihzYSwgc2IpO1xuICAgIHZhciBzbWF4ID0gTWF0aC5tYXgoc2EsIHNiKTtcblxuICAgIC8vIHRoaXMgaXMsIGVzc2VudGlhbGx5LCB0aGUgRmluZEludGVyc2VjdGlvbiBhY3Rpbmcgb24gZmxvYXRzIGZyb21cbiAgICAvLyBTY2huZWlkZXIgJiBFYmVybHksIGp1c3QgaW5saW5lZCBpbnRvIHRoaXMgZnVuY3Rpb24uXG4gICAgaWYgKHNtaW4gPD0gMSAmJiBzbWF4ID49IDApIHtcblxuICAgICAgLy8gb3ZlcmxhcCBvbiBhbiBlbmQgcG9pbnRcbiAgICAgIGlmIChzbWluID09PSAxKSB7XG4gICAgICAgIHJldHVybiBub0VuZHBvaW50VG91Y2ggPyBudWxsIDogW3RvUG9pbnQoYTEsIHNtaW4gPiAwID8gc21pbiA6IDAsIHZhKV07XG4gICAgICB9XG5cbiAgICAgIGlmIChzbWF4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBub0VuZHBvaW50VG91Y2ggPyBudWxsIDogW3RvUG9pbnQoYTEsIHNtYXggPCAxID8gc21heCA6IDEsIHZhKV07XG4gICAgICB9XG5cbiAgICAgIGlmIChub0VuZHBvaW50VG91Y2ggJiYgc21pbiA9PT0gMCAmJiBzbWF4ID09PSAxKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICAgIC8vIFRoZXJlJ3Mgb3ZlcmxhcCBvbiBhIHNlZ21lbnQgLS0gdHdvIHBvaW50cyBvZiBpbnRlcnNlY3Rpb24uIFJldHVybiBib3RoLlxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdG9Qb2ludChhMSwgc21pbiA+IDAgPyBzbWluIDogMCwgdmEpLFxuICAgICAgICB0b1BvaW50KGExLCBzbWF4IDwgMSA/IHNtYXggOiAxLCB2YSlcbiAgICAgIF07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtICB7U3dlZXBFdmVudH0gc2UxXG4gICAqIEBwYXJhbSAge1N3ZWVwRXZlbnR9IHNlMlxuICAgKiBAcGFyYW0gIHtRdWV1ZX0gICAgICBxdWV1ZVxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBwb3NzaWJsZUludGVyc2VjdGlvbiAoc2UxLCBzZTIsIHF1ZXVlKSB7XG4gICAgLy8gdGhhdCBkaXNhbGxvd3Mgc2VsZi1pbnRlcnNlY3RpbmcgcG9seWdvbnMsXG4gICAgLy8gZGlkIGNvc3QgdXMgaGFsZiBhIGRheSwgc28gSSdsbCBsZWF2ZSBpdFxuICAgIC8vIG91dCBvZiByZXNwZWN0XG4gICAgLy8gaWYgKHNlMS5pc1N1YmplY3QgPT09IHNlMi5pc1N1YmplY3QpIHJldHVybjtcbiAgICB2YXIgaW50ZXIgPSBpbnRlcnNlY3Rpb24oXG4gICAgICBzZTEucG9pbnQsIHNlMS5vdGhlckV2ZW50LnBvaW50LFxuICAgICAgc2UyLnBvaW50LCBzZTIub3RoZXJFdmVudC5wb2ludFxuICAgICk7XG5cbiAgICB2YXIgbmludGVyc2VjdGlvbnMgPSBpbnRlciA/IGludGVyLmxlbmd0aCA6IDA7XG4gICAgaWYgKG5pbnRlcnNlY3Rpb25zID09PSAwKSB7IHJldHVybiAwOyB9IC8vIG5vIGludGVyc2VjdGlvblxuXG4gICAgLy8gdGhlIGxpbmUgc2VnbWVudHMgaW50ZXJzZWN0IGF0IGFuIGVuZHBvaW50IG9mIGJvdGggbGluZSBzZWdtZW50c1xuICAgIGlmICgobmludGVyc2VjdGlvbnMgPT09IDEpICYmXG4gICAgICAgIChlcXVhbHMoc2UxLnBvaW50LCBzZTIucG9pbnQpIHx8XG4gICAgICAgICBlcXVhbHMoc2UxLm90aGVyRXZlbnQucG9pbnQsIHNlMi5vdGhlckV2ZW50LnBvaW50KSkpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmIChuaW50ZXJzZWN0aW9ucyA9PT0gMiAmJiBzZTEuaXNTdWJqZWN0ID09PSBzZTIuaXNTdWJqZWN0KSB7XG4gICAgICAvLyBpZihzZTEuY29udG91cklkID09PSBzZTIuY29udG91cklkKXtcbiAgICAgIC8vIGNvbnNvbGUud2FybignRWRnZXMgb2YgdGhlIHNhbWUgcG9seWdvbiBvdmVybGFwJyxcbiAgICAgIC8vICAgc2UxLnBvaW50LCBzZTEub3RoZXJFdmVudC5wb2ludCwgc2UyLnBvaW50LCBzZTIub3RoZXJFdmVudC5wb2ludCk7XG4gICAgICAvLyB9XG4gICAgICAvL3Rocm93IG5ldyBFcnJvcignRWRnZXMgb2YgdGhlIHNhbWUgcG9seWdvbiBvdmVybGFwJyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyBUaGUgbGluZSBzZWdtZW50cyBhc3NvY2lhdGVkIHRvIHNlMSBhbmQgc2UyIGludGVyc2VjdFxuICAgIGlmIChuaW50ZXJzZWN0aW9ucyA9PT0gMSkge1xuXG4gICAgICAvLyBpZiB0aGUgaW50ZXJzZWN0aW9uIHBvaW50IGlzIG5vdCBhbiBlbmRwb2ludCBvZiBzZTFcbiAgICAgIGlmICghZXF1YWxzKHNlMS5wb2ludCwgaW50ZXJbMF0pICYmICFlcXVhbHMoc2UxLm90aGVyRXZlbnQucG9pbnQsIGludGVyWzBdKSkge1xuICAgICAgICBkaXZpZGVTZWdtZW50KHNlMSwgaW50ZXJbMF0sIHF1ZXVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIGludGVyc2VjdGlvbiBwb2ludCBpcyBub3QgYW4gZW5kcG9pbnQgb2Ygc2UyXG4gICAgICBpZiAoIWVxdWFscyhzZTIucG9pbnQsIGludGVyWzBdKSAmJiAhZXF1YWxzKHNlMi5vdGhlckV2ZW50LnBvaW50LCBpbnRlclswXSkpIHtcbiAgICAgICAgZGl2aWRlU2VnbWVudChzZTIsIGludGVyWzBdLCBxdWV1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyBUaGUgbGluZSBzZWdtZW50cyBhc3NvY2lhdGVkIHRvIHNlMSBhbmQgc2UyIG92ZXJsYXBcbiAgICB2YXIgZXZlbnRzICAgICAgICA9IFtdO1xuICAgIHZhciBsZWZ0Q29pbmNpZGUgID0gZmFsc2U7XG4gICAgdmFyIHJpZ2h0Q29pbmNpZGUgPSBmYWxzZTtcblxuICAgIGlmIChlcXVhbHMoc2UxLnBvaW50LCBzZTIucG9pbnQpKSB7XG4gICAgICBsZWZ0Q29pbmNpZGUgPSB0cnVlOyAvLyBsaW5rZWRcbiAgICB9IGVsc2UgaWYgKGNvbXBhcmVFdmVudHMoc2UxLCBzZTIpID09PSAxKSB7XG4gICAgICBldmVudHMucHVzaChzZTIsIHNlMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50cy5wdXNoKHNlMSwgc2UyKTtcbiAgICB9XG5cbiAgICBpZiAoZXF1YWxzKHNlMS5vdGhlckV2ZW50LnBvaW50LCBzZTIub3RoZXJFdmVudC5wb2ludCkpIHtcbiAgICAgIHJpZ2h0Q29pbmNpZGUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoY29tcGFyZUV2ZW50cyhzZTEub3RoZXJFdmVudCwgc2UyLm90aGVyRXZlbnQpID09PSAxKSB7XG4gICAgICBldmVudHMucHVzaChzZTIub3RoZXJFdmVudCwgc2UxLm90aGVyRXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudHMucHVzaChzZTEub3RoZXJFdmVudCwgc2UyLm90aGVyRXZlbnQpO1xuICAgIH1cblxuICAgIGlmICgobGVmdENvaW5jaWRlICYmIHJpZ2h0Q29pbmNpZGUpIHx8IGxlZnRDb2luY2lkZSkge1xuICAgICAgLy8gYm90aCBsaW5lIHNlZ21lbnRzIGFyZSBlcXVhbCBvciBzaGFyZSB0aGUgbGVmdCBlbmRwb2ludFxuICAgICAgc2UyLnR5cGUgPSBOT05fQ09OVFJJQlVUSU5HO1xuICAgICAgc2UxLnR5cGUgPSAoc2UyLmluT3V0ID09PSBzZTEuaW5PdXQpXG4gICAgICAgID8gU0FNRV9UUkFOU0lUSU9OIDogRElGRkVSRU5UX1RSQU5TSVRJT047XG5cbiAgICAgIGlmIChsZWZ0Q29pbmNpZGUgJiYgIXJpZ2h0Q29pbmNpZGUpIHtcbiAgICAgICAgLy8gaG9uZXN0bHkgbm8gaWRlYSwgYnV0IGNoYW5naW5nIGV2ZW50cyBzZWxlY3Rpb24gZnJvbSBbMiwgMV1cbiAgICAgICAgLy8gdG8gWzAsIDFdIGZpeGVzIHRoZSBvdmVybGFwcGluZyBzZWxmLWludGVyc2VjdGluZyBwb2x5Z29ucyBpc3N1ZVxuICAgICAgICBkaXZpZGVTZWdtZW50KGV2ZW50c1sxXS5vdGhlckV2ZW50LCBldmVudHNbMF0ucG9pbnQsIHF1ZXVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAyO1xuICAgIH1cblxuICAgIC8vIHRoZSBsaW5lIHNlZ21lbnRzIHNoYXJlIHRoZSByaWdodCBlbmRwb2ludFxuICAgIGlmIChyaWdodENvaW5jaWRlKSB7XG4gICAgICBkaXZpZGVTZWdtZW50KGV2ZW50c1swXSwgZXZlbnRzWzFdLnBvaW50LCBxdWV1ZSk7XG4gICAgICByZXR1cm4gMztcbiAgICB9XG5cbiAgICAvLyBubyBsaW5lIHNlZ21lbnQgaW5jbHVkZXMgdG90YWxseSB0aGUgb3RoZXIgb25lXG4gICAgaWYgKGV2ZW50c1swXSAhPT0gZXZlbnRzWzNdLm90aGVyRXZlbnQpIHtcbiAgICAgIGRpdmlkZVNlZ21lbnQoZXZlbnRzWzBdLCBldmVudHNbMV0ucG9pbnQsIHF1ZXVlKTtcbiAgICAgIGRpdmlkZVNlZ21lbnQoZXZlbnRzWzFdLCBldmVudHNbMl0ucG9pbnQsIHF1ZXVlKTtcbiAgICAgIHJldHVybiAzO1xuICAgIH1cblxuICAgIC8vIG9uZSBsaW5lIHNlZ21lbnQgaW5jbHVkZXMgdGhlIG90aGVyIG9uZVxuICAgIGRpdmlkZVNlZ21lbnQoZXZlbnRzWzBdLCBldmVudHNbMV0ucG9pbnQsIHF1ZXVlKTtcbiAgICBkaXZpZGVTZWdtZW50KGV2ZW50c1szXS5vdGhlckV2ZW50LCBldmVudHNbMl0ucG9pbnQsIHF1ZXVlKTtcblxuICAgIHJldHVybiAzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSAge1N3ZWVwRXZlbnR9IGxlMVxuICAgKiBAcGFyYW0gIHtTd2VlcEV2ZW50fSBsZTJcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGFyZVNlZ21lbnRzKGxlMSwgbGUyKSB7XG4gICAgaWYgKGxlMSA9PT0gbGUyKSB7IHJldHVybiAwOyB9XG5cbiAgICAvLyBTZWdtZW50cyBhcmUgbm90IGNvbGxpbmVhclxuICAgIGlmIChzaWduZWRBcmVhKGxlMS5wb2ludCwgbGUxLm90aGVyRXZlbnQucG9pbnQsIGxlMi5wb2ludCkgIT09IDAgfHxcbiAgICAgIHNpZ25lZEFyZWEobGUxLnBvaW50LCBsZTEub3RoZXJFdmVudC5wb2ludCwgbGUyLm90aGVyRXZlbnQucG9pbnQpICE9PSAwKSB7XG5cbiAgICAgIC8vIElmIHRoZXkgc2hhcmUgdGhlaXIgbGVmdCBlbmRwb2ludCB1c2UgdGhlIHJpZ2h0IGVuZHBvaW50IHRvIHNvcnRcbiAgICAgIGlmIChlcXVhbHMobGUxLnBvaW50LCBsZTIucG9pbnQpKSB7IHJldHVybiBsZTEuaXNCZWxvdyhsZTIub3RoZXJFdmVudC5wb2ludCkgPyAtMSA6IDE7IH1cblxuICAgICAgLy8gRGlmZmVyZW50IGxlZnQgZW5kcG9pbnQ6IHVzZSB0aGUgbGVmdCBlbmRwb2ludCB0byBzb3J0XG4gICAgICBpZiAobGUxLnBvaW50WzBdID09PSBsZTIucG9pbnRbMF0pIHsgcmV0dXJuIGxlMS5wb2ludFsxXSA8IGxlMi5wb2ludFsxXSA/IC0xIDogMTsgfVxuXG4gICAgICAvLyBoYXMgdGhlIGxpbmUgc2VnbWVudCBhc3NvY2lhdGVkIHRvIGUxIGJlZW4gaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gUyBhZnRlciB0aGUgbGluZSBzZWdtZW50IGFzc29jaWF0ZWQgdG8gZTIgP1xuICAgICAgaWYgKGNvbXBhcmVFdmVudHMobGUxLCBsZTIpID09PSAxKSB7IHJldHVybiBsZTIuaXNBYm92ZShsZTEucG9pbnQpID8gLTEgOiAxOyB9XG5cbiAgICAgIC8vIFRoZSBsaW5lIHNlZ21lbnQgYXNzb2NpYXRlZCB0byBlMiBoYXMgYmVlbiBpbnNlcnRlZFxuICAgICAgLy8gaW50byBTIGFmdGVyIHRoZSBsaW5lIHNlZ21lbnQgYXNzb2NpYXRlZCB0byBlMVxuICAgICAgcmV0dXJuIGxlMS5pc0JlbG93KGxlMi5wb2ludCkgPyAtMSA6IDE7XG4gICAgfVxuXG4gICAgaWYgKGxlMS5pc1N1YmplY3QgPT09IGxlMi5pc1N1YmplY3QpIHsgLy8gc2FtZSBwb2x5Z29uXG4gICAgICB2YXIgcDEgPSBsZTEucG9pbnQsIHAyID0gbGUyLnBvaW50O1xuICAgICAgaWYgKHAxWzBdID09PSBwMlswXSAmJiBwMVsxXSA9PT0gcDJbMV0vKmVxdWFscyhsZTEucG9pbnQsIGxlMi5wb2ludCkqLykge1xuICAgICAgICBwMSA9IGxlMS5vdGhlckV2ZW50LnBvaW50OyBwMiA9IGxlMi5vdGhlckV2ZW50LnBvaW50O1xuICAgICAgICBpZiAocDFbMF0gPT09IHAyWzBdICYmIHAxWzFdID09PSBwMlsxXSkgeyByZXR1cm4gMDsgfVxuICAgICAgICBlbHNlIHsgcmV0dXJuIGxlMS5jb250b3VySWQgPiBsZTIuY29udG91cklkID8gMSA6IC0xOyB9XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gU2VnbWVudHMgYXJlIGNvbGxpbmVhciwgYnV0IGJlbG9uZyB0byBzZXBhcmF0ZSBwb2x5Z29uc1xuICAgICAgcmV0dXJuIGxlMS5pc1N1YmplY3QgPyAtMSA6IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVFdmVudHMobGUxLCBsZTIpID09PSAxID8gMSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gc3ViZGl2aWRlKGV2ZW50UXVldWUsIHN1YmplY3QsIGNsaXBwaW5nLCBzYmJveCwgY2Jib3gsIG9wZXJhdGlvbikge1xuICAgIHZhciBzd2VlcExpbmUgPSBuZXcgU3BsYXlUcmVlKGNvbXBhcmVTZWdtZW50cyk7XG4gICAgdmFyIHNvcnRlZEV2ZW50cyA9IFtdO1xuXG4gICAgdmFyIHJpZ2h0Ym91bmQgPSBNYXRoLm1pbihzYmJveFsyXSwgY2Jib3hbMl0pO1xuXG4gICAgdmFyIHByZXYsIG5leHQsIGJlZ2luO1xuXG4gICAgd2hpbGUgKGV2ZW50UXVldWUubGVuZ3RoICE9PSAwKSB7XG4gICAgICB2YXIgZXZlbnQgPSBldmVudFF1ZXVlLnBvcCgpO1xuICAgICAgc29ydGVkRXZlbnRzLnB1c2goZXZlbnQpO1xuXG4gICAgICAvLyBvcHRpbWl6YXRpb24gYnkgYmJveGVzIGZvciBpbnRlcnNlY3Rpb24gYW5kIGRpZmZlcmVuY2UgZ29lcyBoZXJlXG4gICAgICBpZiAoKG9wZXJhdGlvbiA9PT0gSU5URVJTRUNUSU9OICYmIGV2ZW50LnBvaW50WzBdID4gcmlnaHRib3VuZCkgfHxcbiAgICAgICAgICAob3BlcmF0aW9uID09PSBESUZGRVJFTkNFICAgJiYgZXZlbnQucG9pbnRbMF0gPiBzYmJveFsyXSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5sZWZ0KSB7XG4gICAgICAgIG5leHQgID0gcHJldiA9IHN3ZWVwTGluZS5pbnNlcnQoZXZlbnQpO1xuICAgICAgICBiZWdpbiA9IHN3ZWVwTGluZS5taW5Ob2RlKCk7XG5cbiAgICAgICAgaWYgKHByZXYgIT09IGJlZ2luKSB7IHByZXYgPSBzd2VlcExpbmUucHJldihwcmV2KTsgfVxuICAgICAgICBlbHNlICAgICAgICAgICAgICAgIHsgcHJldiA9IG51bGw7IH1cblxuICAgICAgICBuZXh0ID0gc3dlZXBMaW5lLm5leHQobmV4dCk7XG5cbiAgICAgICAgdmFyIHByZXZFdmVudCA9IHByZXYgPyBwcmV2LmtleSA6IG51bGw7XG4gICAgICAgIHZhciBwcmV2cHJldkV2ZW50ID0gKHZvaWQgMCk7XG4gICAgICAgIGNvbXB1dGVGaWVsZHMoZXZlbnQsIHByZXZFdmVudCwgb3BlcmF0aW9uKTtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICBpZiAocG9zc2libGVJbnRlcnNlY3Rpb24oZXZlbnQsIG5leHQua2V5LCBldmVudFF1ZXVlKSA9PT0gMikge1xuICAgICAgICAgICAgY29tcHV0ZUZpZWxkcyhldmVudCwgcHJldkV2ZW50LCBvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tcHV0ZUZpZWxkcyhldmVudCwgbmV4dC5rZXksIG9wZXJhdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICBpZiAocG9zc2libGVJbnRlcnNlY3Rpb24ocHJldi5rZXksIGV2ZW50LCBldmVudFF1ZXVlKSA9PT0gMikge1xuICAgICAgICAgICAgdmFyIHByZXZwcmV2ID0gcHJldjtcbiAgICAgICAgICAgIGlmIChwcmV2cHJldiAhPT0gYmVnaW4pIHsgcHJldnByZXYgPSBzd2VlcExpbmUucHJldihwcmV2cHJldik7IH1cbiAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgIHsgcHJldnByZXYgPSBudWxsOyB9XG5cbiAgICAgICAgICAgIHByZXZwcmV2RXZlbnQgPSBwcmV2cHJldiA/IHByZXZwcmV2LmtleSA6IG51bGw7XG4gICAgICAgICAgICBjb21wdXRlRmllbGRzKHByZXZFdmVudCwgcHJldnByZXZFdmVudCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbXB1dGVGaWVsZHMoZXZlbnQsICAgICBwcmV2RXZlbnQsICAgICBvcGVyYXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQgPSBldmVudC5vdGhlckV2ZW50O1xuICAgICAgICBuZXh0ID0gcHJldiA9IHN3ZWVwTGluZS5maW5kKGV2ZW50KTtcblxuICAgICAgICBpZiAocHJldiAmJiBuZXh0KSB7XG5cbiAgICAgICAgICBpZiAocHJldiAhPT0gYmVnaW4pIHsgcHJldiA9IHN3ZWVwTGluZS5wcmV2KHByZXYpOyB9XG4gICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICB7IHByZXYgPSBudWxsOyB9XG5cbiAgICAgICAgICBuZXh0ID0gc3dlZXBMaW5lLm5leHQobmV4dCk7XG4gICAgICAgICAgc3dlZXBMaW5lLnJlbW92ZShldmVudCk7XG5cbiAgICAgICAgICBpZiAobmV4dCAmJiBwcmV2KSB7XG4gICAgICAgICAgICBwb3NzaWJsZUludGVyc2VjdGlvbihwcmV2LmtleSwgbmV4dC5rZXksIGV2ZW50UXVldWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc29ydGVkRXZlbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSAge0FycmF5LjxTd2VlcEV2ZW50Pn0gc29ydGVkRXZlbnRzXG4gICAqIEByZXR1cm4ge0FycmF5LjxTd2VlcEV2ZW50Pn1cbiAgICovXG4gIGZ1bmN0aW9uIG9yZGVyRXZlbnRzKHNvcnRlZEV2ZW50cykge1xuICAgIHZhciBldmVudCwgaSwgbGVuLCB0bXA7XG4gICAgdmFyIHJlc3VsdEV2ZW50cyA9IFtdO1xuICAgIGZvciAoaSA9IDAsIGxlbiA9IHNvcnRlZEV2ZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgZXZlbnQgPSBzb3J0ZWRFdmVudHNbaV07XG4gICAgICBpZiAoKGV2ZW50LmxlZnQgJiYgZXZlbnQuaW5SZXN1bHQpIHx8XG4gICAgICAgICghZXZlbnQubGVmdCAmJiBldmVudC5vdGhlckV2ZW50LmluUmVzdWx0KSkge1xuICAgICAgICByZXN1bHRFdmVudHMucHVzaChldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIER1ZSB0byBvdmVybGFwcGluZyBlZGdlcyB0aGUgcmVzdWx0RXZlbnRzIGFycmF5IGNhbiBiZSBub3Qgd2hvbGx5IHNvcnRlZFxuICAgIHZhciBzb3J0ZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoIXNvcnRlZCkge1xuICAgICAgc29ydGVkID0gdHJ1ZTtcbiAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlc3VsdEV2ZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoKGkgKyAxKSA8IGxlbiAmJlxuICAgICAgICAgIGNvbXBhcmVFdmVudHMocmVzdWx0RXZlbnRzW2ldLCByZXN1bHRFdmVudHNbaSArIDFdKSA9PT0gMSkge1xuICAgICAgICAgIHRtcCA9IHJlc3VsdEV2ZW50c1tpXTtcbiAgICAgICAgICByZXN1bHRFdmVudHNbaV0gPSByZXN1bHRFdmVudHNbaSArIDFdO1xuICAgICAgICAgIHJlc3VsdEV2ZW50c1tpICsgMV0gPSB0bXA7XG4gICAgICAgICAgc29ydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlc3VsdEV2ZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgZXZlbnQgPSByZXN1bHRFdmVudHNbaV07XG4gICAgICBldmVudC5wb3MgPSBpO1xuICAgIH1cblxuICAgIC8vIGltYWdpbmUsIHRoZSByaWdodCBldmVudCBpcyBmb3VuZCBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBxdWV1ZSxcbiAgICAvLyB3aGVuIGhpcyBsZWZ0IGNvdW50ZXJwYXJ0IGlzIG5vdCBtYXJrZWQgeWV0XG4gICAgZm9yIChpID0gMCwgbGVuID0gcmVzdWx0RXZlbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBldmVudCA9IHJlc3VsdEV2ZW50c1tpXTtcbiAgICAgIGlmICghZXZlbnQubGVmdCkge1xuICAgICAgICB0bXAgPSBldmVudC5wb3M7XG4gICAgICAgIGV2ZW50LnBvcyA9IGV2ZW50Lm90aGVyRXZlbnQucG9zO1xuICAgICAgICBldmVudC5vdGhlckV2ZW50LnBvcyA9IHRtcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0RXZlbnRzO1xuICB9XG5cblxuICAvKipcbiAgICogQHBhcmFtICB7TnVtYmVyfSBwb3NcbiAgICogQHBhcmFtICB7QXJyYXkuPFN3ZWVwRXZlbnQ+fSByZXN1bHRFdmVudHNcbiAgICogQHBhcmFtICB7T2JqZWN0Pn0gICAgcHJvY2Vzc2VkXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGZ1bmN0aW9uIG5leHRQb3MocG9zLCByZXN1bHRFdmVudHMsIHByb2Nlc3NlZCwgb3JpZ0luZGV4KSB7XG4gICAgdmFyIG5ld1BvcyA9IHBvcyArIDE7XG4gICAgdmFyIGxlbmd0aCA9IHJlc3VsdEV2ZW50cy5sZW5ndGg7XG4gICAgaWYgKG5ld1BvcyA+IGxlbmd0aCAtIDEpIHsgcmV0dXJuIHBvcyAtIDE7IH1cbiAgICB2YXIgcCAgPSByZXN1bHRFdmVudHNbcG9zXS5wb2ludDtcbiAgICB2YXIgcDEgPSByZXN1bHRFdmVudHNbbmV3UG9zXS5wb2ludDtcblxuXG4gICAgLy8gd2hpbGUgaW4gcmFuZ2UgYW5kIG5vdCB0aGUgY3VycmVudCBvbmUgYnkgdmFsdWVcbiAgICB3aGlsZSAobmV3UG9zIDwgbGVuZ3RoICYmIHAxWzBdID09PSBwWzBdICYmIHAxWzFdID09PSBwWzFdKSB7XG4gICAgICBpZiAoIXByb2Nlc3NlZFtuZXdQb3NdKSB7XG4gICAgICAgIHJldHVybiBuZXdQb3M7XG4gICAgICB9IGVsc2UgICB7XG4gICAgICAgIG5ld1BvcysrO1xuICAgICAgfVxuICAgICAgcDEgPSByZXN1bHRFdmVudHNbbmV3UG9zXS5wb2ludDtcbiAgICB9XG5cbiAgICBuZXdQb3MgPSBwb3MgLSAxO1xuXG4gICAgd2hpbGUgKHByb2Nlc3NlZFtuZXdQb3NdICYmIG5ld1BvcyA+PSBvcmlnSW5kZXgpIHtcbiAgICAgIG5ld1Bvcy0tO1xuICAgIH1cbiAgICByZXR1cm4gbmV3UG9zO1xuICB9XG5cblxuICAvKipcbiAgICogQHBhcmFtICB7QXJyYXkuPFN3ZWVwRXZlbnQ+fSBzb3J0ZWRFdmVudHNcbiAgICogQHJldHVybiB7QXJyYXkuPCo+fSBwb2x5Z29uc1xuICAgKi9cbiAgZnVuY3Rpb24gY29ubmVjdEVkZ2VzKHNvcnRlZEV2ZW50cywgb3BlcmF0aW9uKSB7XG4gICAgdmFyIGksIGxlbjtcbiAgICB2YXIgcmVzdWx0RXZlbnRzID0gb3JkZXJFdmVudHMoc29ydGVkRXZlbnRzKTtcblxuICAgIC8vIFwiZmFsc2VcIi1maWxsZWQgYXJyYXlcbiAgICB2YXIgcHJvY2Vzc2VkID0ge307XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBldmVudDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlc3VsdEV2ZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKHByb2Nlc3NlZFtpXSkgeyBjb250aW51ZTsgfVxuICAgICAgdmFyIGNvbnRvdXIgPSBbW11dO1xuXG4gICAgICBpZiAoIXJlc3VsdEV2ZW50c1tpXS5pc0V4dGVyaW9yUmluZykge1xuICAgICAgICBpZiAob3BlcmF0aW9uID09PSBESUZGRVJFTkNFICYmICFyZXN1bHRFdmVudHNbaV0uaXNTdWJqZWN0ICYmIHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaChjb250b3VyKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goW1tjb250b3VyXV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0ucHVzaChjb250b3VyWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09IERJRkZFUkVOQ0UgJiYgIXJlc3VsdEV2ZW50c1tpXS5pc1N1YmplY3QgJiYgcmVzdWx0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5wdXNoKGNvbnRvdXJbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2goY29udG91cik7XG4gICAgICB9XG5cbiAgICAgIHZhciByaW5nSWQgPSByZXN1bHQubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBwb3MgPSBpO1xuXG4gICAgICB2YXIgaW5pdGlhbCA9IHJlc3VsdEV2ZW50c1tpXS5wb2ludDtcbiAgICAgIGNvbnRvdXJbMF0ucHVzaChpbml0aWFsKTtcblxuICAgICAgd2hpbGUgKHBvcyA+PSBpKSB7XG4gICAgICAgIGV2ZW50ID0gcmVzdWx0RXZlbnRzW3Bvc107XG4gICAgICAgIHByb2Nlc3NlZFtwb3NdID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZXZlbnQubGVmdCkge1xuICAgICAgICAgIGV2ZW50LnJlc3VsdEluT3V0ID0gZmFsc2U7XG4gICAgICAgICAgZXZlbnQuY29udG91cklkICAgPSByaW5nSWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlbnQub3RoZXJFdmVudC5yZXN1bHRJbk91dCA9IHRydWU7XG4gICAgICAgICAgZXZlbnQub3RoZXJFdmVudC5jb250b3VySWQgICA9IHJpbmdJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvcyA9IGV2ZW50LnBvcztcbiAgICAgICAgcHJvY2Vzc2VkW3Bvc10gPSB0cnVlO1xuICAgICAgICBjb250b3VyWzBdLnB1c2gocmVzdWx0RXZlbnRzW3Bvc10ucG9pbnQpO1xuICAgICAgICBwb3MgPSBuZXh0UG9zKHBvcywgcmVzdWx0RXZlbnRzLCBwcm9jZXNzZWQsIGkpO1xuICAgICAgfVxuXG4gICAgICBwb3MgPSBwb3MgPT09IC0xID8gaSA6IHBvcztcblxuICAgICAgZXZlbnQgPSByZXN1bHRFdmVudHNbcG9zXTtcbiAgICAgIHByb2Nlc3NlZFtwb3NdID0gcHJvY2Vzc2VkW2V2ZW50LnBvc10gPSB0cnVlO1xuICAgICAgZXZlbnQub3RoZXJFdmVudC5yZXN1bHRJbk91dCA9IHRydWU7XG4gICAgICBldmVudC5vdGhlckV2ZW50LmNvbnRvdXJJZCAgID0gcmluZ0lkO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBpZiB0aGUgcmVzdWx0IGlzIGEgcG9seWdvbiAoZWcgbm90IG11bHRpcG9seSlcbiAgICAvLyBDb21tZW50ZWQgaXQgYWdhaW4sIGxldCdzIHNlZSB3aGF0IGRvIHdlIG1lYW4gYnkgdGhhdFxuICAgIC8vIGlmIChyZXN1bHQubGVuZ3RoID09PSAxKSByZXN1bHQgPSByZXN1bHRbMF07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciB0aW55cXVldWUgPSBUaW55UXVldWU7XG4gIHZhciBkZWZhdWx0XzEgPSBUaW55UXVldWU7XG5cbiAgZnVuY3Rpb24gVGlueVF1ZXVlKGRhdGEsIGNvbXBhcmUpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVGlueVF1ZXVlKSkgeyByZXR1cm4gbmV3IFRpbnlRdWV1ZShkYXRhLCBjb21wYXJlKTsgfVxuXG4gICAgICB0aGlzLmRhdGEgPSBkYXRhIHx8IFtdO1xuICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgdGhpcy5jb21wYXJlID0gY29tcGFyZSB8fCBkZWZhdWx0Q29tcGFyZTtcblxuICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAodGhpcy5sZW5ndGggPj4gMSkgLSAxOyBpID49IDA7IGktLSkgeyB0aGlzJDEuX2Rvd24oaSk7IH1cbiAgICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgfVxuXG4gIFRpbnlRdWV1ZS5wcm90b3R5cGUgPSB7XG5cbiAgICAgIHB1c2g6IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLnB1c2goaXRlbSk7XG4gICAgICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAgICAgICB0aGlzLl91cCh0aGlzLmxlbmd0aCAtIDEpO1xuICAgICAgfSxcblxuICAgICAgcG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cblxuICAgICAgICAgIHZhciB0b3AgPSB0aGlzLmRhdGFbMF07XG4gICAgICAgICAgdGhpcy5sZW5ndGgtLTtcblxuICAgICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhWzBdID0gdGhpcy5kYXRhW3RoaXMubGVuZ3RoXTtcbiAgICAgICAgICAgICAgdGhpcy5fZG93bigwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kYXRhLnBvcCgpO1xuXG4gICAgICAgICAgcmV0dXJuIHRvcDtcbiAgICAgIH0sXG5cbiAgICAgIHBlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhWzBdO1xuICAgICAgfSxcblxuICAgICAgX3VwOiBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgdmFyIGNvbXBhcmUgPSB0aGlzLmNvbXBhcmU7XG4gICAgICAgICAgdmFyIGl0ZW0gPSBkYXRhW3Bvc107XG5cbiAgICAgICAgICB3aGlsZSAocG9zID4gMCkge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gKHBvcyAtIDEpID4+IDE7XG4gICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gZGF0YVtwYXJlbnRdO1xuICAgICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBjdXJyZW50KSA+PSAwKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICAgIGRhdGFbcG9zXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgIHBvcyA9IHBhcmVudDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW3Bvc10gPSBpdGVtO1xuICAgICAgfSxcblxuICAgICAgX2Rvd246IGZ1bmN0aW9uIChwb3MpIHtcbiAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgIHZhciBjb21wYXJlID0gdGhpcy5jb21wYXJlO1xuICAgICAgICAgIHZhciBoYWxmTGVuZ3RoID0gdGhpcy5sZW5ndGggPj4gMTtcbiAgICAgICAgICB2YXIgaXRlbSA9IGRhdGFbcG9zXTtcblxuICAgICAgICAgIHdoaWxlIChwb3MgPCBoYWxmTGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHZhciBsZWZ0ID0gKHBvcyA8PCAxKSArIDE7XG4gICAgICAgICAgICAgIHZhciByaWdodCA9IGxlZnQgKyAxO1xuICAgICAgICAgICAgICB2YXIgYmVzdCA9IGRhdGFbbGVmdF07XG5cbiAgICAgICAgICAgICAgaWYgKHJpZ2h0IDwgdGhpcyQxLmxlbmd0aCAmJiBjb21wYXJlKGRhdGFbcmlnaHRdLCBiZXN0KSA8IDApIHtcbiAgICAgICAgICAgICAgICAgIGxlZnQgPSByaWdodDtcbiAgICAgICAgICAgICAgICAgIGJlc3QgPSBkYXRhW3JpZ2h0XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29tcGFyZShiZXN0LCBpdGVtKSA+PSAwKSB7IGJyZWFrOyB9XG5cbiAgICAgICAgICAgICAgZGF0YVtwb3NdID0gYmVzdDtcbiAgICAgICAgICAgICAgcG9zID0gbGVmdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW3Bvc10gPSBpdGVtO1xuICAgICAgfVxuICB9O1xuICB0aW55cXVldWUuZGVmYXVsdCA9IGRlZmF1bHRfMTtcblxuICB2YXIgbWF4ID0gTWF0aC5tYXg7XG4gIHZhciBtaW4gPSBNYXRoLm1pbjtcblxuICB2YXIgY29udG91cklkID0gMDtcblxuXG4gIGZ1bmN0aW9uIHByb2Nlc3NQb2x5Z29uKGNvbnRvdXJPckhvbGUsIGlzU3ViamVjdCwgZGVwdGgsIFEsIGJib3gsIGlzRXh0ZXJpb3JSaW5nKSB7XG4gICAgdmFyIGksIGxlbiwgczEsIHMyLCBlMSwgZTI7XG4gICAgZm9yIChpID0gMCwgbGVuID0gY29udG91ck9ySG9sZS5sZW5ndGggLSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHMxID0gY29udG91ck9ySG9sZVtpXTtcbiAgICAgIHMyID0gY29udG91ck9ySG9sZVtpICsgMV07XG4gICAgICBlMSA9IG5ldyBTd2VlcEV2ZW50KHMxLCBmYWxzZSwgdW5kZWZpbmVkLCBpc1N1YmplY3QpO1xuICAgICAgZTIgPSBuZXcgU3dlZXBFdmVudChzMiwgZmFsc2UsIGUxLCAgICAgICAgaXNTdWJqZWN0KTtcbiAgICAgIGUxLm90aGVyRXZlbnQgPSBlMjtcblxuICAgICAgaWYgKHMxWzBdID09PSBzMlswXSAmJiBzMVsxXSA9PT0gczJbMV0pIHtcbiAgICAgICAgY29udGludWU7IC8vIHNraXAgY29sbGFwc2VkIGVkZ2VzLCBvciBpdCBicmVha3NcbiAgICAgIH1cblxuICAgICAgZTEuY29udG91cklkID0gZTIuY29udG91cklkID0gZGVwdGg7XG4gICAgICBpZiAoIWlzRXh0ZXJpb3JSaW5nKSB7XG4gICAgICAgIGUxLmlzRXh0ZXJpb3JSaW5nID0gZmFsc2U7XG4gICAgICAgIGUyLmlzRXh0ZXJpb3JSaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY29tcGFyZUV2ZW50cyhlMSwgZTIpID4gMCkge1xuICAgICAgICBlMi5sZWZ0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGUxLmxlZnQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgeCA9IHMxWzBdLCB5ID0gczFbMV07XG4gICAgICBiYm94WzBdID0gbWluKGJib3hbMF0sIHgpO1xuICAgICAgYmJveFsxXSA9IG1pbihiYm94WzFdLCB5KTtcbiAgICAgIGJib3hbMl0gPSBtYXgoYmJveFsyXSwgeCk7XG4gICAgICBiYm94WzNdID0gbWF4KGJib3hbM10sIHkpO1xuXG4gICAgICAvLyBQdXNoaW5nIGl0IHNvIHRoZSBxdWV1ZSBpcyBzb3J0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LFxuICAgICAgLy8gd2l0aCBvYmplY3Qgb24gdGhlIGxlZnQgaGF2aW5nIHRoZSBoaWdoZXN0IHByaW9yaXR5LlxuICAgICAgUS5wdXNoKGUxKTtcbiAgICAgIFEucHVzaChlMik7XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBmaWxsUXVldWUoc3ViamVjdCwgY2xpcHBpbmcsIHNiYm94LCBjYmJveCwgb3BlcmF0aW9uKSB7XG4gICAgdmFyIGV2ZW50UXVldWUgPSBuZXcgdGlueXF1ZXVlKG51bGwsIGNvbXBhcmVFdmVudHMpO1xuICAgIHZhciBwb2x5Z29uU2V0LCBpc0V4dGVyaW9yUmluZywgaSwgaWksIGosIGpqOyAvLywgaywga2s7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IHN1YmplY3QubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgcG9seWdvblNldCA9IHN1YmplY3RbaV07XG4gICAgICBmb3IgKGogPSAwLCBqaiA9IHBvbHlnb25TZXQubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBpc0V4dGVyaW9yUmluZyA9IGogPT09IDA7XG4gICAgICAgIGlmIChpc0V4dGVyaW9yUmluZykgeyBjb250b3VySWQrKzsgfVxuICAgICAgICBwcm9jZXNzUG9seWdvbihwb2x5Z29uU2V0W2pdLCB0cnVlLCBjb250b3VySWQsIGV2ZW50UXVldWUsIHNiYm94LCBpc0V4dGVyaW9yUmluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMCwgaWkgPSBjbGlwcGluZy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBwb2x5Z29uU2V0ID0gY2xpcHBpbmdbaV07XG4gICAgICBmb3IgKGogPSAwLCBqaiA9IHBvbHlnb25TZXQubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBpc0V4dGVyaW9yUmluZyA9IGogPT09IDA7XG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09IERJRkZFUkVOQ0UpIHsgaXNFeHRlcmlvclJpbmcgPSBmYWxzZTsgfVxuICAgICAgICBpZiAoaXNFeHRlcmlvclJpbmcpIHsgY29udG91cklkKys7IH1cbiAgICAgICAgcHJvY2Vzc1BvbHlnb24ocG9seWdvblNldFtqXSwgZmFsc2UsIGNvbnRvdXJJZCwgZXZlbnRRdWV1ZSwgY2Jib3gsIGlzRXh0ZXJpb3JSaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnRRdWV1ZTtcbiAgfVxuXG4gIHZhciBFTVBUWSA9IFtdO1xuXG5cbiAgZnVuY3Rpb24gdHJpdmlhbE9wZXJhdGlvbihzdWJqZWN0LCBjbGlwcGluZywgb3BlcmF0aW9uKSB7XG4gICAgdmFyIHJlc3VsdCA9IG51bGw7XG4gICAgaWYgKHN1YmplY3QubGVuZ3RoICogY2xpcHBpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAgICAgICAgKG9wZXJhdGlvbiA9PT0gSU5URVJTRUNUSU9OKSB7XG4gICAgICAgIHJlc3VsdCA9IEVNUFRZO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09IERJRkZFUkVOQ0UpIHtcbiAgICAgICAgcmVzdWx0ID0gc3ViamVjdDtcbiAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSBVTklPTiB8fFxuICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPT09IFhPUikge1xuICAgICAgICByZXN1bHQgPSAoc3ViamVjdC5sZW5ndGggPT09IDApID8gY2xpcHBpbmcgOiBzdWJqZWN0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cblxuICBmdW5jdGlvbiBjb21wYXJlQkJveGVzKHN1YmplY3QsIGNsaXBwaW5nLCBzYmJveCwgY2Jib3gsIG9wZXJhdGlvbikge1xuICAgIHZhciByZXN1bHQgPSBudWxsO1xuICAgIGlmIChzYmJveFswXSA+IGNiYm94WzJdIHx8XG4gICAgICAgIGNiYm94WzBdID4gc2Jib3hbMl0gfHxcbiAgICAgICAgc2Jib3hbMV0gPiBjYmJveFszXSB8fFxuICAgICAgICBjYmJveFsxXSA+IHNiYm94WzNdKSB7XG4gICAgICBpZiAgICAgICAgKG9wZXJhdGlvbiA9PT0gSU5URVJTRUNUSU9OKSB7XG4gICAgICAgIHJlc3VsdCA9IEVNUFRZO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09IERJRkZFUkVOQ0UpIHtcbiAgICAgICAgcmVzdWx0ID0gc3ViamVjdDtcbiAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSBVTklPTiB8fFxuICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPT09IFhPUikge1xuICAgICAgICByZXN1bHQgPSBzdWJqZWN0LmNvbmNhdChjbGlwcGluZyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGJvb2xlYW4oc3ViamVjdCwgY2xpcHBpbmcsIG9wZXJhdGlvbikge1xuICAgIGlmICh0eXBlb2Ygc3ViamVjdFswXVswXVswXSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHN1YmplY3QgPSBbc3ViamVjdF07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY2xpcHBpbmdbMF1bMF1bMF0gPT09ICdudW1iZXInKSB7XG4gICAgICBjbGlwcGluZyA9IFtjbGlwcGluZ107XG4gICAgfVxuICAgIHZhciB0cml2aWFsID0gdHJpdmlhbE9wZXJhdGlvbihzdWJqZWN0LCBjbGlwcGluZywgb3BlcmF0aW9uKTtcbiAgICBpZiAodHJpdmlhbCkge1xuICAgICAgcmV0dXJuIHRyaXZpYWwgPT09IEVNUFRZID8gbnVsbCA6IHRyaXZpYWw7XG4gICAgfVxuICAgIHZhciBzYmJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICB2YXIgY2Jib3ggPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07XG5cbiAgICAvL2NvbnNvbGUudGltZSgnZmlsbCBxdWV1ZScpO1xuICAgIHZhciBldmVudFF1ZXVlID0gZmlsbFF1ZXVlKHN1YmplY3QsIGNsaXBwaW5nLCBzYmJveCwgY2Jib3gsIG9wZXJhdGlvbik7XG4gICAgLy9jb25zb2xlLnRpbWVFbmQoJ2ZpbGwgcXVldWUnKTtcblxuICAgIHRyaXZpYWwgPSBjb21wYXJlQkJveGVzKHN1YmplY3QsIGNsaXBwaW5nLCBzYmJveCwgY2Jib3gsIG9wZXJhdGlvbik7XG4gICAgaWYgKHRyaXZpYWwpIHtcbiAgICAgIHJldHVybiB0cml2aWFsID09PSBFTVBUWSA/IG51bGwgOiB0cml2aWFsO1xuICAgIH1cbiAgICAvL2NvbnNvbGUudGltZSgnc3ViZGl2aWRlIGVkZ2VzJyk7XG4gICAgdmFyIHNvcnRlZEV2ZW50cyA9IHN1YmRpdmlkZShldmVudFF1ZXVlLCBzdWJqZWN0LCBjbGlwcGluZywgc2Jib3gsIGNiYm94LCBvcGVyYXRpb24pO1xuICAgIC8vY29uc29sZS50aW1lRW5kKCdzdWJkaXZpZGUgZWRnZXMnKTtcblxuICAgIC8vY29uc29sZS50aW1lKCdjb25uZWN0IHZlcnRpY2VzJyk7XG4gICAgdmFyIHJlc3VsdCA9IGNvbm5lY3RFZGdlcyhzb3J0ZWRFdmVudHMsIG9wZXJhdGlvbik7XG4gICAgLy9jb25zb2xlLnRpbWVFbmQoJ2Nvbm5lY3QgdmVydGljZXMnKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gdW5pb24gKHN1YmplY3QsIGNsaXBwaW5nKSB7XG4gICAgcmV0dXJuIGJvb2xlYW4oc3ViamVjdCwgY2xpcHBpbmcsIFVOSU9OKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpZmYgKHN1YmplY3QsIGNsaXBwaW5nKSB7XG4gICAgcmV0dXJuIGJvb2xlYW4oc3ViamVjdCwgY2xpcHBpbmcsIERJRkZFUkVOQ0UpO1xuICB9XG5cbiAgZnVuY3Rpb24geG9yIChzdWJqZWN0LCBjbGlwcGluZyl7XG4gICAgcmV0dXJuIGJvb2xlYW4oc3ViamVjdCwgY2xpcHBpbmcsIFhPUik7XG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnNlY3Rpb24kMSAoc3ViamVjdCwgY2xpcHBpbmcpIHtcbiAgICByZXR1cm4gYm9vbGVhbihzdWJqZWN0LCBjbGlwcGluZywgSU5URVJTRUNUSU9OKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZW51bSB7TnVtYmVyfVxuICAgKi9cbiAgdmFyIG9wZXJhdGlvbnMgPSB7IFVOSU9OOiBVTklPTiwgRElGRkVSRU5DRTogRElGRkVSRU5DRSwgSU5URVJTRUNUSU9OOiBJTlRFUlNFQ1RJT04sIFhPUjogWE9SIH07XG5cbiAgZXhwb3J0cy51bmlvbiA9IHVuaW9uO1xuICBleHBvcnRzLmRpZmYgPSBkaWZmO1xuICBleHBvcnRzLnhvciA9IHhvcjtcbiAgZXhwb3J0cy5pbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb24kMTtcbiAgZXhwb3J0cy5vcGVyYXRpb25zID0gb3BlcmF0aW9ucztcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFydGluZXoudW1kLmpzLm1hcFxuIiwiLy8gcmFuZG9tQ29sb3IgYnkgRGF2aWQgTWVyZmllbGQgdW5kZXIgdGhlIENDMCBsaWNlbnNlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGF2aWRtZXJmaWVsZC9yYW5kb21Db2xvci9cblxuOyhmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG5cbiAgLy8gU3VwcG9ydCBDb21tb25KU1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHJhbmRvbUNvbG9yID0gZmFjdG9yeSgpO1xuXG4gICAgLy8gU3VwcG9ydCBOb2RlSlMgJiBDb21wb25lbnQsIHdoaWNoIGFsbG93IG1vZHVsZS5leHBvcnRzIHRvIGJlIGEgZnVuY3Rpb25cbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByYW5kb21Db2xvcjtcbiAgICB9XG5cbiAgICAvLyBTdXBwb3J0IENvbW1vbkpTIDEuMS4xIHNwZWNcbiAgICBleHBvcnRzLnJhbmRvbUNvbG9yID0gcmFuZG9tQ29sb3I7XG5cbiAgLy8gU3VwcG9ydCBBTURcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoW10sIGZhY3RvcnkpO1xuXG4gIC8vIFN1cHBvcnQgdmFuaWxsYSBzY3JpcHQgbG9hZGluZ1xuICB9IGVsc2Uge1xuICAgIHJvb3QucmFuZG9tQ29sb3IgPSBmYWN0b3J5KCk7XG4gIH1cblxufSh0aGlzLCBmdW5jdGlvbigpIHtcblxuICAvLyBTZWVkIHRvIGdldCByZXBlYXRhYmxlIGNvbG9yc1xuICB2YXIgc2VlZCA9IG51bGw7XG5cbiAgLy8gU2hhcmVkIGNvbG9yIGRpY3Rpb25hcnlcbiAgdmFyIGNvbG9yRGljdGlvbmFyeSA9IHt9O1xuXG4gIC8vIFBvcHVsYXRlIHRoZSBjb2xvciBkaWN0aW9uYXJ5XG4gIGxvYWRDb2xvckJvdW5kcygpO1xuXG4gIC8vIGNoZWNrIGlmIGEgcmFuZ2UgaXMgdGFrZW5cbiAgdmFyIGNvbG9yUmFuZ2VzID0gW107XG5cbiAgdmFyIHJhbmRvbUNvbG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBzZWVkIGFuZCBlbnN1cmUgaXQncyBhblxuICAgIC8vIGludGVnZXIuIE90aGVyd2lzZSwgcmVzZXQgdGhlIHNlZWQgdmFsdWUuXG4gICAgaWYgKG9wdGlvbnMuc2VlZCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2VlZCAhPT0gbnVsbCAmJiBvcHRpb25zLnNlZWQgPT09IHBhcnNlSW50KG9wdGlvbnMuc2VlZCwgMTApKSB7XG4gICAgICBzZWVkID0gb3B0aW9ucy5zZWVkO1xuXG4gICAgLy8gQSBzdHJpbmcgd2FzIHBhc3NlZCBhcyBhIHNlZWRcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLnNlZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzZWVkID0gc3RyaW5nVG9JbnRlZ2VyKG9wdGlvbnMuc2VlZCk7XG5cbiAgICAvLyBTb21ldGhpbmcgd2FzIHBhc3NlZCBhcyBhIHNlZWQgYnV0IGl0IHdhc24ndCBhbiBpbnRlZ2VyIG9yIHN0cmluZ1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zZWVkICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5zZWVkICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc2VlZCB2YWx1ZSBtdXN0IGJlIGFuIGludGVnZXIgb3Igc3RyaW5nJyk7XG5cbiAgICAvLyBObyBzZWVkLCByZXNldCB0aGUgdmFsdWUgb3V0c2lkZS5cbiAgICB9IGVsc2Uge1xuICAgICAgc2VlZCA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIEgsUyxCO1xuXG4gICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBnZW5lcmF0ZSBtdWx0aXBsZSBjb2xvcnNcbiAgICBpZiAob3B0aW9ucy5jb3VudCAhPT0gbnVsbCAmJiBvcHRpb25zLmNvdW50ICE9PSB1bmRlZmluZWQpIHtcblxuICAgICAgdmFyIHRvdGFsQ29sb3JzID0gb3B0aW9ucy5jb3VudCxcbiAgICAgICAgICBjb2xvcnMgPSBbXTtcbiAgICAgIC8vIFZhbHVlIGZhbHNlIGF0IGluZGV4IGkgbWVhbnMgdGhlIHJhbmdlIGkgaXMgbm90IHRha2VuIHlldC5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5jb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbG9yUmFuZ2VzLnB1c2goZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIG9wdGlvbnMuY291bnQgPSBudWxsO1xuXG4gICAgICB3aGlsZSAodG90YWxDb2xvcnMgPiBjb2xvcnMubGVuZ3RoKSB7XG5cbiAgICAgICAgdmFyIGNvbG9yID0gcmFuZG9tQ29sb3Iob3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHNlZWQgIT09IG51bGwpIHtcbiAgICAgICAgICBvcHRpb25zLnNlZWQgPSBzZWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29sb3JzLnB1c2goY29sb3IpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLmNvdW50ID0gdG90YWxDb2xvcnM7XG5cbiAgICAgIHJldHVybiBjb2xvcnM7XG4gICAgfVxuXG4gICAgLy8gRmlyc3Qgd2UgcGljayBhIGh1ZSAoSClcbiAgICBIID0gcGlja0h1ZShvcHRpb25zKTtcblxuICAgIC8vIFRoZW4gdXNlIEggdG8gZGV0ZXJtaW5lIHNhdHVyYXRpb24gKFMpXG4gICAgUyA9IHBpY2tTYXR1cmF0aW9uKEgsIG9wdGlvbnMpO1xuXG4gICAgLy8gVGhlbiB1c2UgUyBhbmQgSCB0byBkZXRlcm1pbmUgYnJpZ2h0bmVzcyAoQikuXG4gICAgQiA9IHBpY2tCcmlnaHRuZXNzKEgsIFMsIG9wdGlvbnMpO1xuXG4gICAgLy8gVGhlbiB3ZSByZXR1cm4gdGhlIEhTQiBjb2xvciBpbiB0aGUgZGVzaXJlZCBmb3JtYXRcbiAgICByZXR1cm4gc2V0Rm9ybWF0KFtILFMsQl0sIG9wdGlvbnMpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHBpY2tIdWUob3B0aW9ucykge1xuICAgIGlmIChjb2xvclJhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaHVlUmFuZ2UgPSBnZXRSZWFsSHVlUmFuZ2Uob3B0aW9ucy5odWUpXG5cbiAgICAgIHZhciBodWUgPSByYW5kb21XaXRoaW4oaHVlUmFuZ2UpXG5cbiAgICAgIC8vRWFjaCBvZiBjb2xvclJhbmdlcy5sZW5ndGggcmFuZ2VzIGhhcyBhIGxlbmd0aCBlcXVhbCBhcHByb3hpbWF0ZWxseSBvbmUgc3RlcFxuICAgICAgdmFyIHN0ZXAgPSAoaHVlUmFuZ2VbMV0gLSBodWVSYW5nZVswXSkgLyBjb2xvclJhbmdlcy5sZW5ndGhcblxuICAgICAgdmFyIGogPSBwYXJzZUludCgoaHVlIC0gaHVlUmFuZ2VbMF0pIC8gc3RlcClcblxuICAgICAgLy9DaGVjayBpZiB0aGUgcmFuZ2UgaiBpcyB0YWtlblxuICAgICAgaWYgKGNvbG9yUmFuZ2VzW2pdID09PSB0cnVlKSB7XG4gICAgICAgIGogPSAoaiArIDIpICUgY29sb3JSYW5nZXMubGVuZ3RoXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29sb3JSYW5nZXNbal0gPSB0cnVlXG4gICAgICAgICAgIH1cblxuICAgICAgdmFyIG1pbiA9IChodWVSYW5nZVswXSArIGogKiBzdGVwKSAlIDM1OSxcbiAgICAgICAgICBtYXggPSAoaHVlUmFuZ2VbMF0gKyAoaiArIDEpICogc3RlcCkgJSAzNTk7XG5cbiAgICAgIGh1ZVJhbmdlID0gW21pbiwgbWF4XVxuXG4gICAgICBodWUgPSByYW5kb21XaXRoaW4oaHVlUmFuZ2UpXG5cbiAgICAgIGlmIChodWUgPCAwKSB7aHVlID0gMzYwICsgaHVlO31cbiAgICAgIHJldHVybiBodWVcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgaHVlUmFuZ2UgPSBnZXRIdWVSYW5nZShvcHRpb25zLmh1ZSlcblxuICAgICAgaHVlID0gcmFuZG9tV2l0aGluKGh1ZVJhbmdlKTtcbiAgICAgIC8vIEluc3RlYWQgb2Ygc3RvcmluZyByZWQgYXMgdHdvIHNlcGVyYXRlIHJhbmdlcyxcbiAgICAgIC8vIHdlIGdyb3VwIHRoZW0sIHVzaW5nIG5lZ2F0aXZlIG51bWJlcnNcbiAgICAgIGlmIChodWUgPCAwKSB7XG4gICAgICAgIGh1ZSA9IDM2MCArIGh1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGh1ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwaWNrU2F0dXJhdGlvbiAoaHVlLCBvcHRpb25zKSB7XG5cbiAgICBpZiAob3B0aW9ucy5odWUgPT09ICdtb25vY2hyb21lJykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubHVtaW5vc2l0eSA9PT0gJ3JhbmRvbScpIHtcbiAgICAgIHJldHVybiByYW5kb21XaXRoaW4oWzAsMTAwXSk7XG4gICAgfVxuXG4gICAgdmFyIHNhdHVyYXRpb25SYW5nZSA9IGdldFNhdHVyYXRpb25SYW5nZShodWUpO1xuXG4gICAgdmFyIHNNaW4gPSBzYXR1cmF0aW9uUmFuZ2VbMF0sXG4gICAgICAgIHNNYXggPSBzYXR1cmF0aW9uUmFuZ2VbMV07XG5cbiAgICBzd2l0Y2ggKG9wdGlvbnMubHVtaW5vc2l0eSkge1xuXG4gICAgICBjYXNlICdicmlnaHQnOlxuICAgICAgICBzTWluID0gNTU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdkYXJrJzpcbiAgICAgICAgc01pbiA9IHNNYXggLSAxMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xpZ2h0JzpcbiAgICAgICAgc01heCA9IDU1O1xuICAgICAgICBicmVhaztcbiAgIH1cblxuICAgIHJldHVybiByYW5kb21XaXRoaW4oW3NNaW4sIHNNYXhdKTtcblxuICB9XG5cbiAgZnVuY3Rpb24gcGlja0JyaWdodG5lc3MgKEgsIFMsIG9wdGlvbnMpIHtcblxuICAgIHZhciBiTWluID0gZ2V0TWluaW11bUJyaWdodG5lc3MoSCwgUyksXG4gICAgICAgIGJNYXggPSAxMDA7XG5cbiAgICBzd2l0Y2ggKG9wdGlvbnMubHVtaW5vc2l0eSkge1xuXG4gICAgICBjYXNlICdkYXJrJzpcbiAgICAgICAgYk1heCA9IGJNaW4gKyAyMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xpZ2h0JzpcbiAgICAgICAgYk1pbiA9IChiTWF4ICsgYk1pbikvMjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JhbmRvbSc6XG4gICAgICAgIGJNaW4gPSAwO1xuICAgICAgICBiTWF4ID0gMTAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZG9tV2l0aGluKFtiTWluLCBiTWF4XSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRGb3JtYXQgKGhzdiwgb3B0aW9ucykge1xuXG4gICAgc3dpdGNoIChvcHRpb25zLmZvcm1hdCkge1xuXG4gICAgICBjYXNlICdoc3ZBcnJheSc6XG4gICAgICAgIHJldHVybiBoc3Y7XG5cbiAgICAgIGNhc2UgJ2hzbEFycmF5JzpcbiAgICAgICAgcmV0dXJuIEhTVnRvSFNMKGhzdik7XG5cbiAgICAgIGNhc2UgJ2hzbCc6XG4gICAgICAgIHZhciBoc2wgPSBIU1Z0b0hTTChoc3YpO1xuICAgICAgICByZXR1cm4gJ2hzbCgnK2hzbFswXSsnLCAnK2hzbFsxXSsnJSwgJytoc2xbMl0rJyUpJztcblxuICAgICAgY2FzZSAnaHNsYSc6XG4gICAgICAgIHZhciBoc2xDb2xvciA9IEhTVnRvSFNMKGhzdik7XG4gICAgICAgIHZhciBhbHBoYSA9IG9wdGlvbnMuYWxwaGEgfHwgTWF0aC5yYW5kb20oKTtcbiAgICAgICAgcmV0dXJuICdoc2xhKCcraHNsQ29sb3JbMF0rJywgJytoc2xDb2xvclsxXSsnJSwgJytoc2xDb2xvclsyXSsnJSwgJyArIGFscGhhICsgJyknO1xuXG4gICAgICBjYXNlICdyZ2JBcnJheSc6XG4gICAgICAgIHJldHVybiBIU1Z0b1JHQihoc3YpO1xuXG4gICAgICBjYXNlICdyZ2InOlxuICAgICAgICB2YXIgcmdiID0gSFNWdG9SR0IoaHN2KTtcbiAgICAgICAgcmV0dXJuICdyZ2IoJyArIHJnYi5qb2luKCcsICcpICsgJyknO1xuXG4gICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgdmFyIHJnYkNvbG9yID0gSFNWdG9SR0IoaHN2KTtcbiAgICAgICAgdmFyIGFscGhhID0gb3B0aW9ucy5hbHBoYSB8fCBNYXRoLnJhbmRvbSgpO1xuICAgICAgICByZXR1cm4gJ3JnYmEoJyArIHJnYkNvbG9yLmpvaW4oJywgJykgKyAnLCAnICsgYWxwaGEgKyAnKSc7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBIU1Z0b0hleChoc3YpO1xuICAgIH1cblxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TWluaW11bUJyaWdodG5lc3MoSCwgUykge1xuXG4gICAgdmFyIGxvd2VyQm91bmRzID0gZ2V0Q29sb3JJbmZvKEgpLmxvd2VyQm91bmRzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb3dlckJvdW5kcy5sZW5ndGggLSAxOyBpKyspIHtcblxuICAgICAgdmFyIHMxID0gbG93ZXJCb3VuZHNbaV1bMF0sXG4gICAgICAgICAgdjEgPSBsb3dlckJvdW5kc1tpXVsxXTtcblxuICAgICAgdmFyIHMyID0gbG93ZXJCb3VuZHNbaSsxXVswXSxcbiAgICAgICAgICB2MiA9IGxvd2VyQm91bmRzW2krMV1bMV07XG5cbiAgICAgIGlmIChTID49IHMxICYmIFMgPD0gczIpIHtcblxuICAgICAgICAgdmFyIG0gPSAodjIgLSB2MSkvKHMyIC0gczEpLFxuICAgICAgICAgICAgIGIgPSB2MSAtIG0qczE7XG5cbiAgICAgICAgIHJldHVybiBtKlMgKyBiO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRIdWVSYW5nZSAoY29sb3JJbnB1dCkge1xuXG4gICAgaWYgKHR5cGVvZiBwYXJzZUludChjb2xvcklucHV0KSA9PT0gJ251bWJlcicpIHtcblxuICAgICAgdmFyIG51bWJlciA9IHBhcnNlSW50KGNvbG9ySW5wdXQpO1xuXG4gICAgICBpZiAobnVtYmVyIDwgMzYwICYmIG51bWJlciA+IDApIHtcbiAgICAgICAgcmV0dXJuIFtudW1iZXIsIG51bWJlcl07XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbG9ySW5wdXQgPT09ICdzdHJpbmcnKSB7XG5cbiAgICAgIGlmIChjb2xvckRpY3Rpb25hcnlbY29sb3JJbnB1dF0pIHtcbiAgICAgICAgdmFyIGNvbG9yID0gY29sb3JEaWN0aW9uYXJ5W2NvbG9ySW5wdXRdO1xuICAgICAgICBpZiAoY29sb3IuaHVlUmFuZ2UpIHtyZXR1cm4gY29sb3IuaHVlUmFuZ2U7fVxuICAgICAgfSBlbHNlIGlmIChjb2xvcklucHV0Lm1hdGNoKC9eIz8oWzAtOUEtRl17M318WzAtOUEtRl17Nn0pJC9pKSkge1xuICAgICAgICB2YXIgaHVlID0gSGV4VG9IU0IoY29sb3JJbnB1dClbMF07XG4gICAgICAgIHJldHVybiBbIGh1ZSwgaHVlIF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFswLDM2MF07XG5cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNhdHVyYXRpb25SYW5nZSAoaHVlKSB7XG4gICAgcmV0dXJuIGdldENvbG9ySW5mbyhodWUpLnNhdHVyYXRpb25SYW5nZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbG9ySW5mbyAoaHVlKSB7XG5cbiAgICAvLyBNYXBzIHJlZCBjb2xvcnMgdG8gbWFrZSBwaWNraW5nIGh1ZSBlYXNpZXJcbiAgICBpZiAoaHVlID49IDMzNCAmJiBodWUgPD0gMzYwKSB7XG4gICAgICBodWUtPSAzNjA7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgY29sb3JOYW1lIGluIGNvbG9yRGljdGlvbmFyeSkge1xuICAgICAgIHZhciBjb2xvciA9IGNvbG9yRGljdGlvbmFyeVtjb2xvck5hbWVdO1xuICAgICAgIGlmIChjb2xvci5odWVSYW5nZSAmJlxuICAgICAgICAgICBodWUgPj0gY29sb3IuaHVlUmFuZ2VbMF0gJiZcbiAgICAgICAgICAgaHVlIDw9IGNvbG9yLmh1ZVJhbmdlWzFdKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbG9yRGljdGlvbmFyeVtjb2xvck5hbWVdO1xuICAgICAgIH1cbiAgICB9IHJldHVybiAnQ29sb3Igbm90IGZvdW5kJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmRvbVdpdGhpbiAocmFuZ2UpIHtcbiAgICBpZiAoc2VlZCA9PT0gbnVsbCkge1xuICAgICAgLy9nZW5lcmF0ZSByYW5kb20gZXZlbmx5IGRlc3RpbmN0IG51bWJlciBmcm9tIDogaHR0cHM6Ly9tYXJ0aW4uYW5rZXJsLmNvbS8yMDA5LzEyLzA5L2hvdy10by1jcmVhdGUtcmFuZG9tLWNvbG9ycy1wcm9ncmFtbWF0aWNhbGx5L1xuICAgICAgdmFyIGdvbGRlbl9yYXRpbyA9IDAuNjE4MDMzOTg4NzQ5ODk1XG4gICAgICB2YXIgcj1NYXRoLnJhbmRvbSgpXG4gICAgICByICs9IGdvbGRlbl9yYXRpb1xuICAgICAgciAlPSAxXG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihyYW5nZVswXSArIHIqKHJhbmdlWzFdICsgMSAtIHJhbmdlWzBdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vU2VlZGVkIHJhbmRvbSBhbGdvcml0aG0gZnJvbSBodHRwOi8vaW5kaWVnYW1yLmNvbS9nZW5lcmF0ZS1yZXBlYXRhYmxlLXJhbmRvbS1udW1iZXJzLWluLWpzL1xuICAgICAgdmFyIG1heCA9IHJhbmdlWzFdIHx8IDE7XG4gICAgICB2YXIgbWluID0gcmFuZ2VbMF0gfHwgMDtcbiAgICAgIHNlZWQgPSAoc2VlZCAqIDkzMDEgKyA0OTI5NykgJSAyMzMyODA7XG4gICAgICB2YXIgcm5kID0gc2VlZCAvIDIzMzI4MC4wO1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IobWluICsgcm5kICogKG1heCAtIG1pbikpO1xufVxuICB9XG5cbiAgZnVuY3Rpb24gSFNWdG9IZXggKGhzdil7XG5cbiAgICB2YXIgcmdiID0gSFNWdG9SR0IoaHN2KTtcblxuICAgIGZ1bmN0aW9uIGNvbXBvbmVudFRvSGV4KGMpIHtcbiAgICAgICAgdmFyIGhleCA9IGMudG9TdHJpbmcoMTYpO1xuICAgICAgICByZXR1cm4gaGV4Lmxlbmd0aCA9PSAxID8gJzAnICsgaGV4IDogaGV4O1xuICAgIH1cblxuICAgIHZhciBoZXggPSAnIycgKyBjb21wb25lbnRUb0hleChyZ2JbMF0pICsgY29tcG9uZW50VG9IZXgocmdiWzFdKSArIGNvbXBvbmVudFRvSGV4KHJnYlsyXSk7XG5cbiAgICByZXR1cm4gaGV4O1xuXG4gIH1cblxuICBmdW5jdGlvbiBkZWZpbmVDb2xvciAobmFtZSwgaHVlUmFuZ2UsIGxvd2VyQm91bmRzKSB7XG5cbiAgICB2YXIgc01pbiA9IGxvd2VyQm91bmRzWzBdWzBdLFxuICAgICAgICBzTWF4ID0gbG93ZXJCb3VuZHNbbG93ZXJCb3VuZHMubGVuZ3RoIC0gMV1bMF0sXG5cbiAgICAgICAgYk1pbiA9IGxvd2VyQm91bmRzW2xvd2VyQm91bmRzLmxlbmd0aCAtIDFdWzFdLFxuICAgICAgICBiTWF4ID0gbG93ZXJCb3VuZHNbMF1bMV07XG5cbiAgICBjb2xvckRpY3Rpb25hcnlbbmFtZV0gPSB7XG4gICAgICBodWVSYW5nZTogaHVlUmFuZ2UsXG4gICAgICBsb3dlckJvdW5kczogbG93ZXJCb3VuZHMsXG4gICAgICBzYXR1cmF0aW9uUmFuZ2U6IFtzTWluLCBzTWF4XSxcbiAgICAgIGJyaWdodG5lc3NSYW5nZTogW2JNaW4sIGJNYXhdXG4gICAgfTtcblxuICB9XG5cbiAgZnVuY3Rpb24gbG9hZENvbG9yQm91bmRzICgpIHtcblxuICAgIGRlZmluZUNvbG9yKFxuICAgICAgJ21vbm9jaHJvbWUnLFxuICAgICAgbnVsbCxcbiAgICAgIFtbMCwwXSxbMTAwLDBdXVxuICAgICk7XG5cbiAgICBkZWZpbmVDb2xvcihcbiAgICAgICdyZWQnLFxuICAgICAgWy0yNiwxOF0sXG4gICAgICBbWzIwLDEwMF0sWzMwLDkyXSxbNDAsODldLFs1MCw4NV0sWzYwLDc4XSxbNzAsNzBdLFs4MCw2MF0sWzkwLDU1XSxbMTAwLDUwXV1cbiAgICApO1xuXG4gICAgZGVmaW5lQ29sb3IoXG4gICAgICAnb3JhbmdlJyxcbiAgICAgIFsxOCw0Nl0sXG4gICAgICBbWzIwLDEwMF0sWzMwLDkzXSxbNDAsODhdLFs1MCw4Nl0sWzYwLDg1XSxbNzAsNzBdLFsxMDAsNzBdXVxuICAgICk7XG5cbiAgICBkZWZpbmVDb2xvcihcbiAgICAgICd5ZWxsb3cnLFxuICAgICAgWzQ2LDYyXSxcbiAgICAgIFtbMjUsMTAwXSxbNDAsOTRdLFs1MCw4OV0sWzYwLDg2XSxbNzAsODRdLFs4MCw4Ml0sWzkwLDgwXSxbMTAwLDc1XV1cbiAgICApO1xuXG4gICAgZGVmaW5lQ29sb3IoXG4gICAgICAnZ3JlZW4nLFxuICAgICAgWzYyLDE3OF0sXG4gICAgICBbWzMwLDEwMF0sWzQwLDkwXSxbNTAsODVdLFs2MCw4MV0sWzcwLDc0XSxbODAsNjRdLFs5MCw1MF0sWzEwMCw0MF1dXG4gICAgKTtcblxuICAgIGRlZmluZUNvbG9yKFxuICAgICAgJ2JsdWUnLFxuICAgICAgWzE3OCwgMjU3XSxcbiAgICAgIFtbMjAsMTAwXSxbMzAsODZdLFs0MCw4MF0sWzUwLDc0XSxbNjAsNjBdLFs3MCw1Ml0sWzgwLDQ0XSxbOTAsMzldLFsxMDAsMzVdXVxuICAgICk7XG5cbiAgICBkZWZpbmVDb2xvcihcbiAgICAgICdwdXJwbGUnLFxuICAgICAgWzI1NywgMjgyXSxcbiAgICAgIFtbMjAsMTAwXSxbMzAsODddLFs0MCw3OV0sWzUwLDcwXSxbNjAsNjVdLFs3MCw1OV0sWzgwLDUyXSxbOTAsNDVdLFsxMDAsNDJdXVxuICAgICk7XG5cbiAgICBkZWZpbmVDb2xvcihcbiAgICAgICdwaW5rJyxcbiAgICAgIFsyODIsIDMzNF0sXG4gICAgICBbWzIwLDEwMF0sWzMwLDkwXSxbNDAsODZdLFs2MCw4NF0sWzgwLDgwXSxbOTAsNzVdLFsxMDAsNzNdXVxuICAgICk7XG5cbiAgfVxuXG4gIGZ1bmN0aW9uIEhTVnRvUkdCIChoc3YpIHtcblxuICAgIC8vIHRoaXMgZG9lc24ndCB3b3JrIGZvciB0aGUgdmFsdWVzIG9mIDAgYW5kIDM2MFxuICAgIC8vIGhlcmUncyB0aGUgaGFja3kgZml4XG4gICAgdmFyIGggPSBoc3ZbMF07XG4gICAgaWYgKGggPT09IDApIHtoID0gMTt9XG4gICAgaWYgKGggPT09IDM2MCkge2ggPSAzNTk7fVxuXG4gICAgLy8gUmViYXNlIHRoZSBoLHMsdiB2YWx1ZXNcbiAgICBoID0gaC8zNjA7XG4gICAgdmFyIHMgPSBoc3ZbMV0vMTAwLFxuICAgICAgICB2ID0gaHN2WzJdLzEwMDtcblxuICAgIHZhciBoX2kgPSBNYXRoLmZsb29yKGgqNiksXG4gICAgICBmID0gaCAqIDYgLSBoX2ksXG4gICAgICBwID0gdiAqICgxIC0gcyksXG4gICAgICBxID0gdiAqICgxIC0gZipzKSxcbiAgICAgIHQgPSB2ICogKDEgLSAoMSAtIGYpKnMpLFxuICAgICAgciA9IDI1NixcbiAgICAgIGcgPSAyNTYsXG4gICAgICBiID0gMjU2O1xuXG4gICAgc3dpdGNoKGhfaSkge1xuICAgICAgY2FzZSAwOiByID0gdjsgZyA9IHQ7IGIgPSBwOyAgYnJlYWs7XG4gICAgICBjYXNlIDE6IHIgPSBxOyBnID0gdjsgYiA9IHA7ICBicmVhaztcbiAgICAgIGNhc2UgMjogciA9IHA7IGcgPSB2OyBiID0gdDsgIGJyZWFrO1xuICAgICAgY2FzZSAzOiByID0gcDsgZyA9IHE7IGIgPSB2OyAgYnJlYWs7XG4gICAgICBjYXNlIDQ6IHIgPSB0OyBnID0gcDsgYiA9IHY7ICBicmVhaztcbiAgICAgIGNhc2UgNTogciA9IHY7IGcgPSBwOyBiID0gcTsgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSBbTWF0aC5mbG9vcihyKjI1NSksIE1hdGguZmxvb3IoZyoyNTUpLCBNYXRoLmZsb29yKGIqMjU1KV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIEhleFRvSFNCIChoZXgpIHtcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XG4gICAgaGV4ID0gaGV4Lmxlbmd0aCA9PT0gMyA/IGhleC5yZXBsYWNlKC8oLikvZywgJyQxJDEnKSA6IGhleDtcblxuICAgIHZhciByZWQgPSBwYXJzZUludChoZXguc3Vic3RyKDAsIDIpLCAxNikgLyAyNTUsXG4gICAgICAgICAgZ3JlZW4gPSBwYXJzZUludChoZXguc3Vic3RyKDIsIDIpLCAxNikgLyAyNTUsXG4gICAgICAgICAgYmx1ZSA9IHBhcnNlSW50KGhleC5zdWJzdHIoNCwgMiksIDE2KSAvIDI1NTtcblxuICAgIHZhciBjTWF4ID0gTWF0aC5tYXgocmVkLCBncmVlbiwgYmx1ZSksXG4gICAgICAgICAgZGVsdGEgPSBjTWF4IC0gTWF0aC5taW4ocmVkLCBncmVlbiwgYmx1ZSksXG4gICAgICAgICAgc2F0dXJhdGlvbiA9IGNNYXggPyAoZGVsdGEgLyBjTWF4KSA6IDA7XG5cbiAgICBzd2l0Y2ggKGNNYXgpIHtcbiAgICAgIGNhc2UgcmVkOiByZXR1cm4gWyA2MCAqICgoKGdyZWVuIC0gYmx1ZSkgLyBkZWx0YSkgJSA2KSB8fCAwLCBzYXR1cmF0aW9uLCBjTWF4IF07XG4gICAgICBjYXNlIGdyZWVuOiByZXR1cm4gWyA2MCAqICgoKGJsdWUgLSByZWQpIC8gZGVsdGEpICsgMikgfHwgMCwgc2F0dXJhdGlvbiwgY01heCBdO1xuICAgICAgY2FzZSBibHVlOiByZXR1cm4gWyA2MCAqICgoKHJlZCAtIGdyZWVuKSAvIGRlbHRhKSArIDQpIHx8IDAsIHNhdHVyYXRpb24sIGNNYXggXTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBIU1Z0b0hTTCAoaHN2KSB7XG4gICAgdmFyIGggPSBoc3ZbMF0sXG4gICAgICBzID0gaHN2WzFdLzEwMCxcbiAgICAgIHYgPSBoc3ZbMl0vMTAwLFxuICAgICAgayA9ICgyLXMpKnY7XG5cbiAgICByZXR1cm4gW1xuICAgICAgaCxcbiAgICAgIE1hdGgucm91bmQocyp2IC8gKGs8MSA/IGsgOiAyLWspICogMTAwMDApIC8gMTAwLFxuICAgICAgay8yICogMTAwXG4gICAgXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZ1RvSW50ZWdlciAoc3RyaW5nKSB7XG4gICAgdmFyIHRvdGFsID0gMFxuICAgIGZvciAodmFyIGkgPSAwOyBpICE9PSBzdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0b3RhbCA+PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgYnJlYWs7XG4gICAgICB0b3RhbCArPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuICAgIH1cbiAgICByZXR1cm4gdG90YWxcbiAgfVxuXG4gIC8vIGdldCBUaGUgcmFuZ2Ugb2YgZ2l2ZW4gaHVlIHdoZW4gb3B0aW9ucy5jb3VudCE9MFxuICBmdW5jdGlvbiBnZXRSZWFsSHVlUmFuZ2UoY29sb3JIdWUpXG4gIHsgaWYgKCFpc05hTihjb2xvckh1ZSkpIHtcbiAgICB2YXIgbnVtYmVyID0gcGFyc2VJbnQoY29sb3JIdWUpO1xuXG4gICAgaWYgKG51bWJlciA8IDM2MCAmJiBudW1iZXIgPiAwKSB7XG4gICAgICByZXR1cm4gZ2V0Q29sb3JJbmZvKGNvbG9ySHVlKS5odWVSYW5nZVxuICAgIH1cbiAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb2xvckh1ZSA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgaWYgKGNvbG9yRGljdGlvbmFyeVtjb2xvckh1ZV0pIHtcbiAgICAgICAgdmFyIGNvbG9yID0gY29sb3JEaWN0aW9uYXJ5W2NvbG9ySHVlXTtcblxuICAgICAgICBpZiAoY29sb3IuaHVlUmFuZ2UpIHtcbiAgICAgICAgICByZXR1cm4gY29sb3IuaHVlUmFuZ2VcbiAgICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2xvckh1ZS5tYXRjaCgvXiM/KFswLTlBLUZdezN9fFswLTlBLUZdezZ9KSQvaSkpIHtcbiAgICAgICAgdmFyIGh1ZSA9IEhleFRvSFNCKGNvbG9ySHVlKVswXVxuICAgICAgICByZXR1cm4gZ2V0Q29sb3JJbmZvKGh1ZSkuaHVlUmFuZ2VcbiAgICB9XG4gIH1cblxuICAgIHJldHVybiBbMCwzNjBdXG59XG4gIHJldHVybiByYW5kb21Db2xvcjtcbn0pKTtcbiIsIi8vIHdyYXBwZXIgZm9yIG5vbi1ub2RlIGVudnNcbjsoZnVuY3Rpb24gKHNheCkge1xuXG5zYXgucGFyc2VyID0gZnVuY3Rpb24gKHN0cmljdCwgb3B0KSB7IHJldHVybiBuZXcgU0FYUGFyc2VyKHN0cmljdCwgb3B0KSB9XG5zYXguU0FYUGFyc2VyID0gU0FYUGFyc2VyXG5zYXguU0FYU3RyZWFtID0gU0FYU3RyZWFtXG5zYXguY3JlYXRlU3RyZWFtID0gY3JlYXRlU3RyZWFtXG5cbi8vIFdoZW4gd2UgcGFzcyB0aGUgTUFYX0JVRkZFUl9MRU5HVEggcG9zaXRpb24sIHN0YXJ0IGNoZWNraW5nIGZvciBidWZmZXIgb3ZlcnJ1bnMuXG4vLyBXaGVuIHdlIGNoZWNrLCBzY2hlZHVsZSB0aGUgbmV4dCBjaGVjayBmb3IgTUFYX0JVRkZFUl9MRU5HVEggLSAobWF4KGJ1ZmZlciBsZW5ndGhzKSksXG4vLyBzaW5jZSB0aGF0J3MgdGhlIGVhcmxpZXN0IHRoYXQgYSBidWZmZXIgb3ZlcnJ1biBjb3VsZCBvY2N1ci4gIFRoaXMgd2F5LCBjaGVja3MgYXJlXG4vLyBhcyByYXJlIGFzIHJlcXVpcmVkLCBidXQgYXMgb2Z0ZW4gYXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBuZXZlciBjcm9zc2luZyB0aGlzIGJvdW5kLlxuLy8gRnVydGhlcm1vcmUsIGJ1ZmZlcnMgYXJlIG9ubHkgdGVzdGVkIGF0IG1vc3Qgb25jZSBwZXIgd3JpdGUoKSwgc28gcGFzc2luZyBhIHZlcnlcbi8vIGxhcmdlIHN0cmluZyBpbnRvIHdyaXRlKCkgbWlnaHQgaGF2ZSB1bmRlc2lyYWJsZSBlZmZlY3RzLCBidXQgdGhpcyBpcyBtYW5hZ2VhYmxlIGJ5XG4vLyB0aGUgY2FsbGVyLCBzbyBpdCBpcyBhc3N1bWVkIHRvIGJlIHNhZmUuICBUaHVzLCBhIGNhbGwgdG8gd3JpdGUoKSBtYXksIGluIHRoZSBleHRyZW1lXG4vLyBlZGdlIGNhc2UsIHJlc3VsdCBpbiBjcmVhdGluZyBhdCBtb3N0IG9uZSBjb21wbGV0ZSBjb3B5IG9mIHRoZSBzdHJpbmcgcGFzc2VkIGluLlxuLy8gU2V0IHRvIEluZmluaXR5IHRvIGhhdmUgdW5saW1pdGVkIGJ1ZmZlcnMuXG5zYXguTUFYX0JVRkZFUl9MRU5HVEggPSA2NCAqIDEwMjRcblxudmFyIGJ1ZmZlcnMgPSBbXG4gIFwiY29tbWVudFwiLCBcInNnbWxEZWNsXCIsIFwidGV4dE5vZGVcIiwgXCJ0YWdOYW1lXCIsIFwiZG9jdHlwZVwiLFxuICBcInByb2NJbnN0TmFtZVwiLCBcInByb2NJbnN0Qm9keVwiLCBcImVudGl0eVwiLCBcImF0dHJpYk5hbWVcIixcbiAgXCJhdHRyaWJWYWx1ZVwiLCBcImNkYXRhXCIsIFwic2NyaXB0XCJcbl1cblxuc2F4LkVWRU5UUyA9IC8vIGZvciBkaXNjb3ZlcmFiaWxpdHkuXG4gIFsgXCJ0ZXh0XCJcbiAgLCBcInByb2Nlc3NpbmdpbnN0cnVjdGlvblwiXG4gICwgXCJzZ21sZGVjbGFyYXRpb25cIlxuICAsIFwiZG9jdHlwZVwiXG4gICwgXCJjb21tZW50XCJcbiAgLCBcImF0dHJpYnV0ZVwiXG4gICwgXCJvcGVudGFnXCJcbiAgLCBcImNsb3NldGFnXCJcbiAgLCBcIm9wZW5jZGF0YVwiXG4gICwgXCJjZGF0YVwiXG4gICwgXCJjbG9zZWNkYXRhXCJcbiAgLCBcImVycm9yXCJcbiAgLCBcImVuZFwiXG4gICwgXCJyZWFkeVwiXG4gICwgXCJzY3JpcHRcIlxuICAsIFwib3Blbm5hbWVzcGFjZVwiXG4gICwgXCJjbG9zZW5hbWVzcGFjZVwiXG4gIF1cblxuZnVuY3Rpb24gU0FYUGFyc2VyIChzdHJpY3QsIG9wdCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0FYUGFyc2VyKSkgcmV0dXJuIG5ldyBTQVhQYXJzZXIoc3RyaWN0LCBvcHQpXG5cbiAgdmFyIHBhcnNlciA9IHRoaXNcbiAgY2xlYXJCdWZmZXJzKHBhcnNlcilcbiAgcGFyc2VyLnEgPSBwYXJzZXIuYyA9IFwiXCJcbiAgcGFyc2VyLmJ1ZmZlckNoZWNrUG9zaXRpb24gPSBzYXguTUFYX0JVRkZFUl9MRU5HVEhcbiAgcGFyc2VyLm9wdCA9IG9wdCB8fCB7fVxuICBwYXJzZXIub3B0Lmxvd2VyY2FzZSA9IHBhcnNlci5vcHQubG93ZXJjYXNlIHx8IHBhcnNlci5vcHQubG93ZXJjYXNldGFnc1xuICBwYXJzZXIubG9vc2VDYXNlID0gcGFyc2VyLm9wdC5sb3dlcmNhc2UgPyBcInRvTG93ZXJDYXNlXCIgOiBcInRvVXBwZXJDYXNlXCJcbiAgcGFyc2VyLnRhZ3MgPSBbXVxuICBwYXJzZXIuY2xvc2VkID0gcGFyc2VyLmNsb3NlZFJvb3QgPSBwYXJzZXIuc2F3Um9vdCA9IGZhbHNlXG4gIHBhcnNlci50YWcgPSBwYXJzZXIuZXJyb3IgPSBudWxsXG4gIHBhcnNlci5zdHJpY3QgPSAhIXN0cmljdFxuICBwYXJzZXIubm9zY3JpcHQgPSAhIShzdHJpY3QgfHwgcGFyc2VyLm9wdC5ub3NjcmlwdClcbiAgcGFyc2VyLnN0YXRlID0gUy5CRUdJTlxuICBwYXJzZXIuRU5USVRJRVMgPSBPYmplY3QuY3JlYXRlKHNheC5FTlRJVElFUylcbiAgcGFyc2VyLmF0dHJpYkxpc3QgPSBbXVxuXG4gIC8vIG5hbWVzcGFjZXMgZm9ybSBhIHByb3RvdHlwZSBjaGFpbi5cbiAgLy8gaXQgYWx3YXlzIHBvaW50cyBhdCB0aGUgY3VycmVudCB0YWcsXG4gIC8vIHdoaWNoIHByb3RvcyB0byBpdHMgcGFyZW50IHRhZy5cbiAgaWYgKHBhcnNlci5vcHQueG1sbnMpIHBhcnNlci5ucyA9IE9iamVjdC5jcmVhdGUocm9vdE5TKVxuXG4gIC8vIG1vc3RseSBqdXN0IGZvciBlcnJvciByZXBvcnRpbmdcbiAgcGFyc2VyLnRyYWNrUG9zaXRpb24gPSBwYXJzZXIub3B0LnBvc2l0aW9uICE9PSBmYWxzZVxuICBpZiAocGFyc2VyLnRyYWNrUG9zaXRpb24pIHtcbiAgICBwYXJzZXIucG9zaXRpb24gPSBwYXJzZXIubGluZSA9IHBhcnNlci5jb2x1bW4gPSAwXG4gIH1cbiAgZW1pdChwYXJzZXIsIFwib25yZWFkeVwiKVxufVxuXG5pZiAoIU9iamVjdC5jcmVhdGUpIE9iamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAobykge1xuICBmdW5jdGlvbiBmICgpIHsgdGhpcy5fX3Byb3RvX18gPSBvIH1cbiAgZi5wcm90b3R5cGUgPSBvXG4gIHJldHVybiBuZXcgZlxufVxuXG5pZiAoIU9iamVjdC5nZXRQcm90b3R5cGVPZikgT2JqZWN0LmdldFByb3RvdHlwZU9mID0gZnVuY3Rpb24gKG8pIHtcbiAgcmV0dXJuIG8uX19wcm90b19fXG59XG5cbmlmICghT2JqZWN0LmtleXMpIE9iamVjdC5rZXlzID0gZnVuY3Rpb24gKG8pIHtcbiAgdmFyIGEgPSBbXVxuICBmb3IgKHZhciBpIGluIG8pIGlmIChvLmhhc093blByb3BlcnR5KGkpKSBhLnB1c2goaSlcbiAgcmV0dXJuIGFcbn1cblxuZnVuY3Rpb24gY2hlY2tCdWZmZXJMZW5ndGggKHBhcnNlcikge1xuICB2YXIgbWF4QWxsb3dlZCA9IE1hdGgubWF4KHNheC5NQVhfQlVGRkVSX0xFTkdUSCwgMTApXG4gICAgLCBtYXhBY3R1YWwgPSAwXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYnVmZmVycy5sZW5ndGg7IGkgPCBsOyBpICsrKSB7XG4gICAgdmFyIGxlbiA9IHBhcnNlcltidWZmZXJzW2ldXS5sZW5ndGhcbiAgICBpZiAobGVuID4gbWF4QWxsb3dlZCkge1xuICAgICAgLy8gVGV4dC9jZGF0YSBub2RlcyBjYW4gZ2V0IGJpZywgYW5kIHNpbmNlIHRoZXkncmUgYnVmZmVyZWQsXG4gICAgICAvLyB3ZSBjYW4gZ2V0IGhlcmUgdW5kZXIgbm9ybWFsIGNvbmRpdGlvbnMuXG4gICAgICAvLyBBdm9pZCBpc3N1ZXMgYnkgZW1pdHRpbmcgdGhlIHRleHQgbm9kZSBub3csXG4gICAgICAvLyBzbyBhdCBsZWFzdCBpdCB3b24ndCBnZXQgYW55IGJpZ2dlci5cbiAgICAgIHN3aXRjaCAoYnVmZmVyc1tpXSkge1xuICAgICAgICBjYXNlIFwidGV4dE5vZGVcIjpcbiAgICAgICAgICBjbG9zZVRleHQocGFyc2VyKVxuICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgXCJjZGF0YVwiOlxuICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbmNkYXRhXCIsIHBhcnNlci5jZGF0YSlcbiAgICAgICAgICBwYXJzZXIuY2RhdGEgPSBcIlwiXG4gICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbnNjcmlwdFwiLCBwYXJzZXIuc2NyaXB0KVxuICAgICAgICAgIHBhcnNlci5zY3JpcHQgPSBcIlwiXG4gICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBlcnJvcihwYXJzZXIsIFwiTWF4IGJ1ZmZlciBsZW5ndGggZXhjZWVkZWQ6IFwiK2J1ZmZlcnNbaV0pXG4gICAgICB9XG4gICAgfVxuICAgIG1heEFjdHVhbCA9IE1hdGgubWF4KG1heEFjdHVhbCwgbGVuKVxuICB9XG4gIC8vIHNjaGVkdWxlIHRoZSBuZXh0IGNoZWNrIGZvciB0aGUgZWFybGllc3QgcG9zc2libGUgYnVmZmVyIG92ZXJydW4uXG4gIHBhcnNlci5idWZmZXJDaGVja1Bvc2l0aW9uID0gKHNheC5NQVhfQlVGRkVSX0xFTkdUSCAtIG1heEFjdHVhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwYXJzZXIucG9zaXRpb25cbn1cblxuZnVuY3Rpb24gY2xlYXJCdWZmZXJzIChwYXJzZXIpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBidWZmZXJzLmxlbmd0aDsgaSA8IGw7IGkgKyspIHtcbiAgICBwYXJzZXJbYnVmZmVyc1tpXV0gPSBcIlwiXG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hCdWZmZXJzIChwYXJzZXIpIHtcbiAgY2xvc2VUZXh0KHBhcnNlcilcbiAgaWYgKHBhcnNlci5jZGF0YSAhPT0gXCJcIikge1xuICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbmNkYXRhXCIsIHBhcnNlci5jZGF0YSlcbiAgICBwYXJzZXIuY2RhdGEgPSBcIlwiXG4gIH1cbiAgaWYgKHBhcnNlci5zY3JpcHQgIT09IFwiXCIpIHtcbiAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25zY3JpcHRcIiwgcGFyc2VyLnNjcmlwdClcbiAgICBwYXJzZXIuc2NyaXB0ID0gXCJcIlxuICB9XG59XG5cblNBWFBhcnNlci5wcm90b3R5cGUgPVxuICB7IGVuZDogZnVuY3Rpb24gKCkgeyBlbmQodGhpcykgfVxuICAsIHdyaXRlOiB3cml0ZVxuICAsIHJlc3VtZTogZnVuY3Rpb24gKCkgeyB0aGlzLmVycm9yID0gbnVsbDsgcmV0dXJuIHRoaXMgfVxuICAsIGNsb3NlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLndyaXRlKG51bGwpIH1cbiAgLCBmbHVzaDogZnVuY3Rpb24gKCkgeyBmbHVzaEJ1ZmZlcnModGhpcykgfVxuICB9XG5cbnRyeSB7XG4gIHZhciBTdHJlYW0gPSByZXF1aXJlKFwic3RyZWFtXCIpLlN0cmVhbVxufSBjYXRjaCAoZXgpIHtcbiAgdmFyIFN0cmVhbSA9IGZ1bmN0aW9uICgpIHt9XG59XG5cblxudmFyIHN0cmVhbVdyYXBzID0gc2F4LkVWRU5UUy5maWx0ZXIoZnVuY3Rpb24gKGV2KSB7XG4gIHJldHVybiBldiAhPT0gXCJlcnJvclwiICYmIGV2ICE9PSBcImVuZFwiXG59KVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJlYW0gKHN0cmljdCwgb3B0KSB7XG4gIHJldHVybiBuZXcgU0FYU3RyZWFtKHN0cmljdCwgb3B0KVxufVxuXG5mdW5jdGlvbiBTQVhTdHJlYW0gKHN0cmljdCwgb3B0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTQVhTdHJlYW0pKSByZXR1cm4gbmV3IFNBWFN0cmVhbShzdHJpY3QsIG9wdClcblxuICBTdHJlYW0uYXBwbHkodGhpcylcblxuICB0aGlzLl9wYXJzZXIgPSBuZXcgU0FYUGFyc2VyKHN0cmljdCwgb3B0KVxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZVxuXG5cbiAgdmFyIG1lID0gdGhpc1xuXG4gIHRoaXMuX3BhcnNlci5vbmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBtZS5lbWl0KFwiZW5kXCIpXG4gIH1cblxuICB0aGlzLl9wYXJzZXIub25lcnJvciA9IGZ1bmN0aW9uIChlcikge1xuICAgIG1lLmVtaXQoXCJlcnJvclwiLCBlcilcblxuICAgIC8vIGlmIGRpZG4ndCB0aHJvdywgdGhlbiBtZWFucyBlcnJvciB3YXMgaGFuZGxlZC5cbiAgICAvLyBnbyBhaGVhZCBhbmQgY2xlYXIgZXJyb3IsIHNvIHdlIGNhbiB3cml0ZSBhZ2Fpbi5cbiAgICBtZS5fcGFyc2VyLmVycm9yID0gbnVsbFxuICB9XG5cbiAgdGhpcy5fZGVjb2RlciA9IG51bGw7XG5cbiAgc3RyZWFtV3JhcHMuZm9yRWFjaChmdW5jdGlvbiAoZXYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsIFwib25cIiArIGV2LCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lLl9wYXJzZXJbXCJvblwiICsgZXZdIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIGlmICghaCkge1xuICAgICAgICAgIG1lLnJlbW92ZUFsbExpc3RlbmVycyhldilcbiAgICAgICAgICByZXR1cm4gbWUuX3BhcnNlcltcIm9uXCIrZXZdID0gaFxuICAgICAgICB9XG4gICAgICAgIG1lLm9uKGV2LCBoKVxuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSlcbiAgfSlcbn1cblxuU0FYU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3RyZWFtLnByb3RvdHlwZSxcbiAgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogU0FYU3RyZWFtIH0gfSlcblxuU0FYU3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGlmICh0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgQnVmZmVyLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICBCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICBpZiAoIXRoaXMuX2RlY29kZXIpIHtcbiAgICAgIHZhciBTRCA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJykuU3RyaW5nRGVjb2RlclxuICAgICAgdGhpcy5fZGVjb2RlciA9IG5ldyBTRCgndXRmOCcpXG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9kZWNvZGVyLndyaXRlKGRhdGEpO1xuICB9XG5cbiAgdGhpcy5fcGFyc2VyLndyaXRlKGRhdGEudG9TdHJpbmcoKSlcbiAgdGhpcy5lbWl0KFwiZGF0YVwiLCBkYXRhKVxuICByZXR1cm4gdHJ1ZVxufVxuXG5TQVhTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB0aGlzLndyaXRlKGNodW5rKVxuICB0aGlzLl9wYXJzZXIuZW5kKClcbiAgcmV0dXJuIHRydWVcbn1cblxuU0FYU3RyZWFtLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldiwgaGFuZGxlcikge1xuICB2YXIgbWUgPSB0aGlzXG4gIGlmICghbWUuX3BhcnNlcltcIm9uXCIrZXZdICYmIHN0cmVhbVdyYXBzLmluZGV4T2YoZXYpICE9PSAtMSkge1xuICAgIG1lLl9wYXJzZXJbXCJvblwiK2V2XSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IFthcmd1bWVudHNbMF1dXG4gICAgICAgICAgICAgICA6IEFycmF5LmFwcGx5KG51bGwsIGFyZ3VtZW50cylcbiAgICAgIGFyZ3Muc3BsaWNlKDAsIDAsIGV2KVxuICAgICAgbWUuZW1pdC5hcHBseShtZSwgYXJncylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKG1lLCBldiwgaGFuZGxlcilcbn1cblxuXG5cbi8vIGNoYXJhY3RlciBjbGFzc2VzIGFuZCB0b2tlbnNcbnZhciB3aGl0ZXNwYWNlID0gXCJcXHJcXG5cXHQgXCJcbiAgLy8gdGhpcyByZWFsbHkgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aCBjaGFyYWN0ZXIgY2xhc3Nlcy5cbiAgLy8gWE1MIGFsbG93cyBhbGwgbWFubmVyIG9mIHJpZGljdWxvdXMgbnVtYmVycyBhbmQgZGlnaXRzLlxuICAsIG51bWJlciA9IFwiMDEyNDM1Njc4OVwiXG4gICwgbGV0dGVyID0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXCJcbiAgLy8gKExldHRlciB8IFwiX1wiIHwgXCI6XCIpXG4gICwgcXVvdGUgPSBcIidcXFwiXCJcbiAgLCBlbnRpdHkgPSBudW1iZXIrbGV0dGVyK1wiI1wiXG4gICwgYXR0cmliRW5kID0gd2hpdGVzcGFjZSArIFwiPlwiXG4gICwgQ0RBVEEgPSBcIltDREFUQVtcIlxuICAsIERPQ1RZUEUgPSBcIkRPQ1RZUEVcIlxuICAsIFhNTF9OQU1FU1BBQ0UgPSBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiXG4gICwgWE1MTlNfTkFNRVNQQUNFID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG4gICwgcm9vdE5TID0geyB4bWw6IFhNTF9OQU1FU1BBQ0UsIHhtbG5zOiBYTUxOU19OQU1FU1BBQ0UgfVxuXG4vLyB0dXJuIGFsbCB0aGUgc3RyaW5nIGNoYXJhY3RlciBzZXRzIGludG8gY2hhcmFjdGVyIGNsYXNzIG9iamVjdHMuXG53aGl0ZXNwYWNlID0gY2hhckNsYXNzKHdoaXRlc3BhY2UpXG5udW1iZXIgPSBjaGFyQ2xhc3MobnVtYmVyKVxubGV0dGVyID0gY2hhckNsYXNzKGxldHRlcilcblxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC8jTlQtTmFtZVN0YXJ0Q2hhclxuLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiB3b3JrcyBvbiBzdHJpbmdzLCBhIHNpbmdsZSBjaGFyYWN0ZXIgYXQgYSB0aW1lXG4vLyBhcyBzdWNoLCBpdCBjYW5ub3QgZXZlciBzdXBwb3J0IGFzdHJhbC1wbGFuZSBjaGFyYWN0ZXJzICgxMDAwMC1FRkZGRilcbi8vIHdpdGhvdXQgYSBzaWduaWZpY2FudCBicmVha2luZyBjaGFuZ2UgdG8gZWl0aGVyIHRoaXMgIHBhcnNlciwgb3IgdGhlXG4vLyBKYXZhU2NyaXB0IGxhbmd1YWdlLiAgSW1wbGVtZW50YXRpb24gb2YgYW4gZW1vamktY2FwYWJsZSB4bWwgcGFyc2VyXG4vLyBpcyBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxudmFyIG5hbWVTdGFydCA9IC9bOl9BLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdL1xuXG52YXIgbmFtZUJvZHkgPSAvWzpfQS1aYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFx1MDBCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MFxcLlxcZC1dL1xuXG5xdW90ZSA9IGNoYXJDbGFzcyhxdW90ZSlcbmVudGl0eSA9IGNoYXJDbGFzcyhlbnRpdHkpXG5hdHRyaWJFbmQgPSBjaGFyQ2xhc3MoYXR0cmliRW5kKVxuXG5mdW5jdGlvbiBjaGFyQ2xhc3MgKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KFwiXCIpLnJlZHVjZShmdW5jdGlvbiAocywgYykge1xuICAgIHNbY10gPSB0cnVlXG4gICAgcmV0dXJuIHNcbiAgfSwge30pXG59XG5cbmZ1bmN0aW9uIGlzUmVnRXhwIChjKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG59XG5cbmZ1bmN0aW9uIGlzIChjaGFyY2xhc3MsIGMpIHtcbiAgcmV0dXJuIGlzUmVnRXhwKGNoYXJjbGFzcykgPyAhIWMubWF0Y2goY2hhcmNsYXNzKSA6IGNoYXJjbGFzc1tjXVxufVxuXG5mdW5jdGlvbiBub3QgKGNoYXJjbGFzcywgYykge1xuICByZXR1cm4gIWlzKGNoYXJjbGFzcywgYylcbn1cblxudmFyIFMgPSAwXG5zYXguU1RBVEUgPVxueyBCRUdJTiAgICAgICAgICAgICAgICAgICAgIDogUysrXG4sIFRFWFQgICAgICAgICAgICAgICAgICAgICAgOiBTKysgLy8gZ2VuZXJhbCBzdHVmZlxuLCBURVhUX0VOVElUWSAgICAgICAgICAgICAgIDogUysrIC8vICZhbXAgYW5kIHN1Y2guXG4sIE9QRU5fV0FLQSAgICAgICAgICAgICAgICAgOiBTKysgLy8gPFxuLCBTR01MX0RFQ0wgICAgICAgICAgICAgICAgIDogUysrIC8vIDwhQkxBUkdcbiwgU0dNTF9ERUNMX1FVT1RFRCAgICAgICAgICA6IFMrKyAvLyA8IUJMQVJHIGZvbyBcImJhclxuLCBET0NUWVBFICAgICAgICAgICAgICAgICAgIDogUysrIC8vIDwhRE9DVFlQRVxuLCBET0NUWVBFX1FVT1RFRCAgICAgICAgICAgIDogUysrIC8vIDwhRE9DVFlQRSBcIi8vYmxhaFxuLCBET0NUWVBFX0RURCAgICAgICAgICAgICAgIDogUysrIC8vIDwhRE9DVFlQRSBcIi8vYmxhaFwiIFsgLi4uXG4sIERPQ1RZUEVfRFREX1FVT1RFRCAgICAgICAgOiBTKysgLy8gPCFET0NUWVBFIFwiLy9ibGFoXCIgWyBcImZvb1xuLCBDT01NRU5UX1NUQVJUSU5HICAgICAgICAgIDogUysrIC8vIDwhLVxuLCBDT01NRU5UICAgICAgICAgICAgICAgICAgIDogUysrIC8vIDwhLS1cbiwgQ09NTUVOVF9FTkRJTkcgICAgICAgICAgICA6IFMrKyAvLyA8IS0tIGJsYWggLVxuLCBDT01NRU5UX0VOREVEICAgICAgICAgICAgIDogUysrIC8vIDwhLS0gYmxhaCAtLVxuLCBDREFUQSAgICAgICAgICAgICAgICAgICAgIDogUysrIC8vIDwhW0NEQVRBWyBzb21ldGhpbmdcbiwgQ0RBVEFfRU5ESU5HICAgICAgICAgICAgICA6IFMrKyAvLyBdXG4sIENEQVRBX0VORElOR18yICAgICAgICAgICAgOiBTKysgLy8gXV1cbiwgUFJPQ19JTlNUICAgICAgICAgICAgICAgICA6IFMrKyAvLyA8P2hpXG4sIFBST0NfSU5TVF9CT0RZICAgICAgICAgICAgOiBTKysgLy8gPD9oaSB0aGVyZVxuLCBQUk9DX0lOU1RfRU5ESU5HICAgICAgICAgIDogUysrIC8vIDw/aGkgXCJ0aGVyZVwiID9cbiwgT1BFTl9UQUcgICAgICAgICAgICAgICAgICA6IFMrKyAvLyA8c3Ryb25nXG4sIE9QRU5fVEFHX1NMQVNIICAgICAgICAgICAgOiBTKysgLy8gPHN0cm9uZyAvXG4sIEFUVFJJQiAgICAgICAgICAgICAgICAgICAgOiBTKysgLy8gPGFcbiwgQVRUUklCX05BTUUgICAgICAgICAgICAgICA6IFMrKyAvLyA8YSBmb29cbiwgQVRUUklCX05BTUVfU0FXX1dISVRFICAgICA6IFMrKyAvLyA8YSBmb28gX1xuLCBBVFRSSUJfVkFMVUUgICAgICAgICAgICAgIDogUysrIC8vIDxhIGZvbz1cbiwgQVRUUklCX1ZBTFVFX1FVT1RFRCAgICAgICA6IFMrKyAvLyA8YSBmb289XCJiYXJcbiwgQVRUUklCX1ZBTFVFX0NMT1NFRCAgICAgICA6IFMrKyAvLyA8YSBmb289XCJiYXJcIlxuLCBBVFRSSUJfVkFMVUVfVU5RVU9URUQgICAgIDogUysrIC8vIDxhIGZvbz1iYXJcbiwgQVRUUklCX1ZBTFVFX0VOVElUWV9RICAgICA6IFMrKyAvLyA8Zm9vIGJhcj1cIiZxdW90O1wiXG4sIEFUVFJJQl9WQUxVRV9FTlRJVFlfVSAgICAgOiBTKysgLy8gPGZvbyBiYXI9JnF1b3Q7XG4sIENMT1NFX1RBRyAgICAgICAgICAgICAgICAgOiBTKysgLy8gPC9hXG4sIENMT1NFX1RBR19TQVdfV0hJVEUgICAgICAgOiBTKysgLy8gPC9hICAgPlxuLCBTQ1JJUFQgICAgICAgICAgICAgICAgICAgIDogUysrIC8vIDxzY3JpcHQ+IC4uLlxuLCBTQ1JJUFRfRU5ESU5HICAgICAgICAgICAgIDogUysrIC8vIDxzY3JpcHQ+IC4uLiA8XG59XG5cbnNheC5FTlRJVElFUyA9XG57IFwiYW1wXCIgOiBcIiZcIlxuLCBcImd0XCIgOiBcIj5cIlxuLCBcImx0XCIgOiBcIjxcIlxuLCBcInF1b3RcIiA6IFwiXFxcIlwiXG4sIFwiYXBvc1wiIDogXCInXCJcbiwgXCJBRWxpZ1wiIDogMTk4XG4sIFwiQWFjdXRlXCIgOiAxOTNcbiwgXCJBY2lyY1wiIDogMTk0XG4sIFwiQWdyYXZlXCIgOiAxOTJcbiwgXCJBcmluZ1wiIDogMTk3XG4sIFwiQXRpbGRlXCIgOiAxOTVcbiwgXCJBdW1sXCIgOiAxOTZcbiwgXCJDY2VkaWxcIiA6IDE5OVxuLCBcIkVUSFwiIDogMjA4XG4sIFwiRWFjdXRlXCIgOiAyMDFcbiwgXCJFY2lyY1wiIDogMjAyXG4sIFwiRWdyYXZlXCIgOiAyMDBcbiwgXCJFdW1sXCIgOiAyMDNcbiwgXCJJYWN1dGVcIiA6IDIwNVxuLCBcIkljaXJjXCIgOiAyMDZcbiwgXCJJZ3JhdmVcIiA6IDIwNFxuLCBcIkl1bWxcIiA6IDIwN1xuLCBcIk50aWxkZVwiIDogMjA5XG4sIFwiT2FjdXRlXCIgOiAyMTFcbiwgXCJPY2lyY1wiIDogMjEyXG4sIFwiT2dyYXZlXCIgOiAyMTBcbiwgXCJPc2xhc2hcIiA6IDIxNlxuLCBcIk90aWxkZVwiIDogMjEzXG4sIFwiT3VtbFwiIDogMjE0XG4sIFwiVEhPUk5cIiA6IDIyMlxuLCBcIlVhY3V0ZVwiIDogMjE4XG4sIFwiVWNpcmNcIiA6IDIxOVxuLCBcIlVncmF2ZVwiIDogMjE3XG4sIFwiVXVtbFwiIDogMjIwXG4sIFwiWWFjdXRlXCIgOiAyMjFcbiwgXCJhYWN1dGVcIiA6IDIyNVxuLCBcImFjaXJjXCIgOiAyMjZcbiwgXCJhZWxpZ1wiIDogMjMwXG4sIFwiYWdyYXZlXCIgOiAyMjRcbiwgXCJhcmluZ1wiIDogMjI5XG4sIFwiYXRpbGRlXCIgOiAyMjdcbiwgXCJhdW1sXCIgOiAyMjhcbiwgXCJjY2VkaWxcIiA6IDIzMVxuLCBcImVhY3V0ZVwiIDogMjMzXG4sIFwiZWNpcmNcIiA6IDIzNFxuLCBcImVncmF2ZVwiIDogMjMyXG4sIFwiZXRoXCIgOiAyNDBcbiwgXCJldW1sXCIgOiAyMzVcbiwgXCJpYWN1dGVcIiA6IDIzN1xuLCBcImljaXJjXCIgOiAyMzhcbiwgXCJpZ3JhdmVcIiA6IDIzNlxuLCBcIml1bWxcIiA6IDIzOVxuLCBcIm50aWxkZVwiIDogMjQxXG4sIFwib2FjdXRlXCIgOiAyNDNcbiwgXCJvY2lyY1wiIDogMjQ0XG4sIFwib2dyYXZlXCIgOiAyNDJcbiwgXCJvc2xhc2hcIiA6IDI0OFxuLCBcIm90aWxkZVwiIDogMjQ1XG4sIFwib3VtbFwiIDogMjQ2XG4sIFwic3psaWdcIiA6IDIyM1xuLCBcInRob3JuXCIgOiAyNTRcbiwgXCJ1YWN1dGVcIiA6IDI1MFxuLCBcInVjaXJjXCIgOiAyNTFcbiwgXCJ1Z3JhdmVcIiA6IDI0OVxuLCBcInV1bWxcIiA6IDI1MlxuLCBcInlhY3V0ZVwiIDogMjUzXG4sIFwieXVtbFwiIDogMjU1XG4sIFwiY29weVwiIDogMTY5XG4sIFwicmVnXCIgOiAxNzRcbiwgXCJuYnNwXCIgOiAxNjBcbiwgXCJpZXhjbFwiIDogMTYxXG4sIFwiY2VudFwiIDogMTYyXG4sIFwicG91bmRcIiA6IDE2M1xuLCBcImN1cnJlblwiIDogMTY0XG4sIFwieWVuXCIgOiAxNjVcbiwgXCJicnZiYXJcIiA6IDE2NlxuLCBcInNlY3RcIiA6IDE2N1xuLCBcInVtbFwiIDogMTY4XG4sIFwib3JkZlwiIDogMTcwXG4sIFwibGFxdW9cIiA6IDE3MVxuLCBcIm5vdFwiIDogMTcyXG4sIFwic2h5XCIgOiAxNzNcbiwgXCJtYWNyXCIgOiAxNzVcbiwgXCJkZWdcIiA6IDE3NlxuLCBcInBsdXNtblwiIDogMTc3XG4sIFwic3VwMVwiIDogMTg1XG4sIFwic3VwMlwiIDogMTc4XG4sIFwic3VwM1wiIDogMTc5XG4sIFwiYWN1dGVcIiA6IDE4MFxuLCBcIm1pY3JvXCIgOiAxODFcbiwgXCJwYXJhXCIgOiAxODJcbiwgXCJtaWRkb3RcIiA6IDE4M1xuLCBcImNlZGlsXCIgOiAxODRcbiwgXCJvcmRtXCIgOiAxODZcbiwgXCJyYXF1b1wiIDogMTg3XG4sIFwiZnJhYzE0XCIgOiAxODhcbiwgXCJmcmFjMTJcIiA6IDE4OVxuLCBcImZyYWMzNFwiIDogMTkwXG4sIFwiaXF1ZXN0XCIgOiAxOTFcbiwgXCJ0aW1lc1wiIDogMjE1XG4sIFwiZGl2aWRlXCIgOiAyNDdcbiwgXCJPRWxpZ1wiIDogMzM4XG4sIFwib2VsaWdcIiA6IDMzOVxuLCBcIlNjYXJvblwiIDogMzUyXG4sIFwic2Nhcm9uXCIgOiAzNTNcbiwgXCJZdW1sXCIgOiAzNzZcbiwgXCJmbm9mXCIgOiA0MDJcbiwgXCJjaXJjXCIgOiA3MTBcbiwgXCJ0aWxkZVwiIDogNzMyXG4sIFwiQWxwaGFcIiA6IDkxM1xuLCBcIkJldGFcIiA6IDkxNFxuLCBcIkdhbW1hXCIgOiA5MTVcbiwgXCJEZWx0YVwiIDogOTE2XG4sIFwiRXBzaWxvblwiIDogOTE3XG4sIFwiWmV0YVwiIDogOTE4XG4sIFwiRXRhXCIgOiA5MTlcbiwgXCJUaGV0YVwiIDogOTIwXG4sIFwiSW90YVwiIDogOTIxXG4sIFwiS2FwcGFcIiA6IDkyMlxuLCBcIkxhbWJkYVwiIDogOTIzXG4sIFwiTXVcIiA6IDkyNFxuLCBcIk51XCIgOiA5MjVcbiwgXCJYaVwiIDogOTI2XG4sIFwiT21pY3JvblwiIDogOTI3XG4sIFwiUGlcIiA6IDkyOFxuLCBcIlJob1wiIDogOTI5XG4sIFwiU2lnbWFcIiA6IDkzMVxuLCBcIlRhdVwiIDogOTMyXG4sIFwiVXBzaWxvblwiIDogOTMzXG4sIFwiUGhpXCIgOiA5MzRcbiwgXCJDaGlcIiA6IDkzNVxuLCBcIlBzaVwiIDogOTM2XG4sIFwiT21lZ2FcIiA6IDkzN1xuLCBcImFscGhhXCIgOiA5NDVcbiwgXCJiZXRhXCIgOiA5NDZcbiwgXCJnYW1tYVwiIDogOTQ3XG4sIFwiZGVsdGFcIiA6IDk0OFxuLCBcImVwc2lsb25cIiA6IDk0OVxuLCBcInpldGFcIiA6IDk1MFxuLCBcImV0YVwiIDogOTUxXG4sIFwidGhldGFcIiA6IDk1MlxuLCBcImlvdGFcIiA6IDk1M1xuLCBcImthcHBhXCIgOiA5NTRcbiwgXCJsYW1iZGFcIiA6IDk1NVxuLCBcIm11XCIgOiA5NTZcbiwgXCJudVwiIDogOTU3XG4sIFwieGlcIiA6IDk1OFxuLCBcIm9taWNyb25cIiA6IDk1OVxuLCBcInBpXCIgOiA5NjBcbiwgXCJyaG9cIiA6IDk2MVxuLCBcInNpZ21hZlwiIDogOTYyXG4sIFwic2lnbWFcIiA6IDk2M1xuLCBcInRhdVwiIDogOTY0XG4sIFwidXBzaWxvblwiIDogOTY1XG4sIFwicGhpXCIgOiA5NjZcbiwgXCJjaGlcIiA6IDk2N1xuLCBcInBzaVwiIDogOTY4XG4sIFwib21lZ2FcIiA6IDk2OVxuLCBcInRoZXRhc3ltXCIgOiA5NzdcbiwgXCJ1cHNpaFwiIDogOTc4XG4sIFwicGl2XCIgOiA5ODJcbiwgXCJlbnNwXCIgOiA4MTk0XG4sIFwiZW1zcFwiIDogODE5NVxuLCBcInRoaW5zcFwiIDogODIwMVxuLCBcInp3bmpcIiA6IDgyMDRcbiwgXCJ6d2pcIiA6IDgyMDVcbiwgXCJscm1cIiA6IDgyMDZcbiwgXCJybG1cIiA6IDgyMDdcbiwgXCJuZGFzaFwiIDogODIxMVxuLCBcIm1kYXNoXCIgOiA4MjEyXG4sIFwibHNxdW9cIiA6IDgyMTZcbiwgXCJyc3F1b1wiIDogODIxN1xuLCBcInNicXVvXCIgOiA4MjE4XG4sIFwibGRxdW9cIiA6IDgyMjBcbiwgXCJyZHF1b1wiIDogODIyMVxuLCBcImJkcXVvXCIgOiA4MjIyXG4sIFwiZGFnZ2VyXCIgOiA4MjI0XG4sIFwiRGFnZ2VyXCIgOiA4MjI1XG4sIFwiYnVsbFwiIDogODIyNlxuLCBcImhlbGxpcFwiIDogODIzMFxuLCBcInBlcm1pbFwiIDogODI0MFxuLCBcInByaW1lXCIgOiA4MjQyXG4sIFwiUHJpbWVcIiA6IDgyNDNcbiwgXCJsc2FxdW9cIiA6IDgyNDlcbiwgXCJyc2FxdW9cIiA6IDgyNTBcbiwgXCJvbGluZVwiIDogODI1NFxuLCBcImZyYXNsXCIgOiA4MjYwXG4sIFwiZXVyb1wiIDogODM2NFxuLCBcImltYWdlXCIgOiA4NDY1XG4sIFwid2VpZXJwXCIgOiA4NDcyXG4sIFwicmVhbFwiIDogODQ3NlxuLCBcInRyYWRlXCIgOiA4NDgyXG4sIFwiYWxlZnN5bVwiIDogODUwMVxuLCBcImxhcnJcIiA6IDg1OTJcbiwgXCJ1YXJyXCIgOiA4NTkzXG4sIFwicmFyclwiIDogODU5NFxuLCBcImRhcnJcIiA6IDg1OTVcbiwgXCJoYXJyXCIgOiA4NTk2XG4sIFwiY3JhcnJcIiA6IDg2MjlcbiwgXCJsQXJyXCIgOiA4NjU2XG4sIFwidUFyclwiIDogODY1N1xuLCBcInJBcnJcIiA6IDg2NThcbiwgXCJkQXJyXCIgOiA4NjU5XG4sIFwiaEFyclwiIDogODY2MFxuLCBcImZvcmFsbFwiIDogODcwNFxuLCBcInBhcnRcIiA6IDg3MDZcbiwgXCJleGlzdFwiIDogODcwN1xuLCBcImVtcHR5XCIgOiA4NzA5XG4sIFwibmFibGFcIiA6IDg3MTFcbiwgXCJpc2luXCIgOiA4NzEyXG4sIFwibm90aW5cIiA6IDg3MTNcbiwgXCJuaVwiIDogODcxNVxuLCBcInByb2RcIiA6IDg3MTlcbiwgXCJzdW1cIiA6IDg3MjFcbiwgXCJtaW51c1wiIDogODcyMlxuLCBcImxvd2FzdFwiIDogODcyN1xuLCBcInJhZGljXCIgOiA4NzMwXG4sIFwicHJvcFwiIDogODczM1xuLCBcImluZmluXCIgOiA4NzM0XG4sIFwiYW5nXCIgOiA4NzM2XG4sIFwiYW5kXCIgOiA4NzQzXG4sIFwib3JcIiA6IDg3NDRcbiwgXCJjYXBcIiA6IDg3NDVcbiwgXCJjdXBcIiA6IDg3NDZcbiwgXCJpbnRcIiA6IDg3NDdcbiwgXCJ0aGVyZTRcIiA6IDg3NTZcbiwgXCJzaW1cIiA6IDg3NjRcbiwgXCJjb25nXCIgOiA4NzczXG4sIFwiYXN5bXBcIiA6IDg3NzZcbiwgXCJuZVwiIDogODgwMFxuLCBcImVxdWl2XCIgOiA4ODAxXG4sIFwibGVcIiA6IDg4MDRcbiwgXCJnZVwiIDogODgwNVxuLCBcInN1YlwiIDogODgzNFxuLCBcInN1cFwiIDogODgzNVxuLCBcIm5zdWJcIiA6IDg4MzZcbiwgXCJzdWJlXCIgOiA4ODM4XG4sIFwic3VwZVwiIDogODgzOVxuLCBcIm9wbHVzXCIgOiA4ODUzXG4sIFwib3RpbWVzXCIgOiA4ODU1XG4sIFwicGVycFwiIDogODg2OVxuLCBcInNkb3RcIiA6IDg5MDFcbiwgXCJsY2VpbFwiIDogODk2OFxuLCBcInJjZWlsXCIgOiA4OTY5XG4sIFwibGZsb29yXCIgOiA4OTcwXG4sIFwicmZsb29yXCIgOiA4OTcxXG4sIFwibGFuZ1wiIDogOTAwMVxuLCBcInJhbmdcIiA6IDkwMDJcbiwgXCJsb3pcIiA6IDk2NzRcbiwgXCJzcGFkZXNcIiA6IDk4MjRcbiwgXCJjbHVic1wiIDogOTgyN1xuLCBcImhlYXJ0c1wiIDogOTgyOVxuLCBcImRpYW1zXCIgOiA5ODMwXG59XG5cbk9iamVjdC5rZXlzKHNheC5FTlRJVElFUykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGUgPSBzYXguRU5USVRJRVNba2V5XVxuICAgIHZhciBzID0gdHlwZW9mIGUgPT09ICdudW1iZXInID8gU3RyaW5nLmZyb21DaGFyQ29kZShlKSA6IGVcbiAgICBzYXguRU5USVRJRVNba2V5XSA9IHNcbn0pXG5cbmZvciAodmFyIFMgaW4gc2F4LlNUQVRFKSBzYXguU1RBVEVbc2F4LlNUQVRFW1NdXSA9IFNcblxuLy8gc2hvcnRoYW5kXG5TID0gc2F4LlNUQVRFXG5cbmZ1bmN0aW9uIGVtaXQgKHBhcnNlciwgZXZlbnQsIGRhdGEpIHtcbiAgcGFyc2VyW2V2ZW50XSAmJiBwYXJzZXJbZXZlbnRdKGRhdGEpXG59XG5cbmZ1bmN0aW9uIGVtaXROb2RlIChwYXJzZXIsIG5vZGVUeXBlLCBkYXRhKSB7XG4gIGlmIChwYXJzZXIudGV4dE5vZGUpIGNsb3NlVGV4dChwYXJzZXIpXG4gIGVtaXQocGFyc2VyLCBub2RlVHlwZSwgZGF0YSlcbn1cblxuZnVuY3Rpb24gY2xvc2VUZXh0IChwYXJzZXIpIHtcbiAgcGFyc2VyLnRleHROb2RlID0gdGV4dG9wdHMocGFyc2VyLm9wdCwgcGFyc2VyLnRleHROb2RlKVxuICBpZiAocGFyc2VyLnRleHROb2RlKSBlbWl0KHBhcnNlciwgXCJvbnRleHRcIiwgcGFyc2VyLnRleHROb2RlKVxuICBwYXJzZXIudGV4dE5vZGUgPSBcIlwiXG59XG5cbmZ1bmN0aW9uIHRleHRvcHRzIChvcHQsIHRleHQpIHtcbiAgaWYgKG9wdC50cmltKSB0ZXh0ID0gdGV4dC50cmltKClcbiAgaWYgKG9wdC5ub3JtYWxpemUpIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xccysvZywgXCIgXCIpXG4gIHJldHVybiB0ZXh0XG59XG5cbmZ1bmN0aW9uIGVycm9yIChwYXJzZXIsIGVyKSB7XG4gIGNsb3NlVGV4dChwYXJzZXIpXG4gIGlmIChwYXJzZXIudHJhY2tQb3NpdGlvbikge1xuICAgIGVyICs9IFwiXFxuTGluZTogXCIrcGFyc2VyLmxpbmUrXG4gICAgICAgICAgXCJcXG5Db2x1bW46IFwiK3BhcnNlci5jb2x1bW4rXG4gICAgICAgICAgXCJcXG5DaGFyOiBcIitwYXJzZXIuY1xuICB9XG4gIGVyID0gbmV3IEVycm9yKGVyKVxuICBwYXJzZXIuZXJyb3IgPSBlclxuICBlbWl0KHBhcnNlciwgXCJvbmVycm9yXCIsIGVyKVxuICByZXR1cm4gcGFyc2VyXG59XG5cbmZ1bmN0aW9uIGVuZCAocGFyc2VyKSB7XG4gIGlmICghcGFyc2VyLmNsb3NlZFJvb3QpIHN0cmljdEZhaWwocGFyc2VyLCBcIlVuY2xvc2VkIHJvb3QgdGFnXCIpXG4gIGlmICgocGFyc2VyLnN0YXRlICE9PSBTLkJFR0lOKSAmJiAocGFyc2VyLnN0YXRlICE9PSBTLlRFWFQpKSBlcnJvcihwYXJzZXIsIFwiVW5leHBlY3RlZCBlbmRcIilcbiAgY2xvc2VUZXh0KHBhcnNlcilcbiAgcGFyc2VyLmMgPSBcIlwiXG4gIHBhcnNlci5jbG9zZWQgPSB0cnVlXG4gIGVtaXQocGFyc2VyLCBcIm9uZW5kXCIpXG4gIFNBWFBhcnNlci5jYWxsKHBhcnNlciwgcGFyc2VyLnN0cmljdCwgcGFyc2VyLm9wdClcbiAgcmV0dXJuIHBhcnNlclxufVxuXG5mdW5jdGlvbiBzdHJpY3RGYWlsIChwYXJzZXIsIG1lc3NhZ2UpIHtcbiAgaWYgKHR5cGVvZiBwYXJzZXIgIT09ICdvYmplY3QnIHx8ICEocGFyc2VyIGluc3RhbmNlb2YgU0FYUGFyc2VyKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBjYWxsIHRvIHN0cmljdEZhaWwnKTtcbiAgaWYgKHBhcnNlci5zdHJpY3QpIGVycm9yKHBhcnNlciwgbWVzc2FnZSlcbn1cblxuZnVuY3Rpb24gbmV3VGFnIChwYXJzZXIpIHtcbiAgaWYgKCFwYXJzZXIuc3RyaWN0KSBwYXJzZXIudGFnTmFtZSA9IHBhcnNlci50YWdOYW1lW3BhcnNlci5sb29zZUNhc2VdKClcbiAgdmFyIHBhcmVudCA9IHBhcnNlci50YWdzW3BhcnNlci50YWdzLmxlbmd0aCAtIDFdIHx8IHBhcnNlclxuICAgICwgdGFnID0gcGFyc2VyLnRhZyA9IHsgbmFtZSA6IHBhcnNlci50YWdOYW1lLCBhdHRyaWJ1dGVzIDoge30gfVxuXG4gIC8vIHdpbGwgYmUgb3ZlcnJpZGRlbiBpZiB0YWcgY29udGFpbHMgYW4geG1sbnM9XCJmb29cIiBvciB4bWxuczpmb289XCJiYXJcIlxuICBpZiAocGFyc2VyLm9wdC54bWxucykgdGFnLm5zID0gcGFyZW50Lm5zXG4gIHBhcnNlci5hdHRyaWJMaXN0Lmxlbmd0aCA9IDBcbn1cblxuZnVuY3Rpb24gcW5hbWUgKG5hbWUsIGF0dHJpYnV0ZSkge1xuICB2YXIgaSA9IG5hbWUuaW5kZXhPZihcIjpcIilcbiAgICAsIHF1YWxOYW1lID0gaSA8IDAgPyBbIFwiXCIsIG5hbWUgXSA6IG5hbWUuc3BsaXQoXCI6XCIpXG4gICAgLCBwcmVmaXggPSBxdWFsTmFtZVswXVxuICAgICwgbG9jYWwgPSBxdWFsTmFtZVsxXVxuXG4gIC8vIDx4IFwieG1sbnNcIj1cImh0dHA6Ly9mb29cIj5cbiAgaWYgKGF0dHJpYnV0ZSAmJiBuYW1lID09PSBcInhtbG5zXCIpIHtcbiAgICBwcmVmaXggPSBcInhtbG5zXCJcbiAgICBsb2NhbCA9IFwiXCJcbiAgfVxuXG4gIHJldHVybiB7IHByZWZpeDogcHJlZml4LCBsb2NhbDogbG9jYWwgfVxufVxuXG5mdW5jdGlvbiBhdHRyaWIgKHBhcnNlcikge1xuICBpZiAoIXBhcnNlci5zdHJpY3QpIHBhcnNlci5hdHRyaWJOYW1lID0gcGFyc2VyLmF0dHJpYk5hbWVbcGFyc2VyLmxvb3NlQ2FzZV0oKVxuXG4gIGlmIChwYXJzZXIuYXR0cmliTGlzdC5pbmRleE9mKHBhcnNlci5hdHRyaWJOYW1lKSAhPT0gLTEgfHxcbiAgICAgIHBhcnNlci50YWcuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShwYXJzZXIuYXR0cmliTmFtZSkpIHtcbiAgICByZXR1cm4gcGFyc2VyLmF0dHJpYk5hbWUgPSBwYXJzZXIuYXR0cmliVmFsdWUgPSBcIlwiXG4gIH1cblxuICBpZiAocGFyc2VyLm9wdC54bWxucykge1xuICAgIHZhciBxbiA9IHFuYW1lKHBhcnNlci5hdHRyaWJOYW1lLCB0cnVlKVxuICAgICAgLCBwcmVmaXggPSBxbi5wcmVmaXhcbiAgICAgICwgbG9jYWwgPSBxbi5sb2NhbFxuXG4gICAgaWYgKHByZWZpeCA9PT0gXCJ4bWxuc1wiKSB7XG4gICAgICAvLyBuYW1lc3BhY2UgYmluZGluZyBhdHRyaWJ1dGU7IHB1c2ggdGhlIGJpbmRpbmcgaW50byBzY29wZVxuICAgICAgaWYgKGxvY2FsID09PSBcInhtbFwiICYmIHBhcnNlci5hdHRyaWJWYWx1ZSAhPT0gWE1MX05BTUVTUEFDRSkge1xuICAgICAgICBzdHJpY3RGYWlsKCBwYXJzZXJcbiAgICAgICAgICAgICAgICAgICwgXCJ4bWw6IHByZWZpeCBtdXN0IGJlIGJvdW5kIHRvIFwiICsgWE1MX05BTUVTUEFDRSArIFwiXFxuXCJcbiAgICAgICAgICAgICAgICAgICsgXCJBY3R1YWw6IFwiICsgcGFyc2VyLmF0dHJpYlZhbHVlIClcbiAgICAgIH0gZWxzZSBpZiAobG9jYWwgPT09IFwieG1sbnNcIiAmJiBwYXJzZXIuYXR0cmliVmFsdWUgIT09IFhNTE5TX05BTUVTUEFDRSkge1xuICAgICAgICBzdHJpY3RGYWlsKCBwYXJzZXJcbiAgICAgICAgICAgICAgICAgICwgXCJ4bWxuczogcHJlZml4IG11c3QgYmUgYm91bmQgdG8gXCIgKyBYTUxOU19OQU1FU1BBQ0UgKyBcIlxcblwiXG4gICAgICAgICAgICAgICAgICArIFwiQWN0dWFsOiBcIiArIHBhcnNlci5hdHRyaWJWYWx1ZSApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGFnID0gcGFyc2VyLnRhZ1xuICAgICAgICAgICwgcGFyZW50ID0gcGFyc2VyLnRhZ3NbcGFyc2VyLnRhZ3MubGVuZ3RoIC0gMV0gfHwgcGFyc2VyXG4gICAgICAgIGlmICh0YWcubnMgPT09IHBhcmVudC5ucykge1xuICAgICAgICAgIHRhZy5ucyA9IE9iamVjdC5jcmVhdGUocGFyZW50Lm5zKVxuICAgICAgICB9XG4gICAgICAgIHRhZy5uc1tsb2NhbF0gPSBwYXJzZXIuYXR0cmliVmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWZlciBvbmF0dHJpYnV0ZSBldmVudHMgdW50aWwgYWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHNlZW5cbiAgICAvLyBzbyBhbnkgbmV3IGJpbmRpbmdzIGNhbiB0YWtlIGVmZmVjdDsgcHJlc2VydmUgYXR0cmlidXRlIG9yZGVyXG4gICAgLy8gc28gZGVmZXJyZWQgZXZlbnRzIGNhbiBiZSBlbWl0dGVkIGluIGRvY3VtZW50IG9yZGVyXG4gICAgcGFyc2VyLmF0dHJpYkxpc3QucHVzaChbcGFyc2VyLmF0dHJpYk5hbWUsIHBhcnNlci5hdHRyaWJWYWx1ZV0pXG4gIH0gZWxzZSB7XG4gICAgLy8gaW4gbm9uLXhtbG5zIG1vZGUsIHdlIGNhbiBlbWl0IHRoZSBldmVudCByaWdodCBhd2F5XG4gICAgcGFyc2VyLnRhZy5hdHRyaWJ1dGVzW3BhcnNlci5hdHRyaWJOYW1lXSA9IHBhcnNlci5hdHRyaWJWYWx1ZVxuICAgIGVtaXROb2RlKCBwYXJzZXJcbiAgICAgICAgICAgICwgXCJvbmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAsIHsgbmFtZTogcGFyc2VyLmF0dHJpYk5hbWVcbiAgICAgICAgICAgICAgLCB2YWx1ZTogcGFyc2VyLmF0dHJpYlZhbHVlIH0gKVxuICB9XG5cbiAgcGFyc2VyLmF0dHJpYk5hbWUgPSBwYXJzZXIuYXR0cmliVmFsdWUgPSBcIlwiXG59XG5cbmZ1bmN0aW9uIG9wZW5UYWcgKHBhcnNlciwgc2VsZkNsb3NpbmcpIHtcbiAgaWYgKHBhcnNlci5vcHQueG1sbnMpIHtcbiAgICAvLyBlbWl0IG5hbWVzcGFjZSBiaW5kaW5nIGV2ZW50c1xuICAgIHZhciB0YWcgPSBwYXJzZXIudGFnXG5cbiAgICAvLyBhZGQgbmFtZXNwYWNlIGluZm8gdG8gdGFnXG4gICAgdmFyIHFuID0gcW5hbWUocGFyc2VyLnRhZ05hbWUpXG4gICAgdGFnLnByZWZpeCA9IHFuLnByZWZpeFxuICAgIHRhZy5sb2NhbCA9IHFuLmxvY2FsXG4gICAgdGFnLnVyaSA9IHRhZy5uc1txbi5wcmVmaXhdIHx8IFwiXCJcblxuICAgIGlmICh0YWcucHJlZml4ICYmICF0YWcudXJpKSB7XG4gICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJVbmJvdW5kIG5hbWVzcGFjZSBwcmVmaXg6IFwiXG4gICAgICAgICAgICAgICAgICAgICAgICsgSlNPTi5zdHJpbmdpZnkocGFyc2VyLnRhZ05hbWUpKVxuICAgICAgdGFnLnVyaSA9IHFuLnByZWZpeFxuICAgIH1cblxuICAgIHZhciBwYXJlbnQgPSBwYXJzZXIudGFnc1twYXJzZXIudGFncy5sZW5ndGggLSAxXSB8fCBwYXJzZXJcbiAgICBpZiAodGFnLm5zICYmIHBhcmVudC5ucyAhPT0gdGFnLm5zKSB7XG4gICAgICBPYmplY3Qua2V5cyh0YWcubnMpLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgZW1pdE5vZGUoIHBhcnNlclxuICAgICAgICAgICAgICAgICwgXCJvbm9wZW5uYW1lc3BhY2VcIlxuICAgICAgICAgICAgICAgICwgeyBwcmVmaXg6IHAgLCB1cmk6IHRhZy5uc1twXSB9IClcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIGRlZmVycmVkIG9uYXR0cmlidXRlIGV2ZW50c1xuICAgIC8vIE5vdGU6IGRvIG5vdCBhcHBseSBkZWZhdWx0IG5zIHRvIGF0dHJpYnV0ZXM6XG4gICAgLy8gICBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLyNkZWZhdWx0aW5nXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJzZXIuYXR0cmliTGlzdC5sZW5ndGg7IGkgPCBsOyBpICsrKSB7XG4gICAgICB2YXIgbnYgPSBwYXJzZXIuYXR0cmliTGlzdFtpXVxuICAgICAgdmFyIG5hbWUgPSBudlswXVxuICAgICAgICAsIHZhbHVlID0gbnZbMV1cbiAgICAgICAgLCBxdWFsTmFtZSA9IHFuYW1lKG5hbWUsIHRydWUpXG4gICAgICAgICwgcHJlZml4ID0gcXVhbE5hbWUucHJlZml4XG4gICAgICAgICwgbG9jYWwgPSBxdWFsTmFtZS5sb2NhbFxuICAgICAgICAsIHVyaSA9IHByZWZpeCA9PSBcIlwiID8gXCJcIiA6ICh0YWcubnNbcHJlZml4XSB8fCBcIlwiKVxuICAgICAgICAsIGEgPSB7IG5hbWU6IG5hbWVcbiAgICAgICAgICAgICAgLCB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgLCBwcmVmaXg6IHByZWZpeFxuICAgICAgICAgICAgICAsIGxvY2FsOiBsb2NhbFxuICAgICAgICAgICAgICAsIHVyaTogdXJpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlcmUncyBhbnkgYXR0cmlidXRlcyB3aXRoIGFuIHVuZGVmaW5lZCBuYW1lc3BhY2UsXG4gICAgICAvLyB0aGVuIGZhaWwgb24gdGhlbSBub3cuXG4gICAgICBpZiAocHJlZml4ICYmIHByZWZpeCAhPSBcInhtbG5zXCIgJiYgIXVyaSkge1xuICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJVbmJvdW5kIG5hbWVzcGFjZSBwcmVmaXg6IFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKyBKU09OLnN0cmluZ2lmeShwcmVmaXgpKVxuICAgICAgICBhLnVyaSA9IHByZWZpeFxuICAgICAgfVxuICAgICAgcGFyc2VyLnRhZy5hdHRyaWJ1dGVzW25hbWVdID0gYVxuICAgICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uYXR0cmlidXRlXCIsIGEpXG4gICAgfVxuICAgIHBhcnNlci5hdHRyaWJMaXN0Lmxlbmd0aCA9IDBcbiAgfVxuXG4gIHBhcnNlci50YWcuaXNTZWxmQ2xvc2luZyA9ICEhc2VsZkNsb3NpbmdcblxuICAvLyBwcm9jZXNzIHRoZSB0YWdcbiAgcGFyc2VyLnNhd1Jvb3QgPSB0cnVlXG4gIHBhcnNlci50YWdzLnB1c2gocGFyc2VyLnRhZylcbiAgZW1pdE5vZGUocGFyc2VyLCBcIm9ub3BlbnRhZ1wiLCBwYXJzZXIudGFnKVxuICBpZiAoIXNlbGZDbG9zaW5nKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIGZvciA8c2NyaXB0PiBpbiBub24tc3RyaWN0IG1vZGUuXG4gICAgaWYgKCFwYXJzZXIubm9zY3JpcHQgJiYgcGFyc2VyLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJzY3JpcHRcIikge1xuICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgfVxuICAgIHBhcnNlci50YWcgPSBudWxsXG4gICAgcGFyc2VyLnRhZ05hbWUgPSBcIlwiXG4gIH1cbiAgcGFyc2VyLmF0dHJpYk5hbWUgPSBwYXJzZXIuYXR0cmliVmFsdWUgPSBcIlwiXG4gIHBhcnNlci5hdHRyaWJMaXN0Lmxlbmd0aCA9IDBcbn1cblxuZnVuY3Rpb24gY2xvc2VUYWcgKHBhcnNlcikge1xuICBpZiAoIXBhcnNlci50YWdOYW1lKSB7XG4gICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiV2VpcmQgZW1wdHkgY2xvc2UgdGFnLlwiKVxuICAgIHBhcnNlci50ZXh0Tm9kZSArPSBcIjwvPlwiXG4gICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAocGFyc2VyLnNjcmlwdCkge1xuICAgIGlmIChwYXJzZXIudGFnTmFtZSAhPT0gXCJzY3JpcHRcIikge1xuICAgICAgcGFyc2VyLnNjcmlwdCArPSBcIjwvXCIgKyBwYXJzZXIudGFnTmFtZSArIFwiPlwiXG4gICAgICBwYXJzZXIudGFnTmFtZSA9IFwiXCJcbiAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0NSSVBUXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uc2NyaXB0XCIsIHBhcnNlci5zY3JpcHQpXG4gICAgcGFyc2VyLnNjcmlwdCA9IFwiXCJcbiAgfVxuXG4gIC8vIGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBjbG9zaW5nIHRhZyBhY3R1YWxseSBleGlzdHMuXG4gIC8vIDxhPjxiPjwvYz48L2I+PC9hPiB3aWxsIGNsb3NlIGV2ZXJ5dGhpbmcsIG90aGVyd2lzZS5cbiAgdmFyIHQgPSBwYXJzZXIudGFncy5sZW5ndGhcbiAgdmFyIHRhZ05hbWUgPSBwYXJzZXIudGFnTmFtZVxuICBpZiAoIXBhcnNlci5zdHJpY3QpIHRhZ05hbWUgPSB0YWdOYW1lW3BhcnNlci5sb29zZUNhc2VdKClcbiAgdmFyIGNsb3NlVG8gPSB0YWdOYW1lXG4gIHdoaWxlICh0IC0tKSB7XG4gICAgdmFyIGNsb3NlID0gcGFyc2VyLnRhZ3NbdF1cbiAgICBpZiAoY2xvc2UubmFtZSAhPT0gY2xvc2VUbykge1xuICAgICAgLy8gZmFpbCB0aGUgZmlyc3QgdGltZSBpbiBzdHJpY3QgbW9kZVxuICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiVW5leHBlY3RlZCBjbG9zZSB0YWdcIilcbiAgICB9IGVsc2UgYnJlYWtcbiAgfVxuXG4gIC8vIGRpZG4ndCBmaW5kIGl0LiAgd2UgYWxyZWFkeSBmYWlsZWQgZm9yIHN0cmljdCwgc28ganVzdCBhYm9ydC5cbiAgaWYgKHQgPCAwKSB7XG4gICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiVW5tYXRjaGVkIGNsb3NpbmcgdGFnOiBcIitwYXJzZXIudGFnTmFtZSlcbiAgICBwYXJzZXIudGV4dE5vZGUgKz0gXCI8L1wiICsgcGFyc2VyLnRhZ05hbWUgKyBcIj5cIlxuICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgIHJldHVyblxuICB9XG4gIHBhcnNlci50YWdOYW1lID0gdGFnTmFtZVxuICB2YXIgcyA9IHBhcnNlci50YWdzLmxlbmd0aFxuICB3aGlsZSAocyAtLT4gdCkge1xuICAgIHZhciB0YWcgPSBwYXJzZXIudGFnID0gcGFyc2VyLnRhZ3MucG9wKClcbiAgICBwYXJzZXIudGFnTmFtZSA9IHBhcnNlci50YWcubmFtZVxuICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbmNsb3NldGFnXCIsIHBhcnNlci50YWdOYW1lKVxuXG4gICAgdmFyIHggPSB7fVxuICAgIGZvciAodmFyIGkgaW4gdGFnLm5zKSB4W2ldID0gdGFnLm5zW2ldXG5cbiAgICB2YXIgcGFyZW50ID0gcGFyc2VyLnRhZ3NbcGFyc2VyLnRhZ3MubGVuZ3RoIC0gMV0gfHwgcGFyc2VyXG4gICAgaWYgKHBhcnNlci5vcHQueG1sbnMgJiYgdGFnLm5zICE9PSBwYXJlbnQubnMpIHtcbiAgICAgIC8vIHJlbW92ZSBuYW1lc3BhY2UgYmluZGluZ3MgaW50cm9kdWNlZCBieSB0YWdcbiAgICAgIE9iamVjdC5rZXlzKHRhZy5ucykuZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICAgICAgICB2YXIgbiA9IHRhZy5uc1twXVxuICAgICAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25jbG9zZW5hbWVzcGFjZVwiLCB7IHByZWZpeDogcCwgdXJpOiBuIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuICBpZiAodCA9PT0gMCkgcGFyc2VyLmNsb3NlZFJvb3QgPSB0cnVlXG4gIHBhcnNlci50YWdOYW1lID0gcGFyc2VyLmF0dHJpYlZhbHVlID0gcGFyc2VyLmF0dHJpYk5hbWUgPSBcIlwiXG4gIHBhcnNlci5hdHRyaWJMaXN0Lmxlbmd0aCA9IDBcbiAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG59XG5cbmZ1bmN0aW9uIHBhcnNlRW50aXR5IChwYXJzZXIpIHtcbiAgdmFyIGVudGl0eSA9IHBhcnNlci5lbnRpdHlcbiAgICAsIGVudGl0eUxDID0gZW50aXR5LnRvTG93ZXJDYXNlKClcbiAgICAsIG51bVxuICAgICwgbnVtU3RyID0gXCJcIlxuICBpZiAocGFyc2VyLkVOVElUSUVTW2VudGl0eV0pXG4gICAgcmV0dXJuIHBhcnNlci5FTlRJVElFU1tlbnRpdHldXG4gIGlmIChwYXJzZXIuRU5USVRJRVNbZW50aXR5TENdKVxuICAgIHJldHVybiBwYXJzZXIuRU5USVRJRVNbZW50aXR5TENdXG4gIGVudGl0eSA9IGVudGl0eUxDXG4gIGlmIChlbnRpdHkuY2hhckF0KDApID09PSBcIiNcIikge1xuICAgIGlmIChlbnRpdHkuY2hhckF0KDEpID09PSBcInhcIikge1xuICAgICAgZW50aXR5ID0gZW50aXR5LnNsaWNlKDIpXG4gICAgICBudW0gPSBwYXJzZUludChlbnRpdHksIDE2KVxuICAgICAgbnVtU3RyID0gbnVtLnRvU3RyaW5nKDE2KVxuICAgIH0gZWxzZSB7XG4gICAgICBlbnRpdHkgPSBlbnRpdHkuc2xpY2UoMSlcbiAgICAgIG51bSA9IHBhcnNlSW50KGVudGl0eSwgMTApXG4gICAgICBudW1TdHIgPSBudW0udG9TdHJpbmcoMTApXG4gICAgfVxuICB9XG4gIGVudGl0eSA9IGVudGl0eS5yZXBsYWNlKC9eMCsvLCBcIlwiKVxuICBpZiAobnVtU3RyLnRvTG93ZXJDYXNlKCkgIT09IGVudGl0eSkge1xuICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIkludmFsaWQgY2hhcmFjdGVyIGVudGl0eVwiKVxuICAgIHJldHVybiBcIiZcIitwYXJzZXIuZW50aXR5ICsgXCI7XCJcbiAgfVxuXG4gIHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChudW0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChjaHVuaykge1xuICB2YXIgcGFyc2VyID0gdGhpc1xuICBpZiAodGhpcy5lcnJvcikgdGhyb3cgdGhpcy5lcnJvclxuICBpZiAocGFyc2VyLmNsb3NlZCkgcmV0dXJuIGVycm9yKHBhcnNlcixcbiAgICBcIkNhbm5vdCB3cml0ZSBhZnRlciBjbG9zZS4gQXNzaWduIGFuIG9ucmVhZHkgaGFuZGxlci5cIilcbiAgaWYgKGNodW5rID09PSBudWxsKSByZXR1cm4gZW5kKHBhcnNlcilcbiAgdmFyIGkgPSAwLCBjID0gXCJcIlxuICB3aGlsZSAocGFyc2VyLmMgPSBjID0gY2h1bmsuY2hhckF0KGkrKykpIHtcbiAgICBpZiAocGFyc2VyLnRyYWNrUG9zaXRpb24pIHtcbiAgICAgIHBhcnNlci5wb3NpdGlvbiArK1xuICAgICAgaWYgKGMgPT09IFwiXFxuXCIpIHtcbiAgICAgICAgcGFyc2VyLmxpbmUgKytcbiAgICAgICAgcGFyc2VyLmNvbHVtbiA9IDBcbiAgICAgIH0gZWxzZSBwYXJzZXIuY29sdW1uICsrXG4gICAgfVxuICAgIHN3aXRjaCAocGFyc2VyLnN0YXRlKSB7XG5cbiAgICAgIGNhc2UgUy5CRUdJTjpcbiAgICAgICAgaWYgKGMgPT09IFwiPFwiKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1dBS0FcbiAgICAgICAgICBwYXJzZXIuc3RhcnRUYWdQb3NpdGlvbiA9IHBhcnNlci5wb3NpdGlvblxuICAgICAgICB9IGVsc2UgaWYgKG5vdCh3aGl0ZXNwYWNlLGMpKSB7XG4gICAgICAgICAgLy8gaGF2ZSB0byBwcm9jZXNzIHRoaXMgYXMgYSB0ZXh0IG5vZGUuXG4gICAgICAgICAgLy8gd2VpcmQsIGJ1dCBoYXBwZW5zLlxuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIk5vbi13aGl0ZXNwYWNlIGJlZm9yZSBmaXJzdCB0YWcuXCIpXG4gICAgICAgICAgcGFyc2VyLnRleHROb2RlID0gY1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuVEVYVDpcbiAgICAgICAgaWYgKHBhcnNlci5zYXdSb290ICYmICFwYXJzZXIuY2xvc2VkUm9vdCkge1xuICAgICAgICAgIHZhciBzdGFydGkgPSBpLTFcbiAgICAgICAgICB3aGlsZSAoYyAmJiBjIT09XCI8XCIgJiYgYyE9PVwiJlwiKSB7XG4gICAgICAgICAgICBjID0gY2h1bmsuY2hhckF0KGkrKylcbiAgICAgICAgICAgIGlmIChjICYmIHBhcnNlci50cmFja1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgIHBhcnNlci5wb3NpdGlvbiArK1xuICAgICAgICAgICAgICBpZiAoYyA9PT0gXCJcXG5cIikge1xuICAgICAgICAgICAgICAgIHBhcnNlci5saW5lICsrXG4gICAgICAgICAgICAgICAgcGFyc2VyLmNvbHVtbiA9IDBcbiAgICAgICAgICAgICAgfSBlbHNlIHBhcnNlci5jb2x1bW4gKytcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyc2VyLnRleHROb2RlICs9IGNodW5rLnN1YnN0cmluZyhzdGFydGksIGktMSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gXCI8XCIpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fV0FLQVxuICAgICAgICAgIHBhcnNlci5zdGFydFRhZ1Bvc2l0aW9uID0gcGFyc2VyLnBvc2l0aW9uXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG5vdCh3aGl0ZXNwYWNlLCBjKSAmJiAoIXBhcnNlci5zYXdSb290IHx8IHBhcnNlci5jbG9zZWRSb290KSlcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIlRleHQgZGF0YSBvdXRzaWRlIG9mIHJvb3Qgbm9kZS5cIilcbiAgICAgICAgICBpZiAoYyA9PT0gXCImXCIpIHBhcnNlci5zdGF0ZSA9IFMuVEVYVF9FTlRJVFlcbiAgICAgICAgICBlbHNlIHBhcnNlci50ZXh0Tm9kZSArPSBjXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5TQ1JJUFQ6XG4gICAgICAgIC8vIG9ubHkgbm9uLXN0cmljdFxuICAgICAgICBpZiAoYyA9PT0gXCI8XCIpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNDUklQVF9FTkRJTkdcbiAgICAgICAgfSBlbHNlIHBhcnNlci5zY3JpcHQgKz0gY1xuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLlNDUklQVF9FTkRJTkc6XG4gICAgICAgIGlmIChjID09PSBcIi9cIikge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0xPU0VfVEFHXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VyLnNjcmlwdCArPSBcIjxcIiArIGNcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNDUklQVFxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuT1BFTl9XQUtBOlxuICAgICAgICAvLyBlaXRoZXIgYSAvLCA/LCAhLCBvciB0ZXh0IGlzIGNvbWluZyBuZXh0LlxuICAgICAgICBpZiAoYyA9PT0gXCIhXCIpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNHTUxfREVDTFxuICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCA9IFwiXCJcbiAgICAgICAgfSBlbHNlIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgIC8vIHdhaXQgZm9yIGl0Li4uXG4gICAgICAgIH0gZWxzZSBpZiAoaXMobmFtZVN0YXJ0LGMpKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1RBR1xuICAgICAgICAgIHBhcnNlci50YWdOYW1lID0gY1xuICAgICAgICB9IGVsc2UgaWYgKGMgPT09IFwiL1wiKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DTE9TRV9UQUdcbiAgICAgICAgICBwYXJzZXIudGFnTmFtZSA9IFwiXCJcbiAgICAgICAgfSBlbHNlIGlmIChjID09PSBcIj9cIikge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuUFJPQ19JTlNUXG4gICAgICAgICAgcGFyc2VyLnByb2NJbnN0TmFtZSA9IHBhcnNlci5wcm9jSW5zdEJvZHkgPSBcIlwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiVW5lbmNvZGVkIDxcIilcbiAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgc29tZSB3aGl0ZXNwYWNlLCB0aGVuIGFkZCB0aGF0IGluLlxuICAgICAgICAgIGlmIChwYXJzZXIuc3RhcnRUYWdQb3NpdGlvbiArIDEgPCBwYXJzZXIucG9zaXRpb24pIHtcbiAgICAgICAgICAgIHZhciBwYWQgPSBwYXJzZXIucG9zaXRpb24gLSBwYXJzZXIuc3RhcnRUYWdQb3NpdGlvblxuICAgICAgICAgICAgYyA9IG5ldyBBcnJheShwYWQpLmpvaW4oXCIgXCIpICsgY1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJzZXIudGV4dE5vZGUgKz0gXCI8XCIgKyBjXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5TR01MX0RFQ0w6XG4gICAgICAgIGlmICgocGFyc2VyLnNnbWxEZWNsK2MpLnRvVXBwZXJDYXNlKCkgPT09IENEQVRBKSB7XG4gICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCBcIm9ub3BlbmNkYXRhXCIpXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DREFUQVxuICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuY2RhdGEgPSBcIlwiXG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VyLnNnbWxEZWNsK2MgPT09IFwiLS1cIikge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVFxuICAgICAgICAgIHBhcnNlci5jb21tZW50ID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCA9IFwiXCJcbiAgICAgICAgfSBlbHNlIGlmICgocGFyc2VyLnNnbWxEZWNsK2MpLnRvVXBwZXJDYXNlKCkgPT09IERPQ1RZUEUpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVcbiAgICAgICAgICBpZiAocGFyc2VyLmRvY3R5cGUgfHwgcGFyc2VyLnNhd1Jvb3QpIHN0cmljdEZhaWwocGFyc2VyLFxuICAgICAgICAgICAgXCJJbmFwcHJvcHJpYXRlbHkgbG9jYXRlZCBkb2N0eXBlIGRlY2xhcmF0aW9uXCIpXG4gICAgICAgICAgcGFyc2VyLmRvY3R5cGUgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLnNnbWxEZWNsID0gXCJcIlxuICAgICAgICB9IGVsc2UgaWYgKGMgPT09IFwiPlwiKSB7XG4gICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uc2dtbGRlY2xhcmF0aW9uXCIsIHBhcnNlci5zZ21sRGVjbClcbiAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgIH0gZWxzZSBpZiAoaXMocXVvdGUsIGMpKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TR01MX0RFQ0xfUVVPVEVEXG4gICAgICAgICAgcGFyc2VyLnNnbWxEZWNsICs9IGNcbiAgICAgICAgfSBlbHNlIHBhcnNlci5zZ21sRGVjbCArPSBjXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuU0dNTF9ERUNMX1FVT1RFRDpcbiAgICAgICAgaWYgKGMgPT09IHBhcnNlci5xKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TR01MX0RFQ0xcbiAgICAgICAgICBwYXJzZXIucSA9IFwiXCJcbiAgICAgICAgfVxuICAgICAgICBwYXJzZXIuc2dtbERlY2wgKz0gY1xuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkRPQ1RZUEU6XG4gICAgICAgIGlmIChjID09PSBcIj5cIikge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbmRvY3R5cGVcIiwgcGFyc2VyLmRvY3R5cGUpXG4gICAgICAgICAgcGFyc2VyLmRvY3R5cGUgPSB0cnVlIC8vIGp1c3QgcmVtZW1iZXIgdGhhdCB3ZSBzYXcgaXQuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VyLmRvY3R5cGUgKz0gY1xuICAgICAgICAgIGlmIChjID09PSBcIltcIikgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFX0RURFxuICAgICAgICAgIGVsc2UgaWYgKGlzKHF1b3RlLCBjKSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFX1FVT1RFRFxuICAgICAgICAgICAgcGFyc2VyLnEgPSBjXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuRE9DVFlQRV9RVU9URUQ6XG4gICAgICAgIHBhcnNlci5kb2N0eXBlICs9IGNcbiAgICAgICAgaWYgKGMgPT09IHBhcnNlci5xKSB7XG4gICAgICAgICAgcGFyc2VyLnEgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5ET0NUWVBFX0RURDpcbiAgICAgICAgcGFyc2VyLmRvY3R5cGUgKz0gY1xuICAgICAgICBpZiAoYyA9PT0gXCJdXCIpIHBhcnNlci5zdGF0ZSA9IFMuRE9DVFlQRVxuICAgICAgICBlbHNlIGlmIChpcyhxdW90ZSxjKSkge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuRE9DVFlQRV9EVERfUVVPVEVEXG4gICAgICAgICAgcGFyc2VyLnEgPSBjXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5ET0NUWVBFX0RURF9RVU9URUQ6XG4gICAgICAgIHBhcnNlci5kb2N0eXBlICs9IGNcbiAgICAgICAgaWYgKGMgPT09IHBhcnNlci5xKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFX0RURFxuICAgICAgICAgIHBhcnNlci5xID0gXCJcIlxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQ09NTUVOVDpcbiAgICAgICAgaWYgKGMgPT09IFwiLVwiKSBwYXJzZXIuc3RhdGUgPSBTLkNPTU1FTlRfRU5ESU5HXG4gICAgICAgIGVsc2UgcGFyc2VyLmNvbW1lbnQgKz0gY1xuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkNPTU1FTlRfRU5ESU5HOlxuICAgICAgICBpZiAoYyA9PT0gXCItXCIpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNPTU1FTlRfRU5ERURcbiAgICAgICAgICBwYXJzZXIuY29tbWVudCA9IHRleHRvcHRzKHBhcnNlci5vcHQsIHBhcnNlci5jb21tZW50KVxuICAgICAgICAgIGlmIChwYXJzZXIuY29tbWVudCkgZW1pdE5vZGUocGFyc2VyLCBcIm9uY29tbWVudFwiLCBwYXJzZXIuY29tbWVudClcbiAgICAgICAgICBwYXJzZXIuY29tbWVudCA9IFwiXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZXIuY29tbWVudCArPSBcIi1cIiArIGNcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNPTU1FTlRcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkNPTU1FTlRfRU5ERUQ6XG4gICAgICAgIGlmIChjICE9PSBcIj5cIikge1xuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIk1hbGZvcm1lZCBjb21tZW50XCIpXG4gICAgICAgICAgLy8gYWxsb3cgPCEtLSBibGFoIC0tIGJsb28gLS0+IGluIG5vbi1zdHJpY3QgbW9kZSxcbiAgICAgICAgICAvLyB3aGljaCBpcyBhIGNvbW1lbnQgb2YgXCIgYmxhaCAtLSBibG9vIFwiXG4gICAgICAgICAgcGFyc2VyLmNvbW1lbnQgKz0gXCItLVwiICsgY1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVFxuICAgICAgICB9IGVsc2UgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQ0RBVEE6XG4gICAgICAgIGlmIChjID09PSBcIl1cIikgcGFyc2VyLnN0YXRlID0gUy5DREFUQV9FTkRJTkdcbiAgICAgICAgZWxzZSBwYXJzZXIuY2RhdGEgKz0gY1xuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkNEQVRBX0VORElORzpcbiAgICAgICAgaWYgKGMgPT09IFwiXVwiKSBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBX0VORElOR18yXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHBhcnNlci5jZGF0YSArPSBcIl1cIiArIGNcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5DREFUQV9FTkRJTkdfMjpcbiAgICAgICAgaWYgKGMgPT09IFwiPlwiKSB7XG4gICAgICAgICAgaWYgKHBhcnNlci5jZGF0YSkgZW1pdE5vZGUocGFyc2VyLCBcIm9uY2RhdGFcIiwgcGFyc2VyLmNkYXRhKVxuICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbmNsb3NlY2RhdGFcIilcbiAgICAgICAgICBwYXJzZXIuY2RhdGEgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gXCJdXCIpIHtcbiAgICAgICAgICBwYXJzZXIuY2RhdGEgKz0gXCJdXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZXIuY2RhdGEgKz0gXCJdXVwiICsgY1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0RBVEFcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLlBST0NfSU5TVDpcbiAgICAgICAgaWYgKGMgPT09IFwiP1wiKSBwYXJzZXIuc3RhdGUgPSBTLlBST0NfSU5TVF9FTkRJTkdcbiAgICAgICAgZWxzZSBpZiAoaXMod2hpdGVzcGFjZSwgYykpIHBhcnNlci5zdGF0ZSA9IFMuUFJPQ19JTlNUX0JPRFlcbiAgICAgICAgZWxzZSBwYXJzZXIucHJvY0luc3ROYW1lICs9IGNcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5QUk9DX0lOU1RfQk9EWTpcbiAgICAgICAgaWYgKCFwYXJzZXIucHJvY0luc3RCb2R5ICYmIGlzKHdoaXRlc3BhY2UsIGMpKSBjb250aW51ZVxuICAgICAgICBlbHNlIGlmIChjID09PSBcIj9cIikgcGFyc2VyLnN0YXRlID0gUy5QUk9DX0lOU1RfRU5ESU5HXG4gICAgICAgIGVsc2UgcGFyc2VyLnByb2NJbnN0Qm9keSArPSBjXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuUFJPQ19JTlNUX0VORElORzpcbiAgICAgICAgaWYgKGMgPT09IFwiPlwiKSB7XG4gICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCBcIm9ucHJvY2Vzc2luZ2luc3RydWN0aW9uXCIsIHtcbiAgICAgICAgICAgIG5hbWUgOiBwYXJzZXIucHJvY0luc3ROYW1lLFxuICAgICAgICAgICAgYm9keSA6IHBhcnNlci5wcm9jSW5zdEJvZHlcbiAgICAgICAgICB9KVxuICAgICAgICAgIHBhcnNlci5wcm9jSW5zdE5hbWUgPSBwYXJzZXIucHJvY0luc3RCb2R5ID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlci5wcm9jSW5zdEJvZHkgKz0gXCI/XCIgKyBjXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5QUk9DX0lOU1RfQk9EWVxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuT1BFTl9UQUc6XG4gICAgICAgIGlmIChpcyhuYW1lQm9keSwgYykpIHBhcnNlci50YWdOYW1lICs9IGNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbmV3VGFnKHBhcnNlcilcbiAgICAgICAgICBpZiAoYyA9PT0gXCI+XCIpIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICAgIGVsc2UgaWYgKGMgPT09IFwiL1wiKSBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fVEFHX1NMQVNIXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAobm90KHdoaXRlc3BhY2UsIGMpKSBzdHJpY3RGYWlsKFxuICAgICAgICAgICAgICBwYXJzZXIsIFwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gdGFnIG5hbWVcIilcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuT1BFTl9UQUdfU0xBU0g6XG4gICAgICAgIGlmIChjID09PSBcIj5cIikge1xuICAgICAgICAgIG9wZW5UYWcocGFyc2VyLCB0cnVlKVxuICAgICAgICAgIGNsb3NlVGFnKHBhcnNlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJGb3J3YXJkLXNsYXNoIGluIG9wZW5pbmcgdGFnIG5vdCBmb2xsb3dlZCBieSA+XCIpXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkFUVFJJQjpcbiAgICAgICAgLy8gaGF2ZW4ndCByZWFkIHRoZSBhdHRyaWJ1dGUgbmFtZSB5ZXQuXG4gICAgICAgIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkgY29udGludWVcbiAgICAgICAgZWxzZSBpZiAoYyA9PT0gXCI+XCIpIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICBlbHNlIGlmIChjID09PSBcIi9cIikgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1RBR19TTEFTSFxuICAgICAgICBlbHNlIGlmIChpcyhuYW1lU3RhcnQsIGMpKSB7XG4gICAgICAgICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBjXG4gICAgICAgICAgcGFyc2VyLmF0dHJpYlZhbHVlID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX05BTUVcbiAgICAgICAgfSBlbHNlIHN0cmljdEZhaWwocGFyc2VyLCBcIkludmFsaWQgYXR0cmlidXRlIG5hbWVcIilcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5BVFRSSUJfTkFNRTpcbiAgICAgICAgaWYgKGMgPT09IFwiPVwiKSBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRVxuICAgICAgICBlbHNlIGlmIChjID09PSBcIj5cIikge1xuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIkF0dHJpYnV0ZSB3aXRob3V0IHZhbHVlXCIpXG4gICAgICAgICAgcGFyc2VyLmF0dHJpYlZhbHVlID0gcGFyc2VyLmF0dHJpYk5hbWVcbiAgICAgICAgICBhdHRyaWIocGFyc2VyKVxuICAgICAgICAgIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9OQU1FX1NBV19XSElURVxuICAgICAgICBlbHNlIGlmIChpcyhuYW1lQm9keSwgYykpIHBhcnNlci5hdHRyaWJOYW1lICs9IGNcbiAgICAgICAgZWxzZSBzdHJpY3RGYWlsKHBhcnNlciwgXCJJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lXCIpXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQVRUUklCX05BTUVfU0FXX1dISVRFOlxuICAgICAgICBpZiAoYyA9PT0gXCI9XCIpIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFXG4gICAgICAgIGVsc2UgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSBjb250aW51ZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJBdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZVwiKVxuICAgICAgICAgIHBhcnNlci50YWcuYXR0cmlidXRlc1twYXJzZXIuYXR0cmliTmFtZV0gPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLmF0dHJpYlZhbHVlID0gXCJcIlxuICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbmF0dHJpYnV0ZVwiLFxuICAgICAgICAgICAgICAgICAgIHsgbmFtZSA6IHBhcnNlci5hdHRyaWJOYW1lLCB2YWx1ZSA6IFwiXCIgfSlcbiAgICAgICAgICBwYXJzZXIuYXR0cmliTmFtZSA9IFwiXCJcbiAgICAgICAgICBpZiAoYyA9PT0gXCI+XCIpIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICAgIGVsc2UgaWYgKGlzKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5hdHRyaWJOYW1lID0gY1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfTkFNRVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lXCIpXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRTpcbiAgICAgICAgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSBjb250aW51ZVxuICAgICAgICBlbHNlIGlmIChpcyhxdW90ZSwgYykpIHtcbiAgICAgICAgICBwYXJzZXIucSA9IGNcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9RVU9URURcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJVbnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWVcIilcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9VTlFVT1RFRFxuICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSA9IGNcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9RVU9URUQ6XG4gICAgICAgIGlmIChjICE9PSBwYXJzZXIucSkge1xuICAgICAgICAgIGlmIChjID09PSBcIiZcIikgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfRU5USVRZX1FcbiAgICAgICAgICBlbHNlIHBhcnNlci5hdHRyaWJWYWx1ZSArPSBjXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWIocGFyc2VyKVxuICAgICAgICBwYXJzZXIucSA9IFwiXCJcbiAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfQ0xPU0VEXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX0NMT1NFRDpcbiAgICAgICAgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJcbiAgICAgICAgfSBlbHNlIGlmIChjID09PSBcIj5cIikgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFwiL1wiKSBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fVEFHX1NMQVNIXG4gICAgICAgIGVsc2UgaWYgKGlzKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJObyB3aGl0ZXNwYWNlIGJldHdlZW4gYXR0cmlidXRlc1wiKVxuICAgICAgICAgIHBhcnNlci5hdHRyaWJOYW1lID0gY1xuICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9OQU1FXG4gICAgICAgIH0gZWxzZSBzdHJpY3RGYWlsKHBhcnNlciwgXCJJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lXCIpXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX1VOUVVPVEVEOlxuICAgICAgICBpZiAobm90KGF0dHJpYkVuZCxjKSkge1xuICAgICAgICAgIGlmIChjID09PSBcIiZcIikgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfRU5USVRZX1VcbiAgICAgICAgICBlbHNlIHBhcnNlci5hdHRyaWJWYWx1ZSArPSBjXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWIocGFyc2VyKVxuICAgICAgICBpZiAoYyA9PT0gXCI+XCIpIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICBlbHNlIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQ0xPU0VfVEFHOlxuICAgICAgICBpZiAoIXBhcnNlci50YWdOYW1lKSB7XG4gICAgICAgICAgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSBjb250aW51ZVxuICAgICAgICAgIGVsc2UgaWYgKG5vdChuYW1lU3RhcnQsIGMpKSB7XG4gICAgICAgICAgICBpZiAocGFyc2VyLnNjcmlwdCkge1xuICAgICAgICAgICAgICBwYXJzZXIuc2NyaXB0ICs9IFwiPC9cIiArIGNcbiAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIkludmFsaWQgdGFnbmFtZSBpbiBjbG9zaW5nIHRhZy5cIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgcGFyc2VyLnRhZ05hbWUgPSBjXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYyA9PT0gXCI+XCIpIGNsb3NlVGFnKHBhcnNlcilcbiAgICAgICAgZWxzZSBpZiAoaXMobmFtZUJvZHksIGMpKSBwYXJzZXIudGFnTmFtZSArPSBjXG4gICAgICAgIGVsc2UgaWYgKHBhcnNlci5zY3JpcHQpIHtcbiAgICAgICAgICBwYXJzZXIuc2NyaXB0ICs9IFwiPC9cIiArIHBhcnNlci50YWdOYW1lXG4gICAgICAgICAgcGFyc2VyLnRhZ05hbWUgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobm90KHdoaXRlc3BhY2UsIGMpKSBzdHJpY3RGYWlsKHBhcnNlcixcbiAgICAgICAgICAgIFwiSW52YWxpZCB0YWduYW1lIGluIGNsb3NpbmcgdGFnXCIpXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DTE9TRV9UQUdfU0FXX1dISVRFXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5DTE9TRV9UQUdfU0FXX1dISVRFOlxuICAgICAgICBpZiAoaXMod2hpdGVzcGFjZSwgYykpIGNvbnRpbnVlXG4gICAgICAgIGlmIChjID09PSBcIj5cIikgY2xvc2VUYWcocGFyc2VyKVxuICAgICAgICBlbHNlIHN0cmljdEZhaWwocGFyc2VyLCBcIkludmFsaWQgY2hhcmFjdGVycyBpbiBjbG9zaW5nIHRhZ1wiKVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLlRFWFRfRU5USVRZOlxuICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9FTlRJVFlfUTpcbiAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfRU5USVRZX1U6XG4gICAgICAgIHN3aXRjaChwYXJzZXIuc3RhdGUpIHtcbiAgICAgICAgICBjYXNlIFMuVEVYVF9FTlRJVFk6XG4gICAgICAgICAgICB2YXIgcmV0dXJuU3RhdGUgPSBTLlRFWFQsIGJ1ZmZlciA9IFwidGV4dE5vZGVcIlxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX0VOVElUWV9ROlxuICAgICAgICAgICAgdmFyIHJldHVyblN0YXRlID0gUy5BVFRSSUJfVkFMVUVfUVVPVEVELCBidWZmZXIgPSBcImF0dHJpYlZhbHVlXCJcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9FTlRJVFlfVTpcbiAgICAgICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX1VOUVVPVEVELCBidWZmZXIgPSBcImF0dHJpYlZhbHVlXCJcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSBcIjtcIikge1xuICAgICAgICAgIHBhcnNlcltidWZmZXJdICs9IHBhcnNlRW50aXR5KHBhcnNlcilcbiAgICAgICAgICBwYXJzZXIuZW50aXR5ID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IHJldHVyblN0YXRlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXMoZW50aXR5LCBjKSkgcGFyc2VyLmVudGl0eSArPSBjXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIkludmFsaWQgY2hhcmFjdGVyIGVudGl0eVwiKVxuICAgICAgICAgIHBhcnNlcltidWZmZXJdICs9IFwiJlwiICsgcGFyc2VyLmVudGl0eSArIGNcbiAgICAgICAgICBwYXJzZXIuZW50aXR5ID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IHJldHVyblN0YXRlXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwYXJzZXIsIFwiVW5rbm93biBzdGF0ZTogXCIgKyBwYXJzZXIuc3RhdGUpXG4gICAgfVxuICB9IC8vIHdoaWxlXG4gIC8vIGNkYXRhIGJsb2NrcyBjYW4gZ2V0IHZlcnkgYmlnIHVuZGVyIG5vcm1hbCBjb25kaXRpb25zLiBlbWl0IGFuZCBtb3ZlIG9uLlxuICAvLyBpZiAocGFyc2VyLnN0YXRlID09PSBTLkNEQVRBICYmIHBhcnNlci5jZGF0YSkge1xuICAvLyAgIGVtaXROb2RlKHBhcnNlciwgXCJvbmNkYXRhXCIsIHBhcnNlci5jZGF0YSlcbiAgLy8gICBwYXJzZXIuY2RhdGEgPSBcIlwiXG4gIC8vIH1cbiAgaWYgKHBhcnNlci5wb3NpdGlvbiA+PSBwYXJzZXIuYnVmZmVyQ2hlY2tQb3NpdGlvbikgY2hlY2tCdWZmZXJMZW5ndGgocGFyc2VyKVxuICByZXR1cm4gcGFyc2VyXG59XG5cbi8qISBodHRwOi8vbXRocy5iZS9mcm9tY29kZXBvaW50IHYwLjEuMCBieSBAbWF0aGlhcyAqL1xuaWYgKCFTdHJpbmcuZnJvbUNvZGVQb2ludCkge1xuICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gICAgICAgICAgICAgICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbiAgICAgICAgICAgICAgICB2YXIgZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9TSVpFID0gMHg0MDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVVbml0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhpZ2hTdXJyb2dhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG93U3Vycm9nYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSBOdW1iZXIoYXJndW1lbnRzW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNGaW5pdGUoY29kZVBvaW50KSB8fCAvLyBgTmFOYCwgYCtJbmZpbml0eWAsIG9yIGAtSW5maW5pdHlgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVBvaW50IDwgMCB8fCAvLyBub3QgYSB2YWxpZCBVbmljb2RlIGNvZGUgcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPiAweDEwRkZGRiB8fCAvLyBub3QgYSB2YWxpZCBVbmljb2RlIGNvZGUgcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9vcihjb2RlUG9pbnQpICE9IGNvZGVQb2ludCAvLyBub3QgYW4gaW50ZWdlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQ6ICcgKyBjb2RlUG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhGRkZGKSB7IC8vIEJNUCBjb2RlIHBvaW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVVuaXRzLnB1c2goY29kZVBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gQXN0cmFsIGNvZGUgcG9pbnQ7IHNwbGl0IGluIHN1cnJvZ2F0ZSBoYWx2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hTdXJyb2dhdGUgPSAoY29kZVBvaW50ID4+IDEwKSArIDB4RDgwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dTdXJyb2dhdGUgPSAoY29kZVBvaW50ICUgMHg0MDApICsgMHhEQzAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGhpZ2hTdXJyb2dhdGUsIGxvd1N1cnJvZ2F0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA9PSBsZW5ndGggfHwgY29kZVVuaXRzLmxlbmd0aCA+IE1BWF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZS5hcHBseShudWxsLCBjb2RlVW5pdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVVbml0cy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0cmluZywgJ2Zyb21Db2RlUG9pbnQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IGZyb21Db2RlUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZyb21Db2RlUG9pbnQgPSBmcm9tQ29kZVBvaW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfSgpKTtcbn1cblxufSkodHlwZW9mIGV4cG9ydHMgPT09IFwidW5kZWZpbmVkXCIgPyBzYXggPSB7fSA6IGV4cG9ydHMpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBFbWl0dGVyID0gcmVxdWlyZSgnZW1pdHRlcicpO1xuXG5mdW5jdGlvbiBTdHJlYW0oKSB7XG4gIEVtaXR0ZXIuY2FsbCh0aGlzKTtcbn1cblN0cmVhbS5wcm90b3R5cGUgPSBuZXcgRW1pdHRlcigpO1xubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW07XG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjQueFxuU3RyZWFtLlN0cmVhbSA9IFN0cmVhbTtcblxuU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgb3B0aW9ucykge1xuICB2YXIgc291cmNlID0gdGhpcztcblxuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBpZiAoZGVzdC53cml0YWJsZSkge1xuICAgICAgaWYgKGZhbHNlID09PSBkZXN0LndyaXRlKGNodW5rKSAmJiBzb3VyY2UucGF1c2UpIHtcbiAgICAgICAgc291cmNlLnBhdXNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc291cmNlLm9uKCdkYXRhJywgb25kYXRhKTtcblxuICBmdW5jdGlvbiBvbmRyYWluKCkge1xuICAgIGlmIChzb3VyY2UucmVhZGFibGUgJiYgc291cmNlLnJlc3VtZSkge1xuICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG5cbiAgLy8gSWYgdGhlICdlbmQnIG9wdGlvbiBpcyBub3Qgc3VwcGxpZWQsIGRlc3QuZW5kKCkgd2lsbCBiZSBjYWxsZWQgd2hlblxuICAvLyBzb3VyY2UgZ2V0cyB0aGUgJ2VuZCcgb3IgJ2Nsb3NlJyBldmVudHMuICBPbmx5IGRlc3QuZW5kKCkgb25jZS5cbiAgaWYgKCFkZXN0Ll9pc1N0ZGlvICYmICghb3B0aW9ucyB8fCBvcHRpb25zLmVuZCAhPT0gZmFsc2UpKSB7XG4gICAgc291cmNlLm9uKCdlbmQnLCBvbmVuZCk7XG4gICAgc291cmNlLm9uKCdjbG9zZScsIG9uY2xvc2UpO1xuICB9XG5cbiAgdmFyIGRpZE9uRW5kID0gZmFsc2U7XG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGlmIChkaWRPbkVuZCkgcmV0dXJuO1xuICAgIGRpZE9uRW5kID0gdHJ1ZTtcblxuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm47XG4gICAgZGlkT25FbmQgPSB0cnVlO1xuXG4gICAgaWYgKHR5cGVvZiBkZXN0LmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIGRlc3QuZGVzdHJveSgpO1xuICB9XG5cbiAgLy8gZG9uJ3QgbGVhdmUgZGFuZ2xpbmcgcGlwZXMgd2hlbiB0aGVyZSBhcmUgZXJyb3JzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgY2xlYW51cCgpO1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoJ2Vycm9yJykpIHtcbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgc3RyZWFtIGVycm9yIGluIHBpcGUuXG4gICAgfVxuICB9XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBkZXN0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIHJlbW92ZSBhbGwgdGhlIGV2ZW50IGxpc3RlbmVycyB0aGF0IHdlcmUgYWRkZWQuXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgc291cmNlLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgZGVzdC5vZmYoJ2RyYWluJywgb25kcmFpbik7XG5cbiAgICBzb3VyY2Uub2ZmKCdlbmQnLCBvbmVuZCk7XG4gICAgc291cmNlLm9mZignY2xvc2UnLCBvbmNsb3NlKTtcblxuICAgIHNvdXJjZS5vZmYoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5vZmYoJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgICBzb3VyY2Uub2ZmKCdlbmQnLCBjbGVhbnVwKTtcbiAgICBzb3VyY2Uub2ZmKCdjbG9zZScsIGNsZWFudXApO1xuXG4gICAgZGVzdC5vZmYoJ2VuZCcsIGNsZWFudXApO1xuICAgIGRlc3Qub2ZmKCdjbG9zZScsIGNsZWFudXApO1xuICB9XG5cbiAgc291cmNlLm9uKCdlbmQnLCBjbGVhbnVwKTtcbiAgc291cmNlLm9uKCdjbG9zZScsIGNsZWFudXApO1xuXG4gIGRlc3Qub24oJ2VuZCcsIGNsZWFudXApO1xuICBkZXN0Lm9uKCdjbG9zZScsIGNsZWFudXApO1xuXG4gIGRlc3QuZW1pdCgncGlwZScsIHNvdXJjZSk7XG5cbiAgLy8gQWxsb3cgZm9yIHVuaXgtbGlrZSB1c2FnZTogQS5waXBlKEIpLnBpcGUoQylcbiAgcmV0dXJuIGRlc3Q7XG59XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIGlzRW5jb2RpbmcgPSBCdWZmZXIuaXNFbmNvZGluZyB8fCBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgZW5jb2RpbmcgPSAnJyArIGVuY29kaW5nO1xuICBzd2l0Y2ggKGVuY29kaW5nICYmIGVuY29kaW5nLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOmNhc2UgJ3V0ZjgnOmNhc2UgJ3V0Zi04JzpjYXNlICdhc2NpaSc6Y2FzZSAnYmluYXJ5JzpjYXNlICdiYXNlNjQnOmNhc2UgJ3VjczInOmNhc2UgJ3Vjcy0yJzpjYXNlICd1dGYxNmxlJzpjYXNlICd1dGYtMTZsZSc6Y2FzZSAncmF3JzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgaWYgKCFlbmMpIHJldHVybiAndXRmOCc7XG4gIHZhciByZXRyaWVkO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jKSB7XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuICd1dGY4JztcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiAndXRmMTZsZSc7XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuICdsYXRpbjEnO1xuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBlbmM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAocmV0cmllZCkgcmV0dXJuOyAvLyB1bmRlZmluZWRcbiAgICAgICAgZW5jID0gKCcnICsgZW5jKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXRyaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIERvIG5vdCBjYWNoZSBgQnVmZmVyLmlzRW5jb2RpbmdgIHdoZW4gY2hlY2tpbmcgZW5jb2RpbmcgbmFtZXMgYXMgc29tZVxuLy8gbW9kdWxlcyBtb25rZXktcGF0Y2ggaXQgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGVuY29kaW5nc1xuZnVuY3Rpb24gbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIHZhciBuZW5jID0gX25vcm1hbGl6ZUVuY29kaW5nKGVuYyk7XG4gIGlmICh0eXBlb2YgbmVuYyAhPT0gJ3N0cmluZycgJiYgKEJ1ZmZlci5pc0VuY29kaW5nID09PSBpc0VuY29kaW5nIHx8ICFpc0VuY29kaW5nKGVuYykpKSB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmMpO1xuICByZXR1cm4gbmVuYyB8fCBlbmM7XG59XG5cbi8vIFN0cmluZ0RlY29kZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBlZmZpY2llbnRseSBzcGxpdHRpbmcgYSBzZXJpZXMgb2Zcbi8vIGJ1ZmZlcnMgaW50byBhIHNlcmllcyBvZiBKUyBzdHJpbmdzIHdpdGhvdXQgYnJlYWtpbmcgYXBhcnQgbXVsdGktYnl0ZVxuLy8gY2hhcmFjdGVycy5cbmV4cG9ydHMuU3RyaW5nRGVjb2RlciA9IFN0cmluZ0RlY29kZXI7XG5mdW5jdGlvbiBTdHJpbmdEZWNvZGVyKGVuY29kaW5nKSB7XG4gIHRoaXMuZW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZyk7XG4gIHZhciBuYjtcbiAgc3dpdGNoICh0aGlzLmVuY29kaW5nKSB7XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICB0aGlzLnRleHQgPSB1dGYxNlRleHQ7XG4gICAgICB0aGlzLmVuZCA9IHV0ZjE2RW5kO1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXRmOCc6XG4gICAgICB0aGlzLmZpbGxMYXN0ID0gdXRmOEZpbGxMYXN0O1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIHRoaXMudGV4dCA9IGJhc2U2NFRleHQ7XG4gICAgICB0aGlzLmVuZCA9IGJhc2U2NEVuZDtcbiAgICAgIG5iID0gMztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLndyaXRlID0gc2ltcGxlV3JpdGU7XG4gICAgICB0aGlzLmVuZCA9IHNpbXBsZUVuZDtcbiAgICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgdGhpcy5sYXN0VG90YWwgPSAwO1xuICB0aGlzLmxhc3RDaGFyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG5iKTtcbn1cblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmIChidWYubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIHZhciByO1xuICB2YXIgaTtcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICByID0gdGhpcy5maWxsTGFzdChidWYpO1xuICAgIGlmIChyID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICBpID0gdGhpcy5sYXN0TmVlZDtcbiAgICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgfSBlbHNlIHtcbiAgICBpID0gMDtcbiAgfVxuICBpZiAoaSA8IGJ1Zi5sZW5ndGgpIHJldHVybiByID8gciArIHRoaXMudGV4dChidWYsIGkpIDogdGhpcy50ZXh0KGJ1ZiwgaSk7XG4gIHJldHVybiByIHx8ICcnO1xufTtcblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gdXRmOEVuZDtcblxuLy8gUmV0dXJucyBvbmx5IGNvbXBsZXRlIGNoYXJhY3RlcnMgaW4gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLnRleHQgPSB1dGY4VGV4dDtcblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBwYXJ0aWFsIG5vbi1VVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlclxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZmlsbExhc3QgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59O1xuXG4vLyBDaGVja3MgdGhlIHR5cGUgb2YgYSBVVEYtOCBieXRlLCB3aGV0aGVyIGl0J3MgQVNDSUksIGEgbGVhZGluZyBieXRlLCBvciBhXG4vLyBjb250aW51YXRpb24gYnl0ZS4gSWYgYW4gaW52YWxpZCBieXRlIGlzIGRldGVjdGVkLCAtMiBpcyByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0J5dGUoYnl0ZSkge1xuICBpZiAoYnl0ZSA8PSAweDdGKSByZXR1cm4gMDtlbHNlIGlmIChieXRlID4+IDUgPT09IDB4MDYpIHJldHVybiAyO2Vsc2UgaWYgKGJ5dGUgPj4gNCA9PT0gMHgwRSkgcmV0dXJuIDM7ZWxzZSBpZiAoYnl0ZSA+PiAzID09PSAweDFFKSByZXR1cm4gNDtcbiAgcmV0dXJuIGJ5dGUgPj4gNiA9PT0gMHgwMiA/IC0xIDogLTI7XG59XG5cbi8vIENoZWNrcyBhdCBtb3N0IDMgYnl0ZXMgYXQgdGhlIGVuZCBvZiBhIEJ1ZmZlciBpbiBvcmRlciB0byBkZXRlY3QgYW5cbi8vIGluY29tcGxldGUgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIuIFRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgKDIsIDMsIG9yIDQpXG4vLyBuZWVkZWQgdG8gY29tcGxldGUgdGhlIFVURi04IGNoYXJhY3RlciAoaWYgYXBwbGljYWJsZSkgYXJlIHJldHVybmVkLlxuZnVuY3Rpb24gdXRmOENoZWNrSW5jb21wbGV0ZShzZWxmLCBidWYsIGkpIHtcbiAgdmFyIGogPSBidWYubGVuZ3RoIC0gMTtcbiAgaWYgKGogPCBpKSByZXR1cm4gMDtcbiAgdmFyIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHNlbGYubGFzdE5lZWQgPSBuYiAtIDE7XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIGlmICgtLWogPCBpIHx8IG5iID09PSAtMikgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHNlbGYubGFzdE5lZWQgPSBuYiAtIDI7XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIGlmICgtLWogPCBpIHx8IG5iID09PSAtMikgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHtcbiAgICAgIGlmIChuYiA9PT0gMikgbmIgPSAwO2Vsc2Ugc2VsZi5sYXN0TmVlZCA9IG5iIC0gMztcbiAgICB9XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vLyBWYWxpZGF0ZXMgYXMgbWFueSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgYXNcbi8vIG5lZWRlZCBvciBhcmUgYXZhaWxhYmxlLiBJZiB3ZSBzZWUgYSBub24tY29udGludWF0aW9uIGJ5dGUgd2hlcmUgd2UgZXhwZWN0XG4vLyBvbmUsIHdlIFwicmVwbGFjZVwiIHRoZSB2YWxpZGF0ZWQgY29udGludWF0aW9uIGJ5dGVzIHdlJ3ZlIHNlZW4gc28gZmFyIHdpdGhcbi8vIGEgc2luZ2xlIFVURi04IHJlcGxhY2VtZW50IGNoYXJhY3RlciAoJ1xcdWZmZmQnKSwgdG8gbWF0Y2ggdjgncyBVVEYtOCBkZWNvZGluZ1xuLy8gYmVoYXZpb3IuIFRoZSBjb250aW51YXRpb24gYnl0ZSBjaGVjayBpcyBpbmNsdWRlZCB0aHJlZSB0aW1lcyBpbiB0aGUgY2FzZVxuLy8gd2hlcmUgYWxsIG9mIHRoZSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgY2hhcmFjdGVyIGV4aXN0IGluIHRoZSBzYW1lIGJ1ZmZlci5cbi8vIEl0IGlzIGFsc28gZG9uZSB0aGlzIHdheSBhcyBhIHNsaWdodCBwZXJmb3JtYW5jZSBpbmNyZWFzZSBpbnN0ZWFkIG9mIHVzaW5nIGFcbi8vIGxvb3AuXG5mdW5jdGlvbiB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHNlbGYsIGJ1ZiwgcCkge1xuICBpZiAoKGJ1ZlswXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgc2VsZi5sYXN0TmVlZCA9IDA7XG4gICAgcmV0dXJuICdcXHVmZmZkJztcbiAgfVxuICBpZiAoc2VsZi5sYXN0TmVlZCA+IDEgJiYgYnVmLmxlbmd0aCA+IDEpIHtcbiAgICBpZiAoKGJ1ZlsxXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgICBzZWxmLmxhc3ROZWVkID0gMTtcbiAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgfVxuICAgIGlmIChzZWxmLmxhc3ROZWVkID4gMiAmJiBidWYubGVuZ3RoID4gMikge1xuICAgICAgaWYgKChidWZbMl0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgICBzZWxmLmxhc3ROZWVkID0gMjtcbiAgICAgICAgcmV0dXJuICdcXHVmZmZkJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyLlxuZnVuY3Rpb24gdXRmOEZpbGxMYXN0KGJ1Zikge1xuICB2YXIgcCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgdmFyIHIgPSB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHRoaXMsIGJ1ZiwgcCk7XG4gIGlmIChyICE9PSB1bmRlZmluZWQpIHJldHVybiByO1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgdGhpcy5sYXN0TmVlZCk7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpO1xuICB9XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59XG5cbi8vIFJldHVybnMgYWxsIGNvbXBsZXRlIFVURi04IGNoYXJhY3RlcnMgaW4gYSBCdWZmZXIuIElmIHRoZSBCdWZmZXIgZW5kZWQgb24gYVxuLy8gcGFydGlhbCBjaGFyYWN0ZXIsIHRoZSBjaGFyYWN0ZXIncyBieXRlcyBhcmUgYnVmZmVyZWQgdW50aWwgdGhlIHJlcXVpcmVkXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXJlIGF2YWlsYWJsZS5cbmZ1bmN0aW9uIHV0ZjhUZXh0KGJ1ZiwgaSkge1xuICB2YXIgdG90YWwgPSB1dGY4Q2hlY2tJbmNvbXBsZXRlKHRoaXMsIGJ1ZiwgaSk7XG4gIGlmICghdGhpcy5sYXN0TmVlZCkgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGkpO1xuICB0aGlzLmxhc3RUb3RhbCA9IHRvdGFsO1xuICB2YXIgZW5kID0gYnVmLmxlbmd0aCAtICh0b3RhbCAtIHRoaXMubGFzdE5lZWQpO1xuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCAwLCBlbmQpO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSwgZW5kKTtcbn1cblxuLy8gRm9yIFVURi04LCBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciBpcyBhZGRlZCB3aGVuIGVuZGluZyBvbiBhIHBhcnRpYWxcbi8vIGNoYXJhY3Rlci5cbmZ1bmN0aW9uIHV0ZjhFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgJ1xcdWZmZmQnO1xuICByZXR1cm4gcjtcbn1cblxuLy8gVVRGLTE2TEUgdHlwaWNhbGx5IG5lZWRzIHR3byBieXRlcyBwZXIgY2hhcmFjdGVyLCBidXQgZXZlbiBpZiB3ZSBoYXZlIGFuIGV2ZW5cbi8vIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUsIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgZW5kIG9uIGEgbGVhZGluZy9oaWdoXG4vLyBzdXJyb2dhdGUuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gb3JkZXIgdG9cbi8vIGRlY29kZSB0aGUgbGFzdCBjaGFyYWN0ZXIgcHJvcGVybHkuXG5mdW5jdGlvbiB1dGYxNlRleHQoYnVmLCBpKSB7XG4gIGlmICgoYnVmLmxlbmd0aCAtIGkpICUgMiA9PT0gMCkge1xuICAgIHZhciByID0gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSk7XG4gICAgaWYgKHIpIHtcbiAgICAgIHZhciBjID0gci5jaGFyQ29kZUF0KHIubGVuZ3RoIC0gMSk7XG4gICAgICBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERCRkYpIHtcbiAgICAgICAgdGhpcy5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHRoaXMubGFzdFRvdGFsID0gNDtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICAgICAgICByZXR1cm4gci5zbGljZSgwLCAtMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAxO1xuICB0aGlzLmxhc3RUb3RhbCA9IDI7XG4gIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSwgYnVmLmxlbmd0aCAtIDEpO1xufVxuXG4vLyBGb3IgVVRGLTE2TEUgd2UgZG8gbm90IGV4cGxpY2l0bHkgYXBwZW5kIHNwZWNpYWwgcmVwbGFjZW1lbnQgY2hhcmFjdGVycyBpZiB3ZVxuLy8gZW5kIG9uIGEgcGFydGlhbCBjaGFyYWN0ZXIsIHdlIHNpbXBseSBsZXQgdjggaGFuZGxlIHRoYXQuXG5mdW5jdGlvbiB1dGYxNkVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkge1xuICAgIHZhciBlbmQgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gICAgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCd1dGYxNmxlJywgMCwgZW5kKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gYmFzZTY0VGV4dChidWYsIGkpIHtcbiAgdmFyIG4gPSAoYnVmLmxlbmd0aCAtIGkpICUgMztcbiAgaWYgKG4gPT09IDApIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGkpO1xuICB0aGlzLmxhc3ROZWVkID0gMyAtIG47XG4gIHRoaXMubGFzdFRvdGFsID0gMztcbiAgaWYgKG4gPT09IDEpIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfVxuICByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpLCBidWYubGVuZ3RoIC0gbik7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCdiYXNlNjQnLCAwLCAzIC0gdGhpcy5sYXN0TmVlZCk7XG4gIHJldHVybiByO1xufVxuXG4vLyBQYXNzIGJ5dGVzIG9uIHRocm91Z2ggZm9yIHNpbmdsZS1ieXRlIGVuY29kaW5ncyAoZS5nLiBhc2NpaSwgbGF0aW4xLCBoZXgpXG5mdW5jdGlvbiBzaW1wbGVXcml0ZShidWYpIHtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZyh0aGlzLmVuY29kaW5nKTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlRW5kKGJ1Zikge1xuICByZXR1cm4gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbn0iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwiXG5leHBvcnRzLmV2ZXJ5ID0gZnVuY3Rpb24oc3RyKSB7XG4gIHJldHVybiBuZXcgRXZlcnkoc3RyKTtcbn07XG5cbi8qXG4gIFRpbWUgbWFwXG4qL1xuXG52YXIgdGltZSA9IHtcbiAgbWlsbGlzZWNvbmQ6IDEsXG4gIHNlY29uZDogMTAwMCxcbiAgbWludXRlOiA2MDAwMCxcbiAgaG91cjogMzYwMDAwMCxcbiAgZGF5OiA4NjQwMDAwMFxufTtcblxuZm9yICh2YXIga2V5IGluIHRpbWUpIHtcbiAgaWYgKGtleSA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgIHRpbWUubXMgPSB0aW1lW2tleV07XG4gIH0gZWxzZSB7XG4gICAgdGltZVtrZXkuY2hhckF0KDApXSA9IHRpbWVba2V5XTtcbiAgfVxuICB0aW1lW2tleSArICdzJ10gPSB0aW1lW2tleV07XG59XG5cblxuLypcbiAgRXZlcnkgY29uc3RydWN0b3JcbiovXG5cbmZ1bmN0aW9uIEV2ZXJ5KHN0cikge1xuICB0aGlzLmNvdW50ID0gMDtcbiAgdmFyIG0gPSBwYXJzZShzdHIpO1xuICBpZiAobSkge1xuICAgIHRoaXMudGltZSA9IE51bWJlcihtWzBdKSAqIHRpbWVbbVsxXV07XG4gICAgdGhpcy50eXBlID0gbVsxXTtcbiAgfVxufVxuXG5FdmVyeS5wcm90b3R5cGUuZG8gPSBmdW5jdGlvbihjYikge1xuICBpZiAodGhpcy50aW1lKSB7XG4gICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKGNhbGxiYWNrLCB0aGlzLnRpbWUpO1xuICB9XG5cbiAgdmFyIHRoYXQgPSB0aGlzO1xuICBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICB0aGF0LmNvdW50Kys7XG4gICAgY2IuY2FsbCh0aGF0KTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZXJ5LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgICBkZWxldGUgdGhpcy5pbnRlcnZhbDtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cblxuLypcbiAgQ29udmVydCBzdHJpbmcgdG8gbWlsbGlzZWNvbmRzXG5cbiAgICBtcywgbWlsbGlzZWNvbmQocyk/XG4gICAgcywgc2Vjb25kKHMpP1xuICAgIG0sIG1pbnV0ZShzKT9cbiAgICBoLCBob3VyKHMpP1xuICAgIGQsIGRheShzKT9cbiovXG52YXIgcmVnID0gL15cXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFxzKihbYS16XSspXFxzKiQvO1xuXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgdmFyIG0gPSBzdHIubWF0Y2gocmVnKTtcbiAgaWYgKG0gJiYgdGltZVttWzJdXSkge1xuICAgIHJldHVybiBtLnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIGV4cG9ydHMuc3RyaXBCT00gPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAoc3RyWzBdID09PSAnXFx1RkVGRicpIHtcbiAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuICB2YXIgYnVpbGRlciwgZGVmYXVsdHMsIGVzY2FwZUNEQVRBLCByZXF1aXJlc0NEQVRBLCB3cmFwQ0RBVEEsXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGJ1aWxkZXIgPSByZXF1aXJlKCd4bWxidWlsZGVyJyk7XG5cbiAgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJykuZGVmYXVsdHM7XG5cbiAgcmVxdWlyZXNDREFUQSA9IGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiAoZW50cnkuaW5kZXhPZignJicpID49IDAgfHwgZW50cnkuaW5kZXhPZignPicpID49IDAgfHwgZW50cnkuaW5kZXhPZignPCcpID49IDApO1xuICB9O1xuXG4gIHdyYXBDREFUQSA9IGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgcmV0dXJuIFwiPCFbQ0RBVEFbXCIgKyAoZXNjYXBlQ0RBVEEoZW50cnkpKSArIFwiXV0+XCI7XG4gIH07XG5cbiAgZXNjYXBlQ0RBVEEgPSBmdW5jdGlvbihlbnRyeSkge1xuICAgIHJldHVybiBlbnRyeS5yZXBsYWNlKCddXT4nLCAnXV1dXT48IVtDREFUQVs+Jyk7XG4gIH07XG5cbiAgZXhwb3J0cy5CdWlsZGVyID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIEJ1aWxkZXIob3B0cykge1xuICAgICAgdmFyIGtleSwgcmVmLCB2YWx1ZTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgICAgcmVmID0gZGVmYXVsdHNbXCIwLjJcIl07XG4gICAgICBmb3IgKGtleSBpbiByZWYpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwocmVmLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgdmFsdWUgPSByZWZba2V5XTtcbiAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoa2V5IGluIG9wdHMpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwob3B0cywga2V5KSkgY29udGludWU7XG4gICAgICAgIHZhbHVlID0gb3B0c1trZXldO1xuICAgICAgICB0aGlzLm9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkT2JqZWN0ID0gZnVuY3Rpb24ocm9vdE9iaikge1xuICAgICAgdmFyIGF0dHJrZXksIGNoYXJrZXksIHJlbmRlciwgcm9vdEVsZW1lbnQsIHJvb3ROYW1lO1xuICAgICAgYXR0cmtleSA9IHRoaXMub3B0aW9ucy5hdHRya2V5O1xuICAgICAgY2hhcmtleSA9IHRoaXMub3B0aW9ucy5jaGFya2V5O1xuICAgICAgaWYgKChPYmplY3Qua2V5cyhyb290T2JqKS5sZW5ndGggPT09IDEpICYmICh0aGlzLm9wdGlvbnMucm9vdE5hbWUgPT09IGRlZmF1bHRzWycwLjInXS5yb290TmFtZSkpIHtcbiAgICAgICAgcm9vdE5hbWUgPSBPYmplY3Qua2V5cyhyb290T2JqKVswXTtcbiAgICAgICAgcm9vdE9iaiA9IHJvb3RPYmpbcm9vdE5hbWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdE5hbWUgPSB0aGlzLm9wdGlvbnMucm9vdE5hbWU7XG4gICAgICB9XG4gICAgICByZW5kZXIgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIG9iaikge1xuICAgICAgICAgIHZhciBhdHRyLCBjaGlsZCwgZW50cnksIGluZGV4LCBrZXksIHZhbHVlO1xuICAgICAgICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuY2RhdGEgJiYgcmVxdWlyZXNDREFUQShvYmopKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQucmF3KHdyYXBDREFUQShvYmopKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQudHh0KG9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIGZvciAoaW5kZXggaW4gb2JqKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKG9iaiwgaW5kZXgpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2hpbGQgPSBvYmpbaW5kZXhdO1xuICAgICAgICAgICAgICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gY2hpbGRba2V5XTtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gcmVuZGVyKGVsZW1lbnQuZWxlKGtleSksIGVudHJ5KS51cCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChvYmosIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjaGlsZCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICBpZiAoa2V5ID09PSBhdHRya2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgZm9yIChhdHRyIGluIGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2hpbGRbYXR0cl07XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LmF0dChhdHRyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gY2hhcmtleSkge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmNkYXRhICYmIHJlcXVpcmVzQ0RBVEEoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5yYXcod3JhcENEQVRBKGNoaWxkKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnR4dChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpbmRleCBpbiBjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwoY2hpbGQsIGluZGV4KSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBlbnRyeSA9IGNoaWxkW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmNkYXRhICYmIHJlcXVpcmVzQ0RBVEEoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZWxlKGtleSkucmF3KHdyYXBDREFUQShlbnRyeSkpLnVwKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZWxlKGtleSwgZW50cnkpLnVwKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSByZW5kZXIoZWxlbWVudC5lbGUoa2V5KSwgZW50cnkpLnVwKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSByZW5kZXIoZWxlbWVudC5lbGUoa2V5KSwgY2hpbGQpLnVwKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycgJiYgX3RoaXMub3B0aW9ucy5jZGF0YSAmJiByZXF1aXJlc0NEQVRBKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZWxlKGtleSkucmF3KHdyYXBDREFUQShjaGlsZCkpLnVwKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkID0gJyc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5lbGUoa2V5LCBjaGlsZC50b1N0cmluZygpKS51cCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgcm9vdEVsZW1lbnQgPSBidWlsZGVyLmNyZWF0ZShyb290TmFtZSwgdGhpcy5vcHRpb25zLnhtbGRlYywgdGhpcy5vcHRpb25zLmRvY3R5cGUsIHtcbiAgICAgICAgaGVhZGxlc3M6IHRoaXMub3B0aW9ucy5oZWFkbGVzcyxcbiAgICAgICAgYWxsb3dTdXJyb2dhdGVDaGFyczogdGhpcy5vcHRpb25zLmFsbG93U3Vycm9nYXRlQ2hhcnNcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbmRlcihyb290RWxlbWVudCwgcm9vdE9iaikuZW5kKHRoaXMub3B0aW9ucy5yZW5kZXJPcHRzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIEJ1aWxkZXI7XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIGV4cG9ydHMuZGVmYXVsdHMgPSB7XG4gICAgXCIwLjFcIjoge1xuICAgICAgZXhwbGljaXRDaGFya2V5OiBmYWxzZSxcbiAgICAgIHRyaW06IHRydWUsXG4gICAgICBub3JtYWxpemU6IHRydWUsXG4gICAgICBub3JtYWxpemVUYWdzOiBmYWxzZSxcbiAgICAgIGF0dHJrZXk6IFwiQFwiLFxuICAgICAgY2hhcmtleTogXCIjXCIsXG4gICAgICBleHBsaWNpdEFycmF5OiBmYWxzZSxcbiAgICAgIGlnbm9yZUF0dHJzOiBmYWxzZSxcbiAgICAgIG1lcmdlQXR0cnM6IGZhbHNlLFxuICAgICAgZXhwbGljaXRSb290OiBmYWxzZSxcbiAgICAgIHZhbGlkYXRvcjogbnVsbCxcbiAgICAgIHhtbG5zOiBmYWxzZSxcbiAgICAgIGV4cGxpY2l0Q2hpbGRyZW46IGZhbHNlLFxuICAgICAgY2hpbGRrZXk6ICdAQCcsXG4gICAgICBjaGFyc0FzQ2hpbGRyZW46IGZhbHNlLFxuICAgICAgaW5jbHVkZVdoaXRlQ2hhcnM6IGZhbHNlLFxuICAgICAgYXN5bmM6IGZhbHNlLFxuICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgYXR0ck5hbWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgYXR0clZhbHVlUHJvY2Vzc29yczogbnVsbCxcbiAgICAgIHRhZ05hbWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgdmFsdWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgZW1wdHlUYWc6ICcnXG4gICAgfSxcbiAgICBcIjAuMlwiOiB7XG4gICAgICBleHBsaWNpdENoYXJrZXk6IGZhbHNlLFxuICAgICAgdHJpbTogZmFsc2UsXG4gICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgbm9ybWFsaXplVGFnczogZmFsc2UsXG4gICAgICBhdHRya2V5OiBcIiRcIixcbiAgICAgIGNoYXJrZXk6IFwiX1wiLFxuICAgICAgZXhwbGljaXRBcnJheTogdHJ1ZSxcbiAgICAgIGlnbm9yZUF0dHJzOiBmYWxzZSxcbiAgICAgIG1lcmdlQXR0cnM6IGZhbHNlLFxuICAgICAgZXhwbGljaXRSb290OiB0cnVlLFxuICAgICAgdmFsaWRhdG9yOiBudWxsLFxuICAgICAgeG1sbnM6IGZhbHNlLFxuICAgICAgZXhwbGljaXRDaGlsZHJlbjogZmFsc2UsXG4gICAgICBwcmVzZXJ2ZUNoaWxkcmVuT3JkZXI6IGZhbHNlLFxuICAgICAgY2hpbGRrZXk6ICckJCcsXG4gICAgICBjaGFyc0FzQ2hpbGRyZW46IGZhbHNlLFxuICAgICAgaW5jbHVkZVdoaXRlQ2hhcnM6IGZhbHNlLFxuICAgICAgYXN5bmM6IGZhbHNlLFxuICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgYXR0ck5hbWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgYXR0clZhbHVlUHJvY2Vzc29yczogbnVsbCxcbiAgICAgIHRhZ05hbWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgdmFsdWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgcm9vdE5hbWU6ICdyb290JyxcbiAgICAgIHhtbGRlYzoge1xuICAgICAgICAndmVyc2lvbic6ICcxLjAnLFxuICAgICAgICAnZW5jb2RpbmcnOiAnVVRGLTgnLFxuICAgICAgICAnc3RhbmRhbG9uZSc6IHRydWVcbiAgICAgIH0sXG4gICAgICBkb2N0eXBlOiBudWxsLFxuICAgICAgcmVuZGVyT3B0czoge1xuICAgICAgICAncHJldHR5JzogdHJ1ZSxcbiAgICAgICAgJ2luZGVudCc6ICcgICcsXG4gICAgICAgICduZXdsaW5lJzogJ1xcbidcbiAgICAgIH0sXG4gICAgICBoZWFkbGVzczogZmFsc2UsXG4gICAgICBjaHVua1NpemU6IDEwMDAwLFxuICAgICAgZW1wdHlUYWc6ICcnLFxuICAgICAgY2RhdGE6IGZhbHNlXG4gICAgfVxuICB9O1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIHZhciBib20sIGRlZmF1bHRzLCBldmVudHMsIGlzRW1wdHksIHByb2Nlc3NJdGVtLCBwcm9jZXNzb3JzLCBzYXgsIHNldEltbWVkaWF0ZSxcbiAgICBiaW5kID0gZnVuY3Rpb24oZm4sIG1lKXsgcmV0dXJuIGZ1bmN0aW9uKCl7IHJldHVybiBmbi5hcHBseShtZSwgYXJndW1lbnRzKTsgfTsgfSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIHNheCA9IHJlcXVpcmUoJ3NheCcpO1xuXG4gIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuXG4gIGJvbSA9IHJlcXVpcmUoJy4vYm9tJyk7XG5cbiAgcHJvY2Vzc29ycyA9IHJlcXVpcmUoJy4vcHJvY2Vzc29ycycpO1xuXG4gIHNldEltbWVkaWF0ZSA9IHJlcXVpcmUoJ3RpbWVycycpLnNldEltbWVkaWF0ZTtcblxuICBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKS5kZWZhdWx0cztcblxuICBpc0VtcHR5ID0gZnVuY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSBcIm9iamVjdFwiICYmICh0aGluZyAhPSBudWxsKSAmJiBPYmplY3Qua2V5cyh0aGluZykubGVuZ3RoID09PSAwO1xuICB9O1xuXG4gIHByb2Nlc3NJdGVtID0gZnVuY3Rpb24ocHJvY2Vzc29ycywgaXRlbSwga2V5KSB7XG4gICAgdmFyIGksIGxlbiwgcHJvY2VzcztcbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBwcm9jZXNzb3JzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBwcm9jZXNzID0gcHJvY2Vzc29yc1tpXTtcbiAgICAgIGl0ZW0gPSBwcm9jZXNzKGl0ZW0sIGtleSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9O1xuXG4gIGV4cG9ydHMuUGFyc2VyID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoUGFyc2VyLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFBhcnNlcihvcHRzKSB7XG4gICAgICB0aGlzLnBhcnNlU3RyaW5nUHJvbWlzZSA9IGJpbmQodGhpcy5wYXJzZVN0cmluZ1Byb21pc2UsIHRoaXMpO1xuICAgICAgdGhpcy5wYXJzZVN0cmluZyA9IGJpbmQodGhpcy5wYXJzZVN0cmluZywgdGhpcyk7XG4gICAgICB0aGlzLnJlc2V0ID0gYmluZCh0aGlzLnJlc2V0LCB0aGlzKTtcbiAgICAgIHRoaXMuYXNzaWduT3JQdXNoID0gYmluZCh0aGlzLmFzc2lnbk9yUHVzaCwgdGhpcyk7XG4gICAgICB0aGlzLnByb2Nlc3NBc3luYyA9IGJpbmQodGhpcy5wcm9jZXNzQXN5bmMsIHRoaXMpO1xuICAgICAgdmFyIGtleSwgcmVmLCB2YWx1ZTtcbiAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBleHBvcnRzLlBhcnNlcikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBleHBvcnRzLlBhcnNlcihvcHRzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgICAgcmVmID0gZGVmYXVsdHNbXCIwLjJcIl07XG4gICAgICBmb3IgKGtleSBpbiByZWYpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwocmVmLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgdmFsdWUgPSByZWZba2V5XTtcbiAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoa2V5IGluIG9wdHMpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwob3B0cywga2V5KSkgY29udGludWU7XG4gICAgICAgIHZhbHVlID0gb3B0c1trZXldO1xuICAgICAgICB0aGlzLm9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy54bWxucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMueG1sbnNrZXkgPSB0aGlzLm9wdGlvbnMuYXR0cmtleSArIFwibnNcIjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9ybWFsaXplVGFncykge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy50YWdOYW1lUHJvY2Vzc29ycykge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy50YWdOYW1lUHJvY2Vzc29ycyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9ucy50YWdOYW1lUHJvY2Vzc29ycy51bnNoaWZ0KHByb2Nlc3NvcnMubm9ybWFsaXplKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnByb2Nlc3NBc3luYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNodW5rLCBlcnI7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmcubGVuZ3RoIDw9IHRoaXMub3B0aW9ucy5jaHVua1NpemUpIHtcbiAgICAgICAgICBjaHVuayA9IHRoaXMucmVtYWluaW5nO1xuICAgICAgICAgIHRoaXMucmVtYWluaW5nID0gJyc7XG4gICAgICAgICAgdGhpcy5zYXhQYXJzZXIgPSB0aGlzLnNheFBhcnNlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2F4UGFyc2VyLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2h1bmsgPSB0aGlzLnJlbWFpbmluZy5zdWJzdHIoMCwgdGhpcy5vcHRpb25zLmNodW5rU2l6ZSk7XG4gICAgICAgICAgdGhpcy5yZW1haW5pbmcgPSB0aGlzLnJlbWFpbmluZy5zdWJzdHIodGhpcy5vcHRpb25zLmNodW5rU2l6ZSwgdGhpcy5yZW1haW5pbmcubGVuZ3RoKTtcbiAgICAgICAgICB0aGlzLnNheFBhcnNlciA9IHRoaXMuc2F4UGFyc2VyLndyaXRlKGNodW5rKTtcbiAgICAgICAgICByZXR1cm4gc2V0SW1tZWRpYXRlKHRoaXMucHJvY2Vzc0FzeW5jKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgICAgIGVyciA9IGVycm9yMTtcbiAgICAgICAgaWYgKCF0aGlzLnNheFBhcnNlci5lcnJUaHJvd24pIHtcbiAgICAgICAgICB0aGlzLnNheFBhcnNlci5lcnJUaHJvd24gPSB0cnVlO1xuICAgICAgICAgIHJldHVybiB0aGlzLmVtaXQoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLmFzc2lnbk9yUHVzaCA9IGZ1bmN0aW9uKG9iaiwga2V5LCBuZXdWYWx1ZSkge1xuICAgICAgaWYgKCEoa2V5IGluIG9iaikpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZXhwbGljaXRBcnJheSkge1xuICAgICAgICAgIHJldHVybiBvYmpba2V5XSA9IG5ld1ZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvYmpba2V5XSA9IFtuZXdWYWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghKG9ialtrZXldIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgICAgb2JqW2tleV0gPSBbb2JqW2tleV1dO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmpba2V5XS5wdXNoKG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGF0dHJrZXksIGNoYXJrZXksIG9udGV4dCwgc3RhY2s7XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgdGhpcy5zYXhQYXJzZXIgPSBzYXgucGFyc2VyKHRoaXMub3B0aW9ucy5zdHJpY3QsIHtcbiAgICAgICAgdHJpbTogZmFsc2UsXG4gICAgICAgIG5vcm1hbGl6ZTogZmFsc2UsXG4gICAgICAgIHhtbG5zOiB0aGlzLm9wdGlvbnMueG1sbnNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXhQYXJzZXIuZXJyVGhyb3duID0gZmFsc2U7XG4gICAgICB0aGlzLnNheFBhcnNlci5vbmVycm9yID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIF90aGlzLnNheFBhcnNlci5yZXN1bWUoKTtcbiAgICAgICAgICBpZiAoIV90aGlzLnNheFBhcnNlci5lcnJUaHJvd24pIHtcbiAgICAgICAgICAgIF90aGlzLnNheFBhcnNlci5lcnJUaHJvd24gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICB0aGlzLnNheFBhcnNlci5vbmVuZCA9IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFfdGhpcy5zYXhQYXJzZXIuZW5kZWQpIHtcbiAgICAgICAgICAgIF90aGlzLnNheFBhcnNlci5lbmRlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuZW1pdChcImVuZFwiLCBfdGhpcy5yZXN1bHRPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgdGhpcy5zYXhQYXJzZXIuZW5kZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuRVhQTElDSVRfQ0hBUktFWSA9IHRoaXMub3B0aW9ucy5leHBsaWNpdENoYXJrZXk7XG4gICAgICB0aGlzLnJlc3VsdE9iamVjdCA9IG51bGw7XG4gICAgICBzdGFjayA9IFtdO1xuICAgICAgYXR0cmtleSA9IHRoaXMub3B0aW9ucy5hdHRya2V5O1xuICAgICAgY2hhcmtleSA9IHRoaXMub3B0aW9ucy5jaGFya2V5O1xuICAgICAgdGhpcy5zYXhQYXJzZXIub25vcGVudGFnID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgdmFyIGtleSwgbmV3VmFsdWUsIG9iaiwgcHJvY2Vzc2VkS2V5LCByZWY7XG4gICAgICAgICAgb2JqID0ge307XG4gICAgICAgICAgb2JqW2NoYXJrZXldID0gXCJcIjtcbiAgICAgICAgICBpZiAoIV90aGlzLm9wdGlvbnMuaWdub3JlQXR0cnMpIHtcbiAgICAgICAgICAgIHJlZiA9IG5vZGUuYXR0cmlidXRlcztcbiAgICAgICAgICAgIGZvciAoa2V5IGluIHJlZikge1xuICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBpZiAoIShhdHRya2V5IGluIG9iaikgJiYgIV90aGlzLm9wdGlvbnMubWVyZ2VBdHRycykge1xuICAgICAgICAgICAgICAgIG9ialthdHRya2V5XSA9IHt9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG5ld1ZhbHVlID0gX3RoaXMub3B0aW9ucy5hdHRyVmFsdWVQcm9jZXNzb3JzID8gcHJvY2Vzc0l0ZW0oX3RoaXMub3B0aW9ucy5hdHRyVmFsdWVQcm9jZXNzb3JzLCBub2RlLmF0dHJpYnV0ZXNba2V5XSwga2V5KSA6IG5vZGUuYXR0cmlidXRlc1trZXldO1xuICAgICAgICAgICAgICBwcm9jZXNzZWRLZXkgPSBfdGhpcy5vcHRpb25zLmF0dHJOYW1lUHJvY2Vzc29ycyA/IHByb2Nlc3NJdGVtKF90aGlzLm9wdGlvbnMuYXR0ck5hbWVQcm9jZXNzb3JzLCBrZXkpIDoga2V5O1xuICAgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5tZXJnZUF0dHJzKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuYXNzaWduT3JQdXNoKG9iaiwgcHJvY2Vzc2VkS2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2JqW2F0dHJrZXldW3Byb2Nlc3NlZEtleV0gPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBvYmpbXCIjbmFtZVwiXSA9IF90aGlzLm9wdGlvbnMudGFnTmFtZVByb2Nlc3NvcnMgPyBwcm9jZXNzSXRlbShfdGhpcy5vcHRpb25zLnRhZ05hbWVQcm9jZXNzb3JzLCBub2RlLm5hbWUpIDogbm9kZS5uYW1lO1xuICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLnhtbG5zKSB7XG4gICAgICAgICAgICBvYmpbX3RoaXMub3B0aW9ucy54bWxuc2tleV0gPSB7XG4gICAgICAgICAgICAgIHVyaTogbm9kZS51cmksXG4gICAgICAgICAgICAgIGxvY2FsOiBub2RlLmxvY2FsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc3RhY2sucHVzaChvYmopO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICB0aGlzLnNheFBhcnNlci5vbmNsb3NldGFnID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgY2RhdGEsIGVtcHR5U3RyLCBrZXksIG5vZGUsIG5vZGVOYW1lLCBvYmosIG9iakNsb25lLCBvbGQsIHMsIHhwYXRoO1xuICAgICAgICAgIG9iaiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIG5vZGVOYW1lID0gb2JqW1wiI25hbWVcIl07XG4gICAgICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLmV4cGxpY2l0Q2hpbGRyZW4gfHwgIV90aGlzLm9wdGlvbnMucHJlc2VydmVDaGlsZHJlbk9yZGVyKSB7XG4gICAgICAgICAgICBkZWxldGUgb2JqW1wiI25hbWVcIl07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvYmouY2RhdGEgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNkYXRhID0gb2JqLmNkYXRhO1xuICAgICAgICAgICAgZGVsZXRlIG9iai5jZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcyA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChvYmpbY2hhcmtleV0ubWF0Y2goL15cXHMqJC8pICYmICFjZGF0YSkge1xuICAgICAgICAgICAgZW1wdHlTdHIgPSBvYmpbY2hhcmtleV07XG4gICAgICAgICAgICBkZWxldGUgb2JqW2NoYXJrZXldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy50cmltKSB7XG4gICAgICAgICAgICAgIG9ialtjaGFya2V5XSA9IG9ialtjaGFya2V5XS50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5ub3JtYWxpemUpIHtcbiAgICAgICAgICAgICAgb2JqW2NoYXJrZXldID0gb2JqW2NoYXJrZXldLnJlcGxhY2UoL1xcc3syLH0vZywgXCIgXCIpLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ialtjaGFya2V5XSA9IF90aGlzLm9wdGlvbnMudmFsdWVQcm9jZXNzb3JzID8gcHJvY2Vzc0l0ZW0oX3RoaXMub3B0aW9ucy52YWx1ZVByb2Nlc3NvcnMsIG9ialtjaGFya2V5XSwgbm9kZU5hbWUpIDogb2JqW2NoYXJrZXldO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAxICYmIGNoYXJrZXkgaW4gb2JqICYmICFfdGhpcy5FWFBMSUNJVF9DSEFSS0VZKSB7XG4gICAgICAgICAgICAgIG9iaiA9IG9ialtjaGFya2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgb2JqID0gX3RoaXMub3B0aW9ucy5lbXB0eVRhZyAhPT0gJycgPyBfdGhpcy5vcHRpb25zLmVtcHR5VGFnIDogZW1wdHlTdHI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLnZhbGlkYXRvciAhPSBudWxsKSB7XG4gICAgICAgICAgICB4cGF0aCA9IFwiL1wiICsgKChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIGksIGxlbiwgcmVzdWx0cztcbiAgICAgICAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBzdGFjay5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBzdGFja1tpXTtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gobm9kZVtcIiNuYW1lXCJdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH0pKCkpLmNvbmNhdChub2RlTmFtZSkuam9pbihcIi9cIik7XG4gICAgICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBlcnI7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiA9IF90aGlzLm9wdGlvbnMudmFsaWRhdG9yKHhwYXRoLCBzICYmIHNbbm9kZU5hbWVdLCBvYmopO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICAgICAgICAgICAgICBlcnIgPSBlcnJvcjE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5leHBsaWNpdENoaWxkcmVuICYmICFfdGhpcy5vcHRpb25zLm1lcmdlQXR0cnMgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICghX3RoaXMub3B0aW9ucy5wcmVzZXJ2ZUNoaWxkcmVuT3JkZXIpIHtcbiAgICAgICAgICAgICAgbm9kZSA9IHt9O1xuICAgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5hdHRya2V5IGluIG9iaikge1xuICAgICAgICAgICAgICAgIG5vZGVbX3RoaXMub3B0aW9ucy5hdHRya2V5XSA9IG9ialtfdGhpcy5vcHRpb25zLmF0dHJrZXldO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmpbX3RoaXMub3B0aW9ucy5hdHRya2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIV90aGlzLm9wdGlvbnMuY2hhcnNBc0NoaWxkcmVuICYmIF90aGlzLm9wdGlvbnMuY2hhcmtleSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBub2RlW190aGlzLm9wdGlvbnMuY2hhcmtleV0gPSBvYmpbX3RoaXMub3B0aW9ucy5jaGFya2V5XTtcbiAgICAgICAgICAgICAgICBkZWxldGUgb2JqW190aGlzLm9wdGlvbnMuY2hhcmtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG5vZGVbX3RoaXMub3B0aW9ucy5jaGlsZGtleV0gPSBvYmo7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb2JqID0gbm9kZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocykge1xuICAgICAgICAgICAgICBzW190aGlzLm9wdGlvbnMuY2hpbGRrZXldID0gc1tfdGhpcy5vcHRpb25zLmNoaWxka2V5XSB8fCBbXTtcbiAgICAgICAgICAgICAgb2JqQ2xvbmUgPSB7fTtcbiAgICAgICAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwob2JqLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBvYmpDbG9uZVtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc1tfdGhpcy5vcHRpb25zLmNoaWxka2V5XS5wdXNoKG9iakNsb25lKTtcbiAgICAgICAgICAgICAgZGVsZXRlIG9ialtcIiNuYW1lXCJdO1xuICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDEgJiYgY2hhcmtleSBpbiBvYmogJiYgIV90aGlzLkVYUExJQ0lUX0NIQVJLRVkpIHtcbiAgICAgICAgICAgICAgICBvYmogPSBvYmpbY2hhcmtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5hc3NpZ25PclB1c2gocywgbm9kZU5hbWUsIG9iaik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmV4cGxpY2l0Um9vdCkge1xuICAgICAgICAgICAgICBvbGQgPSBvYmo7XG4gICAgICAgICAgICAgIG9iaiA9IHt9O1xuICAgICAgICAgICAgICBvYmpbbm9kZU5hbWVdID0gb2xkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMucmVzdWx0T2JqZWN0ID0gb2JqO1xuICAgICAgICAgICAgX3RoaXMuc2F4UGFyc2VyLmVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KFwiZW5kXCIsIF90aGlzLnJlc3VsdE9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICBvbnRleHQgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgICB2YXIgY2hhckNoaWxkLCBzO1xuICAgICAgICAgIHMgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgc1tjaGFya2V5XSArPSB0ZXh0O1xuICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuZXhwbGljaXRDaGlsZHJlbiAmJiBfdGhpcy5vcHRpb25zLnByZXNlcnZlQ2hpbGRyZW5PcmRlciAmJiBfdGhpcy5vcHRpb25zLmNoYXJzQXNDaGlsZHJlbiAmJiAoX3RoaXMub3B0aW9ucy5pbmNsdWRlV2hpdGVDaGFycyB8fCB0ZXh0LnJlcGxhY2UoL1xcXFxuL2csICcnKS50cmltKCkgIT09ICcnKSkge1xuICAgICAgICAgICAgICBzW190aGlzLm9wdGlvbnMuY2hpbGRrZXldID0gc1tfdGhpcy5vcHRpb25zLmNoaWxka2V5XSB8fCBbXTtcbiAgICAgICAgICAgICAgY2hhckNoaWxkID0ge1xuICAgICAgICAgICAgICAgICcjbmFtZSc6ICdfX3RleHRfXydcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgY2hhckNoaWxkW2NoYXJrZXldID0gdGV4dDtcbiAgICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgY2hhckNoaWxkW2NoYXJrZXldID0gY2hhckNoaWxkW2NoYXJrZXldLnJlcGxhY2UoL1xcc3syLH0vZywgXCIgXCIpLnRyaW0oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzW190aGlzLm9wdGlvbnMuY2hpbGRrZXldLnB1c2goY2hhckNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgdGhpcy5zYXhQYXJzZXIub250ZXh0ID0gb250ZXh0O1xuICAgICAgcmV0dXJuIHRoaXMuc2F4UGFyc2VyLm9uY2RhdGEgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgICB2YXIgcztcbiAgICAgICAgICBzID0gb250ZXh0KHRleHQpO1xuICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gcy5jZGF0YSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTdHJpbmcgPSBmdW5jdGlvbihzdHIsIGNiKSB7XG4gICAgICB2YXIgZXJyO1xuICAgICAgaWYgKChjYiAhPSBudWxsKSAmJiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLm9uKFwiZW5kXCIsIGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICByZXR1cm4gY2IobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub24oXCJlcnJvclwiLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgc3RyID0gc3RyLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChzdHIudHJpbSgpID09PSAnJykge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVuZFwiLCBudWxsKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBib20uc3RyaXBCT00oc3RyKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hc3luYykge1xuICAgICAgICAgIHRoaXMucmVtYWluaW5nID0gc3RyO1xuICAgICAgICAgIHNldEltbWVkaWF0ZSh0aGlzLnByb2Nlc3NBc3luYyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2F4UGFyc2VyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNheFBhcnNlci53cml0ZShzdHIpLmNsb3NlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICAgICAgZXJyID0gZXJyb3IxO1xuICAgICAgICBpZiAoISh0aGlzLnNheFBhcnNlci5lcnJUaHJvd24gfHwgdGhpcy5zYXhQYXJzZXIuZW5kZWQpKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2F4UGFyc2VyLmVyclRocm93biA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zYXhQYXJzZXIuZW5kZWQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN0cmluZ1Byb21pc2UgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5wYXJzZVN0cmluZyhzdHIsIGZ1bmN0aW9uKGVyciwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gUGFyc2VyO1xuXG4gIH0pKGV2ZW50cyk7XG5cbiAgZXhwb3J0cy5wYXJzZVN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgYSwgYikge1xuICAgIHZhciBjYiwgb3B0aW9ucywgcGFyc2VyO1xuICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IGI7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdGlvbnMgPSBhO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBhO1xuICAgICAgfVxuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBwYXJzZXIgPSBuZXcgZXhwb3J0cy5QYXJzZXIob3B0aW9ucyk7XG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZVN0cmluZyhzdHIsIGNiKTtcbiAgfTtcblxuICBleHBvcnRzLnBhcnNlU3RyaW5nUHJvbWlzZSA9IGZ1bmN0aW9uKHN0ciwgYSkge1xuICAgIHZhciBvcHRpb25zLCBwYXJzZXI7XG4gICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IGE7XG4gICAgfVxuICAgIHBhcnNlciA9IG5ldyBleHBvcnRzLlBhcnNlcihvcHRpb25zKTtcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlU3RyaW5nUHJvbWlzZShzdHIpO1xuICB9O1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIHZhciBwcmVmaXhNYXRjaDtcblxuICBwcmVmaXhNYXRjaCA9IG5ldyBSZWdFeHAoLyg/IXhtbG5zKV4uKjovKTtcblxuICBleHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKTtcbiAgfTtcblxuICBleHBvcnRzLmZpcnN0Q2hhckxvd2VyQ2FzZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG4gIH07XG5cbiAgZXhwb3J0cy5zdHJpcFByZWZpeCA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShwcmVmaXhNYXRjaCwgJycpO1xuICB9O1xuXG4gIGV4cG9ydHMucGFyc2VOdW1iZXJzID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKCFpc05hTihzdHIpKSB7XG4gICAgICBzdHIgPSBzdHIgJSAxID09PSAwID8gcGFyc2VJbnQoc3RyLCAxMCkgOiBwYXJzZUZsb2F0KHN0cik7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgZXhwb3J0cy5wYXJzZUJvb2xlYW5zID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKC9eKD86dHJ1ZXxmYWxzZSkkL2kudGVzdChzdHIpKSB7XG4gICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9O1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIHZhciBidWlsZGVyLCBkZWZhdWx0cywgcGFyc2VyLCBwcm9jZXNzb3JzLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbiAgYnVpbGRlciA9IHJlcXVpcmUoJy4vYnVpbGRlcicpO1xuXG4gIHBhcnNlciA9IHJlcXVpcmUoJy4vcGFyc2VyJyk7XG5cbiAgcHJvY2Vzc29ycyA9IHJlcXVpcmUoJy4vcHJvY2Vzc29ycycpO1xuXG4gIGV4cG9ydHMuZGVmYXVsdHMgPSBkZWZhdWx0cy5kZWZhdWx0cztcblxuICBleHBvcnRzLnByb2Nlc3NvcnMgPSBwcm9jZXNzb3JzO1xuXG4gIGV4cG9ydHMuVmFsaWRhdGlvbkVycm9yID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoVmFsaWRhdGlvbkVycm9yLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFZhbGlkYXRpb25FcnJvcihtZXNzYWdlKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiBWYWxpZGF0aW9uRXJyb3I7XG5cbiAgfSkoRXJyb3IpO1xuXG4gIGV4cG9ydHMuQnVpbGRlciA9IGJ1aWxkZXIuQnVpbGRlcjtcblxuICBleHBvcnRzLlBhcnNlciA9IHBhcnNlci5QYXJzZXI7XG5cbiAgZXhwb3J0cy5wYXJzZVN0cmluZyA9IHBhcnNlci5wYXJzZVN0cmluZztcblxuICBleHBvcnRzLnBhcnNlU3RyaW5nUHJvbWlzZSA9IHBhcnNlci5wYXJzZVN0cmluZ1Byb21pc2U7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBEaXNjb25uZWN0ZWQ6IDEsXG4gICAgUHJlY2VkaW5nOiAyLFxuICAgIEZvbGxvd2luZzogNCxcbiAgICBDb250YWluczogOCxcbiAgICBDb250YWluZWRCeTogMTYsXG4gICAgSW1wbGVtZW50YXRpb25TcGVjaWZpYzogMzJcbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEVsZW1lbnQ6IDEsXG4gICAgQXR0cmlidXRlOiAyLFxuICAgIFRleHQ6IDMsXG4gICAgQ0RhdGE6IDQsXG4gICAgRW50aXR5UmVmZXJlbmNlOiA1LFxuICAgIEVudGl0eURlY2xhcmF0aW9uOiA2LFxuICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjogNyxcbiAgICBDb21tZW50OiA4LFxuICAgIERvY3VtZW50OiA5LFxuICAgIERvY1R5cGU6IDEwLFxuICAgIERvY3VtZW50RnJhZ21lbnQ6IDExLFxuICAgIE5vdGF0aW9uRGVjbGFyYXRpb246IDEyLFxuICAgIERlY2xhcmF0aW9uOiAyMDEsXG4gICAgUmF3OiAyMDIsXG4gICAgQXR0cmlidXRlRGVjbGFyYXRpb246IDIwMyxcbiAgICBFbGVtZW50RGVjbGFyYXRpb246IDIwNCxcbiAgICBEdW1teTogMjA1XG4gIH07XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgYXNzaWduLCBnZXRWYWx1ZSwgaXNBcnJheSwgaXNFbXB0eSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzUGxhaW5PYmplY3QsXG4gICAgc2xpY2UgPSBbXS5zbGljZSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGksIGtleSwgbGVuLCBzb3VyY2UsIHNvdXJjZXMsIHRhcmdldDtcbiAgICB0YXJnZXQgPSBhcmd1bWVudHNbMF0sIHNvdXJjZXMgPSAyIDw9IGFyZ3VtZW50cy5sZW5ndGggPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkgOiBbXTtcbiAgICBpZiAoaXNGdW5jdGlvbihPYmplY3QuYXNzaWduKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHNvdXJjZSA9IHNvdXJjZXNbaV07XG4gICAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbCkge1xuICAgIHJldHVybiAhIXZhbCAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgfTtcblxuICBpc09iamVjdCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgIHZhciByZWY7XG4gICAgcmV0dXJuICEhdmFsICYmICgocmVmID0gdHlwZW9mIHZhbCkgPT09ICdmdW5jdGlvbicgfHwgcmVmID09PSAnb2JqZWN0Jyk7XG4gIH07XG5cbiAgaXNBcnJheSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKEFycmF5LmlzQXJyYXkpKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfVxuICB9O1xuXG4gIGlzRW1wdHkgPSBmdW5jdGlvbih2YWwpIHtcbiAgICB2YXIga2V5O1xuICAgIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJldHVybiAhdmFsLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChrZXkgaW4gdmFsKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHZhbCwga2V5KSkgY29udGludWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBpc1BsYWluT2JqZWN0ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgdmFyIGN0b3IsIHByb3RvO1xuICAgIHJldHVybiBpc09iamVjdCh2YWwpICYmIChwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpKSAmJiAoY3RvciA9IHByb3RvLmNvbnN0cnVjdG9yKSAmJiAodHlwZW9mIGN0b3IgPT09ICdmdW5jdGlvbicpICYmIChjdG9yIGluc3RhbmNlb2YgY3RvcikgJiYgKEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChPYmplY3QpKTtcbiAgfTtcblxuICBnZXRWYWx1ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChpc0Z1bmN0aW9uKG9iai52YWx1ZU9mKSkge1xuICAgICAgcmV0dXJuIG9iai52YWx1ZU9mKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzLmFzc2lnbiA9IGFzc2lnbjtcblxuICBtb2R1bGUuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuICBtb2R1bGUuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG4gIG1vZHVsZS5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG4gIG1vZHVsZS5leHBvcnRzLmlzRW1wdHkgPSBpc0VtcHR5O1xuXG4gIG1vZHVsZS5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xuXG4gIG1vZHVsZS5leHBvcnRzLmdldFZhbHVlID0gZ2V0VmFsdWU7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBOb25lOiAwLFxuICAgIE9wZW5UYWc6IDEsXG4gICAgSW5zaWRlVGFnOiAyLFxuICAgIENsb3NlVGFnOiAzXG4gIH07XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTEF0dHJpYnV0ZSwgWE1MTm9kZTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxBdHRyaWJ1dGUgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MQXR0cmlidXRlKHBhcmVudCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMucGFyZW50Lm9wdGlvbnM7XG4gICAgICAgIHRoaXMuc3RyaW5naWZ5ID0gdGhpcy5wYXJlbnQuc3RyaW5naWZ5O1xuICAgICAgfVxuICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGF0dHJpYnV0ZSBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuc3RyaW5naWZ5Lm5hbWUobmFtZSk7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkuYXR0VmFsdWUodmFsdWUpO1xuICAgICAgdGhpcy50eXBlID0gTm9kZVR5cGUuQXR0cmlidXRlO1xuICAgICAgdGhpcy5pc0lkID0gZmFsc2U7XG4gICAgICB0aGlzLnNjaGVtYVR5cGVJbmZvID0gbnVsbDtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MQXR0cmlidXRlLnByb3RvdHlwZSwgJ25vZGVUeXBlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxBdHRyaWJ1dGUucHJvdG90eXBlLCAnb3duZXJFbGVtZW50Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUsICd0ZXh0Q29udGVudCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPSB2YWx1ZSB8fCAnJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxBdHRyaWJ1dGUucHJvdG90eXBlLCAnbmFtZXNwYWNlVVJJJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUsICdwcmVmaXgnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MQXR0cmlidXRlLnByb3RvdHlwZSwgJ2xvY2FsTmFtZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MQXR0cmlidXRlLnByb3RvdHlwZSwgJ3NwZWNpZmllZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MQXR0cmlidXRlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5hdHRyaWJ1dGUodGhpcywgdGhpcy5vcHRpb25zLndyaXRlci5maWx0ZXJPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9O1xuXG4gICAgWE1MQXR0cmlidXRlLnByb3RvdHlwZS5kZWJ1Z0luZm8gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICBuYW1lID0gbmFtZSB8fCB0aGlzLm5hbWU7XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcInBhcmVudDogPFwiICsgdGhpcy5wYXJlbnQubmFtZSArIFwiPlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlOiB7XCIgKyBuYW1lICsgXCJ9LCBwYXJlbnQ6IDxcIiArIHRoaXMucGFyZW50Lm5hbWUgKyBcIj5cIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MQXR0cmlidXRlLnByb3RvdHlwZS5pc0VxdWFsTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWVzcGFjZVVSSSAhPT0gdGhpcy5uYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUucHJlZml4ICE9PSB0aGlzLnByZWZpeCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5sb2NhbE5hbWUgIT09IHRoaXMubG9jYWxOYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MQXR0cmlidXRlO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTENEYXRhLCBYTUxDaGFyYWN0ZXJEYXRhLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgWE1MQ2hhcmFjdGVyRGF0YSA9IHJlcXVpcmUoJy4vWE1MQ2hhcmFjdGVyRGF0YScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MQ0RhdGEgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxDRGF0YSwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxDRGF0YShwYXJlbnQsIHRleHQpIHtcbiAgICAgIFhNTENEYXRhLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgQ0RBVEEgdGV4dC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IFwiI2NkYXRhLXNlY3Rpb25cIjtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkNEYXRhO1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RyaW5naWZ5LmNkYXRhKHRleHQpO1xuICAgIH1cblxuICAgIFhNTENEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTENEYXRhLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmNkYXRhKHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxDRGF0YTtcblxuICB9KShYTUxDaGFyYWN0ZXJEYXRhKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxDaGFyYWN0ZXJEYXRhLCBYTUxOb2RlLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MQ2hhcmFjdGVyRGF0YSA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTENoYXJhY3RlckRhdGEsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MQ2hhcmFjdGVyRGF0YShwYXJlbnQpIHtcbiAgICAgIFhNTENoYXJhY3RlckRhdGEuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUsICdkYXRhJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLCAndGV4dENvbnRlbnQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlID0gdmFsdWUgfHwgJyc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLnN1YnN0cmluZ0RhdGEgPSBmdW5jdGlvbihvZmZzZXQsIGNvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLmFwcGVuZERhdGEgPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuaW5zZXJ0RGF0YSA9IGZ1bmN0aW9uKG9mZnNldCwgYXJnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLmRlbGV0ZURhdGEgPSBmdW5jdGlvbihvZmZzZXQsIGNvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLnJlcGxhY2VEYXRhID0gZnVuY3Rpb24ob2Zmc2V0LCBjb3VudCwgYXJnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLmlzRXF1YWxOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKCFYTUxDaGFyYWN0ZXJEYXRhLl9fc3VwZXJfXy5pc0VxdWFsTm9kZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLmlzRXF1YWxOb2RlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmRhdGEgIT09IHRoaXMuZGF0YSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTENoYXJhY3RlckRhdGE7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTENoYXJhY3RlckRhdGEsIFhNTENvbW1lbnQsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxDaGFyYWN0ZXJEYXRhID0gcmVxdWlyZSgnLi9YTUxDaGFyYWN0ZXJEYXRhJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxDb21tZW50ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MQ29tbWVudCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxDb21tZW50KHBhcmVudCwgdGV4dCkge1xuICAgICAgWE1MQ29tbWVudC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGNvbW1lbnQgdGV4dC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IFwiI2NvbW1lbnRcIjtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkNvbW1lbnQ7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkuY29tbWVudCh0ZXh0KTtcbiAgICB9XG5cbiAgICBYTUxDb21tZW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTENvbW1lbnQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIuY29tbWVudCh0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MQ29tbWVudDtcblxuICB9KShYTUxDaGFyYWN0ZXJEYXRhKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxET01Db25maWd1cmF0aW9uLCBYTUxET01FcnJvckhhbmRsZXIsIFhNTERPTVN0cmluZ0xpc3Q7XG5cbiAgWE1MRE9NRXJyb3JIYW5kbGVyID0gcmVxdWlyZSgnLi9YTUxET01FcnJvckhhbmRsZXInKTtcblxuICBYTUxET01TdHJpbmdMaXN0ID0gcmVxdWlyZSgnLi9YTUxET01TdHJpbmdMaXN0Jyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxET01Db25maWd1cmF0aW9uID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTERPTUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICB2YXIgY2xvbmVkU2VsZjtcbiAgICAgIHRoaXMuZGVmYXVsdFBhcmFtcyA9IHtcbiAgICAgICAgXCJjYW5vbmljYWwtZm9ybVwiOiBmYWxzZSxcbiAgICAgICAgXCJjZGF0YS1zZWN0aW9uc1wiOiBmYWxzZSxcbiAgICAgICAgXCJjb21tZW50c1wiOiBmYWxzZSxcbiAgICAgICAgXCJkYXRhdHlwZS1ub3JtYWxpemF0aW9uXCI6IGZhbHNlLFxuICAgICAgICBcImVsZW1lbnQtY29udGVudC13aGl0ZXNwYWNlXCI6IHRydWUsXG4gICAgICAgIFwiZW50aXRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJlcnJvci1oYW5kbGVyXCI6IG5ldyBYTUxET01FcnJvckhhbmRsZXIoKSxcbiAgICAgICAgXCJpbmZvc2V0XCI6IHRydWUsXG4gICAgICAgIFwidmFsaWRhdGUtaWYtc2NoZW1hXCI6IGZhbHNlLFxuICAgICAgICBcIm5hbWVzcGFjZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJuYW1lc3BhY2UtZGVjbGFyYXRpb25zXCI6IHRydWUsXG4gICAgICAgIFwibm9ybWFsaXplLWNoYXJhY3RlcnNcIjogZmFsc2UsXG4gICAgICAgIFwic2NoZW1hLWxvY2F0aW9uXCI6ICcnLFxuICAgICAgICBcInNjaGVtYS10eXBlXCI6ICcnLFxuICAgICAgICBcInNwbGl0LWNkYXRhLXNlY3Rpb25zXCI6IHRydWUsXG4gICAgICAgIFwidmFsaWRhdGVcIjogZmFsc2UsXG4gICAgICAgIFwid2VsbC1mb3JtZWRcIjogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHRoaXMucGFyYW1zID0gY2xvbmVkU2VsZiA9IE9iamVjdC5jcmVhdGUodGhpcy5kZWZhdWx0UGFyYW1zKTtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRE9NQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICdwYXJhbWV0ZXJOYW1lcycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgWE1MRE9NU3RyaW5nTGlzdChPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRQYXJhbXMpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTERPTUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldFBhcmFtZXRlciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIGlmICh0aGlzLnBhcmFtcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXNbbmFtZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRE9NQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuY2FuU2V0UGFyYW1ldGVyID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBYTUxET01Db25maWd1cmF0aW9uLnByb3RvdHlwZS5zZXRQYXJhbWV0ZXIgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zW25hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVsZXRlIHRoaXMucGFyYW1zW25hbWVdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRE9NQ29uZmlndXJhdGlvbjtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTERPTUVycm9ySGFuZGxlcjtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERPTUVycm9ySGFuZGxlciA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBYTUxET01FcnJvckhhbmRsZXIoKSB7fVxuXG4gICAgWE1MRE9NRXJyb3JIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFcnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRE9NRXJyb3JIYW5kbGVyO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MRE9NSW1wbGVtZW50YXRpb247XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxET01JbXBsZW1lbnRhdGlvbiA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBYTUxET01JbXBsZW1lbnRhdGlvbigpIHt9XG5cbiAgICBYTUxET01JbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuaGFzRmVhdHVyZSA9IGZ1bmN0aW9uKGZlYXR1cmUsIHZlcnNpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBYTUxET01JbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuY3JlYXRlRG9jdW1lbnRUeXBlID0gZnVuY3Rpb24ocXVhbGlmaWVkTmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgWE1MRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50ID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCBkb2N0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgWE1MRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmNyZWF0ZUhUTUxEb2N1bWVudCA9IGZ1bmN0aW9uKHRpdGxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgWE1MRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmdldEZlYXR1cmUgPSBmdW5jdGlvbihmZWF0dXJlLCB2ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTERPTUltcGxlbWVudGF0aW9uO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MRE9NU3RyaW5nTGlzdDtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERPTVN0cmluZ0xpc3QgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MRE9NU3RyaW5nTGlzdChhcnIpIHtcbiAgICAgIHRoaXMuYXJyID0gYXJyIHx8IFtdO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxET01TdHJpbmdMaXN0LnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFyci5sZW5ndGg7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxET01TdHJpbmdMaXN0LnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFycltpbmRleF0gfHwgbnVsbDtcbiAgICB9O1xuXG4gICAgWE1MRE9NU3RyaW5nTGlzdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiB0aGlzLmFyci5pbmRleE9mKHN0cikgIT09IC0xO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRE9NU3RyaW5nTGlzdDtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxEVERBdHRMaXN0LCBYTUxOb2RlLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRFREQXR0TGlzdCA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTERUREF0dExpc3QsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRFREQXR0TGlzdChwYXJlbnQsIGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIFhNTERUREF0dExpc3QuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmIChlbGVtZW50TmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGVsZW1lbnQgbmFtZS4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBEVEQgYXR0cmlidXRlIG5hbWUuIFwiICsgdGhpcy5kZWJ1Z0luZm8oZWxlbWVudE5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghYXR0cmlidXRlVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIERURCBhdHRyaWJ1dGUgdHlwZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhlbGVtZW50TmFtZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCFkZWZhdWx0VmFsdWVUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGF0dHJpYnV0ZSBkZWZhdWx0LiBcIiArIHRoaXMuZGVidWdJbmZvKGVsZW1lbnROYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlVHlwZS5pbmRleE9mKCcjJykgIT09IDApIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlVHlwZSA9ICcjJyArIGRlZmF1bHRWYWx1ZVR5cGU7XG4gICAgICB9XG4gICAgICBpZiAoIWRlZmF1bHRWYWx1ZVR5cGUubWF0Y2goL14oI1JFUVVJUkVEfCNJTVBMSUVEfCNGSVhFRHwjREVGQVVMVCkkLykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkZWZhdWx0IHZhbHVlIHR5cGU7IGV4cGVjdGVkOiAjUkVRVUlSRUQsICNJTVBMSUVELCAjRklYRUQgb3IgI0RFRkFVTFQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oZWxlbWVudE5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgIWRlZmF1bHRWYWx1ZVR5cGUubWF0Y2goL14oI0ZJWEVEfCNERUZBVUxUKSQvKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWZhdWx0IHZhbHVlIG9ubHkgYXBwbGllcyB0byAjRklYRUQgb3IgI0RFRkFVTFQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oZWxlbWVudE5hbWUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWxlbWVudE5hbWUgPSB0aGlzLnN0cmluZ2lmeS5uYW1lKGVsZW1lbnROYW1lKTtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkF0dHJpYnV0ZURlY2xhcmF0aW9uO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVOYW1lID0gdGhpcy5zdHJpbmdpZnkubmFtZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRoaXMuc3RyaW5naWZ5LmR0ZEF0dFR5cGUoYXR0cmlidXRlVHlwZSk7XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdGhpcy5zdHJpbmdpZnkuZHRkQXR0RGVmYXVsdChkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gZGVmYXVsdFZhbHVlVHlwZTtcbiAgICB9XG5cbiAgICBYTUxEVERBdHRMaXN0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmR0ZEF0dExpc3QodGhpcywgdGhpcy5vcHRpb25zLndyaXRlci5maWx0ZXJPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTERUREF0dExpc3Q7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTERUREVsZW1lbnQsIFhNTE5vZGUsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxEVERFbGVtZW50ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRFRERWxlbWVudCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxEVERFbGVtZW50KHBhcmVudCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIFhNTERUREVsZW1lbnQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBEVEQgZWxlbWVudCBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9ICcoI1BDREFUQSknO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gJygnICsgdmFsdWUuam9pbignLCcpICsgJyknO1xuICAgICAgfVxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5zdHJpbmdpZnkubmFtZShuYW1lKTtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkVsZW1lbnREZWNsYXJhdGlvbjtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0cmluZ2lmeS5kdGRFbGVtZW50VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIFhNTERUREVsZW1lbnQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIuZHRkRWxlbWVudCh0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRFRERWxlbWVudDtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MRFRERW50aXR5LCBYTUxOb2RlLCBpc09iamVjdCxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9VdGlsaXR5JykuaXNPYmplY3Q7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRFRERW50aXR5ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRFRERW50aXR5LCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTERUREVudGl0eShwYXJlbnQsIHBlLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgWE1MRFRERW50aXR5Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGVudGl0eSBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGVudGl0eSB2YWx1ZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBlID0gISFwZTtcbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuc3RyaW5naWZ5Lm5hbWUobmFtZSk7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5FbnRpdHlEZWNsYXJhdGlvbjtcbiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0cmluZ2lmeS5kdGRFbnRpdHlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWwgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF2YWx1ZS5wdWJJRCAmJiAhdmFsdWUuc3lzSUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQdWJsaWMgYW5kL29yIHN5c3RlbSBpZGVudGlmaWVycyBhcmUgcmVxdWlyZWQgZm9yIGFuIGV4dGVybmFsIGVudGl0eS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLnB1YklEICYmICF2YWx1ZS5zeXNJRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN5c3RlbSBpZGVudGlmaWVyIGlzIHJlcXVpcmVkIGZvciBhIHB1YmxpYyBleHRlcm5hbCBlbnRpdHkuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW50ZXJuYWwgPSBmYWxzZTtcbiAgICAgICAgaWYgKHZhbHVlLnB1YklEICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnB1YklEID0gdGhpcy5zdHJpbmdpZnkuZHRkUHViSUQodmFsdWUucHViSUQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZS5zeXNJRCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5zeXNJRCA9IHRoaXMuc3RyaW5naWZ5LmR0ZFN5c0lEKHZhbHVlLnN5c0lEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUubkRhdGEgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMubkRhdGEgPSB0aGlzLnN0cmluZ2lmeS5kdGRORGF0YSh2YWx1ZS5uRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGUgJiYgdGhpcy5uRGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdGF0aW9uIGRlY2xhcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIGEgcGFyYW1ldGVyIGVudGl0eS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRERW50aXR5LnByb3RvdHlwZSwgJ3B1YmxpY0lkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHViSUQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRERW50aXR5LnByb3RvdHlwZSwgJ3N5c3RlbUlkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3lzSUQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRERW50aXR5LnByb3RvdHlwZSwgJ25vdGF0aW9uTmFtZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5EYXRhIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRERW50aXR5LnByb3RvdHlwZSwgJ2lucHV0RW5jb2RpbmcnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEVERFbnRpdHkucHJvdG90eXBlLCAneG1sRW5jb2RpbmcnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEVERFbnRpdHkucHJvdG90eXBlLCAneG1sVmVyc2lvbicsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MRFRERW50aXR5LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmR0ZEVudGl0eSh0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRFRERW50aXR5O1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxEVEROb3RhdGlvbiwgWE1MTm9kZSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERURE5vdGF0aW9uID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRFRETm90YXRpb24sIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRFRETm90YXRpb24ocGFyZW50LCBuYW1lLCB2YWx1ZSkge1xuICAgICAgWE1MRFRETm90YXRpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBEVEQgbm90YXRpb24gbmFtZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXZhbHVlLnB1YklEICYmICF2YWx1ZS5zeXNJRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQdWJsaWMgb3Igc3lzdGVtIGlkZW50aWZpZXJzIGFyZSByZXF1aXJlZCBmb3IgYW4gZXh0ZXJuYWwgZW50aXR5LiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuc3RyaW5naWZ5Lm5hbWUobmFtZSk7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5Ob3RhdGlvbkRlY2xhcmF0aW9uO1xuICAgICAgaWYgKHZhbHVlLnB1YklEICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5wdWJJRCA9IHRoaXMuc3RyaW5naWZ5LmR0ZFB1YklEKHZhbHVlLnB1YklEKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZS5zeXNJRCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3lzSUQgPSB0aGlzLnN0cmluZ2lmeS5kdGRTeXNJRCh2YWx1ZS5zeXNJRCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERURE5vdGF0aW9uLnByb3RvdHlwZSwgJ3B1YmxpY0lkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHViSUQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRETm90YXRpb24ucHJvdG90eXBlLCAnc3lzdGVtSWQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zeXNJRDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTERURE5vdGF0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmR0ZE5vdGF0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEVEROb3RhdGlvbjtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MRGVjbGFyYXRpb24sIFhNTE5vZGUsIGlzT2JqZWN0LFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgaXNPYmplY3QgPSByZXF1aXJlKCcuL1V0aWxpdHknKS5pc09iamVjdDtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxEZWNsYXJhdGlvbiA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTERlY2xhcmF0aW9uLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTERlY2xhcmF0aW9uKHBhcmVudCwgdmVyc2lvbiwgZW5jb2RpbmcsIHN0YW5kYWxvbmUpIHtcbiAgICAgIHZhciByZWY7XG4gICAgICBYTUxEZWNsYXJhdGlvbi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgaWYgKGlzT2JqZWN0KHZlcnNpb24pKSB7XG4gICAgICAgIHJlZiA9IHZlcnNpb24sIHZlcnNpb24gPSByZWYudmVyc2lvbiwgZW5jb2RpbmcgPSByZWYuZW5jb2RpbmcsIHN0YW5kYWxvbmUgPSByZWYuc3RhbmRhbG9uZTtcbiAgICAgIH1cbiAgICAgIGlmICghdmVyc2lvbikge1xuICAgICAgICB2ZXJzaW9uID0gJzEuMCc7XG4gICAgICB9XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5EZWNsYXJhdGlvbjtcbiAgICAgIHRoaXMudmVyc2lvbiA9IHRoaXMuc3RyaW5naWZ5LnhtbFZlcnNpb24odmVyc2lvbik7XG4gICAgICBpZiAoZW5jb2RpbmcgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVuY29kaW5nID0gdGhpcy5zdHJpbmdpZnkueG1sRW5jb2RpbmcoZW5jb2RpbmcpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YW5kYWxvbmUgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN0YW5kYWxvbmUgPSB0aGlzLnN0cmluZ2lmeS54bWxTdGFuZGFsb25lKHN0YW5kYWxvbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFhNTERlY2xhcmF0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmRlY2xhcmF0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEZWNsYXJhdGlvbjtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MRFREQXR0TGlzdCwgWE1MRFRERWxlbWVudCwgWE1MRFRERW50aXR5LCBYTUxEVEROb3RhdGlvbiwgWE1MRG9jVHlwZSwgWE1MTmFtZWROb2RlTWFwLCBYTUxOb2RlLCBpc09iamVjdCxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9VdGlsaXR5JykuaXNPYmplY3Q7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIFhNTERUREF0dExpc3QgPSByZXF1aXJlKCcuL1hNTERUREF0dExpc3QnKTtcblxuICBYTUxEVERFbnRpdHkgPSByZXF1aXJlKCcuL1hNTERUREVudGl0eScpO1xuXG4gIFhNTERUREVsZW1lbnQgPSByZXF1aXJlKCcuL1hNTERUREVsZW1lbnQnKTtcblxuICBYTUxEVEROb3RhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRFRETm90YXRpb24nKTtcblxuICBYTUxOYW1lZE5vZGVNYXAgPSByZXF1aXJlKCcuL1hNTE5hbWVkTm9kZU1hcCcpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRG9jVHlwZSA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTERvY1R5cGUsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRG9jVHlwZShwYXJlbnQsIHB1YklELCBzeXNJRCkge1xuICAgICAgdmFyIGNoaWxkLCBpLCBsZW4sIHJlZiwgcmVmMSwgcmVmMjtcbiAgICAgIFhNTERvY1R5cGUuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkRvY1R5cGU7XG4gICAgICBpZiAocGFyZW50LmNoaWxkcmVuKSB7XG4gICAgICAgIHJlZiA9IHBhcmVudC5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWZbaV07XG4gICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IE5vZGVUeXBlLkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IGNoaWxkLm5hbWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZG9jdW1lbnRPYmplY3QgPSBwYXJlbnQ7XG4gICAgICBpZiAoaXNPYmplY3QocHViSUQpKSB7XG4gICAgICAgIHJlZjEgPSBwdWJJRCwgcHViSUQgPSByZWYxLnB1YklELCBzeXNJRCA9IHJlZjEuc3lzSUQ7XG4gICAgICB9XG4gICAgICBpZiAoc3lzSUQgPT0gbnVsbCkge1xuICAgICAgICByZWYyID0gW3B1YklELCBzeXNJRF0sIHN5c0lEID0gcmVmMlswXSwgcHViSUQgPSByZWYyWzFdO1xuICAgICAgfVxuICAgICAgaWYgKHB1YklEICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5wdWJJRCA9IHRoaXMuc3RyaW5naWZ5LmR0ZFB1YklEKHB1YklEKTtcbiAgICAgIH1cbiAgICAgIGlmIChzeXNJRCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3lzSUQgPSB0aGlzLnN0cmluZ2lmeS5kdGRTeXNJRChzeXNJRCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY1R5cGUucHJvdG90eXBlLCAnZW50aXRpZXMnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2hpbGQsIGksIGxlbiwgbm9kZXMsIHJlZjtcbiAgICAgICAgbm9kZXMgPSB7fTtcbiAgICAgICAgcmVmID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWZbaV07XG4gICAgICAgICAgaWYgKChjaGlsZC50eXBlID09PSBOb2RlVHlwZS5FbnRpdHlEZWNsYXJhdGlvbikgJiYgIWNoaWxkLnBlKSB7XG4gICAgICAgICAgICBub2Rlc1tjaGlsZC5uYW1lXSA9IGNoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFhNTE5hbWVkTm9kZU1hcChub2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jVHlwZS5wcm90b3R5cGUsICdub3RhdGlvbnMnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2hpbGQsIGksIGxlbiwgbm9kZXMsIHJlZjtcbiAgICAgICAgbm9kZXMgPSB7fTtcbiAgICAgICAgcmVmID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWZbaV07XG4gICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IE5vZGVUeXBlLk5vdGF0aW9uRGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgIG5vZGVzW2NoaWxkLm5hbWVdID0gY2hpbGQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWE1MTmFtZWROb2RlTWFwKG5vZGVzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2NUeXBlLnByb3RvdHlwZSwgJ3B1YmxpY0lkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHViSUQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jVHlwZS5wcm90b3R5cGUsICdzeXN0ZW1JZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5c0lEO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY1R5cGUucHJvdG90eXBlLCAnaW50ZXJuYWxTdWJzZXQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5lbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTERUREVsZW1lbnQodGhpcywgbmFtZSwgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5hdHRMaXN0ID0gZnVuY3Rpb24oZWxlbWVudE5hbWUsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVR5cGUsIGRlZmF1bHRWYWx1ZVR5cGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MRFREQXR0TGlzdCh0aGlzLCBlbGVtZW50TmFtZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVHlwZSwgZGVmYXVsdFZhbHVlVHlwZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUuZW50aXR5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTERUREVudGl0eSh0aGlzLCBmYWxzZSwgbmFtZSwgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5wRW50aXR5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTERUREVudGl0eSh0aGlzLCB0cnVlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLm5vdGF0aW9uID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTERURE5vdGF0aW9uKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5kb2NUeXBlKHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLmVsZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50KG5hbWUsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUuYXR0ID0gZnVuY3Rpb24oZWxlbWVudE5hbWUsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVR5cGUsIGRlZmF1bHRWYWx1ZVR5cGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0TGlzdChlbGVtZW50TmFtZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVHlwZSwgZGVmYXVsdFZhbHVlVHlwZSwgZGVmYXVsdFZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUuZW50ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmVudGl0eShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLnBlbnQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucEVudGl0eShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLm5vdCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub3RhdGlvbihuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLnVwID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290KCkgfHwgdGhpcy5kb2N1bWVudE9iamVjdDtcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUuaXNFcXVhbE5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICBpZiAoIVhNTERvY1R5cGUuX19zdXBlcl9fLmlzRXF1YWxOb2RlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykuaXNFcXVhbE5vZGUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUubmFtZSAhPT0gdGhpcy5uYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnB1YmxpY0lkICE9PSB0aGlzLnB1YmxpY0lkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnN5c3RlbUlkICE9PSB0aGlzLnN5c3RlbUlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRG9jVHlwZTtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MRE9NQ29uZmlndXJhdGlvbiwgWE1MRE9NSW1wbGVtZW50YXRpb24sIFhNTERvY3VtZW50LCBYTUxOb2RlLCBYTUxTdHJpbmdXcml0ZXIsIFhNTFN0cmluZ2lmaWVyLCBpc1BsYWluT2JqZWN0LFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vVXRpbGl0eScpLmlzUGxhaW5PYmplY3Q7XG5cbiAgWE1MRE9NSW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL1hNTERPTUltcGxlbWVudGF0aW9uJyk7XG5cbiAgWE1MRE9NQ29uZmlndXJhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRE9NQ29uZmlndXJhdGlvbicpO1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxTdHJpbmdpZmllciA9IHJlcXVpcmUoJy4vWE1MU3RyaW5naWZpZXInKTtcblxuICBYTUxTdHJpbmdXcml0ZXIgPSByZXF1aXJlKCcuL1hNTFN0cmluZ1dyaXRlcicpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRG9jdW1lbnQgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxEb2N1bWVudCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxEb2N1bWVudChvcHRpb25zKSB7XG4gICAgICBYTUxEb2N1bWVudC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBudWxsKTtcbiAgICAgIHRoaXMubmFtZSA9IFwiI2RvY3VtZW50XCI7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5Eb2N1bWVudDtcbiAgICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBudWxsO1xuICAgICAgdGhpcy5kb21Db25maWcgPSBuZXcgWE1MRE9NQ29uZmlndXJhdGlvbigpO1xuICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICAgIGlmICghb3B0aW9ucy53cml0ZXIpIHtcbiAgICAgICAgb3B0aW9ucy53cml0ZXIgPSBuZXcgWE1MU3RyaW5nV3JpdGVyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5zdHJpbmdpZnkgPSBuZXcgWE1MU3RyaW5naWZpZXIob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ2ltcGxlbWVudGF0aW9uJywge1xuICAgICAgdmFsdWU6IG5ldyBYTUxET01JbXBsZW1lbnRhdGlvbigpXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAnZG9jdHlwZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaGlsZCwgaSwgbGVuLCByZWY7XG4gICAgICAgIHJlZiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNoaWxkID0gcmVmW2ldO1xuICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSBOb2RlVHlwZS5Eb2NUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ2RvY3VtZW50RWxlbWVudCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3RPYmplY3QgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICdpbnB1dEVuY29kaW5nJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAnc3RyaWN0RXJyb3JDaGVja2luZycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICd4bWxFbmNvZGluZycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCAhPT0gMCAmJiB0aGlzLmNoaWxkcmVuWzBdLnR5cGUgPT09IE5vZGVUeXBlLkRlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0uZW5jb2Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICd4bWxTdGFuZGFsb25lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoICE9PSAwICYmIHRoaXMuY2hpbGRyZW5bMF0udHlwZSA9PT0gTm9kZVR5cGUuRGVjbGFyYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblswXS5zdGFuZGFsb25lID09PSAneWVzJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICd4bWxWZXJzaW9uJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoICE9PSAwICYmIHRoaXMuY2hpbGRyZW5bMF0udHlwZSA9PT0gTm9kZVR5cGUuRGVjbGFyYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblswXS52ZXJzaW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIjEuMFwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAnVVJMJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVUkk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAnb3JpZ2luJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAnY29tcGF0TW9kZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ2NoYXJhY3RlclNldCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ2NvbnRlbnRUeXBlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24od3JpdGVyKSB7XG4gICAgICB2YXIgd3JpdGVyT3B0aW9ucztcbiAgICAgIHdyaXRlck9wdGlvbnMgPSB7fTtcbiAgICAgIGlmICghd3JpdGVyKSB7XG4gICAgICAgIHdyaXRlciA9IHRoaXMub3B0aW9ucy53cml0ZXI7XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qod3JpdGVyKSkge1xuICAgICAgICB3cml0ZXJPcHRpb25zID0gd3JpdGVyO1xuICAgICAgICB3cml0ZXIgPSB0aGlzLm9wdGlvbnMud3JpdGVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyaXRlci5kb2N1bWVudCh0aGlzLCB3cml0ZXIuZmlsdGVyT3B0aW9ucyh3cml0ZXJPcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmRvY3VtZW50KHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24odGFnTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVDb21tZW50ID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlQ0RBVEFTZWN0aW9uID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gZnVuY3Rpb24odGFyZ2V0LCBkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVBdHRyaWJ1dGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbnRpdHlSZWZlcmVuY2UgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGZ1bmN0aW9uKHRhZ25hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGUgPSBmdW5jdGlvbihpbXBvcnRlZE5vZGUsIGRlZXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnROUyA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlQXR0cmlidXRlTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudEJ5SWQgPSBmdW5jdGlvbihlbGVtZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmFkb3B0Tm9kZSA9IGZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUubm9ybWFsaXplRG9jdW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLnJlbmFtZU5vZGUgPSBmdW5jdGlvbihub2RlLCBuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBmdW5jdGlvbihjbGFzc05hbWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFdmVudCA9IGZ1bmN0aW9uKGV2ZW50SW50ZXJmYWNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVSYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlTm9kZUl0ZXJhdG9yID0gZnVuY3Rpb24ocm9vdCwgd2hhdFRvU2hvdywgZmlsdGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVUcmVlV2Fsa2VyID0gZnVuY3Rpb24ocm9vdCwgd2hhdFRvU2hvdywgZmlsdGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEb2N1bWVudDtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgV3JpdGVyU3RhdGUsIFhNTEF0dHJpYnV0ZSwgWE1MQ0RhdGEsIFhNTENvbW1lbnQsIFhNTERUREF0dExpc3QsIFhNTERUREVsZW1lbnQsIFhNTERUREVudGl0eSwgWE1MRFRETm90YXRpb24sIFhNTERlY2xhcmF0aW9uLCBYTUxEb2NUeXBlLCBYTUxEb2N1bWVudCwgWE1MRG9jdW1lbnRDQiwgWE1MRWxlbWVudCwgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uLCBYTUxSYXcsIFhNTFN0cmluZ1dyaXRlciwgWE1MU3RyaW5naWZpZXIsIFhNTFRleHQsIGdldFZhbHVlLCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNQbGFpbk9iamVjdCwgcmVmLFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICByZWYgPSByZXF1aXJlKCcuL1V0aWxpdHknKSwgaXNPYmplY3QgPSByZWYuaXNPYmplY3QsIGlzRnVuY3Rpb24gPSByZWYuaXNGdW5jdGlvbiwgaXNQbGFpbk9iamVjdCA9IHJlZi5pc1BsYWluT2JqZWN0LCBnZXRWYWx1ZSA9IHJlZi5nZXRWYWx1ZTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxEb2N1bWVudCA9IHJlcXVpcmUoJy4vWE1MRG9jdW1lbnQnKTtcblxuICBYTUxFbGVtZW50ID0gcmVxdWlyZSgnLi9YTUxFbGVtZW50Jyk7XG5cbiAgWE1MQ0RhdGEgPSByZXF1aXJlKCcuL1hNTENEYXRhJyk7XG5cbiAgWE1MQ29tbWVudCA9IHJlcXVpcmUoJy4vWE1MQ29tbWVudCcpO1xuXG4gIFhNTFJhdyA9IHJlcXVpcmUoJy4vWE1MUmF3Jyk7XG5cbiAgWE1MVGV4dCA9IHJlcXVpcmUoJy4vWE1MVGV4dCcpO1xuXG4gIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IHJlcXVpcmUoJy4vWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uJyk7XG5cbiAgWE1MRGVjbGFyYXRpb24gPSByZXF1aXJlKCcuL1hNTERlY2xhcmF0aW9uJyk7XG5cbiAgWE1MRG9jVHlwZSA9IHJlcXVpcmUoJy4vWE1MRG9jVHlwZScpO1xuXG4gIFhNTERUREF0dExpc3QgPSByZXF1aXJlKCcuL1hNTERUREF0dExpc3QnKTtcblxuICBYTUxEVERFbnRpdHkgPSByZXF1aXJlKCcuL1hNTERUREVudGl0eScpO1xuXG4gIFhNTERUREVsZW1lbnQgPSByZXF1aXJlKCcuL1hNTERUREVsZW1lbnQnKTtcblxuICBYTUxEVEROb3RhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRFRETm90YXRpb24nKTtcblxuICBYTUxBdHRyaWJ1dGUgPSByZXF1aXJlKCcuL1hNTEF0dHJpYnV0ZScpO1xuXG4gIFhNTFN0cmluZ2lmaWVyID0gcmVxdWlyZSgnLi9YTUxTdHJpbmdpZmllcicpO1xuXG4gIFhNTFN0cmluZ1dyaXRlciA9IHJlcXVpcmUoJy4vWE1MU3RyaW5nV3JpdGVyJyk7XG5cbiAgV3JpdGVyU3RhdGUgPSByZXF1aXJlKCcuL1dyaXRlclN0YXRlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxEb2N1bWVudENCID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTERvY3VtZW50Q0Iob3B0aW9ucywgb25EYXRhLCBvbkVuZCkge1xuICAgICAgdmFyIHdyaXRlck9wdGlvbnM7XG4gICAgICB0aGlzLm5hbWUgPSBcIj94bWxcIjtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkRvY3VtZW50O1xuICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICAgIHdyaXRlck9wdGlvbnMgPSB7fTtcbiAgICAgIGlmICghb3B0aW9ucy53cml0ZXIpIHtcbiAgICAgICAgb3B0aW9ucy53cml0ZXIgPSBuZXcgWE1MU3RyaW5nV3JpdGVyKCk7XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9ucy53cml0ZXIpKSB7XG4gICAgICAgIHdyaXRlck9wdGlvbnMgPSBvcHRpb25zLndyaXRlcjtcbiAgICAgICAgb3B0aW9ucy53cml0ZXIgPSBuZXcgWE1MU3RyaW5nV3JpdGVyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy53cml0ZXIgPSBvcHRpb25zLndyaXRlcjtcbiAgICAgIHRoaXMud3JpdGVyT3B0aW9ucyA9IHRoaXMud3JpdGVyLmZpbHRlck9wdGlvbnMod3JpdGVyT3B0aW9ucyk7XG4gICAgICB0aGlzLnN0cmluZ2lmeSA9IG5ldyBYTUxTdHJpbmdpZmllcihvcHRpb25zKTtcbiAgICAgIHRoaXMub25EYXRhQ2FsbGJhY2sgPSBvbkRhdGEgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgIHRoaXMub25FbmRDYWxsYmFjayA9IG9uRW5kIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICB0aGlzLmN1cnJlbnROb2RlID0gbnVsbDtcbiAgICAgIHRoaXMuY3VycmVudExldmVsID0gLTE7XG4gICAgICB0aGlzLm9wZW5UYWdzID0ge307XG4gICAgICB0aGlzLmRvY3VtZW50U3RhcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5kb2N1bWVudENvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yb290ID0gbnVsbDtcbiAgICB9XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5jcmVhdGVDaGlsZE5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgYXR0LCBhdHROYW1lLCBhdHRyaWJ1dGVzLCBjaGlsZCwgaSwgbGVuLCByZWYxLCByZWYyO1xuICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5DRGF0YTpcbiAgICAgICAgICB0aGlzLmNkYXRhKG5vZGUudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkNvbW1lbnQ6XG4gICAgICAgICAgdGhpcy5jb21tZW50KG5vZGUudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkVsZW1lbnQ6XG4gICAgICAgICAgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICAgIHJlZjEgPSBub2RlLmF0dHJpYnM7XG4gICAgICAgICAgZm9yIChhdHROYW1lIGluIHJlZjEpIHtcbiAgICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZjEsIGF0dE5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGF0dCA9IHJlZjFbYXR0TmFtZV07XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2F0dE5hbWVdID0gYXR0LnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5vZGUobm9kZS5uYW1lLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5EdW1teTpcbiAgICAgICAgICB0aGlzLmR1bW15KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuUmF3OlxuICAgICAgICAgIHRoaXMucmF3KG5vZGUudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLlRleHQ6XG4gICAgICAgICAgdGhpcy50ZXh0KG5vZGUudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjpcbiAgICAgICAgICB0aGlzLmluc3RydWN0aW9uKG5vZGUudGFyZ2V0LCBub2RlLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIFhNTCBub2RlIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBpbiBhIEpTIG9iamVjdDogXCIgKyBub2RlLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgfVxuICAgICAgcmVmMiA9IG5vZGUuY2hpbGRyZW47XG4gICAgICBmb3IgKGkgPSAwLCBsZW4gPSByZWYyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmMltpXTtcbiAgICAgICAgdGhpcy5jcmVhdGVDaGlsZE5vZGUoY2hpbGQpO1xuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gTm9kZVR5cGUuRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMudXAoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmR1bW15ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUubm9kZSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHZhciByZWYxO1xuICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG5vZGUgbmFtZS5cIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yb290ICYmIHRoaXMuY3VycmVudExldmVsID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEb2N1bWVudCBjYW4gb25seSBoYXZlIG9uZSByb290IG5vZGUuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbmFtZSA9IGdldFZhbHVlKG5hbWUpO1xuICAgICAgaWYgKGF0dHJpYnV0ZXMgPT0gbnVsbCkge1xuICAgICAgICBhdHRyaWJ1dGVzID0ge307XG4gICAgICB9XG4gICAgICBhdHRyaWJ1dGVzID0gZ2V0VmFsdWUoYXR0cmlidXRlcyk7XG4gICAgICBpZiAoIWlzT2JqZWN0KGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIHJlZjEgPSBbYXR0cmlidXRlcywgdGV4dF0sIHRleHQgPSByZWYxWzBdLCBhdHRyaWJ1dGVzID0gcmVmMVsxXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudE5vZGUgPSBuZXcgWE1MRWxlbWVudCh0aGlzLCBuYW1lLCBhdHRyaWJ1dGVzKTtcbiAgICAgIHRoaXMuY3VycmVudE5vZGUuY2hpbGRyZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuY3VycmVudExldmVsKys7XG4gICAgICB0aGlzLm9wZW5UYWdzW3RoaXMuY3VycmVudExldmVsXSA9IHRoaXMuY3VycmVudE5vZGU7XG4gICAgICBpZiAodGV4dCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMudGV4dCh0ZXh0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5lbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgdmFyIGNoaWxkLCBpLCBsZW4sIG9sZFZhbGlkYXRpb25GbGFnLCByZWYxLCByb290O1xuICAgICAgaWYgKHRoaXMuY3VycmVudE5vZGUgJiYgdGhpcy5jdXJyZW50Tm9kZS50eXBlID09PSBOb2RlVHlwZS5Eb2NUeXBlKSB7XG4gICAgICAgIHRoaXMuZHRkRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkgfHwgaXNPYmplY3QobmFtZSkgfHwgaXNGdW5jdGlvbihuYW1lKSkge1xuICAgICAgICAgIG9sZFZhbGlkYXRpb25GbGFnID0gdGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbjtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICByb290ID0gbmV3IFhNTERvY3VtZW50KHRoaXMub3B0aW9ucykuZWxlbWVudCgnVEVNUF9ST09UJyk7XG4gICAgICAgICAgcm9vdC5lbGVtZW50KG5hbWUpO1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24gPSBvbGRWYWxpZGF0aW9uRmxhZztcbiAgICAgICAgICByZWYxID0gcm9vdC5jaGlsZHJlbjtcbiAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSByZWYxLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjaGlsZCA9IHJlZjFbaV07XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNoaWxkTm9kZShjaGlsZCk7XG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gTm9kZVR5cGUuRWxlbWVudCkge1xuICAgICAgICAgICAgICB0aGlzLnVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubm9kZShuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgYXR0TmFtZSwgYXR0VmFsdWU7XG4gICAgICBpZiAoIXRoaXMuY3VycmVudE5vZGUgfHwgdGhpcy5jdXJyZW50Tm9kZS5jaGlsZHJlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdHQoKSBjYW4gb25seSBiZSB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGFuIGVsZSgpIGNhbGwgaW4gY2FsbGJhY2sgbW9kZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5hbWUgPSBnZXRWYWx1ZShuYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdChuYW1lKSkge1xuICAgICAgICBmb3IgKGF0dE5hbWUgaW4gbmFtZSkge1xuICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKG5hbWUsIGF0dE5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgICBhdHRWYWx1ZSA9IG5hbWVbYXR0TmFtZV07XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGUoYXR0TmFtZSwgYXR0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmFwcGx5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZWVwTnVsbEF0dHJpYnV0ZXMgJiYgKHZhbHVlID09IG51bGwpKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Tm9kZS5hdHRyaWJzW25hbWVdID0gbmV3IFhNTEF0dHJpYnV0ZSh0aGlzLCBuYW1lLCBcIlwiKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Tm9kZS5hdHRyaWJzW25hbWVdID0gbmV3IFhNTEF0dHJpYnV0ZSh0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxUZXh0KHRoaXMsIHZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLnRleHQobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmNkYXRhID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxDRGF0YSh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5jZGF0YShub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuY29tbWVudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5vZGUgPSBuZXcgWE1MQ29tbWVudCh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5jb21tZW50KG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5yYXcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBub2RlID0gbmV3IFhNTFJhdyh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5yYXcobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmluc3RydWN0aW9uID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgdmFyIGksIGluc1RhcmdldCwgaW5zVmFsdWUsIGxlbiwgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkge1xuICAgICAgICB0YXJnZXQgPSBnZXRWYWx1ZSh0YXJnZXQpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHRhcmdldC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGluc1RhcmdldCA9IHRhcmdldFtpXTtcbiAgICAgICAgICB0aGlzLmluc3RydWN0aW9uKGluc1RhcmdldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodGFyZ2V0KSkge1xuICAgICAgICBmb3IgKGluc1RhcmdldCBpbiB0YXJnZXQpIHtcbiAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbCh0YXJnZXQsIGluc1RhcmdldCkpIGNvbnRpbnVlO1xuICAgICAgICAgIGluc1ZhbHVlID0gdGFyZ2V0W2luc1RhcmdldF07XG4gICAgICAgICAgdGhpcy5pbnN0cnVjdGlvbihpbnNUYXJnZXQsIGluc1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5hcHBseSgpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBuZXcgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRoaXMsIHRhcmdldCwgdmFsdWUpO1xuICAgICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24obm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRlY2xhcmF0aW9uID0gZnVuY3Rpb24odmVyc2lvbiwgZW5jb2RpbmcsIHN0YW5kYWxvbmUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgaWYgKHRoaXMuZG9jdW1lbnRTdGFydGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImRlY2xhcmF0aW9uKCkgbXVzdCBiZSB0aGUgZmlyc3Qgbm9kZS5cIik7XG4gICAgICB9XG4gICAgICBub2RlID0gbmV3IFhNTERlY2xhcmF0aW9uKHRoaXMsIHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmRlY2xhcmF0aW9uKG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5kb2N0eXBlID0gZnVuY3Rpb24ocm9vdCwgcHViSUQsIHN5c0lEKSB7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBpZiAocm9vdCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgcm9vdCBub2RlIG5hbWUuXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkdGQoKSBtdXN0IGNvbWUgYmVmb3JlIHRoZSByb290IG5vZGUuXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IG5ldyBYTUxEb2NUeXBlKHRoaXMsIHB1YklELCBzeXNJRCk7XG4gICAgICB0aGlzLmN1cnJlbnROb2RlLnJvb3ROb2RlTmFtZSA9IHJvb3Q7XG4gICAgICB0aGlzLmN1cnJlbnROb2RlLmNoaWxkcmVuID0gZmFsc2U7XG4gICAgICB0aGlzLmN1cnJlbnRMZXZlbCsrO1xuICAgICAgdGhpcy5vcGVuVGFnc1t0aGlzLmN1cnJlbnRMZXZlbF0gPSB0aGlzLmN1cnJlbnROb2RlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmR0ZEVsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBub2RlID0gbmV3IFhNTERUREVsZW1lbnQodGhpcywgbmFtZSwgdmFsdWUpO1xuICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIuZHRkRWxlbWVudChub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuYXR0TGlzdCA9IGZ1bmN0aW9uKGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxEVERBdHRMaXN0KHRoaXMsIGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIuZHRkQXR0TGlzdChub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuZW50aXR5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxEVERFbnRpdHkodGhpcywgZmFsc2UsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmR0ZEVudGl0eShub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUucEVudGl0eSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5vZGUgPSBuZXcgWE1MRFRERW50aXR5KHRoaXMsIHRydWUsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmR0ZEVudGl0eShub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUubm90YXRpb24gPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBub2RlID0gbmV3IFhNTERURE5vdGF0aW9uKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmR0ZE5vdGF0aW9uKG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS51cCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudExldmVsIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZG9jdW1lbnQgbm9kZSBoYXMgbm8gcGFyZW50LlwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1cnJlbnROb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnROb2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU5vZGUodGhpcy5jdXJyZW50Tm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcGVuTm9kZSh0aGlzLmN1cnJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xvc2VOb2RlKHRoaXMub3BlblRhZ3NbdGhpcy5jdXJyZW50TGV2ZWxdKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSB0aGlzLm9wZW5UYWdzW3RoaXMuY3VycmVudExldmVsXTtcbiAgICAgIHRoaXMuY3VycmVudExldmVsLS07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB3aGlsZSAodGhpcy5jdXJyZW50TGV2ZWwgPj0gMCkge1xuICAgICAgICB0aGlzLnVwKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5vbkVuZCgpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5vcGVuQ3VycmVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudE5vZGUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Tm9kZS5jaGlsZHJlbiA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5Ob2RlKHRoaXMuY3VycmVudE5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5vcGVuTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBhdHQsIGNodW5rLCBuYW1lLCByZWYxO1xuICAgICAgaWYgKCFub2RlLmlzT3Blbikge1xuICAgICAgICBpZiAoIXRoaXMucm9vdCAmJiB0aGlzLmN1cnJlbnRMZXZlbCA9PT0gMCAmJiBub2RlLnR5cGUgPT09IE5vZGVUeXBlLkVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnJvb3QgPSBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGNodW5rID0gJyc7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlLkVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLndyaXRlck9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgICAgIGNodW5rID0gdGhpcy53cml0ZXIuaW5kZW50KG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwpICsgJzwnICsgbm9kZS5uYW1lO1xuICAgICAgICAgIHJlZjEgPSBub2RlLmF0dHJpYnM7XG4gICAgICAgICAgZm9yIChuYW1lIGluIHJlZjEpIHtcbiAgICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZjEsIG5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGF0dCA9IHJlZjFbbmFtZV07XG4gICAgICAgICAgICBjaHVuayArPSB0aGlzLndyaXRlci5hdHRyaWJ1dGUoYXR0LCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2h1bmsgKz0gKG5vZGUuY2hpbGRyZW4gPyAnPicgOiAnLz4nKSArIHRoaXMud3JpdGVyLmVuZGxpbmUobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCk7XG4gICAgICAgICAgdGhpcy53cml0ZXJPcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMud3JpdGVyT3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICAgICAgY2h1bmsgPSB0aGlzLndyaXRlci5pbmRlbnQobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCkgKyAnPCFET0NUWVBFICcgKyBub2RlLnJvb3ROb2RlTmFtZTtcbiAgICAgICAgICBpZiAobm9kZS5wdWJJRCAmJiBub2RlLnN5c0lEKSB7XG4gICAgICAgICAgICBjaHVuayArPSAnIFBVQkxJQyBcIicgKyBub2RlLnB1YklEICsgJ1wiIFwiJyArIG5vZGUuc3lzSUQgKyAnXCInO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5zeXNJRCkge1xuICAgICAgICAgICAgY2h1bmsgKz0gJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjaHVuayArPSAnIFsnO1xuICAgICAgICAgICAgdGhpcy53cml0ZXJPcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlck9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgICAgICAgIGNodW5rICs9ICc+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2h1bmsgKz0gdGhpcy53cml0ZXIuZW5kbGluZShub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRGF0YShjaHVuaywgdGhpcy5jdXJyZW50TGV2ZWwpO1xuICAgICAgICByZXR1cm4gbm9kZS5pc09wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5jbG9zZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgY2h1bms7XG4gICAgICBpZiAoIW5vZGUuaXNDbG9zZWQpIHtcbiAgICAgICAgY2h1bmsgPSAnJztcbiAgICAgICAgdGhpcy53cml0ZXJPcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlLkVsZW1lbnQpIHtcbiAgICAgICAgICBjaHVuayA9IHRoaXMud3JpdGVyLmluZGVudChub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsKSArICc8LycgKyBub2RlLm5hbWUgKyAnPicgKyB0aGlzLndyaXRlci5lbmRsaW5lKG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rID0gdGhpcy53cml0ZXIuaW5kZW50KG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwpICsgJ10+JyArIHRoaXMud3JpdGVyLmVuZGxpbmUobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53cml0ZXJPcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgICAgdGhpcy5vbkRhdGEoY2h1bmssIHRoaXMuY3VycmVudExldmVsKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuaXNDbG9zZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihjaHVuaywgbGV2ZWwpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRTdGFydGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLm9uRGF0YUNhbGxiYWNrKGNodW5rLCBsZXZlbCArIDEpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb2N1bWVudENvbXBsZXRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5vbkVuZENhbGxiYWNrKCk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRlYnVnSW5mbyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJub2RlOiA8XCIgKyBuYW1lICsgXCI+XCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmVsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5ub2QgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS50eHQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRhdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZGF0YSh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmNvbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21tZW50KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuaW5zID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3Rpb24odGFyZ2V0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRlYyA9IGZ1bmN0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbih2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmR0ZCA9IGZ1bmN0aW9uKHJvb3QsIHB1YklELCBzeXNJRCkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jdHlwZShyb290LCBwdWJJRCwgc3lzSUQpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5lID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUubiA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2RhdGEodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5jID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbW1lbnQodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJhdyh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmkgPSBmdW5jdGlvbih0YXJnZXQsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbih0YXJnZXQsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuYXR0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50Tm9kZSAmJiB0aGlzLmN1cnJlbnROb2RlLnR5cGUgPT09IE5vZGVUeXBlLkRvY1R5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0TGlzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmEgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnROb2RlICYmIHRoaXMuY3VycmVudE5vZGUudHlwZSA9PT0gTm9kZVR5cGUuRG9jVHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRMaXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuZW50ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmVudGl0eShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLnBlbnQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucEVudGl0eShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLm5vdCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub3RhdGlvbihuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEb2N1bWVudENCO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTER1bW15LCBYTUxOb2RlLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRHVtbXkgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxEdW1teSwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxEdW1teShwYXJlbnQpIHtcbiAgICAgIFhNTER1bW15Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5EdW1teTtcbiAgICB9XG5cbiAgICBYTUxEdW1teS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxEdW1teS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEdW1teTtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MQXR0cmlidXRlLCBYTUxFbGVtZW50LCBYTUxOYW1lZE5vZGVNYXAsIFhNTE5vZGUsIGdldFZhbHVlLCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgcmVmLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgcmVmID0gcmVxdWlyZSgnLi9VdGlsaXR5JyksIGlzT2JqZWN0ID0gcmVmLmlzT2JqZWN0LCBpc0Z1bmN0aW9uID0gcmVmLmlzRnVuY3Rpb24sIGdldFZhbHVlID0gcmVmLmdldFZhbHVlO1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxBdHRyaWJ1dGUgPSByZXF1aXJlKCcuL1hNTEF0dHJpYnV0ZScpO1xuXG4gIFhNTE5hbWVkTm9kZU1hcCA9IHJlcXVpcmUoJy4vWE1MTmFtZWROb2RlTWFwJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxFbGVtZW50ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRWxlbWVudCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxFbGVtZW50KHBhcmVudCwgbmFtZSwgYXR0cmlidXRlcykge1xuICAgICAgdmFyIGNoaWxkLCBqLCBsZW4sIHJlZjE7XG4gICAgICBYTUxFbGVtZW50Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgZWxlbWVudCBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5zdHJpbmdpZnkubmFtZShuYW1lKTtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkVsZW1lbnQ7XG4gICAgICB0aGlzLmF0dHJpYnMgPSB7fTtcbiAgICAgIHRoaXMuc2NoZW1hVHlwZUluZm8gPSBudWxsO1xuICAgICAgaWYgKGF0dHJpYnV0ZXMgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZShhdHRyaWJ1dGVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gTm9kZVR5cGUuRG9jdW1lbnQpIHtcbiAgICAgICAgdGhpcy5pc1Jvb3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRvY3VtZW50T2JqZWN0ID0gcGFyZW50O1xuICAgICAgICBwYXJlbnQucm9vdE9iamVjdCA9IHRoaXM7XG4gICAgICAgIGlmIChwYXJlbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgICByZWYxID0gcGFyZW50LmNoaWxkcmVuO1xuICAgICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZjEubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGNoaWxkID0gcmVmMVtqXTtcbiAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSBOb2RlVHlwZS5Eb2NUeXBlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxFbGVtZW50LnByb3RvdHlwZSwgJ3RhZ05hbWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAnbmFtZXNwYWNlVVJJJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAncHJlZml4Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAnbG9jYWxOYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxFbGVtZW50LnByb3RvdHlwZSwgJ2lkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAnY2xhc3NOYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAnY2xhc3NMaXN0Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAnYXR0cmlidXRlcycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5hdHRyaWJ1dGVNYXAgfHwgIXRoaXMuYXR0cmlidXRlTWFwLm5vZGVzKSB7XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVNYXAgPSBuZXcgWE1MTmFtZWROb2RlTWFwKHRoaXMuYXR0cmlicyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlTWFwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhdHQsIGF0dE5hbWUsIGNsb25lZFNlbGYsIHJlZjE7XG4gICAgICBjbG9uZWRTZWxmID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgIGlmIChjbG9uZWRTZWxmLmlzUm9vdCkge1xuICAgICAgICBjbG9uZWRTZWxmLmRvY3VtZW50T2JqZWN0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNsb25lZFNlbGYuYXR0cmlicyA9IHt9O1xuICAgICAgcmVmMSA9IHRoaXMuYXR0cmlicztcbiAgICAgIGZvciAoYXR0TmFtZSBpbiByZWYxKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZjEsIGF0dE5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgYXR0ID0gcmVmMVthdHROYW1lXTtcbiAgICAgICAgY2xvbmVkU2VsZi5hdHRyaWJzW2F0dE5hbWVdID0gYXR0LmNsb25lKCk7XG4gICAgICB9XG4gICAgICBjbG9uZWRTZWxmLmNoaWxkcmVuID0gW107XG4gICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgdmFyIGNsb25lZENoaWxkO1xuICAgICAgICBjbG9uZWRDaGlsZCA9IGNoaWxkLmNsb25lKCk7XG4gICAgICAgIGNsb25lZENoaWxkLnBhcmVudCA9IGNsb25lZFNlbGY7XG4gICAgICAgIHJldHVybiBjbG9uZWRTZWxmLmNoaWxkcmVuLnB1c2goY2xvbmVkQ2hpbGQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY2xvbmVkU2VsZjtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuYXR0cmlidXRlID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBhdHROYW1lLCBhdHRWYWx1ZTtcbiAgICAgIGlmIChuYW1lICE9IG51bGwpIHtcbiAgICAgICAgbmFtZSA9IGdldFZhbHVlKG5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0KG5hbWUpKSB7XG4gICAgICAgIGZvciAoYXR0TmFtZSBpbiBuYW1lKSB7XG4gICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwobmFtZSwgYXR0TmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICAgIGF0dFZhbHVlID0gbmFtZVthdHROYW1lXTtcbiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZShhdHROYW1lLCBhdHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmtlZXBOdWxsQXR0cmlidXRlcyAmJiAodmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgICAgICB0aGlzLmF0dHJpYnNbbmFtZV0gPSBuZXcgWE1MQXR0cmlidXRlKHRoaXMsIG5hbWUsIFwiXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmF0dHJpYnNbbmFtZV0gPSBuZXcgWE1MQXR0cmlidXRlKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBhdHROYW1lLCBqLCBsZW47XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgYXR0cmlidXRlIG5hbWUuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICBuYW1lID0gZ2V0VmFsdWUobmFtZSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShuYW1lKSkge1xuICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSBuYW1lLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgYXR0TmFtZSA9IG5hbWVbal07XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYXR0cmlic1thdHROYW1lXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuYXR0cmlic1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmVsZW1lbnQodGhpcywgdGhpcy5vcHRpb25zLndyaXRlci5maWx0ZXJPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuYXR0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmEgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgaWYgKHRoaXMuYXR0cmlicy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJzW25hbWVdLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5vZGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICBpZiAodGhpcy5hdHRyaWJzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dHJpYnNbbmFtZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTm9kZSA9IGZ1bmN0aW9uKG5ld0F0dHIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTm9kZSA9IGZ1bmN0aW9uKG9sZEF0dHIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUsIHZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTm9kZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTm9kZU5TID0gZnVuY3Rpb24obmV3QXR0cikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuaGFzQXR0cmlidXRlID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlicy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuaGFzQXR0cmlidXRlTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5zZXRJZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIGlzSWQpIHtcbiAgICAgIGlmICh0aGlzLmF0dHJpYnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlic1tuYW1lXS5pc0lkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzSWQ7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnNldElkQXR0cmlidXRlTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgaXNJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5zZXRJZEF0dHJpYnV0ZU5vZGUgPSBmdW5jdGlvbihpZEF0dHIsIGlzSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBmdW5jdGlvbih0YWduYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gZnVuY3Rpb24oY2xhc3NOYW1lcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5pc0VxdWFsTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBpLCBqLCByZWYxO1xuICAgICAgaWYgKCFYTUxFbGVtZW50Ll9fc3VwZXJfXy5pc0VxdWFsTm9kZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLmlzRXF1YWxOb2RlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLm5hbWVzcGFjZVVSSSAhPT0gdGhpcy5uYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUucHJlZml4ICE9PSB0aGlzLnByZWZpeCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5sb2NhbE5hbWUgIT09IHRoaXMubG9jYWxOYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmF0dHJpYnMubGVuZ3RoICE9PSB0aGlzLmF0dHJpYnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IGogPSAwLCByZWYxID0gdGhpcy5hdHRyaWJzLmxlbmd0aCAtIDE7IDAgPD0gcmVmMSA/IGogPD0gcmVmMSA6IGogPj0gcmVmMTsgaSA9IDAgPD0gcmVmMSA/ICsraiA6IC0taikge1xuICAgICAgICBpZiAoIXRoaXMuYXR0cmlic1tpXS5pc0VxdWFsTm9kZShub2RlLmF0dHJpYnNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTEVsZW1lbnQ7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MTmFtZWROb2RlTWFwO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MTmFtZWROb2RlTWFwID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTE5hbWVkTm9kZU1hcChub2Rlcykge1xuICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxOYW1lZE5vZGVNYXAucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubm9kZXMpLmxlbmd0aCB8fCAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMgPSBudWxsO1xuICAgIH07XG5cbiAgICBYTUxOYW1lZE5vZGVNYXAucHJvdG90eXBlLmdldE5hbWVkSXRlbSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVzW25hbWVdO1xuICAgIH07XG5cbiAgICBYTUxOYW1lZE5vZGVNYXAucHJvdG90eXBlLnNldE5hbWVkSXRlbSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBvbGROb2RlO1xuICAgICAgb2xkTm9kZSA9IHRoaXMubm9kZXNbbm9kZS5ub2RlTmFtZV07XG4gICAgICB0aGlzLm5vZGVzW25vZGUubm9kZU5hbWVdID0gbm9kZTtcbiAgICAgIHJldHVybiBvbGROb2RlIHx8IG51bGw7XG4gICAgfTtcblxuICAgIFhNTE5hbWVkTm9kZU1hcC5wcm90b3R5cGUucmVtb3ZlTmFtZWRJdGVtID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIG9sZE5vZGU7XG4gICAgICBvbGROb2RlID0gdGhpcy5ub2Rlc1tuYW1lXTtcbiAgICAgIGRlbGV0ZSB0aGlzLm5vZGVzW25hbWVdO1xuICAgICAgcmV0dXJuIG9sZE5vZGUgfHwgbnVsbDtcbiAgICB9O1xuXG4gICAgWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVzW09iamVjdC5rZXlzKHRoaXMubm9kZXMpW2luZGV4XV0gfHwgbnVsbDtcbiAgICB9O1xuXG4gICAgWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZS5nZXROYW1lZEl0ZW1OUyA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZS5zZXROYW1lZEl0ZW1OUyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH07XG5cbiAgICBYTUxOYW1lZE5vZGVNYXAucHJvdG90eXBlLnJlbW92ZU5hbWVkSXRlbU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MTmFtZWROb2RlTWFwO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgRG9jdW1lbnRQb3NpdGlvbiwgTm9kZVR5cGUsIFhNTENEYXRhLCBYTUxDb21tZW50LCBYTUxEZWNsYXJhdGlvbiwgWE1MRG9jVHlwZSwgWE1MRHVtbXksIFhNTEVsZW1lbnQsIFhNTE5hbWVkTm9kZU1hcCwgWE1MTm9kZSwgWE1MTm9kZUxpc3QsIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgWE1MUmF3LCBYTUxUZXh0LCBnZXRWYWx1ZSwgaXNFbXB0eSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIHJlZjEsXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIHJlZjEgPSByZXF1aXJlKCcuL1V0aWxpdHknKSwgaXNPYmplY3QgPSByZWYxLmlzT2JqZWN0LCBpc0Z1bmN0aW9uID0gcmVmMS5pc0Z1bmN0aW9uLCBpc0VtcHR5ID0gcmVmMS5pc0VtcHR5LCBnZXRWYWx1ZSA9IHJlZjEuZ2V0VmFsdWU7XG5cbiAgWE1MRWxlbWVudCA9IG51bGw7XG5cbiAgWE1MQ0RhdGEgPSBudWxsO1xuXG4gIFhNTENvbW1lbnQgPSBudWxsO1xuXG4gIFhNTERlY2xhcmF0aW9uID0gbnVsbDtcblxuICBYTUxEb2NUeXBlID0gbnVsbDtcblxuICBYTUxSYXcgPSBudWxsO1xuXG4gIFhNTFRleHQgPSBudWxsO1xuXG4gIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IG51bGw7XG5cbiAgWE1MRHVtbXkgPSBudWxsO1xuXG4gIE5vZGVUeXBlID0gbnVsbDtcblxuICBYTUxOb2RlTGlzdCA9IG51bGw7XG5cbiAgWE1MTmFtZWROb2RlTWFwID0gbnVsbDtcblxuICBEb2N1bWVudFBvc2l0aW9uID0gbnVsbDtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTE5vZGUgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MTm9kZShwYXJlbnQxKSB7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDE7XG4gICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5wYXJlbnQub3B0aW9ucztcbiAgICAgICAgdGhpcy5zdHJpbmdpZnkgPSB0aGlzLnBhcmVudC5zdHJpbmdpZnk7XG4gICAgICB9XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgIHRoaXMuYmFzZVVSSSA9IG51bGw7XG4gICAgICBpZiAoIVhNTEVsZW1lbnQpIHtcbiAgICAgICAgWE1MRWxlbWVudCA9IHJlcXVpcmUoJy4vWE1MRWxlbWVudCcpO1xuICAgICAgICBYTUxDRGF0YSA9IHJlcXVpcmUoJy4vWE1MQ0RhdGEnKTtcbiAgICAgICAgWE1MQ29tbWVudCA9IHJlcXVpcmUoJy4vWE1MQ29tbWVudCcpO1xuICAgICAgICBYTUxEZWNsYXJhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRGVjbGFyYXRpb24nKTtcbiAgICAgICAgWE1MRG9jVHlwZSA9IHJlcXVpcmUoJy4vWE1MRG9jVHlwZScpO1xuICAgICAgICBYTUxSYXcgPSByZXF1aXJlKCcuL1hNTFJhdycpO1xuICAgICAgICBYTUxUZXh0ID0gcmVxdWlyZSgnLi9YTUxUZXh0Jyk7XG4gICAgICAgIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IHJlcXVpcmUoJy4vWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uJyk7XG4gICAgICAgIFhNTER1bW15ID0gcmVxdWlyZSgnLi9YTUxEdW1teScpO1xuICAgICAgICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcbiAgICAgICAgWE1MTm9kZUxpc3QgPSByZXF1aXJlKCcuL1hNTE5vZGVMaXN0Jyk7XG4gICAgICAgIFhNTE5hbWVkTm9kZU1hcCA9IHJlcXVpcmUoJy4vWE1MTmFtZWROb2RlTWFwJyk7XG4gICAgICAgIERvY3VtZW50UG9zaXRpb24gPSByZXF1aXJlKCcuL0RvY3VtZW50UG9zaXRpb24nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdub2RlTmFtZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdub2RlVHlwZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdub2RlVmFsdWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxOb2RlLnByb3RvdHlwZSwgJ3BhcmVudE5vZGUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdjaGlsZE5vZGVzJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoaWxkTm9kZUxpc3QgfHwgIXRoaXMuY2hpbGROb2RlTGlzdC5ub2Rlcykge1xuICAgICAgICAgIHRoaXMuY2hpbGROb2RlTGlzdCA9IG5ldyBYTUxOb2RlTGlzdCh0aGlzLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVMaXN0O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTE5vZGUucHJvdG90eXBlLCAnZmlyc3RDaGlsZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuWzBdIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdsYXN0Q2hpbGQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdwcmV2aW91c1NpYmxpbmcnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgaSA9IHRoaXMucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jaGlsZHJlbltpIC0gMV0gfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxOb2RlLnByb3RvdHlwZSwgJ25leHRTaWJsaW5nJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2hpbGRyZW5baSArIDFdIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdvd25lckRvY3VtZW50Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQoKSB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTE5vZGUucHJvdG90eXBlLCAndGV4dENvbnRlbnQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2hpbGQsIGosIGxlbiwgcmVmMiwgc3RyO1xuICAgICAgICBpZiAodGhpcy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuRWxlbWVudCB8fCB0aGlzLm5vZGVUeXBlID09PSBOb2RlVHlwZS5Eb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgc3RyID0gJyc7XG4gICAgICAgICAgcmVmMiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgICAgZm9yIChqID0gMCwgbGVuID0gcmVmMi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgICAgY2hpbGQgPSByZWYyW2pdO1xuICAgICAgICAgICAgaWYgKGNoaWxkLnRleHRDb250ZW50KSB7XG4gICAgICAgICAgICAgIHN0ciArPSBjaGlsZC50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24ocGFyZW50KSB7XG4gICAgICB2YXIgY2hpbGQsIGosIGxlbiwgcmVmMiwgcmVzdWx0cztcbiAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBwYXJlbnQub3B0aW9ucztcbiAgICAgICAgdGhpcy5zdHJpbmdpZnkgPSBwYXJlbnQuc3RyaW5naWZ5O1xuICAgICAgfVxuICAgICAgcmVmMiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICByZXN1bHRzID0gW107XG4gICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYyLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmMltqXTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKGNoaWxkLnNldFBhcmVudCh0aGlzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZWxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHZhciBjaGlsZE5vZGUsIGl0ZW0sIGosIGssIGtleSwgbGFzdENoaWxkLCBsZW4sIGxlbjEsIHJlZjIsIHJlZjMsIHZhbDtcbiAgICAgIGxhc3RDaGlsZCA9IG51bGw7XG4gICAgICBpZiAoYXR0cmlidXRlcyA9PT0gbnVsbCAmJiAodGV4dCA9PSBudWxsKSkge1xuICAgICAgICByZWYyID0gW3t9LCBudWxsXSwgYXR0cmlidXRlcyA9IHJlZjJbMF0sIHRleHQgPSByZWYyWzFdO1xuICAgICAgfVxuICAgICAgaWYgKGF0dHJpYnV0ZXMgPT0gbnVsbCkge1xuICAgICAgICBhdHRyaWJ1dGVzID0ge307XG4gICAgICB9XG4gICAgICBhdHRyaWJ1dGVzID0gZ2V0VmFsdWUoYXR0cmlidXRlcyk7XG4gICAgICBpZiAoIWlzT2JqZWN0KGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIHJlZjMgPSBbYXR0cmlidXRlcywgdGV4dF0sIHRleHQgPSByZWYzWzBdLCBhdHRyaWJ1dGVzID0gcmVmM1sxXTtcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lICE9IG51bGwpIHtcbiAgICAgICAgbmFtZSA9IGdldFZhbHVlKG5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yIChqID0gMCwgbGVuID0gbmFtZS5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGl0ZW0gPSBuYW1lW2pdO1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZWxlbWVudChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKG5hbWUpKSB7XG4gICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZWxlbWVudChuYW1lLmFwcGx5KCkpO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChuYW1lKSkge1xuICAgICAgICBmb3IgKGtleSBpbiBuYW1lKSB7XG4gICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwobmFtZSwga2V5KSkgY29udGludWU7XG4gICAgICAgICAgdmFsID0gbmFtZVtrZXldO1xuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5hcHBseSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRBdHRLZXkgJiYga2V5LmluZGV4T2YodGhpcy5zdHJpbmdpZnkuY29udmVydEF0dEtleSkgPT09IDApIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuYXR0cmlidXRlKGtleS5zdWJzdHIodGhpcy5zdHJpbmdpZnkuY29udmVydEF0dEtleS5sZW5ndGgpLCB2YWwpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5zZXBhcmF0ZUFycmF5SXRlbXMgJiYgQXJyYXkuaXNBcnJheSh2YWwpICYmIGlzRW1wdHkodmFsKSkge1xuICAgICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5kdW1teSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSAmJiBpc0VtcHR5KHZhbCkpIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZWxlbWVudChrZXkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5rZWVwTnVsbE5vZGVzICYmICh2YWwgPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZHVtbXkoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuc2VwYXJhdGVBcnJheUl0ZW1zICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHZhbC5sZW5ndGg7IGsgPCBsZW4xOyBrKyspIHtcbiAgICAgICAgICAgICAgaXRlbSA9IHZhbFtrXTtcbiAgICAgICAgICAgICAgY2hpbGROb2RlID0ge307XG4gICAgICAgICAgICAgIGNoaWxkTm9kZVtrZXldID0gaXRlbTtcbiAgICAgICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5lbGVtZW50KGNoaWxkTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRUZXh0S2V5ICYmIGtleS5pbmRleE9mKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRUZXh0S2V5KSA9PT0gMCkge1xuICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQodmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZWxlbWVudChrZXkpO1xuICAgICAgICAgICAgICBsYXN0Q2hpbGQuZWxlbWVudCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQoa2V5LCB2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmtlZXBOdWxsTm9kZXMgJiYgdGV4dCA9PT0gbnVsbCkge1xuICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmR1bW15KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRUZXh0S2V5ICYmIG5hbWUuaW5kZXhPZih0aGlzLnN0cmluZ2lmeS5jb252ZXJ0VGV4dEtleSkgPT09IDApIHtcbiAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLnRleHQodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRDRGF0YUtleSAmJiBuYW1lLmluZGV4T2YodGhpcy5zdHJpbmdpZnkuY29udmVydENEYXRhS2V5KSA9PT0gMCkge1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuY2RhdGEodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRDb21tZW50S2V5ICYmIG5hbWUuaW5kZXhPZih0aGlzLnN0cmluZ2lmeS5jb252ZXJ0Q29tbWVudEtleSkgPT09IDApIHtcbiAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmNvbW1lbnQodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRSYXdLZXkgJiYgbmFtZS5pbmRleE9mKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRSYXdLZXkpID09PSAwKSB7XG4gICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5yYXcodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRQSUtleSAmJiBuYW1lLmluZGV4T2YodGhpcy5zdHJpbmdpZnkuY29udmVydFBJS2V5KSA9PT0gMCkge1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuaW5zdHJ1Y3Rpb24obmFtZS5zdWJzdHIodGhpcy5zdHJpbmdpZnkuY29udmVydFBJS2V5Lmxlbmd0aCksIHRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMubm9kZShuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxhc3RDaGlsZCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBjcmVhdGUgYW55IGVsZW1lbnRzIHdpdGg6IFwiICsgbmFtZSArIFwiLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhc3RDaGlsZDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgdmFyIGNoaWxkLCBpLCBuZXdDaGlsZCwgcmVmQ2hpbGQsIHJlbW92ZWQ7XG4gICAgICBpZiAobmFtZSAhPSBudWxsID8gbmFtZS50eXBlIDogdm9pZCAwKSB7XG4gICAgICAgIG5ld0NoaWxkID0gbmFtZTtcbiAgICAgICAgcmVmQ2hpbGQgPSBhdHRyaWJ1dGVzO1xuICAgICAgICBuZXdDaGlsZC5zZXRQYXJlbnQodGhpcyk7XG4gICAgICAgIGlmIChyZWZDaGlsZCkge1xuICAgICAgICAgIGkgPSBjaGlsZHJlbi5pbmRleE9mKHJlZkNoaWxkKTtcbiAgICAgICAgICByZW1vdmVkID0gY2hpbGRyZW4uc3BsaWNlKGkpO1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2gobmV3Q2hpbGQpO1xuICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKG5ld0NoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pc1Jvb3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgaW5zZXJ0IGVsZW1lbnRzIGF0IHJvb3QgbGV2ZWwuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgICByZW1vdmVkID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGkpO1xuICAgICAgICBjaGlsZCA9IHRoaXMucGFyZW50LmVsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMucGFyZW50LmNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgcmVtb3ZlZDtcbiAgICAgIGlmICh0aGlzLmlzUm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgaW5zZXJ0IGVsZW1lbnRzIGF0IHJvb3QgbGV2ZWwuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgfVxuICAgICAgaSA9IHRoaXMucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodGhpcyk7XG4gICAgICByZW1vdmVkID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGkgKyAxKTtcbiAgICAgIGNoaWxkID0gdGhpcy5wYXJlbnQuZWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMucGFyZW50LmNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcmVmMjtcbiAgICAgIGlmICh0aGlzLmlzUm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVtb3ZlIHRoZSByb290IGVsZW1lbnQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIFtdLnNwbGljZS5hcHBseSh0aGlzLnBhcmVudC5jaGlsZHJlbiwgW2ksIGkgLSBpICsgMV0uY29uY2F0KHJlZjIgPSBbXSkpLCByZWYyO1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5ub2RlID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgdmFyIGNoaWxkLCByZWYyO1xuICAgICAgaWYgKG5hbWUgIT0gbnVsbCkge1xuICAgICAgICBuYW1lID0gZ2V0VmFsdWUobmFtZSk7XG4gICAgICB9XG4gICAgICBhdHRyaWJ1dGVzIHx8IChhdHRyaWJ1dGVzID0ge30pO1xuICAgICAgYXR0cmlidXRlcyA9IGdldFZhbHVlKGF0dHJpYnV0ZXMpO1xuICAgICAgaWYgKCFpc09iamVjdChhdHRyaWJ1dGVzKSkge1xuICAgICAgICByZWYyID0gW2F0dHJpYnV0ZXMsIHRleHRdLCB0ZXh0ID0gcmVmMlswXSwgYXR0cmlidXRlcyA9IHJlZjJbMV07XG4gICAgICB9XG4gICAgICBjaGlsZCA9IG5ldyBYTUxFbGVtZW50KHRoaXMsIG5hbWUsIGF0dHJpYnV0ZXMpO1xuICAgICAgaWYgKHRleHQgIT0gbnVsbCkge1xuICAgICAgICBjaGlsZC50ZXh0KHRleHQpO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQ7XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjaGlsZCA9IG5ldyBYTUxUZXh0KHRoaXMsIHZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuY2RhdGEgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MQ0RhdGEodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jb21tZW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTENvbW1lbnQodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jb21tZW50QmVmb3JlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgcmVtb3ZlZDtcbiAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgcmVtb3ZlZCA9IHRoaXMucGFyZW50LmNoaWxkcmVuLnNwbGljZShpKTtcbiAgICAgIGNoaWxkID0gdGhpcy5wYXJlbnQuY29tbWVudCh2YWx1ZSk7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnBhcmVudC5jaGlsZHJlbiwgcmVtb3ZlZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuY29tbWVudEFmdGVyID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgcmVtb3ZlZDtcbiAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgcmVtb3ZlZCA9IHRoaXMucGFyZW50LmNoaWxkcmVuLnNwbGljZShpICsgMSk7XG4gICAgICBjaGlsZCA9IHRoaXMucGFyZW50LmNvbW1lbnQodmFsdWUpO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5wYXJlbnQuY2hpbGRyZW4sIHJlbW92ZWQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnJhdyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQ7XG4gICAgICBjaGlsZCA9IG5ldyBYTUxSYXcodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kdW1teSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MRHVtbXkodGhpcyk7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmluc3RydWN0aW9uID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgdmFyIGluc1RhcmdldCwgaW5zVmFsdWUsIGluc3RydWN0aW9uLCBqLCBsZW47XG4gICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgICAgdGFyZ2V0ID0gZ2V0VmFsdWUodGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gZ2V0VmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSB0YXJnZXQubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBpbnNUYXJnZXQgPSB0YXJnZXRbal07XG4gICAgICAgICAgdGhpcy5pbnN0cnVjdGlvbihpbnNUYXJnZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHRhcmdldCkpIHtcbiAgICAgICAgZm9yIChpbnNUYXJnZXQgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwodGFyZ2V0LCBpbnNUYXJnZXQpKSBjb250aW51ZTtcbiAgICAgICAgICBpbnNWYWx1ZSA9IHRhcmdldFtpbnNUYXJnZXRdO1xuICAgICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb24oaW5zVGFyZ2V0LCBpbnNWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0cnVjdGlvbiA9IG5ldyBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGhpcywgdGFyZ2V0LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChpbnN0cnVjdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW5zdHJ1Y3Rpb25CZWZvcmUgPSBmdW5jdGlvbih0YXJnZXQsIHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIHJlbW92ZWQ7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIHJlbW92ZWQgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaSk7XG4gICAgICBjaGlsZCA9IHRoaXMucGFyZW50Lmluc3RydWN0aW9uKHRhcmdldCwgdmFsdWUpO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5wYXJlbnQuY2hpbGRyZW4sIHJlbW92ZWQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmluc3RydWN0aW9uQWZ0ZXIgPSBmdW5jdGlvbih0YXJnZXQsIHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIHJlbW92ZWQ7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIHJlbW92ZWQgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaSArIDEpO1xuICAgICAgY2hpbGQgPSB0aGlzLnBhcmVudC5pbnN0cnVjdGlvbih0YXJnZXQsIHZhbHVlKTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMucGFyZW50LmNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICB2YXIgZG9jLCB4bWxkZWM7XG4gICAgICBkb2MgPSB0aGlzLmRvY3VtZW50KCk7XG4gICAgICB4bWxkZWMgPSBuZXcgWE1MRGVjbGFyYXRpb24oZG9jLCB2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSk7XG4gICAgICBpZiAoZG9jLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkb2MuY2hpbGRyZW4udW5zaGlmdCh4bWxkZWMpO1xuICAgICAgfSBlbHNlIGlmIChkb2MuY2hpbGRyZW5bMF0udHlwZSA9PT0gTm9kZVR5cGUuRGVjbGFyYXRpb24pIHtcbiAgICAgICAgZG9jLmNoaWxkcmVuWzBdID0geG1sZGVjO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jLmNoaWxkcmVuLnVuc2hpZnQoeG1sZGVjKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkb2Mucm9vdCgpIHx8IGRvYztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZHRkID0gZnVuY3Rpb24ocHViSUQsIHN5c0lEKSB7XG4gICAgICB2YXIgY2hpbGQsIGRvYywgZG9jdHlwZSwgaSwgaiwgaywgbGVuLCBsZW4xLCByZWYyLCByZWYzO1xuICAgICAgZG9jID0gdGhpcy5kb2N1bWVudCgpO1xuICAgICAgZG9jdHlwZSA9IG5ldyBYTUxEb2NUeXBlKGRvYywgcHViSUQsIHN5c0lEKTtcbiAgICAgIHJlZjIgPSBkb2MuY2hpbGRyZW47XG4gICAgICBmb3IgKGkgPSBqID0gMCwgbGVuID0gcmVmMi5sZW5ndGg7IGogPCBsZW47IGkgPSArK2opIHtcbiAgICAgICAgY2hpbGQgPSByZWYyW2ldO1xuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gTm9kZVR5cGUuRG9jVHlwZSkge1xuICAgICAgICAgIGRvYy5jaGlsZHJlbltpXSA9IGRvY3R5cGU7XG4gICAgICAgICAgcmV0dXJuIGRvY3R5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlZjMgPSBkb2MuY2hpbGRyZW47XG4gICAgICBmb3IgKGkgPSBrID0gMCwgbGVuMSA9IHJlZjMubGVuZ3RoOyBrIDwgbGVuMTsgaSA9ICsraykge1xuICAgICAgICBjaGlsZCA9IHJlZjNbaV07XG4gICAgICAgIGlmIChjaGlsZC5pc1Jvb3QpIHtcbiAgICAgICAgICBkb2MuY2hpbGRyZW4uc3BsaWNlKGksIDAsIGRvY3R5cGUpO1xuICAgICAgICAgIHJldHVybiBkb2N0eXBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkb2MuY2hpbGRyZW4ucHVzaChkb2N0eXBlKTtcbiAgICAgIHJldHVybiBkb2N0eXBlO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS51cCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuaXNSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSByb290IG5vZGUgaGFzIG5vIHBhcmVudC4gVXNlIGRvYygpIGlmIHlvdSBuZWVkIHRvIGdldCB0aGUgZG9jdW1lbnQgb2JqZWN0LlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUucm9vdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICBub2RlID0gdGhpcztcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlLkRvY3VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUucm9vdE9iamVjdDtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmlzUm9vdCkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kb2N1bWVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICBub2RlID0gdGhpcztcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlLkRvY3VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50KCkuZW5kKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5wcmV2ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgaWYgKGkgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFscmVhZHkgYXQgdGhlIGZpcnN0IG5vZGUuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2hpbGRyZW5baSAtIDFdO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgaWYgKGkgPT09IC0xIHx8IGkgPT09IHRoaXMucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWxyZWFkeSBhdCB0aGUgbGFzdCBub2RlLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNoaWxkcmVuW2kgKyAxXTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW1wb3J0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgIHZhciBjbG9uZWRSb290O1xuICAgICAgY2xvbmVkUm9vdCA9IGRvYy5yb290KCkuY2xvbmUoKTtcbiAgICAgIGNsb25lZFJvb3QucGFyZW50ID0gdGhpcztcbiAgICAgIGNsb25lZFJvb3QuaXNSb290ID0gZmFsc2U7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2xvbmVkUm9vdCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZGVidWdJbmZvID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIHJlZjIsIHJlZjM7XG4gICAgICBuYW1lID0gbmFtZSB8fCB0aGlzLm5hbWU7XG4gICAgICBpZiAoKG5hbWUgPT0gbnVsbCkgJiYgISgocmVmMiA9IHRoaXMucGFyZW50KSAhPSBudWxsID8gcmVmMi5uYW1lIDogdm9pZCAwKSkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcInBhcmVudDogPFwiICsgdGhpcy5wYXJlbnQubmFtZSArIFwiPlwiO1xuICAgICAgfSBlbHNlIGlmICghKChyZWYzID0gdGhpcy5wYXJlbnQpICE9IG51bGwgPyByZWYzLm5hbWUgOiB2b2lkIDApKSB7XG4gICAgICAgIHJldHVybiBcIm5vZGU6IDxcIiArIG5hbWUgKyBcIj5cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIm5vZGU6IDxcIiArIG5hbWUgKyBcIj4sIHBhcmVudDogPFwiICsgdGhpcy5wYXJlbnQubmFtZSArIFwiPlwiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5lbGUgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5ub2QgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS50eHQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmRhdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZGF0YSh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmNvbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21tZW50KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW5zID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3Rpb24odGFyZ2V0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmRvYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQoKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZGVjID0gZnVuY3Rpb24odmVyc2lvbiwgZW5jb2RpbmcsIHN0YW5kYWxvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLm4gPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNkYXRhKHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuYyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21tZW50KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yYXcodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3Rpb24odGFyZ2V0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwKCk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmltcG9ydFhNTEJ1aWxkZXIgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgIHJldHVybiB0aGlzLmltcG9ydERvY3VtZW50KGRvYyk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uKG5ld0NoaWxkLCBvbGRDaGlsZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uKG9sZENoaWxkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkID0gZnVuY3Rpb24obmV3Q2hpbGQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaGFzQ2hpbGROb2RlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoICE9PSAwO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbihkZWVwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pc1N1cHBvcnRlZCA9IGZ1bmN0aW9uKGZlYXR1cmUsIHZlcnNpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdHRyaWJzLmxlbmd0aCAhPT0gMDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPSBmdW5jdGlvbihvdGhlcikge1xuICAgICAgdmFyIHJlZiwgcmVzO1xuICAgICAgcmVmID0gdGhpcztcbiAgICAgIGlmIChyZWYgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRvY3VtZW50KCkgIT09IG90aGVyLmRvY3VtZW50KCkpIHtcbiAgICAgICAgcmVzID0gRG9jdW1lbnRQb3NpdGlvbi5EaXNjb25uZWN0ZWQgfCBEb2N1bWVudFBvc2l0aW9uLkltcGxlbWVudGF0aW9uU3BlY2lmaWM7XG4gICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDwgMC41KSB7XG4gICAgICAgICAgcmVzIHw9IERvY3VtZW50UG9zaXRpb24uUHJlY2VkaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcyB8PSBEb2N1bWVudFBvc2l0aW9uLkZvbGxvd2luZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSBlbHNlIGlmIChyZWYuaXNBbmNlc3RvcihvdGhlcikpIHtcbiAgICAgICAgcmV0dXJuIERvY3VtZW50UG9zaXRpb24uQ29udGFpbnMgfCBEb2N1bWVudFBvc2l0aW9uLlByZWNlZGluZztcbiAgICAgIH0gZWxzZSBpZiAocmVmLmlzRGVzY2VuZGFudChvdGhlcikpIHtcbiAgICAgICAgcmV0dXJuIERvY3VtZW50UG9zaXRpb24uQ29udGFpbnMgfCBEb2N1bWVudFBvc2l0aW9uLkZvbGxvd2luZztcbiAgICAgIH0gZWxzZSBpZiAocmVmLmlzUHJlY2VkaW5nKG90aGVyKSkge1xuICAgICAgICByZXR1cm4gRG9jdW1lbnRQb3NpdGlvbi5QcmVjZWRpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gRG9jdW1lbnRQb3NpdGlvbi5Gb2xsb3dpbmc7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmlzU2FtZU5vZGUgPSBmdW5jdGlvbihvdGhlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5sb29rdXBQcmVmaXggPSBmdW5jdGlvbihuYW1lc3BhY2VVUkkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaXNEZWZhdWx0TmFtZXNwYWNlID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmxvb2t1cE5hbWVzcGFjZVVSSSA9IGZ1bmN0aW9uKHByZWZpeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pc0VxdWFsTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBpLCBqLCByZWYyO1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IHRoaXMubm9kZVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoICE9PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSBqID0gMCwgcmVmMiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgMCA8PSByZWYyID8gaiA8PSByZWYyIDogaiA+PSByZWYyOyBpID0gMCA8PSByZWYyID8gKytqIDogLS1qKSB7XG4gICAgICAgIGlmICghdGhpcy5jaGlsZHJlbltpXS5pc0VxdWFsTm9kZShub2RlLmNoaWxkcmVuW2ldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmdldEZlYXR1cmUgPSBmdW5jdGlvbihmZWF0dXJlLCB2ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnNldFVzZXJEYXRhID0gZnVuY3Rpb24oa2V5LCBkYXRhLCBoYW5kbGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmdldFVzZXJEYXRhID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICAgIGlmICghb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG90aGVyID09PSB0aGlzIHx8IHRoaXMuaXNEZXNjZW5kYW50KG90aGVyKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaXNEZXNjZW5kYW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgdmFyIGNoaWxkLCBpc0Rlc2NlbmRhbnRDaGlsZCwgaiwgbGVuLCByZWYyO1xuICAgICAgcmVmMiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYyLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmMltqXTtcbiAgICAgICAgaWYgKG5vZGUgPT09IGNoaWxkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaXNEZXNjZW5kYW50Q2hpbGQgPSBjaGlsZC5pc0Rlc2NlbmRhbnQobm9kZSk7XG4gICAgICAgIGlmIChpc0Rlc2NlbmRhbnRDaGlsZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmlzQW5jZXN0b3IgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5pc0Rlc2NlbmRhbnQodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmlzUHJlY2VkaW5nID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgdmFyIG5vZGVQb3MsIHRoaXNQb3M7XG4gICAgICBub2RlUG9zID0gdGhpcy50cmVlUG9zaXRpb24obm9kZSk7XG4gICAgICB0aGlzUG9zID0gdGhpcy50cmVlUG9zaXRpb24odGhpcyk7XG4gICAgICBpZiAobm9kZVBvcyA9PT0gLTEgfHwgdGhpc1BvcyA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5vZGVQb3MgPCB0aGlzUG9zO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pc0ZvbGxvd2luZyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBub2RlUG9zLCB0aGlzUG9zO1xuICAgICAgbm9kZVBvcyA9IHRoaXMudHJlZVBvc2l0aW9uKG5vZGUpO1xuICAgICAgdGhpc1BvcyA9IHRoaXMudHJlZVBvc2l0aW9uKHRoaXMpO1xuICAgICAgaWYgKG5vZGVQb3MgPT09IC0xIHx8IHRoaXNQb3MgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBub2RlUG9zID4gdGhpc1BvcztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUudHJlZVBvc2l0aW9uID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgdmFyIGZvdW5kLCBwb3M7XG4gICAgICBwb3MgPSAwO1xuICAgICAgZm91bmQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9yZWFjaFRyZWVOb2RlKHRoaXMuZG9jdW1lbnQoKSwgZnVuY3Rpb24oY2hpbGROb2RlKSB7XG4gICAgICAgIHBvcysrO1xuICAgICAgICBpZiAoIWZvdW5kICYmIGNoaWxkTm9kZSA9PT0gbm9kZSkge1xuICAgICAgICAgIHJldHVybiBmb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHJldHVybiBwb3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmZvcmVhY2hUcmVlTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIGZ1bmMpIHtcbiAgICAgIHZhciBjaGlsZCwgaiwgbGVuLCByZWYyLCByZXM7XG4gICAgICBub2RlIHx8IChub2RlID0gdGhpcy5kb2N1bWVudCgpKTtcbiAgICAgIHJlZjIgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgZm9yIChqID0gMCwgbGVuID0gcmVmMi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICBjaGlsZCA9IHJlZjJbal07XG4gICAgICAgIGlmIChyZXMgPSBmdW5jKGNoaWxkKSkge1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzID0gdGhpcy5mb3JlYWNoVHJlZU5vZGUoY2hpbGQsIGZ1bmMpO1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxOb2RlO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MTm9kZUxpc3Q7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxOb2RlTGlzdCA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBYTUxOb2RlTGlzdChub2Rlcykge1xuICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxOb2RlTGlzdC5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5sZW5ndGggfHwgMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTE5vZGVMaXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMgPSBudWxsO1xuICAgIH07XG5cbiAgICBYTUxOb2RlTGlzdC5wcm90b3R5cGUuaXRlbSA9IGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2Rlc1tpbmRleF0gfHwgbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTE5vZGVMaXN0O1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTENoYXJhY3RlckRhdGEsIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbixcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIFhNTENoYXJhY3RlckRhdGEgPSByZXF1aXJlKCcuL1hNTENoYXJhY3RlckRhdGEnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocGFyZW50LCB0YXJnZXQsIHZhbHVlKSB7XG4gICAgICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGluc3RydWN0aW9uIHRhcmdldC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjtcbiAgICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5zdHJpbmdpZnkuaW5zVGFyZ2V0KHRhcmdldCk7XG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLnRhcmdldDtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkuaW5zVmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIucHJvY2Vzc2luZ0luc3RydWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUuaXNFcXVhbE5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICBpZiAoIVhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5fX3N1cGVyX18uaXNFcXVhbE5vZGUuYXBwbHkodGhpcywgYXJndW1lbnRzKS5pc0VxdWFsTm9kZShub2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS50YXJnZXQgIT09IHRoaXMudGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uO1xuXG4gIH0pKFhNTENoYXJhY3RlckRhdGEpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxOb2RlLCBYTUxSYXcsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxSYXcgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxSYXcsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MUmF3KHBhcmVudCwgdGV4dCkge1xuICAgICAgWE1MUmF3Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcmF3IHRleHQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5SYXc7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkucmF3KHRleHQpO1xuICAgIH1cblxuICAgIFhNTFJhdy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxSYXcucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIucmF3KHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxSYXc7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFdyaXRlclN0YXRlLCBYTUxTdHJlYW1Xcml0ZXIsIFhNTFdyaXRlckJhc2UsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxXcml0ZXJCYXNlID0gcmVxdWlyZSgnLi9YTUxXcml0ZXJCYXNlJyk7XG5cbiAgV3JpdGVyU3RhdGUgPSByZXF1aXJlKCcuL1dyaXRlclN0YXRlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxTdHJlYW1Xcml0ZXIgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxTdHJlYW1Xcml0ZXIsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MU3RyZWFtV3JpdGVyKHN0cmVhbSwgb3B0aW9ucykge1xuICAgICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgICBYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5lbmRsaW5lID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIGlmIChub2RlLmlzTGFzdFJvb3ROb2RlICYmIG9wdGlvbnMuc3RhdGUgPT09IFdyaXRlclN0YXRlLkNsb3NlVGFnKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmVuZGxpbmUuY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZG9jdW1lbnQgPSBmdW5jdGlvbihkb2MsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgaiwgaywgbGVuLCBsZW4xLCByZWYsIHJlZjEsIHJlc3VsdHM7XG4gICAgICByZWYgPSBkb2MuY2hpbGRyZW47XG4gICAgICBmb3IgKGkgPSBqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaSA9ICsraikge1xuICAgICAgICBjaGlsZCA9IHJlZltpXTtcbiAgICAgICAgY2hpbGQuaXNMYXN0Um9vdE5vZGUgPSBpID09PSBkb2MuY2hpbGRyZW4ubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSB0aGlzLmZpbHRlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgICByZWYxID0gZG9jLmNoaWxkcmVuO1xuICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHJlZjEubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmMVtrXTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMud3JpdGVDaGlsZE5vZGUoY2hpbGQsIG9wdGlvbnMsIDApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dCwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmF0dHJpYnV0ZS5jYWxsKHRoaXMsIGF0dCwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5jZGF0YSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5jZGF0YS5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuY29tbWVudCA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5jb21tZW50LmNhbGwodGhpcywgbm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5kZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5kZWNsYXJhdGlvbi5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZG9jVHlwZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgY2hpbGQsIGosIGxlbiwgcmVmO1xuICAgICAgbGV2ZWwgfHwgKGxldmVsID0gMCk7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCc8IURPQ1RZUEUgJyArIG5vZGUucm9vdCgpLm5hbWUpO1xuICAgICAgaWYgKG5vZGUucHViSUQgJiYgbm9kZS5zeXNJRCkge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnIFBVQkxJQyBcIicgKyBub2RlLnB1YklEICsgJ1wiIFwiJyArIG5vZGUuc3lzSUQgKyAnXCInKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5zeXNJRCkge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnIFNZU1RFTSBcIicgKyBub2RlLnN5c0lEICsgJ1wiJyk7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCcgWycpO1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgICAgcmVmID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWZbal07XG4gICAgICAgICAgdGhpcy53cml0ZUNoaWxkTm9kZShjaGlsZCwgb3B0aW9ucywgbGV2ZWwgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCddJyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZShvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2ggKyAnPicpO1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZWxlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgYXR0LCBjaGlsZCwgY2hpbGROb2RlQ291bnQsIGZpcnN0Q2hpbGROb2RlLCBqLCBsZW4sIG5hbWUsIHByZXR0eVN1cHByZXNzZWQsIHJlZiwgcmVmMTtcbiAgICAgIGxldmVsIHx8IChsZXZlbCA9IDApO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8JyArIG5vZGUubmFtZSk7XG4gICAgICByZWYgPSBub2RlLmF0dHJpYnM7XG4gICAgICBmb3IgKG5hbWUgaW4gcmVmKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZiwgbmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICBhdHQgPSByZWZbbmFtZV07XG4gICAgICAgIHRoaXMuYXR0cmlidXRlKGF0dCwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgfVxuICAgICAgY2hpbGROb2RlQ291bnQgPSBub2RlLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIGZpcnN0Q2hpbGROb2RlID0gY2hpbGROb2RlQ291bnQgPT09IDAgPyBudWxsIDogbm9kZS5jaGlsZHJlblswXTtcbiAgICAgIGlmIChjaGlsZE5vZGVDb3VudCA9PT0gMCB8fCBub2RlLmNoaWxkcmVuLmV2ZXJ5KGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgcmV0dXJuIChlLnR5cGUgPT09IE5vZGVUeXBlLlRleHQgfHwgZS50eXBlID09PSBOb2RlVHlwZS5SYXcpICYmIGUudmFsdWUgPT09ICcnO1xuICAgICAgfSkpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dFbXB0eSkge1xuICAgICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCc+Jyk7XG4gICAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCc8LycgKyBub2RlLm5hbWUgKyAnPicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgICAgICB0aGlzLnN0cmVhbS53cml0ZShvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2ggKyAnLz4nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnByZXR0eSAmJiBjaGlsZE5vZGVDb3VudCA9PT0gMSAmJiAoZmlyc3RDaGlsZE5vZGUudHlwZSA9PT0gTm9kZVR5cGUuVGV4dCB8fCBmaXJzdENoaWxkTm9kZS50eXBlID09PSBOb2RlVHlwZS5SYXcpICYmIChmaXJzdENoaWxkTm9kZS52YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnPicpO1xuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgICBvcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQrKztcbiAgICAgICAgcHJldHR5U3VwcHJlc3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMud3JpdGVDaGlsZE5vZGUoZmlyc3RDaGlsZE5vZGUsIG9wdGlvbnMsIGxldmVsICsgMSk7XG4gICAgICAgIG9wdGlvbnMuc3VwcHJlc3NQcmV0dHlDb3VudC0tO1xuICAgICAgICBwcmV0dHlTdXBwcmVzc2VkID0gZmFsc2U7XG4gICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJzwvJyArIG5vZGUubmFtZSArICc+Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnPicgKyB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgICAgcmVmMSA9IG5vZGUuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZjEubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBjaGlsZCA9IHJlZjFbal07XG4gICAgICAgICAgdGhpcy53cml0ZUNoaWxkTm9kZShjaGlsZCwgb3B0aW9ucywgbGV2ZWwgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8LycgKyBub2RlLm5hbWUgKyAnPicpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUucHJvY2Vzc2luZ0luc3RydWN0aW9uID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLnByb2Nlc3NpbmdJbnN0cnVjdGlvbi5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLnJhdy5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy50ZXh0LmNhbGwodGhpcywgbm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5kdGRBdHRMaXN0ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmR0ZEF0dExpc3QuY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmR0ZEVsZW1lbnQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKFhNTFN0cmVhbVdyaXRlci5fX3N1cGVyX18uZHRkRWxlbWVudC5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZHRkRW50aXR5ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmR0ZEVudGl0eS5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZHRkTm90YXRpb24gPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKFhNTFN0cmVhbVdyaXRlci5fX3N1cGVyX18uZHRkTm90YXRpb24uY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MU3RyZWFtV3JpdGVyO1xuXG4gIH0pKFhNTFdyaXRlckJhc2UpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTFN0cmluZ1dyaXRlciwgWE1MV3JpdGVyQmFzZSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTFdyaXRlckJhc2UgPSByZXF1aXJlKCcuL1hNTFdyaXRlckJhc2UnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTFN0cmluZ1dyaXRlciA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTFN0cmluZ1dyaXRlciwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxTdHJpbmdXcml0ZXIob3B0aW9ucykge1xuICAgICAgWE1MU3RyaW5nV3JpdGVyLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIFhNTFN0cmluZ1dyaXRlci5wcm90b3R5cGUuZG9jdW1lbnQgPSBmdW5jdGlvbihkb2MsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgbGVuLCByLCByZWY7XG4gICAgICBvcHRpb25zID0gdGhpcy5maWx0ZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgciA9ICcnO1xuICAgICAgcmVmID0gZG9jLmNoaWxkcmVuO1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmW2ldO1xuICAgICAgICByICs9IHRoaXMud3JpdGVDaGlsZE5vZGUoY2hpbGQsIG9wdGlvbnMsIDApO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMucHJldHR5ICYmIHIuc2xpY2UoLW9wdGlvbnMubmV3bGluZS5sZW5ndGgpID09PSBvcHRpb25zLm5ld2xpbmUpIHtcbiAgICAgICAgciA9IHIuc2xpY2UoMCwgLW9wdGlvbnMubmV3bGluZS5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxTdHJpbmdXcml0ZXI7XG5cbiAgfSkoWE1MV3JpdGVyQmFzZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MU3RyaW5naWZpZXIsXG4gICAgYmluZCA9IGZ1bmN0aW9uKGZuLCBtZSl7IHJldHVybiBmdW5jdGlvbigpeyByZXR1cm4gZm4uYXBwbHkobWUsIGFyZ3VtZW50cyk7IH07IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MU3RyaW5naWZpZXIgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MU3RyaW5naWZpZXIob3B0aW9ucykge1xuICAgICAgdGhpcy5hc3NlcnRMZWdhbE5hbWUgPSBiaW5kKHRoaXMuYXNzZXJ0TGVnYWxOYW1lLCB0aGlzKTtcbiAgICAgIHRoaXMuYXNzZXJ0TGVnYWxDaGFyID0gYmluZCh0aGlzLmFzc2VydExlZ2FsQ2hhciwgdGhpcyk7XG4gICAgICB2YXIga2V5LCByZWYsIHZhbHVlO1xuICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy52ZXJzaW9uID0gJzEuMCc7XG4gICAgICB9XG4gICAgICByZWYgPSBvcHRpb25zLnN0cmluZ2lmeSB8fCB7fTtcbiAgICAgIGZvciAoa2V5IGluIHJlZikge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICB2YWx1ZSA9IHJlZltrZXldO1xuICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsTmFtZSgnJyArIHZhbCB8fCAnJyk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKHRoaXMudGV4dEVzY2FwZSgnJyArIHZhbCB8fCAnJykpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY2RhdGEgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICB2YWwgPSAnJyArIHZhbCB8fCAnJztcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCddXT4nLCAnXV1dXT48IVtDREFUQVs+Jyk7XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIodmFsKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICB2YWwgPSAnJyArIHZhbCB8fCAnJztcbiAgICAgIGlmICh2YWwubWF0Y2goLy0tLykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tbWVudCB0ZXh0IGNhbm5vdCBjb250YWluIGRvdWJsZS1oeXBlbjogXCIgKyB2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKHZhbCk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5yYXcgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gJycgKyB2YWwgfHwgJyc7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5hdHRWYWx1ZSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcih0aGlzLmF0dEVzY2FwZSh2YWwgPSAnJyArIHZhbCB8fCAnJykpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuaW5zVGFyZ2V0ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKCcnICsgdmFsIHx8ICcnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmluc1ZhbHVlID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgdmFsID0gJycgKyB2YWwgfHwgJyc7XG4gICAgICBpZiAodmFsLm1hdGNoKC9cXD8+LykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHZhbHVlOiBcIiArIHZhbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIodmFsKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLnhtbFZlcnNpb24gPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICB2YWwgPSAnJyArIHZhbCB8fCAnJztcbiAgICAgIGlmICghdmFsLm1hdGNoKC8xXFwuWzAtOV0rLykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB2ZXJzaW9uIG51bWJlcjogXCIgKyB2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLnhtbEVuY29kaW5nID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgdmFsID0gJycgKyB2YWwgfHwgJyc7XG4gICAgICBpZiAoIXZhbC5tYXRjaCgvXltBLVphLXpdKD86W0EtWmEtejAtOS5fLV0pKiQvKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGVuY29kaW5nOiBcIiArIHZhbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIodmFsKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLnhtbFN0YW5kYWxvbmUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICBpZiAodmFsKSB7XG4gICAgICAgIHJldHVybiBcInllc1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwibm9cIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZFB1YklEID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKCcnICsgdmFsIHx8ICcnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZFN5c0lEID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKCcnICsgdmFsIHx8ICcnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZEVsZW1lbnRWYWx1ZSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcignJyArIHZhbCB8fCAnJyk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5kdGRBdHRUeXBlID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKCcnICsgdmFsIHx8ICcnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZEF0dERlZmF1bHQgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIoJycgKyB2YWwgfHwgJycpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuZHRkRW50aXR5VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIoJycgKyB2YWwgfHwgJycpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuZHRkTkRhdGEgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIoJycgKyB2YWwgfHwgJycpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY29udmVydEF0dEtleSA9ICdAJztcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5jb252ZXJ0UElLZXkgPSAnPyc7XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY29udmVydFRleHRLZXkgPSAnI3RleHQnO1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmNvbnZlcnRDRGF0YUtleSA9ICcjY2RhdGEnO1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmNvbnZlcnRDb21tZW50S2V5ID0gJyNjb21tZW50JztcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5jb252ZXJ0UmF3S2V5ID0gJyNyYXcnO1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmFzc2VydExlZ2FsQ2hhciA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgdmFyIHJlZ2V4LCByZXM7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgfVxuICAgICAgcmVnZXggPSAnJztcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudmVyc2lvbiA9PT0gJzEuMCcpIHtcbiAgICAgICAgcmVnZXggPSAvW1xcMC1cXHgwOFxceDBCXFxmXFx4MEUtXFx4MUZcXHVGRkZFXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0vO1xuICAgICAgICBpZiAocmVzID0gc3RyLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIHN0cmluZzogXCIgKyBzdHIgKyBcIiBhdCBpbmRleCBcIiArIHJlcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnZlcnNpb24gPT09ICcxLjEnKSB7XG4gICAgICAgIHJlZ2V4ID0gL1tcXDBcXHVGRkZFXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0vO1xuICAgICAgICBpZiAocmVzID0gc3RyLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIHN0cmluZzogXCIgKyBzdHIgKyBcIiBhdCBpbmRleCBcIiArIHJlcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHI7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5hc3NlcnRMZWdhbE5hbWUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHZhciByZWdleDtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgICB9XG4gICAgICB0aGlzLmFzc2VydExlZ2FsQ2hhcihzdHIpO1xuICAgICAgcmVnZXggPSAvXihbOkEtWl9hLXpcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMENcXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXXxbXFx1RDgwMC1cXHVEQjdGXVtcXHVEQzAwLVxcdURGRkZdKShbXFx4MkRcXC4wLTpBLVpfYS16XFx4QjdcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMENcXHUyMDBEXFx1MjAzRlxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdfFtcXHVEODAwLVxcdURCN0ZdW1xcdURDMDAtXFx1REZGRl0pKiQvO1xuICAgICAgaWYgKCFzdHIubWF0Y2gocmVnZXgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIG5hbWVcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUudGV4dEVzY2FwZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgdmFyIGFtcHJlZ2V4O1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgIH1cbiAgICAgIGFtcHJlZ2V4ID0gdGhpcy5vcHRpb25zLm5vRG91YmxlRW5jb2RpbmcgPyAvKD8hJlxcUys7KSYvZyA6IC8mL2c7XG4gICAgICByZXR1cm4gc3RyLnJlcGxhY2UoYW1wcmVnZXgsICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7JykucmVwbGFjZSgvXFxyL2csICcmI3hEOycpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuYXR0RXNjYXBlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICB2YXIgYW1wcmVnZXg7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgfVxuICAgICAgYW1wcmVnZXggPSB0aGlzLm9wdGlvbnMubm9Eb3VibGVFbmNvZGluZyA/IC8oPyEmXFxTKzspJi9nIDogLyYvZztcbiAgICAgIHJldHVybiBzdHIucmVwbGFjZShhbXByZWdleCwgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKS5yZXBsYWNlKC9cXHQvZywgJyYjeDk7JykucmVwbGFjZSgvXFxuL2csICcmI3hBOycpLnJlcGxhY2UoL1xcci9nLCAnJiN4RDsnKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTFN0cmluZ2lmaWVyO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTENoYXJhY3RlckRhdGEsIFhNTFRleHQsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxDaGFyYWN0ZXJEYXRhID0gcmVxdWlyZSgnLi9YTUxDaGFyYWN0ZXJEYXRhJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxUZXh0ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MVGV4dCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxUZXh0KHBhcmVudCwgdGV4dCkge1xuICAgICAgWE1MVGV4dC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGVsZW1lbnQgdGV4dC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IFwiI3RleHRcIjtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLlRleHQ7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkudGV4dCh0ZXh0KTtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MVGV4dC5wcm90b3R5cGUsICdpc0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxUZXh0LnByb3RvdHlwZSwgJ3dob2xlVGV4dCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0LCBwcmV2LCBzdHI7XG4gICAgICAgIHN0ciA9ICcnO1xuICAgICAgICBwcmV2ID0gdGhpcy5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIHdoaWxlIChwcmV2KSB7XG4gICAgICAgICAgc3RyID0gcHJldi5kYXRhICsgc3RyO1xuICAgICAgICAgIHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZztcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0gdGhpcy5kYXRhO1xuICAgICAgICBuZXh0ID0gdGhpcy5uZXh0U2libGluZztcbiAgICAgICAgd2hpbGUgKG5leHQpIHtcbiAgICAgICAgICBzdHIgPSBzdHIgKyBuZXh0LmRhdGE7XG4gICAgICAgICAgbmV4dCA9IG5leHQubmV4dFNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTFRleHQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICB9O1xuXG4gICAgWE1MVGV4dC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci50ZXh0KHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTFRleHQucHJvdG90eXBlLnNwbGl0VGV4dCA9IGZ1bmN0aW9uKG9mZnNldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxUZXh0LnByb3RvdHlwZS5yZXBsYWNlV2hvbGVUZXh0ID0gZnVuY3Rpb24oY29udGVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MVGV4dDtcblxuICB9KShYTUxDaGFyYWN0ZXJEYXRhKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgV3JpdGVyU3RhdGUsIFhNTENEYXRhLCBYTUxDb21tZW50LCBYTUxEVERBdHRMaXN0LCBYTUxEVERFbGVtZW50LCBYTUxEVERFbnRpdHksIFhNTERURE5vdGF0aW9uLCBYTUxEZWNsYXJhdGlvbiwgWE1MRG9jVHlwZSwgWE1MRHVtbXksIFhNTEVsZW1lbnQsIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgWE1MUmF3LCBYTUxUZXh0LCBYTUxXcml0ZXJCYXNlLCBhc3NpZ24sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGFzc2lnbiA9IHJlcXVpcmUoJy4vVXRpbGl0eScpLmFzc2lnbjtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxEZWNsYXJhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRGVjbGFyYXRpb24nKTtcblxuICBYTUxEb2NUeXBlID0gcmVxdWlyZSgnLi9YTUxEb2NUeXBlJyk7XG5cbiAgWE1MQ0RhdGEgPSByZXF1aXJlKCcuL1hNTENEYXRhJyk7XG5cbiAgWE1MQ29tbWVudCA9IHJlcXVpcmUoJy4vWE1MQ29tbWVudCcpO1xuXG4gIFhNTEVsZW1lbnQgPSByZXF1aXJlKCcuL1hNTEVsZW1lbnQnKTtcblxuICBYTUxSYXcgPSByZXF1aXJlKCcuL1hNTFJhdycpO1xuXG4gIFhNTFRleHQgPSByZXF1aXJlKCcuL1hNTFRleHQnKTtcblxuICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSByZXF1aXJlKCcuL1hNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbicpO1xuXG4gIFhNTER1bW15ID0gcmVxdWlyZSgnLi9YTUxEdW1teScpO1xuXG4gIFhNTERUREF0dExpc3QgPSByZXF1aXJlKCcuL1hNTERUREF0dExpc3QnKTtcblxuICBYTUxEVERFbGVtZW50ID0gcmVxdWlyZSgnLi9YTUxEVERFbGVtZW50Jyk7XG5cbiAgWE1MRFRERW50aXR5ID0gcmVxdWlyZSgnLi9YTUxEVERFbnRpdHknKTtcblxuICBYTUxEVEROb3RhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRFRETm90YXRpb24nKTtcblxuICBXcml0ZXJTdGF0ZSA9IHJlcXVpcmUoJy4vV3JpdGVyU3RhdGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTFdyaXRlckJhc2UgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MV3JpdGVyQmFzZShvcHRpb25zKSB7XG4gICAgICB2YXIga2V5LCByZWYsIHZhbHVlO1xuICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICByZWYgPSBvcHRpb25zLndyaXRlciB8fCB7fTtcbiAgICAgIGZvciAoa2V5IGluIHJlZikge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICB2YWx1ZSA9IHJlZltrZXldO1xuICAgICAgICB0aGlzW1wiX1wiICsga2V5XSA9IHRoaXNba2V5XTtcbiAgICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUuZmlsdGVyT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHZhciBmaWx0ZXJlZE9wdGlvbnMsIHJlZiwgcmVmMSwgcmVmMiwgcmVmMywgcmVmNCwgcmVmNSwgcmVmNjtcbiAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICBvcHRpb25zID0gYXNzaWduKHt9LCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgZmlsdGVyZWRPcHRpb25zID0ge1xuICAgICAgICB3cml0ZXI6IHRoaXNcbiAgICAgIH07XG4gICAgICBmaWx0ZXJlZE9wdGlvbnMucHJldHR5ID0gb3B0aW9ucy5wcmV0dHkgfHwgZmFsc2U7XG4gICAgICBmaWx0ZXJlZE9wdGlvbnMuYWxsb3dFbXB0eSA9IG9wdGlvbnMuYWxsb3dFbXB0eSB8fCBmYWxzZTtcbiAgICAgIGZpbHRlcmVkT3B0aW9ucy5pbmRlbnQgPSAocmVmID0gb3B0aW9ucy5pbmRlbnQpICE9IG51bGwgPyByZWYgOiAnICAnO1xuICAgICAgZmlsdGVyZWRPcHRpb25zLm5ld2xpbmUgPSAocmVmMSA9IG9wdGlvbnMubmV3bGluZSkgIT0gbnVsbCA/IHJlZjEgOiAnXFxuJztcbiAgICAgIGZpbHRlcmVkT3B0aW9ucy5vZmZzZXQgPSAocmVmMiA9IG9wdGlvbnMub2Zmc2V0KSAhPSBudWxsID8gcmVmMiA6IDA7XG4gICAgICBmaWx0ZXJlZE9wdGlvbnMuZG9udFByZXR0eVRleHROb2RlcyA9IChyZWYzID0gKHJlZjQgPSBvcHRpb25zLmRvbnRQcmV0dHlUZXh0Tm9kZXMpICE9IG51bGwgPyByZWY0IDogb3B0aW9ucy5kb250cHJldHR5dGV4dG5vZGVzKSAhPSBudWxsID8gcmVmMyA6IDA7XG4gICAgICBmaWx0ZXJlZE9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCA9IChyZWY1ID0gKHJlZjYgPSBvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2gpICE9IG51bGwgPyByZWY2IDogb3B0aW9ucy5zcGFjZWJlZm9yZXNsYXNoKSAhPSBudWxsID8gcmVmNSA6ICcnO1xuICAgICAgaWYgKGZpbHRlcmVkT3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoID09PSB0cnVlKSB7XG4gICAgICAgIGZpbHRlcmVkT3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoID0gJyAnO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWRPcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQgPSAwO1xuICAgICAgZmlsdGVyZWRPcHRpb25zLnVzZXIgPSB7fTtcbiAgICAgIGZpbHRlcmVkT3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5pbmRlbnQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIGluZGVudExldmVsO1xuICAgICAgaWYgKCFvcHRpb25zLnByZXR0eSB8fCBvcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnByZXR0eSkge1xuICAgICAgICBpbmRlbnRMZXZlbCA9IChsZXZlbCB8fCAwKSArIG9wdGlvbnMub2Zmc2V0ICsgMTtcbiAgICAgICAgaWYgKGluZGVudExldmVsID4gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgQXJyYXkoaW5kZW50TGV2ZWwpLmpvaW4ob3B0aW9ucy5pbmRlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmVuZGxpbmUgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgaWYgKCFvcHRpb25zLnByZXR0eSB8fCBvcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMubmV3bGluZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUuYXR0cmlidXRlID0gZnVuY3Rpb24oYXR0LCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5BdHRyaWJ1dGUoYXR0LCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByID0gJyAnICsgYXR0Lm5hbWUgKyAnPVwiJyArIGF0dC52YWx1ZSArICdcIic7XG4gICAgICB0aGlzLmNsb3NlQXR0cmlidXRlKGF0dCwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmNkYXRhID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHIgPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPCFbQ0RBVEFbJztcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICByICs9IG5vZGUudmFsdWU7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICByICs9ICddXT4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8IS0tICc7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgciArPSBub2RlLnZhbHVlO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgciArPSAnIC0tPicgKyB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUuZGVjbGFyYXRpb24gPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8P3htbCc7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgciArPSAnIHZlcnNpb249XCInICsgbm9kZS52ZXJzaW9uICsgJ1wiJztcbiAgICAgIGlmIChub2RlLmVuY29kaW5nICE9IG51bGwpIHtcbiAgICAgICAgciArPSAnIGVuY29kaW5nPVwiJyArIG5vZGUuZW5jb2RpbmcgKyAnXCInO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuc3RhbmRhbG9uZSAhPSBudWxsKSB7XG4gICAgICAgIHIgKz0gJyBzdGFuZGFsb25lPVwiJyArIG5vZGUuc3RhbmRhbG9uZSArICdcIic7XG4gICAgICB9XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICByICs9IG9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCArICc/Pic7XG4gICAgICByICs9IHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5kb2NUeXBlID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgbGVuLCByLCByZWY7XG4gICAgICBsZXZlbCB8fCAobGV2ZWwgPSAwKTtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICByID0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgciArPSAnPCFET0NUWVBFICcgKyBub2RlLnJvb3QoKS5uYW1lO1xuICAgICAgaWYgKG5vZGUucHViSUQgJiYgbm9kZS5zeXNJRCkge1xuICAgICAgICByICs9ICcgUFVCTElDIFwiJyArIG5vZGUucHViSUQgKyAnXCIgXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuc3lzSUQpIHtcbiAgICAgICAgciArPSAnIFNZU1RFTSBcIicgKyBub2RlLnN5c0lEICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgciArPSAnIFsnO1xuICAgICAgICByICs9IHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICAgIHJlZiA9IG5vZGUuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNoaWxkID0gcmVmW2ldO1xuICAgICAgICAgIHIgKz0gdGhpcy53cml0ZUNoaWxkTm9kZShjaGlsZCwgb3B0aW9ucywgbGV2ZWwgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgIHIgKz0gJ10nO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgciArPSBvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2ggKyAnPic7XG4gICAgICByICs9IHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5lbGVtZW50ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciBhdHQsIGNoaWxkLCBjaGlsZE5vZGVDb3VudCwgZmlyc3RDaGlsZE5vZGUsIGksIGosIGxlbiwgbGVuMSwgbmFtZSwgcHJldHR5U3VwcHJlc3NlZCwgciwgcmVmLCByZWYxLCByZWYyO1xuICAgICAgbGV2ZWwgfHwgKGxldmVsID0gMCk7XG4gICAgICBwcmV0dHlTdXBwcmVzc2VkID0gZmFsc2U7XG4gICAgICByID0gJyc7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciArPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPCcgKyBub2RlLm5hbWU7XG4gICAgICByZWYgPSBub2RlLmF0dHJpYnM7XG4gICAgICBmb3IgKG5hbWUgaW4gcmVmKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZiwgbmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICBhdHQgPSByZWZbbmFtZV07XG4gICAgICAgIHIgKz0gdGhpcy5hdHRyaWJ1dGUoYXR0LCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICB9XG4gICAgICBjaGlsZE5vZGVDb3VudCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgZmlyc3RDaGlsZE5vZGUgPSBjaGlsZE5vZGVDb3VudCA9PT0gMCA/IG51bGwgOiBub2RlLmNoaWxkcmVuWzBdO1xuICAgICAgaWYgKGNoaWxkTm9kZUNvdW50ID09PSAwIHx8IG5vZGUuY2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gKGUudHlwZSA9PT0gTm9kZVR5cGUuVGV4dCB8fCBlLnR5cGUgPT09IE5vZGVUeXBlLlJhdykgJiYgZS52YWx1ZSA9PT0gJyc7XG4gICAgICB9KSkge1xuICAgICAgICBpZiAob3B0aW9ucy5hbGxvd0VtcHR5KSB7XG4gICAgICAgICAgciArPSAnPic7XG4gICAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICAgIHIgKz0gJzwvJyArIG5vZGUubmFtZSArICc+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICAgIHIgKz0gb3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJy8+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmV0dHkgJiYgY2hpbGROb2RlQ291bnQgPT09IDEgJiYgKGZpcnN0Q2hpbGROb2RlLnR5cGUgPT09IE5vZGVUeXBlLlRleHQgfHwgZmlyc3RDaGlsZE5vZGUudHlwZSA9PT0gTm9kZVR5cGUuUmF3KSAmJiAoZmlyc3RDaGlsZE5vZGUudmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgciArPSAnPic7XG4gICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICAgIG9wdGlvbnMuc3VwcHJlc3NQcmV0dHlDb3VudCsrO1xuICAgICAgICBwcmV0dHlTdXBwcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgciArPSB0aGlzLndyaXRlQ2hpbGROb2RlKGZpcnN0Q2hpbGROb2RlLCBvcHRpb25zLCBsZXZlbCArIDEpO1xuICAgICAgICBvcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQtLTtcbiAgICAgICAgcHJldHR5U3VwcHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgIHIgKz0gJzwvJyArIG5vZGUubmFtZSArICc+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3B0aW9ucy5kb250UHJldHR5VGV4dE5vZGVzKSB7XG4gICAgICAgICAgcmVmMSA9IG5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmMS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY2hpbGQgPSByZWYxW2ldO1xuICAgICAgICAgICAgaWYgKChjaGlsZC50eXBlID09PSBOb2RlVHlwZS5UZXh0IHx8IGNoaWxkLnR5cGUgPT09IE5vZGVUeXBlLlJhdykgJiYgKGNoaWxkLnZhbHVlICE9IG51bGwpKSB7XG4gICAgICAgICAgICAgIG9wdGlvbnMuc3VwcHJlc3NQcmV0dHlDb3VudCsrO1xuICAgICAgICAgICAgICBwcmV0dHlTdXBwcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHIgKz0gJz4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgICAgcmVmMiA9IG5vZGUuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaiA9IDAsIGxlbjEgPSByZWYyLmxlbmd0aDsgaiA8IGxlbjE7IGorKykge1xuICAgICAgICAgIGNoaWxkID0gcmVmMltqXTtcbiAgICAgICAgICByICs9IHRoaXMud3JpdGVDaGlsZE5vZGUoY2hpbGQsIG9wdGlvbnMsIGxldmVsICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICByICs9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8LycgKyBub2RlLm5hbWUgKyAnPic7XG4gICAgICAgIGlmIChwcmV0dHlTdXBwcmVzc2VkKSB7XG4gICAgICAgICAgb3B0aW9ucy5zdXBwcmVzc1ByZXR0eUNvdW50LS07XG4gICAgICAgIH1cbiAgICAgICAgciArPSB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS53cml0ZUNoaWxkTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkNEYXRhOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNkYXRhKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5Db21tZW50OlxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1lbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkVsZW1lbnQ6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudChub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuUmF3OlxuICAgICAgICAgIHJldHVybiB0aGlzLnJhdyhub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuVGV4dDpcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246XG4gICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2luZ0luc3RydWN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5EdW1teTpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuRGVjbGFyYXRpb246XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkRvY1R5cGU6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZG9jVHlwZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuQXR0cmlidXRlRGVjbGFyYXRpb246XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZHRkQXR0TGlzdChub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuRWxlbWVudERlY2xhcmF0aW9uOlxuICAgICAgICAgIHJldHVybiB0aGlzLmR0ZEVsZW1lbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkVudGl0eURlY2xhcmF0aW9uOlxuICAgICAgICAgIHJldHVybiB0aGlzLmR0ZEVudGl0eShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuTm90YXRpb25EZWNsYXJhdGlvbjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kdGROb3RhdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBYTUwgbm9kZSB0eXBlOiBcIiArIG5vZGUuY29uc3RydWN0b3IubmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLnByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICByID0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpICsgJzw/JztcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICByICs9IG5vZGUudGFyZ2V0O1xuICAgICAgaWYgKG5vZGUudmFsdWUpIHtcbiAgICAgICAgciArPSAnICcgKyBub2RlLnZhbHVlO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgciArPSBvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2ggKyAnPz4nO1xuICAgICAgciArPSB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHIgPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgciArPSBub2RlLnZhbHVlO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgciArPSB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICByID0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgIHIgKz0gbm9kZS52YWx1ZTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmR0ZEF0dExpc3QgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8IUFUVExJU1QnO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgIHIgKz0gJyAnICsgbm9kZS5lbGVtZW50TmFtZSArICcgJyArIG5vZGUuYXR0cmlidXRlTmFtZSArICcgJyArIG5vZGUuYXR0cmlidXRlVHlwZTtcbiAgICAgIGlmIChub2RlLmRlZmF1bHRWYWx1ZVR5cGUgIT09ICcjREVGQVVMVCcpIHtcbiAgICAgICAgciArPSAnICcgKyBub2RlLmRlZmF1bHRWYWx1ZVR5cGU7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgciArPSAnIFwiJyArIG5vZGUuZGVmYXVsdFZhbHVlICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gb3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJz4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmR0ZEVsZW1lbnQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8IUVMRU1FTlQnO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgIHIgKz0gJyAnICsgbm9kZS5uYW1lICsgJyAnICsgbm9kZS52YWx1ZTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gb3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJz4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmR0ZEVudGl0eSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICByID0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpICsgJzwhRU5USVRZJztcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICBpZiAobm9kZS5wZSkge1xuICAgICAgICByICs9ICcgJSc7XG4gICAgICB9XG4gICAgICByICs9ICcgJyArIG5vZGUubmFtZTtcbiAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgIHIgKz0gJyBcIicgKyBub2RlLnZhbHVlICsgJ1wiJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChub2RlLnB1YklEICYmIG5vZGUuc3lzSUQpIHtcbiAgICAgICAgICByICs9ICcgUFVCTElDIFwiJyArIG5vZGUucHViSUQgKyAnXCIgXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5zeXNJRCkge1xuICAgICAgICAgIHIgKz0gJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubkRhdGEpIHtcbiAgICAgICAgICByICs9ICcgTkRBVEEgJyArIG5vZGUubkRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gb3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJz4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmR0ZE5vdGF0aW9uID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHIgPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPCFOT1RBVElPTic7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgciArPSAnICcgKyBub2RlLm5hbWU7XG4gICAgICBpZiAobm9kZS5wdWJJRCAmJiBub2RlLnN5c0lEKSB7XG4gICAgICAgIHIgKz0gJyBQVUJMSUMgXCInICsgbm9kZS5wdWJJRCArICdcIiBcIicgKyBub2RlLnN5c0lEICsgJ1wiJztcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5wdWJJRCkge1xuICAgICAgICByICs9ICcgUFVCTElDIFwiJyArIG5vZGUucHViSUQgKyAnXCInO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnN5c0lEKSB7XG4gICAgICAgIHIgKz0gJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICB9XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICByICs9IG9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCArICc+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5vcGVuTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7fTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmNsb3NlTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7fTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLm9wZW5BdHRyaWJ1dGUgPSBmdW5jdGlvbihhdHQsIG9wdGlvbnMsIGxldmVsKSB7fTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmNsb3NlQXR0cmlidXRlID0gZnVuY3Rpb24oYXR0LCBvcHRpb25zLCBsZXZlbCkge307XG5cbiAgICByZXR1cm4gWE1MV3JpdGVyQmFzZTtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBXcml0ZXJTdGF0ZSwgWE1MRE9NSW1wbGVtZW50YXRpb24sIFhNTERvY3VtZW50LCBYTUxEb2N1bWVudENCLCBYTUxTdHJlYW1Xcml0ZXIsIFhNTFN0cmluZ1dyaXRlciwgYXNzaWduLCBpc0Z1bmN0aW9uLCByZWY7XG5cbiAgcmVmID0gcmVxdWlyZSgnLi9VdGlsaXR5JyksIGFzc2lnbiA9IHJlZi5hc3NpZ24sIGlzRnVuY3Rpb24gPSByZWYuaXNGdW5jdGlvbjtcblxuICBYTUxET01JbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRE9NSW1wbGVtZW50YXRpb24nKTtcblxuICBYTUxEb2N1bWVudCA9IHJlcXVpcmUoJy4vWE1MRG9jdW1lbnQnKTtcblxuICBYTUxEb2N1bWVudENCID0gcmVxdWlyZSgnLi9YTUxEb2N1bWVudENCJyk7XG5cbiAgWE1MU3RyaW5nV3JpdGVyID0gcmVxdWlyZSgnLi9YTUxTdHJpbmdXcml0ZXInKTtcblxuICBYTUxTdHJlYW1Xcml0ZXIgPSByZXF1aXJlKCcuL1hNTFN0cmVhbVdyaXRlcicpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIFdyaXRlclN0YXRlID0gcmVxdWlyZSgnLi9Xcml0ZXJTdGF0ZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzLmNyZWF0ZSA9IGZ1bmN0aW9uKG5hbWUsIHhtbGRlYywgZG9jdHlwZSwgb3B0aW9ucykge1xuICAgIHZhciBkb2MsIHJvb3Q7XG4gICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUm9vdCBlbGVtZW50IG5lZWRzIGEgbmFtZS5cIik7XG4gICAgfVxuICAgIG9wdGlvbnMgPSBhc3NpZ24oe30sIHhtbGRlYywgZG9jdHlwZSwgb3B0aW9ucyk7XG4gICAgZG9jID0gbmV3IFhNTERvY3VtZW50KG9wdGlvbnMpO1xuICAgIHJvb3QgPSBkb2MuZWxlbWVudChuYW1lKTtcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGxlc3MpIHtcbiAgICAgIGRvYy5kZWNsYXJhdGlvbihvcHRpb25zKTtcbiAgICAgIGlmICgob3B0aW9ucy5wdWJJRCAhPSBudWxsKSB8fCAob3B0aW9ucy5zeXNJRCAhPSBudWxsKSkge1xuICAgICAgICBkb2MuZHRkKG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm9vdDtcbiAgfTtcblxuICBtb2R1bGUuZXhwb3J0cy5iZWdpbiA9IGZ1bmN0aW9uKG9wdGlvbnMsIG9uRGF0YSwgb25FbmQpIHtcbiAgICB2YXIgcmVmMTtcbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgcmVmMSA9IFtvcHRpb25zLCBvbkRhdGFdLCBvbkRhdGEgPSByZWYxWzBdLCBvbkVuZCA9IHJlZjFbMV07XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIGlmIChvbkRhdGEpIHtcbiAgICAgIHJldHVybiBuZXcgWE1MRG9jdW1lbnRDQihvcHRpb25zLCBvbkRhdGEsIG9uRW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBYTUxEb2N1bWVudChvcHRpb25zKTtcbiAgICB9XG4gIH07XG5cbiAgbW9kdWxlLmV4cG9ydHMuc3RyaW5nV3JpdGVyID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgWE1MU3RyaW5nV3JpdGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzLnN0cmVhbVdyaXRlciA9IGZ1bmN0aW9uKHN0cmVhbSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgWE1MU3RyZWFtV3JpdGVyKHN0cmVhbSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgbW9kdWxlLmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBuZXcgWE1MRE9NSW1wbGVtZW50YXRpb24oKTtcblxuICBtb2R1bGUuZXhwb3J0cy5ub2RlVHlwZSA9IE5vZGVUeXBlO1xuXG4gIG1vZHVsZS5leHBvcnRzLndyaXRlclN0YXRlID0gV3JpdGVyU3RhdGU7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCJleHBvcnQgdmFyIFBKRF8zUEFSQU0gPSAxO1xuZXhwb3J0IHZhciBQSkRfN1BBUkFNID0gMjtcbmV4cG9ydCB2YXIgUEpEX1dHUzg0ID0gNDsgLy8gV0dTODQgb3IgZXF1aXZhbGVudFxuZXhwb3J0IHZhciBQSkRfTk9EQVRVTSA9IDU7IC8vIFdHUzg0IG9yIGVxdWl2YWxlbnRcbmV4cG9ydCB2YXIgU0VDX1RPX1JBRCA9IDQuODQ4MTM2ODExMDk1MzU5OTM1ODk5MTQxMDIzNTdlLTY7XG5leHBvcnQgdmFyIEhBTEZfUEkgPSBNYXRoLlBJLzI7XG4vLyBlbGxpcG9pZCBwal9zZXRfZWxsLmNcbmV4cG9ydCB2YXIgU0lYVEggPSAwLjE2NjY2NjY2NjY2NjY2NjY2Njc7XG4vKiAxLzYgKi9cbmV4cG9ydCB2YXIgUkE0ID0gMC4wNDcyMjIyMjIyMjIyMjIyMjIyMjtcbi8qIDE3LzM2MCAqL1xuZXhwb3J0IHZhciBSQTYgPSAwLjAyMjE1NjA4NDY1NjA4NDY1NjA4O1xuZXhwb3J0IHZhciBFUFNMTiA9IDEuMGUtMTA7XG4vLyB5b3UnZCB0aGluayB5b3UgY291bGQgdXNlIE51bWJlci5FUFNJTE9OIGFib3ZlIGJ1dCB0aGF0IG1ha2VzXG4vLyBNb2xsd2VpZGUgZ2V0IGludG8gYW4gaW5maW5hdGUgbG9vcC5cblxuZXhwb3J0IHZhciBEMlIgPSAwLjAxNzQ1MzI5MjUxOTk0MzI5NTc3O1xuZXhwb3J0IHZhciBSMkQgPSA1Ny4yOTU3Nzk1MTMwODIzMjA4ODtcbmV4cG9ydCB2YXIgRk9SVFBJID0gTWF0aC5QSS80O1xuZXhwb3J0IHZhciBUV09fUEkgPSBNYXRoLlBJICogMjtcbi8vIFNQSSBpcyBzbGlnaHRseSBncmVhdGVyIHRoYW4gTWF0aC5QSSwgc28gdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSAtMTgwLi4xODBcbi8vIGRlZ3JlZSByYW5nZSBieSBhIHRpbnkgYW1vdW50IGRvbid0IGdldCB3cmFwcGVkLiBUaGlzIHByZXZlbnRzIHBvaW50cyB0aGF0XG4vLyBoYXZlIGRyaWZ0ZWQgZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbiBhbG9uZyB0aGUgMTgwdGggbWVyaWRpYW4gKGR1ZSB0b1xuLy8gZmxvYXRpbmcgcG9pbnQgZXJyb3IpIGZyb20gY2hhbmdpbmcgdGhlaXIgc2lnbi5cbmV4cG9ydCB2YXIgU1BJID0gMy4xNDE1OTI2NTM1OTtcbiIsInZhciBleHBvcnRzID0ge307XG5leHBvcnQge2V4cG9ydHMgYXMgZGVmYXVsdH07XG5cbmV4cG9ydHMuZ3JlZW53aWNoID0gMC4wOyAvL1wiMGRFXCIsXG5leHBvcnRzLmxpc2JvbiA9IC05LjEzMTkwNjExMTExMTsgLy9cIjlkMDcnNTQuODYyXFxcIldcIixcbmV4cG9ydHMucGFyaXMgPSAyLjMzNzIyOTE2NjY2NzsgLy9cIjJkMjAnMTQuMDI1XFxcIkVcIixcbmV4cG9ydHMuYm9nb3RhID0gLTc0LjA4MDkxNjY2NjY2NzsgLy9cIjc0ZDA0JzUxLjNcXFwiV1wiLFxuZXhwb3J0cy5tYWRyaWQgPSAtMy42ODc5Mzg4ODg4ODk7IC8vXCIzZDQxJzE2LjU4XFxcIldcIixcbmV4cG9ydHMucm9tZSA9IDEyLjQ1MjMzMzMzMzMzMzsgLy9cIjEyZDI3JzguNFxcXCJFXCIsXG5leHBvcnRzLmJlcm4gPSA3LjQzOTU4MzMzMzMzMzsgLy9cIjdkMjYnMjIuNVxcXCJFXCIsXG5leHBvcnRzLmpha2FydGEgPSAxMDYuODA3NzE5NDQ0NDQ0OyAvL1wiMTA2ZDQ4JzI3Ljc5XFxcIkVcIixcbmV4cG9ydHMuZmVycm8gPSAtMTcuNjY2NjY2NjY2NjY3OyAvL1wiMTdkNDAnV1wiLFxuZXhwb3J0cy5icnVzc2VscyA9IDQuMzY3OTc1OyAvL1wiNGQyMic0LjcxXFxcIkVcIixcbmV4cG9ydHMuc3RvY2tob2xtID0gMTguMDU4Mjc3Nzc3Nzc4OyAvL1wiMThkMycyOS44XFxcIkVcIixcbmV4cG9ydHMuYXRoZW5zID0gMjMuNzE2MzM3NTsgLy9cIjIzZDQyJzU4LjgxNVxcXCJFXCIsXG5leHBvcnRzLm9zbG8gPSAxMC43MjI5MTY2NjY2Njc7IC8vXCIxMGQ0MycyMi41XFxcIkVcIlxuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBmdDoge3RvX21ldGVyOiAwLjMwNDh9LFxuICAndXMtZnQnOiB7dG9fbWV0ZXI6IDEyMDAgLyAzOTM3fVxufTtcbiIsInZhciBpZ25vcmVkQ2hhciA9IC9bXFxzX1xcLVxcL1xcKFxcKV0vZztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1hdGNoKG9iaiwga2V5KSB7XG4gIGlmIChvYmpba2V5XSkge1xuICAgIHJldHVybiBvYmpba2V5XTtcbiAgfVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIHZhciBsa2V5ID0ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZShpZ25vcmVkQ2hhciwgJycpO1xuICB2YXIgaSA9IC0xO1xuICB2YXIgdGVzdGtleSwgcHJvY2Vzc2VkS2V5O1xuICB3aGlsZSAoKytpIDwga2V5cy5sZW5ndGgpIHtcbiAgICB0ZXN0a2V5ID0ga2V5c1tpXTtcbiAgICBwcm9jZXNzZWRLZXkgPSB0ZXN0a2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZShpZ25vcmVkQ2hhciwgJycpO1xuICAgIGlmIChwcm9jZXNzZWRLZXkgPT09IGxrZXkpIHtcbiAgICAgIHJldHVybiBvYmpbdGVzdGtleV07XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge0QyUn0gZnJvbSAnLi9jb25zdGFudHMvdmFsdWVzJztcbmltcG9ydCBQcmltZU1lcmlkaWFuIGZyb20gJy4vY29uc3RhbnRzL1ByaW1lTWVyaWRpYW4nO1xuaW1wb3J0IHVuaXRzIGZyb20gJy4vY29uc3RhbnRzL3VuaXRzJztcbmltcG9ydCBtYXRjaCBmcm9tICcuL21hdGNoJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZGVmRGF0YSkge1xuICB2YXIgc2VsZiA9IHt9O1xuICB2YXIgcGFyYW1PYmogPSBkZWZEYXRhLnNwbGl0KCcrJykubWFwKGZ1bmN0aW9uKHYpIHtcbiAgICByZXR1cm4gdi50cmltKCk7XG4gIH0pLmZpbHRlcihmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0pLnJlZHVjZShmdW5jdGlvbihwLCBhKSB7XG4gICAgdmFyIHNwbGl0ID0gYS5zcGxpdCgnPScpO1xuICAgIHNwbGl0LnB1c2godHJ1ZSk7XG4gICAgcFtzcGxpdFswXS50b0xvd2VyQ2FzZSgpXSA9IHNwbGl0WzFdO1xuICAgIHJldHVybiBwO1xuICB9LCB7fSk7XG4gIHZhciBwYXJhbU5hbWUsIHBhcmFtVmFsLCBwYXJhbU91dG5hbWU7XG4gIHZhciBwYXJhbXMgPSB7XG4gICAgcHJvajogJ3Byb2pOYW1lJyxcbiAgICBkYXR1bTogJ2RhdHVtQ29kZScsXG4gICAgcmY6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYucmYgPSBwYXJzZUZsb2F0KHYpO1xuICAgIH0sXG4gICAgbGF0XzA6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYubGF0MCA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICBsYXRfMTogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5sYXQxID0gdiAqIEQyUjtcbiAgICB9LFxuICAgIGxhdF8yOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmxhdDIgPSB2ICogRDJSO1xuICAgIH0sXG4gICAgbGF0X3RzOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmxhdF90cyA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICBsb25fMDogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5sb25nMCA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICBsb25fMTogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5sb25nMSA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICBsb25fMjogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5sb25nMiA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICBhbHBoYTogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5hbHBoYSA9IHBhcnNlRmxvYXQodikgKiBEMlI7XG4gICAgfSxcbiAgICBsb25jOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmxvbmdjID0gdiAqIEQyUjtcbiAgICB9LFxuICAgIHhfMDogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi54MCA9IHBhcnNlRmxvYXQodik7XG4gICAgfSxcbiAgICB5XzA6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYueTAgPSBwYXJzZUZsb2F0KHYpO1xuICAgIH0sXG4gICAga18wOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmswID0gcGFyc2VGbG9hdCh2KTtcbiAgICB9LFxuICAgIGs6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYuazAgPSBwYXJzZUZsb2F0KHYpO1xuICAgIH0sXG4gICAgYTogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5hID0gcGFyc2VGbG9hdCh2KTtcbiAgICB9LFxuICAgIGI6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYuYiA9IHBhcnNlRmxvYXQodik7XG4gICAgfSxcbiAgICByX2E6IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5SX0EgPSB0cnVlO1xuICAgIH0sXG4gICAgem9uZTogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi56b25lID0gcGFyc2VJbnQodiwgMTApO1xuICAgIH0sXG4gICAgc291dGg6IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi51dG1Tb3V0aCA9IHRydWU7XG4gICAgfSxcbiAgICB0b3dnczg0OiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmRhdHVtX3BhcmFtcyA9IHYuc3BsaXQoXCIsXCIpLm1hcChmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGEpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB0b19tZXRlcjogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi50b19tZXRlciA9IHBhcnNlRmxvYXQodik7XG4gICAgfSxcbiAgICB1bml0czogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi51bml0cyA9IHY7XG4gICAgICB2YXIgdW5pdCA9IG1hdGNoKHVuaXRzLCB2KTtcbiAgICAgIGlmICh1bml0KSB7XG4gICAgICAgIHNlbGYudG9fbWV0ZXIgPSB1bml0LnRvX21ldGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgZnJvbV9ncmVlbndpY2g6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYuZnJvbV9ncmVlbndpY2ggPSB2ICogRDJSO1xuICAgIH0sXG4gICAgcG06IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHZhciBwbSA9IG1hdGNoKFByaW1lTWVyaWRpYW4sIHYpO1xuICAgICAgc2VsZi5mcm9tX2dyZWVud2ljaCA9IChwbSA/IHBtIDogcGFyc2VGbG9hdCh2KSkgKiBEMlI7XG4gICAgfSxcbiAgICBuYWRncmlkczogZnVuY3Rpb24odikge1xuICAgICAgaWYgKHYgPT09ICdAbnVsbCcpIHtcbiAgICAgICAgc2VsZi5kYXR1bUNvZGUgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2VsZi5uYWRncmlkcyA9IHY7XG4gICAgICB9XG4gICAgfSxcbiAgICBheGlzOiBmdW5jdGlvbih2KSB7XG4gICAgICB2YXIgbGVnYWxBeGlzID0gXCJld25zdWRcIjtcbiAgICAgIGlmICh2Lmxlbmd0aCA9PT0gMyAmJiBsZWdhbEF4aXMuaW5kZXhPZih2LnN1YnN0cigwLCAxKSkgIT09IC0xICYmIGxlZ2FsQXhpcy5pbmRleE9mKHYuc3Vic3RyKDEsIDEpKSAhPT0gLTEgJiYgbGVnYWxBeGlzLmluZGV4T2Yodi5zdWJzdHIoMiwgMSkpICE9PSAtMSkge1xuICAgICAgICBzZWxmLmF4aXMgPSB2O1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgZm9yIChwYXJhbU5hbWUgaW4gcGFyYW1PYmopIHtcbiAgICBwYXJhbVZhbCA9IHBhcmFtT2JqW3BhcmFtTmFtZV07XG4gICAgaWYgKHBhcmFtTmFtZSBpbiBwYXJhbXMpIHtcbiAgICAgIHBhcmFtT3V0bmFtZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgaWYgKHR5cGVvZiBwYXJhbU91dG5hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcGFyYW1PdXRuYW1lKHBhcmFtVmFsKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzZWxmW3BhcmFtT3V0bmFtZV0gPSBwYXJhbVZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzZWxmW3BhcmFtTmFtZV0gPSBwYXJhbVZhbDtcbiAgICB9XG4gIH1cbiAgaWYodHlwZW9mIHNlbGYuZGF0dW1Db2RlID09PSAnc3RyaW5nJyAmJiBzZWxmLmRhdHVtQ29kZSAhPT0gXCJXR1M4NFwiKXtcbiAgICBzZWxmLmRhdHVtQ29kZSA9IHNlbGYuZGF0dW1Db2RlLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBwYXJzZVN0cmluZztcblxudmFyIE5FVVRSQUwgPSAxO1xudmFyIEtFWVdPUkQgPSAyO1xudmFyIE5VTUJFUiA9IDM7XG52YXIgUVVPVEVEID0gNDtcbnZhciBBRlRFUlFVT1RFID0gNTtcbnZhciBFTkRFRCA9IC0xO1xudmFyIHdoaXRlc3BhY2UgPSAvXFxzLztcbnZhciBsYXRpbiA9IC9bQS1aYS16XS87XG52YXIga2V5d29yZCA9IC9bQS1aYS16ODRdLztcbnZhciBlbmRUaGluZ3MgPSAvWyxcXF1dLztcbnZhciBkaWdldHMgPSAvW1xcZFxcLkVcXC1cXCtdLztcbi8vIGNvbnN0IGlnbm9yZWRDaGFyID0gL1tcXHNfXFwtXFwvXFwoXFwpXS9nO1xuZnVuY3Rpb24gUGFyc2VyKHRleHQpIHtcbiAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGEgc3RyaW5nJyk7XG4gIH1cbiAgdGhpcy50ZXh0ID0gdGV4dC50cmltKCk7XG4gIHRoaXMubGV2ZWwgPSAwO1xuICB0aGlzLnBsYWNlID0gMDtcbiAgdGhpcy5yb290ID0gbnVsbDtcbiAgdGhpcy5zdGFjayA9IFtdO1xuICB0aGlzLmN1cnJlbnRPYmplY3QgPSBudWxsO1xuICB0aGlzLnN0YXRlID0gTkVVVFJBTDtcbn1cblBhcnNlci5wcm90b3R5cGUucmVhZENoYXJpY3RlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY2hhciA9IHRoaXMudGV4dFt0aGlzLnBsYWNlKytdO1xuICBpZiAodGhpcy5zdGF0ZSAhPT0gUVVPVEVEKSB7XG4gICAgd2hpbGUgKHdoaXRlc3BhY2UudGVzdChjaGFyKSkge1xuICAgICAgaWYgKHRoaXMucGxhY2UgPj0gdGhpcy50ZXh0Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjaGFyID0gdGhpcy50ZXh0W3RoaXMucGxhY2UrK107XG4gICAgfVxuICB9XG4gIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgIGNhc2UgTkVVVFJBTDpcbiAgICAgIHJldHVybiB0aGlzLm5ldXRyYWwoY2hhcik7XG4gICAgY2FzZSBLRVlXT1JEOlxuICAgICAgcmV0dXJuIHRoaXMua2V5d29yZChjaGFyKVxuICAgIGNhc2UgUVVPVEVEOlxuICAgICAgcmV0dXJuIHRoaXMucXVvdGVkKGNoYXIpO1xuICAgIGNhc2UgQUZURVJRVU9URTpcbiAgICAgIHJldHVybiB0aGlzLmFmdGVycXVvdGUoY2hhcik7XG4gICAgY2FzZSBOVU1CRVI6XG4gICAgICByZXR1cm4gdGhpcy5udW1iZXIoY2hhcik7XG4gICAgY2FzZSBFTkRFRDpcbiAgICAgIHJldHVybjtcbiAgfVxufTtcblBhcnNlci5wcm90b3R5cGUuYWZ0ZXJxdW90ZSA9IGZ1bmN0aW9uKGNoYXIpIHtcbiAgaWYgKGNoYXIgPT09ICdcIicpIHtcbiAgICB0aGlzLndvcmQgKz0gJ1wiJztcbiAgICB0aGlzLnN0YXRlID0gUVVPVEVEO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZW5kVGhpbmdzLnRlc3QoY2hhcikpIHtcbiAgICB0aGlzLndvcmQgPSB0aGlzLndvcmQudHJpbSgpO1xuICAgIHRoaXMuYWZ0ZXJJdGVtKGNoYXIpO1xuICAgIHJldHVybjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ2hhdm5cXCd0IGhhbmRsZWQgXCInICtjaGFyICsgJ1wiIGluIGFmdGVycXVvdGUgeWV0LCBpbmRleCAnICsgdGhpcy5wbGFjZSk7XG59O1xuUGFyc2VyLnByb3RvdHlwZS5hZnRlckl0ZW0gPSBmdW5jdGlvbihjaGFyKSB7XG4gIGlmIChjaGFyID09PSAnLCcpIHtcbiAgICBpZiAodGhpcy53b3JkICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPYmplY3QucHVzaCh0aGlzLndvcmQpO1xuICAgIH1cbiAgICB0aGlzLndvcmQgPSBudWxsO1xuICAgIHRoaXMuc3RhdGUgPSBORVVUUkFMO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY2hhciA9PT0gJ10nKSB7XG4gICAgdGhpcy5sZXZlbC0tO1xuICAgIGlmICh0aGlzLndvcmQgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuY3VycmVudE9iamVjdC5wdXNoKHRoaXMud29yZCk7XG4gICAgICB0aGlzLndvcmQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0gTkVVVFJBTDtcbiAgICB0aGlzLmN1cnJlbnRPYmplY3QgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgIGlmICghdGhpcy5jdXJyZW50T2JqZWN0KSB7XG4gICAgICB0aGlzLnN0YXRlID0gRU5ERUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG59O1xuUGFyc2VyLnByb3RvdHlwZS5udW1iZXIgPSBmdW5jdGlvbihjaGFyKSB7XG4gIGlmIChkaWdldHMudGVzdChjaGFyKSkge1xuICAgIHRoaXMud29yZCArPSBjaGFyO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZW5kVGhpbmdzLnRlc3QoY2hhcikpIHtcbiAgICB0aGlzLndvcmQgPSBwYXJzZUZsb2F0KHRoaXMud29yZCk7XG4gICAgdGhpcy5hZnRlckl0ZW0oY2hhcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignaGF2blxcJ3QgaGFuZGxlZCBcIicgK2NoYXIgKyAnXCIgaW4gbnVtYmVyIHlldCwgaW5kZXggJyArIHRoaXMucGxhY2UpO1xufTtcblBhcnNlci5wcm90b3R5cGUucXVvdGVkID0gZnVuY3Rpb24oY2hhcikge1xuICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgIHRoaXMuc3RhdGUgPSBBRlRFUlFVT1RFO1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLndvcmQgKz0gY2hhcjtcbiAgcmV0dXJuO1xufTtcblBhcnNlci5wcm90b3R5cGUua2V5d29yZCA9IGZ1bmN0aW9uKGNoYXIpIHtcbiAgaWYgKGtleXdvcmQudGVzdChjaGFyKSkge1xuICAgIHRoaXMud29yZCArPSBjaGFyO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY2hhciA9PT0gJ1snKSB7XG4gICAgdmFyIG5ld09iamVjdHMgPSBbXTtcbiAgICBuZXdPYmplY3RzLnB1c2godGhpcy53b3JkKTtcbiAgICB0aGlzLmxldmVsKys7XG4gICAgaWYgKHRoaXMucm9vdCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yb290ID0gbmV3T2JqZWN0cztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50T2JqZWN0LnB1c2gobmV3T2JqZWN0cyk7XG4gICAgfVxuICAgIHRoaXMuc3RhY2sucHVzaCh0aGlzLmN1cnJlbnRPYmplY3QpO1xuICAgIHRoaXMuY3VycmVudE9iamVjdCA9IG5ld09iamVjdHM7XG4gICAgdGhpcy5zdGF0ZSA9IE5FVVRSQUw7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChlbmRUaGluZ3MudGVzdChjaGFyKSkge1xuICAgIHRoaXMuYWZ0ZXJJdGVtKGNoYXIpO1xuICAgIHJldHVybjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ2hhdm5cXCd0IGhhbmRsZWQgXCInICtjaGFyICsgJ1wiIGluIGtleXdvcmQgeWV0LCBpbmRleCAnICsgdGhpcy5wbGFjZSk7XG59O1xuUGFyc2VyLnByb3RvdHlwZS5uZXV0cmFsID0gZnVuY3Rpb24oY2hhcikge1xuICBpZiAobGF0aW4udGVzdChjaGFyKSkge1xuICAgIHRoaXMud29yZCA9IGNoYXI7XG4gICAgdGhpcy5zdGF0ZSA9IEtFWVdPUkQ7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgdGhpcy53b3JkID0gJyc7XG4gICAgdGhpcy5zdGF0ZSA9IFFVT1RFRDtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGRpZ2V0cy50ZXN0KGNoYXIpKSB7XG4gICAgdGhpcy53b3JkID0gY2hhcjtcbiAgICB0aGlzLnN0YXRlID0gTlVNQkVSO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZW5kVGhpbmdzLnRlc3QoY2hhcikpIHtcbiAgICB0aGlzLmFmdGVySXRlbShjaGFyKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdoYXZuXFwndCBoYW5kbGVkIFwiJyArY2hhciArICdcIiBpbiBuZXV0cmFsIHlldCwgaW5kZXggJyArIHRoaXMucGxhY2UpO1xufTtcblBhcnNlci5wcm90b3R5cGUub3V0cHV0ID0gZnVuY3Rpb24oKSB7XG4gIHdoaWxlICh0aGlzLnBsYWNlIDwgdGhpcy50ZXh0Lmxlbmd0aCkge1xuICAgIHRoaXMucmVhZENoYXJpY3RlcigpO1xuICB9XG4gIGlmICh0aGlzLnN0YXRlID09PSBFTkRFRCkge1xuICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gcGFyc2Ugc3RyaW5nIFwiJyArdGhpcy50ZXh0ICsgJ1wiLiBTdGF0ZSBpcyAnICsgdGhpcy5zdGF0ZSk7XG59O1xuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyh0eHQpIHtcbiAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHh0KTtcbiAgcmV0dXJuIHBhcnNlci5vdXRwdXQoKTtcbn1cbiIsIlxuXG5mdW5jdGlvbiBtYXBpdChvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgIHZhbHVlLnVuc2hpZnQoa2V5KTtcbiAgICBrZXkgPSBudWxsO1xuICB9XG4gIHZhciB0aGluZyA9IGtleSA/IHt9IDogb2JqO1xuXG4gIHZhciBvdXQgPSB2YWx1ZS5yZWR1Y2UoZnVuY3Rpb24obmV3T2JqLCBpdGVtKSB7XG4gICAgc0V4cHIoaXRlbSwgbmV3T2JqKTtcbiAgICByZXR1cm4gbmV3T2JqXG4gIH0sIHRoaW5nKTtcbiAgaWYgKGtleSkge1xuICAgIG9ialtrZXldID0gb3V0O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzRXhwcih2LCBvYmopIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgb2JqW3ZdID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGtleSA9IHYuc2hpZnQoKTtcbiAgaWYgKGtleSA9PT0gJ1BBUkFNRVRFUicpIHtcbiAgICBrZXkgPSB2LnNoaWZ0KCk7XG4gIH1cbiAgaWYgKHYubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodlswXSkpIHtcbiAgICAgIG9ialtrZXldID0ge307XG4gICAgICBzRXhwcih2WzBdLCBvYmpba2V5XSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9ialtrZXldID0gdlswXTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCF2Lmxlbmd0aCkge1xuICAgIG9ialtrZXldID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGtleSA9PT0gJ1RPV0dTODQnKSB7XG4gICAgb2JqW2tleV0gPSB2O1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoa2V5ID09PSAnQVhJUycpIHtcbiAgICBpZiAoIShrZXkgaW4gb2JqKSkge1xuICAgICAgb2JqW2tleV0gPSBbXTtcbiAgICB9XG4gICAgb2JqW2tleV0ucHVzaCh2KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICBvYmpba2V5XSA9IHt9O1xuICB9XG5cbiAgdmFyIGk7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnVU5JVCc6XG4gICAgY2FzZSAnUFJJTUVNJzpcbiAgICBjYXNlICdWRVJUX0RBVFVNJzpcbiAgICAgIG9ialtrZXldID0ge1xuICAgICAgICBuYW1lOiB2WzBdLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGNvbnZlcnQ6IHZbMV1cbiAgICAgIH07XG4gICAgICBpZiAodi5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgc0V4cHIodlsyXSwgb2JqW2tleV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgJ1NQSEVST0lEJzpcbiAgICBjYXNlICdFTExJUFNPSUQnOlxuICAgICAgb2JqW2tleV0gPSB7XG4gICAgICAgIG5hbWU6IHZbMF0sXG4gICAgICAgIGE6IHZbMV0sXG4gICAgICAgIHJmOiB2WzJdXG4gICAgICB9O1xuICAgICAgaWYgKHYubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIHNFeHByKHZbM10sIG9ialtrZXldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdQUk9KRUNURURDUlMnOlxuICAgIGNhc2UgJ1BST0pDUlMnOlxuICAgIGNhc2UgJ0dFT0dDUyc6XG4gICAgY2FzZSAnR0VPQ0NTJzpcbiAgICBjYXNlICdQUk9KQ1MnOlxuICAgIGNhc2UgJ0xPQ0FMX0NTJzpcbiAgICBjYXNlICdHRU9EQ1JTJzpcbiAgICBjYXNlICdHRU9ERVRJQ0NSUyc6XG4gICAgY2FzZSAnR0VPREVUSUNEQVRVTSc6XG4gICAgY2FzZSAnRURBVFVNJzpcbiAgICBjYXNlICdFTkdJTkVFUklOR0RBVFVNJzpcbiAgICBjYXNlICdWRVJUX0NTJzpcbiAgICBjYXNlICdWRVJUQ1JTJzpcbiAgICBjYXNlICdWRVJUSUNBTENSUyc6XG4gICAgY2FzZSAnQ09NUERfQ1MnOlxuICAgIGNhc2UgJ0NPTVBPVU5EQ1JTJzpcbiAgICBjYXNlICdFTkdJTkVFUklOR0NSUyc6XG4gICAgY2FzZSAnRU5HQ1JTJzpcbiAgICBjYXNlICdGSVRURURfQ1MnOlxuICAgIGNhc2UgJ0xPQ0FMX0RBVFVNJzpcbiAgICBjYXNlICdEQVRVTSc6XG4gICAgICB2WzBdID0gWyduYW1lJywgdlswXV07XG4gICAgICBtYXBpdChvYmosIGtleSwgdik7XG4gICAgICByZXR1cm47XG4gICAgZGVmYXVsdDpcbiAgICAgIGkgPSAtMTtcbiAgICAgIHdoaWxlICgrK2kgPCB2Lmxlbmd0aCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodltpXSkpIHtcbiAgICAgICAgICByZXR1cm4gc0V4cHIodiwgb2JqW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwaXQob2JqLCBrZXksIHYpO1xuICB9XG59XG4iLCJ2YXIgRDJSID0gMC4wMTc0NTMyOTI1MTk5NDMyOTU3NztcbmltcG9ydCBwYXJzZXIgZnJvbSAnLi9wYXJzZXInO1xuaW1wb3J0IHtzRXhwcn0gZnJvbSAnLi9wcm9jZXNzJztcblxuXG5cbmZ1bmN0aW9uIHJlbmFtZShvYmosIHBhcmFtcykge1xuICB2YXIgb3V0TmFtZSA9IHBhcmFtc1swXTtcbiAgdmFyIGluTmFtZSA9IHBhcmFtc1sxXTtcbiAgaWYgKCEob3V0TmFtZSBpbiBvYmopICYmIChpbk5hbWUgaW4gb2JqKSkge1xuICAgIG9ialtvdXROYW1lXSA9IG9ialtpbk5hbWVdO1xuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAzKSB7XG4gICAgICBvYmpbb3V0TmFtZV0gPSBwYXJhbXNbMl0ob2JqW291dE5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZDJyKGlucHV0KSB7XG4gIHJldHVybiBpbnB1dCAqIEQyUjtcbn1cblxuZnVuY3Rpb24gY2xlYW5XS1Qod2t0KSB7XG4gIGlmICh3a3QudHlwZSA9PT0gJ0dFT0dDUycpIHtcbiAgICB3a3QucHJvak5hbWUgPSAnbG9uZ2xhdCc7XG4gIH0gZWxzZSBpZiAod2t0LnR5cGUgPT09ICdMT0NBTF9DUycpIHtcbiAgICB3a3QucHJvak5hbWUgPSAnaWRlbnRpdHknO1xuICAgIHdrdC5sb2NhbCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiB3a3QuUFJPSkVDVElPTiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHdrdC5wcm9qTmFtZSA9IE9iamVjdC5rZXlzKHdrdC5QUk9KRUNUSU9OKVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2t0LnByb2pOYW1lID0gd2t0LlBST0pFQ1RJT047XG4gICAgfVxuICB9XG4gIGlmICh3a3QuQVhJUykge1xuICAgIHZhciBheGlzT3JkZXIgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB3a3QuQVhJUy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICB2YXIgYXhpcyA9IHdrdC5BWElTW2ldO1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBheGlzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoZGVzY3JpcHRvci5pbmRleE9mKCdub3J0aCcpICE9PSAtMSkge1xuICAgICAgICBheGlzT3JkZXIgKz0gJ24nO1xuICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmluZGV4T2YoJ3NvdXRoJykgIT09IC0xKSB7XG4gICAgICAgIGF4aXNPcmRlciArPSAncyc7XG4gICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuaW5kZXhPZignZWFzdCcpICE9PSAtMSkge1xuICAgICAgICBheGlzT3JkZXIgKz0gJ2UnO1xuICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmluZGV4T2YoJ3dlc3QnKSAhPT0gLTEpIHtcbiAgICAgICAgYXhpc09yZGVyICs9ICd3JztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGF4aXNPcmRlci5sZW5ndGggPT09IDIpIHtcbiAgICAgIGF4aXNPcmRlciArPSAndSc7XG4gICAgfVxuICAgIGlmIChheGlzT3JkZXIubGVuZ3RoID09PSAzKSB7XG4gICAgICB3a3QuYXhpcyA9IGF4aXNPcmRlcjtcbiAgICB9XG4gIH1cbiAgaWYgKHdrdC5VTklUKSB7XG4gICAgd2t0LnVuaXRzID0gd2t0LlVOSVQubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh3a3QudW5pdHMgPT09ICdtZXRyZScpIHtcbiAgICAgIHdrdC51bml0cyA9ICdtZXRlcic7XG4gICAgfVxuICAgIGlmICh3a3QuVU5JVC5jb252ZXJ0KSB7XG4gICAgICBpZiAod2t0LnR5cGUgPT09ICdHRU9HQ1MnKSB7XG4gICAgICAgIGlmICh3a3QuREFUVU0gJiYgd2t0LkRBVFVNLlNQSEVST0lEKSB7XG4gICAgICAgICAgd2t0LnRvX21ldGVyID0gd2t0LlVOSVQuY29udmVydCp3a3QuREFUVU0uU1BIRVJPSUQuYTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2t0LnRvX21ldGVyID0gd2t0LlVOSVQuY29udmVydDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdmFyIGdlb2djcyA9IHdrdC5HRU9HQ1M7XG4gIGlmICh3a3QudHlwZSA9PT0gJ0dFT0dDUycpIHtcbiAgICBnZW9nY3MgPSB3a3Q7XG4gIH1cbiAgaWYgKGdlb2djcykge1xuICAgIC8vaWYod2t0LkdFT0dDUy5QUklNRU0mJndrdC5HRU9HQ1MuUFJJTUVNLmNvbnZlcnQpe1xuICAgIC8vICB3a3QuZnJvbV9ncmVlbndpY2g9d2t0LkdFT0dDUy5QUklNRU0uY29udmVydCpEMlI7XG4gICAgLy99XG4gICAgaWYgKGdlb2djcy5EQVRVTSkge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9IGdlb2djcy5EQVRVTS5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSBnZW9nY3MubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAod2t0LmRhdHVtQ29kZS5zbGljZSgwLCAyKSA9PT0gJ2RfJykge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9IHdrdC5kYXR1bUNvZGUuc2xpY2UoMik7XG4gICAgfVxuICAgIGlmICh3a3QuZGF0dW1Db2RlID09PSAnbmV3X3plYWxhbmRfZ2VvZGV0aWNfZGF0dW1fMTk0OScgfHwgd2t0LmRhdHVtQ29kZSA9PT0gJ25ld196ZWFsYW5kXzE5NDknKSB7XG4gICAgICB3a3QuZGF0dW1Db2RlID0gJ256Z2Q0OSc7XG4gICAgfVxuICAgIGlmICh3a3QuZGF0dW1Db2RlID09PSAnd2dzXzE5ODQnIHx8IHdrdC5kYXR1bUNvZGUgPT09ICd3b3JsZF9nZW9kZXRpY19zeXN0ZW1fMTk4NCcpIHtcbiAgICAgIGlmICh3a3QuUFJPSkVDVElPTiA9PT0gJ01lcmNhdG9yX0F1eGlsaWFyeV9TcGhlcmUnKSB7XG4gICAgICAgIHdrdC5zcGhlcmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgd2t0LmRhdHVtQ29kZSA9ICd3Z3M4NCc7XG4gICAgfVxuICAgIGlmICh3a3QuZGF0dW1Db2RlLnNsaWNlKC02KSA9PT0gJ19mZXJybycpIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSB3a3QuZGF0dW1Db2RlLnNsaWNlKDAsIC0gNik7XG4gICAgfVxuICAgIGlmICh3a3QuZGF0dW1Db2RlLnNsaWNlKC04KSA9PT0gJ19qYWthcnRhJykge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9IHdrdC5kYXR1bUNvZGUuc2xpY2UoMCwgLSA4KTtcbiAgICB9XG4gICAgaWYgKH53a3QuZGF0dW1Db2RlLmluZGV4T2YoJ2JlbGdlJykpIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSAncm5iNzInO1xuICAgIH1cbiAgICBpZiAoZ2VvZ2NzLkRBVFVNICYmIGdlb2djcy5EQVRVTS5TUEhFUk9JRCkge1xuICAgICAgd2t0LmVsbHBzID0gZ2VvZ2NzLkRBVFVNLlNQSEVST0lELm5hbWUucmVwbGFjZSgnXzE5JywgJycpLnJlcGxhY2UoL1tDY11sYXJrZVxcXzE4LywgJ2NscmsnKTtcbiAgICAgIGlmICh3a3QuZWxscHMudG9Mb3dlckNhc2UoKS5zbGljZSgwLCAxMykgPT09ICdpbnRlcm5hdGlvbmFsJykge1xuICAgICAgICB3a3QuZWxscHMgPSAnaW50bCc7XG4gICAgICB9XG5cbiAgICAgIHdrdC5hID0gZ2VvZ2NzLkRBVFVNLlNQSEVST0lELmE7XG4gICAgICB3a3QucmYgPSBwYXJzZUZsb2F0KGdlb2djcy5EQVRVTS5TUEhFUk9JRC5yZiwgMTApO1xuICAgIH1cblxuICAgIGlmIChnZW9nY3MuREFUVU0gJiYgZ2VvZ2NzLkRBVFVNLlRPV0dTODQpIHtcbiAgICAgIHdrdC5kYXR1bV9wYXJhbXMgPSBnZW9nY3MuREFUVU0uVE9XR1M4NDtcbiAgICB9XG4gICAgaWYgKH53a3QuZGF0dW1Db2RlLmluZGV4T2YoJ29zZ2JfMTkzNicpKSB7XG4gICAgICB3a3QuZGF0dW1Db2RlID0gJ29zZ2IzNic7XG4gICAgfVxuICAgIGlmICh+d2t0LmRhdHVtQ29kZS5pbmRleE9mKCdvc25pXzE5NTInKSkge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9ICdvc25pNTInO1xuICAgIH1cbiAgICBpZiAofndrdC5kYXR1bUNvZGUuaW5kZXhPZigndG02NScpXG4gICAgICB8fCB+d2t0LmRhdHVtQ29kZS5pbmRleE9mKCdnZW9kZXRpY19kYXR1bV9vZl8xOTY1JykpIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSAnaXJlNjUnO1xuICAgIH1cbiAgICBpZiAod2t0LmRhdHVtQ29kZSA9PT0gJ2NoMTkwMysnKSB7XG4gICAgICB3a3QuZGF0dW1Db2RlID0gJ2NoMTkwMyc7XG4gICAgfVxuICAgIGlmICh+d2t0LmRhdHVtQ29kZS5pbmRleE9mKCdpc3JhZWwnKSkge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9ICdpc3I5Myc7XG4gICAgfVxuICB9XG4gIGlmICh3a3QuYiAmJiAhaXNGaW5pdGUod2t0LmIpKSB7XG4gICAgd2t0LmIgPSB3a3QuYTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvTWV0ZXIoaW5wdXQpIHtcbiAgICB2YXIgcmF0aW8gPSB3a3QudG9fbWV0ZXIgfHwgMTtcbiAgICByZXR1cm4gaW5wdXQgKiByYXRpbztcbiAgfVxuICB2YXIgcmVuYW1lciA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gcmVuYW1lKHdrdCwgYSk7XG4gIH07XG4gIHZhciBsaXN0ID0gW1xuICAgIFsnc3RhbmRhcmRfcGFyYWxsZWxfMScsICdTdGFuZGFyZF9QYXJhbGxlbF8xJ10sXG4gICAgWydzdGFuZGFyZF9wYXJhbGxlbF8yJywgJ1N0YW5kYXJkX1BhcmFsbGVsXzInXSxcbiAgICBbJ2ZhbHNlX2Vhc3RpbmcnLCAnRmFsc2VfRWFzdGluZyddLFxuICAgIFsnZmFsc2Vfbm9ydGhpbmcnLCAnRmFsc2VfTm9ydGhpbmcnXSxcbiAgICBbJ2NlbnRyYWxfbWVyaWRpYW4nLCAnQ2VudHJhbF9NZXJpZGlhbiddLFxuICAgIFsnbGF0aXR1ZGVfb2Zfb3JpZ2luJywgJ0xhdGl0dWRlX09mX09yaWdpbiddLFxuICAgIFsnbGF0aXR1ZGVfb2Zfb3JpZ2luJywgJ0NlbnRyYWxfUGFyYWxsZWwnXSxcbiAgICBbJ3NjYWxlX2ZhY3RvcicsICdTY2FsZV9GYWN0b3InXSxcbiAgICBbJ2swJywgJ3NjYWxlX2ZhY3RvciddLFxuICAgIFsnbGF0aXR1ZGVfb2ZfY2VudGVyJywgJ0xhdGl0dWRlX09mX0NlbnRlciddLFxuICAgIFsnbGF0aXR1ZGVfb2ZfY2VudGVyJywgJ0xhdGl0dWRlX29mX2NlbnRlciddLFxuICAgIFsnbGF0MCcsICdsYXRpdHVkZV9vZl9jZW50ZXInLCBkMnJdLFxuICAgIFsnbG9uZ2l0dWRlX29mX2NlbnRlcicsICdMb25naXR1ZGVfT2ZfQ2VudGVyJ10sXG4gICAgWydsb25naXR1ZGVfb2ZfY2VudGVyJywgJ0xvbmdpdHVkZV9vZl9jZW50ZXInXSxcbiAgICBbJ2xvbmdjJywgJ2xvbmdpdHVkZV9vZl9jZW50ZXInLCBkMnJdLFxuICAgIFsneDAnLCAnZmFsc2VfZWFzdGluZycsIHRvTWV0ZXJdLFxuICAgIFsneTAnLCAnZmFsc2Vfbm9ydGhpbmcnLCB0b01ldGVyXSxcbiAgICBbJ2xvbmcwJywgJ2NlbnRyYWxfbWVyaWRpYW4nLCBkMnJdLFxuICAgIFsnbGF0MCcsICdsYXRpdHVkZV9vZl9vcmlnaW4nLCBkMnJdLFxuICAgIFsnbGF0MCcsICdzdGFuZGFyZF9wYXJhbGxlbF8xJywgZDJyXSxcbiAgICBbJ2xhdDEnLCAnc3RhbmRhcmRfcGFyYWxsZWxfMScsIGQycl0sXG4gICAgWydsYXQyJywgJ3N0YW5kYXJkX3BhcmFsbGVsXzInLCBkMnJdLFxuICAgIFsnYXppbXV0aCcsICdBemltdXRoJ10sXG4gICAgWydhbHBoYScsICdhemltdXRoJywgZDJyXSxcbiAgICBbJ3Nyc0NvZGUnLCAnbmFtZSddXG4gIF07XG4gIGxpc3QuZm9yRWFjaChyZW5hbWVyKTtcbiAgaWYgKCF3a3QubG9uZzAgJiYgd2t0LmxvbmdjICYmICh3a3QucHJvak5hbWUgPT09ICdBbGJlcnNfQ29uaWNfRXF1YWxfQXJlYScgfHwgd2t0LnByb2pOYW1lID09PSAnTGFtYmVydF9BemltdXRoYWxfRXF1YWxfQXJlYScpKSB7XG4gICAgd2t0LmxvbmcwID0gd2t0LmxvbmdjO1xuICB9XG4gIGlmICghd2t0LmxhdF90cyAmJiB3a3QubGF0MSAmJiAod2t0LnByb2pOYW1lID09PSAnU3RlcmVvZ3JhcGhpY19Tb3V0aF9Qb2xlJyB8fCB3a3QucHJvak5hbWUgPT09ICdQb2xhciBTdGVyZW9ncmFwaGljICh2YXJpYW50IEIpJykpIHtcbiAgICB3a3QubGF0MCA9IGQycih3a3QubGF0MSA+IDAgPyA5MCA6IC05MCk7XG4gICAgd2t0LmxhdF90cyA9IHdrdC5sYXQxO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih3a3QpIHtcbiAgdmFyIGxpc3AgPSBwYXJzZXIod2t0KTtcbiAgdmFyIHR5cGUgPSBsaXNwLnNoaWZ0KCk7XG4gIHZhciBuYW1lID0gbGlzcC5zaGlmdCgpO1xuICBsaXNwLnVuc2hpZnQoWyduYW1lJywgbmFtZV0pO1xuICBsaXNwLnVuc2hpZnQoWyd0eXBlJywgdHlwZV0pO1xuICB2YXIgb2JqID0ge307XG4gIHNFeHByKGxpc3AsIG9iaik7XG4gIGNsZWFuV0tUKG9iaik7XG4gIHJldHVybiBvYmo7XG59XG4iLCJpbXBvcnQgZ2xvYmFscyBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgcGFyc2VQcm9qIGZyb20gJy4vcHJvalN0cmluZyc7XG5pbXBvcnQgd2t0IGZyb20gJ3drdC1wYXJzZXInO1xuXG5mdW5jdGlvbiBkZWZzKG5hbWUpIHtcbiAgLypnbG9iYWwgY29uc29sZSovXG4gIHZhciB0aGF0ID0gdGhpcztcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICB2YXIgZGVmID0gYXJndW1lbnRzWzFdO1xuICAgIGlmICh0eXBlb2YgZGVmID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGRlZi5jaGFyQXQoMCkgPT09ICcrJykge1xuICAgICAgICBkZWZzW25hbWVdID0gcGFyc2VQcm9qKGFyZ3VtZW50c1sxXSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZGVmc1tuYW1lXSA9IHdrdChhcmd1bWVudHNbMV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWZzW25hbWVdID0gZGVmO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgIHJldHVybiBuYW1lLm1hcChmdW5jdGlvbih2KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgICAgZGVmcy5hcHBseSh0aGF0LCB2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWZzKHYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAobmFtZSBpbiBkZWZzKSB7XG4gICAgICAgIHJldHVybiBkZWZzW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgnRVBTRycgaW4gbmFtZSkge1xuICAgICAgZGVmc1snRVBTRzonICsgbmFtZS5FUFNHXSA9IG5hbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKCdFU1JJJyBpbiBuYW1lKSB7XG4gICAgICBkZWZzWydFU1JJOicgKyBuYW1lLkVTUkldID0gbmFtZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoJ0lBVTIwMDAnIGluIG5hbWUpIHtcbiAgICAgIGRlZnNbJ0lBVTIwMDA6JyArIG5hbWUuSUFVMjAwMF0gPSBuYW1lO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuXG59XG5nbG9iYWxzKGRlZnMpO1xuZXhwb3J0IGRlZmF1bHQgZGVmcztcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlZnMpIHtcbiAgZGVmcygnRVBTRzo0MzI2JywgXCIrdGl0bGU9V0dTIDg0IChsb25nL2xhdCkgK3Byb2o9bG9uZ2xhdCArZWxscHM9V0dTODQgK2RhdHVtPVdHUzg0ICt1bml0cz1kZWdyZWVzXCIpO1xuICBkZWZzKCdFUFNHOjQyNjknLCBcIit0aXRsZT1OQUQ4MyAobG9uZy9sYXQpICtwcm9qPWxvbmdsYXQgK2E9NjM3ODEzNy4wICtiPTYzNTY3NTIuMzE0MTQwMzYgK2VsbHBzPUdSUzgwICtkYXR1bT1OQUQ4MyArdW5pdHM9ZGVncmVlc1wiKTtcbiAgZGVmcygnRVBTRzozODU3JywgXCIrdGl0bGU9V0dTIDg0IC8gUHNldWRvLU1lcmNhdG9yICtwcm9qPW1lcmMgK2E9NjM3ODEzNyArYj02Mzc4MTM3ICtsYXRfdHM9MC4wICtsb25fMD0wLjAgK3hfMD0wLjAgK3lfMD0wICtrPTEuMCArdW5pdHM9bSArbmFkZ3JpZHM9QG51bGwgK25vX2RlZnNcIik7XG5cbiAgZGVmcy5XR1M4NCA9IGRlZnNbJ0VQU0c6NDMyNiddO1xuICBkZWZzWydFUFNHOjM3ODUnXSA9IGRlZnNbJ0VQU0c6Mzg1NyddOyAvLyBtYWludGFpbiBiYWNrd2FyZCBjb21wYXQsIG9mZmljaWFsIGNvZGUgaXMgMzg1N1xuICBkZWZzLkdPT0dMRSA9IGRlZnNbJ0VQU0c6Mzg1NyddO1xuICBkZWZzWydFUFNHOjkwMDkxMyddID0gZGVmc1snRVBTRzozODU3J107XG4gIGRlZnNbJ0VQU0c6MTAyMTEzJ10gPSBkZWZzWydFUFNHOjM4NTcnXTtcbn1cbiIsImltcG9ydCBkZWZzIGZyb20gJy4vZGVmcyc7XG5pbXBvcnQgd2t0IGZyb20gJ3drdC1wYXJzZXInO1xuaW1wb3J0IHByb2pTdHIgZnJvbSAnLi9wcm9qU3RyaW5nJztcbmltcG9ydCBtYXRjaCBmcm9tICcuL21hdGNoJztcbmZ1bmN0aW9uIHRlc3RPYmooY29kZSl7XG4gIHJldHVybiB0eXBlb2YgY29kZSA9PT0gJ3N0cmluZyc7XG59XG5mdW5jdGlvbiB0ZXN0RGVmKGNvZGUpe1xuICByZXR1cm4gY29kZSBpbiBkZWZzO1xufVxuIHZhciBjb2RlV29yZHMgPSBbJ1BST0pFQ1RFRENSUycsICdQUk9KQ1JTJywgJ0dFT0dDUycsJ0dFT0NDUycsJ1BST0pDUycsJ0xPQ0FMX0NTJywgJ0dFT0RDUlMnLCAnR0VPREVUSUNDUlMnLCAnR0VPREVUSUNEQVRVTScsICdFTkdDUlMnLCAnRU5HSU5FRVJJTkdDUlMnXTtcbmZ1bmN0aW9uIHRlc3RXS1QoY29kZSl7XG4gIHJldHVybiBjb2RlV29yZHMuc29tZShmdW5jdGlvbiAod29yZCkge1xuICAgIHJldHVybiBjb2RlLmluZGV4T2Yod29yZCkgPiAtMTtcbiAgfSk7XG59XG52YXIgY29kZXMgPSBbJzM4NTcnLCAnOTAwOTEzJywgJzM3ODUnLCAnMTAyMTEzJ107XG5mdW5jdGlvbiBjaGVja01lcmNhdG9yKGl0ZW0pIHtcbiAgdmFyIGF1dGggPSBtYXRjaChpdGVtLCAnYXV0aG9yaXR5Jyk7XG4gIGlmICghYXV0aCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY29kZSA9IG1hdGNoKGF1dGgsICdlcHNnJyk7XG4gIHJldHVybiBjb2RlICYmIGNvZGVzLmluZGV4T2YoY29kZSkgPiAtMTtcbn1cbmZ1bmN0aW9uIGNoZWNrUHJvalN0cihpdGVtKSB7XG4gIHZhciBleHQgPSBtYXRjaChpdGVtLCAnZXh0ZW5zaW9uJyk7XG4gIGlmICghZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiBtYXRjaChleHQsICdwcm9qNCcpO1xufVxuZnVuY3Rpb24gdGVzdFByb2ooY29kZSl7XG4gIHJldHVybiBjb2RlWzBdID09PSAnKyc7XG59XG5mdW5jdGlvbiBwYXJzZShjb2RlKXtcbiAgaWYgKHRlc3RPYmooY29kZSkpIHtcbiAgICAvL2NoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgV0tUIHN0cmluZ1xuICAgIGlmICh0ZXN0RGVmKGNvZGUpKSB7XG4gICAgICByZXR1cm4gZGVmc1tjb2RlXTtcbiAgICB9XG4gICAgaWYgKHRlc3RXS1QoY29kZSkpIHtcbiAgICAgIHZhciBvdXQgPSB3a3QoY29kZSk7XG4gICAgICAvLyB0ZXN0IG9mIHNwZXRpYWwgY2FzZSwgZHVlIHRvIHRoaXMgYmVpbmcgYSB2ZXJ5IGNvbW1vbiBhbmQgb2Z0ZW4gbWFsZm9ybWVkXG4gICAgICBpZiAoY2hlY2tNZXJjYXRvcihvdXQpKSB7XG4gICAgICAgIHJldHVybiBkZWZzWydFUFNHOjM4NTcnXTtcbiAgICAgIH1cbiAgICAgIHZhciBtYXliZVByb2pTdHIgPSBjaGVja1Byb2pTdHIob3V0KTtcbiAgICAgIGlmIChtYXliZVByb2pTdHIpIHtcbiAgICAgICAgcmV0dXJuIHByb2pTdHIobWF5YmVQcm9qU3RyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGlmICh0ZXN0UHJvaihjb2RlKSkge1xuICAgICAgcmV0dXJuIHByb2pTdHIoY29kZSk7XG4gICAgfVxuICB9ZWxzZXtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwYXJzZTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbiB8fCB7fTtcbiAgdmFyIHZhbHVlLCBwcm9wZXJ0eTtcbiAgaWYgKCFzb3VyY2UpIHtcbiAgICByZXR1cm4gZGVzdGluYXRpb247XG4gIH1cbiAgZm9yIChwcm9wZXJ0eSBpbiBzb3VyY2UpIHtcbiAgICB2YWx1ZSA9IHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVzdGluYXRpb247XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlY2NlbnQsIHNpbnBoaSwgY29zcGhpKSB7XG4gIHZhciBjb24gPSBlY2NlbnQgKiBzaW5waGk7XG4gIHJldHVybiBjb3NwaGkgLyAoTWF0aC5zcXJ0KDEgLSBjb24gKiBjb24pKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4PDAgPyAtMSA6IDE7XG59IiwiXG5pbXBvcnQge1RXT19QSSwgU1BJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcbmltcG9ydCBzaWduIGZyb20gJy4vc2lnbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIChNYXRoLmFicyh4KSA8PSBTUEkpID8geCA6ICh4IC0gKHNpZ24oeCkgKiBUV09fUEkpKTtcbn1cbiIsImltcG9ydCB7SEFMRl9QSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGVjY2VudCwgcGhpLCBzaW5waGkpIHtcbiAgdmFyIGNvbiA9IGVjY2VudCAqIHNpbnBoaTtcbiAgdmFyIGNvbSA9IDAuNSAqIGVjY2VudDtcbiAgY29uID0gTWF0aC5wb3coKCgxIC0gY29uKSAvICgxICsgY29uKSksIGNvbSk7XG4gIHJldHVybiAoTWF0aC50YW4oMC41ICogKEhBTEZfUEkgLSBwaGkpKSAvIGNvbik7XG59XG4iLCJpbXBvcnQge0hBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlY2NlbnQsIHRzKSB7XG4gIHZhciBlY2NudGggPSAwLjUgKiBlY2NlbnQ7XG4gIHZhciBjb24sIGRwaGk7XG4gIHZhciBwaGkgPSBIQUxGX1BJIC0gMiAqIE1hdGguYXRhbih0cyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IDE1OyBpKyspIHtcbiAgICBjb24gPSBlY2NlbnQgKiBNYXRoLnNpbihwaGkpO1xuICAgIGRwaGkgPSBIQUxGX1BJIC0gMiAqIE1hdGguYXRhbih0cyAqIChNYXRoLnBvdygoKDEgLSBjb24pIC8gKDEgKyBjb24pKSwgZWNjbnRoKSkpIC0gcGhpO1xuICAgIHBoaSArPSBkcGhpO1xuICAgIGlmIChNYXRoLmFicyhkcGhpKSA8PSAwLjAwMDAwMDAwMDEpIHtcbiAgICAgIHJldHVybiBwaGk7XG4gICAgfVxuICB9XG4gIC8vY29uc29sZS5sb2coXCJwaGkyeiBoYXMgTm9Db252ZXJnZW5jZVwiKTtcbiAgcmV0dXJuIC05OTk5O1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIC8vbm8tb3AgZm9yIGxvbmdsYXRcbn1cblxuZnVuY3Rpb24gaWRlbnRpdHkocHQpIHtcbiAgcmV0dXJuIHB0O1xufVxuZXhwb3J0IHtpZGVudGl0eSBhcyBmb3J3YXJkfTtcbmV4cG9ydCB7aWRlbnRpdHkgYXMgaW52ZXJzZX07XG5leHBvcnQgdmFyIG5hbWVzID0gW1wibG9uZ2xhdFwiLCBcImlkZW50aXR5XCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBpZGVudGl0eSxcbiAgaW52ZXJzZTogaWRlbnRpdHksXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBtZXJjIGZyb20gXCIuL3Byb2plY3Rpb25zL21lcmNcIjtcbmltcG9ydCBsb25nbGF0IGZyb20gXCIuL3Byb2plY3Rpb25zL2xvbmdsYXRcIjtcbnZhciBwcm9qcyA9IFttZXJjLCBsb25nbGF0XTtcbnZhciBuYW1lcyA9IHt9O1xudmFyIHByb2pTdG9yZSA9IFtdO1xuXG5mdW5jdGlvbiBhZGQocHJvaiwgaSkge1xuICB2YXIgbGVuID0gcHJvalN0b3JlLmxlbmd0aDtcbiAgaWYgKCFwcm9qLm5hbWVzKSB7XG4gICAgY29uc29sZS5sb2coaSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvalN0b3JlW2xlbl0gPSBwcm9qO1xuICBwcm9qLm5hbWVzLmZvckVhY2goZnVuY3Rpb24obikge1xuICAgIG5hbWVzW24udG9Mb3dlckNhc2UoKV0gPSBsZW47XG4gIH0pO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IHthZGR9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgaWYgKCFuYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBuID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodHlwZW9mIG5hbWVzW25dICE9PSAndW5kZWZpbmVkJyAmJiBwcm9qU3RvcmVbbmFtZXNbbl1dKSB7XG4gICAgcmV0dXJuIHByb2pTdG9yZVtuYW1lc1tuXV07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBwcm9qcy5mb3JFYWNoKGFkZCk7XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gIHN0YXJ0OiBzdGFydCxcbiAgYWRkOiBhZGQsXG4gIGdldDogZ2V0XG59O1xuIiwiaW1wb3J0IG1zZm56IGZyb20gJy4uL2NvbW1vbi9tc2Zueic7XG5cbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmltcG9ydCB0c2ZueiBmcm9tICcuLi9jb21tb24vdHNmbnonO1xuaW1wb3J0IHBoaTJ6IGZyb20gJy4uL2NvbW1vbi9waGkyeic7XG5pbXBvcnQge0ZPUlRQSSwgUjJELCBFUFNMTiwgSEFMRl9QSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdmFyIGNvbiA9IHRoaXMuYiAvIHRoaXMuYTtcbiAgdGhpcy5lcyA9IDEgLSBjb24gKiBjb247XG4gIGlmKCEoJ3gwJyBpbiB0aGlzKSl7XG4gICAgdGhpcy54MCA9IDA7XG4gIH1cbiAgaWYoISgneTAnIGluIHRoaXMpKXtcbiAgICB0aGlzLnkwID0gMDtcbiAgfVxuICB0aGlzLmUgPSBNYXRoLnNxcnQodGhpcy5lcyk7XG4gIGlmICh0aGlzLmxhdF90cykge1xuICAgIGlmICh0aGlzLnNwaGVyZSkge1xuICAgICAgdGhpcy5rMCA9IE1hdGguY29zKHRoaXMubGF0X3RzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmswID0gbXNmbnoodGhpcy5lLCBNYXRoLnNpbih0aGlzLmxhdF90cyksIE1hdGguY29zKHRoaXMubGF0X3RzKSk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5rMCkge1xuICAgICAgaWYgKHRoaXMuaykge1xuICAgICAgICB0aGlzLmswID0gdGhpcy5rO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuazAgPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiBNZXJjYXRvciBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIC8vIGNvbnZlcnQgdG8gcmFkaWFuc1xuICBpZiAobGF0ICogUjJEID4gOTAgJiYgbGF0ICogUjJEIDwgLTkwICYmIGxvbiAqIFIyRCA+IDE4MCAmJiBsb24gKiBSMkQgPCAtMTgwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgeCwgeTtcbiAgaWYgKE1hdGguYWJzKE1hdGguYWJzKGxhdCkgLSBIQUxGX1BJKSA8PSBFUFNMTikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGVsc2Uge1xuICAgIGlmICh0aGlzLnNwaGVyZSkge1xuICAgICAgeCA9IHRoaXMueDAgKyB0aGlzLmEgKiB0aGlzLmswICogYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgICAgIHkgPSB0aGlzLnkwICsgdGhpcy5hICogdGhpcy5rMCAqIE1hdGgubG9nKE1hdGgudGFuKEZPUlRQSSArIDAuNSAqIGxhdCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBzaW5waGkgPSBNYXRoLnNpbihsYXQpO1xuICAgICAgdmFyIHRzID0gdHNmbnoodGhpcy5lLCBsYXQsIHNpbnBoaSk7XG4gICAgICB4ID0gdGhpcy54MCArIHRoaXMuYSAqIHRoaXMuazAgKiBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICAgICAgeSA9IHRoaXMueTAgLSB0aGlzLmEgKiB0aGlzLmswICogTWF0aC5sb2codHMpO1xuICAgIH1cbiAgICBwLnggPSB4O1xuICAgIHAueSA9IHk7XG4gICAgcmV0dXJuIHA7XG4gIH1cbn1cblxuLyogTWVyY2F0b3IgaW52ZXJzZSBlcXVhdGlvbnMtLW1hcHBpbmcgeCx5IHRvIGxhdC9sb25nXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcblxuICB2YXIgeCA9IHAueCAtIHRoaXMueDA7XG4gIHZhciB5ID0gcC55IC0gdGhpcy55MDtcbiAgdmFyIGxvbiwgbGF0O1xuXG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIGxhdCA9IEhBTEZfUEkgLSAyICogTWF0aC5hdGFuKE1hdGguZXhwKC15IC8gKHRoaXMuYSAqIHRoaXMuazApKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdmFyIHRzID0gTWF0aC5leHAoLXkgLyAodGhpcy5hICogdGhpcy5rMCkpO1xuICAgIGxhdCA9IHBoaTJ6KHRoaXMuZSwgdHMpO1xuICAgIGlmIChsYXQgPT09IC05OTk5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgeCAvICh0aGlzLmEgKiB0aGlzLmswKSk7XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiTWVyY2F0b3JcIiwgXCJQb3B1bGFyIFZpc3VhbGlzYXRpb24gUHNldWRvIE1lcmNhdG9yXCIsIFwiTWVyY2F0b3JfMVNQXCIsIFwiTWVyY2F0b3JfQXV4aWxpYXJ5X1NwaGVyZVwiLCBcIm1lcmNcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsInZhciBleHBvcnRzID0ge307XG5leHBvcnQge2V4cG9ydHMgYXMgZGVmYXVsdH07XG5leHBvcnRzLk1FUklUID0ge1xuICBhOiA2Mzc4MTM3LjAsXG4gIHJmOiAyOTguMjU3LFxuICBlbGxpcHNlTmFtZTogXCJNRVJJVCAxOTgzXCJcbn07XG5cbmV4cG9ydHMuU0dTODUgPSB7XG4gIGE6IDYzNzgxMzYuMCxcbiAgcmY6IDI5OC4yNTcsXG4gIGVsbGlwc2VOYW1lOiBcIlNvdmlldCBHZW9kZXRpYyBTeXN0ZW0gODVcIlxufTtcblxuZXhwb3J0cy5HUlM4MCA9IHtcbiAgYTogNjM3ODEzNy4wLFxuICByZjogMjk4LjI1NzIyMjEwMSxcbiAgZWxsaXBzZU5hbWU6IFwiR1JTIDE5ODAoSVVHRywgMTk4MClcIlxufTtcblxuZXhwb3J0cy5JQVU3NiA9IHtcbiAgYTogNjM3ODE0MC4wLFxuICByZjogMjk4LjI1NyxcbiAgZWxsaXBzZU5hbWU6IFwiSUFVIDE5NzZcIlxufTtcblxuZXhwb3J0cy5haXJ5ID0ge1xuICBhOiA2Mzc3NTYzLjM5NixcbiAgYjogNjM1NjI1Ni45MTAsXG4gIGVsbGlwc2VOYW1lOiBcIkFpcnkgMTgzMFwiXG59O1xuXG5leHBvcnRzLkFQTDQgPSB7XG4gIGE6IDYzNzgxMzcsXG4gIHJmOiAyOTguMjUsXG4gIGVsbGlwc2VOYW1lOiBcIkFwcGwuIFBoeXNpY3MuIDE5NjVcIlxufTtcblxuZXhwb3J0cy5OV0w5RCA9IHtcbiAgYTogNjM3ODE0NS4wLFxuICByZjogMjk4LjI1LFxuICBlbGxpcHNlTmFtZTogXCJOYXZhbCBXZWFwb25zIExhYi4sIDE5NjVcIlxufTtcblxuZXhwb3J0cy5tb2RfYWlyeSA9IHtcbiAgYTogNjM3NzM0MC4xODksXG4gIGI6IDYzNTYwMzQuNDQ2LFxuICBlbGxpcHNlTmFtZTogXCJNb2RpZmllZCBBaXJ5XCJcbn07XG5cbmV4cG9ydHMuYW5kcmFlID0ge1xuICBhOiA2Mzc3MTA0LjQzLFxuICByZjogMzAwLjAsXG4gIGVsbGlwc2VOYW1lOiBcIkFuZHJhZSAxODc2IChEZW4uLCBJY2xuZC4pXCJcbn07XG5cbmV4cG9ydHMuYXVzdF9TQSA9IHtcbiAgYTogNjM3ODE2MC4wLFxuICByZjogMjk4LjI1LFxuICBlbGxpcHNlTmFtZTogXCJBdXN0cmFsaWFuIE5hdGwgJiBTLiBBbWVyLiAxOTY5XCJcbn07XG5cbmV4cG9ydHMuR1JTNjcgPSB7XG4gIGE6IDYzNzgxNjAuMCxcbiAgcmY6IDI5OC4yNDcxNjc0MjcwLFxuICBlbGxpcHNlTmFtZTogXCJHUlMgNjcoSVVHRyAxOTY3KVwiXG59O1xuXG5leHBvcnRzLmJlc3NlbCA9IHtcbiAgYTogNjM3NzM5Ny4xNTUsXG4gIHJmOiAyOTkuMTUyODEyOCxcbiAgZWxsaXBzZU5hbWU6IFwiQmVzc2VsIDE4NDFcIlxufTtcblxuZXhwb3J0cy5iZXNzX25hbSA9IHtcbiAgYTogNjM3NzQ4My44NjUsXG4gIHJmOiAyOTkuMTUyODEyOCxcbiAgZWxsaXBzZU5hbWU6IFwiQmVzc2VsIDE4NDEgKE5hbWliaWEpXCJcbn07XG5cbmV4cG9ydHMuY2xyazY2ID0ge1xuICBhOiA2Mzc4MjA2LjQsXG4gIGI6IDYzNTY1ODMuOCxcbiAgZWxsaXBzZU5hbWU6IFwiQ2xhcmtlIDE4NjZcIlxufTtcblxuZXhwb3J0cy5jbHJrODAgPSB7XG4gIGE6IDYzNzgyNDkuMTQ1LFxuICByZjogMjkzLjQ2NjMsXG4gIGVsbGlwc2VOYW1lOiBcIkNsYXJrZSAxODgwIG1vZC5cIlxufTtcblxuZXhwb3J0cy5jbHJrNTggPSB7XG4gIGE6IDYzNzgyOTMuNjQ1MjA4NzU5LFxuICByZjogMjk0LjI2MDY3NjM2OTI2NTQsXG4gIGVsbGlwc2VOYW1lOiBcIkNsYXJrZSAxODU4XCJcbn07XG5cbmV4cG9ydHMuQ1BNID0ge1xuICBhOiA2Mzc1NzM4LjcsXG4gIHJmOiAzMzQuMjksXG4gIGVsbGlwc2VOYW1lOiBcIkNvbW0uIGRlcyBQb2lkcyBldCBNZXN1cmVzIDE3OTlcIlxufTtcblxuZXhwb3J0cy5kZWxtYnIgPSB7XG4gIGE6IDYzNzY0MjguMCxcbiAgcmY6IDMxMS41LFxuICBlbGxpcHNlTmFtZTogXCJEZWxhbWJyZSAxODEwIChCZWxnaXVtKVwiXG59O1xuXG5leHBvcnRzLmVuZ2VsaXMgPSB7XG4gIGE6IDYzNzgxMzYuMDUsXG4gIHJmOiAyOTguMjU2NixcbiAgZWxsaXBzZU5hbWU6IFwiRW5nZWxpcyAxOTg1XCJcbn07XG5cbmV4cG9ydHMuZXZyc3QzMCA9IHtcbiAgYTogNjM3NzI3Ni4zNDUsXG4gIHJmOiAzMDAuODAxNyxcbiAgZWxsaXBzZU5hbWU6IFwiRXZlcmVzdCAxODMwXCJcbn07XG5cbmV4cG9ydHMuZXZyc3Q0OCA9IHtcbiAgYTogNjM3NzMwNC4wNjMsXG4gIHJmOiAzMDAuODAxNyxcbiAgZWxsaXBzZU5hbWU6IFwiRXZlcmVzdCAxOTQ4XCJcbn07XG5cbmV4cG9ydHMuZXZyc3Q1NiA9IHtcbiAgYTogNjM3NzMwMS4yNDMsXG4gIHJmOiAzMDAuODAxNyxcbiAgZWxsaXBzZU5hbWU6IFwiRXZlcmVzdCAxOTU2XCJcbn07XG5cbmV4cG9ydHMuZXZyc3Q2OSA9IHtcbiAgYTogNjM3NzI5NS42NjQsXG4gIHJmOiAzMDAuODAxNyxcbiAgZWxsaXBzZU5hbWU6IFwiRXZlcmVzdCAxOTY5XCJcbn07XG5cbmV4cG9ydHMuZXZyc3RTUyA9IHtcbiAgYTogNjM3NzI5OC41NTYsXG4gIHJmOiAzMDAuODAxNyxcbiAgZWxsaXBzZU5hbWU6IFwiRXZlcmVzdCAoU2FiYWggJiBTYXJhd2FrKVwiXG59O1xuXG5leHBvcnRzLmZzY2hyNjAgPSB7XG4gIGE6IDYzNzgxNjYuMCxcbiAgcmY6IDI5OC4zLFxuICBlbGxpcHNlTmFtZTogXCJGaXNjaGVyIChNZXJjdXJ5IERhdHVtKSAxOTYwXCJcbn07XG5cbmV4cG9ydHMuZnNjaHI2MG0gPSB7XG4gIGE6IDYzNzgxNTUuMCxcbiAgcmY6IDI5OC4zLFxuICBlbGxpcHNlTmFtZTogXCJGaXNjaGVyIDE5NjBcIlxufTtcblxuZXhwb3J0cy5mc2NocjY4ID0ge1xuICBhOiA2Mzc4MTUwLjAsXG4gIHJmOiAyOTguMyxcbiAgZWxsaXBzZU5hbWU6IFwiRmlzY2hlciAxOTY4XCJcbn07XG5cbmV4cG9ydHMuaGVsbWVydCA9IHtcbiAgYTogNjM3ODIwMC4wLFxuICByZjogMjk4LjMsXG4gIGVsbGlwc2VOYW1lOiBcIkhlbG1lcnQgMTkwNlwiXG59O1xuXG5leHBvcnRzLmhvdWdoID0ge1xuICBhOiA2Mzc4MjcwLjAsXG4gIHJmOiAyOTcuMCxcbiAgZWxsaXBzZU5hbWU6IFwiSG91Z2hcIlxufTtcblxuZXhwb3J0cy5pbnRsID0ge1xuICBhOiA2Mzc4Mzg4LjAsXG4gIHJmOiAyOTcuMCxcbiAgZWxsaXBzZU5hbWU6IFwiSW50ZXJuYXRpb25hbCAxOTA5IChIYXlmb3JkKVwiXG59O1xuXG5leHBvcnRzLmthdWxhID0ge1xuICBhOiA2Mzc4MTYzLjAsXG4gIHJmOiAyOTguMjQsXG4gIGVsbGlwc2VOYW1lOiBcIkthdWxhIDE5NjFcIlxufTtcblxuZXhwb3J0cy5sZXJjaCA9IHtcbiAgYTogNjM3ODEzOS4wLFxuICByZjogMjk4LjI1NyxcbiAgZWxsaXBzZU5hbWU6IFwiTGVyY2ggMTk3OVwiXG59O1xuXG5leHBvcnRzLm1wcnRzID0ge1xuICBhOiA2Mzk3MzAwLjAsXG4gIHJmOiAxOTEuMCxcbiAgZWxsaXBzZU5hbWU6IFwiTWF1cGVydGl1cyAxNzM4XCJcbn07XG5cbmV4cG9ydHMubmV3X2ludGwgPSB7XG4gIGE6IDYzNzgxNTcuNSxcbiAgYjogNjM1Njc3Mi4yLFxuICBlbGxpcHNlTmFtZTogXCJOZXcgSW50ZXJuYXRpb25hbCAxOTY3XCJcbn07XG5cbmV4cG9ydHMucGxlc3NpcyA9IHtcbiAgYTogNjM3NjUyMy4wLFxuICByZjogNjM1NTg2My4wLFxuICBlbGxpcHNlTmFtZTogXCJQbGVzc2lzIDE4MTcgKEZyYW5jZSlcIlxufTtcblxuZXhwb3J0cy5rcmFzcyA9IHtcbiAgYTogNjM3ODI0NS4wLFxuICByZjogMjk4LjMsXG4gIGVsbGlwc2VOYW1lOiBcIktyYXNzb3Zza3ksIDE5NDJcIlxufTtcblxuZXhwb3J0cy5TRWFzaWEgPSB7XG4gIGE6IDYzNzgxNTUuMCxcbiAgYjogNjM1Njc3My4zMjA1LFxuICBlbGxpcHNlTmFtZTogXCJTb3V0aGVhc3QgQXNpYVwiXG59O1xuXG5leHBvcnRzLndhbGJlY2sgPSB7XG4gIGE6IDYzNzY4OTYuMCxcbiAgYjogNjM1NTgzNC44NDY3LFxuICBlbGxpcHNlTmFtZTogXCJXYWxiZWNrXCJcbn07XG5cbmV4cG9ydHMuV0dTNjAgPSB7XG4gIGE6IDYzNzgxNjUuMCxcbiAgcmY6IDI5OC4zLFxuICBlbGxpcHNlTmFtZTogXCJXR1MgNjBcIlxufTtcblxuZXhwb3J0cy5XR1M2NiA9IHtcbiAgYTogNjM3ODE0NS4wLFxuICByZjogMjk4LjI1LFxuICBlbGxpcHNlTmFtZTogXCJXR1MgNjZcIlxufTtcblxuZXhwb3J0cy5XR1M3ID0ge1xuICBhOiA2Mzc4MTM1LjAsXG4gIHJmOiAyOTguMjYsXG4gIGVsbGlwc2VOYW1lOiBcIldHUyA3MlwiXG59O1xuXG5leHBvcnQgdmFyIFdHUzg0ID0gZXhwb3J0cy5XR1M4NCA9IHtcbiAgYTogNjM3ODEzNy4wLFxuICByZjogMjk4LjI1NzIyMzU2MyxcbiAgZWxsaXBzZU5hbWU6IFwiV0dTIDg0XCJcbn07XG5cbmV4cG9ydHMuc3BoZXJlID0ge1xuICBhOiA2MzcwOTk3LjAsXG4gIGI6IDYzNzA5OTcuMCxcbiAgZWxsaXBzZU5hbWU6IFwiTm9ybWFsIFNwaGVyZSAocj02MzcwOTk3KVwiXG59O1xuIiwidmFyIGV4cG9ydHMgPSB7fTtcbmV4cG9ydCB7ZXhwb3J0cyBhcyBkZWZhdWx0fTtcbmV4cG9ydHMud2dzODQgPSB7XG4gIHRvd2dzODQ6IFwiMCwwLDBcIixcbiAgZWxsaXBzZTogXCJXR1M4NFwiLFxuICBkYXR1bU5hbWU6IFwiV0dTODRcIlxufTtcblxuZXhwb3J0cy5jaDE5MDMgPSB7XG4gIHRvd2dzODQ6IFwiNjc0LjM3NCwxNS4wNTYsNDA1LjM0NlwiLFxuICBlbGxpcHNlOiBcImJlc3NlbFwiLFxuICBkYXR1bU5hbWU6IFwic3dpc3NcIlxufTtcblxuZXhwb3J0cy5nZ3JzODcgPSB7XG4gIHRvd2dzODQ6IFwiLTE5OS44Nyw3NC43OSwyNDYuNjJcIixcbiAgZWxsaXBzZTogXCJHUlM4MFwiLFxuICBkYXR1bU5hbWU6IFwiR3JlZWtfR2VvZGV0aWNfUmVmZXJlbmNlX1N5c3RlbV8xOTg3XCJcbn07XG5cbmV4cG9ydHMubmFkODMgPSB7XG4gIHRvd2dzODQ6IFwiMCwwLDBcIixcbiAgZWxsaXBzZTogXCJHUlM4MFwiLFxuICBkYXR1bU5hbWU6IFwiTm9ydGhfQW1lcmljYW5fRGF0dW1fMTk4M1wiXG59O1xuXG5leHBvcnRzLm5hZDI3ID0ge1xuICBuYWRncmlkczogXCJAY29udXMsQGFsYXNrYSxAbnR2Ml8wLmdzYixAbnR2MV9jYW4uZGF0XCIsXG4gIGVsbGlwc2U6IFwiY2xyazY2XCIsXG4gIGRhdHVtTmFtZTogXCJOb3J0aF9BbWVyaWNhbl9EYXR1bV8xOTI3XCJcbn07XG5cbmV4cG9ydHMucG90c2RhbSA9IHtcbiAgdG93Z3M4NDogXCI2MDYuMCwyMy4wLDQxMy4wXCIsXG4gIGVsbGlwc2U6IFwiYmVzc2VsXCIsXG4gIGRhdHVtTmFtZTogXCJQb3RzZGFtIFJhdWVuYmVyZyAxOTUwIERIRE5cIlxufTtcblxuZXhwb3J0cy5jYXJ0aGFnZSA9IHtcbiAgdG93Z3M4NDogXCItMjYzLjAsNi4wLDQzMS4wXCIsXG4gIGVsbGlwc2U6IFwiY2xhcms4MFwiLFxuICBkYXR1bU5hbWU6IFwiQ2FydGhhZ2UgMTkzNCBUdW5pc2lhXCJcbn07XG5cbmV4cG9ydHMuaGVybWFubnNrb2dlbCA9IHtcbiAgdG93Z3M4NDogXCI2NTMuMCwtMjEyLjAsNDQ5LjBcIixcbiAgZWxsaXBzZTogXCJiZXNzZWxcIixcbiAgZGF0dW1OYW1lOiBcIkhlcm1hbm5za29nZWxcIlxufTtcblxuZXhwb3J0cy5vc25pNTIgPSB7XG4gIHRvd2dzODQ6IFwiNDgyLjUzMCwtMTMwLjU5Niw1NjQuNTU3LC0xLjA0MiwtMC4yMTQsLTAuNjMxLDguMTVcIixcbiAgZWxsaXBzZTogXCJhaXJ5XCIsXG4gIGRhdHVtTmFtZTogXCJJcmlzaCBOYXRpb25hbFwiXG59O1xuXG5leHBvcnRzLmlyZTY1ID0ge1xuICB0b3dnczg0OiBcIjQ4Mi41MzAsLTEzMC41OTYsNTY0LjU1NywtMS4wNDIsLTAuMjE0LC0wLjYzMSw4LjE1XCIsXG4gIGVsbGlwc2U6IFwibW9kX2FpcnlcIixcbiAgZGF0dW1OYW1lOiBcIklyZWxhbmQgMTk2NVwiXG59O1xuXG5leHBvcnRzLnJhc3NhZGlyYW4gPSB7XG4gIHRvd2dzODQ6IFwiLTEzMy42MywtMTU3LjUsLTE1OC42MlwiLFxuICBlbGxpcHNlOiBcImludGxcIixcbiAgZGF0dW1OYW1lOiBcIlJhc3NhZGlyYW5cIlxufTtcblxuZXhwb3J0cy5uemdkNDkgPSB7XG4gIHRvd2dzODQ6IFwiNTkuNDcsLTUuMDQsMTg3LjQ0LDAuNDcsLTAuMSwxLjAyNCwtNC41OTkzXCIsXG4gIGVsbGlwc2U6IFwiaW50bFwiLFxuICBkYXR1bU5hbWU6IFwiTmV3IFplYWxhbmQgR2VvZGV0aWMgRGF0dW0gMTk0OVwiXG59O1xuXG5leHBvcnRzLm9zZ2IzNiA9IHtcbiAgdG93Z3M4NDogXCI0NDYuNDQ4LC0xMjUuMTU3LDU0Mi4wNjAsMC4xNTAyLDAuMjQ3MCwwLjg0MjEsLTIwLjQ4OTRcIixcbiAgZWxsaXBzZTogXCJhaXJ5XCIsXG4gIGRhdHVtTmFtZTogXCJBaXJ5IDE4MzBcIlxufTtcblxuZXhwb3J0cy5zX2p0c2sgPSB7XG4gIHRvd2dzODQ6IFwiNTg5LDc2LDQ4MFwiLFxuICBlbGxpcHNlOiAnYmVzc2VsJyxcbiAgZGF0dW1OYW1lOiAnUy1KVFNLIChGZXJybyknXG59O1xuXG5leHBvcnRzLmJlZHVhcmFtID0ge1xuICB0b3dnczg0OiAnLTEwNiwtODcsMTg4JyxcbiAgZWxsaXBzZTogJ2Nscms4MCcsXG4gIGRhdHVtTmFtZTogJ0JlZHVhcmFtJ1xufTtcblxuZXhwb3J0cy5ndW51bmdfc2VnYXJhID0ge1xuICB0b3dnczg0OiAnLTQwMyw2ODQsNDEnLFxuICBlbGxpcHNlOiAnYmVzc2VsJyxcbiAgZGF0dW1OYW1lOiAnR3VudW5nIFNlZ2FyYSBKYWthcnRhJ1xufTtcblxuZXhwb3J0cy5ybmI3MiA9IHtcbiAgdG93Z3M4NDogXCIxMDYuODY5LC01Mi4yOTc4LDEwMy43MjQsLTAuMzM2NTcsMC40NTY5NTUsLTEuODQyMTgsMVwiLFxuICBlbGxpcHNlOiBcImludGxcIixcbiAgZGF0dW1OYW1lOiBcIlJlc2VhdSBOYXRpb25hbCBCZWxnZSAxOTcyXCJcbn07XG4iLCJpbXBvcnQgcGFyc2VDb2RlIGZyb20gJy4vcGFyc2VDb2RlJztcbmltcG9ydCBleHRlbmQgZnJvbSAnLi9leHRlbmQnO1xuaW1wb3J0IHByb2plY3Rpb25zIGZyb20gJy4vcHJvamVjdGlvbnMnO1xuaW1wb3J0IHtzcGhlcmUgYXMgZGNfc3BoZXJlLCBlY2NlbnRyaWNpdHkgYXMgZGNfZWNjZW50cmljaXR5fSBmcm9tICcuL2Rlcml2ZUNvbnN0YW50cyc7XG5pbXBvcnQgRGF0dW0gZnJvbSAnLi9jb25zdGFudHMvRGF0dW0nO1xuaW1wb3J0IGRhdHVtIGZyb20gJy4vZGF0dW0nO1xuaW1wb3J0IG1hdGNoIGZyb20gJy4vbWF0Y2gnO1xuXG5mdW5jdGlvbiBQcm9qZWN0aW9uKHNyc0NvZGUsY2FsbGJhY2spIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb2plY3Rpb24pKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9qZWN0aW9uKHNyc0NvZGUpO1xuICB9XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oZXJyb3Ipe1xuICAgIGlmKGVycm9yKXtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbiAgdmFyIGpzb24gPSBwYXJzZUNvZGUoc3JzQ29kZSk7XG4gIGlmKHR5cGVvZiBqc29uICE9PSAnb2JqZWN0Jyl7XG4gICAgY2FsbGJhY2soc3JzQ29kZSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBvdXJQcm9qID0gUHJvamVjdGlvbi5wcm9qZWN0aW9ucy5nZXQoanNvbi5wcm9qTmFtZSk7XG4gIGlmKCFvdXJQcm9qKXtcbiAgICBjYWxsYmFjayhzcnNDb2RlKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGpzb24uZGF0dW1Db2RlICYmIGpzb24uZGF0dW1Db2RlICE9PSAnbm9uZScpIHtcbiAgICB2YXIgZGF0dW1EZWYgPSBtYXRjaChEYXR1bSwganNvbi5kYXR1bUNvZGUpO1xuICAgIGlmIChkYXR1bURlZikge1xuICAgICAganNvbi5kYXR1bV9wYXJhbXMgPSBkYXR1bURlZi50b3dnczg0ID8gZGF0dW1EZWYudG93Z3M4NC5zcGxpdCgnLCcpIDogbnVsbDtcbiAgICAgIGpzb24uZWxscHMgPSBkYXR1bURlZi5lbGxpcHNlO1xuICAgICAganNvbi5kYXR1bU5hbWUgPSBkYXR1bURlZi5kYXR1bU5hbWUgPyBkYXR1bURlZi5kYXR1bU5hbWUgOiBqc29uLmRhdHVtQ29kZTtcbiAgICB9XG4gIH1cbiAganNvbi5rMCA9IGpzb24uazAgfHwgMS4wO1xuICBqc29uLmF4aXMgPSBqc29uLmF4aXMgfHwgJ2VudSc7XG4gIGpzb24uZWxscHMgPSBqc29uLmVsbHBzIHx8ICd3Z3M4NCc7XG4gIHZhciBzcGhlcmVfID0gZGNfc3BoZXJlKGpzb24uYSwganNvbi5iLCBqc29uLnJmLCBqc29uLmVsbHBzLCBqc29uLnNwaGVyZSk7XG4gIHZhciBlY2MgPSBkY19lY2NlbnRyaWNpdHkoc3BoZXJlXy5hLCBzcGhlcmVfLmIsIHNwaGVyZV8ucmYsIGpzb24uUl9BKTtcbiAgdmFyIGRhdHVtT2JqID0ganNvbi5kYXR1bSB8fCBkYXR1bShqc29uLmRhdHVtQ29kZSwganNvbi5kYXR1bV9wYXJhbXMsIHNwaGVyZV8uYSwgc3BoZXJlXy5iLCBlY2MuZXMsIGVjYy5lcDIpO1xuXG4gIGV4dGVuZCh0aGlzLCBqc29uKTsgLy8gdHJhbnNmZXIgZXZlcnl0aGluZyBvdmVyIGZyb20gdGhlIHByb2plY3Rpb24gYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgd2UnbGwgbmVlZFxuICBleHRlbmQodGhpcywgb3VyUHJvaik7IC8vIHRyYW5zZmVyIGFsbCB0aGUgbWV0aG9kcyBmcm9tIHRoZSBwcm9qZWN0aW9uXG5cbiAgLy8gY29weSB0aGUgNCB0aGluZ3Mgb3ZlciB3ZSBjYWx1bGF0ZWQgaW4gZGVyaXZlQ29uc3RhbnRzLnNwaGVyZVxuICB0aGlzLmEgPSBzcGhlcmVfLmE7XG4gIHRoaXMuYiA9IHNwaGVyZV8uYjtcbiAgdGhpcy5yZiA9IHNwaGVyZV8ucmY7XG4gIHRoaXMuc3BoZXJlID0gc3BoZXJlXy5zcGhlcmU7XG5cbiAgLy8gY29weSB0aGUgMyB0aGluZ3Mgd2UgY2FsY3VsYXRlZCBpbiBkZXJpdmVDb25zdGFudHMuZWNjZW50cmljaXR5XG4gIHRoaXMuZXMgPSBlY2MuZXM7XG4gIHRoaXMuZSA9IGVjYy5lO1xuICB0aGlzLmVwMiA9IGVjYy5lcDI7XG5cbiAgLy8gYWRkIGluIHRoZSBkYXR1bSBvYmplY3RcbiAgdGhpcy5kYXR1bSA9IGRhdHVtT2JqO1xuXG4gIC8vIGluaXQgdGhlIHByb2plY3Rpb25cbiAgdGhpcy5pbml0KCk7XG5cbiAgLy8gbGVnZWN5IGNhbGxiYWNrIGZyb20gYmFjayBpbiB0aGUgZGF5IHdoZW4gaXQgd2VudCB0byBzcGF0aWFscmVmZXJlbmNlLm9yZ1xuICBjYWxsYmFjayhudWxsLCB0aGlzKTtcblxufVxuUHJvamVjdGlvbi5wcm9qZWN0aW9ucyA9IHByb2plY3Rpb25zO1xuUHJvamVjdGlvbi5wcm9qZWN0aW9ucy5zdGFydCgpO1xuZXhwb3J0IGRlZmF1bHQgUHJvamVjdGlvbjtcbiIsImltcG9ydCB7U0lYVEgsIFJBNCwgUkE2LCBFUFNMTn0gZnJvbSAnLi9jb25zdGFudHMvdmFsdWVzJztcbmltcG9ydCB7ZGVmYXVsdCBhcyBFbGxpcHNvaWQsIFdHUzg0fSBmcm9tICcuL2NvbnN0YW50cy9FbGxpcHNvaWQnO1xuaW1wb3J0IG1hdGNoIGZyb20gJy4vbWF0Y2gnO1xuXG5leHBvcnQgZnVuY3Rpb24gZWNjZW50cmljaXR5KGEsIGIsIHJmLCBSX0EpIHtcbiAgdmFyIGEyID0gYSAqIGE7IC8vIHVzZWQgaW4gZ2VvY2VudHJpY1xuICB2YXIgYjIgPSBiICogYjsgLy8gdXNlZCBpbiBnZW9jZW50cmljXG4gIHZhciBlcyA9IChhMiAtIGIyKSAvIGEyOyAvLyBlIF4gMlxuICB2YXIgZSA9IDA7XG4gIGlmIChSX0EpIHtcbiAgICBhICo9IDEgLSBlcyAqIChTSVhUSCArIGVzICogKFJBNCArIGVzICogUkE2KSk7XG4gICAgYTIgPSBhICogYTtcbiAgICBlcyA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguc3FydChlcyk7IC8vIGVjY2VudHJpY2l0eVxuICB9XG4gIHZhciBlcDIgPSAoYTIgLSBiMikgLyBiMjsgLy8gdXNlZCBpbiBnZW9jZW50cmljXG4gIHJldHVybiB7XG4gICAgZXM6IGVzLFxuICAgIGU6IGUsXG4gICAgZXAyOiBlcDJcbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzcGhlcmUoYSwgYiwgcmYsIGVsbHBzLCBzcGhlcmUpIHtcbiAgaWYgKCFhKSB7IC8vIGRvIHdlIGhhdmUgYW4gZWxsaXBzb2lkP1xuICAgIHZhciBlbGxpcHNlID0gbWF0Y2goRWxsaXBzb2lkLCBlbGxwcyk7XG4gICAgaWYgKCFlbGxpcHNlKSB7XG4gICAgICBlbGxpcHNlID0gV0dTODQ7XG4gICAgfVxuICAgIGEgPSBlbGxpcHNlLmE7XG4gICAgYiA9IGVsbGlwc2UuYjtcbiAgICByZiA9IGVsbGlwc2UucmY7XG4gIH1cblxuICBpZiAocmYgJiYgIWIpIHtcbiAgICBiID0gKDEuMCAtIDEuMCAvIHJmKSAqIGE7XG4gIH1cbiAgaWYgKHJmID09PSAwIHx8IE1hdGguYWJzKGEgLSBiKSA8IEVQU0xOKSB7XG4gICAgc3BoZXJlID0gdHJ1ZTtcbiAgICBiID0gYTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGE6IGEsXG4gICAgYjogYixcbiAgICByZjogcmYsXG4gICAgc3BoZXJlOiBzcGhlcmVcbiAgfTtcbn1cbiIsImltcG9ydCB7UEpEXzNQQVJBTSwgUEpEXzdQQVJBTSwgUEpEX1dHUzg0LCBQSkRfTk9EQVRVTSwgU0VDX1RPX1JBRH0gZnJvbSAnLi9jb25zdGFudHMvdmFsdWVzJztcblxuZnVuY3Rpb24gZGF0dW0oZGF0dW1Db2RlLCBkYXR1bV9wYXJhbXMsIGEsIGIsIGVzLCBlcDIpIHtcbiAgdmFyIG91dCA9IHt9O1xuXG4gIGlmIChkYXR1bUNvZGUgPT09IHVuZGVmaW5lZCB8fCBkYXR1bUNvZGUgPT09ICdub25lJykge1xuICAgIG91dC5kYXR1bV90eXBlID0gUEpEX05PREFUVU07XG4gIH0gZWxzZSB7XG4gICAgb3V0LmRhdHVtX3R5cGUgPSBQSkRfV0dTODQ7XG4gIH1cblxuICBpZiAoZGF0dW1fcGFyYW1zKSB7XG4gICAgb3V0LmRhdHVtX3BhcmFtcyA9IGRhdHVtX3BhcmFtcy5tYXAocGFyc2VGbG9hdCk7XG4gICAgaWYgKG91dC5kYXR1bV9wYXJhbXNbMF0gIT09IDAgfHwgb3V0LmRhdHVtX3BhcmFtc1sxXSAhPT0gMCB8fCBvdXQuZGF0dW1fcGFyYW1zWzJdICE9PSAwKSB7XG4gICAgICBvdXQuZGF0dW1fdHlwZSA9IFBKRF8zUEFSQU07XG4gICAgfVxuICAgIGlmIChvdXQuZGF0dW1fcGFyYW1zLmxlbmd0aCA+IDMpIHtcbiAgICAgIGlmIChvdXQuZGF0dW1fcGFyYW1zWzNdICE9PSAwIHx8IG91dC5kYXR1bV9wYXJhbXNbNF0gIT09IDAgfHwgb3V0LmRhdHVtX3BhcmFtc1s1XSAhPT0gMCB8fCBvdXQuZGF0dW1fcGFyYW1zWzZdICE9PSAwKSB7XG4gICAgICAgIG91dC5kYXR1bV90eXBlID0gUEpEXzdQQVJBTTtcbiAgICAgICAgb3V0LmRhdHVtX3BhcmFtc1szXSAqPSBTRUNfVE9fUkFEO1xuICAgICAgICBvdXQuZGF0dW1fcGFyYW1zWzRdICo9IFNFQ19UT19SQUQ7XG4gICAgICAgIG91dC5kYXR1bV9wYXJhbXNbNV0gKj0gU0VDX1RPX1JBRDtcbiAgICAgICAgb3V0LmRhdHVtX3BhcmFtc1s2XSA9IChvdXQuZGF0dW1fcGFyYW1zWzZdIC8gMTAwMDAwMC4wKSArIDEuMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvdXQuYSA9IGE7IC8vZGF0dW0gb2JqZWN0IGFsc28gdXNlcyB0aGVzZSB2YWx1ZXNcbiAgb3V0LmIgPSBiO1xuICBvdXQuZXMgPSBlcztcbiAgb3V0LmVwMiA9IGVwMjtcbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGF0dW07XG4iLCIndXNlIHN0cmljdCc7XG5pbXBvcnQge1BKRF8zUEFSQU0sIFBKRF83UEFSQU0sIEhBTEZfUEl9IGZyb20gJy4vY29uc3RhbnRzL3ZhbHVlcyc7XG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZURhdHVtcyhzb3VyY2UsIGRlc3QpIHtcbiAgaWYgKHNvdXJjZS5kYXR1bV90eXBlICE9PSBkZXN0LmRhdHVtX3R5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIGZhbHNlLCBkYXR1bXMgYXJlIG5vdCBlcXVhbFxuICB9IGVsc2UgaWYgKHNvdXJjZS5hICE9PSBkZXN0LmEgfHwgTWF0aC5hYnMoc291cmNlLmVzIC0gZGVzdC5lcykgPiAwLjAwMDAwMDAwMDA1MCkge1xuICAgIC8vIHRoZSB0b2xlcmFuY2UgZm9yIGVzIGlzIHRvIGVuc3VyZSB0aGF0IEdSUzgwIGFuZCBXR1M4NFxuICAgIC8vIGFyZSBjb25zaWRlcmVkIGlkZW50aWNhbFxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChzb3VyY2UuZGF0dW1fdHlwZSA9PT0gUEpEXzNQQVJBTSkge1xuICAgIHJldHVybiAoc291cmNlLmRhdHVtX3BhcmFtc1swXSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbMF0gJiYgc291cmNlLmRhdHVtX3BhcmFtc1sxXSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbMV0gJiYgc291cmNlLmRhdHVtX3BhcmFtc1syXSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbMl0pO1xuICB9IGVsc2UgaWYgKHNvdXJjZS5kYXR1bV90eXBlID09PSBQSkRfN1BBUkFNKSB7XG4gICAgcmV0dXJuIChzb3VyY2UuZGF0dW1fcGFyYW1zWzBdID09PSBkZXN0LmRhdHVtX3BhcmFtc1swXSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzFdID09PSBkZXN0LmRhdHVtX3BhcmFtc1sxXSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzJdID09PSBkZXN0LmRhdHVtX3BhcmFtc1syXSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzNdID09PSBkZXN0LmRhdHVtX3BhcmFtc1szXSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzRdID09PSBkZXN0LmRhdHVtX3BhcmFtc1s0XSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzVdID09PSBkZXN0LmRhdHVtX3BhcmFtc1s1XSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzZdID09PSBkZXN0LmRhdHVtX3BhcmFtc1s2XSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRydWU7IC8vIGRhdHVtcyBhcmUgZXF1YWxcbiAgfVxufSAvLyBjc19jb21wYXJlX2RhdHVtcygpXG5cbi8qXG4gKiBUaGUgZnVuY3Rpb24gQ29udmVydF9HZW9kZXRpY19Ub19HZW9jZW50cmljIGNvbnZlcnRzIGdlb2RldGljIGNvb3JkaW5hdGVzXG4gKiAobGF0aXR1ZGUsIGxvbmdpdHVkZSwgYW5kIGhlaWdodCkgdG8gZ2VvY2VudHJpYyBjb29yZGluYXRlcyAoWCwgWSwgWiksXG4gKiBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgZWxsaXBzb2lkIHBhcmFtZXRlcnMuXG4gKlxuICogICAgTGF0aXR1ZGUgIDogR2VvZGV0aWMgbGF0aXR1ZGUgaW4gcmFkaWFucyAgICAgICAgICAgICAgICAgICAgIChpbnB1dClcbiAqICAgIExvbmdpdHVkZSA6IEdlb2RldGljIGxvbmdpdHVkZSBpbiByYWRpYW5zICAgICAgICAgICAgICAgICAgICAoaW5wdXQpXG4gKiAgICBIZWlnaHQgICAgOiBHZW9kZXRpYyBoZWlnaHQsIGluIG1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KVxuICogICAgWCAgICAgICAgIDogQ2FsY3VsYXRlZCBHZW9jZW50cmljIFggY29vcmRpbmF0ZSwgaW4gbWV0ZXJzICAgIChvdXRwdXQpXG4gKiAgICBZICAgICAgICAgOiBDYWxjdWxhdGVkIEdlb2NlbnRyaWMgWSBjb29yZGluYXRlLCBpbiBtZXRlcnMgICAgKG91dHB1dClcbiAqICAgIFogICAgICAgICA6IENhbGN1bGF0ZWQgR2VvY2VudHJpYyBaIGNvb3JkaW5hdGUsIGluIG1ldGVycyAgICAob3V0cHV0KVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlb2RldGljVG9HZW9jZW50cmljKHAsIGVzLCBhKSB7XG4gIHZhciBMb25naXR1ZGUgPSBwLng7XG4gIHZhciBMYXRpdHVkZSA9IHAueTtcbiAgdmFyIEhlaWdodCA9IHAueiA/IHAueiA6IDA7IC8vWiB2YWx1ZSBub3QgYWx3YXlzIHN1cHBsaWVkXG5cbiAgdmFyIFJuOyAvKiAgRWFydGggcmFkaXVzIGF0IGxvY2F0aW9uICAqL1xuICB2YXIgU2luX0xhdDsgLyogIE1hdGguc2luKExhdGl0dWRlKSAgKi9cbiAgdmFyIFNpbjJfTGF0OyAvKiAgU3F1YXJlIG9mIE1hdGguc2luKExhdGl0dWRlKSAgKi9cbiAgdmFyIENvc19MYXQ7IC8qICBNYXRoLmNvcyhMYXRpdHVkZSkgICovXG5cbiAgLypcbiAgICoqIERvbid0IGJsb3cgdXAgaWYgTGF0aXR1ZGUgaXMganVzdCBhIGxpdHRsZSBvdXQgb2YgdGhlIHZhbHVlXG4gICAqKiByYW5nZSBhcyBpdCBtYXkganVzdCBiZSBhIHJvdW5kaW5nIGlzc3VlLiAgQWxzbyByZW1vdmVkIGxvbmdpdHVkZVxuICAgKiogdGVzdCwgaXQgc2hvdWxkIGJlIHdyYXBwZWQgYnkgTWF0aC5jb3MoKSBhbmQgTWF0aC5zaW4oKS4gIE5GVyBmb3IgUFJPSi40LCBTZXAvMjAwMS5cbiAgICovXG4gIGlmIChMYXRpdHVkZSA8IC1IQUxGX1BJICYmIExhdGl0dWRlID4gLTEuMDAxICogSEFMRl9QSSkge1xuICAgIExhdGl0dWRlID0gLUhBTEZfUEk7XG4gIH0gZWxzZSBpZiAoTGF0aXR1ZGUgPiBIQUxGX1BJICYmIExhdGl0dWRlIDwgMS4wMDEgKiBIQUxGX1BJKSB7XG4gICAgTGF0aXR1ZGUgPSBIQUxGX1BJO1xuICB9IGVsc2UgaWYgKExhdGl0dWRlIDwgLUhBTEZfUEkpIHtcbiAgICAvKiBMYXRpdHVkZSBvdXQgb2YgcmFuZ2UgKi9cbiAgICAvLy4ucmVwb3J0RXJyb3IoJ2dlb2NlbnQ6bGF0IG91dCBvZiByYW5nZTonICsgTGF0aXR1ZGUpO1xuICAgIHJldHVybiB7IHg6IC1JbmZpbml0eSwgeTogLUluZmluaXR5LCB6OiBwLnogfTtcbiAgfSBlbHNlIGlmIChMYXRpdHVkZSA+IEhBTEZfUEkpIHtcbiAgICAvKiBMYXRpdHVkZSBvdXQgb2YgcmFuZ2UgKi9cbiAgICByZXR1cm4geyB4OiBJbmZpbml0eSwgeTogSW5maW5pdHksIHo6IHAueiB9O1xuICB9XG5cbiAgaWYgKExvbmdpdHVkZSA+IE1hdGguUEkpIHtcbiAgICBMb25naXR1ZGUgLT0gKDIgKiBNYXRoLlBJKTtcbiAgfVxuICBTaW5fTGF0ID0gTWF0aC5zaW4oTGF0aXR1ZGUpO1xuICBDb3NfTGF0ID0gTWF0aC5jb3MoTGF0aXR1ZGUpO1xuICBTaW4yX0xhdCA9IFNpbl9MYXQgKiBTaW5fTGF0O1xuICBSbiA9IGEgLyAoTWF0aC5zcXJ0KDEuMGUwIC0gZXMgKiBTaW4yX0xhdCkpO1xuICByZXR1cm4ge1xuICAgIHg6IChSbiArIEhlaWdodCkgKiBDb3NfTGF0ICogTWF0aC5jb3MoTG9uZ2l0dWRlKSxcbiAgICB5OiAoUm4gKyBIZWlnaHQpICogQ29zX0xhdCAqIE1hdGguc2luKExvbmdpdHVkZSksXG4gICAgejogKChSbiAqICgxIC0gZXMpKSArIEhlaWdodCkgKiBTaW5fTGF0XG4gIH07XG59IC8vIGNzX2dlb2RldGljX3RvX2dlb2NlbnRyaWMoKVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VvY2VudHJpY1RvR2VvZGV0aWMocCwgZXMsIGEsIGIpIHtcbiAgLyogbG9jYWwgZGVmaW50aW9ucyBhbmQgdmFyaWFibGVzICovXG4gIC8qIGVuZC1jcml0ZXJpdW0gb2YgbG9vcCwgYWNjdXJhY3kgb2Ygc2luKExhdGl0dWRlKSAqL1xuICB2YXIgZ2VuYXUgPSAxZS0xMjtcbiAgdmFyIGdlbmF1MiA9IChnZW5hdSAqIGdlbmF1KTtcbiAgdmFyIG1heGl0ZXIgPSAzMDtcblxuICB2YXIgUDsgLyogZGlzdGFuY2UgYmV0d2VlbiBzZW1pLW1pbm9yIGF4aXMgYW5kIGxvY2F0aW9uICovXG4gIHZhciBSUjsgLyogZGlzdGFuY2UgYmV0d2VlbiBjZW50ZXIgYW5kIGxvY2F0aW9uICovXG4gIHZhciBDVDsgLyogc2luIG9mIGdlb2NlbnRyaWMgbGF0aXR1ZGUgKi9cbiAgdmFyIFNUOyAvKiBjb3Mgb2YgZ2VvY2VudHJpYyBsYXRpdHVkZSAqL1xuICB2YXIgUlg7XG4gIHZhciBSSztcbiAgdmFyIFJOOyAvKiBFYXJ0aCByYWRpdXMgYXQgbG9jYXRpb24gKi9cbiAgdmFyIENQSEkwOyAvKiBjb3Mgb2Ygc3RhcnQgb3Igb2xkIGdlb2RldGljIGxhdGl0dWRlIGluIGl0ZXJhdGlvbnMgKi9cbiAgdmFyIFNQSEkwOyAvKiBzaW4gb2Ygc3RhcnQgb3Igb2xkIGdlb2RldGljIGxhdGl0dWRlIGluIGl0ZXJhdGlvbnMgKi9cbiAgdmFyIENQSEk7IC8qIGNvcyBvZiBzZWFyY2hlZCBnZW9kZXRpYyBsYXRpdHVkZSAqL1xuICB2YXIgU1BISTsgLyogc2luIG9mIHNlYXJjaGVkIGdlb2RldGljIGxhdGl0dWRlICovXG4gIHZhciBTRFBISTsgLyogZW5kLWNyaXRlcml1bTogYWRkaXRpb24tdGhlb3JlbSBvZiBzaW4oTGF0aXR1ZGUoaXRlciktTGF0aXR1ZGUoaXRlci0xKSkgKi9cbiAgdmFyIGl0ZXI7IC8qICMgb2YgY29udGlub3VzIGl0ZXJhdGlvbiwgbWF4LiAzMCBpcyBhbHdheXMgZW5vdWdoIChzLmEuKSAqL1xuXG4gIHZhciBYID0gcC54O1xuICB2YXIgWSA9IHAueTtcbiAgdmFyIFogPSBwLnogPyBwLnogOiAwLjA7IC8vWiB2YWx1ZSBub3QgYWx3YXlzIHN1cHBsaWVkXG4gIHZhciBMb25naXR1ZGU7XG4gIHZhciBMYXRpdHVkZTtcbiAgdmFyIEhlaWdodDtcblxuICBQID0gTWF0aC5zcXJ0KFggKiBYICsgWSAqIFkpO1xuICBSUiA9IE1hdGguc3FydChYICogWCArIFkgKiBZICsgWiAqIFopO1xuXG4gIC8qICAgICAgc3BlY2lhbCBjYXNlcyBmb3IgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSAqL1xuICBpZiAoUCAvIGEgPCBnZW5hdSkge1xuXG4gICAgLyogIHNwZWNpYWwgY2FzZSwgaWYgUD0wLiAoWD0wLiwgWT0wLikgKi9cbiAgICBMb25naXR1ZGUgPSAwLjA7XG5cbiAgICAvKiAgaWYgKFgsWSxaKT0oMC4sMC4sMC4pIHRoZW4gSGVpZ2h0IGJlY29tZXMgc2VtaS1taW5vciBheGlzXG4gICAgICogIG9mIGVsbGlwc29pZCAoPWNlbnRlciBvZiBtYXNzKSwgTGF0aXR1ZGUgYmVjb21lcyBQSS8yICovXG4gICAgaWYgKFJSIC8gYSA8IGdlbmF1KSB7XG4gICAgICBMYXRpdHVkZSA9IEhBTEZfUEk7XG4gICAgICBIZWlnaHQgPSAtYjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHAueCxcbiAgICAgICAgeTogcC55LFxuICAgICAgICB6OiBwLnpcbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8qICBlbGxpcHNvaWRhbCAoZ2VvZGV0aWMpIGxvbmdpdHVkZVxuICAgICAqICBpbnRlcnZhbDogLVBJIDwgTG9uZ2l0dWRlIDw9ICtQSSAqL1xuICAgIExvbmdpdHVkZSA9IE1hdGguYXRhbjIoWSwgWCk7XG4gIH1cblxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBGb2xsb3dpbmcgaXRlcmF0aXZlIGFsZ29yaXRobSB3YXMgZGV2ZWxvcHBlZCBieVxuICAgKiBcIkluc3RpdHV0IGZvciBFcmRtZXNzdW5nXCIsIFVuaXZlcnNpdHkgb2YgSGFubm92ZXIsIEp1bHkgMTk4OC5cbiAgICogSW50ZXJuZXQ6IHd3dy5pZmUudW5pLWhhbm5vdmVyLmRlXG4gICAqIEl0ZXJhdGl2ZSBjb21wdXRhdGlvbiBvZiBDUEhJLFNQSEkgYW5kIEhlaWdodC5cbiAgICogSXRlcmF0aW9uIG9mIENQSEkgYW5kIFNQSEkgdG8gMTAqKi0xMiByYWRpYW4gcmVzcC5cbiAgICogMioxMCoqLTcgYXJjc2VjLlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cbiAgQ1QgPSBaIC8gUlI7XG4gIFNUID0gUCAvIFJSO1xuICBSWCA9IDEuMCAvIE1hdGguc3FydCgxLjAgLSBlcyAqICgyLjAgLSBlcykgKiBTVCAqIFNUKTtcbiAgQ1BISTAgPSBTVCAqICgxLjAgLSBlcykgKiBSWDtcbiAgU1BISTAgPSBDVCAqIFJYO1xuICBpdGVyID0gMDtcblxuICAvKiBsb29wIHRvIGZpbmQgc2luKExhdGl0dWRlKSByZXNwLiBMYXRpdHVkZVxuICAgKiB1bnRpbCB8c2luKExhdGl0dWRlKGl0ZXIpLUxhdGl0dWRlKGl0ZXItMSkpfCA8IGdlbmF1ICovXG4gIGRvIHtcbiAgICBpdGVyKys7XG4gICAgUk4gPSBhIC8gTWF0aC5zcXJ0KDEuMCAtIGVzICogU1BISTAgKiBTUEhJMCk7XG5cbiAgICAvKiAgZWxsaXBzb2lkYWwgKGdlb2RldGljKSBoZWlnaHQgKi9cbiAgICBIZWlnaHQgPSBQICogQ1BISTAgKyBaICogU1BISTAgLSBSTiAqICgxLjAgLSBlcyAqIFNQSEkwICogU1BISTApO1xuXG4gICAgUksgPSBlcyAqIFJOIC8gKFJOICsgSGVpZ2h0KTtcbiAgICBSWCA9IDEuMCAvIE1hdGguc3FydCgxLjAgLSBSSyAqICgyLjAgLSBSSykgKiBTVCAqIFNUKTtcbiAgICBDUEhJID0gU1QgKiAoMS4wIC0gUkspICogUlg7XG4gICAgU1BISSA9IENUICogUlg7XG4gICAgU0RQSEkgPSBTUEhJICogQ1BISTAgLSBDUEhJICogU1BISTA7XG4gICAgQ1BISTAgPSBDUEhJO1xuICAgIFNQSEkwID0gU1BISTtcbiAgfVxuICB3aGlsZSAoU0RQSEkgKiBTRFBISSA+IGdlbmF1MiAmJiBpdGVyIDwgbWF4aXRlcik7XG5cbiAgLyogICAgICBlbGxpcHNvaWRhbCAoZ2VvZGV0aWMpIGxhdGl0dWRlICovXG4gIExhdGl0dWRlID0gTWF0aC5hdGFuKFNQSEkgLyBNYXRoLmFicyhDUEhJKSk7XG4gIHJldHVybiB7XG4gICAgeDogTG9uZ2l0dWRlLFxuICAgIHk6IExhdGl0dWRlLFxuICAgIHo6IEhlaWdodFxuICB9O1xufSAvLyBjc19nZW9jZW50cmljX3RvX2dlb2RldGljKClcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vLyBwal9nZW9jZW50aWNfdG9fd2dzODQoIHAgKVxuLy8gIHAgPSBwb2ludCB0byB0cmFuc2Zvcm0gaW4gZ2VvY2VudHJpYyBjb29yZGluYXRlcyAoeCx5LHopXG5cblxuLyoqIHBvaW50IG9iamVjdCwgbm90aGluZyBmYW5jeSwganVzdCBhbGxvd3MgdmFsdWVzIHRvIGJlXG4gICAgcGFzc2VkIGJhY2sgYW5kIGZvcnRoIGJ5IHJlZmVyZW5jZSByYXRoZXIgdGhhbiBieSB2YWx1ZS5cbiAgICBPdGhlciBwb2ludCBjbGFzc2VzIG1heSBiZSB1c2VkIGFzIGxvbmcgYXMgdGhleSBoYXZlXG4gICAgeCBhbmQgeSBwcm9wZXJ0aWVzLCB3aGljaCB3aWxsIGdldCBtb2RpZmllZCBpbiB0aGUgdHJhbnNmb3JtIG1ldGhvZC5cbiovXG5leHBvcnQgZnVuY3Rpb24gZ2VvY2VudHJpY1RvV2dzODQocCwgZGF0dW1fdHlwZSwgZGF0dW1fcGFyYW1zKSB7XG5cbiAgaWYgKGRhdHVtX3R5cGUgPT09IFBKRF8zUEFSQU0pIHtcbiAgICAvLyBpZiggeFtpb10gPT09IEhVR0VfVkFMIClcbiAgICAvLyAgICBjb250aW51ZTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcC54ICsgZGF0dW1fcGFyYW1zWzBdLFxuICAgICAgeTogcC55ICsgZGF0dW1fcGFyYW1zWzFdLFxuICAgICAgejogcC56ICsgZGF0dW1fcGFyYW1zWzJdLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoZGF0dW1fdHlwZSA9PT0gUEpEXzdQQVJBTSkge1xuICAgIHZhciBEeF9CRiA9IGRhdHVtX3BhcmFtc1swXTtcbiAgICB2YXIgRHlfQkYgPSBkYXR1bV9wYXJhbXNbMV07XG4gICAgdmFyIER6X0JGID0gZGF0dW1fcGFyYW1zWzJdO1xuICAgIHZhciBSeF9CRiA9IGRhdHVtX3BhcmFtc1szXTtcbiAgICB2YXIgUnlfQkYgPSBkYXR1bV9wYXJhbXNbNF07XG4gICAgdmFyIFJ6X0JGID0gZGF0dW1fcGFyYW1zWzVdO1xuICAgIHZhciBNX0JGID0gZGF0dW1fcGFyYW1zWzZdO1xuICAgIC8vIGlmKCB4W2lvXSA9PT0gSFVHRV9WQUwgKVxuICAgIC8vICAgIGNvbnRpbnVlO1xuICAgIHJldHVybiB7XG4gICAgICB4OiBNX0JGICogKHAueCAtIFJ6X0JGICogcC55ICsgUnlfQkYgKiBwLnopICsgRHhfQkYsXG4gICAgICB5OiBNX0JGICogKFJ6X0JGICogcC54ICsgcC55IC0gUnhfQkYgKiBwLnopICsgRHlfQkYsXG4gICAgICB6OiBNX0JGICogKC1SeV9CRiAqIHAueCArIFJ4X0JGICogcC55ICsgcC56KSArIER6X0JGXG4gICAgfTtcbiAgfVxufSAvLyBjc19nZW9jZW50cmljX3RvX3dnczg0XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLy8gcGpfZ2VvY2VudGljX2Zyb21fd2dzODQoKVxuLy8gIGNvb3JkaW5hdGUgc3lzdGVtIGRlZmluaXRpb24sXG4vLyAgcG9pbnQgdG8gdHJhbnNmb3JtIGluIGdlb2NlbnRyaWMgY29vcmRpbmF0ZXMgKHgseSx6KVxuZXhwb3J0IGZ1bmN0aW9uIGdlb2NlbnRyaWNGcm9tV2dzODQocCwgZGF0dW1fdHlwZSwgZGF0dW1fcGFyYW1zKSB7XG5cbiAgaWYgKGRhdHVtX3R5cGUgPT09IFBKRF8zUEFSQU0pIHtcbiAgICAvL2lmKCB4W2lvXSA9PT0gSFVHRV9WQUwgKVxuICAgIC8vICAgIGNvbnRpbnVlO1xuICAgIHJldHVybiB7XG4gICAgICB4OiBwLnggLSBkYXR1bV9wYXJhbXNbMF0sXG4gICAgICB5OiBwLnkgLSBkYXR1bV9wYXJhbXNbMV0sXG4gICAgICB6OiBwLnogLSBkYXR1bV9wYXJhbXNbMl0sXG4gICAgfTtcblxuICB9IGVsc2UgaWYgKGRhdHVtX3R5cGUgPT09IFBKRF83UEFSQU0pIHtcbiAgICB2YXIgRHhfQkYgPSBkYXR1bV9wYXJhbXNbMF07XG4gICAgdmFyIER5X0JGID0gZGF0dW1fcGFyYW1zWzFdO1xuICAgIHZhciBEel9CRiA9IGRhdHVtX3BhcmFtc1syXTtcbiAgICB2YXIgUnhfQkYgPSBkYXR1bV9wYXJhbXNbM107XG4gICAgdmFyIFJ5X0JGID0gZGF0dW1fcGFyYW1zWzRdO1xuICAgIHZhciBSel9CRiA9IGRhdHVtX3BhcmFtc1s1XTtcbiAgICB2YXIgTV9CRiA9IGRhdHVtX3BhcmFtc1s2XTtcbiAgICB2YXIgeF90bXAgPSAocC54IC0gRHhfQkYpIC8gTV9CRjtcbiAgICB2YXIgeV90bXAgPSAocC55IC0gRHlfQkYpIC8gTV9CRjtcbiAgICB2YXIgel90bXAgPSAocC56IC0gRHpfQkYpIC8gTV9CRjtcbiAgICAvL2lmKCB4W2lvXSA9PT0gSFVHRV9WQUwgKVxuICAgIC8vICAgIGNvbnRpbnVlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHhfdG1wICsgUnpfQkYgKiB5X3RtcCAtIFJ5X0JGICogel90bXAsXG4gICAgICB5OiAtUnpfQkYgKiB4X3RtcCArIHlfdG1wICsgUnhfQkYgKiB6X3RtcCxcbiAgICAgIHo6IFJ5X0JGICogeF90bXAgLSBSeF9CRiAqIHlfdG1wICsgel90bXBcbiAgICB9O1xuICB9IC8vY3NfZ2VvY2VudHJpY19mcm9tX3dnczg0KClcbn1cbiIsImltcG9ydCB7UEpEXzNQQVJBTSwgUEpEXzdQQVJBTSwgUEpEX05PREFUVU19IGZyb20gJy4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmltcG9ydCB7Z2VvZGV0aWNUb0dlb2NlbnRyaWMsIGdlb2NlbnRyaWNUb0dlb2RldGljLCBnZW9jZW50cmljVG9XZ3M4NCwgZ2VvY2VudHJpY0Zyb21XZ3M4NCwgY29tcGFyZURhdHVtc30gZnJvbSAnLi9kYXR1bVV0aWxzJztcbmZ1bmN0aW9uIGNoZWNrUGFyYW1zKHR5cGUpIHtcbiAgcmV0dXJuICh0eXBlID09PSBQSkRfM1BBUkFNIHx8IHR5cGUgPT09IFBKRF83UEFSQU0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzb3VyY2UsIGRlc3QsIHBvaW50KSB7XG4gIC8vIFNob3J0IGN1dCBpZiB0aGUgZGF0dW1zIGFyZSBpZGVudGljYWwuXG4gIGlmIChjb21wYXJlRGF0dW1zKHNvdXJjZSwgZGVzdCkpIHtcbiAgICByZXR1cm4gcG9pbnQ7IC8vIGluIHRoaXMgY2FzZSwgemVybyBpcyBzdWNlc3MsXG4gICAgLy8gd2hlcmVhcyBjc19jb21wYXJlX2RhdHVtcyByZXR1cm5zIDEgdG8gaW5kaWNhdGUgVFJVRVxuICAgIC8vIGNvbmZ1c2luZywgc2hvdWxkIGZpeCB0aGlzXG4gIH1cblxuICAvLyBFeHBsaWNpdGx5IHNraXAgZGF0dW0gdHJhbnNmb3JtIGJ5IHNldHRpbmcgJ2RhdHVtPW5vbmUnIGFzIHBhcmFtZXRlciBmb3IgZWl0aGVyIHNvdXJjZSBvciBkZXN0XG4gIGlmIChzb3VyY2UuZGF0dW1fdHlwZSA9PT0gUEpEX05PREFUVU0gfHwgZGVzdC5kYXR1bV90eXBlID09PSBQSkRfTk9EQVRVTSkge1xuICAgIHJldHVybiBwb2ludDtcbiAgfVxuXG4gIC8vIElmIHRoaXMgZGF0dW0gcmVxdWlyZXMgZ3JpZCBzaGlmdHMsIHRoZW4gYXBwbHkgaXQgdG8gZ2VvZGV0aWMgY29vcmRpbmF0ZXMuXG5cbiAgLy8gRG8gd2UgbmVlZCB0byBnbyB0aHJvdWdoIGdlb2NlbnRyaWMgY29vcmRpbmF0ZXM/XG4gIGlmIChzb3VyY2UuZXMgPT09IGRlc3QuZXMgJiYgc291cmNlLmEgPT09IGRlc3QuYSAmJiAhY2hlY2tQYXJhbXMoc291cmNlLmRhdHVtX3R5cGUpICYmICAhY2hlY2tQYXJhbXMoZGVzdC5kYXR1bV90eXBlKSkge1xuICAgIHJldHVybiBwb2ludDtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdG8gZ2VvY2VudHJpYyBjb29yZGluYXRlcy5cbiAgcG9pbnQgPSBnZW9kZXRpY1RvR2VvY2VudHJpYyhwb2ludCwgc291cmNlLmVzLCBzb3VyY2UuYSk7XG4gIC8vIENvbnZlcnQgYmV0d2VlbiBkYXR1bXNcbiAgaWYgKGNoZWNrUGFyYW1zKHNvdXJjZS5kYXR1bV90eXBlKSkge1xuICAgIHBvaW50ID0gZ2VvY2VudHJpY1RvV2dzODQocG9pbnQsIHNvdXJjZS5kYXR1bV90eXBlLCBzb3VyY2UuZGF0dW1fcGFyYW1zKTtcbiAgfVxuICBpZiAoY2hlY2tQYXJhbXMoZGVzdC5kYXR1bV90eXBlKSkge1xuICAgIHBvaW50ID0gZ2VvY2VudHJpY0Zyb21XZ3M4NChwb2ludCwgZGVzdC5kYXR1bV90eXBlLCBkZXN0LmRhdHVtX3BhcmFtcyk7XG4gIH1cbiAgcmV0dXJuIGdlb2NlbnRyaWNUb0dlb2RldGljKHBvaW50LCBkZXN0LmVzLCBkZXN0LmEsIGRlc3QuYik7XG5cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNycywgZGVub3JtLCBwb2ludCkge1xuICB2YXIgeGluID0gcG9pbnQueCxcbiAgICB5aW4gPSBwb2ludC55LFxuICAgIHppbiA9IHBvaW50LnogfHwgMC4wO1xuICB2YXIgdiwgdCwgaTtcbiAgdmFyIG91dCA9IHt9O1xuICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgaWYgKGRlbm9ybSAmJiBpID09PSAyICYmIHBvaW50LnogPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpID09PSAwKSB7XG4gICAgICB2ID0geGluO1xuICAgICAgaWYgKFwiZXdcIi5pbmRleE9mKGNycy5heGlzW2ldKSAhPT0gLTEpIHtcbiAgICAgICAgdCA9ICd4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHQgPSAneSc7XG4gICAgICB9XG5cbiAgICB9XG4gICAgZWxzZSBpZiAoaSA9PT0gMSkge1xuICAgICAgdiA9IHlpbjtcbiAgICAgIGlmIChcIm5zXCIuaW5kZXhPZihjcnMuYXhpc1tpXSkgIT09IC0xKSB7XG4gICAgICAgIHQgPSAneSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ID0gJ3gnO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHYgPSB6aW47XG4gICAgICB0ID0gJ3onO1xuICAgIH1cbiAgICBzd2l0Y2ggKGNycy5heGlzW2ldKSB7XG4gICAgY2FzZSAnZSc6XG4gICAgICBvdXRbdF0gPSB2O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndyc6XG4gICAgICBvdXRbdF0gPSAtdjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ24nOlxuICAgICAgb3V0W3RdID0gdjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3MnOlxuICAgICAgb3V0W3RdID0gLXY7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1JzpcbiAgICAgIGlmIChwb2ludFt0XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG91dC56ID0gdjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2QnOlxuICAgICAgaWYgKHBvaW50W3RdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3V0LnogPSAtdjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvL2NvbnNvbGUubG9nKFwiRVJST1I6IHVua25vdyBheGlzIChcIitjcnMuYXhpc1tpXStcIikgLSBjaGVjayBkZWZpbml0aW9uIG9mIFwiK2Nycy5wcm9qTmFtZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChhcnJheSl7XG4gIHZhciBvdXQgPSB7XG4gICAgeDogYXJyYXlbMF0sXG4gICAgeTogYXJyYXlbMV1cbiAgfTtcbiAgaWYgKGFycmF5Lmxlbmd0aD4yKSB7XG4gICAgb3V0LnogPSBhcnJheVsyXTtcbiAgfVxuICBpZiAoYXJyYXkubGVuZ3RoPjMpIHtcbiAgICBvdXQubSA9IGFycmF5WzNdO1xuICB9XG4gIHJldHVybiBvdXQ7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBvaW50KSB7XG4gIGNoZWNrQ29vcmQocG9pbnQueCk7XG4gIGNoZWNrQ29vcmQocG9pbnQueSk7XG59XG5mdW5jdGlvbiBjaGVja0Nvb3JkKG51bSkge1xuICBpZiAodHlwZW9mIE51bWJlci5pc0Zpbml0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUobnVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGZpbml0ZSBudW1iZXJzJyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBudW0gIT09ICdudW1iZXInIHx8IG51bSAhPT0gbnVtIHx8ICFpc0Zpbml0ZShudW0pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBmaW5pdGUgbnVtYmVycycpO1xuICB9XG59XG4iLCJpbXBvcnQge0QyUiwgUjJELCBQSkRfM1BBUkFNLCBQSkRfN1BBUkFNfSBmcm9tICcuL2NvbnN0YW50cy92YWx1ZXMnO1xuaW1wb3J0IGRhdHVtX3RyYW5zZm9ybSBmcm9tICcuL2RhdHVtX3RyYW5zZm9ybSc7XG5pbXBvcnQgYWRqdXN0X2F4aXMgZnJvbSAnLi9hZGp1c3RfYXhpcyc7XG5pbXBvcnQgcHJvaiBmcm9tICcuL1Byb2onO1xuaW1wb3J0IHRvUG9pbnQgZnJvbSAnLi9jb21tb24vdG9Qb2ludCc7XG5pbXBvcnQgY2hlY2tTYW5pdHkgZnJvbSAnLi9jaGVja1Nhbml0eSc7XG5cbmZ1bmN0aW9uIGNoZWNrTm90V0dTKHNvdXJjZSwgZGVzdCkge1xuICByZXR1cm4gKChzb3VyY2UuZGF0dW0uZGF0dW1fdHlwZSA9PT0gUEpEXzNQQVJBTSB8fCBzb3VyY2UuZGF0dW0uZGF0dW1fdHlwZSA9PT0gUEpEXzdQQVJBTSkgJiYgZGVzdC5kYXR1bUNvZGUgIT09ICdXR1M4NCcpIHx8ICgoZGVzdC5kYXR1bS5kYXR1bV90eXBlID09PSBQSkRfM1BBUkFNIHx8IGRlc3QuZGF0dW0uZGF0dW1fdHlwZSA9PT0gUEpEXzdQQVJBTSkgJiYgc291cmNlLmRhdHVtQ29kZSAhPT0gJ1dHUzg0Jyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybShzb3VyY2UsIGRlc3QsIHBvaW50KSB7XG4gIHZhciB3Z3M4NDtcbiAgaWYgKEFycmF5LmlzQXJyYXkocG9pbnQpKSB7XG4gICAgcG9pbnQgPSB0b1BvaW50KHBvaW50KTtcbiAgfVxuICBjaGVja1Nhbml0eShwb2ludCk7XG4gIC8vIFdvcmthcm91bmQgZm9yIGRhdHVtIHNoaWZ0cyB0b3dnczg0LCBpZiBlaXRoZXIgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByb2plY3Rpb24gaXMgbm90IHdnczg0XG4gIGlmIChzb3VyY2UuZGF0dW0gJiYgZGVzdC5kYXR1bSAmJiBjaGVja05vdFdHUyhzb3VyY2UsIGRlc3QpKSB7XG4gICAgd2dzODQgPSBuZXcgcHJvaignV0dTODQnKTtcbiAgICBwb2ludCA9IHRyYW5zZm9ybShzb3VyY2UsIHdnczg0LCBwb2ludCk7XG4gICAgc291cmNlID0gd2dzODQ7XG4gIH1cbiAgLy8gREdSLCAyMDEwLzExLzEyXG4gIGlmIChzb3VyY2UuYXhpcyAhPT0gJ2VudScpIHtcbiAgICBwb2ludCA9IGFkanVzdF9heGlzKHNvdXJjZSwgZmFsc2UsIHBvaW50KTtcbiAgfVxuICAvLyBUcmFuc2Zvcm0gc291cmNlIHBvaW50cyB0byBsb25nL2xhdCwgaWYgdGhleSBhcmVuJ3QgYWxyZWFkeS5cbiAgaWYgKHNvdXJjZS5wcm9qTmFtZSA9PT0gJ2xvbmdsYXQnKSB7XG4gICAgcG9pbnQgPSB7XG4gICAgICB4OiBwb2ludC54ICogRDJSLFxuICAgICAgeTogcG9pbnQueSAqIEQyUixcbiAgICAgIHo6IHBvaW50LnogfHwgMFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNvdXJjZS50b19tZXRlcikge1xuICAgICAgcG9pbnQgPSB7XG4gICAgICAgIHg6IHBvaW50LnggKiBzb3VyY2UudG9fbWV0ZXIsXG4gICAgICAgIHk6IHBvaW50LnkgKiBzb3VyY2UudG9fbWV0ZXIsXG4gICAgICAgIHo6IHBvaW50LnogfHwgMFxuICAgICAgfTtcbiAgICB9XG4gICAgcG9pbnQgPSBzb3VyY2UuaW52ZXJzZShwb2ludCk7IC8vIENvbnZlcnQgQ2FydGVzaWFuIHRvIGxvbmdsYXRcbiAgICBpZiAoIXBvaW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIC8vIEFkanVzdCBmb3IgdGhlIHByaW1lIG1lcmlkaWFuIGlmIG5lY2Vzc2FyeVxuICBpZiAoc291cmNlLmZyb21fZ3JlZW53aWNoKSB7XG4gICAgcG9pbnQueCArPSBzb3VyY2UuZnJvbV9ncmVlbndpY2g7XG4gIH1cblxuICAvLyBDb252ZXJ0IGRhdHVtcyBpZiBuZWVkZWQsIGFuZCBpZiBwb3NzaWJsZS5cbiAgcG9pbnQgPSBkYXR1bV90cmFuc2Zvcm0oc291cmNlLmRhdHVtLCBkZXN0LmRhdHVtLCBwb2ludCk7XG5cbiAgLy8gQWRqdXN0IGZvciB0aGUgcHJpbWUgbWVyaWRpYW4gaWYgbmVjZXNzYXJ5XG4gIGlmIChkZXN0LmZyb21fZ3JlZW53aWNoKSB7XG4gICAgcG9pbnQgPSB7XG4gICAgICB4OiBwb2ludC54IC0gZGVzdC5mcm9tX2dyZWVud2ljaCxcbiAgICAgIHk6IHBvaW50LnksXG4gICAgICB6OiBwb2ludC56IHx8IDBcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRlc3QucHJvak5hbWUgPT09ICdsb25nbGF0Jykge1xuICAgIC8vIGNvbnZlcnQgcmFkaWFucyB0byBkZWNpbWFsIGRlZ3JlZXNcbiAgICBwb2ludCA9IHtcbiAgICAgIHg6IHBvaW50LnggKiBSMkQsXG4gICAgICB5OiBwb2ludC55ICogUjJELFxuICAgICAgejogcG9pbnQueiB8fCAwXG4gICAgfTtcbiAgfSBlbHNlIHsgLy8gZWxzZSBwcm9qZWN0XG4gICAgcG9pbnQgPSBkZXN0LmZvcndhcmQocG9pbnQpO1xuICAgIGlmIChkZXN0LnRvX21ldGVyKSB7XG4gICAgICBwb2ludCA9IHtcbiAgICAgICAgeDogcG9pbnQueCAvIGRlc3QudG9fbWV0ZXIsXG4gICAgICAgIHk6IHBvaW50LnkgLyBkZXN0LnRvX21ldGVyLFxuICAgICAgICB6OiBwb2ludC56IHx8IDBcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gREdSLCAyMDEwLzExLzEyXG4gIGlmIChkZXN0LmF4aXMgIT09ICdlbnUnKSB7XG4gICAgcmV0dXJuIGFkanVzdF9heGlzKGRlc3QsIHRydWUsIHBvaW50KTtcbiAgfVxuXG4gIHJldHVybiBwb2ludDtcbn1cbiIsImltcG9ydCBwcm9qIGZyb20gJy4vUHJvaic7XG5pbXBvcnQgdHJhbnNmb3JtIGZyb20gJy4vdHJhbnNmb3JtJztcbnZhciB3Z3M4NCA9IHByb2ooJ1dHUzg0Jyk7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybWVyKGZyb20sIHRvLCBjb29yZHMpIHtcbiAgdmFyIHRyYW5zZm9ybWVkQXJyYXksIG91dCwga2V5cztcbiAgaWYgKEFycmF5LmlzQXJyYXkoY29vcmRzKSkge1xuICAgIHRyYW5zZm9ybWVkQXJyYXkgPSB0cmFuc2Zvcm0oZnJvbSwgdG8sIGNvb3JkcykgfHwge3g6IE5hTiwgeTogTmFOfTtcbiAgICBpZiAoY29vcmRzLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgodHlwZW9mIGZyb20ubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZnJvbS5uYW1lID09PSAnZ2VvY2VudCcpIHx8ICh0eXBlb2YgdG8ubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdG8ubmFtZSA9PT0gJ2dlb2NlbnQnKSkge1xuICAgICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybWVkQXJyYXkueiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXR1cm4gW3RyYW5zZm9ybWVkQXJyYXkueCwgdHJhbnNmb3JtZWRBcnJheS55LCB0cmFuc2Zvcm1lZEFycmF5LnpdLmNvbmNhdChjb29yZHMuc3BsaWNlKDMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW3RyYW5zZm9ybWVkQXJyYXkueCwgdHJhbnNmb3JtZWRBcnJheS55LCBjb29yZHNbMl1dLmNvbmNhdChjb29yZHMuc3BsaWNlKDMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFt0cmFuc2Zvcm1lZEFycmF5LngsIHRyYW5zZm9ybWVkQXJyYXkueV0uY29uY2F0KGNvb3Jkcy5zcGxpY2UoMikpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3RyYW5zZm9ybWVkQXJyYXkueCwgdHJhbnNmb3JtZWRBcnJheS55XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ID0gdHJhbnNmb3JtKGZyb20sIHRvLCBjb29yZHMpO1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyhjb29yZHMpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICgodHlwZW9mIGZyb20ubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZnJvbS5uYW1lID09PSAnZ2VvY2VudCcpIHx8ICh0eXBlb2YgdG8ubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdG8ubmFtZSA9PT0gJ2dlb2NlbnQnKSkge1xuICAgICAgICBpZiAoa2V5ID09PSAneCcgfHwga2V5ID09PSAneScgfHwga2V5ID09PSAneicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChrZXkgPT09ICd4JyB8fCBrZXkgPT09ICd5Jykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0W2tleV0gPSBjb29yZHNba2V5XTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvaihpdGVtKSB7XG4gIGlmIChpdGVtIGluc3RhbmNlb2YgcHJvaikge1xuICAgIHJldHVybiBpdGVtO1xuICB9XG4gIGlmIChpdGVtLm9Qcm9qKSB7XG4gICAgcmV0dXJuIGl0ZW0ub1Byb2o7XG4gIH1cbiAgcmV0dXJuIHByb2ooaXRlbSk7XG59XG5cbmZ1bmN0aW9uIHByb2o0KGZyb21Qcm9qLCB0b1Byb2osIGNvb3JkKSB7XG4gIGZyb21Qcm9qID0gY2hlY2tQcm9qKGZyb21Qcm9qKTtcbiAgdmFyIHNpbmdsZSA9IGZhbHNlO1xuICB2YXIgb2JqO1xuICBpZiAodHlwZW9mIHRvUHJvaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0b1Byb2ogPSBmcm9tUHJvajtcbiAgICBmcm9tUHJvaiA9IHdnczg0O1xuICAgIHNpbmdsZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHRvUHJvai54ICE9PSAndW5kZWZpbmVkJyB8fCBBcnJheS5pc0FycmF5KHRvUHJvaikpIHtcbiAgICBjb29yZCA9IHRvUHJvajtcbiAgICB0b1Byb2ogPSBmcm9tUHJvajtcbiAgICBmcm9tUHJvaiA9IHdnczg0O1xuICAgIHNpbmdsZSA9IHRydWU7XG4gIH1cbiAgdG9Qcm9qID0gY2hlY2tQcm9qKHRvUHJvaik7XG4gIGlmIChjb29yZCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1lcihmcm9tUHJvaiwgdG9Qcm9qLCBjb29yZCk7XG4gIH0gZWxzZSB7XG4gICAgb2JqID0ge1xuICAgICAgZm9yd2FyZDogZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtZXIoZnJvbVByb2osIHRvUHJvaiwgY29vcmRzKTtcbiAgICAgIH0sXG4gICAgICBpbnZlcnNlOiBmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1lcih0b1Byb2osIGZyb21Qcm9qLCBjb29yZHMpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHNpbmdsZSkge1xuICAgICAgb2JqLm9Qcm9qID0gdG9Qcm9qO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBwcm9qNDsiLCJcblxuXG4vKipcbiAqIFVUTSB6b25lcyBhcmUgZ3JvdXBlZCwgYW5kIGFzc2lnbmVkIHRvIG9uZSBvZiBhIGdyb3VwIG9mIDZcbiAqIHNldHMuXG4gKlxuICoge2ludH0gQHByaXZhdGVcbiAqL1xudmFyIE5VTV8xMDBLX1NFVFMgPSA2O1xuXG4vKipcbiAqIFRoZSBjb2x1bW4gbGV0dGVycyAoZm9yIGVhc3RpbmcpIG9mIHRoZSBsb3dlciBsZWZ0IHZhbHVlLCBwZXJcbiAqIHNldC5cbiAqXG4gKiB7c3RyaW5nfSBAcHJpdmF0ZVxuICovXG52YXIgU0VUX09SSUdJTl9DT0xVTU5fTEVUVEVSUyA9ICdBSlNBSlMnO1xuXG4vKipcbiAqIFRoZSByb3cgbGV0dGVycyAoZm9yIG5vcnRoaW5nKSBvZiB0aGUgbG93ZXIgbGVmdCB2YWx1ZSwgcGVyXG4gKiBzZXQuXG4gKlxuICoge3N0cmluZ30gQHByaXZhdGVcbiAqL1xudmFyIFNFVF9PUklHSU5fUk9XX0xFVFRFUlMgPSAnQUZBRkFGJztcblxudmFyIEEgPSA2NTsgLy8gQVxudmFyIEkgPSA3MzsgLy8gSVxudmFyIE8gPSA3OTsgLy8gT1xudmFyIFYgPSA4NjsgLy8gVlxudmFyIFogPSA5MDsgLy8gWlxuZXhwb3J0IGRlZmF1bHQge1xuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICB0b1BvaW50OiB0b1BvaW50XG59O1xuLyoqXG4gKiBDb252ZXJzaW9uIG9mIGxhdC9sb24gdG8gTUdSUy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbGwgT2JqZWN0IGxpdGVyYWwgd2l0aCBsYXQgYW5kIGxvbiBwcm9wZXJ0aWVzIG9uIGFcbiAqICAgICBXR1M4NCBlbGxpcHNvaWQuXG4gKiBAcGFyYW0ge2ludH0gYWNjdXJhY3kgQWNjdXJhY3kgaW4gZGlnaXRzICg1IGZvciAxIG0sIDQgZm9yIDEwIG0sIDMgZm9yXG4gKiAgICAgIDEwMCBtLCAyIGZvciAxMDAwIG0gb3IgMSBmb3IgMTAwMDAgbSkuIE9wdGlvbmFsLCBkZWZhdWx0IGlzIDUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBNR1JTIHN0cmluZyBmb3IgdGhlIGdpdmVuIGxvY2F0aW9uIGFuZCBhY2N1cmFjeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQobGwsIGFjY3VyYWN5KSB7XG4gIGFjY3VyYWN5ID0gYWNjdXJhY3kgfHwgNTsgLy8gZGVmYXVsdCBhY2N1cmFjeSAxbVxuICByZXR1cm4gZW5jb2RlKExMdG9VVE0oe1xuICAgIGxhdDogbGxbMV0sXG4gICAgbG9uOiBsbFswXVxuICB9KSwgYWNjdXJhY3kpO1xufTtcblxuLyoqXG4gKiBDb252ZXJzaW9uIG9mIE1HUlMgdG8gbGF0L2xvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWdycyBNR1JTIHN0cmluZy5cbiAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSB3aXRoIGxlZnQgKGxvbmdpdHVkZSksIGJvdHRvbSAobGF0aXR1ZGUpLCByaWdodFxuICogICAgIChsb25naXR1ZGUpIGFuZCB0b3AgKGxhdGl0dWRlKSB2YWx1ZXMgaW4gV0dTODQsIHJlcHJlc2VudGluZyB0aGVcbiAqICAgICBib3VuZGluZyBib3ggZm9yIHRoZSBwcm92aWRlZCBNR1JTIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UobWdycykge1xuICB2YXIgYmJveCA9IFVUTXRvTEwoZGVjb2RlKG1ncnMudG9VcHBlckNhc2UoKSkpO1xuICBpZiAoYmJveC5sYXQgJiYgYmJveC5sb24pIHtcbiAgICByZXR1cm4gW2Jib3gubG9uLCBiYm94LmxhdCwgYmJveC5sb24sIGJib3gubGF0XTtcbiAgfVxuICByZXR1cm4gW2Jib3gubGVmdCwgYmJveC5ib3R0b20sIGJib3gucmlnaHQsIGJib3gudG9wXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1BvaW50KG1ncnMpIHtcbiAgdmFyIGJib3ggPSBVVE10b0xMKGRlY29kZShtZ3JzLnRvVXBwZXJDYXNlKCkpKTtcbiAgaWYgKGJib3gubGF0ICYmIGJib3gubG9uKSB7XG4gICAgcmV0dXJuIFtiYm94LmxvbiwgYmJveC5sYXRdO1xuICB9XG4gIHJldHVybiBbKGJib3gubGVmdCArIGJib3gucmlnaHQpIC8gMiwgKGJib3gudG9wICsgYmJveC5ib3R0b20pIC8gMl07XG59O1xuLyoqXG4gKiBDb252ZXJzaW9uIGZyb20gZGVncmVlcyB0byByYWRpYW5zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gZGVnIHRoZSBhbmdsZSBpbiBkZWdyZWVzLlxuICogQHJldHVybiB7bnVtYmVyfSB0aGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqL1xuZnVuY3Rpb24gZGVnVG9SYWQoZGVnKSB7XG4gIHJldHVybiAoZGVnICogKE1hdGguUEkgLyAxODAuMCkpO1xufVxuXG4vKipcbiAqIENvbnZlcnNpb24gZnJvbSByYWRpYW5zIHRvIGRlZ3JlZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgdGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBhbmdsZSBpbiBkZWdyZWVzLlxuICovXG5mdW5jdGlvbiByYWRUb0RlZyhyYWQpIHtcbiAgcmV0dXJuICgxODAuMCAqIChyYWQgLyBNYXRoLlBJKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzZXQgb2YgTG9uZ2l0dWRlIGFuZCBMYXRpdHVkZSBjby1vcmRpbmF0ZXMgdG8gVVRNXG4gKiB1c2luZyB0aGUgV0dTODQgZWxsaXBzb2lkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gbGwgT2JqZWN0IGxpdGVyYWwgd2l0aCBsYXQgYW5kIGxvbiBwcm9wZXJ0aWVzXG4gKiAgICAgcmVwcmVzZW50aW5nIHRoZSBXR1M4NCBjb29yZGluYXRlIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGxpdGVyYWwgY29udGFpbmluZyB0aGUgVVRNIHZhbHVlIHdpdGggZWFzdGluZyxcbiAqICAgICBub3J0aGluZywgem9uZU51bWJlciBhbmQgem9uZUxldHRlciBwcm9wZXJ0aWVzLCBhbmQgYW4gb3B0aW9uYWxcbiAqICAgICBhY2N1cmFjeSBwcm9wZXJ0eSBpbiBkaWdpdHMuIFJldHVybnMgbnVsbCBpZiB0aGUgY29udmVyc2lvbiBmYWlsZWQuXG4gKi9cbmZ1bmN0aW9uIExMdG9VVE0obGwpIHtcbiAgdmFyIExhdCA9IGxsLmxhdDtcbiAgdmFyIExvbmcgPSBsbC5sb247XG4gIHZhciBhID0gNjM3ODEzNy4wOyAvL2VsbGlwLnJhZGl1cztcbiAgdmFyIGVjY1NxdWFyZWQgPSAwLjAwNjY5NDM4OyAvL2VsbGlwLmVjY3NxO1xuICB2YXIgazAgPSAwLjk5OTY7XG4gIHZhciBMb25nT3JpZ2luO1xuICB2YXIgZWNjUHJpbWVTcXVhcmVkO1xuICB2YXIgTiwgVCwgQywgQSwgTTtcbiAgdmFyIExhdFJhZCA9IGRlZ1RvUmFkKExhdCk7XG4gIHZhciBMb25nUmFkID0gZGVnVG9SYWQoTG9uZyk7XG4gIHZhciBMb25nT3JpZ2luUmFkO1xuICB2YXIgWm9uZU51bWJlcjtcbiAgLy8gKGludClcbiAgWm9uZU51bWJlciA9IE1hdGguZmxvb3IoKExvbmcgKyAxODApIC8gNikgKyAxO1xuXG4gIC8vTWFrZSBzdXJlIHRoZSBsb25naXR1ZGUgMTgwLjAwIGlzIGluIFpvbmUgNjBcbiAgaWYgKExvbmcgPT09IDE4MCkge1xuICAgIFpvbmVOdW1iZXIgPSA2MDtcbiAgfVxuXG4gIC8vIFNwZWNpYWwgem9uZSBmb3IgTm9yd2F5XG4gIGlmIChMYXQgPj0gNTYuMCAmJiBMYXQgPCA2NC4wICYmIExvbmcgPj0gMy4wICYmIExvbmcgPCAxMi4wKSB7XG4gICAgWm9uZU51bWJlciA9IDMyO1xuICB9XG5cbiAgLy8gU3BlY2lhbCB6b25lcyBmb3IgU3ZhbGJhcmRcbiAgaWYgKExhdCA+PSA3Mi4wICYmIExhdCA8IDg0LjApIHtcbiAgICBpZiAoTG9uZyA+PSAwLjAgJiYgTG9uZyA8IDkuMCkge1xuICAgICAgWm9uZU51bWJlciA9IDMxO1xuICAgIH1cbiAgICBlbHNlIGlmIChMb25nID49IDkuMCAmJiBMb25nIDwgMjEuMCkge1xuICAgICAgWm9uZU51bWJlciA9IDMzO1xuICAgIH1cbiAgICBlbHNlIGlmIChMb25nID49IDIxLjAgJiYgTG9uZyA8IDMzLjApIHtcbiAgICAgIFpvbmVOdW1iZXIgPSAzNTtcbiAgICB9XG4gICAgZWxzZSBpZiAoTG9uZyA+PSAzMy4wICYmIExvbmcgPCA0Mi4wKSB7XG4gICAgICBab25lTnVtYmVyID0gMzc7XG4gICAgfVxuICB9XG5cbiAgTG9uZ09yaWdpbiA9IChab25lTnVtYmVyIC0gMSkgKiA2IC0gMTgwICsgMzsgLy8rMyBwdXRzIG9yaWdpblxuICAvLyBpbiBtaWRkbGUgb2ZcbiAgLy8gem9uZVxuICBMb25nT3JpZ2luUmFkID0gZGVnVG9SYWQoTG9uZ09yaWdpbik7XG5cbiAgZWNjUHJpbWVTcXVhcmVkID0gKGVjY1NxdWFyZWQpIC8gKDEgLSBlY2NTcXVhcmVkKTtcblxuICBOID0gYSAvIE1hdGguc3FydCgxIC0gZWNjU3F1YXJlZCAqIE1hdGguc2luKExhdFJhZCkgKiBNYXRoLnNpbihMYXRSYWQpKTtcbiAgVCA9IE1hdGgudGFuKExhdFJhZCkgKiBNYXRoLnRhbihMYXRSYWQpO1xuICBDID0gZWNjUHJpbWVTcXVhcmVkICogTWF0aC5jb3MoTGF0UmFkKSAqIE1hdGguY29zKExhdFJhZCk7XG4gIEEgPSBNYXRoLmNvcyhMYXRSYWQpICogKExvbmdSYWQgLSBMb25nT3JpZ2luUmFkKTtcblxuICBNID0gYSAqICgoMSAtIGVjY1NxdWFyZWQgLyA0IC0gMyAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gNjQgLSA1ICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMjU2KSAqIExhdFJhZCAtICgzICogZWNjU3F1YXJlZCAvIDggKyAzICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgLyAzMiArIDQ1ICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMTAyNCkgKiBNYXRoLnNpbigyICogTGF0UmFkKSArICgxNSAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMjU2ICsgNDUgKiBlY2NTcXVhcmVkICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgLyAxMDI0KSAqIE1hdGguc2luKDQgKiBMYXRSYWQpIC0gKDM1ICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMzA3MikgKiBNYXRoLnNpbig2ICogTGF0UmFkKSk7XG5cbiAgdmFyIFVUTUVhc3RpbmcgPSAoazAgKiBOICogKEEgKyAoMSAtIFQgKyBDKSAqIEEgKiBBICogQSAvIDYuMCArICg1IC0gMTggKiBUICsgVCAqIFQgKyA3MiAqIEMgLSA1OCAqIGVjY1ByaW1lU3F1YXJlZCkgKiBBICogQSAqIEEgKiBBICogQSAvIDEyMC4wKSArIDUwMDAwMC4wKTtcblxuICB2YXIgVVRNTm9ydGhpbmcgPSAoazAgKiAoTSArIE4gKiBNYXRoLnRhbihMYXRSYWQpICogKEEgKiBBIC8gMiArICg1IC0gVCArIDkgKiBDICsgNCAqIEMgKiBDKSAqIEEgKiBBICogQSAqIEEgLyAyNC4wICsgKDYxIC0gNTggKiBUICsgVCAqIFQgKyA2MDAgKiBDIC0gMzMwICogZWNjUHJpbWVTcXVhcmVkKSAqIEEgKiBBICogQSAqIEEgKiBBICogQSAvIDcyMC4wKSkpO1xuICBpZiAoTGF0IDwgMC4wKSB7XG4gICAgVVRNTm9ydGhpbmcgKz0gMTAwMDAwMDAuMDsgLy8xMDAwMDAwMCBtZXRlciBvZmZzZXQgZm9yXG4gICAgLy8gc291dGhlcm4gaGVtaXNwaGVyZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBub3J0aGluZzogTWF0aC5yb3VuZChVVE1Ob3J0aGluZyksXG4gICAgZWFzdGluZzogTWF0aC5yb3VuZChVVE1FYXN0aW5nKSxcbiAgICB6b25lTnVtYmVyOiBab25lTnVtYmVyLFxuICAgIHpvbmVMZXR0ZXI6IGdldExldHRlckRlc2lnbmF0b3IoTGF0KVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIFVUTSBjb29yZHMgdG8gbGF0L2xvbmcsIHVzaW5nIHRoZSBXR1M4NCBlbGxpcHNvaWQuIFRoaXMgaXMgYSBjb252ZW5pZW5jZVxuICogY2xhc3Mgd2hlcmUgdGhlIFpvbmUgY2FuIGJlIHNwZWNpZmllZCBhcyBhIHNpbmdsZSBzdHJpbmcgZWcuXCI2ME5cIiB3aGljaFxuICogaXMgdGhlbiBicm9rZW4gZG93biBpbnRvIHRoZSBab25lTnVtYmVyIGFuZCBab25lTGV0dGVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gdXRtIEFuIG9iamVjdCBsaXRlcmFsIHdpdGggbm9ydGhpbmcsIGVhc3RpbmcsIHpvbmVOdW1iZXJcbiAqICAgICBhbmQgem9uZUxldHRlciBwcm9wZXJ0aWVzLiBJZiBhbiBvcHRpb25hbCBhY2N1cmFjeSBwcm9wZXJ0eSBpc1xuICogICAgIHByb3ZpZGVkIChpbiBtZXRlcnMpLCBhIGJvdW5kaW5nIGJveCB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2ZcbiAqICAgICBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlLlxuICogQHJldHVybiB7b2JqZWN0fSBBbiBvYmplY3QgbGl0ZXJhbCBjb250YWluaW5nIGVpdGhlciBsYXQgYW5kIGxvbiB2YWx1ZXNcbiAqICAgICAoaWYgbm8gYWNjdXJhY3kgd2FzIHByb3ZpZGVkKSwgb3IgdG9wLCByaWdodCwgYm90dG9tIGFuZCBsZWZ0IHZhbHVlc1xuICogICAgIGZvciB0aGUgYm91bmRpbmcgYm94IGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBhY2N1cmFjeS5cbiAqICAgICBSZXR1cm5zIG51bGwgaWYgdGhlIGNvbnZlcnNpb24gZmFpbGVkLlxuICovXG5mdW5jdGlvbiBVVE10b0xMKHV0bSkge1xuXG4gIHZhciBVVE1Ob3J0aGluZyA9IHV0bS5ub3J0aGluZztcbiAgdmFyIFVUTUVhc3RpbmcgPSB1dG0uZWFzdGluZztcbiAgdmFyIHpvbmVMZXR0ZXIgPSB1dG0uem9uZUxldHRlcjtcbiAgdmFyIHpvbmVOdW1iZXIgPSB1dG0uem9uZU51bWJlcjtcbiAgLy8gY2hlY2sgdGhlIFpvbmVOdW1tYmVyIGlzIHZhbGlkXG4gIGlmICh6b25lTnVtYmVyIDwgMCB8fCB6b25lTnVtYmVyID4gNjApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBrMCA9IDAuOTk5NjtcbiAgdmFyIGEgPSA2Mzc4MTM3LjA7IC8vZWxsaXAucmFkaXVzO1xuICB2YXIgZWNjU3F1YXJlZCA9IDAuMDA2Njk0Mzg7IC8vZWxsaXAuZWNjc3E7XG4gIHZhciBlY2NQcmltZVNxdWFyZWQ7XG4gIHZhciBlMSA9ICgxIC0gTWF0aC5zcXJ0KDEgLSBlY2NTcXVhcmVkKSkgLyAoMSArIE1hdGguc3FydCgxIC0gZWNjU3F1YXJlZCkpO1xuICB2YXIgTjEsIFQxLCBDMSwgUjEsIEQsIE07XG4gIHZhciBMb25nT3JpZ2luO1xuICB2YXIgbXUsIHBoaTFSYWQ7XG5cbiAgLy8gcmVtb3ZlIDUwMCwwMDAgbWV0ZXIgb2Zmc2V0IGZvciBsb25naXR1ZGVcbiAgdmFyIHggPSBVVE1FYXN0aW5nIC0gNTAwMDAwLjA7XG4gIHZhciB5ID0gVVRNTm9ydGhpbmc7XG5cbiAgLy8gV2UgbXVzdCBrbm93IHNvbWVob3cgaWYgd2UgYXJlIGluIHRoZSBOb3J0aGVybiBvciBTb3V0aGVyblxuICAvLyBoZW1pc3BoZXJlLCB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgdXNlIHRoZSBsZXR0ZXIgU28gZXZlblxuICAvLyBpZiB0aGUgWm9uZSBsZXR0ZXIgaXNuJ3QgZXhhY3RseSBjb3JyZWN0IGl0IHNob3VsZCBpbmRpY2F0ZVxuICAvLyB0aGUgaGVtaXNwaGVyZSBjb3JyZWN0bHlcbiAgaWYgKHpvbmVMZXR0ZXIgPCAnTicpIHtcbiAgICB5IC09IDEwMDAwMDAwLjA7IC8vIHJlbW92ZSAxMCwwMDAsMDAwIG1ldGVyIG9mZnNldCB1c2VkXG4gICAgLy8gZm9yIHNvdXRoZXJuIGhlbWlzcGhlcmVcbiAgfVxuXG4gIC8vIFRoZXJlIGFyZSA2MCB6b25lcyB3aXRoIHpvbmUgMSBiZWluZyBhdCBXZXN0IC0xODAgdG8gLTE3NFxuICBMb25nT3JpZ2luID0gKHpvbmVOdW1iZXIgLSAxKSAqIDYgLSAxODAgKyAzOyAvLyArMyBwdXRzIG9yaWdpblxuICAvLyBpbiBtaWRkbGUgb2ZcbiAgLy8gem9uZVxuXG4gIGVjY1ByaW1lU3F1YXJlZCA9IChlY2NTcXVhcmVkKSAvICgxIC0gZWNjU3F1YXJlZCk7XG5cbiAgTSA9IHkgLyBrMDtcbiAgbXUgPSBNIC8gKGEgKiAoMSAtIGVjY1NxdWFyZWQgLyA0IC0gMyAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gNjQgLSA1ICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMjU2KSk7XG5cbiAgcGhpMVJhZCA9IG11ICsgKDMgKiBlMSAvIDIgLSAyNyAqIGUxICogZTEgKiBlMSAvIDMyKSAqIE1hdGguc2luKDIgKiBtdSkgKyAoMjEgKiBlMSAqIGUxIC8gMTYgLSA1NSAqIGUxICogZTEgKiBlMSAqIGUxIC8gMzIpICogTWF0aC5zaW4oNCAqIG11KSArICgxNTEgKiBlMSAqIGUxICogZTEgLyA5NikgKiBNYXRoLnNpbig2ICogbXUpO1xuICAvLyBkb3VibGUgcGhpMSA9IFByb2pNYXRoLnJhZFRvRGVnKHBoaTFSYWQpO1xuXG4gIE4xID0gYSAvIE1hdGguc3FydCgxIC0gZWNjU3F1YXJlZCAqIE1hdGguc2luKHBoaTFSYWQpICogTWF0aC5zaW4ocGhpMVJhZCkpO1xuICBUMSA9IE1hdGgudGFuKHBoaTFSYWQpICogTWF0aC50YW4ocGhpMVJhZCk7XG4gIEMxID0gZWNjUHJpbWVTcXVhcmVkICogTWF0aC5jb3MocGhpMVJhZCkgKiBNYXRoLmNvcyhwaGkxUmFkKTtcbiAgUjEgPSBhICogKDEgLSBlY2NTcXVhcmVkKSAvIE1hdGgucG93KDEgLSBlY2NTcXVhcmVkICogTWF0aC5zaW4ocGhpMVJhZCkgKiBNYXRoLnNpbihwaGkxUmFkKSwgMS41KTtcbiAgRCA9IHggLyAoTjEgKiBrMCk7XG5cbiAgdmFyIGxhdCA9IHBoaTFSYWQgLSAoTjEgKiBNYXRoLnRhbihwaGkxUmFkKSAvIFIxKSAqIChEICogRCAvIDIgLSAoNSArIDMgKiBUMSArIDEwICogQzEgLSA0ICogQzEgKiBDMSAtIDkgKiBlY2NQcmltZVNxdWFyZWQpICogRCAqIEQgKiBEICogRCAvIDI0ICsgKDYxICsgOTAgKiBUMSArIDI5OCAqIEMxICsgNDUgKiBUMSAqIFQxIC0gMjUyICogZWNjUHJpbWVTcXVhcmVkIC0gMyAqIEMxICogQzEpICogRCAqIEQgKiBEICogRCAqIEQgKiBEIC8gNzIwKTtcbiAgbGF0ID0gcmFkVG9EZWcobGF0KTtcblxuICB2YXIgbG9uID0gKEQgLSAoMSArIDIgKiBUMSArIEMxKSAqIEQgKiBEICogRCAvIDYgKyAoNSAtIDIgKiBDMSArIDI4ICogVDEgLSAzICogQzEgKiBDMSArIDggKiBlY2NQcmltZVNxdWFyZWQgKyAyNCAqIFQxICogVDEpICogRCAqIEQgKiBEICogRCAqIEQgLyAxMjApIC8gTWF0aC5jb3MocGhpMVJhZCk7XG4gIGxvbiA9IExvbmdPcmlnaW4gKyByYWRUb0RlZyhsb24pO1xuXG4gIHZhciByZXN1bHQ7XG4gIGlmICh1dG0uYWNjdXJhY3kpIHtcbiAgICB2YXIgdG9wUmlnaHQgPSBVVE10b0xMKHtcbiAgICAgIG5vcnRoaW5nOiB1dG0ubm9ydGhpbmcgKyB1dG0uYWNjdXJhY3ksXG4gICAgICBlYXN0aW5nOiB1dG0uZWFzdGluZyArIHV0bS5hY2N1cmFjeSxcbiAgICAgIHpvbmVMZXR0ZXI6IHV0bS56b25lTGV0dGVyLFxuICAgICAgem9uZU51bWJlcjogdXRtLnpvbmVOdW1iZXJcbiAgICB9KTtcbiAgICByZXN1bHQgPSB7XG4gICAgICB0b3A6IHRvcFJpZ2h0LmxhdCxcbiAgICAgIHJpZ2h0OiB0b3BSaWdodC5sb24sXG4gICAgICBib3R0b206IGxhdCxcbiAgICAgIGxlZnQ6IGxvblxuICAgIH07XG4gIH1cbiAgZWxzZSB7XG4gICAgcmVzdWx0ID0ge1xuICAgICAgbGF0OiBsYXQsXG4gICAgICBsb246IGxvblxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBNR1JTIGxldHRlciBkZXNpZ25hdG9yIGZvciB0aGUgZ2l2ZW4gbGF0aXR1ZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsYXQgVGhlIGxhdGl0dWRlIGluIFdHUzg0IHRvIGdldCB0aGUgbGV0dGVyIGRlc2lnbmF0b3JcbiAqICAgICBmb3IuXG4gKiBAcmV0dXJuIHtjaGFyfSBUaGUgbGV0dGVyIGRlc2lnbmF0b3IuXG4gKi9cbmZ1bmN0aW9uIGdldExldHRlckRlc2lnbmF0b3IobGF0KSB7XG4gIC8vVGhpcyBpcyBoZXJlIGFzIGFuIGVycm9yIGZsYWcgdG8gc2hvdyB0aGF0IHRoZSBMYXRpdHVkZSBpc1xuICAvL291dHNpZGUgTUdSUyBsaW1pdHNcbiAgdmFyIExldHRlckRlc2lnbmF0b3IgPSAnWic7XG5cbiAgaWYgKCg4NCA+PSBsYXQpICYmIChsYXQgPj0gNzIpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdYJztcbiAgfVxuICBlbHNlIGlmICgoNzIgPiBsYXQpICYmIChsYXQgPj0gNjQpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdXJztcbiAgfVxuICBlbHNlIGlmICgoNjQgPiBsYXQpICYmIChsYXQgPj0gNTYpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdWJztcbiAgfVxuICBlbHNlIGlmICgoNTYgPiBsYXQpICYmIChsYXQgPj0gNDgpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdVJztcbiAgfVxuICBlbHNlIGlmICgoNDggPiBsYXQpICYmIChsYXQgPj0gNDApKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdUJztcbiAgfVxuICBlbHNlIGlmICgoNDAgPiBsYXQpICYmIChsYXQgPj0gMzIpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdTJztcbiAgfVxuICBlbHNlIGlmICgoMzIgPiBsYXQpICYmIChsYXQgPj0gMjQpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdSJztcbiAgfVxuICBlbHNlIGlmICgoMjQgPiBsYXQpICYmIChsYXQgPj0gMTYpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdRJztcbiAgfVxuICBlbHNlIGlmICgoMTYgPiBsYXQpICYmIChsYXQgPj0gOCkpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ1AnO1xuICB9XG4gIGVsc2UgaWYgKCg4ID4gbGF0KSAmJiAobGF0ID49IDApKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdOJztcbiAgfVxuICBlbHNlIGlmICgoMCA+IGxhdCkgJiYgKGxhdCA+PSAtOCkpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ00nO1xuICB9XG4gIGVsc2UgaWYgKCgtOCA+IGxhdCkgJiYgKGxhdCA+PSAtMTYpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdMJztcbiAgfVxuICBlbHNlIGlmICgoLTE2ID4gbGF0KSAmJiAobGF0ID49IC0yNCkpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ0snO1xuICB9XG4gIGVsc2UgaWYgKCgtMjQgPiBsYXQpICYmIChsYXQgPj0gLTMyKSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnSic7XG4gIH1cbiAgZWxzZSBpZiAoKC0zMiA+IGxhdCkgJiYgKGxhdCA+PSAtNDApKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdIJztcbiAgfVxuICBlbHNlIGlmICgoLTQwID4gbGF0KSAmJiAobGF0ID49IC00OCkpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ0cnO1xuICB9XG4gIGVsc2UgaWYgKCgtNDggPiBsYXQpICYmIChsYXQgPj0gLTU2KSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnRic7XG4gIH1cbiAgZWxzZSBpZiAoKC01NiA+IGxhdCkgJiYgKGxhdCA+PSAtNjQpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdFJztcbiAgfVxuICBlbHNlIGlmICgoLTY0ID4gbGF0KSAmJiAobGF0ID49IC03MikpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ0QnO1xuICB9XG4gIGVsc2UgaWYgKCgtNzIgPiBsYXQpICYmIChsYXQgPj0gLTgwKSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnQyc7XG4gIH1cbiAgcmV0dXJuIExldHRlckRlc2lnbmF0b3I7XG59XG5cbi8qKlxuICogRW5jb2RlcyBhIFVUTSBsb2NhdGlvbiBhcyBNR1JTIHN0cmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtvYmplY3R9IHV0bSBBbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGVhc3RpbmcsIG5vcnRoaW5nLFxuICogICAgIHpvbmVMZXR0ZXIsIHpvbmVOdW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhY2N1cmFjeSBBY2N1cmFjeSBpbiBkaWdpdHMgKDEtNSkuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE1HUlMgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gVVRNIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodXRtLCBhY2N1cmFjeSkge1xuICAvLyBwcmVwZW5kIHdpdGggbGVhZGluZyB6ZXJvZXNcbiAgdmFyIHNlYXN0aW5nID0gXCIwMDAwMFwiICsgdXRtLmVhc3RpbmcsXG4gICAgc25vcnRoaW5nID0gXCIwMDAwMFwiICsgdXRtLm5vcnRoaW5nO1xuXG4gIHJldHVybiB1dG0uem9uZU51bWJlciArIHV0bS56b25lTGV0dGVyICsgZ2V0MTAwa0lEKHV0bS5lYXN0aW5nLCB1dG0ubm9ydGhpbmcsIHV0bS56b25lTnVtYmVyKSArIHNlYXN0aW5nLnN1YnN0cihzZWFzdGluZy5sZW5ndGggLSA1LCBhY2N1cmFjeSkgKyBzbm9ydGhpbmcuc3Vic3RyKHNub3J0aGluZy5sZW5ndGggLSA1LCBhY2N1cmFjeSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB0d28gbGV0dGVyIDEwMGsgZGVzaWduYXRvciBmb3IgYSBnaXZlbiBVVE0gZWFzdGluZyxcbiAqIG5vcnRoaW5nIGFuZCB6b25lIG51bWJlciB2YWx1ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGVhc3RpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSBub3J0aGluZ1xuICogQHBhcmFtIHtudW1iZXJ9IHpvbmVOdW1iZXJcbiAqIEByZXR1cm4gdGhlIHR3byBsZXR0ZXIgMTAwayBkZXNpZ25hdG9yIGZvciB0aGUgZ2l2ZW4gVVRNIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBnZXQxMDBrSUQoZWFzdGluZywgbm9ydGhpbmcsIHpvbmVOdW1iZXIpIHtcbiAgdmFyIHNldFBhcm0gPSBnZXQxMDBrU2V0Rm9yWm9uZSh6b25lTnVtYmVyKTtcbiAgdmFyIHNldENvbHVtbiA9IE1hdGguZmxvb3IoZWFzdGluZyAvIDEwMDAwMCk7XG4gIHZhciBzZXRSb3cgPSBNYXRoLmZsb29yKG5vcnRoaW5nIC8gMTAwMDAwKSAlIDIwO1xuICByZXR1cm4gZ2V0TGV0dGVyMTAwa0lEKHNldENvbHVtbiwgc2V0Um93LCBzZXRQYXJtKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIFVUTSB6b25lIG51bWJlciwgZmlndXJlIG91dCB0aGUgTUdSUyAxMDBLIHNldCBpdCBpcyBpbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGkgQW4gVVRNIHpvbmUgbnVtYmVyLlxuICogQHJldHVybiB7bnVtYmVyfSB0aGUgMTAwayBzZXQgdGhlIFVUTSB6b25lIGlzIGluLlxuICovXG5mdW5jdGlvbiBnZXQxMDBrU2V0Rm9yWm9uZShpKSB7XG4gIHZhciBzZXRQYXJtID0gaSAlIE5VTV8xMDBLX1NFVFM7XG4gIGlmIChzZXRQYXJtID09PSAwKSB7XG4gICAgc2V0UGFybSA9IE5VTV8xMDBLX1NFVFM7XG4gIH1cblxuICByZXR1cm4gc2V0UGFybTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHR3by1sZXR0ZXIgTUdSUyAxMDBrIGRlc2lnbmF0b3IgZ2l2ZW4gaW5mb3JtYXRpb25cbiAqIHRyYW5zbGF0ZWQgZnJvbSB0aGUgVVRNIG5vcnRoaW5nLCBlYXN0aW5nIGFuZCB6b25lIG51bWJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiB0aGUgY29sdW1uIGluZGV4IGFzIGl0IHJlbGF0ZXMgdG8gdGhlIE1HUlNcbiAqICAgICAgICAxMDBrIHNldCBzcHJlYWRzaGVldCwgY3JlYXRlZCBmcm9tIHRoZSBVVE0gZWFzdGluZy5cbiAqICAgICAgICBWYWx1ZXMgYXJlIDEtOC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgdGhlIHJvdyBpbmRleCBhcyBpdCByZWxhdGVzIHRvIHRoZSBNR1JTIDEwMGsgc2V0XG4gKiAgICAgICAgc3ByZWFkc2hlZXQsIGNyZWF0ZWQgZnJvbSB0aGUgVVRNIG5vcnRoaW5nIHZhbHVlLiBWYWx1ZXNcbiAqICAgICAgICBhcmUgZnJvbSAwLTE5LlxuICogQHBhcmFtIHtudW1iZXJ9IHBhcm0gdGhlIHNldCBibG9jaywgYXMgaXQgcmVsYXRlcyB0byB0aGUgTUdSUyAxMDBrIHNldFxuICogICAgICAgIHNwcmVhZHNoZWV0LCBjcmVhdGVkIGZyb20gdGhlIFVUTSB6b25lLiBWYWx1ZXMgYXJlIGZyb21cbiAqICAgICAgICAxLTYwLlxuICogQHJldHVybiB0d28gbGV0dGVyIE1HUlMgMTAwayBjb2RlLlxuICovXG5mdW5jdGlvbiBnZXRMZXR0ZXIxMDBrSUQoY29sdW1uLCByb3csIHBhcm0pIHtcbiAgLy8gY29sT3JpZ2luIGFuZCByb3dPcmlnaW4gYXJlIHRoZSBsZXR0ZXJzIGF0IHRoZSBvcmlnaW4gb2YgdGhlIHNldFxuICB2YXIgaW5kZXggPSBwYXJtIC0gMTtcbiAgdmFyIGNvbE9yaWdpbiA9IFNFVF9PUklHSU5fQ09MVU1OX0xFVFRFUlMuY2hhckNvZGVBdChpbmRleCk7XG4gIHZhciByb3dPcmlnaW4gPSBTRVRfT1JJR0lOX1JPV19MRVRURVJTLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gIC8vIGNvbEludCBhbmQgcm93SW50IGFyZSB0aGUgbGV0dGVycyB0byBidWlsZCB0byByZXR1cm5cbiAgdmFyIGNvbEludCA9IGNvbE9yaWdpbiArIGNvbHVtbiAtIDE7XG4gIHZhciByb3dJbnQgPSByb3dPcmlnaW4gKyByb3c7XG4gIHZhciByb2xsb3ZlciA9IGZhbHNlO1xuXG4gIGlmIChjb2xJbnQgPiBaKSB7XG4gICAgY29sSW50ID0gY29sSW50IC0gWiArIEEgLSAxO1xuICAgIHJvbGxvdmVyID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChjb2xJbnQgPT09IEkgfHwgKGNvbE9yaWdpbiA8IEkgJiYgY29sSW50ID4gSSkgfHwgKChjb2xJbnQgPiBJIHx8IGNvbE9yaWdpbiA8IEkpICYmIHJvbGxvdmVyKSkge1xuICAgIGNvbEludCsrO1xuICB9XG5cbiAgaWYgKGNvbEludCA9PT0gTyB8fCAoY29sT3JpZ2luIDwgTyAmJiBjb2xJbnQgPiBPKSB8fCAoKGNvbEludCA+IE8gfHwgY29sT3JpZ2luIDwgTykgJiYgcm9sbG92ZXIpKSB7XG4gICAgY29sSW50Kys7XG5cbiAgICBpZiAoY29sSW50ID09PSBJKSB7XG4gICAgICBjb2xJbnQrKztcbiAgICB9XG4gIH1cblxuICBpZiAoY29sSW50ID4gWikge1xuICAgIGNvbEludCA9IGNvbEludCAtIFogKyBBIC0gMTtcbiAgfVxuXG4gIGlmIChyb3dJbnQgPiBWKSB7XG4gICAgcm93SW50ID0gcm93SW50IC0gViArIEEgLSAxO1xuICAgIHJvbGxvdmVyID0gdHJ1ZTtcbiAgfVxuICBlbHNlIHtcbiAgICByb2xsb3ZlciA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKCgocm93SW50ID09PSBJKSB8fCAoKHJvd09yaWdpbiA8IEkpICYmIChyb3dJbnQgPiBJKSkpIHx8ICgoKHJvd0ludCA+IEkpIHx8IChyb3dPcmlnaW4gPCBJKSkgJiYgcm9sbG92ZXIpKSB7XG4gICAgcm93SW50Kys7XG4gIH1cblxuICBpZiAoKChyb3dJbnQgPT09IE8pIHx8ICgocm93T3JpZ2luIDwgTykgJiYgKHJvd0ludCA+IE8pKSkgfHwgKCgocm93SW50ID4gTykgfHwgKHJvd09yaWdpbiA8IE8pKSAmJiByb2xsb3ZlcikpIHtcbiAgICByb3dJbnQrKztcblxuICAgIGlmIChyb3dJbnQgPT09IEkpIHtcbiAgICAgIHJvd0ludCsrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyb3dJbnQgPiBWKSB7XG4gICAgcm93SW50ID0gcm93SW50IC0gViArIEEgLSAxO1xuICB9XG5cbiAgdmFyIHR3b0xldHRlciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29sSW50KSArIFN0cmluZy5mcm9tQ2hhckNvZGUocm93SW50KTtcbiAgcmV0dXJuIHR3b0xldHRlcjtcbn1cblxuLyoqXG4gKiBEZWNvZGUgdGhlIFVUTSBwYXJhbWV0ZXJzIGZyb20gYSBNR1JTIHN0cmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ncnNTdHJpbmcgYW4gVVBQRVJDQVNFIGNvb3JkaW5hdGUgc3RyaW5nIGlzIGV4cGVjdGVkLlxuICogQHJldHVybiB7b2JqZWN0fSBBbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGVhc3RpbmcsIG5vcnRoaW5nLCB6b25lTGV0dGVyLFxuICogICAgIHpvbmVOdW1iZXIgYW5kIGFjY3VyYWN5IChpbiBtZXRlcnMpIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZShtZ3JzU3RyaW5nKSB7XG5cbiAgaWYgKG1ncnNTdHJpbmcgJiYgbWdyc1N0cmluZy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyAoXCJNR1JTUG9pbnQgY292ZXJ0aW5nIGZyb20gbm90aGluZ1wiKTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBtZ3JzU3RyaW5nLmxlbmd0aDtcblxuICB2YXIgaHVuSyA9IG51bGw7XG4gIHZhciBzYiA9IFwiXCI7XG4gIHZhciB0ZXN0Q2hhcjtcbiAgdmFyIGkgPSAwO1xuXG4gIC8vIGdldCBab25lIG51bWJlclxuICB3aGlsZSAoISgvW0EtWl0vKS50ZXN0KHRlc3RDaGFyID0gbWdyc1N0cmluZy5jaGFyQXQoaSkpKSB7XG4gICAgaWYgKGkgPj0gMikge1xuICAgICAgdGhyb3cgKFwiTUdSU1BvaW50IGJhZCBjb252ZXJzaW9uIGZyb206IFwiICsgbWdyc1N0cmluZyk7XG4gICAgfVxuICAgIHNiICs9IHRlc3RDaGFyO1xuICAgIGkrKztcbiAgfVxuXG4gIHZhciB6b25lTnVtYmVyID0gcGFyc2VJbnQoc2IsIDEwKTtcblxuICBpZiAoaSA9PT0gMCB8fCBpICsgMyA+IGxlbmd0aCkge1xuICAgIC8vIEEgZ29vZCBNR1JTIHN0cmluZyBoYXMgdG8gYmUgNC01IGRpZ2l0cyBsb25nLFxuICAgIC8vICMjQUFBLyNBQUEgYXQgbGVhc3QuXG4gICAgdGhyb3cgKFwiTUdSU1BvaW50IGJhZCBjb252ZXJzaW9uIGZyb206IFwiICsgbWdyc1N0cmluZyk7XG4gIH1cblxuICB2YXIgem9uZUxldHRlciA9IG1ncnNTdHJpbmcuY2hhckF0KGkrKyk7XG5cbiAgLy8gU2hvdWxkIHdlIGNoZWNrIHRoZSB6b25lIGxldHRlciBoZXJlPyBXaHkgbm90LlxuICBpZiAoem9uZUxldHRlciA8PSAnQScgfHwgem9uZUxldHRlciA9PT0gJ0InIHx8IHpvbmVMZXR0ZXIgPT09ICdZJyB8fCB6b25lTGV0dGVyID49ICdaJyB8fCB6b25lTGV0dGVyID09PSAnSScgfHwgem9uZUxldHRlciA9PT0gJ08nKSB7XG4gICAgdGhyb3cgKFwiTUdSU1BvaW50IHpvbmUgbGV0dGVyIFwiICsgem9uZUxldHRlciArIFwiIG5vdCBoYW5kbGVkOiBcIiArIG1ncnNTdHJpbmcpO1xuICB9XG5cbiAgaHVuSyA9IG1ncnNTdHJpbmcuc3Vic3RyaW5nKGksIGkgKz0gMik7XG5cbiAgdmFyIHNldCA9IGdldDEwMGtTZXRGb3Jab25lKHpvbmVOdW1iZXIpO1xuXG4gIHZhciBlYXN0MTAwayA9IGdldEVhc3RpbmdGcm9tQ2hhcihodW5LLmNoYXJBdCgwKSwgc2V0KTtcbiAgdmFyIG5vcnRoMTAwayA9IGdldE5vcnRoaW5nRnJvbUNoYXIoaHVuSy5jaGFyQXQoMSksIHNldCk7XG5cbiAgLy8gV2UgaGF2ZSBhIGJ1ZyB3aGVyZSB0aGUgbm9ydGhpbmcgbWF5IGJlIDIwMDAwMDAgdG9vIGxvdy5cbiAgLy8gSG93XG4gIC8vIGRvIHdlIGtub3cgd2hlbiB0byByb2xsIG92ZXI/XG5cbiAgd2hpbGUgKG5vcnRoMTAwayA8IGdldE1pbk5vcnRoaW5nKHpvbmVMZXR0ZXIpKSB7XG4gICAgbm9ydGgxMDBrICs9IDIwMDAwMDA7XG4gIH1cblxuICAvLyBjYWxjdWxhdGUgdGhlIGNoYXIgaW5kZXggZm9yIGVhc3Rpbmcvbm9ydGhpbmcgc2VwYXJhdG9yXG4gIHZhciByZW1haW5kZXIgPSBsZW5ndGggLSBpO1xuXG4gIGlmIChyZW1haW5kZXIgJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgKFwiTUdSU1BvaW50IGhhcyB0byBoYXZlIGFuIGV2ZW4gbnVtYmVyIFxcbm9mIGRpZ2l0cyBhZnRlciB0aGUgem9uZSBsZXR0ZXIgYW5kIHR3byAxMDBrbSBsZXR0ZXJzIC0gZnJvbnQgXFxuaGFsZiBmb3IgZWFzdGluZyBtZXRlcnMsIHNlY29uZCBoYWxmIGZvciBcXG5ub3J0aGluZyBtZXRlcnNcIiArIG1ncnNTdHJpbmcpO1xuICB9XG5cbiAgdmFyIHNlcCA9IHJlbWFpbmRlciAvIDI7XG5cbiAgdmFyIHNlcEVhc3RpbmcgPSAwLjA7XG4gIHZhciBzZXBOb3J0aGluZyA9IDAuMDtcbiAgdmFyIGFjY3VyYWN5Qm9udXMsIHNlcEVhc3RpbmdTdHJpbmcsIHNlcE5vcnRoaW5nU3RyaW5nLCBlYXN0aW5nLCBub3J0aGluZztcbiAgaWYgKHNlcCA+IDApIHtcbiAgICBhY2N1cmFjeUJvbnVzID0gMTAwMDAwLjAgLyBNYXRoLnBvdygxMCwgc2VwKTtcbiAgICBzZXBFYXN0aW5nU3RyaW5nID0gbWdyc1N0cmluZy5zdWJzdHJpbmcoaSwgaSArIHNlcCk7XG4gICAgc2VwRWFzdGluZyA9IHBhcnNlRmxvYXQoc2VwRWFzdGluZ1N0cmluZykgKiBhY2N1cmFjeUJvbnVzO1xuICAgIHNlcE5vcnRoaW5nU3RyaW5nID0gbWdyc1N0cmluZy5zdWJzdHJpbmcoaSArIHNlcCk7XG4gICAgc2VwTm9ydGhpbmcgPSBwYXJzZUZsb2F0KHNlcE5vcnRoaW5nU3RyaW5nKSAqIGFjY3VyYWN5Qm9udXM7XG4gIH1cblxuICBlYXN0aW5nID0gc2VwRWFzdGluZyArIGVhc3QxMDBrO1xuICBub3J0aGluZyA9IHNlcE5vcnRoaW5nICsgbm9ydGgxMDBrO1xuXG4gIHJldHVybiB7XG4gICAgZWFzdGluZzogZWFzdGluZyxcbiAgICBub3J0aGluZzogbm9ydGhpbmcsXG4gICAgem9uZUxldHRlcjogem9uZUxldHRlcixcbiAgICB6b25lTnVtYmVyOiB6b25lTnVtYmVyLFxuICAgIGFjY3VyYWN5OiBhY2N1cmFjeUJvbnVzXG4gIH07XG59XG5cbi8qKlxuICogR2l2ZW4gdGhlIGZpcnN0IGxldHRlciBmcm9tIGEgdHdvLWxldHRlciBNR1JTIDEwMGsgem9uZSwgYW5kIGdpdmVuIHRoZVxuICogTUdSUyB0YWJsZSBzZXQgZm9yIHRoZSB6b25lIG51bWJlciwgZmlndXJlIG91dCB0aGUgZWFzdGluZyB2YWx1ZSB0aGF0XG4gKiBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIG90aGVyLCBzZWNvbmRhcnkgZWFzdGluZyB2YWx1ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtjaGFyfSBlIFRoZSBmaXJzdCBsZXR0ZXIgZnJvbSBhIHR3by1sZXR0ZXIgTUdSUyAxMDDCtGsgem9uZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZXQgVGhlIE1HUlMgdGFibGUgc2V0IGZvciB0aGUgem9uZSBudW1iZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBlYXN0aW5nIHZhbHVlIGZvciB0aGUgZ2l2ZW4gbGV0dGVyIGFuZCBzZXQuXG4gKi9cbmZ1bmN0aW9uIGdldEVhc3RpbmdGcm9tQ2hhcihlLCBzZXQpIHtcbiAgLy8gY29sT3JpZ2luIGlzIHRoZSBsZXR0ZXIgYXQgdGhlIG9yaWdpbiBvZiB0aGUgc2V0IGZvciB0aGVcbiAgLy8gY29sdW1uXG4gIHZhciBjdXJDb2wgPSBTRVRfT1JJR0lOX0NPTFVNTl9MRVRURVJTLmNoYXJDb2RlQXQoc2V0IC0gMSk7XG4gIHZhciBlYXN0aW5nVmFsdWUgPSAxMDAwMDAuMDtcbiAgdmFyIHJld2luZE1hcmtlciA9IGZhbHNlO1xuXG4gIHdoaWxlIChjdXJDb2wgIT09IGUuY2hhckNvZGVBdCgwKSkge1xuICAgIGN1ckNvbCsrO1xuICAgIGlmIChjdXJDb2wgPT09IEkpIHtcbiAgICAgIGN1ckNvbCsrO1xuICAgIH1cbiAgICBpZiAoY3VyQ29sID09PSBPKSB7XG4gICAgICBjdXJDb2wrKztcbiAgICB9XG4gICAgaWYgKGN1ckNvbCA+IFopIHtcbiAgICAgIGlmIChyZXdpbmRNYXJrZXIpIHtcbiAgICAgICAgdGhyb3cgKFwiQmFkIGNoYXJhY3RlcjogXCIgKyBlKTtcbiAgICAgIH1cbiAgICAgIGN1ckNvbCA9IEE7XG4gICAgICByZXdpbmRNYXJrZXIgPSB0cnVlO1xuICAgIH1cbiAgICBlYXN0aW5nVmFsdWUgKz0gMTAwMDAwLjA7XG4gIH1cblxuICByZXR1cm4gZWFzdGluZ1ZhbHVlO1xufVxuXG4vKipcbiAqIEdpdmVuIHRoZSBzZWNvbmQgbGV0dGVyIGZyb20gYSB0d28tbGV0dGVyIE1HUlMgMTAwayB6b25lLCBhbmQgZ2l2ZW4gdGhlXG4gKiBNR1JTIHRhYmxlIHNldCBmb3IgdGhlIHpvbmUgbnVtYmVyLCBmaWd1cmUgb3V0IHRoZSBub3J0aGluZyB2YWx1ZSB0aGF0XG4gKiBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIG90aGVyLCBzZWNvbmRhcnkgbm9ydGhpbmcgdmFsdWUuIFlvdSBoYXZlIHRvXG4gKiByZW1lbWJlciB0aGF0IE5vcnRoaW5ncyBhcmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBlcXVhdG9yLCBhbmQgdGhlIHZlcnRpY2FsXG4gKiBjeWNsZSBvZiBsZXR0ZXJzIG1lYW4gYSAyMDAwMDAwIGFkZGl0aW9uYWwgbm9ydGhpbmcgbWV0ZXJzLiBUaGlzIGhhcHBlbnNcbiAqIGFwcHJveC4gZXZlcnkgMTggZGVncmVlcyBvZiBsYXRpdHVkZS4gVGhpcyBtZXRob2QgZG9lcyAqTk9UKiBjb3VudCBhbnlcbiAqIGFkZGl0aW9uYWwgbm9ydGhpbmdzLiBZb3UgaGF2ZSB0byBmaWd1cmUgb3V0IGhvdyBtYW55IDIwMDAwMDAgbWV0ZXJzIG5lZWRcbiAqIHRvIGJlIGFkZGVkIGZvciB0aGUgem9uZSBsZXR0ZXIgb2YgdGhlIE1HUlMgY29vcmRpbmF0ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtjaGFyfSBuIFNlY29uZCBsZXR0ZXIgb2YgdGhlIE1HUlMgMTAwayB6b25lXG4gKiBAcGFyYW0ge251bWJlcn0gc2V0IFRoZSBNR1JTIHRhYmxlIHNldCBudW1iZXIsIHdoaWNoIGlzIGRlcGVuZGVudCBvbiB0aGVcbiAqICAgICBVVE0gem9uZSBudW1iZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBub3J0aGluZyB2YWx1ZSBmb3IgdGhlIGdpdmVuIGxldHRlciBhbmQgc2V0LlxuICovXG5mdW5jdGlvbiBnZXROb3J0aGluZ0Zyb21DaGFyKG4sIHNldCkge1xuXG4gIGlmIChuID4gJ1YnKSB7XG4gICAgdGhyb3cgKFwiTUdSU1BvaW50IGdpdmVuIGludmFsaWQgTm9ydGhpbmcgXCIgKyBuKTtcbiAgfVxuXG4gIC8vIHJvd09yaWdpbiBpcyB0aGUgbGV0dGVyIGF0IHRoZSBvcmlnaW4gb2YgdGhlIHNldCBmb3IgdGhlXG4gIC8vIGNvbHVtblxuICB2YXIgY3VyUm93ID0gU0VUX09SSUdJTl9ST1dfTEVUVEVSUy5jaGFyQ29kZUF0KHNldCAtIDEpO1xuICB2YXIgbm9ydGhpbmdWYWx1ZSA9IDAuMDtcbiAgdmFyIHJld2luZE1hcmtlciA9IGZhbHNlO1xuXG4gIHdoaWxlIChjdXJSb3cgIT09IG4uY2hhckNvZGVBdCgwKSkge1xuICAgIGN1clJvdysrO1xuICAgIGlmIChjdXJSb3cgPT09IEkpIHtcbiAgICAgIGN1clJvdysrO1xuICAgIH1cbiAgICBpZiAoY3VyUm93ID09PSBPKSB7XG4gICAgICBjdXJSb3crKztcbiAgICB9XG4gICAgLy8gZml4aW5nIGEgYnVnIG1ha2luZyB3aG9sZSBhcHBsaWNhdGlvbiBoYW5nIGluIHRoaXMgbG9vcFxuICAgIC8vIHdoZW4gJ24nIGlzIGEgd3JvbmcgY2hhcmFjdGVyXG4gICAgaWYgKGN1clJvdyA+IFYpIHtcbiAgICAgIGlmIChyZXdpbmRNYXJrZXIpIHsgLy8gbWFraW5nIHN1cmUgdGhhdCB0aGlzIGxvb3AgZW5kc1xuICAgICAgICB0aHJvdyAoXCJCYWQgY2hhcmFjdGVyOiBcIiArIG4pO1xuICAgICAgfVxuICAgICAgY3VyUm93ID0gQTtcbiAgICAgIHJld2luZE1hcmtlciA9IHRydWU7XG4gICAgfVxuICAgIG5vcnRoaW5nVmFsdWUgKz0gMTAwMDAwLjA7XG4gIH1cblxuICByZXR1cm4gbm9ydGhpbmdWYWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gZ2V0TWluTm9ydGhpbmcgcmV0dXJucyB0aGUgbWluaW11bSBub3J0aGluZyB2YWx1ZSBvZiBhIE1HUlNcbiAqIHpvbmUuXG4gKlxuICogUG9ydGVkIGZyb20gR2VvdHJhbnMnIGMgTGF0dGl0dWRlX0JhbmRfVmFsdWUgc3RydWN0dXJlIHRhYmxlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2NoYXJ9IHpvbmVMZXR0ZXIgVGhlIE1HUlMgem9uZSB0byBnZXQgdGhlIG1pbiBub3J0aGluZyBmb3IuXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldE1pbk5vcnRoaW5nKHpvbmVMZXR0ZXIpIHtcbiAgdmFyIG5vcnRoaW5nO1xuICBzd2l0Y2ggKHpvbmVMZXR0ZXIpIHtcbiAgY2FzZSAnQyc6XG4gICAgbm9ydGhpbmcgPSAxMTAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ0QnOlxuICAgIG5vcnRoaW5nID0gMjAwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdFJzpcbiAgICBub3J0aGluZyA9IDI4MDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnRic6XG4gICAgbm9ydGhpbmcgPSAzNzAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ0cnOlxuICAgIG5vcnRoaW5nID0gNDYwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdIJzpcbiAgICBub3J0aGluZyA9IDU1MDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnSic6XG4gICAgbm9ydGhpbmcgPSA2NDAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ0snOlxuICAgIG5vcnRoaW5nID0gNzMwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdMJzpcbiAgICBub3J0aGluZyA9IDgyMDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnTSc6XG4gICAgbm9ydGhpbmcgPSA5MTAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ04nOlxuICAgIG5vcnRoaW5nID0gMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdQJzpcbiAgICBub3J0aGluZyA9IDgwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdRJzpcbiAgICBub3J0aGluZyA9IDE3MDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnUic6XG4gICAgbm9ydGhpbmcgPSAyNjAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ1MnOlxuICAgIG5vcnRoaW5nID0gMzUwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdUJzpcbiAgICBub3J0aGluZyA9IDQ0MDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnVSc6XG4gICAgbm9ydGhpbmcgPSA1MzAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ1YnOlxuICAgIG5vcnRoaW5nID0gNjIwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdXJzpcbiAgICBub3J0aGluZyA9IDcwMDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnWCc6XG4gICAgbm9ydGhpbmcgPSA3OTAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgbm9ydGhpbmcgPSAtMS4wO1xuICB9XG4gIGlmIChub3J0aGluZyA+PSAwLjApIHtcbiAgICByZXR1cm4gbm9ydGhpbmc7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgKFwiSW52YWxpZCB6b25lIGxldHRlcjogXCIgKyB6b25lTGV0dGVyKTtcbiAgfVxuXG59XG4iLCJpbXBvcnQge3RvUG9pbnQsIGZvcndhcmR9IGZyb20gJ21ncnMnO1xuXG5mdW5jdGlvbiBQb2ludCh4LCB5LCB6KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQb2ludCkpIHtcbiAgICByZXR1cm4gbmV3IFBvaW50KHgsIHksIHopO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgdGhpcy54ID0geFswXTtcbiAgICB0aGlzLnkgPSB4WzFdO1xuICAgIHRoaXMueiA9IHhbMl0gfHwgMC4wO1xuICB9IGVsc2UgaWYodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgdGhpcy54ID0geC54O1xuICAgIHRoaXMueSA9IHgueTtcbiAgICB0aGlzLnogPSB4LnogfHwgMC4wO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgY29vcmRzID0geC5zcGxpdCgnLCcpO1xuICAgIHRoaXMueCA9IHBhcnNlRmxvYXQoY29vcmRzWzBdLCAxMCk7XG4gICAgdGhpcy55ID0gcGFyc2VGbG9hdChjb29yZHNbMV0sIDEwKTtcbiAgICB0aGlzLnogPSBwYXJzZUZsb2F0KGNvb3Jkc1syXSwgMTApIHx8IDAuMDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gICAgdGhpcy56ID0geiB8fCAwLjA7XG4gIH1cbiAgY29uc29sZS53YXJuKCdwcm9qNC5Qb2ludCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiAzLCB1c2UgcHJvajQudG9Qb2ludCcpO1xufVxuXG5Qb2ludC5mcm9tTUdSUyA9IGZ1bmN0aW9uKG1ncnNTdHIpIHtcbiAgcmV0dXJuIG5ldyBQb2ludCh0b1BvaW50KG1ncnNTdHIpKTtcbn07XG5Qb2ludC5wcm90b3R5cGUudG9NR1JTID0gZnVuY3Rpb24oYWNjdXJhY3kpIHtcbiAgcmV0dXJuIGZvcndhcmQoW3RoaXMueCwgdGhpcy55XSwgYWNjdXJhY3kpO1xufTtcbmV4cG9ydCBkZWZhdWx0IFBvaW50O1xuIiwidmFyIEMwMCA9IDE7XG52YXIgQzAyID0gMC4yNTtcbnZhciBDMDQgPSAwLjA0Njg3NTtcbnZhciBDMDYgPSAwLjAxOTUzMTI1O1xudmFyIEMwOCA9IDAuMDEwNjgxMTUyMzQzNzU7XG52YXIgQzIyID0gMC43NTtcbnZhciBDNDQgPSAwLjQ2ODc1O1xudmFyIEM0NiA9IDAuMDEzMDIwODMzMzMzMzMzMzMzMzM7XG52YXIgQzQ4ID0gMC4wMDcxMjA3NjgyMjkxNjY2NjY2NjtcbnZhciBDNjYgPSAwLjM2NDU4MzMzMzMzMzMzMzMzMzMzO1xudmFyIEM2OCA9IDAuMDA1Njk2NjE0NTgzMzMzMzMzMzM7XG52YXIgQzg4ID0gMC4zMDc2MTcxODc1O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlcykge1xuICB2YXIgZW4gPSBbXTtcbiAgZW5bMF0gPSBDMDAgLSBlcyAqIChDMDIgKyBlcyAqIChDMDQgKyBlcyAqIChDMDYgKyBlcyAqIEMwOCkpKTtcbiAgZW5bMV0gPSBlcyAqIChDMjIgLSBlcyAqIChDMDQgKyBlcyAqIChDMDYgKyBlcyAqIEMwOCkpKTtcbiAgdmFyIHQgPSBlcyAqIGVzO1xuICBlblsyXSA9IHQgKiAoQzQ0IC0gZXMgKiAoQzQ2ICsgZXMgKiBDNDgpKTtcbiAgdCAqPSBlcztcbiAgZW5bM10gPSB0ICogKEM2NiAtIGVzICogQzY4KTtcbiAgZW5bNF0gPSB0ICogZXMgKiBDODg7XG4gIHJldHVybiBlbjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwaGksIHNwaGksIGNwaGksIGVuKSB7XG4gIGNwaGkgKj0gc3BoaTtcbiAgc3BoaSAqPSBzcGhpO1xuICByZXR1cm4gKGVuWzBdICogcGhpIC0gY3BoaSAqIChlblsxXSArIHNwaGkgKiAoZW5bMl0gKyBzcGhpICogKGVuWzNdICsgc3BoaSAqIGVuWzRdKSkpKTtcbn0iLCJpbXBvcnQgcGpfbWxmbiBmcm9tIFwiLi9wal9tbGZuXCI7XG5pbXBvcnQge0VQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxudmFyIE1BWF9JVEVSID0gMjA7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFyZywgZXMsIGVuKSB7XG4gIHZhciBrID0gMSAvICgxIC0gZXMpO1xuICB2YXIgcGhpID0gYXJnO1xuICBmb3IgKHZhciBpID0gTUFYX0lURVI7IGk7IC0taSkgeyAvKiByYXJlbHkgZ29lcyBvdmVyIDIgaXRlcmF0aW9ucyAqL1xuICAgIHZhciBzID0gTWF0aC5zaW4ocGhpKTtcbiAgICB2YXIgdCA9IDEgLSBlcyAqIHMgKiBzO1xuICAgIC8vdCA9IHRoaXMucGpfbWxmbihwaGksIHMsIE1hdGguY29zKHBoaSksIGVuKSAtIGFyZztcbiAgICAvL3BoaSAtPSB0ICogKHQgKiBNYXRoLnNxcnQodCkpICogaztcbiAgICB0ID0gKHBqX21sZm4ocGhpLCBzLCBNYXRoLmNvcyhwaGkpLCBlbikgLSBhcmcpICogKHQgKiBNYXRoLnNxcnQodCkpICogaztcbiAgICBwaGkgLT0gdDtcbiAgICBpZiAoTWF0aC5hYnModCkgPCBFUFNMTikge1xuICAgICAgcmV0dXJuIHBoaTtcbiAgICB9XG4gIH1cbiAgLy8uLnJlcG9ydEVycm9yKFwiY2Fzczpwal9pbnZfbWxmbjogQ29udmVyZ2VuY2UgZXJyb3JcIik7XG4gIHJldHVybiBwaGk7XG59XG4iLCIvLyBIZWF2aWx5IGJhc2VkIG9uIHRoaXMgdG1lcmMgcHJvamVjdGlvbiBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21ibG9jaC9tYXBzaGFwZXItcHJvai9ibG9iL21hc3Rlci9zcmMvcHJvamVjdGlvbnMvdG1lcmMuanNcblxuaW1wb3J0IHBqX2VuZm4gZnJvbSAnLi4vY29tbW9uL3BqX2VuZm4nO1xuaW1wb3J0IHBqX21sZm4gZnJvbSAnLi4vY29tbW9uL3BqX21sZm4nO1xuaW1wb3J0IHBqX2ludl9tbGZuIGZyb20gJy4uL2NvbW1vbi9wal9pbnZfbWxmbic7XG5pbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5cbmltcG9ydCB7RVBTTE4sIEhBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuaW1wb3J0IHNpZ24gZnJvbSAnLi4vY29tbW9uL3NpZ24nO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdGhpcy54MCA9IHRoaXMueDAgIT09IHVuZGVmaW5lZCA/IHRoaXMueDAgOiAwO1xuICB0aGlzLnkwID0gdGhpcy55MCAhPT0gdW5kZWZpbmVkID8gdGhpcy55MCA6IDA7XG4gIHRoaXMubG9uZzAgPSB0aGlzLmxvbmcwICE9PSB1bmRlZmluZWQgPyB0aGlzLmxvbmcwIDogMDtcbiAgdGhpcy5sYXQwID0gdGhpcy5sYXQwICE9PSB1bmRlZmluZWQgPyB0aGlzLmxhdDAgOiAwO1xuXG4gIGlmICh0aGlzLmVzKSB7XG4gICAgdGhpcy5lbiA9IHBqX2VuZm4odGhpcy5lcyk7XG4gICAgdGhpcy5tbDAgPSBwal9tbGZuKHRoaXMubGF0MCwgTWF0aC5zaW4odGhpcy5sYXQwKSwgTWF0aC5jb3ModGhpcy5sYXQwKSwgdGhpcy5lbik7XG4gIH1cbn1cblxuLyoqXG4gICAgVHJhbnN2ZXJzZSBNZXJjYXRvciBGb3J3YXJkICAtIGxvbmcvbGF0IHRvIHgveVxuICAgIGxvbmcvbGF0IGluIHJhZGlhbnNcbiAgKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcblxuICB2YXIgZGVsdGFfbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgdmFyIGNvbjtcbiAgdmFyIHgsIHk7XG4gIHZhciBzaW5fcGhpID0gTWF0aC5zaW4obGF0KTtcbiAgdmFyIGNvc19waGkgPSBNYXRoLmNvcyhsYXQpO1xuXG4gIGlmICghdGhpcy5lcykge1xuICAgIHZhciBiID0gY29zX3BoaSAqIE1hdGguc2luKGRlbHRhX2xvbik7XG5cbiAgICBpZiAoKE1hdGguYWJzKE1hdGguYWJzKGIpIC0gMSkpIDwgRVBTTE4pIHtcbiAgICAgIHJldHVybiAoOTMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHggPSAwLjUgKiB0aGlzLmEgKiB0aGlzLmswICogTWF0aC5sb2coKDEgKyBiKSAvICgxIC0gYikpICsgdGhpcy54MDtcbiAgICAgIHkgPSBjb3NfcGhpICogTWF0aC5jb3MoZGVsdGFfbG9uKSAvIE1hdGguc3FydCgxIC0gTWF0aC5wb3coYiwgMikpO1xuICAgICAgYiA9IE1hdGguYWJzKHkpO1xuXG4gICAgICBpZiAoYiA+PSAxKSB7XG4gICAgICAgIGlmICgoYiAtIDEpID4gRVBTTE4pIHtcbiAgICAgICAgICByZXR1cm4gKDkzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB5ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHkgPSBNYXRoLmFjb3MoeSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXQgPCAwKSB7XG4gICAgICAgIHkgPSAteTtcbiAgICAgIH1cblxuICAgICAgeSA9IHRoaXMuYSAqIHRoaXMuazAgKiAoeSAtIHRoaXMubGF0MCkgKyB0aGlzLnkwO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgYWwgPSBjb3NfcGhpICogZGVsdGFfbG9uO1xuICAgIHZhciBhbHMgPSBNYXRoLnBvdyhhbCwgMik7XG4gICAgdmFyIGMgPSB0aGlzLmVwMiAqIE1hdGgucG93KGNvc19waGksIDIpO1xuICAgIHZhciBjcyA9IE1hdGgucG93KGMsIDIpO1xuICAgIHZhciB0cSA9IE1hdGguYWJzKGNvc19waGkpID4gRVBTTE4gPyBNYXRoLnRhbihsYXQpIDogMDtcbiAgICB2YXIgdCA9IE1hdGgucG93KHRxLCAyKTtcbiAgICB2YXIgdHMgPSBNYXRoLnBvdyh0LCAyKTtcbiAgICBjb24gPSAxIC0gdGhpcy5lcyAqIE1hdGgucG93KHNpbl9waGksIDIpO1xuICAgIGFsID0gYWwgLyBNYXRoLnNxcnQoY29uKTtcbiAgICB2YXIgbWwgPSBwal9tbGZuKGxhdCwgc2luX3BoaSwgY29zX3BoaSwgdGhpcy5lbik7XG5cbiAgICB4ID0gdGhpcy5hICogKHRoaXMuazAgKiBhbCAqICgxICtcbiAgICAgIGFscyAvIDYgKiAoMSAtIHQgKyBjICtcbiAgICAgIGFscyAvIDIwICogKDUgLSAxOCAqIHQgKyB0cyArIDE0ICogYyAtIDU4ICogdCAqIGMgK1xuICAgICAgYWxzIC8gNDIgKiAoNjEgKyAxNzkgKiB0cyAtIHRzICogdCAtIDQ3OSAqIHQpKSkpKSArXG4gICAgICB0aGlzLngwO1xuXG4gICAgeSA9IHRoaXMuYSAqICh0aGlzLmswICogKG1sIC0gdGhpcy5tbDAgK1xuICAgICAgc2luX3BoaSAqIGRlbHRhX2xvbiAqIGFsIC8gMiAqICgxICtcbiAgICAgIGFscyAvIDEyICogKDUgLSB0ICsgOSAqIGMgKyA0ICogY3MgK1xuICAgICAgYWxzIC8gMzAgKiAoNjEgKyB0cyAtIDU4ICogdCArIDI3MCAqIGMgLSAzMzAgKiB0ICogYyArXG4gICAgICBhbHMgLyA1NiAqICgxMzg1ICsgNTQzICogdHMgLSB0cyAqIHQgLSAzMTExICogdCkpKSkpKSArXG4gICAgICB0aGlzLnkwO1xuICB9XG5cbiAgcC54ID0geDtcbiAgcC55ID0geTtcblxuICByZXR1cm4gcDtcbn1cblxuLyoqXG4gICAgVHJhbnN2ZXJzZSBNZXJjYXRvciBJbnZlcnNlICAtICB4L3kgdG8gbG9uZy9sYXRcbiAgKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIGNvbiwgcGhpO1xuICB2YXIgbGF0LCBsb247XG4gIHZhciB4ID0gKHAueCAtIHRoaXMueDApICogKDEgLyB0aGlzLmEpO1xuICB2YXIgeSA9IChwLnkgLSB0aGlzLnkwKSAqICgxIC8gdGhpcy5hKTtcblxuICBpZiAoIXRoaXMuZXMpIHtcbiAgICB2YXIgZiA9IE1hdGguZXhwKHggLyB0aGlzLmswKTtcbiAgICB2YXIgZyA9IDAuNSAqIChmIC0gMSAvIGYpO1xuICAgIHZhciB0ZW1wID0gdGhpcy5sYXQwICsgeSAvIHRoaXMuazA7XG4gICAgdmFyIGggPSBNYXRoLmNvcyh0ZW1wKTtcbiAgICBjb24gPSBNYXRoLnNxcnQoKDEgLSBNYXRoLnBvdyhoLCAyKSkgLyAoMSArIE1hdGgucG93KGcsIDIpKSk7XG4gICAgbGF0ID0gTWF0aC5hc2luKGNvbik7XG5cbiAgICBpZiAoeSA8IDApIHtcbiAgICAgIGxhdCA9IC1sYXQ7XG4gICAgfVxuXG4gICAgaWYgKChnID09PSAwKSAmJiAoaCA9PT0gMCkpIHtcbiAgICAgIGxvbiA9IDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbG9uID0gYWRqdXN0X2xvbihNYXRoLmF0YW4yKGcsIGgpICsgdGhpcy5sb25nMCk7XG4gICAgfVxuICB9XG4gIGVsc2UgeyAvLyBlbGxpcHNvaWRhbCBmb3JtXG4gICAgY29uID0gdGhpcy5tbDAgKyB5IC8gdGhpcy5rMDtcbiAgICBwaGkgPSBwal9pbnZfbWxmbihjb24sIHRoaXMuZXMsIHRoaXMuZW4pO1xuXG4gICAgaWYgKE1hdGguYWJzKHBoaSkgPCBIQUxGX1BJKSB7XG4gICAgICB2YXIgc2luX3BoaSA9IE1hdGguc2luKHBoaSk7XG4gICAgICB2YXIgY29zX3BoaSA9IE1hdGguY29zKHBoaSk7XG4gICAgICB2YXIgdGFuX3BoaSA9IE1hdGguYWJzKGNvc19waGkpID4gRVBTTE4gPyBNYXRoLnRhbihwaGkpIDogMDtcbiAgICAgIHZhciBjID0gdGhpcy5lcDIgKiBNYXRoLnBvdyhjb3NfcGhpLCAyKTtcbiAgICAgIHZhciBjcyA9IE1hdGgucG93KGMsIDIpO1xuICAgICAgdmFyIHQgPSBNYXRoLnBvdyh0YW5fcGhpLCAyKTtcbiAgICAgIHZhciB0cyA9IE1hdGgucG93KHQsIDIpO1xuICAgICAgY29uID0gMSAtIHRoaXMuZXMgKiBNYXRoLnBvdyhzaW5fcGhpLCAyKTtcbiAgICAgIHZhciBkID0geCAqIE1hdGguc3FydChjb24pIC8gdGhpcy5rMDtcbiAgICAgIHZhciBkcyA9IE1hdGgucG93KGQsIDIpO1xuICAgICAgY29uID0gY29uICogdGFuX3BoaTtcblxuICAgICAgbGF0ID0gcGhpIC0gKGNvbiAqIGRzIC8gKDEgLSB0aGlzLmVzKSkgKiAwLjUgKiAoMSAtXG4gICAgICAgIGRzIC8gMTIgKiAoNSArIDMgKiB0IC0gOSAqIGMgKiB0ICsgYyAtIDQgKiBjcyAtXG4gICAgICAgIGRzIC8gMzAgKiAoNjEgKyA5MCAqIHQgLSAyNTIgKiBjICogdCArIDQ1ICogdHMgKyA0NiAqIGMgLVxuICAgICAgICBkcyAvIDU2ICogKDEzODUgKyAzNjMzICogdCArIDQwOTUgKiB0cyArIDE1NzQgKiB0cyAqIHQpKSkpO1xuXG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyAoZCAqICgxIC1cbiAgICAgICAgZHMgLyA2ICogKDEgKyAyICogdCArIGMgLVxuICAgICAgICBkcyAvIDIwICogKDUgKyAyOCAqIHQgKyAyNCAqIHRzICsgOCAqIGMgKiB0ICsgNiAqIGMgLVxuICAgICAgICBkcyAvIDQyICogKDYxICsgNjYyICogdCArIDEzMjAgKiB0cyArIDcyMCAqIHRzICogdCkpKSkgLyBjb3NfcGhpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbGF0ID0gSEFMRl9QSSAqIHNpZ24oeSk7XG4gICAgICBsb24gPSAwO1xuICAgIH1cbiAgfVxuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuXG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiVHJhbnN2ZXJzZV9NZXJjYXRvclwiLCBcIlRyYW5zdmVyc2UgTWVyY2F0b3JcIiwgXCJ0bWVyY1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICB2YXIgciA9IE1hdGguZXhwKHgpO1xuICByID0gKHIgLSAxIC8gcikgLyAyO1xuICByZXR1cm4gcjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgeSA9IE1hdGguYWJzKHkpO1xuICB2YXIgYSA9IE1hdGgubWF4KHgsIHkpO1xuICB2YXIgYiA9IE1hdGgubWluKHgsIHkpIC8gKGEgPyBhIDogMSk7XG5cbiAgcmV0dXJuIGEgKiBNYXRoLnNxcnQoMSArIE1hdGgucG93KGIsIDIpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBwLCBCKSB7XG4gIHZhciBjb3NfMkIgPSAyICogTWF0aC5jb3MoMiAqIEIpO1xuICB2YXIgaSA9IHBwLmxlbmd0aCAtIDE7XG4gIHZhciBoMSA9IHBwW2ldO1xuICB2YXIgaDIgPSAwO1xuICB2YXIgaDtcblxuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBoID0gLWgyICsgY29zXzJCICogaDEgKyBwcFtpXTtcbiAgICBoMiA9IGgxO1xuICAgIGgxID0gaDtcbiAgfVxuXG4gIHJldHVybiAoQiArIGggKiBNYXRoLnNpbigyICogQikpO1xufVxuIiwiaW1wb3J0IHNpbmggZnJvbSAnLi9zaW5oJztcbmltcG9ydCBjb3NoIGZyb20gJy4vY29zaCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBwLCBhcmdfciwgYXJnX2kpIHtcbiAgdmFyIHNpbl9hcmdfciA9IE1hdGguc2luKGFyZ19yKTtcbiAgdmFyIGNvc19hcmdfciA9IE1hdGguY29zKGFyZ19yKTtcbiAgdmFyIHNpbmhfYXJnX2kgPSBzaW5oKGFyZ19pKTtcbiAgdmFyIGNvc2hfYXJnX2kgPSBjb3NoKGFyZ19pKTtcbiAgdmFyIHIgPSAyICogY29zX2FyZ19yICogY29zaF9hcmdfaTtcbiAgdmFyIGkgPSAtMiAqIHNpbl9hcmdfciAqIHNpbmhfYXJnX2k7XG4gIHZhciBqID0gcHAubGVuZ3RoIC0gMTtcbiAgdmFyIGhyID0gcHBbal07XG4gIHZhciBoaTEgPSAwO1xuICB2YXIgaHIxID0gMDtcbiAgdmFyIGhpID0gMDtcbiAgdmFyIGhyMjtcbiAgdmFyIGhpMjtcblxuICB3aGlsZSAoLS1qID49IDApIHtcbiAgICBocjIgPSBocjE7XG4gICAgaGkyID0gaGkxO1xuICAgIGhyMSA9IGhyO1xuICAgIGhpMSA9IGhpO1xuICAgIGhyID0gLWhyMiArIHIgKiBocjEgLSBpICogaGkxICsgcHBbal07XG4gICAgaGkgPSAtaGkyICsgaSAqIGhyMSArIHIgKiBoaTE7XG4gIH1cblxuICByID0gc2luX2FyZ19yICogY29zaF9hcmdfaTtcbiAgaSA9IGNvc19hcmdfciAqIHNpbmhfYXJnX2k7XG5cbiAgcmV0dXJuIFtyICogaHIgLSBpICogaGksIHIgKiBoaSArIGkgKiBocl07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHZhciByID0gTWF0aC5leHAoeCk7XG4gIHIgPSAociArIDEgLyByKSAvIDI7XG4gIHJldHVybiByO1xufSIsIi8vIEhlYXZpbHkgYmFzZWQgb24gdGhpcyBldG1lcmMgcHJvamVjdGlvbiBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21ibG9jaC9tYXBzaGFwZXItcHJvai9ibG9iL21hc3Rlci9zcmMvcHJvamVjdGlvbnMvZXRtZXJjLmpzXG5cbmltcG9ydCBzaW5oIGZyb20gJy4uL2NvbW1vbi9zaW5oJztcbmltcG9ydCBoeXBvdCBmcm9tICcuLi9jb21tb24vaHlwb3QnO1xuaW1wb3J0IGFzaW5oeSBmcm9tICcuLi9jb21tb24vYXNpbmh5JztcbmltcG9ydCBnYXRnIGZyb20gJy4uL2NvbW1vbi9nYXRnJztcbmltcG9ydCBjbGVucyBmcm9tICcuLi9jb21tb24vY2xlbnMnO1xuaW1wb3J0IGNsZW5zX2NtcGx4IGZyb20gJy4uL2NvbW1vbi9jbGVuc19jbXBseCc7XG5pbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICBpZiAodGhpcy5lcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZXMgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5jb3JyZWN0IGVsbGlwdGljYWwgdXNhZ2UnKTtcbiAgfVxuXG4gIHRoaXMueDAgPSB0aGlzLngwICE9PSB1bmRlZmluZWQgPyB0aGlzLngwIDogMDtcbiAgdGhpcy55MCA9IHRoaXMueTAgIT09IHVuZGVmaW5lZCA/IHRoaXMueTAgOiAwO1xuICB0aGlzLmxvbmcwID0gdGhpcy5sb25nMCAhPT0gdW5kZWZpbmVkID8gdGhpcy5sb25nMCA6IDA7XG4gIHRoaXMubGF0MCA9IHRoaXMubGF0MCAhPT0gdW5kZWZpbmVkID8gdGhpcy5sYXQwIDogMDtcblxuICB0aGlzLmNnYiA9IFtdO1xuICB0aGlzLmNiZyA9IFtdO1xuICB0aGlzLnV0ZyA9IFtdO1xuICB0aGlzLmd0dSA9IFtdO1xuXG4gIHZhciBmID0gdGhpcy5lcyAvICgxICsgTWF0aC5zcXJ0KDEgLSB0aGlzLmVzKSk7XG4gIHZhciBuID0gZiAvICgyIC0gZik7XG4gIHZhciBucCA9IG47XG5cbiAgdGhpcy5jZ2JbMF0gPSBuICogKDIgKyBuICogKC0yIC8gMyArIG4gKiAoLTIgKyBuICogKDExNiAvIDQ1ICsgbiAqICgyNiAvIDQ1ICsgbiAqICgtMjg1NCAvIDY3NSApKSkpKSk7XG4gIHRoaXMuY2JnWzBdID0gbiAqICgtMiArIG4gKiAoIDIgLyAzICsgbiAqICggNCAvIDMgKyBuICogKC04MiAvIDQ1ICsgbiAqICgzMiAvIDQ1ICsgbiAqICg0NjQyIC8gNDcyNSkpKSkpKTtcblxuICBucCA9IG5wICogbjtcbiAgdGhpcy5jZ2JbMV0gPSBucCAqICg3IC8gMyArIG4gKiAoLTggLyA1ICsgbiAqICgtMjI3IC8gNDUgKyBuICogKDI3MDQgLyAzMTUgKyBuICogKDIzMjMgLyA5NDUpKSkpKTtcbiAgdGhpcy5jYmdbMV0gPSBucCAqICg1IC8gMyArIG4gKiAoLTE2IC8gMTUgKyBuICogKCAtMTMgLyA5ICsgbiAqICg5MDQgLyAzMTUgKyBuICogKC0xNTIyIC8gOTQ1KSkpKSk7XG5cbiAgbnAgPSBucCAqIG47XG4gIHRoaXMuY2diWzJdID0gbnAgKiAoNTYgLyAxNSArIG4gKiAoLTEzNiAvIDM1ICsgbiAqICgtMTI2MiAvIDEwNSArIG4gKiAoNzM4MTQgLyAyODM1KSkpKTtcbiAgdGhpcy5jYmdbMl0gPSBucCAqICgtMjYgLyAxNSArIG4gKiAoMzQgLyAyMSArIG4gKiAoOCAvIDUgKyBuICogKC0xMjY4NiAvIDI4MzUpKSkpO1xuXG4gIG5wID0gbnAgKiBuO1xuICB0aGlzLmNnYlszXSA9IG5wICogKDQyNzkgLyA2MzAgKyBuICogKC0zMzIgLyAzNSArIG4gKiAoLTM5OTU3MiAvIDE0MTc1KSkpO1xuICB0aGlzLmNiZ1szXSA9IG5wICogKDEyMzcgLyA2MzAgKyBuICogKC0xMiAvIDUgKyBuICogKCAtMjQ4MzIgLyAxNDE3NSkpKTtcblxuICBucCA9IG5wICogbjtcbiAgdGhpcy5jZ2JbNF0gPSBucCAqICg0MTc0IC8gMzE1ICsgbiAqICgtMTQ0ODM4IC8gNjIzNykpO1xuICB0aGlzLmNiZ1s0XSA9IG5wICogKC03MzQgLyAzMTUgKyBuICogKDEwOTU5OCAvIDMxMTg1KSk7XG5cbiAgbnAgPSBucCAqIG47XG4gIHRoaXMuY2diWzVdID0gbnAgKiAoNjAxNjc2IC8gMjIyNzUpO1xuICB0aGlzLmNiZ1s1XSA9IG5wICogKDQ0NDMzNyAvIDE1NTkyNSk7XG5cbiAgbnAgPSBNYXRoLnBvdyhuLCAyKTtcbiAgdGhpcy5RbiA9IHRoaXMuazAgLyAoMSArIG4pICogKDEgKyBucCAqICgxIC8gNCArIG5wICogKDEgLyA2NCArIG5wIC8gMjU2KSkpO1xuXG4gIHRoaXMudXRnWzBdID0gbiAqICgtMC41ICsgbiAqICggMiAvIDMgKyBuICogKC0zNyAvIDk2ICsgbiAqICggMSAvIDM2MCArIG4gKiAoODEgLyA1MTIgKyBuICogKC05NjE5OSAvIDYwNDgwMCkpKSkpKTtcbiAgdGhpcy5ndHVbMF0gPSBuICogKDAuNSArIG4gKiAoLTIgLyAzICsgbiAqICg1IC8gMTYgKyBuICogKDQxIC8gMTgwICsgbiAqICgtMTI3IC8gMjg4ICsgbiAqICg3ODkxIC8gMzc4MDApKSkpKSk7XG5cbiAgdGhpcy51dGdbMV0gPSBucCAqICgtMSAvIDQ4ICsgbiAqICgtMSAvIDE1ICsgbiAqICg0MzcgLyAxNDQwICsgbiAqICgtNDYgLyAxMDUgKyBuICogKDExMTg3MTEgLyAzODcwNzIwKSkpKSk7XG4gIHRoaXMuZ3R1WzFdID0gbnAgKiAoMTMgLyA0OCArIG4gKiAoLTMgLyA1ICsgbiAqICg1NTcgLyAxNDQwICsgbiAqICgyODEgLyA2MzAgKyBuICogKC0xOTgzNDMzIC8gMTkzNTM2MCkpKSkpO1xuXG4gIG5wID0gbnAgKiBuO1xuICB0aGlzLnV0Z1syXSA9IG5wICogKC0xNyAvIDQ4MCArIG4gKiAoMzcgLyA4NDAgKyBuICogKDIwOSAvIDQ0ODAgKyBuICogKC01NTY5IC8gOTA3MjAgKSkpKTtcbiAgdGhpcy5ndHVbMl0gPSBucCAqICg2MSAvIDI0MCArIG4gKiAoLTEwMyAvIDE0MCArIG4gKiAoMTUwNjEgLyAyNjg4MCArIG4gKiAoMTY3NjAzIC8gMTgxNDQwKSkpKTtcblxuICBucCA9IG5wICogbjtcbiAgdGhpcy51dGdbM10gPSBucCAqICgtNDM5NyAvIDE2MTI4MCArIG4gKiAoMTEgLyA1MDQgKyBuICogKDgzMDI1MSAvIDcyNTc2MDApKSk7XG4gIHRoaXMuZ3R1WzNdID0gbnAgKiAoNDk1NjEgLyAxNjEyODAgKyBuICogKC0xNzkgLyAxNjggKyBuICogKDY2MDE2NjEgLyA3MjU3NjAwKSkpO1xuXG4gIG5wID0gbnAgKiBuO1xuICB0aGlzLnV0Z1s0XSA9IG5wICogKC00NTgzIC8gMTYxMjgwICsgbiAqICgxMDg4NDcgLyAzOTkxNjgwKSk7XG4gIHRoaXMuZ3R1WzRdID0gbnAgKiAoMzQ3MjkgLyA4MDY0MCArIG4gKiAoLTM0MTg4ODkgLyAxOTk1ODQwKSk7XG5cbiAgbnAgPSBucCAqIG47XG4gIHRoaXMudXRnWzVdID0gbnAgKiAoLTIwNjQ4NjkzIC8gNjM4NjY4ODAwKTtcbiAgdGhpcy5ndHVbNV0gPSBucCAqICgyMTIzNzg5NDEgLyAzMTkzMzQ0MDApO1xuXG4gIHZhciBaID0gZ2F0Zyh0aGlzLmNiZywgdGhpcy5sYXQwKTtcbiAgdGhpcy5aYiA9IC10aGlzLlFuICogKFogKyBjbGVucyh0aGlzLmd0dSwgMiAqIFopKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgQ2UgPSBhZGp1c3RfbG9uKHAueCAtIHRoaXMubG9uZzApO1xuICB2YXIgQ24gPSBwLnk7XG5cbiAgQ24gPSBnYXRnKHRoaXMuY2JnLCBDbik7XG4gIHZhciBzaW5fQ24gPSBNYXRoLnNpbihDbik7XG4gIHZhciBjb3NfQ24gPSBNYXRoLmNvcyhDbik7XG4gIHZhciBzaW5fQ2UgPSBNYXRoLnNpbihDZSk7XG4gIHZhciBjb3NfQ2UgPSBNYXRoLmNvcyhDZSk7XG5cbiAgQ24gPSBNYXRoLmF0YW4yKHNpbl9DbiwgY29zX0NlICogY29zX0NuKTtcbiAgQ2UgPSBNYXRoLmF0YW4yKHNpbl9DZSAqIGNvc19DbiwgaHlwb3Qoc2luX0NuLCBjb3NfQ24gKiBjb3NfQ2UpKTtcbiAgQ2UgPSBhc2luaHkoTWF0aC50YW4oQ2UpKTtcblxuICB2YXIgdG1wID0gY2xlbnNfY21wbHgodGhpcy5ndHUsIDIgKiBDbiwgMiAqIENlKTtcblxuICBDbiA9IENuICsgdG1wWzBdO1xuICBDZSA9IENlICsgdG1wWzFdO1xuXG4gIHZhciB4O1xuICB2YXIgeTtcblxuICBpZiAoTWF0aC5hYnMoQ2UpIDw9IDIuNjIzMzk1MTYyNzc4KSB7XG4gICAgeCA9IHRoaXMuYSAqICh0aGlzLlFuICogQ2UpICsgdGhpcy54MDtcbiAgICB5ID0gdGhpcy5hICogKHRoaXMuUW4gKiBDbiArIHRoaXMuWmIpICsgdGhpcy55MDtcbiAgfVxuICBlbHNlIHtcbiAgICB4ID0gSW5maW5pdHk7XG4gICAgeSA9IEluZmluaXR5O1xuICB9XG5cbiAgcC54ID0geDtcbiAgcC55ID0geTtcblxuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgQ2UgPSAocC54IC0gdGhpcy54MCkgKiAoMSAvIHRoaXMuYSk7XG4gIHZhciBDbiA9IChwLnkgLSB0aGlzLnkwKSAqICgxIC8gdGhpcy5hKTtcblxuICBDbiA9IChDbiAtIHRoaXMuWmIpIC8gdGhpcy5RbjtcbiAgQ2UgPSBDZSAvIHRoaXMuUW47XG5cbiAgdmFyIGxvbjtcbiAgdmFyIGxhdDtcblxuICBpZiAoTWF0aC5hYnMoQ2UpIDw9IDIuNjIzMzk1MTYyNzc4KSB7XG4gICAgdmFyIHRtcCA9IGNsZW5zX2NtcGx4KHRoaXMudXRnLCAyICogQ24sIDIgKiBDZSk7XG5cbiAgICBDbiA9IENuICsgdG1wWzBdO1xuICAgIENlID0gQ2UgKyB0bXBbMV07XG4gICAgQ2UgPSBNYXRoLmF0YW4oc2luaChDZSkpO1xuXG4gICAgdmFyIHNpbl9DbiA9IE1hdGguc2luKENuKTtcbiAgICB2YXIgY29zX0NuID0gTWF0aC5jb3MoQ24pO1xuICAgIHZhciBzaW5fQ2UgPSBNYXRoLnNpbihDZSk7XG4gICAgdmFyIGNvc19DZSA9IE1hdGguY29zKENlKTtcblxuICAgIENuID0gTWF0aC5hdGFuMihzaW5fQ24gKiBjb3NfQ2UsIGh5cG90KHNpbl9DZSwgY29zX0NlICogY29zX0NuKSk7XG4gICAgQ2UgPSBNYXRoLmF0YW4yKHNpbl9DZSwgY29zX0NlICogY29zX0NuKTtcblxuICAgIGxvbiA9IGFkanVzdF9sb24oQ2UgKyB0aGlzLmxvbmcwKTtcbiAgICBsYXQgPSBnYXRnKHRoaXMuY2diLCBDbik7XG4gIH1cbiAgZWxzZSB7XG4gICAgbG9uID0gSW5maW5pdHk7XG4gICAgbGF0ID0gSW5maW5pdHk7XG4gIH1cblxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcblxuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIkV4dGVuZGVkX1RyYW5zdmVyc2VfTWVyY2F0b3JcIiwgXCJFeHRlbmRlZCBUcmFuc3ZlcnNlIE1lcmNhdG9yXCIsIFwiZXRtZXJjXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwcCwgYXJnX3IpIHtcbiAgdmFyIHIgPSAyICogTWF0aC5jb3MoYXJnX3IpO1xuICB2YXIgaSA9IHBwLmxlbmd0aCAtIDE7XG4gIHZhciBocjEgPSBwcFtpXTtcbiAgdmFyIGhyMiA9IDA7XG4gIHZhciBocjtcblxuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBociA9IC1ocjIgKyByICogaHIxICsgcHBbaV07XG4gICAgaHIyID0gaHIxO1xuICAgIGhyMSA9IGhyO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguc2luKGFyZ19yKSAqIGhyO1xufVxuIiwiaW1wb3J0IGh5cG90IGZyb20gJy4vaHlwb3QnO1xuaW1wb3J0IGxvZzFweSBmcm9tICcuL2xvZzFweSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgdmFyIHkgPSBNYXRoLmFicyh4KTtcbiAgeSA9IGxvZzFweSh5ICogKDEgKyB5IC8gKGh5cG90KDEsIHkpICsgMSkpKTtcblxuICByZXR1cm4geCA8IDAgPyAteSA6IHk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHZhciB5ID0gMSArIHg7XG4gIHZhciB6ID0geSAtIDE7XG5cbiAgcmV0dXJuIHogPT09IDAgPyB4IDogeCAqIE1hdGgubG9nKHkpIC8gejtcbn1cbiIsImltcG9ydCBhZGp1c3Rfem9uZSBmcm9tICcuLi9jb21tb24vYWRqdXN0X3pvbmUnO1xuaW1wb3J0IGV0bWVyYyBmcm9tICcuL2V0bWVyYyc7XG5leHBvcnQgdmFyIGRlcGVuZHNPbiA9ICdldG1lcmMnO1xuaW1wb3J0IHtEMlJ9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICB2YXIgem9uZSA9IGFkanVzdF96b25lKHRoaXMuem9uZSwgdGhpcy5sb25nMCk7XG4gIGlmICh6b25lID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdXRtIHpvbmUnKTtcbiAgfVxuICB0aGlzLmxhdDAgPSAwO1xuICB0aGlzLmxvbmcwID0gICgoNiAqIE1hdGguYWJzKHpvbmUpKSAtIDE4MykgKiBEMlI7XG4gIHRoaXMueDAgPSA1MDAwMDA7XG4gIHRoaXMueTAgPSB0aGlzLnV0bVNvdXRoID8gMTAwMDAwMDAgOiAwO1xuICB0aGlzLmswID0gMC45OTk2O1xuXG4gIGV0bWVyYy5pbml0LmFwcGx5KHRoaXMpO1xuICB0aGlzLmZvcndhcmQgPSBldG1lcmMuZm9yd2FyZDtcbiAgdGhpcy5pbnZlcnNlID0gZXRtZXJjLmludmVyc2U7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJVbml2ZXJzYWwgVHJhbnN2ZXJzZSBNZXJjYXRvciBTeXN0ZW1cIiwgXCJ1dG1cIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIG5hbWVzOiBuYW1lcyxcbiAgZGVwZW5kc09uOiBkZXBlbmRzT25cbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuL2FkanVzdF9sb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih6b25lLCBsb24pIHtcbiAgaWYgKHpvbmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHpvbmUgPSBNYXRoLmZsb29yKChhZGp1c3RfbG9uKGxvbikgKyBNYXRoLlBJKSAqIDMwIC8gTWF0aC5QSSkgKyAxO1xuXG4gICAgaWYgKHpvbmUgPCAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKHpvbmUgPiA2MCkge1xuICAgICAgcmV0dXJuIDYwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gem9uZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGVzaW5wLCBleHApIHtcbiAgcmV0dXJuIChNYXRoLnBvdygoMSAtIGVzaW5wKSAvICgxICsgZXNpbnApLCBleHApKTtcbn0iLCJpbXBvcnQgc3JhdCBmcm9tICcuLi9jb21tb24vc3JhdCc7XG52YXIgTUFYX0lURVIgPSAyMDtcbmltcG9ydCB7SEFMRl9QSSwgRk9SVFBJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIHZhciBzcGhpID0gTWF0aC5zaW4odGhpcy5sYXQwKTtcbiAgdmFyIGNwaGkgPSBNYXRoLmNvcyh0aGlzLmxhdDApO1xuICBjcGhpICo9IGNwaGk7XG4gIHRoaXMucmMgPSBNYXRoLnNxcnQoMSAtIHRoaXMuZXMpIC8gKDEgLSB0aGlzLmVzICogc3BoaSAqIHNwaGkpO1xuICB0aGlzLkMgPSBNYXRoLnNxcnQoMSArIHRoaXMuZXMgKiBjcGhpICogY3BoaSAvICgxIC0gdGhpcy5lcykpO1xuICB0aGlzLnBoaWMwID0gTWF0aC5hc2luKHNwaGkgLyB0aGlzLkMpO1xuICB0aGlzLnJhdGV4cCA9IDAuNSAqIHRoaXMuQyAqIHRoaXMuZTtcbiAgdGhpcy5LID0gTWF0aC50YW4oMC41ICogdGhpcy5waGljMCArIEZPUlRQSSkgLyAoTWF0aC5wb3coTWF0aC50YW4oMC41ICogdGhpcy5sYXQwICsgRk9SVFBJKSwgdGhpcy5DKSAqIHNyYXQodGhpcy5lICogc3BoaSwgdGhpcy5yYXRleHApKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuXG4gIHAueSA9IDIgKiBNYXRoLmF0YW4odGhpcy5LICogTWF0aC5wb3coTWF0aC50YW4oMC41ICogbGF0ICsgRk9SVFBJKSwgdGhpcy5DKSAqIHNyYXQodGhpcy5lICogTWF0aC5zaW4obGF0KSwgdGhpcy5yYXRleHApKSAtIEhBTEZfUEk7XG4gIHAueCA9IHRoaXMuQyAqIGxvbjtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIERFTF9UT0wgPSAxZS0xNDtcbiAgdmFyIGxvbiA9IHAueCAvIHRoaXMuQztcbiAgdmFyIGxhdCA9IHAueTtcbiAgdmFyIG51bSA9IE1hdGgucG93KE1hdGgudGFuKDAuNSAqIGxhdCArIEZPUlRQSSkgLyB0aGlzLkssIDEgLyB0aGlzLkMpO1xuICBmb3IgKHZhciBpID0gTUFYX0lURVI7IGkgPiAwOyAtLWkpIHtcbiAgICBsYXQgPSAyICogTWF0aC5hdGFuKG51bSAqIHNyYXQodGhpcy5lICogTWF0aC5zaW4ocC55KSwgLSAwLjUgKiB0aGlzLmUpKSAtIEhBTEZfUEk7XG4gICAgaWYgKE1hdGguYWJzKGxhdCAtIHAueSkgPCBERUxfVE9MKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcC55ID0gbGF0O1xuICB9XG4gIC8qIGNvbnZlcmdlbmNlIGZhaWxlZCAqL1xuICBpZiAoIWkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJnYXVzc1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGdhdXNzIGZyb20gJy4vZ2F1c3MnO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgZ2F1c3MuaW5pdC5hcHBseSh0aGlzKTtcbiAgaWYgKCF0aGlzLnJjKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuc2luYzAgPSBNYXRoLnNpbih0aGlzLnBoaWMwKTtcbiAgdGhpcy5jb3NjMCA9IE1hdGguY29zKHRoaXMucGhpYzApO1xuICB0aGlzLlIyID0gMiAqIHRoaXMucmM7XG4gIGlmICghdGhpcy50aXRsZSkge1xuICAgIHRoaXMudGl0bGUgPSBcIk9ibGlxdWUgU3RlcmVvZ3JhcGhpYyBBbHRlcm5hdGl2ZVwiO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIHNpbmMsIGNvc2MsIGNvc2wsIGs7XG4gIHAueCA9IGFkanVzdF9sb24ocC54IC0gdGhpcy5sb25nMCk7XG4gIGdhdXNzLmZvcndhcmQuYXBwbHkodGhpcywgW3BdKTtcbiAgc2luYyA9IE1hdGguc2luKHAueSk7XG4gIGNvc2MgPSBNYXRoLmNvcyhwLnkpO1xuICBjb3NsID0gTWF0aC5jb3MocC54KTtcbiAgayA9IHRoaXMuazAgKiB0aGlzLlIyIC8gKDEgKyB0aGlzLnNpbmMwICogc2luYyArIHRoaXMuY29zYzAgKiBjb3NjICogY29zbCk7XG4gIHAueCA9IGsgKiBjb3NjICogTWF0aC5zaW4ocC54KTtcbiAgcC55ID0gayAqICh0aGlzLmNvc2MwICogc2luYyAtIHRoaXMuc2luYzAgKiBjb3NjICogY29zbCk7XG4gIHAueCA9IHRoaXMuYSAqIHAueCArIHRoaXMueDA7XG4gIHAueSA9IHRoaXMuYSAqIHAueSArIHRoaXMueTA7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciBzaW5jLCBjb3NjLCBsb24sIGxhdCwgcmhvO1xuICBwLnggPSAocC54IC0gdGhpcy54MCkgLyB0aGlzLmE7XG4gIHAueSA9IChwLnkgLSB0aGlzLnkwKSAvIHRoaXMuYTtcblxuICBwLnggLz0gdGhpcy5rMDtcbiAgcC55IC89IHRoaXMuazA7XG4gIGlmICgocmhvID0gTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSkpKSB7XG4gICAgdmFyIGMgPSAyICogTWF0aC5hdGFuMihyaG8sIHRoaXMuUjIpO1xuICAgIHNpbmMgPSBNYXRoLnNpbihjKTtcbiAgICBjb3NjID0gTWF0aC5jb3MoYyk7XG4gICAgbGF0ID0gTWF0aC5hc2luKGNvc2MgKiB0aGlzLnNpbmMwICsgcC55ICogc2luYyAqIHRoaXMuY29zYzAgLyByaG8pO1xuICAgIGxvbiA9IE1hdGguYXRhbjIocC54ICogc2luYywgcmhvICogdGhpcy5jb3NjMCAqIGNvc2MgLSBwLnkgKiB0aGlzLnNpbmMwICogc2luYyk7XG4gIH1cbiAgZWxzZSB7XG4gICAgbGF0ID0gdGhpcy5waGljMDtcbiAgICBsb24gPSAwO1xuICB9XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIGdhdXNzLmludmVyc2UuYXBwbHkodGhpcywgW3BdKTtcbiAgcC54ID0gYWRqdXN0X2xvbihwLnggKyB0aGlzLmxvbmcwKTtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJTdGVyZW9ncmFwaGljX05vcnRoX1BvbGVcIiwgXCJPYmxpcXVlX1N0ZXJlb2dyYXBoaWNcIiwgXCJQb2xhcl9TdGVyZW9ncmFwaGljXCIsIFwic3RlcmVhXCIsXCJPYmxpcXVlIFN0ZXJlb2dyYXBoaWMgQWx0ZXJuYXRpdmVcIixcIkRvdWJsZV9TdGVyZW9ncmFwaGljXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQge0VQU0xOLCBIQUxGX1BJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuaW1wb3J0IHNpZ24gZnJvbSAnLi4vY29tbW9uL3NpZ24nO1xuaW1wb3J0IG1zZm56IGZyb20gJy4uL2NvbW1vbi9tc2Zueic7XG5pbXBvcnQgdHNmbnogZnJvbSAnLi4vY29tbW9uL3RzZm56JztcbmltcG9ydCBwaGkyeiBmcm9tICcuLi9jb21tb24vcGhpMnonO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gc3Nmbl8ocGhpdCwgc2lucGhpLCBlY2Nlbikge1xuICBzaW5waGkgKj0gZWNjZW47XG4gIHJldHVybiAoTWF0aC50YW4oMC41ICogKEhBTEZfUEkgKyBwaGl0KSkgKiBNYXRoLnBvdygoMSAtIHNpbnBoaSkgLyAoMSArIHNpbnBoaSksIDAuNSAqIGVjY2VuKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICB0aGlzLmNvc2xhdDAgPSBNYXRoLmNvcyh0aGlzLmxhdDApO1xuICB0aGlzLnNpbmxhdDAgPSBNYXRoLnNpbih0aGlzLmxhdDApO1xuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBpZiAodGhpcy5rMCA9PT0gMSAmJiAhaXNOYU4odGhpcy5sYXRfdHMpICYmIE1hdGguYWJzKHRoaXMuY29zbGF0MCkgPD0gRVBTTE4pIHtcbiAgICAgIHRoaXMuazAgPSAwLjUgKiAoMSArIHNpZ24odGhpcy5sYXQwKSAqIE1hdGguc2luKHRoaXMubGF0X3RzKSk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIGlmIChNYXRoLmFicyh0aGlzLmNvc2xhdDApIDw9IEVQU0xOKSB7XG4gICAgICBpZiAodGhpcy5sYXQwID4gMCkge1xuICAgICAgICAvL05vcnRoIHBvbGVcbiAgICAgICAgLy90cmFjZSgnc3RlcmU6bm9ydGggcG9sZScpO1xuICAgICAgICB0aGlzLmNvbiA9IDE7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy9Tb3V0aCBwb2xlXG4gICAgICAgIC8vdHJhY2UoJ3N0ZXJlOnNvdXRoIHBvbGUnKTtcbiAgICAgICAgdGhpcy5jb24gPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jb25zID0gTWF0aC5zcXJ0KE1hdGgucG93KDEgKyB0aGlzLmUsIDEgKyB0aGlzLmUpICogTWF0aC5wb3coMSAtIHRoaXMuZSwgMSAtIHRoaXMuZSkpO1xuICAgIGlmICh0aGlzLmswID09PSAxICYmICFpc05hTih0aGlzLmxhdF90cykgJiYgTWF0aC5hYnModGhpcy5jb3NsYXQwKSA8PSBFUFNMTikge1xuICAgICAgdGhpcy5rMCA9IDAuNSAqIHRoaXMuY29ucyAqIG1zZm56KHRoaXMuZSwgTWF0aC5zaW4odGhpcy5sYXRfdHMpLCBNYXRoLmNvcyh0aGlzLmxhdF90cykpIC8gdHNmbnoodGhpcy5lLCB0aGlzLmNvbiAqIHRoaXMubGF0X3RzLCB0aGlzLmNvbiAqIE1hdGguc2luKHRoaXMubGF0X3RzKSk7XG4gICAgfVxuICAgIHRoaXMubXMxID0gbXNmbnoodGhpcy5lLCB0aGlzLnNpbmxhdDAsIHRoaXMuY29zbGF0MCk7XG4gICAgdGhpcy5YMCA9IDIgKiBNYXRoLmF0YW4odGhpcy5zc2ZuXyh0aGlzLmxhdDAsIHRoaXMuc2lubGF0MCwgdGhpcy5lKSkgLSBIQUxGX1BJO1xuICAgIHRoaXMuY29zWDAgPSBNYXRoLmNvcyh0aGlzLlgwKTtcbiAgICB0aGlzLnNpblgwID0gTWF0aC5zaW4odGhpcy5YMCk7XG4gIH1cbn1cblxuLy8gU3RlcmVvZ3JhcGhpYyBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcbiAgdmFyIHNpbmxhdCA9IE1hdGguc2luKGxhdCk7XG4gIHZhciBjb3NsYXQgPSBNYXRoLmNvcyhsYXQpO1xuICB2YXIgQSwgWCwgc2luWCwgY29zWCwgdHMsIHJoO1xuICB2YXIgZGxvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG5cbiAgaWYgKE1hdGguYWJzKE1hdGguYWJzKGxvbiAtIHRoaXMubG9uZzApIC0gTWF0aC5QSSkgPD0gRVBTTE4gJiYgTWF0aC5hYnMobGF0ICsgdGhpcy5sYXQwKSA8PSBFUFNMTikge1xuICAgIC8vY2FzZSBvZiB0aGUgb3JpZ2luZSBwb2ludFxuICAgIC8vdHJhY2UoJ3N0ZXJlOnRoaXMgaXMgdGhlIG9yaWdpbiBwb2ludCcpO1xuICAgIHAueCA9IE5hTjtcbiAgICBwLnkgPSBOYU47XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgLy90cmFjZSgnc3RlcmU6c3BoZXJlIGNhc2UnKTtcbiAgICBBID0gMiAqIHRoaXMuazAgLyAoMSArIHRoaXMuc2lubGF0MCAqIHNpbmxhdCArIHRoaXMuY29zbGF0MCAqIGNvc2xhdCAqIE1hdGguY29zKGRsb24pKTtcbiAgICBwLnggPSB0aGlzLmEgKiBBICogY29zbGF0ICogTWF0aC5zaW4oZGxvbikgKyB0aGlzLngwO1xuICAgIHAueSA9IHRoaXMuYSAqIEEgKiAodGhpcy5jb3NsYXQwICogc2lubGF0IC0gdGhpcy5zaW5sYXQwICogY29zbGF0ICogTWF0aC5jb3MoZGxvbikpICsgdGhpcy55MDtcbiAgICByZXR1cm4gcDtcbiAgfVxuICBlbHNlIHtcbiAgICBYID0gMiAqIE1hdGguYXRhbih0aGlzLnNzZm5fKGxhdCwgc2lubGF0LCB0aGlzLmUpKSAtIEhBTEZfUEk7XG4gICAgY29zWCA9IE1hdGguY29zKFgpO1xuICAgIHNpblggPSBNYXRoLnNpbihYKTtcbiAgICBpZiAoTWF0aC5hYnModGhpcy5jb3NsYXQwKSA8PSBFUFNMTikge1xuICAgICAgdHMgPSB0c2Zueih0aGlzLmUsIGxhdCAqIHRoaXMuY29uLCB0aGlzLmNvbiAqIHNpbmxhdCk7XG4gICAgICByaCA9IDIgKiB0aGlzLmEgKiB0aGlzLmswICogdHMgLyB0aGlzLmNvbnM7XG4gICAgICBwLnggPSB0aGlzLngwICsgcmggKiBNYXRoLnNpbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgICAgIHAueSA9IHRoaXMueTAgLSB0aGlzLmNvbiAqIHJoICogTWF0aC5jb3MobG9uIC0gdGhpcy5sb25nMCk7XG4gICAgICAvL3RyYWNlKHAudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5zaW5sYXQwKSA8IEVQU0xOKSB7XG4gICAgICAvL0VxXG4gICAgICAvL3RyYWNlKCdzdGVyZTplcXVhdGV1cicpO1xuICAgICAgQSA9IDIgKiB0aGlzLmEgKiB0aGlzLmswIC8gKDEgKyBjb3NYICogTWF0aC5jb3MoZGxvbikpO1xuICAgICAgcC55ID0gQSAqIHNpblg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy9vdGhlciBjYXNlXG4gICAgICAvL3RyYWNlKCdzdGVyZTpub3JtYWwgY2FzZScpO1xuICAgICAgQSA9IDIgKiB0aGlzLmEgKiB0aGlzLmswICogdGhpcy5tczEgLyAodGhpcy5jb3NYMCAqICgxICsgdGhpcy5zaW5YMCAqIHNpblggKyB0aGlzLmNvc1gwICogY29zWCAqIE1hdGguY29zKGRsb24pKSk7XG4gICAgICBwLnkgPSBBICogKHRoaXMuY29zWDAgKiBzaW5YIC0gdGhpcy5zaW5YMCAqIGNvc1ggKiBNYXRoLmNvcyhkbG9uKSkgKyB0aGlzLnkwO1xuICAgIH1cbiAgICBwLnggPSBBICogY29zWCAqIE1hdGguc2luKGRsb24pICsgdGhpcy54MDtcbiAgfVxuICAvL3RyYWNlKHAudG9TdHJpbmcoKSk7XG4gIHJldHVybiBwO1xufVxuXG4vLyogU3RlcmVvZ3JhcGhpYyBpbnZlcnNlIGVxdWF0aW9ucy0tbWFwcGluZyB4LHkgdG8gbGF0L2xvbmdcbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSAtPSB0aGlzLnkwO1xuICB2YXIgbG9uLCBsYXQsIHRzLCBjZSwgQ2hpO1xuICB2YXIgcmggPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgdmFyIGMgPSAyICogTWF0aC5hdGFuKHJoIC8gKDIgKiB0aGlzLmEgKiB0aGlzLmswKSk7XG4gICAgbG9uID0gdGhpcy5sb25nMDtcbiAgICBsYXQgPSB0aGlzLmxhdDA7XG4gICAgaWYgKHJoIDw9IEVQU0xOKSB7XG4gICAgICBwLnggPSBsb247XG4gICAgICBwLnkgPSBsYXQ7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgbGF0ID0gTWF0aC5hc2luKE1hdGguY29zKGMpICogdGhpcy5zaW5sYXQwICsgcC55ICogTWF0aC5zaW4oYykgKiB0aGlzLmNvc2xhdDAgLyByaCk7XG4gICAgaWYgKE1hdGguYWJzKHRoaXMuY29zbGF0MCkgPCBFUFNMTikge1xuICAgICAgaWYgKHRoaXMubGF0MCA+IDApIHtcbiAgICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLngsIC0gMSAqIHAueSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXRhbjIocC54LCBwLnkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBNYXRoLmF0YW4yKHAueCAqIE1hdGguc2luKGMpLCByaCAqIHRoaXMuY29zbGF0MCAqIE1hdGguY29zKGMpIC0gcC55ICogdGhpcy5zaW5sYXQwICogTWF0aC5zaW4oYykpKTtcbiAgICB9XG4gICAgcC54ID0gbG9uO1xuICAgIHAueSA9IGxhdDtcbiAgICByZXR1cm4gcDtcbiAgfVxuICBlbHNlIHtcbiAgICBpZiAoTWF0aC5hYnModGhpcy5jb3NsYXQwKSA8PSBFUFNMTikge1xuICAgICAgaWYgKHJoIDw9IEVQU0xOKSB7XG4gICAgICAgIGxhdCA9IHRoaXMubGF0MDtcbiAgICAgICAgbG9uID0gdGhpcy5sb25nMDtcbiAgICAgICAgcC54ID0gbG9uO1xuICAgICAgICBwLnkgPSBsYXQ7XG4gICAgICAgIC8vdHJhY2UocC50b1N0cmluZygpKTtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgICB9XG4gICAgICBwLnggKj0gdGhpcy5jb247XG4gICAgICBwLnkgKj0gdGhpcy5jb247XG4gICAgICB0cyA9IHJoICogdGhpcy5jb25zIC8gKDIgKiB0aGlzLmEgKiB0aGlzLmswKTtcbiAgICAgIGxhdCA9IHRoaXMuY29uICogcGhpMnoodGhpcy5lLCB0cyk7XG4gICAgICBsb24gPSB0aGlzLmNvbiAqIGFkanVzdF9sb24odGhpcy5jb24gKiB0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLngsIC0gMSAqIHAueSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNlID0gMiAqIE1hdGguYXRhbihyaCAqIHRoaXMuY29zWDAgLyAoMiAqIHRoaXMuYSAqIHRoaXMuazAgKiB0aGlzLm1zMSkpO1xuICAgICAgbG9uID0gdGhpcy5sb25nMDtcbiAgICAgIGlmIChyaCA8PSBFUFNMTikge1xuICAgICAgICBDaGkgPSB0aGlzLlgwO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIENoaSA9IE1hdGguYXNpbihNYXRoLmNvcyhjZSkgKiB0aGlzLnNpblgwICsgcC55ICogTWF0aC5zaW4oY2UpICogdGhpcy5jb3NYMCAvIHJoKTtcbiAgICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLnggKiBNYXRoLnNpbihjZSksIHJoICogdGhpcy5jb3NYMCAqIE1hdGguY29zKGNlKSAtIHAueSAqIHRoaXMuc2luWDAgKiBNYXRoLnNpbihjZSkpKTtcbiAgICAgIH1cbiAgICAgIGxhdCA9IC0xICogcGhpMnoodGhpcy5lLCBNYXRoLnRhbigwLjUgKiAoSEFMRl9QSSArIENoaSkpKTtcbiAgICB9XG4gIH1cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG5cbiAgLy90cmFjZShwLnRvU3RyaW5nKCkpO1xuICByZXR1cm4gcDtcblxufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wic3RlcmVcIiwgXCJTdGVyZW9ncmFwaGljX1NvdXRoX1BvbGVcIiwgXCJQb2xhciBTdGVyZW9ncmFwaGljICh2YXJpYW50IEIpXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXMsXG4gIHNzZm5fOiBzc2ZuX1xufTtcbiIsIi8qXG4gIHJlZmVyZW5jZXM6XG4gICAgRm9ybXVsZXMgZXQgY29uc3RhbnRlcyBwb3VyIGxlIENhbGN1bCBwb3VyIGxhXG4gICAgcHJvamVjdGlvbiBjeWxpbmRyaXF1ZSBjb25mb3JtZSDDoCBheGUgb2JsaXF1ZSBldCBwb3VyIGxhIHRyYW5zZm9ybWF0aW9uIGVudHJlXG4gICAgZGVzIHN5c3TDqG1lcyBkZSByw6lmw6lyZW5jZS5cbiAgICBodHRwOi8vd3d3LnN3aXNzdG9wby5hZG1pbi5jaC9pbnRlcm5ldC9zd2lzc3RvcG8vZnIvaG9tZS90b3BpY3Mvc3VydmV5L3N5cy9yZWZzeXMvc3dpdHplcmxhbmQucGFyc3lzcmVsYXRlZDEuMzEyMTYuZG93bmxvYWRMaXN0Ljc3MDA0LkRvd25sb2FkRmlsZS50bXAvc3dpc3Nwcm9qZWN0aW9uZnIucGRmXG4gICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICB2YXIgcGh5MCA9IHRoaXMubGF0MDtcbiAgdGhpcy5sYW1iZGEwID0gdGhpcy5sb25nMDtcbiAgdmFyIHNpblBoeTAgPSBNYXRoLnNpbihwaHkwKTtcbiAgdmFyIHNlbWlNYWpvckF4aXMgPSB0aGlzLmE7XG4gIHZhciBpbnZGID0gdGhpcy5yZjtcbiAgdmFyIGZsYXR0ZW5pbmcgPSAxIC8gaW52RjtcbiAgdmFyIGUyID0gMiAqIGZsYXR0ZW5pbmcgLSBNYXRoLnBvdyhmbGF0dGVuaW5nLCAyKTtcbiAgdmFyIGUgPSB0aGlzLmUgPSBNYXRoLnNxcnQoZTIpO1xuICB0aGlzLlIgPSB0aGlzLmswICogc2VtaU1ham9yQXhpcyAqIE1hdGguc3FydCgxIC0gZTIpIC8gKDEgLSBlMiAqIE1hdGgucG93KHNpblBoeTAsIDIpKTtcbiAgdGhpcy5hbHBoYSA9IE1hdGguc3FydCgxICsgZTIgLyAoMSAtIGUyKSAqIE1hdGgucG93KE1hdGguY29zKHBoeTApLCA0KSk7XG4gIHRoaXMuYjAgPSBNYXRoLmFzaW4oc2luUGh5MCAvIHRoaXMuYWxwaGEpO1xuICB2YXIgazEgPSBNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCArIHRoaXMuYjAgLyAyKSk7XG4gIHZhciBrMiA9IE1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkgLyA0ICsgcGh5MCAvIDIpKTtcbiAgdmFyIGszID0gTWF0aC5sb2coKDEgKyBlICogc2luUGh5MCkgLyAoMSAtIGUgKiBzaW5QaHkwKSk7XG4gIHRoaXMuSyA9IGsxIC0gdGhpcy5hbHBoYSAqIGsyICsgdGhpcy5hbHBoYSAqIGUgLyAyICogazM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIFNhMSA9IE1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkgLyA0IC0gcC55IC8gMikpO1xuICB2YXIgU2EyID0gdGhpcy5lIC8gMiAqIE1hdGgubG9nKCgxICsgdGhpcy5lICogTWF0aC5zaW4ocC55KSkgLyAoMSAtIHRoaXMuZSAqIE1hdGguc2luKHAueSkpKTtcbiAgdmFyIFMgPSAtdGhpcy5hbHBoYSAqIChTYTEgKyBTYTIpICsgdGhpcy5LO1xuXG4gIC8vIHNwaGVyaWMgbGF0aXR1ZGVcbiAgdmFyIGIgPSAyICogKE1hdGguYXRhbihNYXRoLmV4cChTKSkgLSBNYXRoLlBJIC8gNCk7XG5cbiAgLy8gc3BoZXJpYyBsb25naXR1ZGVcbiAgdmFyIEkgPSB0aGlzLmFscGhhICogKHAueCAtIHRoaXMubGFtYmRhMCk7XG5cbiAgLy8gcHNvZXVkbyBlcXVhdG9yaWFsIHJvdGF0aW9uXG4gIHZhciByb3RJID0gTWF0aC5hdGFuKE1hdGguc2luKEkpIC8gKE1hdGguc2luKHRoaXMuYjApICogTWF0aC50YW4oYikgKyBNYXRoLmNvcyh0aGlzLmIwKSAqIE1hdGguY29zKEkpKSk7XG5cbiAgdmFyIHJvdEIgPSBNYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5iMCkgKiBNYXRoLnNpbihiKSAtIE1hdGguc2luKHRoaXMuYjApICogTWF0aC5jb3MoYikgKiBNYXRoLmNvcyhJKSk7XG5cbiAgcC55ID0gdGhpcy5SIC8gMiAqIE1hdGgubG9nKCgxICsgTWF0aC5zaW4ocm90QikpIC8gKDEgLSBNYXRoLnNpbihyb3RCKSkpICsgdGhpcy55MDtcbiAgcC54ID0gdGhpcy5SICogcm90SSArIHRoaXMueDA7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciBZID0gcC54IC0gdGhpcy54MDtcbiAgdmFyIFggPSBwLnkgLSB0aGlzLnkwO1xuXG4gIHZhciByb3RJID0gWSAvIHRoaXMuUjtcbiAgdmFyIHJvdEIgPSAyICogKE1hdGguYXRhbihNYXRoLmV4cChYIC8gdGhpcy5SKSkgLSBNYXRoLlBJIC8gNCk7XG5cbiAgdmFyIGIgPSBNYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5iMCkgKiBNYXRoLnNpbihyb3RCKSArIE1hdGguc2luKHRoaXMuYjApICogTWF0aC5jb3Mocm90QikgKiBNYXRoLmNvcyhyb3RJKSk7XG4gIHZhciBJID0gTWF0aC5hdGFuKE1hdGguc2luKHJvdEkpIC8gKE1hdGguY29zKHRoaXMuYjApICogTWF0aC5jb3Mocm90SSkgLSBNYXRoLnNpbih0aGlzLmIwKSAqIE1hdGgudGFuKHJvdEIpKSk7XG5cbiAgdmFyIGxhbWJkYSA9IHRoaXMubGFtYmRhMCArIEkgLyB0aGlzLmFscGhhO1xuXG4gIHZhciBTID0gMDtcbiAgdmFyIHBoeSA9IGI7XG4gIHZhciBwcmV2UGh5ID0gLTEwMDA7XG4gIHZhciBpdGVyYXRpb24gPSAwO1xuICB3aGlsZSAoTWF0aC5hYnMocGh5IC0gcHJldlBoeSkgPiAwLjAwMDAwMDEpIHtcbiAgICBpZiAoKytpdGVyYXRpb24gPiAyMCkge1xuICAgICAgLy8uLi5yZXBvcnRFcnJvcihcIm9tZXJjRndkSW5maW5pdHlcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vUyA9IE1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkgLyA0ICsgcGh5IC8gMikpO1xuICAgIFMgPSAxIC8gdGhpcy5hbHBoYSAqIChNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCArIGIgLyAyKSkgLSB0aGlzLkspICsgdGhpcy5lICogTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSSAvIDQgKyBNYXRoLmFzaW4odGhpcy5lICogTWF0aC5zaW4ocGh5KSkgLyAyKSk7XG4gICAgcHJldlBoeSA9IHBoeTtcbiAgICBwaHkgPSAyICogTWF0aC5hdGFuKE1hdGguZXhwKFMpKSAtIE1hdGguUEkgLyAyO1xuICB9XG5cbiAgcC54ID0gbGFtYmRhO1xuICBwLnkgPSBwaHk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wic29tZXJjXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgdHNmbnogZnJvbSAnLi4vY29tbW9uL3RzZm56JztcbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmltcG9ydCBwaGkyeiBmcm9tICcuLi9jb21tb24vcGhpMnonO1xuaW1wb3J0IHtFUFNMTiwgSEFMRl9QSSwgRk9SVFBJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuLyogSW5pdGlhbGl6ZSB0aGUgT2JsaXF1ZSBNZXJjYXRvciAgcHJvamVjdGlvblxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdGhpcy5ub19vZmYgPSB0aGlzLm5vX29mZiB8fCBmYWxzZTtcbiAgdGhpcy5ub19yb3QgPSB0aGlzLm5vX3JvdCB8fCBmYWxzZTtcblxuICBpZiAoaXNOYU4odGhpcy5rMCkpIHtcbiAgICB0aGlzLmswID0gMTtcbiAgfVxuICB2YXIgc2lubGF0ID0gTWF0aC5zaW4odGhpcy5sYXQwKTtcbiAgdmFyIGNvc2xhdCA9IE1hdGguY29zKHRoaXMubGF0MCk7XG4gIHZhciBjb24gPSB0aGlzLmUgKiBzaW5sYXQ7XG5cbiAgdGhpcy5ibCA9IE1hdGguc3FydCgxICsgdGhpcy5lcyAvICgxIC0gdGhpcy5lcykgKiBNYXRoLnBvdyhjb3NsYXQsIDQpKTtcbiAgdGhpcy5hbCA9IHRoaXMuYSAqIHRoaXMuYmwgKiB0aGlzLmswICogTWF0aC5zcXJ0KDEgLSB0aGlzLmVzKSAvICgxIC0gY29uICogY29uKTtcbiAgdmFyIHQwID0gdHNmbnoodGhpcy5lLCB0aGlzLmxhdDAsIHNpbmxhdCk7XG4gIHZhciBkbCA9IHRoaXMuYmwgLyBjb3NsYXQgKiBNYXRoLnNxcnQoKDEgLSB0aGlzLmVzKSAvICgxIC0gY29uICogY29uKSk7XG4gIGlmIChkbCAqIGRsIDwgMSkge1xuICAgIGRsID0gMTtcbiAgfVxuICB2YXIgZmw7XG4gIHZhciBnbDtcbiAgaWYgKCFpc05hTih0aGlzLmxvbmdjKSkge1xuICAgIC8vQ2VudHJhbCBwb2ludCBhbmQgYXppbXV0aCBtZXRob2RcblxuICAgIGlmICh0aGlzLmxhdDAgPj0gMCkge1xuICAgICAgZmwgPSBkbCArIE1hdGguc3FydChkbCAqIGRsIC0gMSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZmwgPSBkbCAtIE1hdGguc3FydChkbCAqIGRsIC0gMSk7XG4gICAgfVxuICAgIHRoaXMuZWwgPSBmbCAqIE1hdGgucG93KHQwLCB0aGlzLmJsKTtcbiAgICBnbCA9IDAuNSAqIChmbCAtIDEgLyBmbCk7XG4gICAgdGhpcy5nYW1tYTAgPSBNYXRoLmFzaW4oTWF0aC5zaW4odGhpcy5hbHBoYSkgLyBkbCk7XG4gICAgdGhpcy5sb25nMCA9IHRoaXMubG9uZ2MgLSBNYXRoLmFzaW4oZ2wgKiBNYXRoLnRhbih0aGlzLmdhbW1hMCkpIC8gdGhpcy5ibDtcblxuICB9XG4gIGVsc2Uge1xuICAgIC8vMiBwb2ludHMgbWV0aG9kXG4gICAgdmFyIHQxID0gdHNmbnoodGhpcy5lLCB0aGlzLmxhdDEsIE1hdGguc2luKHRoaXMubGF0MSkpO1xuICAgIHZhciB0MiA9IHRzZm56KHRoaXMuZSwgdGhpcy5sYXQyLCBNYXRoLnNpbih0aGlzLmxhdDIpKTtcbiAgICBpZiAodGhpcy5sYXQwID49IDApIHtcbiAgICAgIHRoaXMuZWwgPSAoZGwgKyBNYXRoLnNxcnQoZGwgKiBkbCAtIDEpKSAqIE1hdGgucG93KHQwLCB0aGlzLmJsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmVsID0gKGRsIC0gTWF0aC5zcXJ0KGRsICogZGwgLSAxKSkgKiBNYXRoLnBvdyh0MCwgdGhpcy5ibCk7XG4gICAgfVxuICAgIHZhciBobCA9IE1hdGgucG93KHQxLCB0aGlzLmJsKTtcbiAgICB2YXIgbGwgPSBNYXRoLnBvdyh0MiwgdGhpcy5ibCk7XG4gICAgZmwgPSB0aGlzLmVsIC8gaGw7XG4gICAgZ2wgPSAwLjUgKiAoZmwgLSAxIC8gZmwpO1xuICAgIHZhciBqbCA9ICh0aGlzLmVsICogdGhpcy5lbCAtIGxsICogaGwpIC8gKHRoaXMuZWwgKiB0aGlzLmVsICsgbGwgKiBobCk7XG4gICAgdmFyIHBsID0gKGxsIC0gaGwpIC8gKGxsICsgaGwpO1xuICAgIHZhciBkbG9uMTIgPSBhZGp1c3RfbG9uKHRoaXMubG9uZzEgLSB0aGlzLmxvbmcyKTtcbiAgICB0aGlzLmxvbmcwID0gMC41ICogKHRoaXMubG9uZzEgKyB0aGlzLmxvbmcyKSAtIE1hdGguYXRhbihqbCAqIE1hdGgudGFuKDAuNSAqIHRoaXMuYmwgKiAoZGxvbjEyKSkgLyBwbCkgLyB0aGlzLmJsO1xuICAgIHRoaXMubG9uZzAgPSBhZGp1c3RfbG9uKHRoaXMubG9uZzApO1xuICAgIHZhciBkbG9uMTAgPSBhZGp1c3RfbG9uKHRoaXMubG9uZzEgLSB0aGlzLmxvbmcwKTtcbiAgICB0aGlzLmdhbW1hMCA9IE1hdGguYXRhbihNYXRoLnNpbih0aGlzLmJsICogKGRsb24xMCkpIC8gZ2wpO1xuICAgIHRoaXMuYWxwaGEgPSBNYXRoLmFzaW4oZGwgKiBNYXRoLnNpbih0aGlzLmdhbW1hMCkpO1xuICB9XG5cbiAgaWYgKHRoaXMubm9fb2ZmKSB7XG4gICAgdGhpcy51YyA9IDA7XG4gIH1cbiAgZWxzZSB7XG4gICAgaWYgKHRoaXMubGF0MCA+PSAwKSB7XG4gICAgICB0aGlzLnVjID0gdGhpcy5hbCAvIHRoaXMuYmwgKiBNYXRoLmF0YW4yKE1hdGguc3FydChkbCAqIGRsIC0gMSksIE1hdGguY29zKHRoaXMuYWxwaGEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnVjID0gLTEgKiB0aGlzLmFsIC8gdGhpcy5ibCAqIE1hdGguYXRhbjIoTWF0aC5zcXJ0KGRsICogZGwgLSAxKSwgTWF0aC5jb3ModGhpcy5hbHBoYSkpO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qIE9ibGlxdWUgTWVyY2F0b3IgZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIHZhciBkbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgdmFyIHVzLCB2cztcbiAgdmFyIGNvbjtcbiAgaWYgKE1hdGguYWJzKE1hdGguYWJzKGxhdCkgLSBIQUxGX1BJKSA8PSBFUFNMTikge1xuICAgIGlmIChsYXQgPiAwKSB7XG4gICAgICBjb24gPSAtMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb24gPSAxO1xuICAgIH1cbiAgICB2cyA9IHRoaXMuYWwgLyB0aGlzLmJsICogTWF0aC5sb2coTWF0aC50YW4oRk9SVFBJICsgY29uICogdGhpcy5nYW1tYTAgKiAwLjUpKTtcbiAgICB1cyA9IC0xICogY29uICogSEFMRl9QSSAqIHRoaXMuYWwgLyB0aGlzLmJsO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciB0ID0gdHNmbnoodGhpcy5lLCBsYXQsIE1hdGguc2luKGxhdCkpO1xuICAgIHZhciBxbCA9IHRoaXMuZWwgLyBNYXRoLnBvdyh0LCB0aGlzLmJsKTtcbiAgICB2YXIgc2wgPSAwLjUgKiAocWwgLSAxIC8gcWwpO1xuICAgIHZhciB0bCA9IDAuNSAqIChxbCArIDEgLyBxbCk7XG4gICAgdmFyIHZsID0gTWF0aC5zaW4odGhpcy5ibCAqIChkbG9uKSk7XG4gICAgdmFyIHVsID0gKHNsICogTWF0aC5zaW4odGhpcy5nYW1tYTApIC0gdmwgKiBNYXRoLmNvcyh0aGlzLmdhbW1hMCkpIC8gdGw7XG4gICAgaWYgKE1hdGguYWJzKE1hdGguYWJzKHVsKSAtIDEpIDw9IEVQU0xOKSB7XG4gICAgICB2cyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2cyA9IDAuNSAqIHRoaXMuYWwgKiBNYXRoLmxvZygoMSAtIHVsKSAvICgxICsgdWwpKSAvIHRoaXMuYmw7XG4gICAgfVxuICAgIGlmIChNYXRoLmFicyhNYXRoLmNvcyh0aGlzLmJsICogKGRsb24pKSkgPD0gRVBTTE4pIHtcbiAgICAgIHVzID0gdGhpcy5hbCAqIHRoaXMuYmwgKiAoZGxvbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdXMgPSB0aGlzLmFsICogTWF0aC5hdGFuMihzbCAqIE1hdGguY29zKHRoaXMuZ2FtbWEwKSArIHZsICogTWF0aC5zaW4odGhpcy5nYW1tYTApLCBNYXRoLmNvcyh0aGlzLmJsICogZGxvbikpIC8gdGhpcy5ibDtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5ub19yb3QpIHtcbiAgICBwLnggPSB0aGlzLngwICsgdXM7XG4gICAgcC55ID0gdGhpcy55MCArIHZzO1xuICB9XG4gIGVsc2Uge1xuXG4gICAgdXMgLT0gdGhpcy51YztcbiAgICBwLnggPSB0aGlzLngwICsgdnMgKiBNYXRoLmNvcyh0aGlzLmFscGhhKSArIHVzICogTWF0aC5zaW4odGhpcy5hbHBoYSk7XG4gICAgcC55ID0gdGhpcy55MCArIHVzICogTWF0aC5jb3ModGhpcy5hbHBoYSkgLSB2cyAqIE1hdGguc2luKHRoaXMuYWxwaGEpO1xuICB9XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciB1cywgdnM7XG4gIGlmICh0aGlzLm5vX3JvdCkge1xuICAgIHZzID0gcC55IC0gdGhpcy55MDtcbiAgICB1cyA9IHAueCAtIHRoaXMueDA7XG4gIH1cbiAgZWxzZSB7XG4gICAgdnMgPSAocC54IC0gdGhpcy54MCkgKiBNYXRoLmNvcyh0aGlzLmFscGhhKSAtIChwLnkgLSB0aGlzLnkwKSAqIE1hdGguc2luKHRoaXMuYWxwaGEpO1xuICAgIHVzID0gKHAueSAtIHRoaXMueTApICogTWF0aC5jb3ModGhpcy5hbHBoYSkgKyAocC54IC0gdGhpcy54MCkgKiBNYXRoLnNpbih0aGlzLmFscGhhKTtcbiAgICB1cyArPSB0aGlzLnVjO1xuICB9XG4gIHZhciBxcCA9IE1hdGguZXhwKC0xICogdGhpcy5ibCAqIHZzIC8gdGhpcy5hbCk7XG4gIHZhciBzcCA9IDAuNSAqIChxcCAtIDEgLyBxcCk7XG4gIHZhciB0cCA9IDAuNSAqIChxcCArIDEgLyBxcCk7XG4gIHZhciB2cCA9IE1hdGguc2luKHRoaXMuYmwgKiB1cyAvIHRoaXMuYWwpO1xuICB2YXIgdXAgPSAodnAgKiBNYXRoLmNvcyh0aGlzLmdhbW1hMCkgKyBzcCAqIE1hdGguc2luKHRoaXMuZ2FtbWEwKSkgLyB0cDtcbiAgdmFyIHRzID0gTWF0aC5wb3codGhpcy5lbCAvIE1hdGguc3FydCgoMSArIHVwKSAvICgxIC0gdXApKSwgMSAvIHRoaXMuYmwpO1xuICBpZiAoTWF0aC5hYnModXAgLSAxKSA8IEVQU0xOKSB7XG4gICAgcC54ID0gdGhpcy5sb25nMDtcbiAgICBwLnkgPSBIQUxGX1BJO1xuICB9XG4gIGVsc2UgaWYgKE1hdGguYWJzKHVwICsgMSkgPCBFUFNMTikge1xuICAgIHAueCA9IHRoaXMubG9uZzA7XG4gICAgcC55ID0gLTEgKiBIQUxGX1BJO1xuICB9XG4gIGVsc2Uge1xuICAgIHAueSA9IHBoaTJ6KHRoaXMuZSwgdHMpO1xuICAgIHAueCA9IGFkanVzdF9sb24odGhpcy5sb25nMCAtIE1hdGguYXRhbjIoc3AgKiBNYXRoLmNvcyh0aGlzLmdhbW1hMCkgLSB2cCAqIE1hdGguc2luKHRoaXMuZ2FtbWEwKSwgTWF0aC5jb3ModGhpcy5ibCAqIHVzIC8gdGhpcy5hbCkpIC8gdGhpcy5ibCk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJIb3RpbmVfT2JsaXF1ZV9NZXJjYXRvclwiLCBcIkhvdGluZSBPYmxpcXVlIE1lcmNhdG9yXCIsIFwiSG90aW5lX09ibGlxdWVfTWVyY2F0b3JfQXppbXV0aF9OYXR1cmFsX09yaWdpblwiLCBcIkhvdGluZV9PYmxpcXVlX01lcmNhdG9yX0F6aW11dGhfQ2VudGVyXCIsIFwib21lcmNcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBtc2ZueiBmcm9tICcuLi9jb21tb24vbXNmbnonO1xuaW1wb3J0IHRzZm56IGZyb20gJy4uL2NvbW1vbi90c2Zueic7XG5pbXBvcnQgc2lnbiBmcm9tICcuLi9jb21tb24vc2lnbic7XG5pbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQgcGhpMnogZnJvbSAnLi4vY29tbW9uL3BoaTJ6JztcbmltcG9ydCB7SEFMRl9QSSwgRVBTTE59IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgLy8gYXJyYXkgb2Y6ICByX21haixyX21pbixsYXQxLGxhdDIsY19sb24sY19sYXQsZmFsc2VfZWFzdCxmYWxzZV9ub3J0aFxuICAvL2RvdWJsZSBjX2xhdDsgICAgICAgICAgICAgICAgICAgLyogY2VudGVyIGxhdGl0dWRlICAgICAgICAgICAgICAgICAgICAgICovXG4gIC8vZG91YmxlIGNfbG9uOyAgICAgICAgICAgICAgICAgICAvKiBjZW50ZXIgbG9uZ2l0dWRlICAgICAgICAgICAgICAgICAgICAgKi9cbiAgLy9kb3VibGUgbGF0MTsgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IHN0YW5kYXJkIHBhcmFsbGVsICAgICAgICAgICAgICAqL1xuICAvL2RvdWJsZSBsYXQyOyAgICAgICAgICAgICAgICAgICAgLyogc2Vjb25kIHN0YW5kYXJkIHBhcmFsbGVsICAgICAgICAgICAgICovXG4gIC8vZG91YmxlIHJfbWFqOyAgICAgICAgICAgICAgICAgICAvKiBtYWpvciBheGlzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgLy9kb3VibGUgcl9taW47ICAgICAgICAgICAgICAgICAgIC8qIG1pbm9yIGF4aXMgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAvL2RvdWJsZSBmYWxzZV9lYXN0OyAgICAgICAgICAgICAgLyogeCBvZmZzZXQgaW4gbWV0ZXJzICAgICAgICAgICAgICAgICAgICovXG4gIC8vZG91YmxlIGZhbHNlX25vcnRoOyAgICAgICAgICAgICAvKiB5IG9mZnNldCBpbiBtZXRlcnMgICAgICAgICAgICAgICAgICAgKi9cblxuICBpZiAoIXRoaXMubGF0Mikge1xuICAgIHRoaXMubGF0MiA9IHRoaXMubGF0MTtcbiAgfSAvL2lmIGxhdDIgaXMgbm90IGRlZmluZWRcbiAgaWYgKCF0aGlzLmswKSB7XG4gICAgdGhpcy5rMCA9IDE7XG4gIH1cbiAgdGhpcy54MCA9IHRoaXMueDAgfHwgMDtcbiAgdGhpcy55MCA9IHRoaXMueTAgfHwgMDtcbiAgLy8gU3RhbmRhcmQgUGFyYWxsZWxzIGNhbm5vdCBiZSBlcXVhbCBhbmQgb24gb3Bwb3NpdGUgc2lkZXMgb2YgdGhlIGVxdWF0b3JcbiAgaWYgKE1hdGguYWJzKHRoaXMubGF0MSArIHRoaXMubGF0MikgPCBFUFNMTikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0ZW1wID0gdGhpcy5iIC8gdGhpcy5hO1xuICB0aGlzLmUgPSBNYXRoLnNxcnQoMSAtIHRlbXAgKiB0ZW1wKTtcblxuICB2YXIgc2luMSA9IE1hdGguc2luKHRoaXMubGF0MSk7XG4gIHZhciBjb3MxID0gTWF0aC5jb3ModGhpcy5sYXQxKTtcbiAgdmFyIG1zMSA9IG1zZm56KHRoaXMuZSwgc2luMSwgY29zMSk7XG4gIHZhciB0czEgPSB0c2Zueih0aGlzLmUsIHRoaXMubGF0MSwgc2luMSk7XG5cbiAgdmFyIHNpbjIgPSBNYXRoLnNpbih0aGlzLmxhdDIpO1xuICB2YXIgY29zMiA9IE1hdGguY29zKHRoaXMubGF0Mik7XG4gIHZhciBtczIgPSBtc2Zueih0aGlzLmUsIHNpbjIsIGNvczIpO1xuICB2YXIgdHMyID0gdHNmbnoodGhpcy5lLCB0aGlzLmxhdDIsIHNpbjIpO1xuXG4gIHZhciB0czAgPSB0c2Zueih0aGlzLmUsIHRoaXMubGF0MCwgTWF0aC5zaW4odGhpcy5sYXQwKSk7XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMubGF0MSAtIHRoaXMubGF0MikgPiBFUFNMTikge1xuICAgIHRoaXMubnMgPSBNYXRoLmxvZyhtczEgLyBtczIpIC8gTWF0aC5sb2codHMxIC8gdHMyKTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLm5zID0gc2luMTtcbiAgfVxuICBpZiAoaXNOYU4odGhpcy5ucykpIHtcbiAgICB0aGlzLm5zID0gc2luMTtcbiAgfVxuICB0aGlzLmYwID0gbXMxIC8gKHRoaXMubnMgKiBNYXRoLnBvdyh0czEsIHRoaXMubnMpKTtcbiAgdGhpcy5yaCA9IHRoaXMuYSAqIHRoaXMuZjAgKiBNYXRoLnBvdyh0czAsIHRoaXMubnMpO1xuICBpZiAoIXRoaXMudGl0bGUpIHtcbiAgICB0aGlzLnRpdGxlID0gXCJMYW1iZXJ0IENvbmZvcm1hbCBDb25pY1wiO1xuICB9XG59XG5cbi8vIExhbWJlcnQgQ29uZm9ybWFsIGNvbmljIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcblxuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuXG4gIC8vIHNpbmd1bGFyIGNhc2VzIDpcbiAgaWYgKE1hdGguYWJzKDIgKiBNYXRoLmFicyhsYXQpIC0gTWF0aC5QSSkgPD0gRVBTTE4pIHtcbiAgICBsYXQgPSBzaWduKGxhdCkgKiAoSEFMRl9QSSAtIDIgKiBFUFNMTik7XG4gIH1cblxuICB2YXIgY29uID0gTWF0aC5hYnMoTWF0aC5hYnMobGF0KSAtIEhBTEZfUEkpO1xuICB2YXIgdHMsIHJoMTtcbiAgaWYgKGNvbiA+IEVQU0xOKSB7XG4gICAgdHMgPSB0c2Zueih0aGlzLmUsIGxhdCwgTWF0aC5zaW4obGF0KSk7XG4gICAgcmgxID0gdGhpcy5hICogdGhpcy5mMCAqIE1hdGgucG93KHRzLCB0aGlzLm5zKTtcbiAgfVxuICBlbHNlIHtcbiAgICBjb24gPSBsYXQgKiB0aGlzLm5zO1xuICAgIGlmIChjb24gPD0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJoMSA9IDA7XG4gIH1cbiAgdmFyIHRoZXRhID0gdGhpcy5ucyAqIGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHAueCA9IHRoaXMuazAgKiAocmgxICogTWF0aC5zaW4odGhldGEpKSArIHRoaXMueDA7XG4gIHAueSA9IHRoaXMuazAgKiAodGhpcy5yaCAtIHJoMSAqIE1hdGguY29zKHRoZXRhKSkgKyB0aGlzLnkwO1xuXG4gIHJldHVybiBwO1xufVxuXG4vLyBMYW1iZXJ0IENvbmZvcm1hbCBDb25pYyBpbnZlcnNlIGVxdWF0aW9ucy0tbWFwcGluZyB4LHkgdG8gbGF0L2xvbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG5cbiAgdmFyIHJoMSwgY29uLCB0cztcbiAgdmFyIGxhdCwgbG9uO1xuICB2YXIgeCA9IChwLnggLSB0aGlzLngwKSAvIHRoaXMuazA7XG4gIHZhciB5ID0gKHRoaXMucmggLSAocC55IC0gdGhpcy55MCkgLyB0aGlzLmswKTtcbiAgaWYgKHRoaXMubnMgPiAwKSB7XG4gICAgcmgxID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgIGNvbiA9IDE7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmgxID0gLU1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbiAgICBjb24gPSAtMTtcbiAgfVxuICB2YXIgdGhldGEgPSAwO1xuICBpZiAocmgxICE9PSAwKSB7XG4gICAgdGhldGEgPSBNYXRoLmF0YW4yKChjb24gKiB4KSwgKGNvbiAqIHkpKTtcbiAgfVxuICBpZiAoKHJoMSAhPT0gMCkgfHwgKHRoaXMubnMgPiAwKSkge1xuICAgIGNvbiA9IDEgLyB0aGlzLm5zO1xuICAgIHRzID0gTWF0aC5wb3coKHJoMSAvICh0aGlzLmEgKiB0aGlzLmYwKSksIGNvbik7XG4gICAgbGF0ID0gcGhpMnoodGhpcy5lLCB0cyk7XG4gICAgaWYgKGxhdCA9PT0gLTk5OTkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBsYXQgPSAtSEFMRl9QSTtcbiAgfVxuICBsb24gPSBhZGp1c3RfbG9uKHRoZXRhIC8gdGhpcy5ucyArIHRoaXMubG9uZzApO1xuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIkxhbWJlcnQgVGFuZ2VudGlhbCBDb25mb3JtYWwgQ29uaWMgUHJvamVjdGlvblwiLCBcIkxhbWJlcnRfQ29uZm9ybWFsX0NvbmljXCIsIFwiTGFtYmVydF9Db25mb3JtYWxfQ29uaWNfMlNQXCIsIFwibGNjXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICB0aGlzLmEgPSA2Mzc3Mzk3LjE1NTtcbiAgdGhpcy5lcyA9IDAuMDA2Njc0MzcyMjMwNjE0O1xuICB0aGlzLmUgPSBNYXRoLnNxcnQodGhpcy5lcyk7XG4gIGlmICghdGhpcy5sYXQwKSB7XG4gICAgdGhpcy5sYXQwID0gMC44NjM5Mzc5Nzk3MzcxOTM7XG4gIH1cbiAgaWYgKCF0aGlzLmxvbmcwKSB7XG4gICAgdGhpcy5sb25nMCA9IDAuNzQxNzY0OTMyMDk3NTkwMSAtIDAuMzA4MzQxNTAxMTg1NjY1O1xuICB9XG4gIC8qIGlmIHNjYWxlIG5vdCBzZXQgZGVmYXVsdCB0byAwLjk5OTkgKi9cbiAgaWYgKCF0aGlzLmswKSB7XG4gICAgdGhpcy5rMCA9IDAuOTk5OTtcbiAgfVxuICB0aGlzLnM0NSA9IDAuNzg1Mzk4MTYzMzk3NDQ4OyAvKiA0NSAqL1xuICB0aGlzLnM5MCA9IDIgKiB0aGlzLnM0NTtcbiAgdGhpcy5maTAgPSB0aGlzLmxhdDA7XG4gIHRoaXMuZTIgPSB0aGlzLmVzO1xuICB0aGlzLmUgPSBNYXRoLnNxcnQodGhpcy5lMik7XG4gIHRoaXMuYWxmYSA9IE1hdGguc3FydCgxICsgKHRoaXMuZTIgKiBNYXRoLnBvdyhNYXRoLmNvcyh0aGlzLmZpMCksIDQpKSAvICgxIC0gdGhpcy5lMikpO1xuICB0aGlzLnVxID0gMS4wNDIxNjg1NjM4MDQ3NDtcbiAgdGhpcy51MCA9IE1hdGguYXNpbihNYXRoLnNpbih0aGlzLmZpMCkgLyB0aGlzLmFsZmEpO1xuICB0aGlzLmcgPSBNYXRoLnBvdygoMSArIHRoaXMuZSAqIE1hdGguc2luKHRoaXMuZmkwKSkgLyAoMSAtIHRoaXMuZSAqIE1hdGguc2luKHRoaXMuZmkwKSksIHRoaXMuYWxmYSAqIHRoaXMuZSAvIDIpO1xuICB0aGlzLmsgPSBNYXRoLnRhbih0aGlzLnUwIC8gMiArIHRoaXMuczQ1KSAvIE1hdGgucG93KE1hdGgudGFuKHRoaXMuZmkwIC8gMiArIHRoaXMuczQ1KSwgdGhpcy5hbGZhKSAqIHRoaXMuZztcbiAgdGhpcy5rMSA9IHRoaXMuazA7XG4gIHRoaXMubjAgPSB0aGlzLmEgKiBNYXRoLnNxcnQoMSAtIHRoaXMuZTIpIC8gKDEgLSB0aGlzLmUyICogTWF0aC5wb3coTWF0aC5zaW4odGhpcy5maTApLCAyKSk7XG4gIHRoaXMuczAgPSAxLjM3MDA4MzQ2MjgxNTU1O1xuICB0aGlzLm4gPSBNYXRoLnNpbih0aGlzLnMwKTtcbiAgdGhpcy5ybzAgPSB0aGlzLmsxICogdGhpcy5uMCAvIE1hdGgudGFuKHRoaXMuczApO1xuICB0aGlzLmFkID0gdGhpcy5zOTAgLSB0aGlzLnVxO1xufVxuXG4vKiBlbGxpcHNvaWQgKi9cbi8qIGNhbGN1bGF0ZSB4eSBmcm9tIGxhdC9sb24gKi9cbi8qIENvbnN0YW50cywgaWRlbnRpY2FsIHRvIGludmVyc2UgdHJhbnNmb3JtIGZ1bmN0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBnZmksIHUsIGRlbHRhdiwgcywgZCwgZXBzLCBybztcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcbiAgdmFyIGRlbHRhX2xvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIC8qIFRyYW5zZm9ybWF0aW9uICovXG4gIGdmaSA9IE1hdGgucG93KCgoMSArIHRoaXMuZSAqIE1hdGguc2luKGxhdCkpIC8gKDEgLSB0aGlzLmUgKiBNYXRoLnNpbihsYXQpKSksICh0aGlzLmFsZmEgKiB0aGlzLmUgLyAyKSk7XG4gIHUgPSAyICogKE1hdGguYXRhbih0aGlzLmsgKiBNYXRoLnBvdyhNYXRoLnRhbihsYXQgLyAyICsgdGhpcy5zNDUpLCB0aGlzLmFsZmEpIC8gZ2ZpKSAtIHRoaXMuczQ1KTtcbiAgZGVsdGF2ID0gLWRlbHRhX2xvbiAqIHRoaXMuYWxmYTtcbiAgcyA9IE1hdGguYXNpbihNYXRoLmNvcyh0aGlzLmFkKSAqIE1hdGguc2luKHUpICsgTWF0aC5zaW4odGhpcy5hZCkgKiBNYXRoLmNvcyh1KSAqIE1hdGguY29zKGRlbHRhdikpO1xuICBkID0gTWF0aC5hc2luKE1hdGguY29zKHUpICogTWF0aC5zaW4oZGVsdGF2KSAvIE1hdGguY29zKHMpKTtcbiAgZXBzID0gdGhpcy5uICogZDtcbiAgcm8gPSB0aGlzLnJvMCAqIE1hdGgucG93KE1hdGgudGFuKHRoaXMuczAgLyAyICsgdGhpcy5zNDUpLCB0aGlzLm4pIC8gTWF0aC5wb3coTWF0aC50YW4ocyAvIDIgKyB0aGlzLnM0NSksIHRoaXMubik7XG4gIHAueSA9IHJvICogTWF0aC5jb3MoZXBzKSAvIDE7XG4gIHAueCA9IHJvICogTWF0aC5zaW4oZXBzKSAvIDE7XG5cbiAgaWYgKCF0aGlzLmN6ZWNoKSB7XG4gICAgcC55ICo9IC0xO1xuICAgIHAueCAqPSAtMTtcbiAgfVxuICByZXR1cm4gKHApO1xufVxuXG4vKiBjYWxjdWxhdGUgbGF0L2xvbiBmcm9tIHh5ICovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciB1LCBkZWx0YXYsIHMsIGQsIGVwcywgcm8sIGZpMTtcbiAgdmFyIG9rO1xuXG4gIC8qIFRyYW5zZm9ybWF0aW9uICovXG4gIC8qIHJldmVydCB5LCB4Ki9cbiAgdmFyIHRtcCA9IHAueDtcbiAgcC54ID0gcC55O1xuICBwLnkgPSB0bXA7XG4gIGlmICghdGhpcy5jemVjaCkge1xuICAgIHAueSAqPSAtMTtcbiAgICBwLnggKj0gLTE7XG4gIH1cbiAgcm8gPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgZXBzID0gTWF0aC5hdGFuMihwLnksIHAueCk7XG4gIGQgPSBlcHMgLyBNYXRoLnNpbih0aGlzLnMwKTtcbiAgcyA9IDIgKiAoTWF0aC5hdGFuKE1hdGgucG93KHRoaXMucm8wIC8gcm8sIDEgLyB0aGlzLm4pICogTWF0aC50YW4odGhpcy5zMCAvIDIgKyB0aGlzLnM0NSkpIC0gdGhpcy5zNDUpO1xuICB1ID0gTWF0aC5hc2luKE1hdGguY29zKHRoaXMuYWQpICogTWF0aC5zaW4ocykgLSBNYXRoLnNpbih0aGlzLmFkKSAqIE1hdGguY29zKHMpICogTWF0aC5jb3MoZCkpO1xuICBkZWx0YXYgPSBNYXRoLmFzaW4oTWF0aC5jb3MocykgKiBNYXRoLnNpbihkKSAvIE1hdGguY29zKHUpKTtcbiAgcC54ID0gdGhpcy5sb25nMCAtIGRlbHRhdiAvIHRoaXMuYWxmYTtcbiAgZmkxID0gdTtcbiAgb2sgPSAwO1xuICB2YXIgaXRlciA9IDA7XG4gIGRvIHtcbiAgICBwLnkgPSAyICogKE1hdGguYXRhbihNYXRoLnBvdyh0aGlzLmssIC0gMSAvIHRoaXMuYWxmYSkgKiBNYXRoLnBvdyhNYXRoLnRhbih1IC8gMiArIHRoaXMuczQ1KSwgMSAvIHRoaXMuYWxmYSkgKiBNYXRoLnBvdygoMSArIHRoaXMuZSAqIE1hdGguc2luKGZpMSkpIC8gKDEgLSB0aGlzLmUgKiBNYXRoLnNpbihmaTEpKSwgdGhpcy5lIC8gMikpIC0gdGhpcy5zNDUpO1xuICAgIGlmIChNYXRoLmFicyhmaTEgLSBwLnkpIDwgMC4wMDAwMDAwMDAxKSB7XG4gICAgICBvayA9IDE7XG4gICAgfVxuICAgIGZpMSA9IHAueTtcbiAgICBpdGVyICs9IDE7XG4gIH0gd2hpbGUgKG9rID09PSAwICYmIGl0ZXIgPCAxNSk7XG4gIGlmIChpdGVyID49IDE1KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKHApO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiS3JvdmFrXCIsIFwia3JvdmFrXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlMCwgZTEsIGUyLCBlMywgcGhpKSB7XG4gIHJldHVybiAoZTAgKiBwaGkgLSBlMSAqIE1hdGguc2luKDIgKiBwaGkpICsgZTIgKiBNYXRoLnNpbig0ICogcGhpKSAtIGUzICogTWF0aC5zaW4oNiAqIHBoaSkpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuICgxIC0gMC4yNSAqIHggKiAoMSArIHggLyAxNiAqICgzICsgMS4yNSAqIHgpKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gKDAuMzc1ICogeCAqICgxICsgMC4yNSAqIHggKiAoMSArIDAuNDY4NzUgKiB4KSkpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuICgwLjA1ODU5Mzc1ICogeCAqIHggKiAoMSArIDAuNzUgKiB4KSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gKHggKiB4ICogeCAqICgzNSAvIDMwNzIpKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBlLCBzaW5waGkpIHtcbiAgdmFyIHRlbXAgPSBlICogc2lucGhpO1xuICByZXR1cm4gYSAvIE1hdGguc3FydCgxIC0gdGVtcCAqIHRlbXApO1xufSIsImltcG9ydCB7SEFMRl9QSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5pbXBvcnQgc2lnbiBmcm9tICcuL3NpZ24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiAoTWF0aC5hYnMoeCkgPCBIQUxGX1BJKSA/IHggOiAoeCAtIChzaWduKHgpICogTWF0aC5QSSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWwsIGUwLCBlMSwgZTIsIGUzKSB7XG4gIHZhciBwaGk7XG4gIHZhciBkcGhpO1xuXG4gIHBoaSA9IG1sIC8gZTA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTU7IGkrKykge1xuICAgIGRwaGkgPSAobWwgLSAoZTAgKiBwaGkgLSBlMSAqIE1hdGguc2luKDIgKiBwaGkpICsgZTIgKiBNYXRoLnNpbig0ICogcGhpKSAtIGUzICogTWF0aC5zaW4oNiAqIHBoaSkpKSAvIChlMCAtIDIgKiBlMSAqIE1hdGguY29zKDIgKiBwaGkpICsgNCAqIGUyICogTWF0aC5jb3MoNCAqIHBoaSkgLSA2ICogZTMgKiBNYXRoLmNvcyg2ICogcGhpKSk7XG4gICAgcGhpICs9IGRwaGk7XG4gICAgaWYgKE1hdGguYWJzKGRwaGkpIDw9IDAuMDAwMDAwMDAwMSkge1xuICAgICAgcmV0dXJuIHBoaTtcbiAgICB9XG4gIH1cblxuICAvLy4ucmVwb3J0RXJyb3IoXCJJTUxGTi1DT05WOkxhdGl0dWRlIGZhaWxlZCB0byBjb252ZXJnZSBhZnRlciAxNSBpdGVyYXRpb25zXCIpO1xuICByZXR1cm4gTmFOO1xufSIsImltcG9ydCBtbGZuIGZyb20gJy4uL2NvbW1vbi9tbGZuJztcbmltcG9ydCBlMGZuIGZyb20gJy4uL2NvbW1vbi9lMGZuJztcbmltcG9ydCBlMWZuIGZyb20gJy4uL2NvbW1vbi9lMWZuJztcbmltcG9ydCBlMmZuIGZyb20gJy4uL2NvbW1vbi9lMmZuJztcbmltcG9ydCBlM2ZuIGZyb20gJy4uL2NvbW1vbi9lM2ZuJztcbmltcG9ydCBnTiBmcm9tICcuLi9jb21tb24vZ04nO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFkanVzdF9sYXQgZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sYXQnO1xuaW1wb3J0IGltbGZuIGZyb20gJy4uL2NvbW1vbi9pbWxmbic7XG5pbXBvcnQge0hBTEZfUEksIEVQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIGlmICghdGhpcy5zcGhlcmUpIHtcbiAgICB0aGlzLmUwID0gZTBmbih0aGlzLmVzKTtcbiAgICB0aGlzLmUxID0gZTFmbih0aGlzLmVzKTtcbiAgICB0aGlzLmUyID0gZTJmbih0aGlzLmVzKTtcbiAgICB0aGlzLmUzID0gZTNmbih0aGlzLmVzKTtcbiAgICB0aGlzLm1sMCA9IHRoaXMuYSAqIG1sZm4odGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMywgdGhpcy5sYXQwKTtcbiAgfVxufVxuXG4vKiBDYXNzaW5pIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG5cbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgdmFyIHgsIHk7XG4gIHZhciBsYW0gPSBwLng7XG4gIHZhciBwaGkgPSBwLnk7XG4gIGxhbSA9IGFkanVzdF9sb24obGFtIC0gdGhpcy5sb25nMCk7XG5cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgeCA9IHRoaXMuYSAqIE1hdGguYXNpbihNYXRoLmNvcyhwaGkpICogTWF0aC5zaW4obGFtKSk7XG4gICAgeSA9IHRoaXMuYSAqIChNYXRoLmF0YW4yKE1hdGgudGFuKHBoaSksIE1hdGguY29zKGxhbSkpIC0gdGhpcy5sYXQwKTtcbiAgfVxuICBlbHNlIHtcbiAgICAvL2VsbGlwc29pZFxuICAgIHZhciBzaW5waGkgPSBNYXRoLnNpbihwaGkpO1xuICAgIHZhciBjb3NwaGkgPSBNYXRoLmNvcyhwaGkpO1xuICAgIHZhciBubCA9IGdOKHRoaXMuYSwgdGhpcy5lLCBzaW5waGkpO1xuICAgIHZhciB0bCA9IE1hdGgudGFuKHBoaSkgKiBNYXRoLnRhbihwaGkpO1xuICAgIHZhciBhbCA9IGxhbSAqIE1hdGguY29zKHBoaSk7XG4gICAgdmFyIGFzcSA9IGFsICogYWw7XG4gICAgdmFyIGNsID0gdGhpcy5lcyAqIGNvc3BoaSAqIGNvc3BoaSAvICgxIC0gdGhpcy5lcyk7XG4gICAgdmFyIG1sID0gdGhpcy5hICogbWxmbih0aGlzLmUwLCB0aGlzLmUxLCB0aGlzLmUyLCB0aGlzLmUzLCBwaGkpO1xuXG4gICAgeCA9IG5sICogYWwgKiAoMSAtIGFzcSAqIHRsICogKDEgLyA2IC0gKDggLSB0bCArIDggKiBjbCkgKiBhc3EgLyAxMjApKTtcbiAgICB5ID0gbWwgLSB0aGlzLm1sMCArIG5sICogc2lucGhpIC8gY29zcGhpICogYXNxICogKDAuNSArICg1IC0gdGwgKyA2ICogY2wpICogYXNxIC8gMjQpO1xuXG5cbiAgfVxuXG4gIHAueCA9IHggKyB0aGlzLngwO1xuICBwLnkgPSB5ICsgdGhpcy55MDtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIEludmVyc2UgZXF1YXRpb25zXG4gIC0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSAtPSB0aGlzLnkwO1xuICB2YXIgeCA9IHAueCAvIHRoaXMuYTtcbiAgdmFyIHkgPSBwLnkgLyB0aGlzLmE7XG4gIHZhciBwaGksIGxhbTtcblxuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICB2YXIgZGQgPSB5ICsgdGhpcy5sYXQwO1xuICAgIHBoaSA9IE1hdGguYXNpbihNYXRoLnNpbihkZCkgKiBNYXRoLmNvcyh4KSk7XG4gICAgbGFtID0gTWF0aC5hdGFuMihNYXRoLnRhbih4KSwgTWF0aC5jb3MoZGQpKTtcbiAgfVxuICBlbHNlIHtcbiAgICAvKiBlbGxpcHNvaWQgKi9cbiAgICB2YXIgbWwxID0gdGhpcy5tbDAgLyB0aGlzLmEgKyB5O1xuICAgIHZhciBwaGkxID0gaW1sZm4obWwxLCB0aGlzLmUwLCB0aGlzLmUxLCB0aGlzLmUyLCB0aGlzLmUzKTtcbiAgICBpZiAoTWF0aC5hYnMoTWF0aC5hYnMocGhpMSkgLSBIQUxGX1BJKSA8PSBFUFNMTikge1xuICAgICAgcC54ID0gdGhpcy5sb25nMDtcbiAgICAgIHAueSA9IEhBTEZfUEk7XG4gICAgICBpZiAoeSA8IDApIHtcbiAgICAgICAgcC55ICo9IC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIHZhciBubDEgPSBnTih0aGlzLmEsIHRoaXMuZSwgTWF0aC5zaW4ocGhpMSkpO1xuXG4gICAgdmFyIHJsMSA9IG5sMSAqIG5sMSAqIG5sMSAvIHRoaXMuYSAvIHRoaXMuYSAqICgxIC0gdGhpcy5lcyk7XG4gICAgdmFyIHRsMSA9IE1hdGgucG93KE1hdGgudGFuKHBoaTEpLCAyKTtcbiAgICB2YXIgZGwgPSB4ICogdGhpcy5hIC8gbmwxO1xuICAgIHZhciBkc3EgPSBkbCAqIGRsO1xuICAgIHBoaSA9IHBoaTEgLSBubDEgKiBNYXRoLnRhbihwaGkxKSAvIHJsMSAqIGRsICogZGwgKiAoMC41IC0gKDEgKyAzICogdGwxKSAqIGRsICogZGwgLyAyNCk7XG4gICAgbGFtID0gZGwgKiAoMSAtIGRzcSAqICh0bDEgLyAzICsgKDEgKyAzICogdGwxKSAqIHRsMSAqIGRzcSAvIDE1KSkgLyBNYXRoLmNvcyhwaGkxKTtcblxuICB9XG5cbiAgcC54ID0gYWRqdXN0X2xvbihsYW0gKyB0aGlzLmxvbmcwKTtcbiAgcC55ID0gYWRqdXN0X2xhdChwaGkpO1xuICByZXR1cm4gcDtcblxufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiQ2Fzc2luaVwiLCBcIkNhc3NpbmlfU29sZG5lclwiLCBcImNhc3NcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGVjY2VudCwgc2lucGhpKSB7XG4gIHZhciBjb247XG4gIGlmIChlY2NlbnQgPiAxLjBlLTcpIHtcbiAgICBjb24gPSBlY2NlbnQgKiBzaW5waGk7XG4gICAgcmV0dXJuICgoMSAtIGVjY2VudCAqIGVjY2VudCkgKiAoc2lucGhpIC8gKDEgLSBjb24gKiBjb24pIC0gKDAuNSAvIGVjY2VudCkgKiBNYXRoLmxvZygoMSAtIGNvbikgLyAoMSArIGNvbikpKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuICgyICogc2lucGhpKTtcbiAgfVxufSIsIlxuaW1wb3J0IHtIQUxGX1BJLCBFUFNMTiwgRk9SVFBJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuaW1wb3J0IHFzZm56IGZyb20gJy4uL2NvbW1vbi9xc2Zueic7XG5pbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5cbi8qXG4gIHJlZmVyZW5jZVxuICAgIFwiTmV3IEVxdWFsLUFyZWEgTWFwIFByb2plY3Rpb25zIGZvciBOb25jaXJjdWxhciBSZWdpb25zXCIsIEpvaG4gUC4gU255ZGVyLFxuICAgIFRoZSBBbWVyaWNhbiBDYXJ0b2dyYXBoZXIsIFZvbCAxNSwgTm8uIDQsIE9jdG9iZXIgMTk4OCwgcHAuIDM0MS0zNTUuXG4gICovXG5cbmV4cG9ydCB2YXIgU19QT0xFID0gMTtcblxuZXhwb3J0IHZhciBOX1BPTEUgPSAyO1xuZXhwb3J0IHZhciBFUVVJVCA9IDM7XG5leHBvcnQgdmFyIE9CTElRID0gNDtcblxuLyogSW5pdGlhbGl6ZSB0aGUgTGFtYmVydCBBemltdXRoYWwgRXF1YWwgQXJlYSBwcm9qZWN0aW9uXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdmFyIHQgPSBNYXRoLmFicyh0aGlzLmxhdDApO1xuICBpZiAoTWF0aC5hYnModCAtIEhBTEZfUEkpIDwgRVBTTE4pIHtcbiAgICB0aGlzLm1vZGUgPSB0aGlzLmxhdDAgPCAwID8gdGhpcy5TX1BPTEUgOiB0aGlzLk5fUE9MRTtcbiAgfVxuICBlbHNlIGlmIChNYXRoLmFicyh0KSA8IEVQU0xOKSB7XG4gICAgdGhpcy5tb2RlID0gdGhpcy5FUVVJVDtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLm1vZGUgPSB0aGlzLk9CTElRO1xuICB9XG4gIGlmICh0aGlzLmVzID4gMCkge1xuICAgIHZhciBzaW5waGk7XG5cbiAgICB0aGlzLnFwID0gcXNmbnoodGhpcy5lLCAxKTtcbiAgICB0aGlzLm1tZiA9IDAuNSAvICgxIC0gdGhpcy5lcyk7XG4gICAgdGhpcy5hcGEgPSBhdXRoc2V0KHRoaXMuZXMpO1xuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgY2FzZSB0aGlzLk5fUE9MRTpcbiAgICAgIHRoaXMuZGQgPSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLlNfUE9MRTpcbiAgICAgIHRoaXMuZGQgPSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLkVRVUlUOlxuICAgICAgdGhpcy5ycSA9IE1hdGguc3FydCgwLjUgKiB0aGlzLnFwKTtcbiAgICAgIHRoaXMuZGQgPSAxIC8gdGhpcy5ycTtcbiAgICAgIHRoaXMueG1mID0gMTtcbiAgICAgIHRoaXMueW1mID0gMC41ICogdGhpcy5xcDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdGhpcy5PQkxJUTpcbiAgICAgIHRoaXMucnEgPSBNYXRoLnNxcnQoMC41ICogdGhpcy5xcCk7XG4gICAgICBzaW5waGkgPSBNYXRoLnNpbih0aGlzLmxhdDApO1xuICAgICAgdGhpcy5zaW5iMSA9IHFzZm56KHRoaXMuZSwgc2lucGhpKSAvIHRoaXMucXA7XG4gICAgICB0aGlzLmNvc2IxID0gTWF0aC5zcXJ0KDEgLSB0aGlzLnNpbmIxICogdGhpcy5zaW5iMSk7XG4gICAgICB0aGlzLmRkID0gTWF0aC5jb3ModGhpcy5sYXQwKSAvIChNYXRoLnNxcnQoMSAtIHRoaXMuZXMgKiBzaW5waGkgKiBzaW5waGkpICogdGhpcy5ycSAqIHRoaXMuY29zYjEpO1xuICAgICAgdGhpcy55bWYgPSAodGhpcy54bWYgPSB0aGlzLnJxKSAvIHRoaXMuZGQ7XG4gICAgICB0aGlzLnhtZiAqPSB0aGlzLmRkO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIGlmICh0aGlzLm1vZGUgPT09IHRoaXMuT0JMSVEpIHtcbiAgICAgIHRoaXMuc2lucGgwID0gTWF0aC5zaW4odGhpcy5sYXQwKTtcbiAgICAgIHRoaXMuY29zcGgwID0gTWF0aC5jb3ModGhpcy5sYXQwKTtcbiAgICB9XG4gIH1cbn1cblxuLyogTGFtYmVydCBBemltdXRoYWwgRXF1YWwgQXJlYSBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuXG4gIC8qIEZvcndhcmQgZXF1YXRpb25zXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIHZhciB4LCB5LCBjb3NsYW0sIHNpbmxhbSwgc2lucGhpLCBxLCBzaW5iLCBjb3NiLCBiLCBjb3NwaGk7XG4gIHZhciBsYW0gPSBwLng7XG4gIHZhciBwaGkgPSBwLnk7XG5cbiAgbGFtID0gYWRqdXN0X2xvbihsYW0gLSB0aGlzLmxvbmcwKTtcbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgc2lucGhpID0gTWF0aC5zaW4ocGhpKTtcbiAgICBjb3NwaGkgPSBNYXRoLmNvcyhwaGkpO1xuICAgIGNvc2xhbSA9IE1hdGguY29zKGxhbSk7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gdGhpcy5PQkxJUSB8fCB0aGlzLm1vZGUgPT09IHRoaXMuRVFVSVQpIHtcbiAgICAgIHkgPSAodGhpcy5tb2RlID09PSB0aGlzLkVRVUlUKSA/IDEgKyBjb3NwaGkgKiBjb3NsYW0gOiAxICsgdGhpcy5zaW5waDAgKiBzaW5waGkgKyB0aGlzLmNvc3BoMCAqIGNvc3BoaSAqIGNvc2xhbTtcbiAgICAgIGlmICh5IDw9IEVQU0xOKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgeSA9IE1hdGguc3FydCgyIC8geSk7XG4gICAgICB4ID0geSAqIGNvc3BoaSAqIE1hdGguc2luKGxhbSk7XG4gICAgICB5ICo9ICh0aGlzLm1vZGUgPT09IHRoaXMuRVFVSVQpID8gc2lucGhpIDogdGhpcy5jb3NwaDAgKiBzaW5waGkgLSB0aGlzLnNpbnBoMCAqIGNvc3BoaSAqIGNvc2xhbTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5tb2RlID09PSB0aGlzLk5fUE9MRSB8fCB0aGlzLm1vZGUgPT09IHRoaXMuU19QT0xFKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk5fUE9MRSkge1xuICAgICAgICBjb3NsYW0gPSAtY29zbGFtO1xuICAgICAgfVxuICAgICAgaWYgKE1hdGguYWJzKHBoaSArIHRoaXMubGF0MCkgPCBFUFNMTikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHkgPSBGT1JUUEkgLSBwaGkgKiAwLjU7XG4gICAgICB5ID0gMiAqICgodGhpcy5tb2RlID09PSB0aGlzLlNfUE9MRSkgPyBNYXRoLmNvcyh5KSA6IE1hdGguc2luKHkpKTtcbiAgICAgIHggPSB5ICogTWF0aC5zaW4obGFtKTtcbiAgICAgIHkgKj0gY29zbGFtO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBzaW5iID0gMDtcbiAgICBjb3NiID0gMDtcbiAgICBiID0gMDtcbiAgICBjb3NsYW0gPSBNYXRoLmNvcyhsYW0pO1xuICAgIHNpbmxhbSA9IE1hdGguc2luKGxhbSk7XG4gICAgc2lucGhpID0gTWF0aC5zaW4ocGhpKTtcbiAgICBxID0gcXNmbnoodGhpcy5lLCBzaW5waGkpO1xuICAgIGlmICh0aGlzLm1vZGUgPT09IHRoaXMuT0JMSVEgfHwgdGhpcy5tb2RlID09PSB0aGlzLkVRVUlUKSB7XG4gICAgICBzaW5iID0gcSAvIHRoaXMucXA7XG4gICAgICBjb3NiID0gTWF0aC5zcXJ0KDEgLSBzaW5iICogc2luYik7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgY2FzZSB0aGlzLk9CTElROlxuICAgICAgYiA9IDEgKyB0aGlzLnNpbmIxICogc2luYiArIHRoaXMuY29zYjEgKiBjb3NiICogY29zbGFtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLkVRVUlUOlxuICAgICAgYiA9IDEgKyBjb3NiICogY29zbGFtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLk5fUE9MRTpcbiAgICAgIGIgPSBIQUxGX1BJICsgcGhpO1xuICAgICAgcSA9IHRoaXMucXAgLSBxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLlNfUE9MRTpcbiAgICAgIGIgPSBwaGkgLSBIQUxGX1BJO1xuICAgICAgcSA9IHRoaXMucXAgKyBxO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChNYXRoLmFicyhiKSA8IEVQU0xOKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICBjYXNlIHRoaXMuT0JMSVE6XG4gICAgY2FzZSB0aGlzLkVRVUlUOlxuICAgICAgYiA9IE1hdGguc3FydCgyIC8gYik7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk9CTElRKSB7XG4gICAgICAgIHkgPSB0aGlzLnltZiAqIGIgKiAodGhpcy5jb3NiMSAqIHNpbmIgLSB0aGlzLnNpbmIxICogY29zYiAqIGNvc2xhbSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgeSA9IChiID0gTWF0aC5zcXJ0KDIgLyAoMSArIGNvc2IgKiBjb3NsYW0pKSkgKiBzaW5iICogdGhpcy55bWY7XG4gICAgICB9XG4gICAgICB4ID0gdGhpcy54bWYgKiBiICogY29zYiAqIHNpbmxhbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdGhpcy5OX1BPTEU6XG4gICAgY2FzZSB0aGlzLlNfUE9MRTpcbiAgICAgIGlmIChxID49IDApIHtcbiAgICAgICAgeCA9IChiID0gTWF0aC5zcXJ0KHEpKSAqIHNpbmxhbTtcbiAgICAgICAgeSA9IGNvc2xhbSAqICgodGhpcy5tb2RlID09PSB0aGlzLlNfUE9MRSkgPyBiIDogLWIpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHggPSB5ID0gMDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHAueCA9IHRoaXMuYSAqIHggKyB0aGlzLngwO1xuICBwLnkgPSB0aGlzLmEgKiB5ICsgdGhpcy55MDtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIEludmVyc2UgZXF1YXRpb25zXG4gIC0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSAtPSB0aGlzLnkwO1xuICB2YXIgeCA9IHAueCAvIHRoaXMuYTtcbiAgdmFyIHkgPSBwLnkgLyB0aGlzLmE7XG4gIHZhciBsYW0sIHBoaSwgY0NlLCBzQ2UsIHEsIHJobywgYWI7XG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIHZhciBjb3N6ID0gMCxcbiAgICAgIHJoLCBzaW56ID0gMDtcblxuICAgIHJoID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgIHBoaSA9IHJoICogMC41O1xuICAgIGlmIChwaGkgPiAxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcGhpID0gMiAqIE1hdGguYXNpbihwaGkpO1xuICAgIGlmICh0aGlzLm1vZGUgPT09IHRoaXMuT0JMSVEgfHwgdGhpcy5tb2RlID09PSB0aGlzLkVRVUlUKSB7XG4gICAgICBzaW56ID0gTWF0aC5zaW4ocGhpKTtcbiAgICAgIGNvc3ogPSBNYXRoLmNvcyhwaGkpO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgIGNhc2UgdGhpcy5FUVVJVDpcbiAgICAgIHBoaSA9IChNYXRoLmFicyhyaCkgPD0gRVBTTE4pID8gMCA6IE1hdGguYXNpbih5ICogc2lueiAvIHJoKTtcbiAgICAgIHggKj0gc2luejtcbiAgICAgIHkgPSBjb3N6ICogcmg7XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRoaXMuT0JMSVE6XG4gICAgICBwaGkgPSAoTWF0aC5hYnMocmgpIDw9IEVQU0xOKSA/IHRoaXMubGF0MCA6IE1hdGguYXNpbihjb3N6ICogdGhpcy5zaW5waDAgKyB5ICogc2lueiAqIHRoaXMuY29zcGgwIC8gcmgpO1xuICAgICAgeCAqPSBzaW56ICogdGhpcy5jb3NwaDA7XG4gICAgICB5ID0gKGNvc3ogLSBNYXRoLnNpbihwaGkpICogdGhpcy5zaW5waDApICogcmg7XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRoaXMuTl9QT0xFOlxuICAgICAgeSA9IC15O1xuICAgICAgcGhpID0gSEFMRl9QSSAtIHBoaTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdGhpcy5TX1BPTEU6XG4gICAgICBwaGkgLT0gSEFMRl9QSTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBsYW0gPSAoeSA9PT0gMCAmJiAodGhpcy5tb2RlID09PSB0aGlzLkVRVUlUIHx8IHRoaXMubW9kZSA9PT0gdGhpcy5PQkxJUSkpID8gMCA6IE1hdGguYXRhbjIoeCwgeSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgYWIgPSAwO1xuICAgIGlmICh0aGlzLm1vZGUgPT09IHRoaXMuT0JMSVEgfHwgdGhpcy5tb2RlID09PSB0aGlzLkVRVUlUKSB7XG4gICAgICB4IC89IHRoaXMuZGQ7XG4gICAgICB5ICo9IHRoaXMuZGQ7XG4gICAgICByaG8gPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgICBpZiAocmhvIDwgRVBTTE4pIHtcbiAgICAgICAgcC54ID0gdGhpcy5sb25nMDtcbiAgICAgICAgcC55ID0gdGhpcy5sYXQwO1xuICAgICAgICByZXR1cm4gcDtcbiAgICAgIH1cbiAgICAgIHNDZSA9IDIgKiBNYXRoLmFzaW4oMC41ICogcmhvIC8gdGhpcy5ycSk7XG4gICAgICBjQ2UgPSBNYXRoLmNvcyhzQ2UpO1xuICAgICAgeCAqPSAoc0NlID0gTWF0aC5zaW4oc0NlKSk7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk9CTElRKSB7XG4gICAgICAgIGFiID0gY0NlICogdGhpcy5zaW5iMSArIHkgKiBzQ2UgKiB0aGlzLmNvc2IxIC8gcmhvO1xuICAgICAgICBxID0gdGhpcy5xcCAqIGFiO1xuICAgICAgICB5ID0gcmhvICogdGhpcy5jb3NiMSAqIGNDZSAtIHkgKiB0aGlzLnNpbmIxICogc0NlO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGFiID0geSAqIHNDZSAvIHJobztcbiAgICAgICAgcSA9IHRoaXMucXAgKiBhYjtcbiAgICAgICAgeSA9IHJobyAqIGNDZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5tb2RlID09PSB0aGlzLk5fUE9MRSB8fCB0aGlzLm1vZGUgPT09IHRoaXMuU19QT0xFKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk5fUE9MRSkge1xuICAgICAgICB5ID0gLXk7XG4gICAgICB9XG4gICAgICBxID0gKHggKiB4ICsgeSAqIHkpO1xuICAgICAgaWYgKCFxKSB7XG4gICAgICAgIHAueCA9IHRoaXMubG9uZzA7XG4gICAgICAgIHAueSA9IHRoaXMubGF0MDtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgICB9XG4gICAgICBhYiA9IDEgLSBxIC8gdGhpcy5xcDtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IHRoaXMuU19QT0xFKSB7XG4gICAgICAgIGFiID0gLWFiO1xuICAgICAgfVxuICAgIH1cbiAgICBsYW0gPSBNYXRoLmF0YW4yKHgsIHkpO1xuICAgIHBoaSA9IGF1dGhsYXQoTWF0aC5hc2luKGFiKSwgdGhpcy5hcGEpO1xuICB9XG5cbiAgcC54ID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgbGFtKTtcbiAgcC55ID0gcGhpO1xuICByZXR1cm4gcDtcbn1cblxuLyogZGV0ZXJtaW5lIGxhdGl0dWRlIGZyb20gYXV0aGFsaWMgbGF0aXR1ZGUgKi9cbnZhciBQMDAgPSAwLjMzMzMzMzMzMzMzMzMzMzMzMzMzO1xuXG52YXIgUDAxID0gMC4xNzIyMjIyMjIyMjIyMjIyMjIyMjtcbnZhciBQMDIgPSAwLjEwMjU3OTM2NTA3OTM2NTA3OTM2O1xudmFyIFAxMCA9IDAuMDYzODg4ODg4ODg4ODg4ODg4ODg7XG52YXIgUDExID0gMC4wNjY0MDIxMTY0MDIxMTY0MDIxMTtcbnZhciBQMjAgPSAwLjAxNjQxNTAxMjk0MjE5MTU0NDQzO1xuXG5mdW5jdGlvbiBhdXRoc2V0KGVzKSB7XG4gIHZhciB0O1xuICB2YXIgQVBBID0gW107XG4gIEFQQVswXSA9IGVzICogUDAwO1xuICB0ID0gZXMgKiBlcztcbiAgQVBBWzBdICs9IHQgKiBQMDE7XG4gIEFQQVsxXSA9IHQgKiBQMTA7XG4gIHQgKj0gZXM7XG4gIEFQQVswXSArPSB0ICogUDAyO1xuICBBUEFbMV0gKz0gdCAqIFAxMTtcbiAgQVBBWzJdID0gdCAqIFAyMDtcbiAgcmV0dXJuIEFQQTtcbn1cblxuZnVuY3Rpb24gYXV0aGxhdChiZXRhLCBBUEEpIHtcbiAgdmFyIHQgPSBiZXRhICsgYmV0YTtcbiAgcmV0dXJuIChiZXRhICsgQVBBWzBdICogTWF0aC5zaW4odCkgKyBBUEFbMV0gKiBNYXRoLnNpbih0ICsgdCkgKyBBUEFbMl0gKiBNYXRoLnNpbih0ICsgdCArIHQpKTtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIkxhbWJlcnQgQXppbXV0aGFsIEVxdWFsIEFyZWFcIiwgXCJMYW1iZXJ0X0F6aW11dGhhbF9FcXVhbF9BcmVhXCIsIFwibGFlYVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzLFxuICBTX1BPTEU6IFNfUE9MRSxcbiAgTl9QT0xFOiBOX1BPTEUsXG4gIEVRVUlUOiBFUVVJVCxcbiAgT0JMSVE6IE9CTElRXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICBpZiAoTWF0aC5hYnMoeCkgPiAxKSB7XG4gICAgeCA9ICh4ID4gMSkgPyAxIDogLTE7XG4gIH1cbiAgcmV0dXJuIE1hdGguYXNpbih4KTtcbn0iLCJpbXBvcnQgbXNmbnogZnJvbSAnLi4vY29tbW9uL21zZm56JztcbmltcG9ydCBxc2ZueiBmcm9tICcuLi9jb21tb24vcXNmbnonO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFzaW56IGZyb20gJy4uL2NvbW1vbi9hc2lueic7XG5pbXBvcnQge0VQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMubGF0MSArIHRoaXMubGF0MikgPCBFUFNMTikge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnRlbXAgPSB0aGlzLmIgLyB0aGlzLmE7XG4gIHRoaXMuZXMgPSAxIC0gTWF0aC5wb3codGhpcy50ZW1wLCAyKTtcbiAgdGhpcy5lMyA9IE1hdGguc3FydCh0aGlzLmVzKTtcblxuICB0aGlzLnNpbl9wbyA9IE1hdGguc2luKHRoaXMubGF0MSk7XG4gIHRoaXMuY29zX3BvID0gTWF0aC5jb3ModGhpcy5sYXQxKTtcbiAgdGhpcy50MSA9IHRoaXMuc2luX3BvO1xuICB0aGlzLmNvbiA9IHRoaXMuc2luX3BvO1xuICB0aGlzLm1zMSA9IG1zZm56KHRoaXMuZTMsIHRoaXMuc2luX3BvLCB0aGlzLmNvc19wbyk7XG4gIHRoaXMucXMxID0gcXNmbnoodGhpcy5lMywgdGhpcy5zaW5fcG8sIHRoaXMuY29zX3BvKTtcblxuICB0aGlzLnNpbl9wbyA9IE1hdGguc2luKHRoaXMubGF0Mik7XG4gIHRoaXMuY29zX3BvID0gTWF0aC5jb3ModGhpcy5sYXQyKTtcbiAgdGhpcy50MiA9IHRoaXMuc2luX3BvO1xuICB0aGlzLm1zMiA9IG1zZm56KHRoaXMuZTMsIHRoaXMuc2luX3BvLCB0aGlzLmNvc19wbyk7XG4gIHRoaXMucXMyID0gcXNmbnoodGhpcy5lMywgdGhpcy5zaW5fcG8sIHRoaXMuY29zX3BvKTtcblxuICB0aGlzLnNpbl9wbyA9IE1hdGguc2luKHRoaXMubGF0MCk7XG4gIHRoaXMuY29zX3BvID0gTWF0aC5jb3ModGhpcy5sYXQwKTtcbiAgdGhpcy50MyA9IHRoaXMuc2luX3BvO1xuICB0aGlzLnFzMCA9IHFzZm56KHRoaXMuZTMsIHRoaXMuc2luX3BvLCB0aGlzLmNvc19wbyk7XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMubGF0MSAtIHRoaXMubGF0MikgPiBFUFNMTikge1xuICAgIHRoaXMubnMwID0gKHRoaXMubXMxICogdGhpcy5tczEgLSB0aGlzLm1zMiAqIHRoaXMubXMyKSAvICh0aGlzLnFzMiAtIHRoaXMucXMxKTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLm5zMCA9IHRoaXMuY29uO1xuICB9XG4gIHRoaXMuYyA9IHRoaXMubXMxICogdGhpcy5tczEgKyB0aGlzLm5zMCAqIHRoaXMucXMxO1xuICB0aGlzLnJoID0gdGhpcy5hICogTWF0aC5zcXJ0KHRoaXMuYyAtIHRoaXMubnMwICogdGhpcy5xczApIC8gdGhpcy5uczA7XG59XG5cbi8qIEFsYmVycyBDb25pY2FsIEVxdWFsIEFyZWEgZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuXG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG5cbiAgdGhpcy5zaW5fcGhpID0gTWF0aC5zaW4obGF0KTtcbiAgdGhpcy5jb3NfcGhpID0gTWF0aC5jb3MobGF0KTtcblxuICB2YXIgcXMgPSBxc2Zueih0aGlzLmUzLCB0aGlzLnNpbl9waGksIHRoaXMuY29zX3BoaSk7XG4gIHZhciByaDEgPSB0aGlzLmEgKiBNYXRoLnNxcnQodGhpcy5jIC0gdGhpcy5uczAgKiBxcykgLyB0aGlzLm5zMDtcbiAgdmFyIHRoZXRhID0gdGhpcy5uczAgKiBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICB2YXIgeCA9IHJoMSAqIE1hdGguc2luKHRoZXRhKSArIHRoaXMueDA7XG4gIHZhciB5ID0gdGhpcy5yaCAtIHJoMSAqIE1hdGguY29zKHRoZXRhKSArIHRoaXMueTA7XG5cbiAgcC54ID0geDtcbiAgcC55ID0geTtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIHJoMSwgcXMsIGNvbiwgdGhldGEsIGxvbiwgbGF0O1xuXG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgPSB0aGlzLnJoIC0gcC55ICsgdGhpcy55MDtcbiAgaWYgKHRoaXMubnMwID49IDApIHtcbiAgICByaDEgPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgICBjb24gPSAxO1xuICB9XG4gIGVsc2Uge1xuICAgIHJoMSA9IC1NYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgICBjb24gPSAtMTtcbiAgfVxuICB0aGV0YSA9IDA7XG4gIGlmIChyaDEgIT09IDApIHtcbiAgICB0aGV0YSA9IE1hdGguYXRhbjIoY29uICogcC54LCBjb24gKiBwLnkpO1xuICB9XG4gIGNvbiA9IHJoMSAqIHRoaXMubnMwIC8gdGhpcy5hO1xuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBsYXQgPSBNYXRoLmFzaW4oKHRoaXMuYyAtIGNvbiAqIGNvbikgLyAoMiAqIHRoaXMubnMwKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgcXMgPSAodGhpcy5jIC0gY29uICogY29uKSAvIHRoaXMubnMwO1xuICAgIGxhdCA9IHRoaXMucGhpMXoodGhpcy5lMywgcXMpO1xuICB9XG5cbiAgbG9uID0gYWRqdXN0X2xvbih0aGV0YSAvIHRoaXMubnMwICsgdGhpcy5sb25nMCk7XG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuLyogRnVuY3Rpb24gdG8gY29tcHV0ZSBwaGkxLCB0aGUgbGF0aXR1ZGUgZm9yIHRoZSBpbnZlcnNlIG9mIHRoZVxuICAgQWxiZXJzIENvbmljYWwgRXF1YWwtQXJlYSBwcm9qZWN0aW9uLlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gcGhpMXooZWNjZW50LCBxcykge1xuICB2YXIgc2lucGhpLCBjb3NwaGksIGNvbiwgY29tLCBkcGhpO1xuICB2YXIgcGhpID0gYXNpbnooMC41ICogcXMpO1xuICBpZiAoZWNjZW50IDwgRVBTTE4pIHtcbiAgICByZXR1cm4gcGhpO1xuICB9XG5cbiAgdmFyIGVjY250cyA9IGVjY2VudCAqIGVjY2VudDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMjU7IGkrKykge1xuICAgIHNpbnBoaSA9IE1hdGguc2luKHBoaSk7XG4gICAgY29zcGhpID0gTWF0aC5jb3MocGhpKTtcbiAgICBjb24gPSBlY2NlbnQgKiBzaW5waGk7XG4gICAgY29tID0gMSAtIGNvbiAqIGNvbjtcbiAgICBkcGhpID0gMC41ICogY29tICogY29tIC8gY29zcGhpICogKHFzIC8gKDEgLSBlY2NudHMpIC0gc2lucGhpIC8gY29tICsgMC41IC8gZWNjZW50ICogTWF0aC5sb2coKDEgLSBjb24pIC8gKDEgKyBjb24pKSk7XG4gICAgcGhpID0gcGhpICsgZHBoaTtcbiAgICBpZiAoTWF0aC5hYnMoZHBoaSkgPD0gMWUtNykge1xuICAgICAgcmV0dXJuIHBoaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJBbGJlcnNfQ29uaWNfRXF1YWxfQXJlYVwiLCBcIkFsYmVyc1wiLCBcImFlYVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzLFxuICBwaGkxejogcGhpMXpcbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQgYXNpbnogZnJvbSAnLi4vY29tbW9uL2FzaW56JztcbmltcG9ydCB7RVBTTE59IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG4vKlxuICByZWZlcmVuY2U6XG4gICAgV29sZnJhbSBNYXRod29ybGQgXCJHbm9tb25pYyBQcm9qZWN0aW9uXCJcbiAgICBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL0dub21vbmljUHJvamVjdGlvbi5odG1sXG4gICAgQWNjZXNzZWQ6IDEydGggTm92ZW1iZXIgMjAwOVxuICAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgLyogUGxhY2UgcGFyYW1ldGVycyBpbiBzdGF0aWMgc3RvcmFnZSBmb3IgY29tbW9uIHVzZVxuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIHRoaXMuc2luX3AxNCA9IE1hdGguc2luKHRoaXMubGF0MCk7XG4gIHRoaXMuY29zX3AxNCA9IE1hdGguY29zKHRoaXMubGF0MCk7XG4gIC8vIEFwcHJveGltYXRpb24gZm9yIHByb2plY3RpbmcgcG9pbnRzIHRvIHRoZSBob3Jpem9uIChpbmZpbml0eSlcbiAgdGhpcy5pbmZpbml0eV9kaXN0ID0gMTAwMCAqIHRoaXMuYTtcbiAgdGhpcy5yYyA9IDE7XG59XG5cbi8qIEdub21vbmljIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBzaW5waGksIGNvc3BoaTsgLyogc2luIGFuZCBjb3MgdmFsdWUgICAgICAgICovXG4gIHZhciBkbG9uOyAvKiBkZWx0YSBsb25naXR1ZGUgdmFsdWUgICAgICAqL1xuICB2YXIgY29zbG9uOyAvKiBjb3Mgb2YgbG9uZ2l0dWRlICAgICAgICAqL1xuICB2YXIga3NwOyAvKiBzY2FsZSBmYWN0b3IgICAgICAgICAgKi9cbiAgdmFyIGc7XG4gIHZhciB4LCB5O1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICAvKiBGb3J3YXJkIGVxdWF0aW9uc1xuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0qL1xuICBkbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcblxuICBzaW5waGkgPSBNYXRoLnNpbihsYXQpO1xuICBjb3NwaGkgPSBNYXRoLmNvcyhsYXQpO1xuXG4gIGNvc2xvbiA9IE1hdGguY29zKGRsb24pO1xuICBnID0gdGhpcy5zaW5fcDE0ICogc2lucGhpICsgdGhpcy5jb3NfcDE0ICogY29zcGhpICogY29zbG9uO1xuICBrc3AgPSAxO1xuICBpZiAoKGcgPiAwKSB8fCAoTWF0aC5hYnMoZykgPD0gRVBTTE4pKSB7XG4gICAgeCA9IHRoaXMueDAgKyB0aGlzLmEgKiBrc3AgKiBjb3NwaGkgKiBNYXRoLnNpbihkbG9uKSAvIGc7XG4gICAgeSA9IHRoaXMueTAgKyB0aGlzLmEgKiBrc3AgKiAodGhpcy5jb3NfcDE0ICogc2lucGhpIC0gdGhpcy5zaW5fcDE0ICogY29zcGhpICogY29zbG9uKSAvIGc7XG4gIH1cbiAgZWxzZSB7XG5cbiAgICAvLyBQb2ludCBpcyBpbiB0aGUgb3Bwb3NpbmcgaGVtaXNwaGVyZSBhbmQgaXMgdW5wcm9qZWN0YWJsZVxuICAgIC8vIFdlIHN0aWxsIG5lZWQgdG8gcmV0dXJuIGEgcmVhc29uYWJsZSBwb2ludCwgc28gd2UgcHJvamVjdFxuICAgIC8vIHRvIGluZmluaXR5LCBvbiBhIGJlYXJpbmdcbiAgICAvLyBlcXVpdmFsZW50IHRvIHRoZSBub3J0aGVybiBoZW1pc3BoZXJlIGVxdWl2YWxlbnRcbiAgICAvLyBUaGlzIGlzIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9uIGZvciBzaG9ydCBzaGFwZXMgYW5kIGxpbmVzIHRoYXRcbiAgICAvLyBzdHJhZGRsZSB0aGUgaG9yaXpvbi5cblxuICAgIHggPSB0aGlzLngwICsgdGhpcy5pbmZpbml0eV9kaXN0ICogY29zcGhpICogTWF0aC5zaW4oZGxvbik7XG4gICAgeSA9IHRoaXMueTAgKyB0aGlzLmluZmluaXR5X2Rpc3QgKiAodGhpcy5jb3NfcDE0ICogc2lucGhpIC0gdGhpcy5zaW5fcDE0ICogY29zcGhpICogY29zbG9uKTtcblxuICB9XG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciByaDsgLyogUmhvICovXG4gIHZhciBzaW5jLCBjb3NjO1xuICB2YXIgYztcbiAgdmFyIGxvbiwgbGF0O1xuXG4gIC8qIEludmVyc2UgZXF1YXRpb25zXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIHAueCA9IChwLnggLSB0aGlzLngwKSAvIHRoaXMuYTtcbiAgcC55ID0gKHAueSAtIHRoaXMueTApIC8gdGhpcy5hO1xuXG4gIHAueCAvPSB0aGlzLmswO1xuICBwLnkgLz0gdGhpcy5rMDtcblxuICBpZiAoKHJoID0gTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSkpKSB7XG4gICAgYyA9IE1hdGguYXRhbjIocmgsIHRoaXMucmMpO1xuICAgIHNpbmMgPSBNYXRoLnNpbihjKTtcbiAgICBjb3NjID0gTWF0aC5jb3MoYyk7XG5cbiAgICBsYXQgPSBhc2lueihjb3NjICogdGhpcy5zaW5fcDE0ICsgKHAueSAqIHNpbmMgKiB0aGlzLmNvc19wMTQpIC8gcmgpO1xuICAgIGxvbiA9IE1hdGguYXRhbjIocC54ICogc2luYywgcmggKiB0aGlzLmNvc19wMTQgKiBjb3NjIC0gcC55ICogdGhpcy5zaW5fcDE0ICogc2luYyk7XG4gICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgbG9uKTtcbiAgfVxuICBlbHNlIHtcbiAgICBsYXQgPSB0aGlzLnBoaWMwO1xuICAgIGxvbiA9IDA7XG4gIH1cblxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJnbm9tXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQgcXNmbnogZnJvbSAnLi4vY29tbW9uL3FzZm56JztcbmltcG9ydCBtc2ZueiBmcm9tICcuLi9jb21tb24vbXNmbnonO1xuaW1wb3J0IGlxc2ZueiBmcm9tICcuLi9jb21tb24vaXFzZm56JztcblxuLypcbiAgcmVmZXJlbmNlOlxuICAgIFwiQ2FydG9ncmFwaGljIFByb2plY3Rpb24gUHJvY2VkdXJlcyBmb3IgdGhlIFVOSVggRW52aXJvbm1lbnQtXG4gICAgQSBVc2VyJ3MgTWFudWFsXCIgYnkgR2VyYWxkIEkuIEV2ZW5kZW4sXG4gICAgVVNHUyBPcGVuIEZpbGUgUmVwb3J0IDkwLTI4NGFuZCBSZWxlYXNlIDQgSW50ZXJpbSBSZXBvcnRzICgyMDAzKVxuKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICAvL25vLW9wXG4gIGlmICghdGhpcy5zcGhlcmUpIHtcbiAgICB0aGlzLmswID0gbXNmbnoodGhpcy5lLCBNYXRoLnNpbih0aGlzLmxhdF90cyksIE1hdGguY29zKHRoaXMubGF0X3RzKSk7XG4gIH1cbn1cblxuLyogQ3lsaW5kcmljYWwgRXF1YWwgQXJlYSBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICB2YXIgeCwgeTtcbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgdmFyIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICB4ID0gdGhpcy54MCArIHRoaXMuYSAqIGRsb24gKiBNYXRoLmNvcyh0aGlzLmxhdF90cyk7XG4gICAgeSA9IHRoaXMueTAgKyB0aGlzLmEgKiBNYXRoLnNpbihsYXQpIC8gTWF0aC5jb3ModGhpcy5sYXRfdHMpO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciBxcyA9IHFzZm56KHRoaXMuZSwgTWF0aC5zaW4obGF0KSk7XG4gICAgeCA9IHRoaXMueDAgKyB0aGlzLmEgKiB0aGlzLmswICogZGxvbjtcbiAgICB5ID0gdGhpcy55MCArIHRoaXMuYSAqIHFzICogMC41IC8gdGhpcy5rMDtcbiAgfVxuXG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG4gIHJldHVybiBwO1xufVxuXG4vKiBDeWxpbmRyaWNhbCBFcXVhbCBBcmVhIGludmVyc2UgZXF1YXRpb25zLS1tYXBwaW5nIHgseSB0byBsYXQvbG9uZ1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgLT0gdGhpcy55MDtcbiAgdmFyIGxvbiwgbGF0O1xuXG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIChwLnggLyB0aGlzLmEpIC8gTWF0aC5jb3ModGhpcy5sYXRfdHMpKTtcbiAgICBsYXQgPSBNYXRoLmFzaW4oKHAueSAvIHRoaXMuYSkgKiBNYXRoLmNvcyh0aGlzLmxhdF90cykpO1xuICB9XG4gIGVsc2Uge1xuICAgIGxhdCA9IGlxc2Zueih0aGlzLmUsIDIgKiBwLnkgKiB0aGlzLmswIC8gdGhpcy5hKTtcbiAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBwLnggLyAodGhpcy5hICogdGhpcy5rMCkpO1xuICB9XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiY2VhXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQge0hBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlY2NlbnQsIHEpIHtcbiAgdmFyIHRlbXAgPSAxIC0gKDEgLSBlY2NlbnQgKiBlY2NlbnQpIC8gKDIgKiBlY2NlbnQpICogTWF0aC5sb2coKDEgLSBlY2NlbnQpIC8gKDEgKyBlY2NlbnQpKTtcbiAgaWYgKE1hdGguYWJzKE1hdGguYWJzKHEpIC0gdGVtcCkgPCAxLjBFLTYpIHtcbiAgICBpZiAocSA8IDApIHtcbiAgICAgIHJldHVybiAoLTEgKiBIQUxGX1BJKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gSEFMRl9QSTtcbiAgICB9XG4gIH1cbiAgLy92YXIgcGhpID0gMC41KiBxLygxLWVjY2VudCplY2NlbnQpO1xuICB2YXIgcGhpID0gTWF0aC5hc2luKDAuNSAqIHEpO1xuICB2YXIgZHBoaTtcbiAgdmFyIHNpbl9waGk7XG4gIHZhciBjb3NfcGhpO1xuICB2YXIgY29uO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDMwOyBpKyspIHtcbiAgICBzaW5fcGhpID0gTWF0aC5zaW4ocGhpKTtcbiAgICBjb3NfcGhpID0gTWF0aC5jb3MocGhpKTtcbiAgICBjb24gPSBlY2NlbnQgKiBzaW5fcGhpO1xuICAgIGRwaGkgPSBNYXRoLnBvdygxIC0gY29uICogY29uLCAyKSAvICgyICogY29zX3BoaSkgKiAocSAvICgxIC0gZWNjZW50ICogZWNjZW50KSAtIHNpbl9waGkgLyAoMSAtIGNvbiAqIGNvbikgKyAwLjUgLyBlY2NlbnQgKiBNYXRoLmxvZygoMSAtIGNvbikgLyAoMSArIGNvbikpKTtcbiAgICBwaGkgKz0gZHBoaTtcbiAgICBpZiAoTWF0aC5hYnMoZHBoaSkgPD0gMC4wMDAwMDAwMDAxKSB7XG4gICAgICByZXR1cm4gcGhpO1xuICAgIH1cbiAgfVxuXG4gIC8vY29uc29sZS5sb2coXCJJUVNGTi1DT05WOkxhdGl0dWRlIGZhaWxlZCB0byBjb252ZXJnZSBhZnRlciAzMCBpdGVyYXRpb25zXCIpO1xuICByZXR1cm4gTmFOO1xufVxuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFkanVzdF9sYXQgZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sYXQnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcblxuICB0aGlzLngwID0gdGhpcy54MCB8fCAwO1xuICB0aGlzLnkwID0gdGhpcy55MCB8fCAwO1xuICB0aGlzLmxhdDAgPSB0aGlzLmxhdDAgfHwgMDtcbiAgdGhpcy5sb25nMCA9IHRoaXMubG9uZzAgfHwgMDtcbiAgdGhpcy5sYXRfdHMgPSB0aGlzLmxhdF90cyB8fCAwO1xuICB0aGlzLnRpdGxlID0gdGhpcy50aXRsZSB8fCBcIkVxdWlkaXN0YW50IEN5bGluZHJpY2FsIChQbGF0ZSBDYXJyZSlcIjtcblxuICB0aGlzLnJjID0gTWF0aC5jb3ModGhpcy5sYXRfdHMpO1xufVxuXG4vLyBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG5cbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcblxuICB2YXIgZGxvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHZhciBkbGF0ID0gYWRqdXN0X2xhdChsYXQgLSB0aGlzLmxhdDApO1xuICBwLnggPSB0aGlzLngwICsgKHRoaXMuYSAqIGRsb24gKiB0aGlzLnJjKTtcbiAgcC55ID0gdGhpcy55MCArICh0aGlzLmEgKiBkbGF0KTtcbiAgcmV0dXJuIHA7XG59XG5cbi8vIGludmVyc2UgZXF1YXRpb25zLS1tYXBwaW5nIHgseSB0byBsYXQvbG9uZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcblxuICB2YXIgeCA9IHAueDtcbiAgdmFyIHkgPSBwLnk7XG5cbiAgcC54ID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgKCh4IC0gdGhpcy54MCkgLyAodGhpcy5hICogdGhpcy5yYykpKTtcbiAgcC55ID0gYWRqdXN0X2xhdCh0aGlzLmxhdDAgKyAoKHkgLSB0aGlzLnkwKSAvICh0aGlzLmEpKSk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiRXF1aXJlY3Rhbmd1bGFyXCIsIFwiRXF1aWRpc3RhbnRfQ3lsaW5kcmljYWxcIiwgXCJlcWNcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBlMGZuIGZyb20gJy4uL2NvbW1vbi9lMGZuJztcbmltcG9ydCBlMWZuIGZyb20gJy4uL2NvbW1vbi9lMWZuJztcbmltcG9ydCBlMmZuIGZyb20gJy4uL2NvbW1vbi9lMmZuJztcbmltcG9ydCBlM2ZuIGZyb20gJy4uL2NvbW1vbi9lM2ZuJztcbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmltcG9ydCBhZGp1c3RfbGF0IGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbGF0JztcbmltcG9ydCBtbGZuIGZyb20gJy4uL2NvbW1vbi9tbGZuJztcbmltcG9ydCB7RVBTTE59IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5pbXBvcnQgZ04gZnJvbSAnLi4vY29tbW9uL2dOJztcbnZhciBNQVhfSVRFUiA9IDIwO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgLyogUGxhY2UgcGFyYW1ldGVycyBpbiBzdGF0aWMgc3RvcmFnZSBmb3IgY29tbW9uIHVzZVxuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIHRoaXMudGVtcCA9IHRoaXMuYiAvIHRoaXMuYTtcbiAgdGhpcy5lcyA9IDEgLSBNYXRoLnBvdyh0aGlzLnRlbXAsIDIpOyAvLyBkZXZhaXQgZXRyZSBkYW5zIHRtZXJjLmpzIG1haXMgbiB5IGVzdCBwYXMgZG9uYyBqZSBjb21tZW50ZSBzaW5vbiByZXRvdXIgZGUgdmFsZXVycyBudWxsZXNcbiAgdGhpcy5lID0gTWF0aC5zcXJ0KHRoaXMuZXMpO1xuICB0aGlzLmUwID0gZTBmbih0aGlzLmVzKTtcbiAgdGhpcy5lMSA9IGUxZm4odGhpcy5lcyk7XG4gIHRoaXMuZTIgPSBlMmZuKHRoaXMuZXMpO1xuICB0aGlzLmUzID0gZTNmbih0aGlzLmVzKTtcbiAgdGhpcy5tbDAgPSB0aGlzLmEgKiBtbGZuKHRoaXMuZTAsIHRoaXMuZTEsIHRoaXMuZTIsIHRoaXMuZTMsIHRoaXMubGF0MCk7IC8vc2kgcXVlIGRlcyB6ZXJvcyBsZSBjYWxjdWwgbmUgc2UgZmFpdCBwYXNcbn1cblxuLyogUG9seWNvbmljIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIHZhciB4LCB5LCBlbDtcbiAgdmFyIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICBlbCA9IGRsb24gKiBNYXRoLnNpbihsYXQpO1xuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBpZiAoTWF0aC5hYnMobGF0KSA8PSBFUFNMTikge1xuICAgICAgeCA9IHRoaXMuYSAqIGRsb247XG4gICAgICB5ID0gLTEgKiB0aGlzLmEgKiB0aGlzLmxhdDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgeCA9IHRoaXMuYSAqIE1hdGguc2luKGVsKSAvIE1hdGgudGFuKGxhdCk7XG4gICAgICB5ID0gdGhpcy5hICogKGFkanVzdF9sYXQobGF0IC0gdGhpcy5sYXQwKSArICgxIC0gTWF0aC5jb3MoZWwpKSAvIE1hdGgudGFuKGxhdCkpO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBpZiAoTWF0aC5hYnMobGF0KSA8PSBFUFNMTikge1xuICAgICAgeCA9IHRoaXMuYSAqIGRsb247XG4gICAgICB5ID0gLTEgKiB0aGlzLm1sMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmwgPSBnTih0aGlzLmEsIHRoaXMuZSwgTWF0aC5zaW4obGF0KSkgLyBNYXRoLnRhbihsYXQpO1xuICAgICAgeCA9IG5sICogTWF0aC5zaW4oZWwpO1xuICAgICAgeSA9IHRoaXMuYSAqIG1sZm4odGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMywgbGF0KSAtIHRoaXMubWwwICsgbmwgKiAoMSAtIE1hdGguY29zKGVsKSk7XG4gICAgfVxuXG4gIH1cbiAgcC54ID0geCArIHRoaXMueDA7XG4gIHAueSA9IHkgKyB0aGlzLnkwO1xuICByZXR1cm4gcDtcbn1cblxuLyogSW52ZXJzZSBlcXVhdGlvbnNcbiAgLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgbG9uLCBsYXQsIHgsIHksIGk7XG4gIHZhciBhbCwgYmw7XG4gIHZhciBwaGksIGRwaGk7XG4gIHggPSBwLnggLSB0aGlzLngwO1xuICB5ID0gcC55IC0gdGhpcy55MDtcblxuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBpZiAoTWF0aC5hYnMoeSArIHRoaXMuYSAqIHRoaXMubGF0MCkgPD0gRVBTTE4pIHtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24oeCAvIHRoaXMuYSArIHRoaXMubG9uZzApO1xuICAgICAgbGF0ID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBhbCA9IHRoaXMubGF0MCArIHkgLyB0aGlzLmE7XG4gICAgICBibCA9IHggKiB4IC8gdGhpcy5hIC8gdGhpcy5hICsgYWwgKiBhbDtcbiAgICAgIHBoaSA9IGFsO1xuICAgICAgdmFyIHRhbnBoaTtcbiAgICAgIGZvciAoaSA9IE1BWF9JVEVSOyBpOyAtLWkpIHtcbiAgICAgICAgdGFucGhpID0gTWF0aC50YW4ocGhpKTtcbiAgICAgICAgZHBoaSA9IC0xICogKGFsICogKHBoaSAqIHRhbnBoaSArIDEpIC0gcGhpIC0gMC41ICogKHBoaSAqIHBoaSArIGJsKSAqIHRhbnBoaSkgLyAoKHBoaSAtIGFsKSAvIHRhbnBoaSAtIDEpO1xuICAgICAgICBwaGkgKz0gZHBoaTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGRwaGkpIDw9IEVQU0xOKSB7XG4gICAgICAgICAgbGF0ID0gcGhpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyAoTWF0aC5hc2luKHggKiBNYXRoLnRhbihwaGkpIC8gdGhpcy5hKSkgLyBNYXRoLnNpbihsYXQpKTtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgaWYgKE1hdGguYWJzKHkgKyB0aGlzLm1sMCkgPD0gRVBTTE4pIHtcbiAgICAgIGxhdCA9IDA7XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyB4IC8gdGhpcy5hKTtcbiAgICB9XG4gICAgZWxzZSB7XG5cbiAgICAgIGFsID0gKHRoaXMubWwwICsgeSkgLyB0aGlzLmE7XG4gICAgICBibCA9IHggKiB4IC8gdGhpcy5hIC8gdGhpcy5hICsgYWwgKiBhbDtcbiAgICAgIHBoaSA9IGFsO1xuICAgICAgdmFyIGNsLCBtbG4sIG1sbnAsIG1hO1xuICAgICAgdmFyIGNvbjtcbiAgICAgIGZvciAoaSA9IE1BWF9JVEVSOyBpOyAtLWkpIHtcbiAgICAgICAgY29uID0gdGhpcy5lICogTWF0aC5zaW4ocGhpKTtcbiAgICAgICAgY2wgPSBNYXRoLnNxcnQoMSAtIGNvbiAqIGNvbikgKiBNYXRoLnRhbihwaGkpO1xuICAgICAgICBtbG4gPSB0aGlzLmEgKiBtbGZuKHRoaXMuZTAsIHRoaXMuZTEsIHRoaXMuZTIsIHRoaXMuZTMsIHBoaSk7XG4gICAgICAgIG1sbnAgPSB0aGlzLmUwIC0gMiAqIHRoaXMuZTEgKiBNYXRoLmNvcygyICogcGhpKSArIDQgKiB0aGlzLmUyICogTWF0aC5jb3MoNCAqIHBoaSkgLSA2ICogdGhpcy5lMyAqIE1hdGguY29zKDYgKiBwaGkpO1xuICAgICAgICBtYSA9IG1sbiAvIHRoaXMuYTtcbiAgICAgICAgZHBoaSA9IChhbCAqIChjbCAqIG1hICsgMSkgLSBtYSAtIDAuNSAqIGNsICogKG1hICogbWEgKyBibCkpIC8gKHRoaXMuZXMgKiBNYXRoLnNpbigyICogcGhpKSAqIChtYSAqIG1hICsgYmwgLSAyICogYWwgKiBtYSkgLyAoNCAqIGNsKSArIChhbCAtIG1hKSAqIChjbCAqIG1sbnAgLSAyIC8gTWF0aC5zaW4oMiAqIHBoaSkpIC0gbWxucCk7XG4gICAgICAgIHBoaSAtPSBkcGhpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoZHBoaSkgPD0gRVBTTE4pIHtcbiAgICAgICAgICBsYXQgPSBwaGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy9sYXQ9cGhpNHoodGhpcy5lLHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsYWwsYmwsMCwwKTtcbiAgICAgIGNsID0gTWF0aC5zcXJ0KDEgLSB0aGlzLmVzICogTWF0aC5wb3coTWF0aC5zaW4obGF0KSwgMikpICogTWF0aC50YW4obGF0KTtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXNpbih4ICogY2wgLyB0aGlzLmEpIC8gTWF0aC5zaW4obGF0KSk7XG4gICAgfVxuICB9XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiUG9seWNvbmljXCIsIFwicG9seVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IHtTRUNfVE9fUkFEfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuLypcbiAgcmVmZXJlbmNlXG4gICAgRGVwYXJ0bWVudCBvZiBMYW5kIGFuZCBTdXJ2ZXkgVGVjaG5pY2FsIENpcmN1bGFyIDE5NzMvMzJcbiAgICAgIGh0dHA6Ly93d3cubGluei5nb3Z0Lm56L2RvY3MvbWlzY2VsbGFuZW91cy9uei1tYXAtZGVmaW5pdGlvbi5wZGZcbiAgICBPU0cgVGVjaG5pY2FsIFJlcG9ydCA0LjFcbiAgICAgIGh0dHA6Ly93d3cubGluei5nb3Z0Lm56L2RvY3MvbWlzY2VsbGFuZW91cy9uem1nLnBkZlxuICAqL1xuXG4vKipcbiAqIGl0ZXJhdGlvbnM6IE51bWJlciBvZiBpdGVyYXRpb25zIHRvIHJlZmluZSBpbnZlcnNlIHRyYW5zZm9ybS5cbiAqICAgICAwIC0+IGttIGFjY3VyYWN5XG4gKiAgICAgMSAtPiBtIGFjY3VyYWN5IC0tIHN1aXRhYmxlIGZvciBtb3N0IG1hcHBpbmcgYXBwbGljYXRpb25zXG4gKiAgICAgMiAtPiBtbSBhY2N1cmFjeVxuICovXG5leHBvcnQgdmFyIGl0ZXJhdGlvbnMgPSAxO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdGhpcy5BID0gW107XG4gIHRoaXMuQVsxXSA9IDAuNjM5OTE3NTA3MztcbiAgdGhpcy5BWzJdID0gLTAuMTM1ODc5NzYxMztcbiAgdGhpcy5BWzNdID0gMC4wNjMyOTQ0MDk7XG4gIHRoaXMuQVs0XSA9IC0wLjAyNTI2ODUzO1xuICB0aGlzLkFbNV0gPSAwLjAxMTc4Nzk7XG4gIHRoaXMuQVs2XSA9IC0wLjAwNTUxNjE7XG4gIHRoaXMuQVs3XSA9IDAuMDAyNjkwNjtcbiAgdGhpcy5BWzhdID0gLTAuMDAxMzMzO1xuICB0aGlzLkFbOV0gPSAwLjAwMDY3O1xuICB0aGlzLkFbMTBdID0gLTAuMDAwMzQ7XG5cbiAgdGhpcy5CX3JlID0gW107XG4gIHRoaXMuQl9pbSA9IFtdO1xuICB0aGlzLkJfcmVbMV0gPSAwLjc1NTc4NTMyMjg7XG4gIHRoaXMuQl9pbVsxXSA9IDA7XG4gIHRoaXMuQl9yZVsyXSA9IDAuMjQ5MjA0NjQ2O1xuICB0aGlzLkJfaW1bMl0gPSAwLjAwMzM3MTUwNztcbiAgdGhpcy5CX3JlWzNdID0gLTAuMDAxNTQxNzM5O1xuICB0aGlzLkJfaW1bM10gPSAwLjA0MTA1ODU2MDtcbiAgdGhpcy5CX3JlWzRdID0gLTAuMTAxNjI5MDc7XG4gIHRoaXMuQl9pbVs0XSA9IDAuMDE3Mjc2MDk7XG4gIHRoaXMuQl9yZVs1XSA9IC0wLjI2NjIzNDg5O1xuICB0aGlzLkJfaW1bNV0gPSAtMC4zNjI0OTIxODtcbiAgdGhpcy5CX3JlWzZdID0gLTAuNjg3MDk4MztcbiAgdGhpcy5CX2ltWzZdID0gLTEuMTY1MTk2NztcblxuICB0aGlzLkNfcmUgPSBbXTtcbiAgdGhpcy5DX2ltID0gW107XG4gIHRoaXMuQ19yZVsxXSA9IDEuMzIzMTI3MDQzOTtcbiAgdGhpcy5DX2ltWzFdID0gMDtcbiAgdGhpcy5DX3JlWzJdID0gLTAuNTc3MjQ1Nzg5O1xuICB0aGlzLkNfaW1bMl0gPSAtMC4wMDc4MDk1OTg7XG4gIHRoaXMuQ19yZVszXSA9IDAuNTA4MzA3NTEzO1xuICB0aGlzLkNfaW1bM10gPSAtMC4xMTIyMDg5NTI7XG4gIHRoaXMuQ19yZVs0XSA9IC0wLjE1MDk0NzYyO1xuICB0aGlzLkNfaW1bNF0gPSAwLjE4MjAwNjAyO1xuICB0aGlzLkNfcmVbNV0gPSAxLjAxNDE4MTc5O1xuICB0aGlzLkNfaW1bNV0gPSAxLjY0NDk3Njk2O1xuICB0aGlzLkNfcmVbNl0gPSAxLjk2NjA1NDk7XG4gIHRoaXMuQ19pbVs2XSA9IDIuNTEyNzY0NTtcblxuICB0aGlzLkQgPSBbXTtcbiAgdGhpcy5EWzFdID0gMS41NjI3MDE0MjQzO1xuICB0aGlzLkRbMl0gPSAwLjUxODU0MDYzOTg7XG4gIHRoaXMuRFszXSA9IC0wLjAzMzMzMDk4O1xuICB0aGlzLkRbNF0gPSAtMC4xMDUyOTA2O1xuICB0aGlzLkRbNV0gPSAtMC4wMzY4NTk0O1xuICB0aGlzLkRbNl0gPSAwLjAwNzMxNztcbiAgdGhpcy5EWzddID0gMC4wMTIyMDtcbiAgdGhpcy5EWzhdID0gMC4wMDM5NDtcbiAgdGhpcy5EWzldID0gLTAuMDAxMztcbn1cblxuLyoqXG4gICAgTmV3IFplYWxhbmQgTWFwIEdyaWQgRm9yd2FyZCAgLSBsb25nL2xhdCB0byB4L3lcbiAgICBsb25nL2xhdCBpbiByYWRpYW5zXG4gICovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBuO1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuXG4gIHZhciBkZWx0YV9sYXQgPSBsYXQgLSB0aGlzLmxhdDA7XG4gIHZhciBkZWx0YV9sb24gPSBsb24gLSB0aGlzLmxvbmcwO1xuXG4gIC8vIDEuIENhbGN1bGF0ZSBkX3BoaSBhbmQgZF9wc2kgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZF9sYW1iZGFcbiAgLy8gRm9yIHRoaXMgYWxnb3JpdGhtLCBkZWx0YV9sYXRpdHVkZSBpcyBpbiBzZWNvbmRzIG9mIGFyYyB4IDEwLTUsIHNvIHdlIG5lZWQgdG8gc2NhbGUgdG8gdGhvc2UgdW5pdHMuIExvbmdpdHVkZSBpcyByYWRpYW5zLlxuICB2YXIgZF9waGkgPSBkZWx0YV9sYXQgLyBTRUNfVE9fUkFEICogMUUtNTtcbiAgdmFyIGRfbGFtYmRhID0gZGVsdGFfbG9uO1xuICB2YXIgZF9waGlfbiA9IDE7IC8vIGRfcGhpXjBcblxuICB2YXIgZF9wc2kgPSAwO1xuICBmb3IgKG4gPSAxOyBuIDw9IDEwOyBuKyspIHtcbiAgICBkX3BoaV9uID0gZF9waGlfbiAqIGRfcGhpO1xuICAgIGRfcHNpID0gZF9wc2kgKyB0aGlzLkFbbl0gKiBkX3BoaV9uO1xuICB9XG5cbiAgLy8gMi4gQ2FsY3VsYXRlIHRoZXRhXG4gIHZhciB0aF9yZSA9IGRfcHNpO1xuICB2YXIgdGhfaW0gPSBkX2xhbWJkYTtcblxuICAvLyAzLiBDYWxjdWxhdGUgelxuICB2YXIgdGhfbl9yZSA9IDE7XG4gIHZhciB0aF9uX2ltID0gMDsgLy8gdGhldGFeMFxuICB2YXIgdGhfbl9yZTE7XG4gIHZhciB0aF9uX2ltMTtcblxuICB2YXIgel9yZSA9IDA7XG4gIHZhciB6X2ltID0gMDtcbiAgZm9yIChuID0gMTsgbiA8PSA2OyBuKyspIHtcbiAgICB0aF9uX3JlMSA9IHRoX25fcmUgKiB0aF9yZSAtIHRoX25faW0gKiB0aF9pbTtcbiAgICB0aF9uX2ltMSA9IHRoX25faW0gKiB0aF9yZSArIHRoX25fcmUgKiB0aF9pbTtcbiAgICB0aF9uX3JlID0gdGhfbl9yZTE7XG4gICAgdGhfbl9pbSA9IHRoX25faW0xO1xuICAgIHpfcmUgPSB6X3JlICsgdGhpcy5CX3JlW25dICogdGhfbl9yZSAtIHRoaXMuQl9pbVtuXSAqIHRoX25faW07XG4gICAgel9pbSA9IHpfaW0gKyB0aGlzLkJfaW1bbl0gKiB0aF9uX3JlICsgdGhpcy5CX3JlW25dICogdGhfbl9pbTtcbiAgfVxuXG4gIC8vIDQuIENhbGN1bGF0ZSBlYXN0aW5nIGFuZCBub3J0aGluZ1xuICBwLnggPSAoel9pbSAqIHRoaXMuYSkgKyB0aGlzLngwO1xuICBwLnkgPSAoel9yZSAqIHRoaXMuYSkgKyB0aGlzLnkwO1xuXG4gIHJldHVybiBwO1xufVxuXG4vKipcbiAgICBOZXcgWmVhbGFuZCBNYXAgR3JpZCBJbnZlcnNlICAtICB4L3kgdG8gbG9uZy9sYXRcbiAgKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIG47XG4gIHZhciB4ID0gcC54O1xuICB2YXIgeSA9IHAueTtcblxuICB2YXIgZGVsdGFfeCA9IHggLSB0aGlzLngwO1xuICB2YXIgZGVsdGFfeSA9IHkgLSB0aGlzLnkwO1xuXG4gIC8vIDEuIENhbGN1bGF0ZSB6XG4gIHZhciB6X3JlID0gZGVsdGFfeSAvIHRoaXMuYTtcbiAgdmFyIHpfaW0gPSBkZWx0YV94IC8gdGhpcy5hO1xuXG4gIC8vIDJhLiBDYWxjdWxhdGUgdGhldGEgLSBmaXJzdCBhcHByb3hpbWF0aW9uIGdpdmVzIGttIGFjY3VyYWN5XG4gIHZhciB6X25fcmUgPSAxO1xuICB2YXIgel9uX2ltID0gMDsgLy8gel4wXG4gIHZhciB6X25fcmUxO1xuICB2YXIgel9uX2ltMTtcblxuICB2YXIgdGhfcmUgPSAwO1xuICB2YXIgdGhfaW0gPSAwO1xuICBmb3IgKG4gPSAxOyBuIDw9IDY7IG4rKykge1xuICAgIHpfbl9yZTEgPSB6X25fcmUgKiB6X3JlIC0gel9uX2ltICogel9pbTtcbiAgICB6X25faW0xID0gel9uX2ltICogel9yZSArIHpfbl9yZSAqIHpfaW07XG4gICAgel9uX3JlID0gel9uX3JlMTtcbiAgICB6X25faW0gPSB6X25faW0xO1xuICAgIHRoX3JlID0gdGhfcmUgKyB0aGlzLkNfcmVbbl0gKiB6X25fcmUgLSB0aGlzLkNfaW1bbl0gKiB6X25faW07XG4gICAgdGhfaW0gPSB0aF9pbSArIHRoaXMuQ19pbVtuXSAqIHpfbl9yZSArIHRoaXMuQ19yZVtuXSAqIHpfbl9pbTtcbiAgfVxuXG4gIC8vIDJiLiBJdGVyYXRlIHRvIHJlZmluZSB0aGUgYWNjdXJhY3kgb2YgdGhlIGNhbGN1bGF0aW9uXG4gIC8vICAgICAgICAwIGl0ZXJhdGlvbnMgZ2l2ZXMga20gYWNjdXJhY3lcbiAgLy8gICAgICAgIDEgaXRlcmF0aW9uIGdpdmVzIG0gYWNjdXJhY3kgLS0gZ29vZCBlbm91Z2ggZm9yIG1vc3QgbWFwcGluZyBhcHBsaWNhdGlvbnNcbiAgLy8gICAgICAgIDIgaXRlcmF0aW9ucyBiaXZlcyBtbSBhY2N1cmFjeVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlcmF0aW9uczsgaSsrKSB7XG4gICAgdmFyIHRoX25fcmUgPSB0aF9yZTtcbiAgICB2YXIgdGhfbl9pbSA9IHRoX2ltO1xuICAgIHZhciB0aF9uX3JlMTtcbiAgICB2YXIgdGhfbl9pbTE7XG5cbiAgICB2YXIgbnVtX3JlID0gel9yZTtcbiAgICB2YXIgbnVtX2ltID0gel9pbTtcbiAgICBmb3IgKG4gPSAyOyBuIDw9IDY7IG4rKykge1xuICAgICAgdGhfbl9yZTEgPSB0aF9uX3JlICogdGhfcmUgLSB0aF9uX2ltICogdGhfaW07XG4gICAgICB0aF9uX2ltMSA9IHRoX25faW0gKiB0aF9yZSArIHRoX25fcmUgKiB0aF9pbTtcbiAgICAgIHRoX25fcmUgPSB0aF9uX3JlMTtcbiAgICAgIHRoX25faW0gPSB0aF9uX2ltMTtcbiAgICAgIG51bV9yZSA9IG51bV9yZSArIChuIC0gMSkgKiAodGhpcy5CX3JlW25dICogdGhfbl9yZSAtIHRoaXMuQl9pbVtuXSAqIHRoX25faW0pO1xuICAgICAgbnVtX2ltID0gbnVtX2ltICsgKG4gLSAxKSAqICh0aGlzLkJfaW1bbl0gKiB0aF9uX3JlICsgdGhpcy5CX3JlW25dICogdGhfbl9pbSk7XG4gICAgfVxuXG4gICAgdGhfbl9yZSA9IDE7XG4gICAgdGhfbl9pbSA9IDA7XG4gICAgdmFyIGRlbl9yZSA9IHRoaXMuQl9yZVsxXTtcbiAgICB2YXIgZGVuX2ltID0gdGhpcy5CX2ltWzFdO1xuICAgIGZvciAobiA9IDI7IG4gPD0gNjsgbisrKSB7XG4gICAgICB0aF9uX3JlMSA9IHRoX25fcmUgKiB0aF9yZSAtIHRoX25faW0gKiB0aF9pbTtcbiAgICAgIHRoX25faW0xID0gdGhfbl9pbSAqIHRoX3JlICsgdGhfbl9yZSAqIHRoX2ltO1xuICAgICAgdGhfbl9yZSA9IHRoX25fcmUxO1xuICAgICAgdGhfbl9pbSA9IHRoX25faW0xO1xuICAgICAgZGVuX3JlID0gZGVuX3JlICsgbiAqICh0aGlzLkJfcmVbbl0gKiB0aF9uX3JlIC0gdGhpcy5CX2ltW25dICogdGhfbl9pbSk7XG4gICAgICBkZW5faW0gPSBkZW5faW0gKyBuICogKHRoaXMuQl9pbVtuXSAqIHRoX25fcmUgKyB0aGlzLkJfcmVbbl0gKiB0aF9uX2ltKTtcbiAgICB9XG5cbiAgICAvLyBDb21wbGV4IGRpdmlzaW9uXG4gICAgdmFyIGRlbjIgPSBkZW5fcmUgKiBkZW5fcmUgKyBkZW5faW0gKiBkZW5faW07XG4gICAgdGhfcmUgPSAobnVtX3JlICogZGVuX3JlICsgbnVtX2ltICogZGVuX2ltKSAvIGRlbjI7XG4gICAgdGhfaW0gPSAobnVtX2ltICogZGVuX3JlIC0gbnVtX3JlICogZGVuX2ltKSAvIGRlbjI7XG4gIH1cblxuICAvLyAzLiBDYWxjdWxhdGUgZF9waGkgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBkX2xhbWJkYVxuICB2YXIgZF9wc2kgPSB0aF9yZTtcbiAgdmFyIGRfbGFtYmRhID0gdGhfaW07XG4gIHZhciBkX3BzaV9uID0gMTsgLy8gZF9wc2leMFxuXG4gIHZhciBkX3BoaSA9IDA7XG4gIGZvciAobiA9IDE7IG4gPD0gOTsgbisrKSB7XG4gICAgZF9wc2lfbiA9IGRfcHNpX24gKiBkX3BzaTtcbiAgICBkX3BoaSA9IGRfcGhpICsgdGhpcy5EW25dICogZF9wc2lfbjtcbiAgfVxuXG4gIC8vIDQuIENhbGN1bGF0ZSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlXG4gIC8vIGRfcGhpIGlzIGNhbGN1YXRlZCBpbiBzZWNvbmQgb2YgYXJjICogMTBeLTUsIHNvIHdlIG5lZWQgdG8gc2NhbGUgYmFjayB0byByYWRpYW5zLiBkX2xhbWJkYSBpcyBpbiByYWRpYW5zLlxuICB2YXIgbGF0ID0gdGhpcy5sYXQwICsgKGRfcGhpICogU0VDX1RPX1JBRCAqIDFFNSk7XG4gIHZhciBsb24gPSB0aGlzLmxvbmcwICsgZF9sYW1iZGE7XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG5cbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJOZXdfWmVhbGFuZF9NYXBfR3JpZFwiLCBcIm56bWdcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcblxuLypcbiAgcmVmZXJlbmNlXG4gICAgXCJOZXcgRXF1YWwtQXJlYSBNYXAgUHJvamVjdGlvbnMgZm9yIE5vbmNpcmN1bGFyIFJlZ2lvbnNcIiwgSm9obiBQLiBTbnlkZXIsXG4gICAgVGhlIEFtZXJpY2FuIENhcnRvZ3JhcGhlciwgVm9sIDE1LCBOby4gNCwgT2N0b2JlciAxOTg4LCBwcC4gMzQxLTM1NS5cbiAgKi9cblxuXG4vKiBJbml0aWFsaXplIHRoZSBNaWxsZXIgQ3lsaW5kcmljYWwgcHJvamVjdGlvblxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICAvL25vLW9wXG59XG5cbi8qIE1pbGxlciBDeWxpbmRyaWNhbCBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICAvKiBGb3J3YXJkIGVxdWF0aW9uc1xuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0qL1xuICB2YXIgZGxvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHZhciB4ID0gdGhpcy54MCArIHRoaXMuYSAqIGRsb247XG4gIHZhciB5ID0gdGhpcy55MCArIHRoaXMuYSAqIE1hdGgubG9nKE1hdGgudGFuKChNYXRoLlBJIC8gNCkgKyAobGF0IC8gMi41KSkpICogMS4yNTtcblxuICBwLnggPSB4O1xuICBwLnkgPSB5O1xuICByZXR1cm4gcDtcbn1cblxuLyogTWlsbGVyIEN5bGluZHJpY2FsIGludmVyc2UgZXF1YXRpb25zLS1tYXBwaW5nIHgseSB0byBsYXQvbG9uZ1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgLT0gdGhpcy55MDtcblxuICB2YXIgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgcC54IC8gdGhpcy5hKTtcbiAgdmFyIGxhdCA9IDIuNSAqIChNYXRoLmF0YW4oTWF0aC5leHAoMC44ICogcC55IC8gdGhpcy5hKSkgLSBNYXRoLlBJIC8gNCk7XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiTWlsbGVyX0N5bGluZHJpY2FsXCIsIFwibWlsbFwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFkanVzdF9sYXQgZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sYXQnO1xuaW1wb3J0IHBqX2VuZm4gZnJvbSAnLi4vY29tbW9uL3BqX2VuZm4nO1xudmFyIE1BWF9JVEVSID0gMjA7XG5pbXBvcnQgcGpfbWxmbiBmcm9tICcuLi9jb21tb24vcGpfbWxmbic7XG5pbXBvcnQgcGpfaW52X21sZm4gZnJvbSAnLi4vY29tbW9uL3BqX2ludl9tbGZuJztcbmltcG9ydCB7RVBTTE4sIEhBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5pbXBvcnQgYXNpbnogZnJvbSAnLi4vY29tbW9uL2FzaW56JztcblxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgLyogUGxhY2UgcGFyYW1ldGVycyBpbiBzdGF0aWMgc3RvcmFnZSBmb3IgY29tbW9uIHVzZVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cbiAgaWYgKCF0aGlzLnNwaGVyZSkge1xuICAgIHRoaXMuZW4gPSBwal9lbmZuKHRoaXMuZXMpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMubiA9IDE7XG4gICAgdGhpcy5tID0gMDtcbiAgICB0aGlzLmVzID0gMDtcbiAgICB0aGlzLkNfeSA9IE1hdGguc3FydCgodGhpcy5tICsgMSkgLyB0aGlzLm4pO1xuICAgIHRoaXMuQ194ID0gdGhpcy5DX3kgLyAodGhpcy5tICsgMSk7XG4gIH1cblxufVxuXG4vKiBTaW51c29pZGFsIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciB4LCB5O1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICAvKiBGb3J3YXJkIGVxdWF0aW9uc1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcblxuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBpZiAoIXRoaXMubSkge1xuICAgICAgbGF0ID0gdGhpcy5uICE9PSAxID8gTWF0aC5hc2luKHRoaXMubiAqIE1hdGguc2luKGxhdCkpIDogbGF0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBrID0gdGhpcy5uICogTWF0aC5zaW4obGF0KTtcbiAgICAgIGZvciAodmFyIGkgPSBNQVhfSVRFUjsgaTsgLS1pKSB7XG4gICAgICAgIHZhciBWID0gKHRoaXMubSAqIGxhdCArIE1hdGguc2luKGxhdCkgLSBrKSAvICh0aGlzLm0gKyBNYXRoLmNvcyhsYXQpKTtcbiAgICAgICAgbGF0IC09IFY7XG4gICAgICAgIGlmIChNYXRoLmFicyhWKSA8IEVQU0xOKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgeCA9IHRoaXMuYSAqIHRoaXMuQ194ICogbG9uICogKHRoaXMubSArIE1hdGguY29zKGxhdCkpO1xuICAgIHkgPSB0aGlzLmEgKiB0aGlzLkNfeSAqIGxhdDtcblxuICB9XG4gIGVsc2Uge1xuXG4gICAgdmFyIHMgPSBNYXRoLnNpbihsYXQpO1xuICAgIHZhciBjID0gTWF0aC5jb3MobGF0KTtcbiAgICB5ID0gdGhpcy5hICogcGpfbWxmbihsYXQsIHMsIGMsIHRoaXMuZW4pO1xuICAgIHggPSB0aGlzLmEgKiBsb24gKiBjIC8gTWF0aC5zcXJ0KDEgLSB0aGlzLmVzICogcyAqIHMpO1xuICB9XG5cbiAgcC54ID0geDtcbiAgcC55ID0geTtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIGxhdCwgdGVtcCwgbG9uLCBzO1xuXG4gIHAueCAtPSB0aGlzLngwO1xuICBsb24gPSBwLnggLyB0aGlzLmE7XG4gIHAueSAtPSB0aGlzLnkwO1xuICBsYXQgPSBwLnkgLyB0aGlzLmE7XG5cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgbGF0IC89IHRoaXMuQ195O1xuICAgIGxvbiA9IGxvbiAvICh0aGlzLkNfeCAqICh0aGlzLm0gKyBNYXRoLmNvcyhsYXQpKSk7XG4gICAgaWYgKHRoaXMubSkge1xuICAgICAgbGF0ID0gYXNpbnooKHRoaXMubSAqIGxhdCArIE1hdGguc2luKGxhdCkpIC8gdGhpcy5uKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5uICE9PSAxKSB7XG4gICAgICBsYXQgPSBhc2lueihNYXRoLnNpbihsYXQpIC8gdGhpcy5uKTtcbiAgICB9XG4gICAgbG9uID0gYWRqdXN0X2xvbihsb24gKyB0aGlzLmxvbmcwKTtcbiAgICBsYXQgPSBhZGp1c3RfbGF0KGxhdCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgbGF0ID0gcGpfaW52X21sZm4ocC55IC8gdGhpcy5hLCB0aGlzLmVzLCB0aGlzLmVuKTtcbiAgICBzID0gTWF0aC5hYnMobGF0KTtcbiAgICBpZiAocyA8IEhBTEZfUEkpIHtcbiAgICAgIHMgPSBNYXRoLnNpbihsYXQpO1xuICAgICAgdGVtcCA9IHRoaXMubG9uZzAgKyBwLnggKiBNYXRoLnNxcnQoMSAtIHRoaXMuZXMgKiBzICogcykgLyAodGhpcy5hICogTWF0aC5jb3MobGF0KSk7XG4gICAgICAvL3RlbXAgPSB0aGlzLmxvbmcwICsgcC54IC8gKHRoaXMuYSAqIE1hdGguY29zKGxhdCkpO1xuICAgICAgbG9uID0gYWRqdXN0X2xvbih0ZW1wKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKHMgLSBFUFNMTikgPCBIQUxGX1BJKSB7XG4gICAgICBsb24gPSB0aGlzLmxvbmcwO1xuICAgIH1cbiAgfVxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJTaW51c29pZGFsXCIsIFwic2ludVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7fVxuaW1wb3J0IHtFUFNMTn0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG4vKiBNb2xsd2VpZGUgZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG5cbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcblxuICB2YXIgZGVsdGFfbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgdmFyIHRoZXRhID0gbGF0O1xuICB2YXIgY29uID0gTWF0aC5QSSAqIE1hdGguc2luKGxhdCk7XG5cbiAgLyogSXRlcmF0ZSB1c2luZyB0aGUgTmV3dG9uLVJhcGhzb24gbWV0aG9kIHRvIGZpbmQgdGhldGFcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgZGVsdGFfdGhldGEgPSAtKHRoZXRhICsgTWF0aC5zaW4odGhldGEpIC0gY29uKSAvICgxICsgTWF0aC5jb3ModGhldGEpKTtcbiAgICB0aGV0YSArPSBkZWx0YV90aGV0YTtcbiAgICBpZiAoTWF0aC5hYnMoZGVsdGFfdGhldGEpIDwgRVBTTE4pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB0aGV0YSAvPSAyO1xuXG4gIC8qIElmIHRoZSBsYXRpdHVkZSBpcyA5MCBkZWcsIGZvcmNlIHRoZSB4IGNvb3JkaW5hdGUgdG8gYmUgXCIwICsgZmFsc2UgZWFzdGluZ1wiXG4gICAgICAgdGhpcyBpcyBkb25lIGhlcmUgYmVjYXVzZSBvZiBwcmVjaXNpb24gcHJvYmxlbXMgd2l0aCBcImNvcyh0aGV0YSlcIlxuICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgaWYgKE1hdGguUEkgLyAyIC0gTWF0aC5hYnMobGF0KSA8IEVQU0xOKSB7XG4gICAgZGVsdGFfbG9uID0gMDtcbiAgfVxuICB2YXIgeCA9IDAuOTAwMzE2MzE2MTU4ICogdGhpcy5hICogZGVsdGFfbG9uICogTWF0aC5jb3ModGhldGEpICsgdGhpcy54MDtcbiAgdmFyIHkgPSAxLjQxNDIxMzU2MjM3MzEgKiB0aGlzLmEgKiBNYXRoLnNpbih0aGV0YSkgKyB0aGlzLnkwO1xuXG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciB0aGV0YTtcbiAgdmFyIGFyZztcblxuICAvKiBJbnZlcnNlIGVxdWF0aW9uc1xuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0qL1xuICBwLnggLT0gdGhpcy54MDtcbiAgcC55IC09IHRoaXMueTA7XG4gIGFyZyA9IHAueSAvICgxLjQxNDIxMzU2MjM3MzEgKiB0aGlzLmEpO1xuXG4gIC8qIEJlY2F1c2Ugb2YgZGl2aXNpb24gYnkgemVybyBwcm9ibGVtcywgJ2FyZycgY2FuIG5vdCBiZSAxLiAgVGhlcmVmb3JlXG4gICAgICAgYSBudW1iZXIgdmVyeSBjbG9zZSB0byBvbmUgaXMgdXNlZCBpbnN0ZWFkLlxuICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuICBpZiAoTWF0aC5hYnMoYXJnKSA+IDAuOTk5OTk5OTk5OTk5KSB7XG4gICAgYXJnID0gMC45OTk5OTk5OTk5OTk7XG4gIH1cbiAgdGhldGEgPSBNYXRoLmFzaW4oYXJnKTtcbiAgdmFyIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIChwLnggLyAoMC45MDAzMTYzMTYxNTggKiB0aGlzLmEgKiBNYXRoLmNvcyh0aGV0YSkpKSk7XG4gIGlmIChsb24gPCAoLU1hdGguUEkpKSB7XG4gICAgbG9uID0gLU1hdGguUEk7XG4gIH1cbiAgaWYgKGxvbiA+IE1hdGguUEkpIHtcbiAgICBsb24gPSBNYXRoLlBJO1xuICB9XG4gIGFyZyA9ICgyICogdGhldGEgKyBNYXRoLnNpbigyICogdGhldGEpKSAvIE1hdGguUEk7XG4gIGlmIChNYXRoLmFicyhhcmcpID4gMSkge1xuICAgIGFyZyA9IDE7XG4gIH1cbiAgdmFyIGxhdCA9IE1hdGguYXNpbihhcmcpO1xuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIk1vbGx3ZWlkZVwiLCBcIm1vbGxcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBlMGZuIGZyb20gJy4uL2NvbW1vbi9lMGZuJztcbmltcG9ydCBlMWZuIGZyb20gJy4uL2NvbW1vbi9lMWZuJztcbmltcG9ydCBlMmZuIGZyb20gJy4uL2NvbW1vbi9lMmZuJztcbmltcG9ydCBlM2ZuIGZyb20gJy4uL2NvbW1vbi9lM2ZuJztcbmltcG9ydCBtc2ZueiBmcm9tICcuLi9jb21tb24vbXNmbnonO1xuaW1wb3J0IG1sZm4gZnJvbSAnLi4vY29tbW9uL21sZm4nO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFkanVzdF9sYXQgZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sYXQnO1xuaW1wb3J0IGltbGZuIGZyb20gJy4uL2NvbW1vbi9pbWxmbic7XG5pbXBvcnQge0VQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgLyogUGxhY2UgcGFyYW1ldGVycyBpbiBzdGF0aWMgc3RvcmFnZSBmb3IgY29tbW9uIHVzZVxuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIC8vIFN0YW5kYXJkIFBhcmFsbGVscyBjYW5ub3QgYmUgZXF1YWwgYW5kIG9uIG9wcG9zaXRlIHNpZGVzIG9mIHRoZSBlcXVhdG9yXG4gIGlmIChNYXRoLmFicyh0aGlzLmxhdDEgKyB0aGlzLmxhdDIpIDwgRVBTTE4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sYXQyID0gdGhpcy5sYXQyIHx8IHRoaXMubGF0MTtcbiAgdGhpcy50ZW1wID0gdGhpcy5iIC8gdGhpcy5hO1xuICB0aGlzLmVzID0gMSAtIE1hdGgucG93KHRoaXMudGVtcCwgMik7XG4gIHRoaXMuZSA9IE1hdGguc3FydCh0aGlzLmVzKTtcbiAgdGhpcy5lMCA9IGUwZm4odGhpcy5lcyk7XG4gIHRoaXMuZTEgPSBlMWZuKHRoaXMuZXMpO1xuICB0aGlzLmUyID0gZTJmbih0aGlzLmVzKTtcbiAgdGhpcy5lMyA9IGUzZm4odGhpcy5lcyk7XG5cbiAgdGhpcy5zaW5waGkgPSBNYXRoLnNpbih0aGlzLmxhdDEpO1xuICB0aGlzLmNvc3BoaSA9IE1hdGguY29zKHRoaXMubGF0MSk7XG5cbiAgdGhpcy5tczEgPSBtc2Zueih0aGlzLmUsIHRoaXMuc2lucGhpLCB0aGlzLmNvc3BoaSk7XG4gIHRoaXMubWwxID0gbWxmbih0aGlzLmUwLCB0aGlzLmUxLCB0aGlzLmUyLCB0aGlzLmUzLCB0aGlzLmxhdDEpO1xuXG4gIGlmIChNYXRoLmFicyh0aGlzLmxhdDEgLSB0aGlzLmxhdDIpIDwgRVBTTE4pIHtcbiAgICB0aGlzLm5zID0gdGhpcy5zaW5waGk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5zaW5waGkgPSBNYXRoLnNpbih0aGlzLmxhdDIpO1xuICAgIHRoaXMuY29zcGhpID0gTWF0aC5jb3ModGhpcy5sYXQyKTtcbiAgICB0aGlzLm1zMiA9IG1zZm56KHRoaXMuZSwgdGhpcy5zaW5waGksIHRoaXMuY29zcGhpKTtcbiAgICB0aGlzLm1sMiA9IG1sZm4odGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMywgdGhpcy5sYXQyKTtcbiAgICB0aGlzLm5zID0gKHRoaXMubXMxIC0gdGhpcy5tczIpIC8gKHRoaXMubWwyIC0gdGhpcy5tbDEpO1xuICB9XG4gIHRoaXMuZyA9IHRoaXMubWwxICsgdGhpcy5tczEgLyB0aGlzLm5zO1xuICB0aGlzLm1sMCA9IG1sZm4odGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMywgdGhpcy5sYXQwKTtcbiAgdGhpcy5yaCA9IHRoaXMuYSAqICh0aGlzLmcgLSB0aGlzLm1sMCk7XG59XG5cbi8qIEVxdWlkaXN0YW50IENvbmljIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIHZhciByaDE7XG5cbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgcmgxID0gdGhpcy5hICogKHRoaXMuZyAtIGxhdCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdmFyIG1sID0gbWxmbih0aGlzLmUwLCB0aGlzLmUxLCB0aGlzLmUyLCB0aGlzLmUzLCBsYXQpO1xuICAgIHJoMSA9IHRoaXMuYSAqICh0aGlzLmcgLSBtbCk7XG4gIH1cbiAgdmFyIHRoZXRhID0gdGhpcy5ucyAqIGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHZhciB4ID0gdGhpcy54MCArIHJoMSAqIE1hdGguc2luKHRoZXRhKTtcbiAgdmFyIHkgPSB0aGlzLnkwICsgdGhpcy5yaCAtIHJoMSAqIE1hdGguY29zKHRoZXRhKTtcbiAgcC54ID0geDtcbiAgcC55ID0geTtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIEludmVyc2UgZXF1YXRpb25zXG4gIC0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSA9IHRoaXMucmggLSBwLnkgKyB0aGlzLnkwO1xuICB2YXIgY29uLCByaDEsIGxhdCwgbG9uO1xuICBpZiAodGhpcy5ucyA+PSAwKSB7XG4gICAgcmgxID0gTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSk7XG4gICAgY29uID0gMTtcbiAgfVxuICBlbHNlIHtcbiAgICByaDEgPSAtTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSk7XG4gICAgY29uID0gLTE7XG4gIH1cbiAgdmFyIHRoZXRhID0gMDtcbiAgaWYgKHJoMSAhPT0gMCkge1xuICAgIHRoZXRhID0gTWF0aC5hdGFuMihjb24gKiBwLngsIGNvbiAqIHAueSk7XG4gIH1cblxuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyB0aGV0YSAvIHRoaXMubnMpO1xuICAgIGxhdCA9IGFkanVzdF9sYXQodGhpcy5nIC0gcmgxIC8gdGhpcy5hKTtcbiAgICBwLnggPSBsb247XG4gICAgcC55ID0gbGF0O1xuICAgIHJldHVybiBwO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciBtbCA9IHRoaXMuZyAtIHJoMSAvIHRoaXMuYTtcbiAgICBsYXQgPSBpbWxmbihtbCwgdGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMyk7XG4gICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgdGhldGEgLyB0aGlzLm5zKTtcbiAgICBwLnggPSBsb247XG4gICAgcC55ID0gbGF0O1xuICAgIHJldHVybiBwO1xuICB9XG5cbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIkVxdWlkaXN0YW50X0NvbmljXCIsIFwiZXFkY1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG5pbXBvcnQge0hBTEZfUEksIEVQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuaW1wb3J0IGFzaW56IGZyb20gJy4uL2NvbW1vbi9hc2lueic7XG5cbi8qIEluaXRpYWxpemUgdGhlIFZhbiBEZXIgR3JpbnRlbiBwcm9qZWN0aW9uXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIC8vdGhpcy5SID0gNjM3MDk5NzsgLy9SYWRpdXMgb2YgZWFydGhcbiAgdGhpcy5SID0gdGhpcy5hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG5cbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcblxuICAvKiBGb3J3YXJkIGVxdWF0aW9uc1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgdmFyIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICB2YXIgeCwgeTtcblxuICBpZiAoTWF0aC5hYnMobGF0KSA8PSBFUFNMTikge1xuICAgIHggPSB0aGlzLngwICsgdGhpcy5SICogZGxvbjtcbiAgICB5ID0gdGhpcy55MDtcbiAgfVxuICB2YXIgdGhldGEgPSBhc2lueigyICogTWF0aC5hYnMobGF0IC8gTWF0aC5QSSkpO1xuICBpZiAoKE1hdGguYWJzKGRsb24pIDw9IEVQU0xOKSB8fCAoTWF0aC5hYnMoTWF0aC5hYnMobGF0KSAtIEhBTEZfUEkpIDw9IEVQU0xOKSkge1xuICAgIHggPSB0aGlzLngwO1xuICAgIGlmIChsYXQgPj0gMCkge1xuICAgICAgeSA9IHRoaXMueTAgKyBNYXRoLlBJICogdGhpcy5SICogTWF0aC50YW4oMC41ICogdGhldGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHkgPSB0aGlzLnkwICsgTWF0aC5QSSAqIHRoaXMuUiAqIC1NYXRoLnRhbigwLjUgKiB0aGV0YSk7XG4gICAgfVxuICAgIC8vICByZXR1cm4oT0spO1xuICB9XG4gIHZhciBhbCA9IDAuNSAqIE1hdGguYWJzKChNYXRoLlBJIC8gZGxvbikgLSAoZGxvbiAvIE1hdGguUEkpKTtcbiAgdmFyIGFzcSA9IGFsICogYWw7XG4gIHZhciBzaW50aCA9IE1hdGguc2luKHRoZXRhKTtcbiAgdmFyIGNvc3RoID0gTWF0aC5jb3ModGhldGEpO1xuXG4gIHZhciBnID0gY29zdGggLyAoc2ludGggKyBjb3N0aCAtIDEpO1xuICB2YXIgZ3NxID0gZyAqIGc7XG4gIHZhciBtID0gZyAqICgyIC8gc2ludGggLSAxKTtcbiAgdmFyIG1zcSA9IG0gKiBtO1xuICB2YXIgY29uID0gTWF0aC5QSSAqIHRoaXMuUiAqIChhbCAqIChnIC0gbXNxKSArIE1hdGguc3FydChhc3EgKiAoZyAtIG1zcSkgKiAoZyAtIG1zcSkgLSAobXNxICsgYXNxKSAqIChnc3EgLSBtc3EpKSkgLyAobXNxICsgYXNxKTtcbiAgaWYgKGRsb24gPCAwKSB7XG4gICAgY29uID0gLWNvbjtcbiAgfVxuICB4ID0gdGhpcy54MCArIGNvbjtcbiAgLy9jb24gPSBNYXRoLmFicyhjb24gLyAoTWF0aC5QSSAqIHRoaXMuUikpO1xuICB2YXIgcSA9IGFzcSArIGc7XG4gIGNvbiA9IE1hdGguUEkgKiB0aGlzLlIgKiAobSAqIHEgLSBhbCAqIE1hdGguc3FydCgobXNxICsgYXNxKSAqIChhc3EgKyAxKSAtIHEgKiBxKSkgLyAobXNxICsgYXNxKTtcbiAgaWYgKGxhdCA+PSAwKSB7XG4gICAgLy95ID0gdGhpcy55MCArIE1hdGguUEkgKiB0aGlzLlIgKiBNYXRoLnNxcnQoMSAtIGNvbiAqIGNvbiAtIDIgKiBhbCAqIGNvbik7XG4gICAgeSA9IHRoaXMueTAgKyBjb247XG4gIH1cbiAgZWxzZSB7XG4gICAgLy95ID0gdGhpcy55MCAtIE1hdGguUEkgKiB0aGlzLlIgKiBNYXRoLnNxcnQoMSAtIGNvbiAqIGNvbiAtIDIgKiBhbCAqIGNvbik7XG4gICAgeSA9IHRoaXMueTAgLSBjb247XG4gIH1cbiAgcC54ID0geDtcbiAgcC55ID0geTtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIFZhbiBEZXIgR3JpbnRlbiBpbnZlcnNlIGVxdWF0aW9ucy0tbWFwcGluZyB4LHkgdG8gbGF0L2xvbmdcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIGxvbiwgbGF0O1xuICB2YXIgeHgsIHl5LCB4eXMsIGMxLCBjMiwgYzM7XG4gIHZhciBhMTtcbiAgdmFyIG0xO1xuICB2YXIgY29uO1xuICB2YXIgdGgxO1xuICB2YXIgZDtcblxuICAvKiBpbnZlcnNlIGVxdWF0aW9uc1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSAtPSB0aGlzLnkwO1xuICBjb24gPSBNYXRoLlBJICogdGhpcy5SO1xuICB4eCA9IHAueCAvIGNvbjtcbiAgeXkgPSBwLnkgLyBjb247XG4gIHh5cyA9IHh4ICogeHggKyB5eSAqIHl5O1xuICBjMSA9IC1NYXRoLmFicyh5eSkgKiAoMSArIHh5cyk7XG4gIGMyID0gYzEgLSAyICogeXkgKiB5eSArIHh4ICogeHg7XG4gIGMzID0gLTIgKiBjMSArIDEgKyAyICogeXkgKiB5eSArIHh5cyAqIHh5cztcbiAgZCA9IHl5ICogeXkgLyBjMyArICgyICogYzIgKiBjMiAqIGMyIC8gYzMgLyBjMyAvIGMzIC0gOSAqIGMxICogYzIgLyBjMyAvIGMzKSAvIDI3O1xuICBhMSA9IChjMSAtIGMyICogYzIgLyAzIC8gYzMpIC8gYzM7XG4gIG0xID0gMiAqIE1hdGguc3FydCgtYTEgLyAzKTtcbiAgY29uID0gKCgzICogZCkgLyBhMSkgLyBtMTtcbiAgaWYgKE1hdGguYWJzKGNvbikgPiAxKSB7XG4gICAgaWYgKGNvbiA+PSAwKSB7XG4gICAgICBjb24gPSAxO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbiA9IC0xO1xuICAgIH1cbiAgfVxuICB0aDEgPSBNYXRoLmFjb3MoY29uKSAvIDM7XG4gIGlmIChwLnkgPj0gMCkge1xuICAgIGxhdCA9ICgtbTEgKiBNYXRoLmNvcyh0aDEgKyBNYXRoLlBJIC8gMykgLSBjMiAvIDMgLyBjMykgKiBNYXRoLlBJO1xuICB9XG4gIGVsc2Uge1xuICAgIGxhdCA9IC0oLW0xICogTWF0aC5jb3ModGgxICsgTWF0aC5QSSAvIDMpIC0gYzIgLyAzIC8gYzMpICogTWF0aC5QSTtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyh4eCkgPCBFUFNMTikge1xuICAgIGxvbiA9IHRoaXMubG9uZzA7XG4gIH1cbiAgZWxzZSB7XG4gICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5QSSAqICh4eXMgLSAxICsgTWF0aC5zcXJ0KDEgKyAyICogKHh4ICogeHggLSB5eSAqIHl5KSArIHh5cyAqIHh5cykpIC8gMiAvIHh4KTtcbiAgfVxuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIlZhbl9kZXJfR3JpbnRlbl9JXCIsIFwiVmFuRGVyR3JpbnRlblwiLCBcInZhbmRnXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQge0hBTEZfUEksIEVQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuaW1wb3J0IG1sZm4gZnJvbSAnLi4vY29tbW9uL21sZm4nO1xuaW1wb3J0IGUwZm4gZnJvbSAnLi4vY29tbW9uL2UwZm4nO1xuaW1wb3J0IGUxZm4gZnJvbSAnLi4vY29tbW9uL2UxZm4nO1xuaW1wb3J0IGUyZm4gZnJvbSAnLi4vY29tbW9uL2UyZm4nO1xuaW1wb3J0IGUzZm4gZnJvbSAnLi4vY29tbW9uL2UzZm4nO1xuaW1wb3J0IGdOIGZyb20gJy4uL2NvbW1vbi9nTic7XG5pbXBvcnQgYXNpbnogZnJvbSAnLi4vY29tbW9uL2FzaW56JztcbmltcG9ydCBpbWxmbiBmcm9tICcuLi9jb21tb24vaW1sZm4nO1xuXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIHRoaXMuc2luX3AxMiA9IE1hdGguc2luKHRoaXMubGF0MCk7XG4gIHRoaXMuY29zX3AxMiA9IE1hdGguY29zKHRoaXMubGF0MCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcbiAgdmFyIHNpbnBoaSA9IE1hdGguc2luKHAueSk7XG4gIHZhciBjb3NwaGkgPSBNYXRoLmNvcyhwLnkpO1xuICB2YXIgZGxvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHZhciBlMCwgZTEsIGUyLCBlMywgTWxwLCBNbCwgdGFucGhpLCBObDEsIE5sLCBwc2ksIEF6LCBHLCBILCBHSCwgSHMsIGMsIGtwLCBjb3NfYywgcywgczIsIHMzLCBzNCwgczU7XG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIGlmIChNYXRoLmFicyh0aGlzLnNpbl9wMTIgLSAxKSA8PSBFUFNMTikge1xuICAgICAgLy9Ob3J0aCBQb2xlIGNhc2VcbiAgICAgIHAueCA9IHRoaXMueDAgKyB0aGlzLmEgKiAoSEFMRl9QSSAtIGxhdCkgKiBNYXRoLnNpbihkbG9uKTtcbiAgICAgIHAueSA9IHRoaXMueTAgLSB0aGlzLmEgKiAoSEFMRl9QSSAtIGxhdCkgKiBNYXRoLmNvcyhkbG9uKTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLnNpbl9wMTIgKyAxKSA8PSBFUFNMTikge1xuICAgICAgLy9Tb3V0aCBQb2xlIGNhc2VcbiAgICAgIHAueCA9IHRoaXMueDAgKyB0aGlzLmEgKiAoSEFMRl9QSSArIGxhdCkgKiBNYXRoLnNpbihkbG9uKTtcbiAgICAgIHAueSA9IHRoaXMueTAgKyB0aGlzLmEgKiAoSEFMRl9QSSArIGxhdCkgKiBNYXRoLmNvcyhkbG9uKTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vZGVmYXVsdCBjYXNlXG4gICAgICBjb3NfYyA9IHRoaXMuc2luX3AxMiAqIHNpbnBoaSArIHRoaXMuY29zX3AxMiAqIGNvc3BoaSAqIE1hdGguY29zKGRsb24pO1xuICAgICAgYyA9IE1hdGguYWNvcyhjb3NfYyk7XG4gICAgICBrcCA9IGMgPyBjIC8gTWF0aC5zaW4oYykgOiAxO1xuICAgICAgcC54ID0gdGhpcy54MCArIHRoaXMuYSAqIGtwICogY29zcGhpICogTWF0aC5zaW4oZGxvbik7XG4gICAgICBwLnkgPSB0aGlzLnkwICsgdGhpcy5hICoga3AgKiAodGhpcy5jb3NfcDEyICogc2lucGhpIC0gdGhpcy5zaW5fcDEyICogY29zcGhpICogTWF0aC5jb3MoZGxvbikpO1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIGUwID0gZTBmbih0aGlzLmVzKTtcbiAgICBlMSA9IGUxZm4odGhpcy5lcyk7XG4gICAgZTIgPSBlMmZuKHRoaXMuZXMpO1xuICAgIGUzID0gZTNmbih0aGlzLmVzKTtcbiAgICBpZiAoTWF0aC5hYnModGhpcy5zaW5fcDEyIC0gMSkgPD0gRVBTTE4pIHtcbiAgICAgIC8vTm9ydGggUG9sZSBjYXNlXG4gICAgICBNbHAgPSB0aGlzLmEgKiBtbGZuKGUwLCBlMSwgZTIsIGUzLCBIQUxGX1BJKTtcbiAgICAgIE1sID0gdGhpcy5hICogbWxmbihlMCwgZTEsIGUyLCBlMywgbGF0KTtcbiAgICAgIHAueCA9IHRoaXMueDAgKyAoTWxwIC0gTWwpICogTWF0aC5zaW4oZGxvbik7XG4gICAgICBwLnkgPSB0aGlzLnkwIC0gKE1scCAtIE1sKSAqIE1hdGguY29zKGRsb24pO1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIGVsc2UgaWYgKE1hdGguYWJzKHRoaXMuc2luX3AxMiArIDEpIDw9IEVQU0xOKSB7XG4gICAgICAvL1NvdXRoIFBvbGUgY2FzZVxuICAgICAgTWxwID0gdGhpcy5hICogbWxmbihlMCwgZTEsIGUyLCBlMywgSEFMRl9QSSk7XG4gICAgICBNbCA9IHRoaXMuYSAqIG1sZm4oZTAsIGUxLCBlMiwgZTMsIGxhdCk7XG4gICAgICBwLnggPSB0aGlzLngwICsgKE1scCArIE1sKSAqIE1hdGguc2luKGRsb24pO1xuICAgICAgcC55ID0gdGhpcy55MCArIChNbHAgKyBNbCkgKiBNYXRoLmNvcyhkbG9uKTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vRGVmYXVsdCBjYXNlXG4gICAgICB0YW5waGkgPSBzaW5waGkgLyBjb3NwaGk7XG4gICAgICBObDEgPSBnTih0aGlzLmEsIHRoaXMuZSwgdGhpcy5zaW5fcDEyKTtcbiAgICAgIE5sID0gZ04odGhpcy5hLCB0aGlzLmUsIHNpbnBoaSk7XG4gICAgICBwc2kgPSBNYXRoLmF0YW4oKDEgLSB0aGlzLmVzKSAqIHRhbnBoaSArIHRoaXMuZXMgKiBObDEgKiB0aGlzLnNpbl9wMTIgLyAoTmwgKiBjb3NwaGkpKTtcbiAgICAgIEF6ID0gTWF0aC5hdGFuMihNYXRoLnNpbihkbG9uKSwgdGhpcy5jb3NfcDEyICogTWF0aC50YW4ocHNpKSAtIHRoaXMuc2luX3AxMiAqIE1hdGguY29zKGRsb24pKTtcbiAgICAgIGlmIChBeiA9PT0gMCkge1xuICAgICAgICBzID0gTWF0aC5hc2luKHRoaXMuY29zX3AxMiAqIE1hdGguc2luKHBzaSkgLSB0aGlzLnNpbl9wMTIgKiBNYXRoLmNvcyhwc2kpKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKE1hdGguYWJzKE1hdGguYWJzKEF6KSAtIE1hdGguUEkpIDw9IEVQU0xOKSB7XG4gICAgICAgIHMgPSAtTWF0aC5hc2luKHRoaXMuY29zX3AxMiAqIE1hdGguc2luKHBzaSkgLSB0aGlzLnNpbl9wMTIgKiBNYXRoLmNvcyhwc2kpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzID0gTWF0aC5hc2luKE1hdGguc2luKGRsb24pICogTWF0aC5jb3MocHNpKSAvIE1hdGguc2luKEF6KSk7XG4gICAgICB9XG4gICAgICBHID0gdGhpcy5lICogdGhpcy5zaW5fcDEyIC8gTWF0aC5zcXJ0KDEgLSB0aGlzLmVzKTtcbiAgICAgIEggPSB0aGlzLmUgKiB0aGlzLmNvc19wMTIgKiBNYXRoLmNvcyhBeikgLyBNYXRoLnNxcnQoMSAtIHRoaXMuZXMpO1xuICAgICAgR0ggPSBHICogSDtcbiAgICAgIEhzID0gSCAqIEg7XG4gICAgICBzMiA9IHMgKiBzO1xuICAgICAgczMgPSBzMiAqIHM7XG4gICAgICBzNCA9IHMzICogcztcbiAgICAgIHM1ID0gczQgKiBzO1xuICAgICAgYyA9IE5sMSAqIHMgKiAoMSAtIHMyICogSHMgKiAoMSAtIEhzKSAvIDYgKyBzMyAvIDggKiBHSCAqICgxIC0gMiAqIEhzKSArIHM0IC8gMTIwICogKEhzICogKDQgLSA3ICogSHMpIC0gMyAqIEcgKiBHICogKDEgLSA3ICogSHMpKSAtIHM1IC8gNDggKiBHSCk7XG4gICAgICBwLnggPSB0aGlzLngwICsgYyAqIE1hdGguc2luKEF6KTtcbiAgICAgIHAueSA9IHRoaXMueTAgKyBjICogTWF0aC5jb3MoQXopO1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9XG5cblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgLT0gdGhpcy55MDtcbiAgdmFyIHJoLCB6LCBzaW56LCBjb3N6LCBsb24sIGxhdCwgY29uLCBlMCwgZTEsIGUyLCBlMywgTWxwLCBNLCBOMSwgcHNpLCBBeiwgY29zQXosIHRtcCwgQSwgQiwgRCwgRWUsIEYsIHNpbnBzaTtcbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgcmggPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgICBpZiAocmggPiAoMiAqIEhBTEZfUEkgKiB0aGlzLmEpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHogPSByaCAvIHRoaXMuYTtcblxuICAgIHNpbnogPSBNYXRoLnNpbih6KTtcbiAgICBjb3N6ID0gTWF0aC5jb3Moeik7XG5cbiAgICBsb24gPSB0aGlzLmxvbmcwO1xuICAgIGlmIChNYXRoLmFicyhyaCkgPD0gRVBTTE4pIHtcbiAgICAgIGxhdCA9IHRoaXMubGF0MDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBsYXQgPSBhc2lueihjb3N6ICogdGhpcy5zaW5fcDEyICsgKHAueSAqIHNpbnogKiB0aGlzLmNvc19wMTIpIC8gcmgpO1xuICAgICAgY29uID0gTWF0aC5hYnModGhpcy5sYXQwKSAtIEhBTEZfUEk7XG4gICAgICBpZiAoTWF0aC5hYnMoY29uKSA8PSBFUFNMTikge1xuICAgICAgICBpZiAodGhpcy5sYXQwID49IDApIHtcbiAgICAgICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBNYXRoLmF0YW4yKHAueCwgLSBwLnkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgLSBNYXRoLmF0YW4yKC1wLngsIHAueSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLypjb24gPSBjb3N6IC0gdGhpcy5zaW5fcDEyICogTWF0aC5zaW4obGF0KTtcbiAgICAgICAgaWYgKChNYXRoLmFicyhjb24pIDwgRVBTTE4pICYmIChNYXRoLmFicyhwLngpIDwgRVBTTE4pKSB7XG4gICAgICAgICAgLy9uby1vcCwganVzdCBrZWVwIHRoZSBsb24gdmFsdWUgYXMgaXNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgdGVtcCA9IE1hdGguYXRhbjIoKHAueCAqIHNpbnogKiB0aGlzLmNvc19wMTIpLCAoY29uICogcmgpKTtcbiAgICAgICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBNYXRoLmF0YW4yKChwLnggKiBzaW56ICogdGhpcy5jb3NfcDEyKSwgKGNvbiAqIHJoKSkpO1xuICAgICAgICB9Ki9cbiAgICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLnggKiBzaW56LCByaCAqIHRoaXMuY29zX3AxMiAqIGNvc3ogLSBwLnkgKiB0aGlzLnNpbl9wMTIgKiBzaW56KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcC54ID0gbG9uO1xuICAgIHAueSA9IGxhdDtcbiAgICByZXR1cm4gcDtcbiAgfVxuICBlbHNlIHtcbiAgICBlMCA9IGUwZm4odGhpcy5lcyk7XG4gICAgZTEgPSBlMWZuKHRoaXMuZXMpO1xuICAgIGUyID0gZTJmbih0aGlzLmVzKTtcbiAgICBlMyA9IGUzZm4odGhpcy5lcyk7XG4gICAgaWYgKE1hdGguYWJzKHRoaXMuc2luX3AxMiAtIDEpIDw9IEVQU0xOKSB7XG4gICAgICAvL05vcnRoIHBvbGUgY2FzZVxuICAgICAgTWxwID0gdGhpcy5hICogbWxmbihlMCwgZTEsIGUyLCBlMywgSEFMRl9QSSk7XG4gICAgICByaCA9IE1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpO1xuICAgICAgTSA9IE1scCAtIHJoO1xuICAgICAgbGF0ID0gaW1sZm4oTSAvIHRoaXMuYSwgZTAsIGUxLCBlMiwgZTMpO1xuICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLngsIC0gMSAqIHAueSkpO1xuICAgICAgcC54ID0gbG9uO1xuICAgICAgcC55ID0gbGF0O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIGVsc2UgaWYgKE1hdGguYWJzKHRoaXMuc2luX3AxMiArIDEpIDw9IEVQU0xOKSB7XG4gICAgICAvL1NvdXRoIHBvbGUgY2FzZVxuICAgICAgTWxwID0gdGhpcy5hICogbWxmbihlMCwgZTEsIGUyLCBlMywgSEFMRl9QSSk7XG4gICAgICByaCA9IE1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpO1xuICAgICAgTSA9IHJoIC0gTWxwO1xuXG4gICAgICBsYXQgPSBpbWxmbihNIC8gdGhpcy5hLCBlMCwgZTEsIGUyLCBlMyk7XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBNYXRoLmF0YW4yKHAueCwgcC55KSk7XG4gICAgICBwLnggPSBsb247XG4gICAgICBwLnkgPSBsYXQ7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvL2RlZmF1bHQgY2FzZVxuICAgICAgcmggPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgICAgIEF6ID0gTWF0aC5hdGFuMihwLngsIHAueSk7XG4gICAgICBOMSA9IGdOKHRoaXMuYSwgdGhpcy5lLCB0aGlzLnNpbl9wMTIpO1xuICAgICAgY29zQXogPSBNYXRoLmNvcyhBeik7XG4gICAgICB0bXAgPSB0aGlzLmUgKiB0aGlzLmNvc19wMTIgKiBjb3NBejtcbiAgICAgIEEgPSAtdG1wICogdG1wIC8gKDEgLSB0aGlzLmVzKTtcbiAgICAgIEIgPSAzICogdGhpcy5lcyAqICgxIC0gQSkgKiB0aGlzLnNpbl9wMTIgKiB0aGlzLmNvc19wMTIgKiBjb3NBeiAvICgxIC0gdGhpcy5lcyk7XG4gICAgICBEID0gcmggLyBOMTtcbiAgICAgIEVlID0gRCAtIEEgKiAoMSArIEEpICogTWF0aC5wb3coRCwgMykgLyA2IC0gQiAqICgxICsgMyAqIEEpICogTWF0aC5wb3coRCwgNCkgLyAyNDtcbiAgICAgIEYgPSAxIC0gQSAqIEVlICogRWUgLyAyIC0gRCAqIEVlICogRWUgKiBFZSAvIDY7XG4gICAgICBwc2kgPSBNYXRoLmFzaW4odGhpcy5zaW5fcDEyICogTWF0aC5jb3MoRWUpICsgdGhpcy5jb3NfcDEyICogTWF0aC5zaW4oRWUpICogY29zQXopO1xuICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hc2luKE1hdGguc2luKEF6KSAqIE1hdGguc2luKEVlKSAvIE1hdGguY29zKHBzaSkpKTtcbiAgICAgIHNpbnBzaSA9IE1hdGguc2luKHBzaSk7XG4gICAgICBsYXQgPSBNYXRoLmF0YW4yKChzaW5wc2kgLSB0aGlzLmVzICogRiAqIHRoaXMuc2luX3AxMikgKiBNYXRoLnRhbihwc2kpLCBzaW5wc2kgKiAoMSAtIHRoaXMuZXMpKTtcbiAgICAgIHAueCA9IGxvbjtcbiAgICAgIHAueSA9IGxhdDtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJBemltdXRoYWxfRXF1aWRpc3RhbnRcIiwgXCJhZXFkXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQgYXNpbnogZnJvbSAnLi4vY29tbW9uL2FzaW56JztcbmltcG9ydCB7RVBTTE4sIEhBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgLy9kb3VibGUgdGVtcDsgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgICAgKi9cblxuICAvKiBQbGFjZSBwYXJhbWV0ZXJzIGluIHN0YXRpYyBzdG9yYWdlIGZvciBjb21tb24gdXNlXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgdGhpcy5zaW5fcDE0ID0gTWF0aC5zaW4odGhpcy5sYXQwKTtcbiAgdGhpcy5jb3NfcDE0ID0gTWF0aC5jb3ModGhpcy5sYXQwKTtcbn1cblxuLyogT3J0aG9ncmFwaGljIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBzaW5waGksIGNvc3BoaTsgLyogc2luIGFuZCBjb3MgdmFsdWUgICAgICAgICovXG4gIHZhciBkbG9uOyAvKiBkZWx0YSBsb25naXR1ZGUgdmFsdWUgICAgICAqL1xuICB2YXIgY29zbG9uOyAvKiBjb3Mgb2YgbG9uZ2l0dWRlICAgICAgICAqL1xuICB2YXIga3NwOyAvKiBzY2FsZSBmYWN0b3IgICAgICAgICAgKi9cbiAgdmFyIGcsIHgsIHk7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIC8qIEZvcndhcmQgZXF1YXRpb25zXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuXG4gIHNpbnBoaSA9IE1hdGguc2luKGxhdCk7XG4gIGNvc3BoaSA9IE1hdGguY29zKGxhdCk7XG5cbiAgY29zbG9uID0gTWF0aC5jb3MoZGxvbik7XG4gIGcgPSB0aGlzLnNpbl9wMTQgKiBzaW5waGkgKyB0aGlzLmNvc19wMTQgKiBjb3NwaGkgKiBjb3Nsb247XG4gIGtzcCA9IDE7XG4gIGlmICgoZyA+IDApIHx8IChNYXRoLmFicyhnKSA8PSBFUFNMTikpIHtcbiAgICB4ID0gdGhpcy5hICoga3NwICogY29zcGhpICogTWF0aC5zaW4oZGxvbik7XG4gICAgeSA9IHRoaXMueTAgKyB0aGlzLmEgKiBrc3AgKiAodGhpcy5jb3NfcDE0ICogc2lucGhpIC0gdGhpcy5zaW5fcDE0ICogY29zcGhpICogY29zbG9uKTtcbiAgfVxuICBwLnggPSB4O1xuICBwLnkgPSB5O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgcmg7IC8qIGhlaWdodCBhYm92ZSBlbGxpcHNvaWQgICAgICAqL1xuICB2YXIgejsgLyogYW5nbGUgICAgICAgICAgKi9cbiAgdmFyIHNpbnosIGNvc3o7IC8qIHNpbiBvZiB6IGFuZCBjb3Mgb2YgeiAgICAgICovXG4gIHZhciBjb247XG4gIHZhciBsb24sIGxhdDtcbiAgLyogSW52ZXJzZSBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSAtPSB0aGlzLnkwO1xuICByaCA9IE1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpO1xuICB6ID0gYXNpbnoocmggLyB0aGlzLmEpO1xuXG4gIHNpbnogPSBNYXRoLnNpbih6KTtcbiAgY29zeiA9IE1hdGguY29zKHopO1xuXG4gIGxvbiA9IHRoaXMubG9uZzA7XG4gIGlmIChNYXRoLmFicyhyaCkgPD0gRVBTTE4pIHtcbiAgICBsYXQgPSB0aGlzLmxhdDA7XG4gICAgcC54ID0gbG9uO1xuICAgIHAueSA9IGxhdDtcbiAgICByZXR1cm4gcDtcbiAgfVxuICBsYXQgPSBhc2lueihjb3N6ICogdGhpcy5zaW5fcDE0ICsgKHAueSAqIHNpbnogKiB0aGlzLmNvc19wMTQpIC8gcmgpO1xuICBjb24gPSBNYXRoLmFicyh0aGlzLmxhdDApIC0gSEFMRl9QSTtcbiAgaWYgKE1hdGguYWJzKGNvbikgPD0gRVBTTE4pIHtcbiAgICBpZiAodGhpcy5sYXQwID49IDApIHtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXRhbjIocC54LCAtIHAueSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCAtIE1hdGguYXRhbjIoLXAueCwgcC55KSk7XG4gICAgfVxuICAgIHAueCA9IGxvbjtcbiAgICBwLnkgPSBsYXQ7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMigocC54ICogc2lueiksIHJoICogdGhpcy5jb3NfcDE0ICogY29zeiAtIHAueSAqIHRoaXMuc2luX3AxNCAqIHNpbnopKTtcbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wib3J0aG9cIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsIi8vIFFTQyBwcm9qZWN0aW9uIHJld3JpdHRlbiBmcm9tIHRoZSBvcmlnaW5hbCBQUk9KNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL09TR2VvL3Byb2ouNC9ibG9iL21hc3Rlci9zcmMvUEpfcXNjLmNcblxuaW1wb3J0IHtFUFNMTiwgVFdPX1BJLCBTUEksIEhBTEZfUEksIEZPUlRQSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbi8qIGNvbnN0YW50cyAqL1xudmFyIEZBQ0VfRU5VTSA9IHtcbiAgICBGUk9OVDogMSxcbiAgICBSSUdIVDogMixcbiAgICBCQUNLOiAzLFxuICAgIExFRlQ6IDQsXG4gICAgVE9QOiA1LFxuICAgIEJPVFRPTTogNlxufTtcblxudmFyIEFSRUFfRU5VTSA9IHtcbiAgICBBUkVBXzA6IDEsXG4gICAgQVJFQV8xOiAyLFxuICAgIEFSRUFfMjogMyxcbiAgICBBUkVBXzM6IDRcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuXG4gIHRoaXMueDAgPSB0aGlzLngwIHx8IDA7XG4gIHRoaXMueTAgPSB0aGlzLnkwIHx8IDA7XG4gIHRoaXMubGF0MCA9IHRoaXMubGF0MCB8fCAwO1xuICB0aGlzLmxvbmcwID0gdGhpcy5sb25nMCB8fCAwO1xuICB0aGlzLmxhdF90cyA9IHRoaXMubGF0X3RzIHx8IDA7XG4gIHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlIHx8IFwiUXVhZHJpbGF0ZXJhbGl6ZWQgU3BoZXJpY2FsIEN1YmVcIjtcblxuICAvKiBEZXRlcm1pbmUgdGhlIGN1YmUgZmFjZSBmcm9tIHRoZSBjZW50ZXIgb2YgcHJvamVjdGlvbi4gKi9cbiAgaWYgKHRoaXMubGF0MCA+PSBIQUxGX1BJIC0gRk9SVFBJIC8gMi4wKSB7XG4gICAgdGhpcy5mYWNlID0gRkFDRV9FTlVNLlRPUDtcbiAgfSBlbHNlIGlmICh0aGlzLmxhdDAgPD0gLShIQUxGX1BJIC0gRk9SVFBJIC8gMi4wKSkge1xuICAgIHRoaXMuZmFjZSA9IEZBQ0VfRU5VTS5CT1RUT007XG4gIH0gZWxzZSBpZiAoTWF0aC5hYnModGhpcy5sb25nMCkgPD0gRk9SVFBJKSB7XG4gICAgdGhpcy5mYWNlID0gRkFDRV9FTlVNLkZST05UO1xuICB9IGVsc2UgaWYgKE1hdGguYWJzKHRoaXMubG9uZzApIDw9IEhBTEZfUEkgKyBGT1JUUEkpIHtcbiAgICB0aGlzLmZhY2UgPSB0aGlzLmxvbmcwID4gMC4wID8gRkFDRV9FTlVNLlJJR0hUIDogRkFDRV9FTlVNLkxFRlQ7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5mYWNlID0gRkFDRV9FTlVNLkJBQ0s7XG4gIH1cblxuICAvKiBGaWxsIGluIHVzZWZ1bCB2YWx1ZXMgZm9yIHRoZSBlbGxpcHNvaWQgPC0+IHNwaGVyZSBzaGlmdFxuICAgKiBkZXNjcmliZWQgaW4gW0xLMTJdLiAqL1xuICBpZiAodGhpcy5lcyAhPT0gMCkge1xuICAgIHRoaXMub25lX21pbnVzX2YgPSAxIC0gKHRoaXMuYSAtIHRoaXMuYikgLyB0aGlzLmE7XG4gICAgdGhpcy5vbmVfbWludXNfZl9zcXVhcmVkID0gdGhpcy5vbmVfbWludXNfZiAqIHRoaXMub25lX21pbnVzX2Y7XG4gIH1cbn1cblxuLy8gUVNDIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIHh5ID0ge3g6IDAsIHk6IDB9O1xuICB2YXIgbGF0LCBsb247XG4gIHZhciB0aGV0YSwgcGhpO1xuICB2YXIgdCwgbXU7XG4gIC8qIG51OyAqL1xuICB2YXIgYXJlYSA9IHt2YWx1ZTogMH07XG5cbiAgLy8gbW92ZSBsb24gYWNjb3JkaW5nIHRvIHByb2plY3Rpb24ncyBsb25cbiAgcC54IC09IHRoaXMubG9uZzA7XG5cbiAgLyogQ29udmVydCB0aGUgZ2VvZGV0aWMgbGF0aXR1ZGUgdG8gYSBnZW9jZW50cmljIGxhdGl0dWRlLlxuICAgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBzaGlmdCBmcm9tIHRoZSBlbGxpcHNvaWQgdG8gdGhlIHNwaGVyZVxuICAgKiBkZXNjcmliZWQgaW4gW0xLMTJdLiAqL1xuICBpZiAodGhpcy5lcyAhPT0gMCkgey8vaWYgKFAtPmVzICE9IDApIHtcbiAgICBsYXQgPSBNYXRoLmF0YW4odGhpcy5vbmVfbWludXNfZl9zcXVhcmVkICogTWF0aC50YW4ocC55KSk7XG4gIH0gZWxzZSB7XG4gICAgbGF0ID0gcC55O1xuICB9XG5cbiAgLyogQ29udmVydCB0aGUgaW5wdXQgbGF0LCBsb24gaW50byB0aGV0YSwgcGhpIGFzIHVzZWQgYnkgUVNDLlxuICAgKiBUaGlzIGRlcGVuZHMgb24gdGhlIGN1YmUgZmFjZSBhbmQgdGhlIGFyZWEgb24gaXQuXG4gICAqIEZvciB0aGUgdG9wIGFuZCBib3R0b20gZmFjZSwgd2UgY2FuIGNvbXB1dGUgdGhldGEgYW5kIHBoaVxuICAgKiBkaXJlY3RseSBmcm9tIHBoaSwgbGFtLiBGb3IgdGhlIG90aGVyIGZhY2VzLCB3ZSBtdXN0IHVzZVxuICAgKiB1bml0IHNwaGVyZSBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgYXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAuICovXG4gIGxvbiA9IHAueDsgLy9sb24gPSBscC5sYW07XG4gIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5UT1ApIHtcbiAgICBwaGkgPSBIQUxGX1BJIC0gbGF0O1xuICAgIGlmIChsb24gPj0gRk9SVFBJICYmIGxvbiA8PSBIQUxGX1BJICsgRk9SVFBJKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMDtcbiAgICAgIHRoZXRhID0gbG9uIC0gSEFMRl9QSTtcbiAgICB9IGVsc2UgaWYgKGxvbiA+IEhBTEZfUEkgKyBGT1JUUEkgfHwgbG9uIDw9IC0oSEFMRl9QSSArIEZPUlRQSSkpIHtcbiAgICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8xO1xuICAgICAgdGhldGEgPSAobG9uID4gMC4wID8gbG9uIC0gU1BJIDogbG9uICsgU1BJKTtcbiAgICB9IGVsc2UgaWYgKGxvbiA+IC0oSEFMRl9QSSArIEZPUlRQSSkgJiYgbG9uIDw9IC1GT1JUUEkpIHtcbiAgICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8yO1xuICAgICAgdGhldGEgPSBsb24gKyBIQUxGX1BJO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMztcbiAgICAgIHRoZXRhID0gbG9uO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5CT1RUT00pIHtcbiAgICBwaGkgPSBIQUxGX1BJICsgbGF0O1xuICAgIGlmIChsb24gPj0gRk9SVFBJICYmIGxvbiA8PSBIQUxGX1BJICsgRk9SVFBJKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMDtcbiAgICAgIHRoZXRhID0gLWxvbiArIEhBTEZfUEk7XG4gICAgfSBlbHNlIGlmIChsb24gPCBGT1JUUEkgJiYgbG9uID49IC1GT1JUUEkpIHtcbiAgICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8xO1xuICAgICAgdGhldGEgPSAtbG9uO1xuICAgIH0gZWxzZSBpZiAobG9uIDwgLUZPUlRQSSAmJiBsb24gPj0gLShIQUxGX1BJICsgRk9SVFBJKSkge1xuICAgICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzI7XG4gICAgICB0aGV0YSA9IC1sb24gLSBIQUxGX1BJO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMztcbiAgICAgIHRoZXRhID0gKGxvbiA+IDAuMCA/IC1sb24gKyBTUEkgOiAtbG9uIC0gU1BJKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHEsIHIsIHM7XG4gICAgdmFyIHNpbmxhdCwgY29zbGF0O1xuICAgIHZhciBzaW5sb24sIGNvc2xvbjtcblxuICAgIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5SSUdIVCkge1xuICAgICAgbG9uID0gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obG9uLCArSEFMRl9QSSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5CQUNLKSB7XG4gICAgICBsb24gPSBxc2Nfc2hpZnRfbG9uX29yaWdpbihsb24sICtTUEkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uTEVGVCkge1xuICAgICAgbG9uID0gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obG9uLCAtSEFMRl9QSSk7XG4gICAgfVxuICAgIHNpbmxhdCA9IE1hdGguc2luKGxhdCk7XG4gICAgY29zbGF0ID0gTWF0aC5jb3MobGF0KTtcbiAgICBzaW5sb24gPSBNYXRoLnNpbihsb24pO1xuICAgIGNvc2xvbiA9IE1hdGguY29zKGxvbik7XG4gICAgcSA9IGNvc2xhdCAqIGNvc2xvbjtcbiAgICByID0gY29zbGF0ICogc2lubG9uO1xuICAgIHMgPSBzaW5sYXQ7XG5cbiAgICBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uRlJPTlQpIHtcbiAgICAgIHBoaSA9IE1hdGguYWNvcyhxKTtcbiAgICAgIHRoZXRhID0gcXNjX2Z3ZF9lcXVhdF9mYWNlX3RoZXRhKHBoaSwgcywgciwgYXJlYSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5SSUdIVCkge1xuICAgICAgcGhpID0gTWF0aC5hY29zKHIpO1xuICAgICAgdGhldGEgPSBxc2NfZndkX2VxdWF0X2ZhY2VfdGhldGEocGhpLCBzLCAtcSwgYXJlYSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5CQUNLKSB7XG4gICAgICBwaGkgPSBNYXRoLmFjb3MoLXEpO1xuICAgICAgdGhldGEgPSBxc2NfZndkX2VxdWF0X2ZhY2VfdGhldGEocGhpLCBzLCAtciwgYXJlYSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5MRUZUKSB7XG4gICAgICBwaGkgPSBNYXRoLmFjb3MoLXIpO1xuICAgICAgdGhldGEgPSBxc2NfZndkX2VxdWF0X2ZhY2VfdGhldGEocGhpLCBzLCBxLCBhcmVhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogSW1wb3NzaWJsZSAqL1xuICAgICAgcGhpID0gdGhldGEgPSAwO1xuICAgICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzA7XG4gICAgfVxuICB9XG5cbiAgLyogQ29tcHV0ZSBtdSBhbmQgbnUgZm9yIHRoZSBhcmVhIG9mIGRlZmluaXRpb24uXG4gICAqIEZvciBtdSwgc2VlIEVxLiAoMy0yMSkgaW4gW09MNzZdLCBidXQgbm90ZSB0aGUgdHlwb3M6XG4gICAqIGNvbXBhcmUgd2l0aCBFcS4gKDMtMTQpLiBGb3IgbnUsIHNlZSBFcS4gKDMtMzgpLiAqL1xuICBtdSA9IE1hdGguYXRhbigoMTIgLyBTUEkpICogKHRoZXRhICsgTWF0aC5hY29zKE1hdGguc2luKHRoZXRhKSAqIE1hdGguY29zKEZPUlRQSSkpIC0gSEFMRl9QSSkpO1xuICB0ID0gTWF0aC5zcXJ0KCgxIC0gTWF0aC5jb3MocGhpKSkgLyAoTWF0aC5jb3MobXUpICogTWF0aC5jb3MobXUpKSAvICgxIC0gTWF0aC5jb3MoTWF0aC5hdGFuKDEgLyBNYXRoLmNvcyh0aGV0YSkpKSkpO1xuXG4gIC8qIEFwcGx5IHRoZSByZXN1bHQgdG8gdGhlIHJlYWwgYXJlYS4gKi9cbiAgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzEpIHtcbiAgICBtdSArPSBIQUxGX1BJO1xuICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzIpIHtcbiAgICBtdSArPSBTUEk7XG4gIH0gZWxzZSBpZiAoYXJlYS52YWx1ZSA9PT0gQVJFQV9FTlVNLkFSRUFfMykge1xuICAgIG11ICs9IDEuNSAqIFNQSTtcbiAgfVxuXG4gIC8qIE5vdyBjb21wdXRlIHgsIHkgZnJvbSBtdSBhbmQgbnUgKi9cbiAgeHkueCA9IHQgKiBNYXRoLmNvcyhtdSk7XG4gIHh5LnkgPSB0ICogTWF0aC5zaW4obXUpO1xuICB4eS54ID0geHkueCAqIHRoaXMuYSArIHRoaXMueDA7XG4gIHh5LnkgPSB4eS55ICogdGhpcy5hICsgdGhpcy55MDtcblxuICBwLnggPSB4eS54O1xuICBwLnkgPSB4eS55O1xuICByZXR1cm4gcDtcbn1cblxuLy8gUVNDIGludmVyc2UgZXF1YXRpb25zLS1tYXBwaW5nIHgseSB0byBsYXQvbG9uZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIGxwID0ge2xhbTogMCwgcGhpOiAwfTtcbiAgdmFyIG11LCBudSwgY29zbXUsIHRhbm51O1xuICB2YXIgdGFudGhldGEsIHRoZXRhLCBjb3NwaGksIHBoaTtcbiAgdmFyIHQ7XG4gIHZhciBhcmVhID0ge3ZhbHVlOiAwfTtcblxuICAvKiBkZS1vZmZzZXQgKi9cbiAgcC54ID0gKHAueCAtIHRoaXMueDApIC8gdGhpcy5hO1xuICBwLnkgPSAocC55IC0gdGhpcy55MCkgLyB0aGlzLmE7XG5cbiAgLyogQ29udmVydCB0aGUgaW5wdXQgeCwgeSB0byB0aGUgbXUgYW5kIG51IGFuZ2xlcyBhcyB1c2VkIGJ5IFFTQy5cbiAgICogVGhpcyBkZXBlbmRzIG9uIHRoZSBhcmVhIG9mIHRoZSBjdWJlIGZhY2UuICovXG4gIG51ID0gTWF0aC5hdGFuKE1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpKTtcbiAgbXUgPSBNYXRoLmF0YW4yKHAueSwgcC54KTtcbiAgaWYgKHAueCA+PSAwLjAgJiYgcC54ID49IE1hdGguYWJzKHAueSkpIHtcbiAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMDtcbiAgfSBlbHNlIGlmIChwLnkgPj0gMC4wICYmIHAueSA+PSBNYXRoLmFicyhwLngpKSB7XG4gICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzE7XG4gICAgbXUgLT0gSEFMRl9QSTtcbiAgfSBlbHNlIGlmIChwLnggPCAwLjAgJiYgLXAueCA+PSBNYXRoLmFicyhwLnkpKSB7XG4gICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzI7XG4gICAgbXUgPSAobXUgPCAwLjAgPyBtdSArIFNQSSA6IG11IC0gU1BJKTtcbiAgfSBlbHNlIHtcbiAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMztcbiAgICBtdSArPSBIQUxGX1BJO1xuICB9XG5cbiAgLyogQ29tcHV0ZSBwaGkgYW5kIHRoZXRhIGZvciB0aGUgYXJlYSBvZiBkZWZpbml0aW9uLlxuICAgKiBUaGUgaW52ZXJzZSBwcm9qZWN0aW9uIGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIG9yaWdpbmFsIHBhcGVyLCBidXQgc29tZVxuICAgKiBnb29kIGhpbnRzIGNhbiBiZSBmb3VuZCBoZXJlIChhcyBvZiAyMDExLTEyLTE0KTpcbiAgICogaHR0cDovL2ZpdHMuZ3NmYy5uYXNhLmdvdi9maXRzYml0cy9zYWYuOTMvc2FmLjkzMDJcbiAgICogKHNlYXJjaCBmb3IgXCJNZXNzYWdlLUlkOiA8OTMwMjE4MTc1OS5BQTI1NDc3IGF0IGZpdHMuY3YubnJhby5lZHU+XCIpICovXG4gIHQgPSAoU1BJIC8gMTIpICogTWF0aC50YW4obXUpO1xuICB0YW50aGV0YSA9IE1hdGguc2luKHQpIC8gKE1hdGguY29zKHQpIC0gKDEgLyBNYXRoLnNxcnQoMikpKTtcbiAgdGhldGEgPSBNYXRoLmF0YW4odGFudGhldGEpO1xuICBjb3NtdSA9IE1hdGguY29zKG11KTtcbiAgdGFubnUgPSBNYXRoLnRhbihudSk7XG4gIGNvc3BoaSA9IDEgLSBjb3NtdSAqIGNvc211ICogdGFubnUgKiB0YW5udSAqICgxIC0gTWF0aC5jb3MoTWF0aC5hdGFuKDEgLyBNYXRoLmNvcyh0aGV0YSkpKSk7XG4gIGlmIChjb3NwaGkgPCAtMSkge1xuICAgIGNvc3BoaSA9IC0xO1xuICB9IGVsc2UgaWYgKGNvc3BoaSA+ICsxKSB7XG4gICAgY29zcGhpID0gKzE7XG4gIH1cblxuICAvKiBBcHBseSB0aGUgcmVzdWx0IHRvIHRoZSByZWFsIGFyZWEgb24gdGhlIGN1YmUgZmFjZS5cbiAgICogRm9yIHRoZSB0b3AgYW5kIGJvdHRvbSBmYWNlLCB3ZSBjYW4gY29tcHV0ZSBwaGkgYW5kIGxhbSBkaXJlY3RseS5cbiAgICogRm9yIHRoZSBvdGhlciBmYWNlcywgd2UgbXVzdCB1c2UgdW5pdCBzcGhlcmUgY2FydGVzaWFuIGNvb3JkaW5hdGVzXG4gICAqIGFzIGFuIGludGVybWVkaWF0ZSBzdGVwLiAqL1xuICBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uVE9QKSB7XG4gICAgcGhpID0gTWF0aC5hY29zKGNvc3BoaSk7XG4gICAgbHAucGhpID0gSEFMRl9QSSAtIHBoaTtcbiAgICBpZiAoYXJlYS52YWx1ZSA9PT0gQVJFQV9FTlVNLkFSRUFfMCkge1xuICAgICAgbHAubGFtID0gdGhldGEgKyBIQUxGX1BJO1xuICAgIH0gZWxzZSBpZiAoYXJlYS52YWx1ZSA9PT0gQVJFQV9FTlVNLkFSRUFfMSkge1xuICAgICAgbHAubGFtID0gKHRoZXRhIDwgMC4wID8gdGhldGEgKyBTUEkgOiB0aGV0YSAtIFNQSSk7XG4gICAgfSBlbHNlIGlmIChhcmVhLnZhbHVlID09PSBBUkVBX0VOVU0uQVJFQV8yKSB7XG4gICAgICBscC5sYW0gPSB0aGV0YSAtIEhBTEZfUEk7XG4gICAgfSBlbHNlIC8qIGFyZWEudmFsdWUgPT0gQVJFQV9FTlVNLkFSRUFfMyAqLyB7XG4gICAgICBscC5sYW0gPSB0aGV0YTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uQk9UVE9NKSB7XG4gICAgcGhpID0gTWF0aC5hY29zKGNvc3BoaSk7XG4gICAgbHAucGhpID0gcGhpIC0gSEFMRl9QSTtcbiAgICBpZiAoYXJlYS52YWx1ZSA9PT0gQVJFQV9FTlVNLkFSRUFfMCkge1xuICAgICAgbHAubGFtID0gLXRoZXRhICsgSEFMRl9QSTtcbiAgICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzEpIHtcbiAgICAgIGxwLmxhbSA9IC10aGV0YTtcbiAgICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzIpIHtcbiAgICAgIGxwLmxhbSA9IC10aGV0YSAtIEhBTEZfUEk7XG4gICAgfSBlbHNlIC8qIGFyZWEudmFsdWUgPT0gQVJFQV9FTlVNLkFSRUFfMyAqLyB7XG4gICAgICBscC5sYW0gPSAodGhldGEgPCAwLjAgPyAtdGhldGEgLSBTUEkgOiAtdGhldGEgKyBTUEkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvKiBDb21wdXRlIHBoaSBhbmQgbGFtIHZpYSBjYXJ0ZXNpYW4gdW5pdCBzcGhlcmUgY29vcmRpbmF0ZXMuICovXG4gICAgdmFyIHEsIHIsIHM7XG4gICAgcSA9IGNvc3BoaTtcbiAgICB0ID0gcSAqIHE7XG4gICAgaWYgKHQgPj0gMSkge1xuICAgICAgcyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSBNYXRoLnNxcnQoMSAtIHQpICogTWF0aC5zaW4odGhldGEpO1xuICAgIH1cbiAgICB0ICs9IHMgKiBzO1xuICAgIGlmICh0ID49IDEpIHtcbiAgICAgIHIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByID0gTWF0aC5zcXJ0KDEgLSB0KTtcbiAgICB9XG4gICAgLyogUm90YXRlIHEscixzIGludG8gdGhlIGNvcnJlY3QgYXJlYS4gKi9cbiAgICBpZiAoYXJlYS52YWx1ZSA9PT0gQVJFQV9FTlVNLkFSRUFfMSkge1xuICAgICAgdCA9IHI7XG4gICAgICByID0gLXM7XG4gICAgICBzID0gdDtcbiAgICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzIpIHtcbiAgICAgIHIgPSAtcjtcbiAgICAgIHMgPSAtcztcbiAgICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzMpIHtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IHM7XG4gICAgICBzID0gLXQ7XG4gICAgfVxuICAgIC8qIFJvdGF0ZSBxLHIscyBpbnRvIHRoZSBjb3JyZWN0IGN1YmUgZmFjZS4gKi9cbiAgICBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uUklHSFQpIHtcbiAgICAgIHQgPSBxO1xuICAgICAgcSA9IC1yO1xuICAgICAgciA9IHQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5CQUNLKSB7XG4gICAgICBxID0gLXE7XG4gICAgICByID0gLXI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5MRUZUKSB7XG4gICAgICB0ID0gcTtcbiAgICAgIHEgPSByO1xuICAgICAgciA9IC10O1xuICAgIH1cbiAgICAvKiBOb3cgY29tcHV0ZSBwaGkgYW5kIGxhbSBmcm9tIHRoZSB1bml0IHNwaGVyZSBjb29yZGluYXRlcy4gKi9cbiAgICBscC5waGkgPSBNYXRoLmFjb3MoLXMpIC0gSEFMRl9QSTtcbiAgICBscC5sYW0gPSBNYXRoLmF0YW4yKHIsIHEpO1xuICAgIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5SSUdIVCkge1xuICAgICAgbHAubGFtID0gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obHAubGFtLCAtSEFMRl9QSSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5CQUNLKSB7XG4gICAgICBscC5sYW0gPSBxc2Nfc2hpZnRfbG9uX29yaWdpbihscC5sYW0sIC1TUEkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uTEVGVCkge1xuICAgICAgbHAubGFtID0gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obHAubGFtLCArSEFMRl9QSSk7XG4gICAgfVxuICB9XG5cbiAgLyogQXBwbHkgdGhlIHNoaWZ0IGZyb20gdGhlIHNwaGVyZSB0byB0aGUgZWxsaXBzb2lkIGFzIGRlc2NyaWJlZFxuICAgKiBpbiBbTEsxMl0uICovXG4gIGlmICh0aGlzLmVzICE9PSAwKSB7XG4gICAgdmFyIGludmVydF9zaWduO1xuICAgIHZhciB0YW5waGksIHhhO1xuICAgIGludmVydF9zaWduID0gKGxwLnBoaSA8IDAgPyAxIDogMCk7XG4gICAgdGFucGhpID0gTWF0aC50YW4obHAucGhpKTtcbiAgICB4YSA9IHRoaXMuYiAvIE1hdGguc3FydCh0YW5waGkgKiB0YW5waGkgKyB0aGlzLm9uZV9taW51c19mX3NxdWFyZWQpO1xuICAgIGxwLnBoaSA9IE1hdGguYXRhbihNYXRoLnNxcnQodGhpcy5hICogdGhpcy5hIC0geGEgKiB4YSkgLyAodGhpcy5vbmVfbWludXNfZiAqIHhhKSk7XG4gICAgaWYgKGludmVydF9zaWduKSB7XG4gICAgICBscC5waGkgPSAtbHAucGhpO1xuICAgIH1cbiAgfVxuXG4gIGxwLmxhbSArPSB0aGlzLmxvbmcwO1xuICBwLnggPSBscC5sYW07XG4gIHAueSA9IGxwLnBoaTtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIEhlbHBlciBmdW5jdGlvbiBmb3IgZm9yd2FyZCBwcm9qZWN0aW9uOiBjb21wdXRlIHRoZSB0aGV0YSBhbmdsZVxuICogYW5kIGRldGVybWluZSB0aGUgYXJlYSBudW1iZXIuICovXG5mdW5jdGlvbiBxc2NfZndkX2VxdWF0X2ZhY2VfdGhldGEocGhpLCB5LCB4LCBhcmVhKSB7XG4gIHZhciB0aGV0YTtcbiAgaWYgKHBoaSA8IEVQU0xOKSB7XG4gICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzA7XG4gICAgdGhldGEgPSAwLjA7XG4gIH0gZWxzZSB7XG4gICAgdGhldGEgPSBNYXRoLmF0YW4yKHksIHgpO1xuICAgIGlmIChNYXRoLmFicyh0aGV0YSkgPD0gRk9SVFBJKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMDtcbiAgICB9IGVsc2UgaWYgKHRoZXRhID4gRk9SVFBJICYmIHRoZXRhIDw9IEhBTEZfUEkgKyBGT1JUUEkpIHtcbiAgICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8xO1xuICAgICAgdGhldGEgLT0gSEFMRl9QSTtcbiAgICB9IGVsc2UgaWYgKHRoZXRhID4gSEFMRl9QSSArIEZPUlRQSSB8fCB0aGV0YSA8PSAtKEhBTEZfUEkgKyBGT1JUUEkpKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMjtcbiAgICAgIHRoZXRhID0gKHRoZXRhID49IDAuMCA/IHRoZXRhIC0gU1BJIDogdGhldGEgKyBTUEkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMztcbiAgICAgIHRoZXRhICs9IEhBTEZfUEk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGV0YTtcbn1cblxuLyogSGVscGVyIGZ1bmN0aW9uOiBzaGlmdCB0aGUgbG9uZ2l0dWRlLiAqL1xuZnVuY3Rpb24gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obG9uLCBvZmZzZXQpIHtcbiAgdmFyIHNsb24gPSBsb24gKyBvZmZzZXQ7XG4gIGlmIChzbG9uIDwgLVNQSSkge1xuICAgIHNsb24gKz0gVFdPX1BJO1xuICB9IGVsc2UgaWYgKHNsb24gPiArU1BJKSB7XG4gICAgc2xvbiAtPSBUV09fUEk7XG4gIH1cbiAgcmV0dXJuIHNsb247XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJRdWFkcmlsYXRlcmFsaXplZCBTcGhlcmljYWwgQ3ViZVwiLCBcIlF1YWRyaWxhdGVyYWxpemVkX1NwaGVyaWNhbF9DdWJlXCIsIFwicXNjXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG5cbiIsIi8vIFJvYmluc29uIHByb2plY3Rpb25cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9PU0dlby9wcm9qLjQvYmxvYi9tYXN0ZXIvc3JjL1BKX3JvYmluLmNcbi8vIFBvbHlub21pYWwgY29lZmljaWVudHMgZnJvbSBodHRwOi8vYXJ0aWNsZS5nbWFuZS5vcmcvZ21hbmUuY29tcC5naXMucHJvai00LmRldmVsLzYwMzlcblxuaW1wb3J0IHtIQUxGX1BJLCBEMlIsIFIyRCwgRVBTTE59IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG52YXIgQ09FRlNfWCA9IFtcbiAgICBbMS4wMDAwLCAyLjIxOTllLTE3LCAtNy4xNTUxNWUtMDUsIDMuMTEwM2UtMDZdLFxuICAgIFswLjk5ODYsIC0wLjAwMDQ4MjI0MywgLTIuNDg5N2UtMDUsIC0xLjMzMDllLTA2XSxcbiAgICBbMC45OTU0LCAtMC4wMDA4MzEwMywgLTQuNDg2MDVlLTA1LCAtOS44NjcwMWUtMDddLFxuICAgIFswLjk5MDAsIC0wLjAwMTM1MzY0LCAtNS45NjYxZS0wNSwgMy42Nzc3ZS0wNl0sXG4gICAgWzAuOTgyMiwgLTAuMDAxNjc0NDIsIC00LjQ5NTQ3ZS0wNiwgLTUuNzI0MTFlLTA2XSxcbiAgICBbMC45NzMwLCAtMC4wMDIxNDg2OCwgLTkuMDM1NzFlLTA1LCAxLjg3MzZlLTA4XSxcbiAgICBbMC45NjAwLCAtMC4wMDMwNTA4NSwgLTkuMDA3NjFlLTA1LCAxLjY0OTE3ZS0wNl0sXG4gICAgWzAuOTQyNywgLTAuMDAzODI3OTIsIC02LjUzMzg2ZS0wNSwgLTIuNjE1NGUtMDZdLFxuICAgIFswLjkyMTYsIC0wLjAwNDY3NzQ2LCAtMC4wMDAxMDQ1NywgNC44MTI0M2UtMDZdLFxuICAgIFswLjg5NjIsIC0wLjAwNTM2MjIzLCAtMy4yMzgzMWUtMDUsIC01LjQzNDMyZS0wNl0sXG4gICAgWzAuODY3OSwgLTAuMDA2MDkzNjMsIC0wLjAwMDExMzg5OCwgMy4zMjQ4NGUtMDZdLFxuICAgIFswLjgzNTAsIC0wLjAwNjk4MzI1LCAtNi40MDI1M2UtMDUsIDkuMzQ5NTllLTA3XSxcbiAgICBbMC43OTg2LCAtMC4wMDc1NTMzOCwgLTUuMDAwMDllLTA1LCA5LjM1MzI0ZS0wN10sXG4gICAgWzAuNzU5NywgLTAuMDA3OTgzMjQsIC0zLjU5NzFlLTA1LCAtMi4yNzYyNmUtMDZdLFxuICAgIFswLjcxODYsIC0wLjAwODUxMzY3LCAtNy4wMTE0OWUtMDUsIC04LjYzMDNlLTA2XSxcbiAgICBbMC42NzMyLCAtMC4wMDk4NjIwOSwgLTAuMDAwMTk5NTY5LCAxLjkxOTc0ZS0wNV0sXG4gICAgWzAuNjIxMywgLTAuMDEwNDE4LCA4LjgzOTIzZS0wNSwgNi4yNDA1MWUtMDZdLFxuICAgIFswLjU3MjIsIC0wLjAwOTA2NjAxLCAwLjAwMDE4MiwgNi4yNDA1MWUtMDZdLFxuICAgIFswLjUzMjIsIC0wLjAwNjc3Nzk3LCAwLjAwMDI3NTYwOCwgNi4yNDA1MWUtMDZdXG5dO1xuXG52YXIgQ09FRlNfWSA9IFtcbiAgICBbLTUuMjA0MTdlLTE4LCAwLjAxMjQsIDEuMjE0MzFlLTE4LCAtOC40NTI4NGUtMTFdLFxuICAgIFswLjA2MjAsIDAuMDEyNCwgLTEuMjY3OTNlLTA5LCA0LjIyNjQyZS0xMF0sXG4gICAgWzAuMTI0MCwgMC4wMTI0LCA1LjA3MTcxZS0wOSwgLTEuNjA2MDRlLTA5XSxcbiAgICBbMC4xODYwLCAwLjAxMjM5OTksIC0xLjkwMTg5ZS0wOCwgNi4wMDE1MmUtMDldLFxuICAgIFswLjI0ODAsIDAuMDEyNDAwMiwgNy4xMDAzOWUtMDgsIC0yLjI0ZS0wOF0sXG4gICAgWzAuMzEwMCwgMC4wMTIzOTkyLCAtMi42NDk5N2UtMDcsIDguMzU5ODZlLTA4XSxcbiAgICBbMC4zNzIwLCAwLjAxMjQwMjksIDkuODg5ODNlLTA3LCAtMy4xMTk5NGUtMDddLFxuICAgIFswLjQzNDAsIDAuMDEyMzg5MywgLTMuNjkwOTNlLTA2LCAtNC4zNTYyMWUtMDddLFxuICAgIFswLjQ5NTgsIDAuMDEyMzE5OCwgLTEuMDIyNTJlLTA1LCAtMy40NTUyM2UtMDddLFxuICAgIFswLjU1NzEsIDAuMDEyMTkxNiwgLTEuNTQwODFlLTA1LCAtNS44MjI4OGUtMDddLFxuICAgIFswLjYxNzYsIDAuMDExOTkzOCwgLTIuNDE0MjRlLTA1LCAtNS4yNTMyN2UtMDddLFxuICAgIFswLjY3NjksIDAuMDExNzEzLCAtMy4yMDIyM2UtMDUsIC01LjE2NDA1ZS0wN10sXG4gICAgWzAuNzM0NiwgMC4wMTEzNTQxLCAtMy45NzY4NGUtMDUsIC02LjA5MDUyZS0wN10sXG4gICAgWzAuNzkwMywgMC4wMTA5MTA3LCAtNC44OTA0MmUtMDUsIC0xLjA0NzM5ZS0wNl0sXG4gICAgWzAuODQzNSwgMC4wMTAzNDMxLCAtNi40NjE1ZS0wNSwgLTEuNDAzNzRlLTA5XSxcbiAgICBbMC44OTM2LCAwLjAwOTY5Njg2LCAtNi40NjM2ZS0wNSwgLTguNTQ3ZS0wNl0sXG4gICAgWzAuOTM5NCwgMC4wMDg0MDk0NywgLTAuMDAwMTkyODQxLCAtNC4yMTA2ZS0wNl0sXG4gICAgWzAuOTc2MSwgMC4wMDYxNjUyNywgLTAuMDAwMjU2LCAtNC4yMTA2ZS0wNl0sXG4gICAgWzEuMDAwMCwgMC4wMDMyODk0NywgLTAuMDAwMzE5MTU5LCAtNC4yMTA2ZS0wNl1cbl07XG5cbnZhciBGWEMgPSAwLjg0ODc7XG52YXIgRllDID0gMS4zNTIzO1xudmFyIEMxID0gUjJELzU7IC8vIHJhZCB0byA1LWRlZ3JlZSBpbnRlcnZhbFxudmFyIFJDMSA9IDEvQzE7XG52YXIgTk9ERVMgPSAxODtcblxudmFyIHBvbHkzX3ZhbCA9IGZ1bmN0aW9uKGNvZWZzLCB4KSB7XG4gICAgcmV0dXJuIGNvZWZzWzBdICsgeCAqIChjb2Vmc1sxXSArIHggKiAoY29lZnNbMl0gKyB4ICogY29lZnNbM10pKTtcbn07XG5cbnZhciBwb2x5M19kZXIgPSBmdW5jdGlvbihjb2VmcywgeCkge1xuICAgIHJldHVybiBjb2Vmc1sxXSArIHggKiAoMiAqIGNvZWZzWzJdICsgeCAqIDMgKiBjb2Vmc1szXSk7XG59O1xuXG5mdW5jdGlvbiBuZXd0b25fcmFwc2hvbihmX2RmLCBzdGFydCwgbWF4X2VyciwgaXRlcnMpIHtcbiAgICB2YXIgeCA9IHN0YXJ0O1xuICAgIGZvciAoOyBpdGVyczsgLS1pdGVycykge1xuICAgICAgICB2YXIgdXBkID0gZl9kZih4KTtcbiAgICAgICAgeCAtPSB1cGQ7XG4gICAgICAgIGlmIChNYXRoLmFicyh1cGQpIDwgbWF4X2Vycikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICAgIHRoaXMueDAgPSB0aGlzLngwIHx8IDA7XG4gICAgdGhpcy55MCA9IHRoaXMueTAgfHwgMDtcbiAgICB0aGlzLmxvbmcwID0gdGhpcy5sb25nMCB8fCAwO1xuICAgIHRoaXMuZXMgPSAwO1xuICAgIHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlIHx8IFwiUm9iaW5zb25cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQobGwpIHtcbiAgICB2YXIgbG9uID0gYWRqdXN0X2xvbihsbC54IC0gdGhpcy5sb25nMCk7XG5cbiAgICB2YXIgZHBoaSA9IE1hdGguYWJzKGxsLnkpO1xuICAgIHZhciBpID0gTWF0aC5mbG9vcihkcGhpICogQzEpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgICBpID0gMDtcbiAgICB9IGVsc2UgaWYgKGkgPj0gTk9ERVMpIHtcbiAgICAgICAgaSA9IE5PREVTIC0gMTtcbiAgICB9XG4gICAgZHBoaSA9IFIyRCAqIChkcGhpIC0gUkMxICogaSk7XG4gICAgdmFyIHh5ID0ge1xuICAgICAgICB4OiBwb2x5M192YWwoQ09FRlNfWFtpXSwgZHBoaSkgKiBsb24sXG4gICAgICAgIHk6IHBvbHkzX3ZhbChDT0VGU19ZW2ldLCBkcGhpKVxuICAgIH07XG4gICAgaWYgKGxsLnkgPCAwKSB7XG4gICAgICAgIHh5LnkgPSAteHkueTtcbiAgICB9XG5cbiAgICB4eS54ID0geHkueCAqIHRoaXMuYSAqIEZYQyArIHRoaXMueDA7XG4gICAgeHkueSA9IHh5LnkgKiB0aGlzLmEgKiBGWUMgKyB0aGlzLnkwO1xuICAgIHJldHVybiB4eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UoeHkpIHtcbiAgICB2YXIgbGwgPSB7XG4gICAgICAgIHg6ICh4eS54IC0gdGhpcy54MCkgLyAodGhpcy5hICogRlhDKSxcbiAgICAgICAgeTogTWF0aC5hYnMoeHkueSAtIHRoaXMueTApIC8gKHRoaXMuYSAqIEZZQylcbiAgICB9O1xuXG4gICAgaWYgKGxsLnkgPj0gMSkgeyAvLyBwYXRob2xvZ2ljIGNhc2VcbiAgICAgICAgbGwueCAvPSBDT0VGU19YW05PREVTXVswXTtcbiAgICAgICAgbGwueSA9IHh5LnkgPCAwID8gLUhBTEZfUEkgOiBIQUxGX1BJO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZpbmQgdGFibGUgaW50ZXJ2YWxcbiAgICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKGxsLnkgKiBOT0RFUyk7XG4gICAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA+PSBOT0RFUykge1xuICAgICAgICAgICAgaSA9IE5PREVTIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICBpZiAoQ09FRlNfWVtpXVswXSA+IGxsLnkpIHtcbiAgICAgICAgICAgICAgICAtLWk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKENPRUZTX1lbaSsxXVswXSA8PSBsbC55KSB7XG4gICAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBpbiA1IGRlZ3JlZSBpbnRlcnZhbFxuICAgICAgICB2YXIgY29lZnMgPSBDT0VGU19ZW2ldO1xuICAgICAgICB2YXIgdCA9IDUgKiAobGwueSAtIGNvZWZzWzBdKSAvIChDT0VGU19ZW2krMV1bMF0gLSBjb2Vmc1swXSk7XG4gICAgICAgIC8vIGZpbmQgdCBzbyB0aGF0IHBvbHkzX3ZhbChjb2VmcywgdCkgPSBsbC55XG4gICAgICAgIHQgPSBuZXd0b25fcmFwc2hvbihmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICByZXR1cm4gKHBvbHkzX3ZhbChjb2VmcywgeCkgLSBsbC55KSAvIHBvbHkzX2Rlcihjb2VmcywgeCk7XG4gICAgICAgIH0sIHQsIEVQU0xOLCAxMDApO1xuXG4gICAgICAgIGxsLnggLz0gcG9seTNfdmFsKENPRUZTX1hbaV0sIHQpO1xuICAgICAgICBsbC55ID0gKDUgKiBpICsgdCkgKiBEMlI7XG4gICAgICAgIGlmICh4eS55IDwgMCkge1xuICAgICAgICAgICAgbGwueSA9IC1sbC55O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGwueCA9IGFkanVzdF9sb24obGwueCArIHRoaXMubG9uZzApO1xuICAgIHJldHVybiBsbDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIlJvYmluc29uXCIsIFwicm9iaW5cIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCB7XG4gICAgZ2VvZGV0aWNUb0dlb2NlbnRyaWMsXG4gICAgZ2VvY2VudHJpY1RvR2VvZGV0aWNcbn0gZnJvbSAnLi4vZGF0dW1VdGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICAgIHRoaXMubmFtZSA9ICdnZW9jZW50JztcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gICAgdmFyIHBvaW50ID0gZ2VvZGV0aWNUb0dlb2NlbnRyaWMocCwgdGhpcy5lcywgdGhpcy5hKTtcbiAgICByZXR1cm4gcG9pbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgICB2YXIgcG9pbnQgPSBnZW9jZW50cmljVG9HZW9kZXRpYyhwLCB0aGlzLmVzLCB0aGlzLmEsIHRoaXMuYik7XG4gICAgcmV0dXJuIHBvaW50O1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiR2VvY2VudHJpY1wiLCAnZ2VvY2VudHJpYycsIFwiZ2VvY2VudFwiLCBcIkdlb2NlbnRcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgaW5pdDogaW5pdCxcbiAgICBmb3J3YXJkOiBmb3J3YXJkLFxuICAgIGludmVyc2U6IGludmVyc2UsXG4gICAgbmFtZXM6IG5hbWVzXG59OyIsIlxudmFyIG1vZGUgPSB7XG4gIE5fUE9MRTogMCxcbiAgU19QT0xFOiAxLFxuICBFUVVJVDogMixcbiAgT0JMSVE6IDNcbn07XG5cbmltcG9ydCB7IEQyUiwgSEFMRl9QSSwgRVBTTE4gfSBmcm9tIFwiLi4vY29uc3RhbnRzL3ZhbHVlc1wiO1xuaW1wb3J0IGh5cG90IGZyb20gXCIuLi9jb21tb24vaHlwb3RcIjtcblxudmFyIHBhcmFtcyA9IHtcbiAgaDogICAgIHsgZGVmOiAxMDAwMDAsIG51bTogdHJ1ZSB9LCAgICAgICAgICAgLy8gZGVmYXVsdCBpcyBLYXJtYW4gbGluZSwgbm8gZGVmYXVsdCBpbiBQUk9KLjdcbiAgYXppOiAgIHsgZGVmOiAwLCBudW06IHRydWUsIGRlZ3JlZXM6IHRydWUgfSwgLy8gZGVmYXVsdCBpcyBOb3J0aFxuICB0aWx0OiAgeyBkZWY6IDAsIG51bTogdHJ1ZSwgZGVncmVlczogdHJ1ZSB9LCAvLyBkZWZhdWx0IGlzIE5hZGlyXG4gIGxvbmcwOiB7IGRlZjogMCwgbnVtOiB0cnVlIH0sICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgaXMgR3JlZW53aWNoLCBjb252ZXJzaW9uIHRvIHJhZCBpcyBhdXRvbWF0aWNcbiAgbGF0MDogIHsgZGVmOiAwLCBudW06IHRydWUgfSAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBpcyBFcXVhdG9yLCBjb252ZXJzaW9uIHRvIHJhZCBpcyBhdXRvbWF0aWNcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICBpZiAodHlwZW9mIHRoaXNbcF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXNbcF0gPSBwYXJhbXNbcF0uZGVmO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zW3BdLm51bSAmJiBpc05hTih0aGlzW3BdKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwYXJhbWV0ZXIgdmFsdWUsIG11c3QgYmUgbnVtZXJpYyBcIiArIHAgKyBcIiA9IFwiICsgdGhpc1twXSk7XG4gICAgfSBlbHNlIGlmIChwYXJhbXNbcF0ubnVtKSB7XG4gICAgICB0aGlzW3BdID0gcGFyc2VGbG9hdCh0aGlzW3BdKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtc1twXS5kZWdyZWVzKSB7XG4gICAgICB0aGlzW3BdID0gdGhpc1twXSAqIEQyUjtcbiAgICB9XG4gIH0uYmluZCh0aGlzKSk7XG5cbiAgaWYgKE1hdGguYWJzKChNYXRoLmFicyh0aGlzLmxhdDApIC0gSEFMRl9QSSkpIDwgRVBTTE4pIHtcbiAgICB0aGlzLm1vZGUgPSB0aGlzLmxhdDAgPCAwID8gbW9kZS5TX1BPTEUgOiBtb2RlLk5fUE9MRTtcbiAgfSBlbHNlIGlmIChNYXRoLmFicyh0aGlzLmxhdDApIDwgRVBTTE4pIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlLkVRVUlUO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubW9kZSA9IG1vZGUuT0JMSVE7XG4gICAgdGhpcy5zaW5waDAgPSBNYXRoLnNpbih0aGlzLmxhdDApO1xuICAgIHRoaXMuY29zcGgwID0gTWF0aC5jb3ModGhpcy5sYXQwKTtcbiAgfVxuXG4gIHRoaXMucG4xID0gdGhpcy5oIC8gdGhpcy5hOyAgLy8gTm9ybWFsaXplIHJlbGF0aXZlIHRvIHRoZSBFYXJ0aCdzIHJhZGl1c1xuXG4gIGlmICh0aGlzLnBuMSA8PSAwIHx8IHRoaXMucG4xID4gMWUxMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGVpZ2h0XCIpO1xuICB9XG4gIFxuICB0aGlzLnAgPSAxICsgdGhpcy5wbjE7XG4gIHRoaXMucnAgPSAxIC8gdGhpcy5wO1xuICB0aGlzLmgxID0gMSAvIHRoaXMucG4xO1xuICB0aGlzLnBmYWN0ID0gKHRoaXMucCArIDEpICogdGhpcy5oMTtcbiAgdGhpcy5lcyA9IDA7XG5cbiAgdmFyIG9tZWdhID0gdGhpcy50aWx0O1xuICB2YXIgZ2FtbWEgPSB0aGlzLmF6aTtcbiAgdGhpcy5jZyA9IE1hdGguY29zKGdhbW1hKTtcbiAgdGhpcy5zZyA9IE1hdGguc2luKGdhbW1hKTtcbiAgdGhpcy5jdyA9IE1hdGguY29zKG9tZWdhKTtcbiAgdGhpcy5zdyA9IE1hdGguc2luKG9tZWdhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICBwLnggLT0gdGhpcy5sb25nMDtcbiAgdmFyIHNpbnBoaSA9IE1hdGguc2luKHAueSk7XG4gIHZhciBjb3NwaGkgPSBNYXRoLmNvcyhwLnkpO1xuICB2YXIgY29zbGFtID0gTWF0aC5jb3MocC54KTtcbiAgdmFyIHgsIHk7XG4gIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgY2FzZSBtb2RlLk9CTElROlxuICAgICAgeSA9IHRoaXMuc2lucGgwICogc2lucGhpICsgdGhpcy5jb3NwaDAgKiBjb3NwaGkgKiBjb3NsYW07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG1vZGUuRVFVSVQ6XG4gICAgICB5ID0gY29zcGhpICogY29zbGFtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBtb2RlLlNfUE9MRTpcbiAgICAgIHkgPSAtc2lucGhpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBtb2RlLk5fUE9MRTpcbiAgICAgIHkgPSBzaW5waGk7XG4gICAgICBicmVhaztcbiAgfVxuICB5ID0gdGhpcy5wbjEgLyAodGhpcy5wIC0geSk7XG4gIHggPSB5ICogY29zcGhpICogTWF0aC5zaW4ocC54KTtcblxuICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgIGNhc2UgbW9kZS5PQkxJUTpcbiAgICAgIHkgKj0gdGhpcy5jb3NwaDAgKiBzaW5waGkgLSB0aGlzLnNpbnBoMCAqIGNvc3BoaSAqIGNvc2xhbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgbW9kZS5FUVVJVDpcbiAgICAgIHkgKj0gc2lucGhpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBtb2RlLk5fUE9MRTpcbiAgICAgIHkgKj0gLShjb3NwaGkgKiBjb3NsYW0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBtb2RlLlNfUE9MRTpcbiAgICAgIHkgKj0gY29zcGhpICogY29zbGFtO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICAvLyBUaWx0IFxuICB2YXIgeXQsIGJhO1xuICB5dCA9IHkgKiB0aGlzLmNnICsgeCAqIHRoaXMuc2c7XG4gIGJhID0gMSAvICh5dCAqIHRoaXMuc3cgKiB0aGlzLmgxICsgdGhpcy5jdyk7XG4gIHggPSAoeCAqIHRoaXMuY2cgLSB5ICogdGhpcy5zZykgKiB0aGlzLmN3ICogYmE7XG4gIHkgPSB5dCAqIGJhO1xuXG4gIHAueCA9IHggKiB0aGlzLmE7XG4gIHAueSA9IHkgKiB0aGlzLmE7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAvPSB0aGlzLmE7XG4gIHAueSAvPSB0aGlzLmE7XG4gIHZhciByID0geyB4OiBwLngsIHk6IHAueSB9O1xuXG4gIC8vIFVuLVRpbHRcbiAgdmFyIGJtLCBicSwgeXQ7XG4gIHl0ID0gMSAvICh0aGlzLnBuMSAtIHAueSAqIHRoaXMuc3cpO1xuICBibSA9IHRoaXMucG4xICogcC54ICogeXQ7XG4gIGJxID0gdGhpcy5wbjEgKiBwLnkgKiB0aGlzLmN3ICogeXQ7XG4gIHAueCA9IGJtICogdGhpcy5jZyArIGJxICogdGhpcy5zZztcbiAgcC55ID0gYnEgKiB0aGlzLmNnIC0gYm0gKiB0aGlzLnNnO1xuXG4gIHZhciByaCA9IGh5cG90KHAueCwgcC55KTtcbiAgaWYgKE1hdGguYWJzKHJoKSA8IEVQU0xOKSB7XG4gICAgci54ID0gMDtcbiAgICByLnkgPSBwLnk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNvc3osIHNpbno7XG4gICAgc2lueiA9IDEgLSByaCAqIHJoICogdGhpcy5wZmFjdDtcbiAgICBzaW56ID0gKHRoaXMucCAtIE1hdGguc3FydChzaW56KSkgLyAodGhpcy5wbjEgLyByaCArIHJoIC8gdGhpcy5wbjEpO1xuICAgIGNvc3ogPSBNYXRoLnNxcnQoMSAtIHNpbnogKiBzaW56KTtcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgICAgY2FzZSBtb2RlLk9CTElROlxuICAgICAgICByLnkgPSBNYXRoLmFzaW4oY29zeiAqIHRoaXMuc2lucGgwICsgcC55ICogc2lueiAqIHRoaXMuY29zcGgwIC8gcmgpO1xuICAgICAgICBwLnkgPSAoY29zeiAtIHRoaXMuc2lucGgwICogTWF0aC5zaW4oci55KSkgKiByaDtcbiAgICAgICAgcC54ICo9IHNpbnogKiB0aGlzLmNvc3BoMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG1vZGUuRVFVSVQ6XG4gICAgICAgIHIueSA9IE1hdGguYXNpbihwLnkgKiBzaW56IC8gcmgpO1xuICAgICAgICBwLnkgPSBjb3N6ICogcmg7XG4gICAgICAgIHAueCAqPSBzaW56O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgbW9kZS5OX1BPTEU6XG4gICAgICAgIHIueSA9IE1hdGguYXNpbihjb3N6KTtcbiAgICAgICAgcC55ID0gLXAueTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG1vZGUuU19QT0xFOlxuICAgICAgICByLnkgPSAtTWF0aC5hc2luKGNvc3opO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgci54ID0gTWF0aC5hdGFuMihwLngsIHAueSk7XG4gIH1cblxuICBwLnggPSByLnggKyB0aGlzLmxvbmcwO1xuICBwLnkgPSByLnk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiVGlsdGVkX1BlcnNwZWN0aXZlXCIsIFwidHBlcnNcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCB0bWVyYyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy90bWVyYyc7XG5pbXBvcnQgZXRtZXJjIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2V0bWVyYyc7XG5pbXBvcnQgdXRtIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3V0bSc7XG5pbXBvcnQgc3RlcmVhIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3N0ZXJlYSc7XG5pbXBvcnQgc3RlcmUgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvc3RlcmUnO1xuaW1wb3J0IHNvbWVyYyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9zb21lcmMnO1xuaW1wb3J0IG9tZXJjIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL29tZXJjJztcbmltcG9ydCBsY2MgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvbGNjJztcbmltcG9ydCBrcm92YWsgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMva3JvdmFrJztcbmltcG9ydCBjYXNzIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2Nhc3MnO1xuaW1wb3J0IGxhZWEgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvbGFlYSc7XG5pbXBvcnQgYWVhIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2FlYSc7XG5pbXBvcnQgZ25vbSBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9nbm9tJztcbmltcG9ydCBjZWEgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvY2VhJztcbmltcG9ydCBlcWMgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvZXFjJztcbmltcG9ydCBwb2x5IGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3BvbHknO1xuaW1wb3J0IG56bWcgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvbnptZyc7XG5pbXBvcnQgbWlsbCBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9taWxsJztcbmltcG9ydCBzaW51IGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3NpbnUnO1xuaW1wb3J0IG1vbGwgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvbW9sbCc7XG5pbXBvcnQgZXFkYyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9lcWRjJztcbmltcG9ydCB2YW5kZyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy92YW5kZyc7XG5pbXBvcnQgYWVxZCBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9hZXFkJztcbmltcG9ydCBvcnRobyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9vcnRobyc7XG5pbXBvcnQgcXNjIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3FzYyc7XG5pbXBvcnQgcm9iaW4gZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvcm9iaW4nO1xuaW1wb3J0IGdlb2NlbnQgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvZ2VvY2VudCc7XG5pbXBvcnQgdHBlcnMgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvdHBlcnMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocHJvajQpe1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZCh0bWVyYyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGV0bWVyYyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHV0bSk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHN0ZXJlYSk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHN0ZXJlKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQoc29tZXJjKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQob21lcmMpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChsY2MpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChrcm92YWspO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChjYXNzKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQobGFlYSk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGFlYSk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGdub20pO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChjZWEpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChlcWMpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChwb2x5KTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQobnptZyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKG1pbGwpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChzaW51KTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQobW9sbCk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGVxZGMpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZCh2YW5kZyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGFlcWQpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChvcnRobyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHFzYyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHJvYmluKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQoZ2VvY2VudCk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHRwZXJzKTtcbn0iLCJpbXBvcnQgcHJvajQgZnJvbSAnLi9jb3JlJztcbmltcG9ydCBQcm9qIGZyb20gXCIuL1Byb2pcIjtcbmltcG9ydCBQb2ludCBmcm9tIFwiLi9Qb2ludFwiO1xuaW1wb3J0IGNvbW1vbiBmcm9tIFwiLi9jb21tb24vdG9Qb2ludFwiO1xuaW1wb3J0IGRlZnMgZnJvbSBcIi4vZGVmc1wiO1xuaW1wb3J0IHRyYW5zZm9ybSBmcm9tIFwiLi90cmFuc2Zvcm1cIjtcbmltcG9ydCBtZ3JzIGZyb20gXCJtZ3JzXCI7XG5pbXBvcnQgaW5jbHVkZWRQcm9qZWN0aW9ucyBmcm9tIFwiLi4vcHJvanNcIjtcblxucHJvajQuZGVmYXVsdERhdHVtID0gJ1dHUzg0JzsgLy9kZWZhdWx0IGRhdHVtXG5wcm9qNC5Qcm9qID0gUHJvajtcbnByb2o0LldHUzg0ID0gbmV3IHByb2o0LlByb2ooJ1dHUzg0Jyk7XG5wcm9qNC5Qb2ludCA9IFBvaW50O1xucHJvajQudG9Qb2ludCA9IGNvbW1vbjtcbnByb2o0LmRlZnMgPSBkZWZzO1xucHJvajQudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xucHJvajQubWdycyA9IG1ncnM7XG5wcm9qNC52ZXJzaW9uID0gJ19fVkVSU0lPTl9fJztcbmluY2x1ZGVkUHJvamVjdGlvbnMocHJvajQpO1xuZXhwb3J0IGRlZmF1bHQgcHJvajQ7XG4iLCJpbXBvcnQgcHJvajQgZnJvbSAncHJvajQnO1xuLy8gRGV2ZWxvcG1lbnQgdG9vbHNcbi8vIE1hcCBhcHBsaWNhdGlvbiB3aXRoIGNvb3JkaW5hdGVzIHByb2plY3Rpb25cbi8vIGh0dHBzOi8vZG9taW5vYzkyNS1wYWdlcy5hcHBzcG90LmNvbS9tYXBwbGV0cy9jc19lY2VmLmh0bWxcbi8vIFRoZSBXb3JsZCBjb29yZGluYXRlcyBjb252ZXJ0ZXJcbi8vIGh0dHBzOi8vdHdjYy5mci8jXG5leHBvcnQgY29uc3QgUHJvamVjdGlvbnMgPSBbXG4gICAge1xuICAgICAgICB0aXRsZTogXCJSR0Y5MyAoTGFtYmVydC05MylcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy9yZ2Y5My1sYW1iZXJ0LTkzL1wiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6MjE1NFwiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQ5ICtsYXRfMj00NCArbGF0XzA9NDYuNSArbG9uXzA9MyAreF8wPTcwMDAwMCAreV8wPTY2MDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJSR0Y5MyAoQ0M1MClcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjM5NTBcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy8zOTUwL1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQ5LjI1ICtsYXRfMj01MC43NSArbGF0XzA9NTAgK2xvbl8wPTMgK3hfMD0xNzAwMDAwICt5XzA9OTIwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlJHRjkzIChDQzQ5KVwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6Mzk0OVwiLFxuICAgICAgICB1cmw6IFwiaHR0cDovL3NwYXRpYWxyZWZlcmVuY2Uub3JnL3JlZi9lcHNnLzM5NDkvXCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxjYyArbGF0XzE9NDguMjUgK2xhdF8yPTQ5Ljc1ICtsYXRfMD00OSArbG9uXzA9MyAreF8wPTE3MDAwMDAgK3lfMD04MjAwMDAwICtlbGxwcz1HUlM4MCArdG93Z3M4ND0wLDAsMCwwLDAsMCwwICt1bml0cz1tICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiUkdGOTMgKENDNDgpXCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzozOTQ4XCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvMzk0OC9cIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bGNjICtsYXRfMT00Ny4yNSArbGF0XzI9NDguNzUgK2xhdF8wPTQ4ICtsb25fMD0zICt4XzA9MTcwMDAwMCAreV8wPTcyMDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJSR0Y5MyAoQ0M0NylcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjM5NDdcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy8zOTQ3L1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQ2LjI1ICtsYXRfMj00Ny43NSArbGF0XzA9NDcgK2xvbl8wPTMgK3hfMD0xNzAwMDAwICt5XzA9NjIwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlJHRjkzIChDQzQ2KVwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6Mzk0NlwiLFxuICAgICAgICB1cmw6IFwiaHR0cDovL3NwYXRpYWxyZWZlcmVuY2Uub3JnL3JlZi9lcHNnLzM5NDYvXCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxjYyArbGF0XzE9NDUuMjUgK2xhdF8yPTQ2Ljc1ICtsYXRfMD00NiArbG9uXzA9MyAreF8wPTE3MDAwMDAgK3lfMD01MjAwMDAwICtlbGxwcz1HUlM4MCArdG93Z3M4ND0wLDAsMCwwLDAsMCwwICt1bml0cz1tICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiUkdGOTMgKENDNDUpXCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzozOTQ1XCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvMzk0NS9cIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bGNjICtsYXRfMT00NC4yNSArbGF0XzI9NDUuNzUgK2xhdF8wPTQ1ICtsb25fMD0zICt4XzA9MTcwMDAwMCAreV8wPTQyMDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJSR0Y5MyAoQ0M0NClcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjM5NDRcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy8zOTQ0L1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQzLjI1ICtsYXRfMj00NC43NSArbGF0XzA9NDQgK2xvbl8wPTMgK3hfMD0xNzAwMDAwICt5XzA9MzIwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIk5URiAoTGFtYmVydCBJSSlcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjI3NTcyXCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvMjc1NzIvXCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxjYyArbGF0XzE9NDYuOCArbGF0XzA9NDYuOCArbG9uXzA9MCAra18wPTAuOTk5ODc3NDIgK3hfMD02MDAwMDAgK3lfMD0yMjAwMDAwICthPTYzNzgyNDkuMiArYj02MzU2NTE1ICt0b3dnczg0PS0xNjgsLTYwLDMyMCwwLDAsMCwwICtwbT1wYXJpcyArdW5pdHM9bSArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIk5URiAoTGFtYmVydCBJSUkpXCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzoyNzU3M1wiLFxuICAgICAgICB1cmw6IFwiaHR0cDovL3NwYXRpYWxyZWZlcmVuY2Uub3JnL3JlZi9lcHNnLzI3NTczL1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQ0LjEwMDAwMDAwMDAwMDAxICtsYXRfMD00NC4xMDAwMDAwMDAwMDAwMSArbG9uXzA9MCAra18wPTAuOTk5ODc3NDk5ICt4XzA9NjAwMDAwICt5XzA9MzIwMDAwMCArYT02Mzc4MjQ5LjIgK2I9NjM1NjUxNSArdG93Z3M4ND0tMTY4LC02MCwzMjAsMCwwLDAsMCArcG09cGFyaXMgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJOVEZcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjQyNzVcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy80Mjc1L1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sb25nbGF0ICthPTYzNzgyNDkuMiArYj02MzU2NTE1ICt0b3dnczg0PS0xNjgsLTYwLDMyMCwwLDAsMCwwICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiV0dTODRcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjQzMjZcIixcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vZXBzZy5pby80MzI2XCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtub19kZWZzXCJcbiAgICB9XG5dO1xuZXhwb3J0IGNvbnN0IFByb2o0RGVmcyA9IFByb2plY3Rpb25zLm1hcChwID0+IFtwLmNvZGUsIHAucHJvajRdKTtcbnByb2o0LmRlZnMoUHJvajREZWZzKTtcbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0KGZyb20sIHRvLCB5LCB4KSB7XG4gICAgY29uc29sZS5sb2coYFByb2plY3RpbmcgY29vcmRpbmF0ZXMgJyR7eH0sJHt5fScgZnJvbSAnJHtmcm9tfScgdG8gJyR7dG99J2ApO1xuICAgIGNvbnN0IGNvb3JkcyA9IHByb2o0KGZyb20sIHRvLCBbeCwgeV0pO1xuICAgIHJldHVybiB7IHg6IGNvb3Jkc1swXSwgeTogY29vcmRzWzFdIH07XG59XG47XG4vLyBWb2lyIGh0dHBzOi8vZ2VvZGVzaWUuaWduLmZyL2NvbnRlbnUvZmljaGllcnMvZG9jdW1lbnRhdGlvbi9wZWRhZ29naXF1ZXMvVHJhbnNmb3JtYXRpb25zQ29vcmRvbm5lZXNHZW9kZXNpcXVlcy5wZGZcbmV4cG9ydCBjb25zdCBXR1M4NEVsbGlwc29pZCA9IGNyZWF0ZUVsbGlwc29pZCg2Mzc4MTM3LCAxIC8gMjk4LjI1NzIyMzU2Myk7XG5mdW5jdGlvbiBjcmVhdGVFbGxpcHNvaWQoYSwgZikge1xuICAgIGNvbnN0IGIgPSBhICogKDEgLSBmKTtcbiAgICBjb25zdCBhc3FyID0gYSAqIGE7XG4gICAgY29uc3QgYnNxciA9IGIgKiBiO1xuICAgIGNvbnN0IGUgPSBNYXRoLnNxcnQoKGFzcXIgLSBic3FyKSAvIGFzcXIpO1xuICAgIGNvbnN0IGVwcmltZSA9IE1hdGguc3FydCgoYXNxciAtIGJzcXIpIC8gYnNxcik7XG4gICAgcmV0dXJuIHsgYSwgZiwgYiwgZSwgYnNxciwgYXNxciwgZXByaW1lIH07XG59XG5mdW5jdGlvbiBkZWdyZWVzKGFuZ2xlKSB7XG4gICAgcmV0dXJuIGFuZ2xlICogKDE4MCAvIE1hdGguUEkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIFhZWnRvTExBKHgsIHksIHosIGVsbGlwc29pZCkge1xuICAgIGNvbnN0IHAgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgY29uc3QgdGhldGEgPSBNYXRoLmF0YW4oKHogKiBlbGxpcHNvaWQuYSkgLyAocCAqIGVsbGlwc29pZC5iKSk7XG4gICAgY29uc3Qgc2ludGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG4gICAgY29uc3QgY29zdGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgY29uc3QgbnVtID0geiArIGVsbGlwc29pZC5lcHJpbWUgKiBlbGxpcHNvaWQuZXByaW1lICogZWxsaXBzb2lkLmIgKiBzaW50aGV0YSAqIHNpbnRoZXRhICogc2ludGhldGE7XG4gICAgY29uc3QgZGVub20gPSBwIC0gZWxsaXBzb2lkLmUgKiBlbGxpcHNvaWQuZSAqIGVsbGlwc29pZC5hICogY29zdGhldGEgKiBjb3N0aGV0YSAqIGNvc3RoZXRhO1xuICAgIGNvbnN0IGxhdCA9IE1hdGguYXRhbihudW0gLyBkZW5vbSk7XG4gICAgbGV0IGxvbiA9IE1hdGguYXRhbih5IC8geCk7XG4gICAgY29uc3QgbiA9IGdldE4obGF0LCBlbGxpcHNvaWQpO1xuICAgIGNvbnN0IGFsdCA9IChwIC8gTWF0aC5jb3MobGF0KSkgLSBuO1xuICAgIGlmICh4IDwgMCAmJiB5IDwgMCkge1xuICAgICAgICBsb24gPSBsb24gLSBNYXRoLlBJO1xuICAgIH1cbiAgICBpZiAoeCA8IDAgJiYgeSA+IDApIHtcbiAgICAgICAgbG9uID0gbG9uICsgTWF0aC5QSTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbGF0aXR1ZGU6IGRlZ3JlZXMobGF0KSwgbG9uZ2l0dWRlOiBkZWdyZWVzKGxvbiksIGFsdGl0dWRlOiBhbHQgfTtcbn1cbmZ1bmN0aW9uIGdldE4obGF0LCBlbGxpcHNvaWQpIHtcbiAgICBjb25zdCBzaW5sYXQgPSBNYXRoLnNpbihsYXQpO1xuICAgIGNvbnN0IGRlbm9tID0gTWF0aC5zcXJ0KDEgLSBlbGxpcHNvaWQuZSAqIGVsbGlwc29pZC5lICogc2lubGF0ICogc2lubGF0KTtcbiAgICBjb25zdCBuID0gZWxsaXBzb2lkLmEgLyBkZW5vbTtcbiAgICByZXR1cm4gbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBMTEF0b1hZWihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbHRpdHVkZSwgZWxsaXBzb2lkKSB7XG4gICAgY29uc3QgY29zTGF0ID0gTWF0aC5jb3MobGF0aXR1ZGUgKiBNYXRoLlBJIC8gMTgwLjApO1xuICAgIGNvbnN0IHNpbkxhdCA9IE1hdGguc2luKGxhdGl0dWRlICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgICBjb25zdCBjb3NMb24gPSBNYXRoLmNvcyhsb25naXR1ZGUgKiBNYXRoLlBJIC8gMTgwLjApO1xuICAgIGNvbnN0IHNpbkxvbiA9IE1hdGguc2luKGxvbmdpdHVkZSAqIE1hdGguUEkgLyAxODAuMCk7XG4gICAgY29uc3QgcmFkID0gZWxsaXBzb2lkLmE7XG4gICAgY29uc3QgZiA9IGVsbGlwc29pZC5mO1xuICAgIGNvbnN0IEMgPSAxLjAgLyBNYXRoLnNxcnQoY29zTGF0ICogY29zTGF0ICsgKDEgLSBmKSAqICgxIC0gZikgKiBzaW5MYXQgKiBzaW5MYXQpO1xuICAgIGNvbnN0IFMgPSAoMS4wIC0gZikgKiAoMS4wIC0gZikgKiBDO1xuICAgIGNvbnN0IGggPSBhbHRpdHVkZTtcbiAgICBjb25zdCB4ID0gKHJhZCAqIEMgKyBoKSAqIGNvc0xhdCAqIGNvc0xvbjtcbiAgICBjb25zdCB5ID0gKHJhZCAqIEMgKyBoKSAqIGNvc0xhdCAqIHNpbkxvbjtcbiAgICBjb25zdCB6ID0gKHJhZCAqIFMgKyBoKSAqIHNpbkxhdDtcbiAgICByZXR1cm4geyB4LCB5LCB6IH07XG59XG4iLCJpbXBvcnQgcmFuZG9tQ29sb3IgZnJvbSAncmFuZG9tY29sb3InO1xuaW1wb3J0IHsgcG9seWdvbiB9IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3Aob2JqLCAuLi5wcm9wcykge1xuICAgIGlmIChwcm9wcy5sZW5ndGggPT09IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBtdXN0IGF0IGxlYXN0IHByb3ZpZGUgb25lIHByb3BlcnR5LlwiKTtcbiAgICBjb25zdCBwcm9wID0gcHJvcHMuc2hpZnQoKTtcbiAgICBjb25zdCBleGlzdHMgPSBvYmouaGFzT3duUHJvcGVydHkocHJvcCk7XG4gICAgaWYgKHByb3BzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZXhpc3RzID8gb2JqW3Byb3BdIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAob2JqW3Byb3BdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGdldFByb3Aob2JqW3Byb3BdLCAuLi5wcm9wcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTZXF1ZW5jZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xccj9cXG4/XFx0Py9nLCAnJykuc3BsaXQoJyAnKTtcbn1cbmNvbnN0IGNvbG9ycyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yKGtleSwgb3B0cykge1xuICAgIGlmIChrZXkgaW4gY29sb3JzKSB7XG4gICAgICAgIHJldHVybiBjb2xvcnNba2V5XTtcbiAgICB9XG4gICAgY29uc3QgY29sb3IgPSByYW5kb21Db2xvcihvcHRzKTtcbiAgICBjb2xvcnNba2V5XSA9IGNvbG9yO1xuICAgIHJldHVybiBjb2xvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b1JhZGlhbnMoYW5nbGVJbkRlZ3JlZXMpIHtcbiAgICByZXR1cm4gYW5nbGVJbkRlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvRGVncmVlcyhhbmdsZUluUmFkaWFucykge1xuICAgIHJldHVybiBhbmdsZUluUmFkaWFucyAqIDE4MCAvIE1hdGguUEk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2lyY2xlVG9Qb2x5Z29uKGNlbnRlciwgcmFkaXVzLCBudW1iZXJPZlNlZ21lbnRzLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgbiA9IG51bWJlck9mU2VnbWVudHMgPyBudW1iZXJPZlNlZ21lbnRzIDogMzI7XG4gICAgY29uc3QgZmxhdENvb3JkaW5hdGVzID0gW107XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBmbGF0Q29vcmRpbmF0ZXMucHVzaCguLi5vZmZzZXQoY2VudGVyLCByYWRpdXMsIDIgKiBNYXRoLlBJICogaSAvIG4pKTtcbiAgICB9XG4gICAgZmxhdENvb3JkaW5hdGVzLnB1c2goZmxhdENvb3JkaW5hdGVzWzBdLCBmbGF0Q29vcmRpbmF0ZXNbMV0pO1xuICAgIGZvciAobGV0IGkgPSAwLCBqID0gMDsgaiA8IGZsYXRDb29yZGluYXRlcy5sZW5ndGg7IGogKz0gMikge1xuICAgICAgICBjb29yZGluYXRlc1tpKytdID0gZmxhdENvb3JkaW5hdGVzLnNsaWNlKGosIGogKyAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBvbHlnb24oW2Nvb3JkaW5hdGVzLnJldmVyc2UoKV0sIHByb3BlcnRpZXMpO1xufVxuO1xuZXhwb3J0IGZ1bmN0aW9uIG9mZnNldChjMSwgZGlzdGFuY2UsIGJlYXJpbmcpIHtcbiAgICBjb25zdCBsYXQxID0gdG9SYWRpYW5zKGMxWzFdKTtcbiAgICBjb25zdCBsb24xID0gdG9SYWRpYW5zKGMxWzBdKTtcbiAgICBjb25zdCBkQnlSID0gZGlzdGFuY2UgLyA2Mzc4MTM3OyAvLyBkaXN0YW5jZSBkaXZpZGVkIGJ5IDYzNzgxMzcgKHJhZGl1cyBvZiB0aGUgZWFydGgpIHdnczg0XG4gICAgY29uc3QgbGF0ID0gTWF0aC5hc2luKE1hdGguc2luKGxhdDEpICogTWF0aC5jb3MoZEJ5UikgK1xuICAgICAgICBNYXRoLmNvcyhsYXQxKSAqIE1hdGguc2luKGRCeVIpICogTWF0aC5jb3MoYmVhcmluZykpO1xuICAgIGNvbnN0IGxvbiA9IGxvbjEgKyBNYXRoLmF0YW4yKE1hdGguc2luKGJlYXJpbmcpICogTWF0aC5zaW4oZEJ5UikgKiBNYXRoLmNvcyhsYXQxKSwgTWF0aC5jb3MoZEJ5UikgLSBNYXRoLnNpbihsYXQxKSAqIE1hdGguc2luKGxhdCkpO1xuICAgIHJldHVybiBbdG9EZWdyZWVzKGxvbiksIHRvRGVncmVlcyhsYXQpXTtcbn1cbiIsImltcG9ydCB7IGZlYXR1cmUsIGlzT2JqZWN0LCBsaW5lU3RyaW5nLCBwb2ludCB9IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuXG4vKipcbiAqIENhbGxiYWNrIGZvciBjb29yZEVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgY29vcmRFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gY3VycmVudENvb3JkIFRoZSBjdXJyZW50IGNvb3JkaW5hdGUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvb3JkSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGNvb3JkaW5hdGUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBjb29yZGluYXRlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaCgpXG4gKlxuICogQG5hbWUgY29vcmRFYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtleGNsdWRlV3JhcENvb3JkPWZhbHNlXSB3aGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBmaW5hbCBjb29yZGluYXRlIG9mIExpbmVhclJpbmdzIHRoYXQgd3JhcHMgdGhlIHJpbmcgaW4gaXRzIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7XCJmb29cIjogXCJiYXJcIn0pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7XCJoZWxsb1wiOiBcIndvcmxkXCJ9KVxuICogXSk7XG4gKlxuICogdHVyZi5jb29yZEVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAqICAgLy89Y3VycmVudENvb3JkXG4gKiAgIC8vPWNvb3JkSW5kZXhcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBjb29yZEVhY2goZ2VvanNvbiwgY2FsbGJhY2ssIGV4Y2x1ZGVXcmFwQ29vcmQpIHtcbiAgICAvLyBIYW5kbGVzIG51bGwgR2VvbWV0cnkgLS0gU2tpcHMgdGhpcyBHZW9KU09OXG4gICAgaWYgKGdlb2pzb24gPT09IG51bGwpIHJldHVybjtcbiAgICB2YXIgaiwgaywgbCwgZ2VvbWV0cnksIHN0b3BHLCBjb29yZHMsXG4gICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLFxuICAgICAgICB3cmFwU2hyaW5rID0gMCxcbiAgICAgICAgY29vcmRJbmRleCA9IDAsXG4gICAgICAgIGlzR2VvbWV0cnlDb2xsZWN0aW9uLFxuICAgICAgICB0eXBlID0gZ2VvanNvbi50eXBlLFxuICAgICAgICBpc0ZlYXR1cmVDb2xsZWN0aW9uID0gdHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgaXNGZWF0dXJlID0gdHlwZSA9PT0gJ0ZlYXR1cmUnLFxuICAgICAgICBzdG9wID0gaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoIDogMTtcblxuICAgIC8vIFRoaXMgbG9naWMgbWF5IGxvb2sgYSBsaXR0bGUgd2VpcmQuIFRoZSByZWFzb24gd2h5IGl0IGlzIHRoYXQgd2F5XG4gICAgLy8gaXMgYmVjYXVzZSBpdCdzIHRyeWluZyB0byBiZSBmYXN0LiBHZW9KU09OIHN1cHBvcnRzIG11bHRpcGxlIGtpbmRzXG4gICAgLy8gb2Ygb2JqZWN0cyBhdCBpdHMgcm9vdDogRmVhdHVyZUNvbGxlY3Rpb24sIEZlYXR1cmVzLCBHZW9tZXRyaWVzLlxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaGFzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBoYW5kbGluZyBhbGwgb2YgdGhlbSwgYW5kIHRoYXRcbiAgICAvLyBtZWFucyB0aGF0IHNvbWUgb2YgdGhlIGBmb3JgIGxvb3BzIHlvdSBzZWUgYmVsb3cgYWN0dWFsbHkganVzdCBkb24ndCBhcHBseVxuICAgIC8vIHRvIGNlcnRhaW4gaW5wdXRzLiBGb3IgaW5zdGFuY2UsIGlmIHlvdSBnaXZlIHRoaXMganVzdCBhXG4gICAgLy8gUG9pbnQgZ2VvbWV0cnksIHRoZW4gYm90aCBsb29wcyBhcmUgc2hvcnQtY2lyY3VpdGVkIGFuZCBhbGwgd2UgZG9cbiAgICAvLyBpcyBncmFkdWFsbHkgcmVuYW1lIHRoZSBpbnB1dCB1bnRpbCBpdCdzIGNhbGxlZCAnZ2VvbWV0cnknLlxuICAgIC8vXG4gICAgLy8gVGhpcyBhbHNvIGFpbXMgdG8gYWxsb2NhdGUgYXMgZmV3IHJlc291cmNlcyBhcyBwb3NzaWJsZToganVzdCBhXG4gICAgLy8gZmV3IG51bWJlcnMgYW5kIGJvb2xlYW5zLCByYXRoZXIgdGhhbiBhbnkgdGVtcG9yYXJ5IGFycmF5cyBhcyB3b3VsZFxuICAgIC8vIGJlIHJlcXVpcmVkIHdpdGggdGhlIG5vcm1hbGl6YXRpb24gYXBwcm9hY2guXG4gICAgZm9yICh2YXIgZmVhdHVyZUluZGV4ID0gMDsgZmVhdHVyZUluZGV4IDwgc3RvcDsgZmVhdHVyZUluZGV4KyspIHtcbiAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24gPSAoaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5nZW9tZXRyeSA6XG4gICAgICAgICAgICAoaXNGZWF0dXJlID8gZ2VvanNvbi5nZW9tZXRyeSA6IGdlb2pzb24pKTtcbiAgICAgICAgaXNHZW9tZXRyeUNvbGxlY3Rpb24gPSAoZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24pID8gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24udHlwZSA9PT0gJ0dlb21ldHJ5Q29sbGVjdGlvbicgOiBmYWxzZTtcbiAgICAgICAgc3RvcEcgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXMubGVuZ3RoIDogMTtcblxuICAgICAgICBmb3IgKHZhciBnZW9tSW5kZXggPSAwOyBnZW9tSW5kZXggPCBzdG9wRzsgZ2VvbUluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBtdWx0aUZlYXR1cmVJbmRleCA9IDA7XG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnlJbmRleCA9IDA7XG4gICAgICAgICAgICBnZW9tZXRyeSA9IGlzR2VvbWV0cnlDb2xsZWN0aW9uID9cbiAgICAgICAgICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi5nZW9tZXRyaWVzW2dlb21JbmRleF0gOiBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbjtcblxuICAgICAgICAgICAgLy8gSGFuZGxlcyBudWxsIEdlb21ldHJ5IC0tIFNraXBzIHRoaXMgZ2VvbWV0cnlcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkgY29udGludWU7XG4gICAgICAgICAgICBjb29yZHMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICAgICAgICAgIHZhciBnZW9tVHlwZSA9IGdlb21ldHJ5LnR5cGU7XG5cbiAgICAgICAgICAgIHdyYXBTaHJpbmsgPSAoZXhjbHVkZVdyYXBDb29yZCAmJiAoZ2VvbVR5cGUgPT09ICdQb2x5Z29uJyB8fCBnZW9tVHlwZSA9PT0gJ011bHRpUG9seWdvbicpKSA/IDEgOiAwO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGdlb21UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQb2ludCc6XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3JkcywgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29vcmRJbmRleCsrO1xuICAgICAgICAgICAgICAgIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3Jkc1tqXSwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSAnTXVsdGlQb2ludCcpIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgICAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGNvb3Jkc1tqXS5sZW5ndGggLSB3cmFwU2hyaW5rOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhjb29yZHNbal1ba10sIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycpIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gJ1BvbHlnb24nKSBnZW9tZXRyeUluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gJ1BvbHlnb24nKSBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29vcmRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gJ011bHRpUG9seWdvbicpIGdlb21ldHJ5SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY29vcmRzW2pdLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSAwOyBsIDwgY29vcmRzW2pdW2tdLmxlbmd0aCAtIHdyYXBTaHJpbms7IGwrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhjb29yZHNbal1ba11bbF0sIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0dlb21ldHJ5Q29sbGVjdGlvbic6XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGdlb21ldHJ5Lmdlb21ldHJpZXMubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb29yZEVhY2goZ2VvbWV0cnkuZ2VvbWV0cmllc1tqXSwgY2FsbGJhY2ssIGV4Y2x1ZGVXcmFwQ29vcmQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gR2VvbWV0cnkgVHlwZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBjb29yZFJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGNvb3JkUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGN1cnJlbnRDb29yZCBUaGUgY3VycmVudCBjb29yZGluYXRlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb29yZEluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBjb29yZGluYXRlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIFN0YXJ0cyBhdCBpbmRleCAwLCBpZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQsIGFuZCBhdCBpbmRleCAxIG90aGVyd2lzZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgY29vcmRpbmF0ZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpXG4gKlxuICogQG5hbWUgY29vcmRSZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258R2VvbWV0cnl8RmVhdHVyZX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRDb29yZCwgY29vcmRJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtleGNsdWRlV3JhcENvb3JkPWZhbHNlXSB3aGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBmaW5hbCBjb29yZGluYXRlIG9mIExpbmVhclJpbmdzIHRoYXQgd3JhcHMgdGhlIHJpbmcgaW4gaXRzIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge1wiZm9vXCI6IFwiYmFyXCJ9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge1wiaGVsbG9cIjogXCJ3b3JsZFwifSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuY29vcmRSZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50Q29vcmRcbiAqICAgLy89Y29vcmRJbmRleFxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogICByZXR1cm4gY3VycmVudENvb3JkO1xuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGNvb3JkUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUsIGV4Y2x1ZGVXcmFwQ29vcmQpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBjb29yZEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICAgICAgICBpZiAoY29vcmRJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRDb29yZDtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KTtcbiAgICB9LCBleGNsdWRlV3JhcENvb3JkKTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgcHJvcEVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgcHJvcEVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtPYmplY3R9IGN1cnJlbnRQcm9wZXJ0aWVzIFRoZSBjdXJyZW50IFByb3BlcnRpZXMgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgcHJvcGVydGllcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaCgpXG4gKlxuICogQG5hbWUgcHJvcEVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLnByb3BFYWNoKGZlYXR1cmVzLCBmdW5jdGlvbiAoY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleCkge1xuICogICAvLz1jdXJyZW50UHJvcGVydGllc1xuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBwcm9wRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIHZhciBpO1xuICAgIHN3aXRjaCAoZ2VvanNvbi50eXBlKSB7XG4gICAgY2FzZSAnRmVhdHVyZUNvbGxlY3Rpb24nOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGdlb2pzb24uZmVhdHVyZXNbaV0ucHJvcGVydGllcywgaSkgPT09IGZhbHNlKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICBjYXNlICdGZWF0dXJlJzpcbiAgICAgICAgY2FsbGJhY2soZ2VvanNvbi5wcm9wZXJ0aWVzLCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxufVxuXG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHByb3BSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBwcm9wUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0geyp9IGN1cnJlbnRQcm9wZXJ0aWVzIFRoZSBjdXJyZW50IFByb3BlcnRpZXMgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgcHJvcGVydGllcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QgaW50byBhIHNpbmdsZSB2YWx1ZSxcbiAqIHNpbWlsYXIgdG8gaG93IEFycmF5LnJlZHVjZSB3b3Jrcy4gSG93ZXZlciwgaW4gdGhpcyBjYXNlIHdlIGxhemlseSBydW5cbiAqIHRoZSByZWR1Y3Rpb24sIHNvIGFuIGFycmF5IG9mIGFsbCBwcm9wZXJ0aWVzIGlzIHVubmVjZXNzYXJ5LlxuICpcbiAqIEBuYW1lIHByb3BSZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYucHJvcFJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50UHJvcGVydGllc1xuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRQcm9wZXJ0aWVzXG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gcHJvcFJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgcHJvcEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRQcm9wZXJ0aWVzO1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZmVhdHVyZUVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgZmVhdHVyZUVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtGZWF0dXJlPGFueT59IGN1cnJlbnRGZWF0dXJlIFRoZSBjdXJyZW50IEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvXG4gKiBBcnJheS5mb3JFYWNoLlxuICpcbiAqIEBuYW1lIGZlYXR1cmVFYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmZlYXR1cmVFYWNoKGZlYXR1cmVzLCBmdW5jdGlvbiAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCkge1xuICogICAvLz1jdXJyZW50RmVhdHVyZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBmZWF0dXJlRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIGlmIChnZW9qc29uLnR5cGUgPT09ICdGZWF0dXJlJykge1xuICAgICAgICBjYWxsYmFjayhnZW9qc29uLCAwKTtcbiAgICB9IGVsc2UgaWYgKGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhnZW9qc29uLmZlYXR1cmVzW2ldLCBpKSA9PT0gZmFsc2UpIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBmZWF0dXJlUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgZmVhdHVyZVJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtGZWF0dXJlfSBjdXJyZW50RmVhdHVyZSBUaGUgY3VycmVudCBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKS5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge1wiZm9vXCI6IFwiYmFyXCJ9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge1wiaGVsbG9cIjogXCJ3b3JsZFwifSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZmVhdHVyZVJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50RmVhdHVyZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRGZWF0dXJlXG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZmVhdHVyZVJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgZmVhdHVyZUVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRGZWF0dXJlO1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIGNvb3JkaW5hdGVzIGZyb20gYW55IEdlb0pTT04gb2JqZWN0LlxuICpcbiAqIEBuYW1lIGNvb3JkQWxsXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcmV0dXJucyB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGUgcG9zaXRpb24gYXJyYXlcbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHZhciBjb29yZHMgPSB0dXJmLmNvb3JkQWxsKGZlYXR1cmVzKTtcbiAqIC8vPSBbWzI2LCAzN10sIFszNiwgNTNdXVxuICovXG5mdW5jdGlvbiBjb29yZEFsbChnZW9qc29uKSB7XG4gICAgdmFyIGNvb3JkcyA9IFtdO1xuICAgIGNvb3JkRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY29vcmQpIHtcbiAgICAgICAgY29vcmRzLnB1c2goY29vcmQpO1xuICAgIH0pO1xuICAgIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGdlb21FYWNoXG4gKlxuICogQGNhbGxiYWNrIGdlb21FYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7R2VvbWV0cnl9IGN1cnJlbnRHZW9tZXRyeSBUaGUgY3VycmVudCBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBmZWF0dXJlUHJvcGVydGllcyBUaGUgY3VycmVudCBGZWF0dXJlIFByb3BlcnRpZXMgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBmZWF0dXJlQkJveCBUaGUgY3VycmVudCBGZWF0dXJlIEJCb3ggYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBmZWF0dXJlSWQgVGhlIGN1cnJlbnQgRmVhdHVyZSBJZCBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZWFjaCBnZW9tZXRyeSBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaCgpXG4gKlxuICogQG5hbWUgZ2VvbUVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZClcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZ2VvbUVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpIHtcbiAqICAgLy89Y3VycmVudEdlb21ldHJ5XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1mZWF0dXJlUHJvcGVydGllc1xuICogICAvLz1mZWF0dXJlQkJveFxuICogICAvLz1mZWF0dXJlSWRcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBnZW9tRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIHZhciBpLCBqLCBnLCBnZW9tZXRyeSwgc3RvcEcsXG4gICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLFxuICAgICAgICBpc0dlb21ldHJ5Q29sbGVjdGlvbixcbiAgICAgICAgZmVhdHVyZVByb3BlcnRpZXMsXG4gICAgICAgIGZlYXR1cmVCQm94LFxuICAgICAgICBmZWF0dXJlSWQsXG4gICAgICAgIGZlYXR1cmVJbmRleCA9IDAsXG4gICAgICAgIGlzRmVhdHVyZUNvbGxlY3Rpb24gPSBnZW9qc29uLnR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgIGlzRmVhdHVyZSA9IGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmUnLFxuICAgICAgICBzdG9wID0gaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoIDogMTtcblxuICAgIC8vIFRoaXMgbG9naWMgbWF5IGxvb2sgYSBsaXR0bGUgd2VpcmQuIFRoZSByZWFzb24gd2h5IGl0IGlzIHRoYXQgd2F5XG4gICAgLy8gaXMgYmVjYXVzZSBpdCdzIHRyeWluZyB0byBiZSBmYXN0LiBHZW9KU09OIHN1cHBvcnRzIG11bHRpcGxlIGtpbmRzXG4gICAgLy8gb2Ygb2JqZWN0cyBhdCBpdHMgcm9vdDogRmVhdHVyZUNvbGxlY3Rpb24sIEZlYXR1cmVzLCBHZW9tZXRyaWVzLlxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaGFzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBoYW5kbGluZyBhbGwgb2YgdGhlbSwgYW5kIHRoYXRcbiAgICAvLyBtZWFucyB0aGF0IHNvbWUgb2YgdGhlIGBmb3JgIGxvb3BzIHlvdSBzZWUgYmVsb3cgYWN0dWFsbHkganVzdCBkb24ndCBhcHBseVxuICAgIC8vIHRvIGNlcnRhaW4gaW5wdXRzLiBGb3IgaW5zdGFuY2UsIGlmIHlvdSBnaXZlIHRoaXMganVzdCBhXG4gICAgLy8gUG9pbnQgZ2VvbWV0cnksIHRoZW4gYm90aCBsb29wcyBhcmUgc2hvcnQtY2lyY3VpdGVkIGFuZCBhbGwgd2UgZG9cbiAgICAvLyBpcyBncmFkdWFsbHkgcmVuYW1lIHRoZSBpbnB1dCB1bnRpbCBpdCdzIGNhbGxlZCAnZ2VvbWV0cnknLlxuICAgIC8vXG4gICAgLy8gVGhpcyBhbHNvIGFpbXMgdG8gYWxsb2NhdGUgYXMgZmV3IHJlc291cmNlcyBhcyBwb3NzaWJsZToganVzdCBhXG4gICAgLy8gZmV3IG51bWJlcnMgYW5kIGJvb2xlYW5zLCByYXRoZXIgdGhhbiBhbnkgdGVtcG9yYXJ5IGFycmF5cyBhcyB3b3VsZFxuICAgIC8vIGJlIHJlcXVpcmVkIHdpdGggdGhlIG5vcm1hbGl6YXRpb24gYXBwcm9hY2guXG4gICAgZm9yIChpID0gMDsgaSA8IHN0b3A7IGkrKykge1xuXG4gICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uID0gKGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5IDpcbiAgICAgICAgICAgIChpc0ZlYXR1cmUgPyBnZW9qc29uLmdlb21ldHJ5IDogZ2VvanNvbikpO1xuICAgICAgICBmZWF0dXJlUHJvcGVydGllcyA9IChpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzIDpcbiAgICAgICAgICAgIChpc0ZlYXR1cmUgPyBnZW9qc29uLnByb3BlcnRpZXMgOiB7fSkpO1xuICAgICAgICBmZWF0dXJlQkJveCA9IChpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tpXS5iYm94IDpcbiAgICAgICAgICAgIChpc0ZlYXR1cmUgPyBnZW9qc29uLmJib3ggOiB1bmRlZmluZWQpKTtcbiAgICAgICAgZmVhdHVyZUlkID0gKGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLmlkIDpcbiAgICAgICAgICAgIChpc0ZlYXR1cmUgPyBnZW9qc29uLmlkIDogdW5kZWZpbmVkKSk7XG4gICAgICAgIGlzR2VvbWV0cnlDb2xsZWN0aW9uID0gKGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uKSA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLnR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nIDogZmFsc2U7XG4gICAgICAgIHN0b3BHID0gaXNHZW9tZXRyeUNvbGxlY3Rpb24gPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi5nZW9tZXRyaWVzLmxlbmd0aCA6IDE7XG5cbiAgICAgICAgZm9yIChnID0gMDsgZyA8IHN0b3BHOyBnKyspIHtcbiAgICAgICAgICAgIGdlb21ldHJ5ID0gaXNHZW9tZXRyeUNvbGxlY3Rpb24gP1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXNbZ10gOiBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbjtcblxuICAgICAgICAgICAgLy8gSGFuZGxlIG51bGwgR2VvbWV0cnlcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhudWxsLCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoZ2VvbWV0cnkudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnUG9pbnQnOlxuICAgICAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgICAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soZ2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnR2VvbWV0cnlDb2xsZWN0aW9uJzoge1xuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBnZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhnZW9tZXRyeS5nZW9tZXRyaWVzW2pdLCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBHZW9tZXRyeSBUeXBlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gT25seSBpbmNyZWFzZSBgZmVhdHVyZUluZGV4YCBwZXIgZWFjaCBmZWF0dXJlXG4gICAgICAgIGZlYXR1cmVJbmRleCsrO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZ2VvbVJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGdlb21SZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7R2VvbWV0cnl9IGN1cnJlbnRHZW9tZXRyeSBUaGUgY3VycmVudCBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBmZWF0dXJlUHJvcGVydGllcyBUaGUgY3VycmVudCBGZWF0dXJlIFByb3BlcnRpZXMgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBmZWF0dXJlQkJveCBUaGUgY3VycmVudCBGZWF0dXJlIEJCb3ggYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBmZWF0dXJlSWQgVGhlIGN1cnJlbnQgRmVhdHVyZSBJZCBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZ2VvbWV0cnkgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpLlxuICpcbiAqIEBuYW1lIGdlb21SZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5nZW9tUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudEdlb21ldHJ5XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1mZWF0dXJlUHJvcGVydGllc1xuICogICAvLz1mZWF0dXJlQkJveFxuICogICAvLz1mZWF0dXJlSWRcbiAqICAgcmV0dXJuIGN1cnJlbnRHZW9tZXRyeVxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGdlb21SZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIGdlb21FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRHZW9tZXRyeTtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZmxhdHRlbkVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgZmxhdHRlbkVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtGZWF0dXJlfSBjdXJyZW50RmVhdHVyZSBUaGUgY3VycmVudCBmbGF0dGVuZWQgZmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZmxhdHRlbmVkIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0b1xuICogQXJyYXkuZm9yRWFjaC5cbiAqXG4gKiBAbmFtZSBmbGF0dGVuRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLm11bHRpUG9pbnQoW1s0MCwgMzBdLCBbMzYsIDUzXV0sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmZsYXR0ZW5FYWNoKGZlYXR1cmVzLCBmdW5jdGlvbiAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89Y3VycmVudEZlYXR1cmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZmxhdHRlbkVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICBnZW9tRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoZ2VvbWV0cnksIGZlYXR1cmVJbmRleCwgcHJvcGVydGllcywgYmJveCwgaWQpIHtcbiAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHNpbmdsZSBnZW9tZXRyeVxuICAgICAgICB2YXIgdHlwZSA9IChnZW9tZXRyeSA9PT0gbnVsbCkgPyBudWxsIDogZ2VvbWV0cnkudHlwZTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgY2FzZSAnUG9pbnQnOlxuICAgICAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soZmVhdHVyZShnZW9tZXRyeSwgcHJvcGVydGllcywge2Jib3g6IGJib3gsIGlkOiBpZH0pLCBmZWF0dXJlSW5kZXgsIDApID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGdlb21UeXBlO1xuXG4gICAgICAgIC8vIENhbGxiYWNrIGZvciBtdWx0aS1nZW9tZXRyeVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgICAgICBnZW9tVHlwZSA9ICdQb2ludCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgIGdlb21UeXBlID0gJ0xpbmVTdHJpbmcnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgICAgICBnZW9tVHlwZSA9ICdQb2x5Z29uJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgbXVsdGlGZWF0dXJlSW5kZXggPSAwOyBtdWx0aUZlYXR1cmVJbmRleCA8IGdlb21ldHJ5LmNvb3JkaW5hdGVzLmxlbmd0aDsgbXVsdGlGZWF0dXJlSW5kZXgrKykge1xuICAgICAgICAgICAgdmFyIGNvb3JkaW5hdGUgPSBnZW9tZXRyeS5jb29yZGluYXRlc1ttdWx0aUZlYXR1cmVJbmRleF07XG4gICAgICAgICAgICB2YXIgZ2VvbSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBnZW9tVHlwZSxcbiAgICAgICAgICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMpLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBmbGF0dGVuUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgZmxhdHRlblJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtGZWF0dXJlfSBjdXJyZW50RmVhdHVyZSBUaGUgY3VycmVudCBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBmbGF0dGVuZWQgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpLlxuICpcbiAqIEBuYW1lIGZsYXR0ZW5SZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYubXVsdGlQb2ludChbWzQwLCAzMF0sIFszNiwgNTNdXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZmxhdHRlblJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudEZlYXR1cmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50RmVhdHVyZVxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5SZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIGZsYXR0ZW5FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICAgICAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIG11bHRpRmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudEZlYXR1cmU7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3Igc2VnbWVudEVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgc2VnbWVudEVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50U2VnbWVudCBUaGUgY3VycmVudCBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gc2VnbWVudEluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIDItdmVydGV4IGxpbmUgc2VnbWVudCBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaCgpXG4gKiAoTXVsdGkpUG9pbnQgZ2VvbWV0cmllcyBkbyBub3QgY29udGFpbiBzZWdtZW50cyB0aGVyZWZvcmUgdGhleSBhcmUgaWdub3JlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW1tbLTUwLCA1XSwgWy00MCwgLTEwXSwgWy01MCwgLTEwXSwgWy00MCwgNV0sIFstNTAsIDVdXV0pO1xuICpcbiAqIC8vIEl0ZXJhdGUgb3ZlciBHZW9KU09OIGJ5IDItdmVydGV4IHNlZ21lbnRzXG4gKiB0dXJmLnNlZ21lbnRFYWNoKHBvbHlnb24sIGZ1bmN0aW9uIChjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRTZWdtZW50XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiAgIC8vPXNlZ21lbnRJbmRleFxuICogfSk7XG4gKlxuICogLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHNcbiAqIHZhciB0b3RhbCA9IDA7XG4gKiB0dXJmLnNlZ21lbnRFYWNoKHBvbHlnb24sIGZ1bmN0aW9uICgpIHtcbiAqICAgICB0b3RhbCsrO1xuICogfSk7XG4gKi9cbmZ1bmN0aW9uIHNlZ21lbnRFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgZmxhdHRlbkVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGZlYXR1cmUkJDEsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgdmFyIHNlZ21lbnRJbmRleCA9IDA7XG5cbiAgICAgICAgLy8gRXhjbHVkZSBudWxsIEdlb21ldHJpZXNcbiAgICAgICAgaWYgKCFmZWF0dXJlJCQxLmdlb21ldHJ5KSByZXR1cm47XG4gICAgICAgIC8vIChNdWx0aSlQb2ludCBnZW9tZXRyaWVzIGRvIG5vdCBjb250YWluIHNlZ21lbnRzIHRoZXJlZm9yZSB0aGV5IGFyZSBpZ25vcmVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgICAgdmFyIHR5cGUgPSBmZWF0dXJlJCQxLmdlb21ldHJ5LnR5cGU7XG4gICAgICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50JykgcmV0dXJuO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIDItdmVydGV4IGxpbmUgc2VnbWVudHNcbiAgICAgICAgdmFyIHByZXZpb3VzQ29vcmRzO1xuICAgICAgICBpZiAoY29vcmRFYWNoKGZlYXR1cmUkJDEsIGZ1bmN0aW9uIChjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleENvb3JkLCBtdXRsaVBhcnRJbmRleENvb3JkLCBnZW9tZXRyeUluZGV4KSB7XG4gICAgICAgICAgICAvLyBTaW11bGF0aW5nIGEgbWV0YS5jb29yZFJlZHVjZSgpIHNpbmNlIGByZWR1Y2VgIG9wZXJhdGlvbnMgY2Fubm90IGJlIHN0b3BwZWQgYnkgcmV0dXJuaW5nIGBmYWxzZWBcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0Nvb3JkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNDb29yZHMgPSBjdXJyZW50Q29vcmQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGN1cnJlbnRTZWdtZW50ID0gbGluZVN0cmluZyhbcHJldmlvdXNDb29yZHMsIGN1cnJlbnRDb29yZF0sIGZlYXR1cmUkJDEucHJvcGVydGllcyk7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBzZWdtZW50SW5kZXgrKztcbiAgICAgICAgICAgIHByZXZpb3VzQ29vcmRzID0gY3VycmVudENvb3JkO1xuICAgICAgICB9KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3Igc2VnbWVudFJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIHNlZ21lbnRSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gY3VycmVudFNlZ21lbnQgVGhlIGN1cnJlbnQgU2VnbWVudCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IHNlZ21lbnRJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgU2VnbWVudCBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgMi12ZXJ0ZXggbGluZSBzZWdtZW50IGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKVxuICogKE11bHRpKVBvaW50IGdlb21ldHJpZXMgZG8gbm90IGNvbnRhaW4gc2VnbWVudHMgdGhlcmVmb3JlIHRoZXkgYXJlIGlnbm9yZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudFNlZ21lbnQsIGN1cnJlbnRJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbiA9IHR1cmYucG9seWdvbihbW1stNTAsIDVdLCBbLTQwLCAtMTBdLCBbLTUwLCAtMTBdLCBbLTQwLCA1XSwgWy01MCwgNV1dXSk7XG4gKlxuICogLy8gSXRlcmF0ZSBvdmVyIEdlb0pTT04gYnkgMi12ZXJ0ZXggc2VnbWVudHNcbiAqIHR1cmYuc2VnbWVudFJlZHVjZShwb2x5Z29uLCBmdW5jdGlvbiAocHJldmlvdXNTZWdtZW50LCBjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KSB7XG4gKiAgIC8vPSBwcmV2aW91c1NlZ21lbnRcbiAqICAgLy89IGN1cnJlbnRTZWdtZW50XG4gKiAgIC8vPSBmZWF0dXJlSW5kZXhcbiAqICAgLy89IG11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPSBnZW9tZXRyeUluZGV4XG4gKiAgIC8vPSBzZWdtZW50SW5leFxuICogICByZXR1cm4gY3VycmVudFNlZ21lbnRcbiAqIH0pO1xuICpcbiAqIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHNlZ21lbnRzXG4gKiB2YXIgaW5pdGlhbFZhbHVlID0gMFxuICogdmFyIHRvdGFsID0gdHVyZi5zZWdtZW50UmVkdWNlKHBvbHlnb24sIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlKSB7XG4gKiAgICAgcHJldmlvdXNWYWx1ZSsrO1xuICogICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xuICogfSwgaW5pdGlhbFZhbHVlKTtcbiAqL1xuZnVuY3Rpb24gc2VnbWVudFJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTtcbiAgICBzZWdtZW50RWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCkge1xuICAgICAgICBpZiAoc3RhcnRlZCA9PT0gZmFsc2UgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50U2VnbWVudDtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCk7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBsaW5lRWFjaFxuICpcbiAqIEBjYWxsYmFjayBsaW5lRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmU8TGluZVN0cmluZz59IGN1cnJlbnRMaW5lIFRoZSBjdXJyZW50IExpbmVTdHJpbmd8TGluZWFyUmluZyBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgbGluZSBvciByaW5nIGNvb3JkaW5hdGVzIGluIExpbmVTdHJpbmcsIFBvbHlnb24sIE11bHRpTGluZVN0cmluZywgTXVsdGlQb2x5Z29uIEZlYXR1cmVzIG9yIEdlb21ldHJpZXMsXG4gKiBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2guXG4gKlxuICogQG5hbWUgbGluZUVhY2hcbiAqIEBwYXJhbSB7R2VvbWV0cnl8RmVhdHVyZTxMaW5lU3RyaW5nfFBvbHlnb258TXVsdGlMaW5lU3RyaW5nfE11bHRpUG9seWdvbj59IGdlb2pzb24gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleClcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1xuICogICBbWzI2LCAzN10sIFszNSwgNDVdXSxcbiAqICAgW1szNiwgNTNdLCBbMzgsIDUwXSwgWzQxLCA1NV1dXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmxpbmVFYWNoKG11bHRpTGluZSwgZnVuY3Rpb24gKGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRMaW5lXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gbGluZUVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICAvLyB2YWxpZGF0aW9uXG4gICAgaWYgKCFnZW9qc29uKSB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgcmVxdWlyZWQnKTtcblxuICAgIGZsYXR0ZW5FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChmZWF0dXJlJCQxLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gICAgICAgIGlmIChmZWF0dXJlJCQxLmdlb21ldHJ5ID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIHZhciB0eXBlID0gZmVhdHVyZSQkMS5nZW9tZXRyeS50eXBlO1xuICAgICAgICB2YXIgY29vcmRzID0gZmVhdHVyZSQkMS5nZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGZlYXR1cmUkJDEsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIDAsIDApID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgZm9yICh2YXIgZ2VvbWV0cnlJbmRleCA9IDA7IGdlb21ldHJ5SW5kZXggPCBjb29yZHMubGVuZ3RoOyBnZW9tZXRyeUluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sobGluZVN0cmluZyhjb29yZHNbZ2VvbWV0cnlJbmRleF0sIGZlYXR1cmUkJDEucHJvcGVydGllcyksIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgbGluZVJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGxpbmVSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gY3VycmVudExpbmUgVGhlIGN1cnJlbnQgTGluZVN0cmluZ3xMaW5lYXJSaW5nIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpLlxuICpcbiAqIEBuYW1lIGxpbmVSZWR1Y2VcbiAqIEBwYXJhbSB7R2VvbWV0cnl8RmVhdHVyZTxMaW5lU3RyaW5nfFBvbHlnb258TXVsdGlMaW5lU3RyaW5nfE11bHRpUG9seWdvbj59IGdlb2pzb24gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpUG9seSA9IHR1cmYubXVsdGlQb2x5Z29uKFtcbiAqICAgdHVyZi5wb2x5Z29uKFtbWzEyLDQ4XSxbMiw0MV0sWzI0LDM4XSxbMTIsNDhdXSwgW1s5LDQ0XSxbMTMsNDFdLFsxMyw0NV0sWzksNDRdXV0pLFxuICogICB0dXJmLnBvbHlnb24oW1tbNSwgNV0sIFswLCAwXSwgWzIsIDJdLCBbNCwgNF0sIFs1LCA1XV1dKVxuICogXSk7XG4gKlxuICogdHVyZi5saW5lUmVkdWNlKG11bHRpUG9seSwgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudExpbmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRMaW5lXG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gbGluZVJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgbGluZUVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50TGluZTtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIEZpbmRzIGEgcGFydGljdWxhciAyLXZlcnRleCBMaW5lU3RyaW5nIFNlZ21lbnQgZnJvbSBhIEdlb0pTT04gdXNpbmcgYEB0dXJmL21ldGFgIGluZGV4ZXMuXG4gKlxuICogTmVnYXRpdmUgaW5kZXhlcyBhcmUgcGVybWl0dGVkLlxuICogUG9pbnQgJiBNdWx0aVBvaW50IHdpbGwgYWx3YXlzIHJldHVybiBudWxsLlxuICpcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBBbnkgR2VvSlNPTiBGZWF0dXJlIG9yIEdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5mZWF0dXJlSW5kZXg9MF0gRmVhdHVyZSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm11bHRpRmVhdHVyZUluZGV4PTBdIE11bHRpLUZlYXR1cmUgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5nZW9tZXRyeUluZGV4PTBdIEdlb21ldHJ5IEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2VnbWVudEluZGV4PTBdIFNlZ21lbnQgSW5kZXhcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5wcm9wZXJ0aWVzPXt9XSBUcmFuc2xhdGUgUHJvcGVydGllcyB0byBvdXRwdXQgTGluZVN0cmluZ1xuICogQHBhcmFtIHtCQm94fSBbb3B0aW9ucy5iYm94PXt9XSBUcmFuc2xhdGUgQkJveCB0byBvdXRwdXQgTGluZVN0cmluZ1xuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBbb3B0aW9ucy5pZD17fV0gVHJhbnNsYXRlIElkIHRvIG91dHB1dCBMaW5lU3RyaW5nXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gMi12ZXJ0ZXggR2VvSlNPTiBGZWF0dXJlIExpbmVTdHJpbmdcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1xuICogICAgIFtbMTAsIDEwXSwgWzUwLCAzMF0sIFszMCwgNDBdXSxcbiAqICAgICBbWy0xMCwgLTEwXSwgWy01MCwgLTMwXSwgWy0zMCwgLTQwXV1cbiAqIF0pO1xuICpcbiAqIC8vIEZpcnN0IFNlZ21lbnQgKGRlZmF1bHRzIGFyZSAwKVxuICogdHVyZi5maW5kU2VnbWVudChtdWx0aUxpbmUpO1xuICogLy8gPT4gRmVhdHVyZTxMaW5lU3RyaW5nPFtbMTAsIDEwXSwgWzUwLCAzMF1dPj5cbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IG9mIDJuZCBNdWx0aSBGZWF0dXJlXG4gKiB0dXJmLmZpbmRTZWdtZW50KG11bHRpTGluZSwge211bHRpRmVhdHVyZUluZGV4OiAxfSk7XG4gKiAvLyA9PiBGZWF0dXJlPExpbmVTdHJpbmc8W1stMTAsIC0xMF0sIFstNTAsIC0zMF1dPj5cbiAqXG4gKiAvLyBMYXN0IFNlZ21lbnQgb2YgTGFzdCBNdWx0aSBGZWF0dXJlXG4gKiB0dXJmLmZpbmRTZWdtZW50KG11bHRpTGluZSwge211bHRpRmVhdHVyZUluZGV4OiAtMSwgc2VnbWVudEluZGV4OiAtMX0pO1xuICogLy8gPT4gRmVhdHVyZTxMaW5lU3RyaW5nPFtbLTUwLCAtMzBdLCBbLTMwLCAtNDBdXT4+XG4gKi9cbmZ1bmN0aW9uIGZpbmRTZWdtZW50KGdlb2pzb24sIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgZmVhdHVyZUluZGV4ID0gb3B0aW9ucy5mZWF0dXJlSW5kZXggfHwgMDtcbiAgICB2YXIgbXVsdGlGZWF0dXJlSW5kZXggPSBvcHRpb25zLm11bHRpRmVhdHVyZUluZGV4IHx8IDA7XG4gICAgdmFyIGdlb21ldHJ5SW5kZXggPSBvcHRpb25zLmdlb21ldHJ5SW5kZXggfHwgMDtcbiAgICB2YXIgc2VnbWVudEluZGV4ID0gb3B0aW9ucy5zZWdtZW50SW5kZXggfHwgMDtcblxuICAgIC8vIEZpbmQgRmVhdHVyZUluZGV4XG4gICAgdmFyIHByb3BlcnRpZXMgPSBvcHRpb25zLnByb3BlcnRpZXM7XG4gICAgdmFyIGdlb21ldHJ5O1xuXG4gICAgc3dpdGNoIChnZW9qc29uLnR5cGUpIHtcbiAgICBjYXNlICdGZWF0dXJlQ29sbGVjdGlvbic6XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPCAwKSBmZWF0dXJlSW5kZXggPSBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aCArIGZlYXR1cmVJbmRleDtcbiAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwgZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLnByb3BlcnRpZXM7XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLmdlb21ldHJ5O1xuICAgICAgICBicmVhaztcbiAgICBjYXNlICdGZWF0dXJlJzpcbiAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwgZ2VvanNvbi5wcm9wZXJ0aWVzO1xuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb24uZ2VvbWV0cnk7XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BvaW50JzpcbiAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb247XG4gICAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLy8gRmluZCBTZWdtZW50SW5kZXhcbiAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHZhciBjb29yZHMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICBzd2l0Y2ggKGdlb21ldHJ5LnR5cGUpIHtcbiAgICBjYXNlICdQb2ludCc6XG4gICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICBpZiAoc2VnbWVudEluZGV4IDwgMCkgc2VnbWVudEluZGV4ID0gY29vcmRzLmxlbmd0aCArIHNlZ21lbnRJbmRleCAtIDE7XG4gICAgICAgIHJldHVybiBsaW5lU3RyaW5nKFtjb29yZHNbc2VnbWVudEluZGV4XSwgY29vcmRzW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgIGlmIChnZW9tZXRyeUluZGV4IDwgMCkgZ2VvbWV0cnlJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBnZW9tZXRyeUluZGV4O1xuICAgICAgICBpZiAoc2VnbWVudEluZGV4IDwgMCkgc2VnbWVudEluZGV4ID0gY29vcmRzW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCArIHNlZ21lbnRJbmRleCAtIDE7XG4gICAgICAgIHJldHVybiBsaW5lU3RyaW5nKFtjb29yZHNbZ2VvbWV0cnlJbmRleF1bc2VnbWVudEluZGV4XSwgY29vcmRzW2dlb21ldHJ5SW5kZXhdW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIHNlZ21lbnRJbmRleCAtIDE7XG4gICAgICAgIHJldHVybiBsaW5lU3RyaW5nKFtjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW3NlZ21lbnRJbmRleF0sIGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bc2VnbWVudEluZGV4ICsgMV1dLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgICAgaWYgKGdlb21ldHJ5SW5kZXggPCAwKSBnZW9tZXRyeUluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XS5sZW5ndGggKyBnZW9tZXRyeUluZGV4O1xuICAgICAgICBpZiAoc2VnbWVudEluZGV4IDwgMCkgc2VnbWVudEluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XS5sZW5ndGggLSBzZWdtZW50SW5kZXggLSAxO1xuICAgICAgICByZXR1cm4gbGluZVN0cmluZyhbY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XVtzZWdtZW50SW5kZXhdLCBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyBpbnZhbGlkJyk7XG59XG5cbi8qKlxuICogRmluZHMgYSBwYXJ0aWN1bGFyIFBvaW50IGZyb20gYSBHZW9KU09OIHVzaW5nIGBAdHVyZi9tZXRhYCBpbmRleGVzLlxuICpcbiAqIE5lZ2F0aXZlIGluZGV4ZXMgYXJlIHBlcm1pdHRlZC5cbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gQW55IEdlb0pTT04gRmVhdHVyZSBvciBHZW9tZXRyeVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZmVhdHVyZUluZGV4PTBdIEZlYXR1cmUgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tdWx0aUZlYXR1cmVJbmRleD0wXSBNdWx0aS1GZWF0dXJlIEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZ2VvbWV0cnlJbmRleD0wXSBHZW9tZXRyeSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmNvb3JkSW5kZXg9MF0gQ29vcmQgSW5kZXhcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5wcm9wZXJ0aWVzPXt9XSBUcmFuc2xhdGUgUHJvcGVydGllcyB0byBvdXRwdXQgUG9pbnRcbiAqIEBwYXJhbSB7QkJveH0gW29wdGlvbnMuYmJveD17fV0gVHJhbnNsYXRlIEJCb3ggdG8gb3V0cHV0IFBvaW50XG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtvcHRpb25zLmlkPXt9XSBUcmFuc2xhdGUgSWQgdG8gb3V0cHV0IFBvaW50XG4gKiBAcmV0dXJucyB7RmVhdHVyZTxQb2ludD59IDItdmVydGV4IEdlb0pTT04gRmVhdHVyZSBQb2ludFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aUxpbmUgPSB0dXJmLm11bHRpTGluZVN0cmluZyhbXG4gKiAgICAgW1sxMCwgMTBdLCBbNTAsIDMwXSwgWzMwLCA0MF1dLFxuICogICAgIFtbLTEwLCAtMTBdLCBbLTUwLCAtMzBdLCBbLTMwLCAtNDBdXVxuICogXSk7XG4gKlxuICogLy8gRmlyc3QgU2VnbWVudCAoZGVmYXVsdHMgYXJlIDApXG4gKiB0dXJmLmZpbmRQb2ludChtdWx0aUxpbmUpO1xuICogLy8gPT4gRmVhdHVyZTxQb2ludDxbMTAsIDEwXT4+XG4gKlxuICogLy8gRmlyc3QgU2VnbWVudCBvZiB0aGUgMm5kIE11bHRpLUZlYXR1cmVcbiAqIHR1cmYuZmluZFBvaW50KG11bHRpTGluZSwge211bHRpRmVhdHVyZUluZGV4OiAxfSk7XG4gKiAvLyA9PiBGZWF0dXJlPFBvaW50PFstMTAsIC0xMF0+PlxuICpcbiAqIC8vIExhc3QgU2VnbWVudCBvZiBsYXN0IE11bHRpLUZlYXR1cmVcbiAqIHR1cmYuZmluZFBvaW50KG11bHRpTGluZSwge211bHRpRmVhdHVyZUluZGV4OiAtMSwgY29vcmRJbmRleDogLTF9KTtcbiAqIC8vID0+IEZlYXR1cmU8UG9pbnQ8Wy0zMCwgLTQwXT4+XG4gKi9cbmZ1bmN0aW9uIGZpbmRQb2ludChnZW9qc29uLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIGZlYXR1cmVJbmRleCA9IG9wdGlvbnMuZmVhdHVyZUluZGV4IHx8IDA7XG4gICAgdmFyIG11bHRpRmVhdHVyZUluZGV4ID0gb3B0aW9ucy5tdWx0aUZlYXR1cmVJbmRleCB8fCAwO1xuICAgIHZhciBnZW9tZXRyeUluZGV4ID0gb3B0aW9ucy5nZW9tZXRyeUluZGV4IHx8IDA7XG4gICAgdmFyIGNvb3JkSW5kZXggPSBvcHRpb25zLmNvb3JkSW5kZXggfHwgMDtcblxuICAgIC8vIEZpbmQgRmVhdHVyZUluZGV4XG4gICAgdmFyIHByb3BlcnRpZXMgPSBvcHRpb25zLnByb3BlcnRpZXM7XG4gICAgdmFyIGdlb21ldHJ5O1xuXG4gICAgc3dpdGNoIChnZW9qc29uLnR5cGUpIHtcbiAgICBjYXNlICdGZWF0dXJlQ29sbGVjdGlvbic6XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPCAwKSBmZWF0dXJlSW5kZXggPSBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aCArIGZlYXR1cmVJbmRleDtcbiAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwgZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLnByb3BlcnRpZXM7XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLmdlb21ldHJ5O1xuICAgICAgICBicmVhaztcbiAgICBjYXNlICdGZWF0dXJlJzpcbiAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwgZ2VvanNvbi5wcm9wZXJ0aWVzO1xuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb24uZ2VvbWV0cnk7XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BvaW50JzpcbiAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb247XG4gICAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLy8gRmluZCBDb29yZCBJbmRleFxuICAgIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGNvb3JkcyA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgIHN3aXRjaCAoZ2VvbWV0cnkudHlwZSkge1xuICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgcmV0dXJuIHBvaW50KGNvb3JkcywgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgICByZXR1cm4gcG9pbnQoY29vcmRzW211bHRpRmVhdHVyZUluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgIGlmIChjb29yZEluZGV4IDwgMCkgY29vcmRJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBjb29yZEluZGV4O1xuICAgICAgICByZXR1cm4gcG9pbnQoY29vcmRzW2Nvb3JkSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgaWYgKGdlb21ldHJ5SW5kZXggPCAwKSBnZW9tZXRyeUluZGV4ID0gY29vcmRzLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICAgIGlmIChjb29yZEluZGV4IDwgMCkgY29vcmRJbmRleCA9IGNvb3Jkc1tnZW9tZXRyeUluZGV4XS5sZW5ndGggKyBjb29yZEluZGV4O1xuICAgICAgICByZXR1cm4gcG9pbnQoY29vcmRzW2dlb21ldHJ5SW5kZXhdW2Nvb3JkSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgICAgaWYgKGNvb3JkSW5kZXggPCAwKSBjb29yZEluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XS5sZW5ndGggKyBjb29yZEluZGV4O1xuICAgICAgICByZXR1cm4gcG9pbnQoY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtjb29yZEluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICAgIGlmIChnZW9tZXRyeUluZGV4IDwgMCkgZ2VvbWV0cnlJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0ubGVuZ3RoICsgZ2VvbWV0cnlJbmRleDtcbiAgICAgICAgaWYgKGNvb3JkSW5kZXggPCAwKSBjb29yZEluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XS5sZW5ndGggLSBjb29yZEluZGV4O1xuICAgICAgICByZXR1cm4gcG9pbnQoY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XVtjb29yZEluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyBpbnZhbGlkJyk7XG59XG5cbmV4cG9ydCB7IGNvb3JkRWFjaCwgY29vcmRSZWR1Y2UsIHByb3BFYWNoLCBwcm9wUmVkdWNlLCBmZWF0dXJlRWFjaCwgZmVhdHVyZVJlZHVjZSwgY29vcmRBbGwsIGdlb21FYWNoLCBnZW9tUmVkdWNlLCBmbGF0dGVuRWFjaCwgZmxhdHRlblJlZHVjZSwgc2VnbWVudEVhY2gsIHNlZ21lbnRSZWR1Y2UsIGxpbmVFYWNoLCBsaW5lUmVkdWNlLCBmaW5kU2VnbWVudCwgZmluZFBvaW50IH07XG4iLCIvKipcbiAqIFJldHVybnMgYSBjbG9uZWQgY29weSBvZiB0aGUgcGFzc2VkIEdlb0pTT04gT2JqZWN0LCBpbmNsdWRpbmcgcG9zc2libGUgJ0ZvcmVpZ24gTWVtYmVycycuXG4gKiB+My01eCBmYXN0ZXIgdGhhbiB0aGUgY29tbW9uIEpTT04ucGFyc2UgKyBKU09OLnN0cmluZ2lmeSBjb21ibyBtZXRob2QuXG4gKlxuICogQG5hbWUgY2xvbmVcbiAqIEBwYXJhbSB7R2VvSlNPTn0gZ2VvanNvbiBHZW9KU09OIE9iamVjdFxuICogQHJldHVybnMge0dlb0pTT059IGNsb25lZCBHZW9KU09OIE9iamVjdFxuICogQGV4YW1wbGVcbiAqIHZhciBsaW5lID0gdHVyZi5saW5lU3RyaW5nKFtbLTc0LCA0MF0sIFstNzgsIDQyXSwgWy04MiwgMzVdXSwge2NvbG9yOiAncmVkJ30pO1xuICpcbiAqIHZhciBsaW5lQ2xvbmVkID0gdHVyZi5jbG9uZShsaW5lKTtcbiAqL1xuZnVuY3Rpb24gY2xvbmUoZ2VvanNvbikge1xuICAgIGlmICghZ2VvanNvbikgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIHJlcXVpcmVkJyk7XG5cbiAgICBzd2l0Y2ggKGdlb2pzb24udHlwZSkge1xuICAgIGNhc2UgJ0ZlYXR1cmUnOlxuICAgICAgICByZXR1cm4gY2xvbmVGZWF0dXJlKGdlb2pzb24pO1xuICAgIGNhc2UgJ0ZlYXR1cmVDb2xsZWN0aW9uJzpcbiAgICAgICAgcmV0dXJuIGNsb25lRmVhdHVyZUNvbGxlY3Rpb24oZ2VvanNvbik7XG4gICAgY2FzZSAnUG9pbnQnOlxuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICBjYXNlICdHZW9tZXRyeUNvbGxlY3Rpb24nOlxuICAgICAgICByZXR1cm4gY2xvbmVHZW9tZXRyeShnZW9qc29uKTtcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gR2VvSlNPTiB0eXBlJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIENsb25lIEZlYXR1cmVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGZWF0dXJlPGFueT59IGdlb2pzb24gR2VvSlNPTiBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxhbnk+fSBjbG9uZWQgRmVhdHVyZVxuICovXG5mdW5jdGlvbiBjbG9uZUZlYXR1cmUoZ2VvanNvbikge1xuICAgIHZhciBjbG9uZWQgPSB7dHlwZTogJ0ZlYXR1cmUnfTtcbiAgICAvLyBQcmVzZXJ2ZSBGb3JlaWduIE1lbWJlcnNcbiAgICBPYmplY3Qua2V5cyhnZW9qc29uKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgIGNhc2UgJ3Byb3BlcnRpZXMnOlxuICAgICAgICBjYXNlICdnZW9tZXRyeSc6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjbG9uZWRba2V5XSA9IGdlb2pzb25ba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEFkZCBwcm9wZXJ0aWVzICYgZ2VvbWV0cnkgbGFzdFxuICAgIGNsb25lZC5wcm9wZXJ0aWVzID0gY2xvbmVQcm9wZXJ0aWVzKGdlb2pzb24ucHJvcGVydGllcyk7XG4gICAgY2xvbmVkLmdlb21ldHJ5ID0gY2xvbmVHZW9tZXRyeShnZW9qc29uLmdlb21ldHJ5KTtcbiAgICByZXR1cm4gY2xvbmVkO1xufVxuXG4vKipcbiAqIENsb25lIFByb3BlcnRpZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgR2VvSlNPTiBQcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWQgUHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBjbG9uZVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgIHZhciBjbG9uZWQgPSB7fTtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHJldHVybiBjbG9uZWQ7XG4gICAgT2JqZWN0LmtleXMocHJvcGVydGllcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBudWxsXG4gICAgICAgICAgICAgICAgY2xvbmVkW2tleV0gPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgQXJyYXlcbiAgICAgICAgICAgICAgICBjbG9uZWRba2V5XSA9IHZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIGdlbmVyaWMgT2JqZWN0XG4gICAgICAgICAgICAgICAgY2xvbmVkW2tleV0gPSBjbG9uZVByb3BlcnRpZXModmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgY2xvbmVkW2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmVkO1xufVxuXG4vKipcbiAqIENsb25lIEZlYXR1cmUgQ29sbGVjdGlvblxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9uPGFueT59IGdlb2pzb24gR2VvSlNPTiBGZWF0dXJlIENvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxhbnk+fSBjbG9uZWQgRmVhdHVyZSBDb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNsb25lRmVhdHVyZUNvbGxlY3Rpb24oZ2VvanNvbikge1xuICAgIHZhciBjbG9uZWQgPSB7dHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJ307XG5cbiAgICAvLyBQcmVzZXJ2ZSBGb3JlaWduIE1lbWJlcnNcbiAgICBPYmplY3Qua2V5cyhnZW9qc29uKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgIGNhc2UgJ2ZlYXR1cmVzJzpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNsb25lZFtrZXldID0gZ2VvanNvbltrZXldO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQWRkIGZlYXR1cmVzXG4gICAgY2xvbmVkLmZlYXR1cmVzID0gZ2VvanNvbi5mZWF0dXJlcy5tYXAoZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lRmVhdHVyZShmZWF0dXJlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmVkO1xufVxuXG4vKipcbiAqIENsb25lIEdlb21ldHJ5XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7R2VvbWV0cnk8YW55Pn0gZ2VvbWV0cnkgR2VvSlNPTiBHZW9tZXRyeVxuICogQHJldHVybnMge0dlb21ldHJ5PGFueT59IGNsb25lZCBHZW9tZXRyeVxuICovXG5mdW5jdGlvbiBjbG9uZUdlb21ldHJ5KGdlb21ldHJ5KSB7XG4gICAgdmFyIGdlb20gPSB7dHlwZTogZ2VvbWV0cnkudHlwZX07XG4gICAgaWYgKGdlb21ldHJ5LmJib3gpIGdlb20uYmJveCA9IGdlb21ldHJ5LmJib3g7XG5cbiAgICBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gJ0dlb21ldHJ5Q29sbGVjdGlvbicpIHtcbiAgICAgICAgZ2VvbS5nZW9tZXRyaWVzID0gZ2VvbWV0cnkuZ2VvbWV0cmllcy5tYXAoZnVuY3Rpb24gKGdlb20pIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZUdlb21ldHJ5KGdlb20pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdlb207XG4gICAgfVxuICAgIGdlb20uY29vcmRpbmF0ZXMgPSBkZWVwU2xpY2UoZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xuICAgIHJldHVybiBnZW9tO1xufVxuXG4vKipcbiAqIERlZXAgU2xpY2UgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtDb29yZGluYXRlc30gY29vcmRzIENvb3JkaW5hdGVzXG4gKiBAcmV0dXJucyB7Q29vcmRpbmF0ZXN9IGFsbCBjb29yZGluYXRlcyBzbGljZWRcbiAqL1xuZnVuY3Rpb24gZGVlcFNsaWNlKGNvb3Jkcykge1xuICAgIGlmICh0eXBlb2YgY29vcmRzWzBdICE9PSAnb2JqZWN0JykgeyByZXR1cm4gY29vcmRzLnNsaWNlKCk7IH1cbiAgICByZXR1cm4gY29vcmRzLm1hcChmdW5jdGlvbiAoY29vcmQpIHtcbiAgICAgICAgcmV0dXJuIGRlZXBTbGljZShjb29yZCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lO1xuIiwiLyoqXG4gKiBFYXJ0aCBSYWRpdXMgdXNlZCB3aXRoIHRoZSBIYXJ2ZXNpbmUgZm9ybXVsYSBhbmQgYXBwcm94aW1hdGVzIHVzaW5nIGEgc3BoZXJpY2FsIChub24tZWxsaXBzb2lkKSBFYXJ0aC5cbiAqL1xudmFyIGVhcnRoUmFkaXVzID0gNjM3MTAwOC44O1xuXG4vKipcbiAqIFVuaXQgb2YgbWVhc3VyZW1lbnQgZmFjdG9ycyB1c2luZyBhIHNwaGVyaWNhbCAobm9uLWVsbGlwc29pZCkgZWFydGggcmFkaXVzLlxuICovXG52YXIgZmFjdG9ycyA9IHtcbiAgICBtZXRlcnM6IGVhcnRoUmFkaXVzLFxuICAgIG1ldHJlczogZWFydGhSYWRpdXMsXG4gICAgbWlsbGltZXRlcnM6IGVhcnRoUmFkaXVzICogMTAwMCxcbiAgICBtaWxsaW1ldHJlczogZWFydGhSYWRpdXMgKiAxMDAwLFxuICAgIGNlbnRpbWV0ZXJzOiBlYXJ0aFJhZGl1cyAqIDEwMCxcbiAgICBjZW50aW1ldHJlczogZWFydGhSYWRpdXMgKiAxMDAsXG4gICAga2lsb21ldGVyczogZWFydGhSYWRpdXMgLyAxMDAwLFxuICAgIGtpbG9tZXRyZXM6IGVhcnRoUmFkaXVzIC8gMTAwMCxcbiAgICBtaWxlczogZWFydGhSYWRpdXMgLyAxNjA5LjM0NCxcbiAgICBuYXV0aWNhbG1pbGVzOiBlYXJ0aFJhZGl1cyAvIDE4NTIsXG4gICAgaW5jaGVzOiBlYXJ0aFJhZGl1cyAqIDM5LjM3MCxcbiAgICB5YXJkczogZWFydGhSYWRpdXMgLyAxLjA5MzYsXG4gICAgZmVldDogZWFydGhSYWRpdXMgKiAzLjI4MDg0LFxuICAgIHJhZGlhbnM6IDEsXG4gICAgZGVncmVlczogZWFydGhSYWRpdXMgLyAxMTEzMjUsXG59O1xuXG4vKipcbiAqIFVuaXRzIG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgYmFzZWQgb24gMSBtZXRlci5cbiAqL1xudmFyIHVuaXRzRmFjdG9ycyA9IHtcbiAgICBtZXRlcnM6IDEsXG4gICAgbWV0cmVzOiAxLFxuICAgIG1pbGxpbWV0ZXJzOiAxMDAwLFxuICAgIG1pbGxpbWV0cmVzOiAxMDAwLFxuICAgIGNlbnRpbWV0ZXJzOiAxMDAsXG4gICAgY2VudGltZXRyZXM6IDEwMCxcbiAgICBraWxvbWV0ZXJzOiAxIC8gMTAwMCxcbiAgICBraWxvbWV0cmVzOiAxIC8gMTAwMCxcbiAgICBtaWxlczogMSAvIDE2MDkuMzQ0LFxuICAgIG5hdXRpY2FsbWlsZXM6IDEgLyAxODUyLFxuICAgIGluY2hlczogMzkuMzcwLFxuICAgIHlhcmRzOiAxIC8gMS4wOTM2LFxuICAgIGZlZXQ6IDMuMjgwODQsXG4gICAgcmFkaWFuczogMSAvIGVhcnRoUmFkaXVzLFxuICAgIGRlZ3JlZXM6IDEgLyAxMTEzMjUsXG59O1xuXG4vKipcbiAqIEFyZWEgb2YgbWVhc3VyZW1lbnQgZmFjdG9ycyBiYXNlZCBvbiAxIHNxdWFyZSBtZXRlci5cbiAqL1xudmFyIGFyZWFGYWN0b3JzID0ge1xuICAgIG1ldGVyczogMSxcbiAgICBtZXRyZXM6IDEsXG4gICAgbWlsbGltZXRlcnM6IDEwMDAwMDAsXG4gICAgbWlsbGltZXRyZXM6IDEwMDAwMDAsXG4gICAgY2VudGltZXRlcnM6IDEwMDAwLFxuICAgIGNlbnRpbWV0cmVzOiAxMDAwMCxcbiAgICBraWxvbWV0ZXJzOiAwLjAwMDAwMSxcbiAgICBraWxvbWV0cmVzOiAwLjAwMDAwMSxcbiAgICBhY3JlczogMC4wMDAyNDcxMDUsXG4gICAgbWlsZXM6IDMuODZlLTcsXG4gICAgeWFyZHM6IDEuMTk1OTkwMDQ2LFxuICAgIGZlZXQ6IDEwLjc2MzkxMDQxNyxcbiAgICBpbmNoZXM6IDE1NTAuMDAzMTAwMDA2XG59O1xuXG4vKipcbiAqIFdyYXBzIGEgR2VvSlNPTiB7QGxpbmsgR2VvbWV0cnl9IGluIGEgR2VvSlNPTiB7QGxpbmsgRmVhdHVyZX0uXG4gKlxuICogQG5hbWUgZmVhdHVyZVxuICogQHBhcmFtIHtHZW9tZXRyeX0gZ2VvbWV0cnkgaW5wdXQgZ2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZX0gYSBHZW9KU09OIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgZ2VvbWV0cnkgPSB7XG4gKiAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgIFwiY29vcmRpbmF0ZXNcIjogWzExMCwgNTBdXG4gKiB9O1xuICpcbiAqIHZhciBmZWF0dXJlID0gdHVyZi5mZWF0dXJlKGdlb21ldHJ5KTtcbiAqXG4gKiAvLz1mZWF0dXJlXG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmUoZ2VvbWV0cnksIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgYmJveCA9IG9wdGlvbnMuYmJveDtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmlkO1xuXG4gICAgLy8gVmFsaWRhdGlvblxuICAgIGlmIChnZW9tZXRyeSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2dlb21ldHJ5IGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKHByb3BlcnRpZXMgJiYgcHJvcGVydGllcy5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB0aHJvdyBuZXcgRXJyb3IoJ3Byb3BlcnRpZXMgbXVzdCBiZSBhbiBPYmplY3QnKTtcbiAgICBpZiAoYmJveCkgdmFsaWRhdGVCQm94KGJib3gpO1xuICAgIGlmIChpZCkgdmFsaWRhdGVJZChpZCk7XG5cbiAgICAvLyBNYWluXG4gICAgdmFyIGZlYXQgPSB7dHlwZTogJ0ZlYXR1cmUnfTtcbiAgICBpZiAoaWQpIGZlYXQuaWQgPSBpZDtcbiAgICBpZiAoYmJveCkgZmVhdC5iYm94ID0gYmJveDtcbiAgICBmZWF0LnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgIGZlYXQuZ2VvbWV0cnkgPSBnZW9tZXRyeTtcbiAgICByZXR1cm4gZmVhdDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgR2VvSlNPTiB7QGxpbmsgR2VvbWV0cnl9IGZyb20gYSBHZW9tZXRyeSBzdHJpbmcgdHlwZSAmIGNvb3JkaW5hdGVzLlxuICogRm9yIEdlb21ldHJ5Q29sbGVjdGlvbiB0eXBlIHVzZSBgaGVscGVycy5nZW9tZXRyeUNvbGxlY3Rpb25gXG4gKlxuICogQG5hbWUgZ2VvbWV0cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIEdlb21ldHJ5IFR5cGVcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gY29vcmRpbmF0ZXMgQ29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW9tZXRyeVxuICogQHJldHVybnMge0dlb21ldHJ5fSBhIEdlb0pTT04gR2VvbWV0cnlcbiAqIEBleGFtcGxlXG4gKiB2YXIgdHlwZSA9ICdQb2ludCc7XG4gKiB2YXIgY29vcmRpbmF0ZXMgPSBbMTEwLCA1MF07XG4gKlxuICogdmFyIGdlb21ldHJ5ID0gdHVyZi5nZW9tZXRyeSh0eXBlLCBjb29yZGluYXRlcyk7XG4gKlxuICogLy89Z2VvbWV0cnlcbiAqL1xuZnVuY3Rpb24gZ2VvbWV0cnkodHlwZSwgY29vcmRpbmF0ZXMsIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgYmJveCA9IG9wdGlvbnMuYmJveDtcblxuICAgIC8vIFZhbGlkYXRpb25cbiAgICBpZiAoIXR5cGUpIHRocm93IG5ldyBFcnJvcigndHlwZSBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gQXJyYXknKTtcbiAgICBpZiAoYmJveCkgdmFsaWRhdGVCQm94KGJib3gpO1xuXG4gICAgLy8gTWFpblxuICAgIHZhciBnZW9tO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ1BvaW50JzogZ2VvbSA9IHBvaW50KGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6IGdlb20gPSBsaW5lU3RyaW5nKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgY2FzZSAnUG9seWdvbic6IGdlb20gPSBwb2x5Z29uKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgY2FzZSAnTXVsdGlQb2ludCc6IGdlb20gPSBtdWx0aVBvaW50KGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzogZ2VvbSA9IG11bHRpTGluZVN0cmluZyhjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGNhc2UgJ011bHRpUG9seWdvbic6IGdlb20gPSBtdWx0aVBvbHlnb24oY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IodHlwZSArICcgaXMgaW52YWxpZCcpO1xuICAgIH1cbiAgICBpZiAoYmJveCkgZ2VvbS5iYm94ID0gYmJveDtcbiAgICByZXR1cm4gZ2VvbTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvaW50fSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhIFBvc2l0aW9uLlxuICpcbiAqIEBuYW1lIHBvaW50XG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGNvb3JkaW5hdGVzIGxvbmdpdHVkZSwgbGF0aXR1ZGUgcG9zaXRpb24gKGVhY2ggaW4gZGVjaW1hbCBkZWdyZWVzKVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvaW50Pn0gYSBQb2ludCBmZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvaW50ID0gdHVyZi5wb2ludChbLTc1LjM0MywgMzkuOTg0XSk7XG4gKlxuICogLy89cG9pbnRcbiAqL1xuZnVuY3Rpb24gcG9pbnQoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgaWYgKGNvb3JkaW5hdGVzLmxlbmd0aCA8IDIpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhdCBsZWFzdCAyIG51bWJlcnMgbG9uZycpO1xuICAgIGlmICghaXNOdW1iZXIoY29vcmRpbmF0ZXNbMF0pIHx8ICFpc051bWJlcihjb29yZGluYXRlc1sxXSkpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBjb250YWluIG51bWJlcnMnKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2ludH0ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIFBvaW50IGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lIHBvaW50c1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIFRyYW5zbGF0ZSB0aGVzZSBwcm9wZXJ0aWVzIHRvIGVhY2ggRmVhdHVyZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD59IFBvaW50IEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnRzID0gdHVyZi5wb2ludHMoW1xuICogICBbLTc1LCAzOV0sXG4gKiAgIFstODAsIDQ1XSxcbiAqICAgWy03OCwgNTBdXG4gKiBdKTtcbiAqXG4gKiAvLz1wb2ludHNcbiAqL1xuZnVuY3Rpb24gcG9pbnRzKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb29yZGluYXRlcykpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgIHJldHVybiBwb2ludChjb29yZHMsIHByb3BlcnRpZXMpO1xuICAgIH0pLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvbHlnb259IHtAbGluayBGZWF0dXJlfSBmcm9tIGFuIEFycmF5IG9mIExpbmVhclJpbmdzLlxuICpcbiAqIEBuYW1lIHBvbHlnb25cbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lYXJSaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvbHlnb24+fSBQb2x5Z29uIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbiA9IHR1cmYucG9seWdvbihbW1stNSwgNTJdLCBbLTQsIDU2XSwgWy0yLCA1MV0sIFstNywgNTRdLCBbLTUsIDUyXV1dLCB7IG5hbWU6ICdwb2x5MScgfSk7XG4gKlxuICogLy89cG9seWdvblxuICovXG5mdW5jdGlvbiBwb2x5Z29uKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcmluZyA9IGNvb3JkaW5hdGVzW2ldO1xuICAgICAgICBpZiAocmluZy5sZW5ndGggPCA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VhY2ggTGluZWFyUmluZyBvZiBhIFBvbHlnb24gbXVzdCBoYXZlIDQgb3IgbW9yZSBQb3NpdGlvbnMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByaW5nW3JpbmcubGVuZ3RoIC0gMV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGZpcnN0IHBvaW50IG9mIFBvbHlnb24gY29udGFpbnMgdHdvIG51bWJlcnNcbiAgICAgICAgICAgIGlmIChpID09PSAwICYmIGogPT09IDAgJiYgIWlzTnVtYmVyKHJpbmdbMF1bMF0pIHx8ICFpc051bWJlcihyaW5nWzBdWzFdKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGNvbnRhaW4gbnVtYmVycycpO1xuICAgICAgICAgICAgaWYgKHJpbmdbcmluZy5sZW5ndGggLSAxXVtqXSAhPT0gcmluZ1swXVtqXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgYW5kIGxhc3QgUG9zaXRpb24gYXJlIG5vdCBlcXVpdmFsZW50LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnUG9seWdvbicsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9seWdvbn0ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIFBvbHlnb24gY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgcG9seWdvbnNcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9seWdvbiBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbj59IFBvbHlnb24gRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbnMgPSB0dXJmLnBvbHlnb25zKFtcbiAqICAgW1tbLTUsIDUyXSwgWy00LCA1Nl0sIFstMiwgNTFdLCBbLTcsIDU0XSwgWy01LCA1Ml1dXSxcbiAqICAgW1tbLTE1LCA0Ml0sIFstMTQsIDQ2XSwgWy0xMiwgNDFdLCBbLTE3LCA0NF0sIFstMTUsIDQyXV1dLFxuICogXSk7XG4gKlxuICogLy89cG9seWdvbnNcbiAqL1xuZnVuY3Rpb24gcG9seWdvbnMoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oY29vcmRpbmF0ZXMubWFwKGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgICAgcmV0dXJuIHBvbHlnb24oY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9KSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBMaW5lU3RyaW5nfSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhbiBBcnJheSBvZiBQb3NpdGlvbnMuXG4gKlxuICogQG5hbWUgbGluZVN0cmluZ1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9zaXRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TGluZVN0cmluZz59IExpbmVTdHJpbmcgRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBsaW5lc3RyaW5nMSA9IHR1cmYubGluZVN0cmluZyhbWy0yNCwgNjNdLCBbLTIzLCA2MF0sIFstMjUsIDY1XSwgWy0yMCwgNjldXSwge25hbWU6ICdsaW5lIDEnfSk7XG4gKiB2YXIgbGluZXN0cmluZzIgPSB0dXJmLmxpbmVTdHJpbmcoW1stMTQsIDQzXSwgWy0xMywgNDBdLCBbLTE1LCA0NV0sIFstMTAsIDQ5XV0sIHtuYW1lOiAnbGluZSAyJ30pO1xuICpcbiAqIC8vPWxpbmVzdHJpbmcxXG4gKiAvLz1saW5lc3RyaW5nMlxuICovXG5mdW5jdGlvbiBsaW5lU3RyaW5nKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChjb29yZGluYXRlcy5sZW5ndGggPCAyKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gYXJyYXkgb2YgdHdvIG9yIG1vcmUgcG9zaXRpb25zJyk7XG4gICAgLy8gQ2hlY2sgaWYgZmlyc3QgcG9pbnQgb2YgTGluZVN0cmluZyBjb250YWlucyB0d28gbnVtYmVyc1xuICAgIGlmICghaXNOdW1iZXIoY29vcmRpbmF0ZXNbMF1bMV0pIHx8ICFpc051bWJlcihjb29yZGluYXRlc1swXVsxXSkpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBjb250YWluIG51bWJlcnMnKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ0xpbmVTdHJpbmcnLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIExpbmVTdHJpbmd9IHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBhbiBBcnJheSBvZiBMaW5lU3RyaW5nIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lIGxpbmVTdHJpbmdzXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lYXJSaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9uPExpbmVTdHJpbmc+fSBMaW5lU3RyaW5nIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAZXhhbXBsZVxuICogdmFyIGxpbmVzdHJpbmdzID0gdHVyZi5saW5lU3RyaW5ncyhbXG4gKiAgIFtbLTI0LCA2M10sIFstMjMsIDYwXSwgWy0yNSwgNjVdLCBbLTIwLCA2OV1dLFxuICogICBbWy0xNCwgNDNdLCBbLTEzLCA0MF0sIFstMTUsIDQ1XSwgWy0xMCwgNDldXVxuICogXSk7XG4gKlxuICogLy89bGluZXN0cmluZ3NcbiAqL1xuZnVuY3Rpb24gbGluZVN0cmluZ3MoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oY29vcmRpbmF0ZXMubWFwKGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgICAgcmV0dXJuIGxpbmVTdHJpbmcoY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9KSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogVGFrZXMgb25lIG9yIG1vcmUge0BsaW5rIEZlYXR1cmV8RmVhdHVyZXN9IGFuZCBjcmVhdGVzIGEge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufS5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlQ29sbGVjdGlvblxuICogQHBhcmFtIHtGZWF0dXJlW119IGZlYXR1cmVzIGlucHV0IGZlYXR1cmVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbn0gRmVhdHVyZUNvbGxlY3Rpb24gb2YgRmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiB2YXIgbG9jYXRpb25BID0gdHVyZi5wb2ludChbLTc1LjM0MywgMzkuOTg0XSwge25hbWU6ICdMb2NhdGlvbiBBJ30pO1xuICogdmFyIGxvY2F0aW9uQiA9IHR1cmYucG9pbnQoWy03NS44MzMsIDM5LjI4NF0sIHtuYW1lOiAnTG9jYXRpb24gQid9KTtcbiAqIHZhciBsb2NhdGlvbkMgPSB0dXJmLnBvaW50KFstNzUuNTM0LCAzOS4xMjNdLCB7bmFtZTogJ0xvY2F0aW9uIEMnfSk7XG4gKlxuICogdmFyIGNvbGxlY3Rpb24gPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgbG9jYXRpb25BLFxuICogICBsb2NhdGlvbkIsXG4gKiAgIGxvY2F0aW9uQ1xuICogXSk7XG4gKlxuICogLy89Y29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBmZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcywgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciBiYm94ID0gb3B0aW9ucy5iYm94O1xuICAgIHZhciBpZCA9IG9wdGlvbnMuaWQ7XG5cbiAgICAvLyBWYWxpZGF0aW9uXG4gICAgaWYgKCFmZWF0dXJlcykgdGhyb3cgbmV3IEVycm9yKCdObyBmZWF0dXJlcyBwYXNzZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmVhdHVyZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2ZlYXR1cmVzIG11c3QgYmUgYW4gQXJyYXknKTtcbiAgICBpZiAoYmJveCkgdmFsaWRhdGVCQm94KGJib3gpO1xuICAgIGlmIChpZCkgdmFsaWRhdGVJZChpZCk7XG5cbiAgICAvLyBNYWluXG4gICAgdmFyIGZjID0ge3R5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbid9O1xuICAgIGlmIChpZCkgZmMuaWQgPSBpZDtcbiAgICBpZiAoYmJveCkgZmMuYmJveCA9IGJib3g7XG4gICAgZmMuZmVhdHVyZXMgPSBmZWF0dXJlcztcbiAgICByZXR1cm4gZmM7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpTGluZVN0cmluZz59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgbXVsdGlMaW5lU3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZVN0cmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aUxpbmVTdHJpbmc+fSBhIE11bHRpTGluZVN0cmluZyBmZWF0dXJlXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aUxpbmUgPSB0dXJmLm11bHRpTGluZVN0cmluZyhbW1swLDBdLFsxMCwxMF1dXSk7XG4gKlxuICogLy89bXVsdGlMaW5lXG4gKi9cbmZ1bmN0aW9uIG11bHRpTGluZVN0cmluZyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ011bHRpTGluZVN0cmluZycsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxNdWx0aVBvaW50Pn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aVBvaW50XG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb3NpdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aVBvaW50Pn0gYSBNdWx0aVBvaW50IGZlYXR1cmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBjb29yZGluYXRlcyBhcmUgcGFzc2VkXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpUHQgPSB0dXJmLm11bHRpUG9pbnQoW1swLDBdLFsxMCwxMF1dKTtcbiAqXG4gKiAvLz1tdWx0aVB0XG4gKi9cbmZ1bmN0aW9uIG11bHRpUG9pbnQoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdNdWx0aVBvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpUG9seWdvbj59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgbXVsdGlQb2x5Z29uXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvbHlnb25zXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TXVsdGlQb2x5Z29uPn0gYSBtdWx0aXBvbHlnb24gZmVhdHVyZVxuICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlQb2x5ID0gdHVyZi5tdWx0aVBvbHlnb24oW1tbWzAsMF0sWzAsMTBdLFsxMCwxMF0sWzEwLDBdLFswLDBdXV1dKTtcbiAqXG4gKiAvLz1tdWx0aVBvbHlcbiAqXG4gKi9cbmZ1bmN0aW9uIG11bHRpUG9seWdvbihjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ011bHRpUG9seWdvbicsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxHZW9tZXRyeUNvbGxlY3Rpb24+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIGdlb21ldHJ5Q29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheTxHZW9tZXRyeT59IGdlb21ldHJpZXMgYW4gYXJyYXkgb2YgR2VvSlNPTiBHZW9tZXRyaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8R2VvbWV0cnlDb2xsZWN0aW9uPn0gYSBHZW9KU09OIEdlb21ldHJ5Q29sbGVjdGlvbiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHB0ID0ge1xuICogICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgICAgICBcImNvb3JkaW5hdGVzXCI6IFsxMDAsIDBdXG4gKiAgICAgfTtcbiAqIHZhciBsaW5lID0ge1xuICogICAgIFwidHlwZVwiOiBcIkxpbmVTdHJpbmdcIixcbiAqICAgICBcImNvb3JkaW5hdGVzXCI6IFsgWzEwMSwgMF0sIFsxMDIsIDFdIF1cbiAqICAgfTtcbiAqIHZhciBjb2xsZWN0aW9uID0gdHVyZi5nZW9tZXRyeUNvbGxlY3Rpb24oW3B0LCBsaW5lXSk7XG4gKlxuICogLy89Y29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBnZW9tZXRyeUNvbGxlY3Rpb24oZ2VvbWV0cmllcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghZ2VvbWV0cmllcykgdGhyb3cgbmV3IEVycm9yKCdnZW9tZXRyaWVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGdlb21ldHJpZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2dlb21ldHJpZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnR2VvbWV0cnlDb2xsZWN0aW9uJyxcbiAgICAgICAgZ2VvbWV0cmllczogZ2VvbWV0cmllc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJvdW5kIG51bWJlciB0byBwcmVjaXNpb25cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtIE51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gUHJlY2lzaW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSByb3VuZGVkIG51bWJlclxuICogQGV4YW1wbGVcbiAqIHR1cmYucm91bmQoMTIwLjQzMjEpXG4gKiAvLz0xMjBcbiAqXG4gKiB0dXJmLnJvdW5kKDEyMC40MzIxLCAyKVxuICogLy89MTIwLjQzXG4gKi9cbmZ1bmN0aW9uIHJvdW5kKG51bSwgcHJlY2lzaW9uKSB7XG4gICAgaWYgKG51bSA9PT0gdW5kZWZpbmVkIHx8IG51bSA9PT0gbnVsbCB8fCBpc05hTihudW0pKSB0aHJvdyBuZXcgRXJyb3IoJ251bSBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChwcmVjaXNpb24gJiYgIShwcmVjaXNpb24gPj0gMCkpIHRocm93IG5ldyBFcnJvcigncHJlY2lzaW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgICB2YXIgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwgMCk7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtICogbXVsdGlwbGllcikgLyBtdWx0aXBsaWVyO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBkaXN0YW5jZSBtZWFzdXJlbWVudCAoYXNzdW1pbmcgYSBzcGhlcmljYWwgRWFydGgpIGZyb20gcmFkaWFucyB0byBhIG1vcmUgZnJpZW5kbHkgdW5pdC5cbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGtpbG9tZXRlcnMsIGNlbnRpbWV0ZXJzLCBmZWV0XG4gKlxuICogQG5hbWUgcmFkaWFuc1RvTGVuZ3RoXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyBpbiByYWRpYW5zIGFjcm9zcyB0aGUgc3BoZXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPSdraWxvbWV0ZXJzJ10gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBvciBraWxvbWV0ZXJzIGluY2hlcywgeWFyZHMsIG1ldHJlcywgbWV0ZXJzLCBraWxvbWV0cmVzLCBraWxvbWV0ZXJzLlxuICogQHJldHVybnMge251bWJlcn0gZGlzdGFuY2VcbiAqL1xuZnVuY3Rpb24gcmFkaWFuc1RvTGVuZ3RoKHJhZGlhbnMsIHVuaXRzKSB7XG4gICAgaWYgKHJhZGlhbnMgPT09IHVuZGVmaW5lZCB8fCByYWRpYW5zID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ3JhZGlhbnMgaXMgcmVxdWlyZWQnKTtcblxuICAgIGlmICh1bml0cyAmJiB0eXBlb2YgdW5pdHMgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgRXJyb3IoJ3VuaXRzIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB2YXIgZmFjdG9yID0gZmFjdG9yc1t1bml0cyB8fCAna2lsb21ldGVycyddO1xuICAgIGlmICghZmFjdG9yKSB0aHJvdyBuZXcgRXJyb3IodW5pdHMgKyAnIHVuaXRzIGlzIGludmFsaWQnKTtcbiAgICByZXR1cm4gcmFkaWFucyAqIGZhY3Rvcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIGEgcmVhbC13b3JsZCB1bml0IGludG8gcmFkaWFuc1xuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAbmFtZSBsZW5ndGhUb1JhZGlhbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZSBpbiByZWFsIHVuaXRzXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPSdraWxvbWV0ZXJzJ10gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBvciBraWxvbWV0ZXJzIGluY2hlcywgeWFyZHMsIG1ldHJlcywgbWV0ZXJzLCBraWxvbWV0cmVzLCBraWxvbWV0ZXJzLlxuICogQHJldHVybnMge251bWJlcn0gcmFkaWFuc1xuICovXG5mdW5jdGlvbiBsZW5ndGhUb1JhZGlhbnMoZGlzdGFuY2UsIHVuaXRzKSB7XG4gICAgaWYgKGRpc3RhbmNlID09PSB1bmRlZmluZWQgfHwgZGlzdGFuY2UgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignZGlzdGFuY2UgaXMgcmVxdWlyZWQnKTtcblxuICAgIGlmICh1bml0cyAmJiB0eXBlb2YgdW5pdHMgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgRXJyb3IoJ3VuaXRzIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB2YXIgZmFjdG9yID0gZmFjdG9yc1t1bml0cyB8fCAna2lsb21ldGVycyddO1xuICAgIGlmICghZmFjdG9yKSB0aHJvdyBuZXcgRXJyb3IodW5pdHMgKyAnIHVuaXRzIGlzIGludmFsaWQnKTtcbiAgICByZXR1cm4gZGlzdGFuY2UgLyBmYWN0b3I7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSBhIHJlYWwtd29ybGQgdW5pdCBpbnRvIGRlZ3JlZXNcbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGNlbnRpbWV0ZXJzLCBraWxvbWV0cmVzLCBmZWV0XG4gKlxuICogQG5hbWUgbGVuZ3RoVG9EZWdyZWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2UgaW4gcmVhbCB1bml0c1xuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz0na2lsb21ldGVycyddIGNhbiBiZSBkZWdyZWVzLCByYWRpYW5zLCBtaWxlcywgb3Iga2lsb21ldGVycyBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsIG1ldGVycywga2lsb21ldHJlcywga2lsb21ldGVycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IGRlZ3JlZXNcbiAqL1xuZnVuY3Rpb24gbGVuZ3RoVG9EZWdyZWVzKGRpc3RhbmNlLCB1bml0cykge1xuICAgIHJldHVybiByYWRpYW5zVG9EZWdyZWVzKGxlbmd0aFRvUmFkaWFucyhkaXN0YW5jZSwgdW5pdHMpKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbnkgYmVhcmluZyBhbmdsZSBmcm9tIHRoZSBub3J0aCBsaW5lIGRpcmVjdGlvbiAocG9zaXRpdmUgY2xvY2t3aXNlKVxuICogYW5kIHJldHVybnMgYW4gYW5nbGUgYmV0d2VlbiAwLTM2MCBkZWdyZWVzIChwb3NpdGl2ZSBjbG9ja3dpc2UpLCAwIGJlaW5nIHRoZSBub3J0aCBsaW5lXG4gKlxuICogQG5hbWUgYmVhcmluZ1RvQXppbXV0aFxuICogQHBhcmFtIHtudW1iZXJ9IGJlYXJpbmcgYW5nbGUsIGJldHdlZW4gLTE4MCBhbmQgKzE4MCBkZWdyZWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKi9cbmZ1bmN0aW9uIGJlYXJpbmdUb0F6aW11dGgoYmVhcmluZykge1xuICAgIGlmIChiZWFyaW5nID09PSBudWxsIHx8IGJlYXJpbmcgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdiZWFyaW5nIGlzIHJlcXVpcmVkJyk7XG5cbiAgICB2YXIgYW5nbGUgPSBiZWFyaW5nICUgMzYwO1xuICAgIGlmIChhbmdsZSA8IDApIGFuZ2xlICs9IDM2MDtcbiAgICByZXR1cm4gYW5nbGU7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYW5nbGUgaW4gcmFkaWFucyB0byBkZWdyZWVzXG4gKlxuICogQG5hbWUgcmFkaWFuc1RvRGVncmVlc1xuICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgYW5nbGUgaW4gcmFkaWFuc1xuICogQHJldHVybnMge251bWJlcn0gZGVncmVlcyBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKi9cbmZ1bmN0aW9uIHJhZGlhbnNUb0RlZ3JlZXMocmFkaWFucykge1xuICAgIGlmIChyYWRpYW5zID09PSBudWxsIHx8IHJhZGlhbnMgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdyYWRpYW5zIGlzIHJlcXVpcmVkJyk7XG5cbiAgICB2YXIgZGVncmVlcyA9IHJhZGlhbnMgJSAoMiAqIE1hdGguUEkpO1xuICAgIHJldHVybiBkZWdyZWVzICogMTgwIC8gTWF0aC5QSTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhbmdsZSBpbiBkZWdyZWVzIHRvIHJhZGlhbnNcbiAqXG4gKiBAbmFtZSBkZWdyZWVzVG9SYWRpYW5zXG4gKiBAcGFyYW0ge251bWJlcn0gZGVncmVlcyBhbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbmdsZSBpbiByYWRpYW5zXG4gKi9cbmZ1bmN0aW9uIGRlZ3JlZXNUb1JhZGlhbnMoZGVncmVlcykge1xuICAgIGlmIChkZWdyZWVzID09PSBudWxsIHx8IGRlZ3JlZXMgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdkZWdyZWVzIGlzIHJlcXVpcmVkJyk7XG5cbiAgICB2YXIgcmFkaWFucyA9IGRlZ3JlZXMgJSAzNjA7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBNYXRoLlBJIC8gMTgwO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbGVuZ3RoIHRvIHRoZSByZXF1ZXN0ZWQgdW5pdC5cbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGtpbG9tZXRlcnMsIGNlbnRpbWV0ZXJzLCBmZWV0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5hbFVuaXQgb2YgdGhlIGxlbmd0aFxuICogQHBhcmFtIHtzdHJpbmd9IFtmaW5hbFVuaXQ9J2tpbG9tZXRlcnMnXSByZXR1cm5lZCB1bml0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgY29udmVydGVkIGxlbmd0aFxuICovXG5mdW5jdGlvbiBjb252ZXJ0TGVuZ3RoKGxlbmd0aCwgb3JpZ2luYWxVbml0LCBmaW5hbFVuaXQpIHtcbiAgICBpZiAobGVuZ3RoID09PSBudWxsIHx8IGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghKGxlbmd0aCA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKCdsZW5ndGggbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuXG4gICAgcmV0dXJuIHJhZGlhbnNUb0xlbmd0aChsZW5ndGhUb1JhZGlhbnMobGVuZ3RoLCBvcmlnaW5hbFVuaXQpLCBmaW5hbFVuaXQgfHwgJ2tpbG9tZXRlcnMnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGFyZWEgdG8gdGhlIHJlcXVlc3RlZCB1bml0LlxuICogVmFsaWQgdW5pdHM6IGtpbG9tZXRlcnMsIGtpbG9tZXRyZXMsIG1ldGVycywgbWV0cmVzLCBjZW50aW1ldHJlcywgbWlsbGltZXRlcnMsIGFjcmVzLCBtaWxlcywgeWFyZHMsIGZlZXQsIGluY2hlc1xuICogQHBhcmFtIHtudW1iZXJ9IGFyZWEgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gW29yaWdpbmFsVW5pdD0nbWV0ZXJzJ10gb2YgdGhlIGRpc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZpbmFsVW5pdD0na2lsb21ldGVycyddIHJldHVybmVkIHVuaXRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBjb252ZXJ0ZWQgZGlzdGFuY2VcbiAqL1xuZnVuY3Rpb24gY29udmVydEFyZWEoYXJlYSwgb3JpZ2luYWxVbml0LCBmaW5hbFVuaXQpIHtcbiAgICBpZiAoYXJlYSA9PT0gbnVsbCB8fCBhcmVhID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignYXJlYSBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghKGFyZWEgPj0gMCkpIHRocm93IG5ldyBFcnJvcignYXJlYSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG5cbiAgICB2YXIgc3RhcnRGYWN0b3IgPSBhcmVhRmFjdG9yc1tvcmlnaW5hbFVuaXQgfHwgJ21ldGVycyddO1xuICAgIGlmICghc3RhcnRGYWN0b3IpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBvcmlnaW5hbCB1bml0cycpO1xuXG4gICAgdmFyIGZpbmFsRmFjdG9yID0gYXJlYUZhY3RvcnNbZmluYWxVbml0IHx8ICdraWxvbWV0ZXJzJ107XG4gICAgaWYgKCFmaW5hbEZhY3RvcikgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGZpbmFsIHVuaXRzJyk7XG5cbiAgICByZXR1cm4gKGFyZWEgLyBzdGFydEZhY3RvcikgKiBmaW5hbEZhY3Rvcjtcbn1cblxuLyoqXG4gKiBpc051bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gbnVtIE51bWJlciB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiB0dXJmLmlzTnVtYmVyKDEyMylcbiAqIC8vPXRydWVcbiAqIHR1cmYuaXNOdW1iZXIoJ2ZvbycpXG4gKiAvLz1mYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcihudW0pIHtcbiAgICByZXR1cm4gIWlzTmFOKG51bSkgJiYgbnVtICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KG51bSk7XG59XG5cbi8qKlxuICogaXNPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IGlucHV0IHZhcmlhYmxlIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIHR1cmYuaXNPYmplY3Qoe2VsZXZhdGlvbjogMTB9KVxuICogLy89dHJ1ZVxuICogdHVyZi5pc09iamVjdCgnZm9vJylcbiAqIC8vPWZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgcmV0dXJuICghIWlucHV0KSAmJiAoaW5wdXQuY29uc3RydWN0b3IgPT09IE9iamVjdCk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgQkJveFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGJib3ggQkJveCB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIEVycm9yIGlmIEJCb3ggaXMgbm90IHZhbGlkXG4gKiBAZXhhbXBsZVxuICogdmFsaWRhdGVCQm94KFstMTgwLCAtNDAsIDExMCwgNTBdKVxuICogLy89T0tcbiAqIHZhbGlkYXRlQkJveChbLTE4MCwgLTQwXSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3goJ0ZvbycpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KDUpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KG51bGwpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KHVuZGVmaW5lZClcbiAqIC8vPUVycm9yXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQkJveChiYm94KSB7XG4gICAgaWYgKCFiYm94KSB0aHJvdyBuZXcgRXJyb3IoJ2Jib3ggaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYmJveCkpIHRocm93IG5ldyBFcnJvcignYmJveCBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgaWYgKGJib3gubGVuZ3RoICE9PSA0ICYmIGJib3gubGVuZ3RoICE9PSA2KSB0aHJvdyBuZXcgRXJyb3IoJ2Jib3ggbXVzdCBiZSBhbiBBcnJheSBvZiA0IG9yIDYgbnVtYmVycycpO1xuICAgIGJib3guZm9yRWFjaChmdW5jdGlvbiAobnVtKSB7XG4gICAgICAgIGlmICghaXNOdW1iZXIobnVtKSkgdGhyb3cgbmV3IEVycm9yKCdiYm94IG11c3Qgb25seSBjb250YWluIG51bWJlcnMnKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBJZFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIElkIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEB0aHJvd3MgRXJyb3IgaWYgSWQgaXMgbm90IHZhbGlkXG4gKiBAZXhhbXBsZVxuICogdmFsaWRhdGVJZChbLTE4MCwgLTQwLCAxMTAsIDUwXSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUlkKFstMTgwLCAtNDBdKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlSWQoJ0ZvbycpXG4gKiAvLz1PS1xuICogdmFsaWRhdGVJZCg1KVxuICogLy89T0tcbiAqIHZhbGlkYXRlSWQobnVsbClcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUlkKHVuZGVmaW5lZClcbiAqIC8vPUVycm9yXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlSWQoaWQpIHtcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgRXJyb3IoJ2lkIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKFsnc3RyaW5nJywgJ251bWJlciddLmluZGV4T2YodHlwZW9mIGlkKSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignaWQgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZycpO1xufVxuXG4vLyBEZXByZWNhdGVkIG1ldGhvZHNcbmZ1bmN0aW9uIHJhZGlhbnMyZGVncmVlcygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGByYWRpYW5zVG9EZWdyZWVzYCcpO1xufVxuXG5mdW5jdGlvbiBkZWdyZWVzMnJhZGlhbnMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgZGVncmVlc1RvUmFkaWFuc2AnKTtcbn1cblxuZnVuY3Rpb24gZGlzdGFuY2VUb0RlZ3JlZXMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgbGVuZ3RoVG9EZWdyZWVzYCcpO1xufVxuXG5mdW5jdGlvbiBkaXN0YW5jZVRvUmFkaWFucygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBsZW5ndGhUb1JhZGlhbnNgJyk7XG59XG5cbmZ1bmN0aW9uIHJhZGlhbnNUb0Rpc3RhbmNlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYHJhZGlhbnNUb0xlbmd0aGAnKTtcbn1cblxuZnVuY3Rpb24gYmVhcmluZ1RvQW5nbGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgYmVhcmluZ1RvQXppbXV0aGAnKTtcbn1cblxuZnVuY3Rpb24gY29udmVydERpc3RhbmNlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGNvbnZlcnRMZW5ndGhgJyk7XG59XG5cbmV4cG9ydCB7IGVhcnRoUmFkaXVzLCBmYWN0b3JzLCB1bml0c0ZhY3RvcnMsIGFyZWFGYWN0b3JzLCBmZWF0dXJlLCBnZW9tZXRyeSwgcG9pbnQsIHBvaW50cywgcG9seWdvbiwgcG9seWdvbnMsIGxpbmVTdHJpbmcsIGxpbmVTdHJpbmdzLCBmZWF0dXJlQ29sbGVjdGlvbiwgbXVsdGlMaW5lU3RyaW5nLCBtdWx0aVBvaW50LCBtdWx0aVBvbHlnb24sIGdlb21ldHJ5Q29sbGVjdGlvbiwgcm91bmQsIHJhZGlhbnNUb0xlbmd0aCwgbGVuZ3RoVG9SYWRpYW5zLCBsZW5ndGhUb0RlZ3JlZXMsIGJlYXJpbmdUb0F6aW11dGgsIHJhZGlhbnNUb0RlZ3JlZXMsIGRlZ3JlZXNUb1JhZGlhbnMsIGNvbnZlcnRMZW5ndGgsIGNvbnZlcnRBcmVhLCBpc051bWJlciwgaXNPYmplY3QsIHZhbGlkYXRlQkJveCwgdmFsaWRhdGVJZCwgcmFkaWFuczJkZWdyZWVzLCBkZWdyZWVzMnJhZGlhbnMsIGRpc3RhbmNlVG9EZWdyZWVzLCBkaXN0YW5jZVRvUmFkaWFucywgcmFkaWFuc1RvRGlzdGFuY2UsIGJlYXJpbmdUb0FuZ2xlLCBjb252ZXJ0RGlzdGFuY2UgfTtcbiIsImltcG9ydCB7IGNvbnZlcnRMZW5ndGgsIGRlZ3JlZXNUb1JhZGlhbnMsIGVhcnRoUmFkaXVzLCBpc09iamVjdCwgcG9pbnQgfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCB7IGdldENvb3JkIH0gZnJvbSAnQHR1cmYvaW52YXJpYW50JztcblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmh1bWJfbGluZVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZXN0aW5hdGlvbiB7QGxpbmsgUG9pbnR9IGhhdmluZyB0cmF2ZWxsZWQgdGhlIGdpdmVuIGRpc3RhbmNlIGFsb25nIGEgUmh1bWIgbGluZSBmcm9tIHRoZVxuICogb3JpZ2luIFBvaW50IHdpdGggdGhlICh2YXJhbnQpIGdpdmVuIGJlYXJpbmcuXG4gKlxuICogQG5hbWUgcmh1bWJEZXN0aW5hdGlvblxuICogQHBhcmFtIHtDb29yZH0gb3JpZ2luIHN0YXJ0aW5nIHBvaW50XG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2UgZGlzdGFuY2UgZnJvbSB0aGUgc3RhcnRpbmcgcG9pbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWFyaW5nIHZhcmFudCBiZWFyaW5nIGFuZ2xlIHJhbmdpbmcgZnJvbSAtMTgwIHRvIDE4MCBkZWdyZWVzIGZyb20gbm9ydGhcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnVuaXRzPSdraWxvbWV0ZXJzJ10gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBvciBraWxvbWV0ZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucHJvcGVydGllcz17fV0gdHJhbnNsYXRlIHByb3BlcnRpZXMgdG8gZGVzdGluYXRpb24gcG9pbnRcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvaW50Pn0gRGVzdGluYXRpb24gcG9pbnQuXG4gKiBAZXhhbXBsZVxuICogdmFyIHB0ID0gdHVyZi5wb2ludChbLTc1LjM0MywgMzkuOTg0XSwge1wibWFya2VyLWNvbG9yXCI6IFwiRjAwXCJ9KTtcbiAqIHZhciBkaXN0YW5jZSA9IDUwO1xuICogdmFyIGJlYXJpbmcgPSA5MDtcbiAqIHZhciBvcHRpb25zID0ge3VuaXRzOiAnbWlsZXMnfTtcbiAqXG4gKiB2YXIgZGVzdGluYXRpb24gPSB0dXJmLnJodW1iRGVzdGluYXRpb24ocHQsIGRpc3RhbmNlLCBiZWFyaW5nLCBvcHRpb25zKTtcbiAqXG4gKiAvL2FkZFRvTWFwXG4gKiB2YXIgYWRkVG9NYXAgPSBbcHQsIGRlc3RpbmF0aW9uXVxuICogZGVzdGluYXRpb24ucHJvcGVydGllc1snbWFya2VyLWNvbG9yJ10gPSAnIzAwRic7XG4gKi9cbmZ1bmN0aW9uIHJodW1iRGVzdGluYXRpb24ob3JpZ2luLCBkaXN0YW5jZSwgYmVhcmluZywgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIHBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciB1bml0cyA9IG9wdGlvbnMudW5pdHM7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBvcHRpb25zLnByb3BlcnRpZXM7XG5cbiAgICAvLyB2YWxpZGF0aW9uXG4gICAgaWYgKCFvcmlnaW4pIHRocm93IG5ldyBFcnJvcignb3JpZ2luIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKGRpc3RhbmNlID09PSB1bmRlZmluZWQgfHwgZGlzdGFuY2UgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignZGlzdGFuY2UgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoYmVhcmluZyA9PT0gdW5kZWZpbmVkIHx8IGJlYXJpbmcgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignYmVhcmluZyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghKGRpc3RhbmNlID49IDApKSB0aHJvdyBuZXcgRXJyb3IoJ2Rpc3RhbmNlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcblxuICAgIHZhciBkaXN0YW5jZUluTWV0ZXJzID0gY29udmVydExlbmd0aChkaXN0YW5jZSwgdW5pdHMsICdtZXRlcnMnKTtcbiAgICB2YXIgY29vcmRzID0gZ2V0Q29vcmQob3JpZ2luKTtcbiAgICB2YXIgZGVzdGluYXRpb24gPSBjYWxjdWxhdGVSaHVtYkRlc3RpbmF0aW9uKGNvb3JkcywgZGlzdGFuY2VJbk1ldGVycywgYmVhcmluZyk7XG5cbiAgICAvLyBjb21wZW5zYXRlIHRoZSBjcm9zc2luZyBvZiB0aGUgMTgwdGggbWVyaWRpYW4gKGh0dHBzOi8vbWFjd3JpZ2h0Lm9yZy8yMDE2LzA5LzI2L3RoZS0xODB0aC1tZXJpZGlhbi5odG1sKVxuICAgIC8vIHNvbHV0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzMyNTAjaXNzdWVjb21tZW50LTI5NDg4NzY3OFxuICAgIGRlc3RpbmF0aW9uWzBdICs9IChkZXN0aW5hdGlvblswXSAtIGNvb3Jkc1swXSA+IDE4MCkgPyAtMzYwIDogKGNvb3Jkc1swXSAtIGRlc3RpbmF0aW9uWzBdID4gMTgwKSA/IDM2MCA6IDA7XG4gICAgcmV0dXJuIHBvaW50KGRlc3RpbmF0aW9uLCBwcm9wZXJ0aWVzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZXN0aW5hdGlvbiBwb2ludCBoYXZpbmcgdHJhdmVsbGVkIGFsb25nIGEgcmh1bWIgbGluZSBmcm9tIG9yaWdpbiBwb2ludCB0aGUgZ2l2ZW5cbiAqIGRpc3RhbmNlIG9uIHRoZSAgZ2l2ZW4gYmVhcmluZy5cbiAqIEFkYXB0ZWQgZnJvbSBHZW9kZXN5OiBodHRwOi8vd3d3Lm1vdmFibGUtdHlwZS5jby51ay9zY3JpcHRzL2xhdGxvbmcuaHRtbCNyaHVtYmxpbmVzXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgIHtBcnJheTxudW1iZXI+fSBvcmlnaW4gLSBwb2ludFxuICogQHBhcmFtICAge251bWJlcn0gZGlzdGFuY2UgLSBEaXN0YW5jZSB0cmF2ZWxsZWQsIGluIHNhbWUgdW5pdHMgYXMgZWFydGggcmFkaXVzIChkZWZhdWx0OiBtZXRyZXMpLlxuICogQHBhcmFtICAge251bWJlcn0gYmVhcmluZyAtIEJlYXJpbmcgaW4gZGVncmVlcyBmcm9tIG5vcnRoLlxuICogQHBhcmFtICAge251bWJlcn0gW3JhZGl1cz02MzcxZTNdIC0gKE1lYW4pIHJhZGl1cyBvZiBlYXJ0aCAoZGVmYXVsdHMgdG8gcmFkaXVzIGluIG1ldHJlcykuXG4gKiBAcmV0dXJucyB7QXJyYXk8bnVtYmVyPn0gRGVzdGluYXRpb24gcG9pbnQuXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZVJodW1iRGVzdGluYXRpb24ob3JpZ2luLCBkaXN0YW5jZSwgYmVhcmluZywgcmFkaXVzKSB7XG4gICAgLy8gz4YgPT4gcGhpXG4gICAgLy8gzrsgPT4gbGFtYmRhXG4gICAgLy8gz4ggPT4gcHNpXG4gICAgLy8gzpQgPT4gRGVsdGFcbiAgICAvLyDOtCA9PiBkZWx0YVxuICAgIC8vIM64ID0+IHRoZXRhXG5cbiAgICByYWRpdXMgPSAocmFkaXVzID09PSB1bmRlZmluZWQpID8gZWFydGhSYWRpdXMgOiBOdW1iZXIocmFkaXVzKTtcblxuICAgIHZhciBkZWx0YSA9IGRpc3RhbmNlIC8gcmFkaXVzOyAvLyBhbmd1bGFyIGRpc3RhbmNlIGluIHJhZGlhbnNcbiAgICB2YXIgbGFtYmRhMSA9IG9yaWdpblswXSAqIE1hdGguUEkgLyAxODA7IC8vIHRvIHJhZGlhbnMsIGJ1dCB3aXRob3V0IG5vcm1hbGl6ZSB0byDwnZyLXG4gICAgdmFyIHBoaTEgPSBkZWdyZWVzVG9SYWRpYW5zKG9yaWdpblsxXSk7XG4gICAgdmFyIHRoZXRhID0gZGVncmVlc1RvUmFkaWFucyhiZWFyaW5nKTtcblxuICAgIHZhciBEZWx0YVBoaSA9IGRlbHRhICogTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBwaGkyID0gcGhpMSArIERlbHRhUGhpO1xuXG4gICAgLy8gY2hlY2sgZm9yIHNvbWUgZGFmdCBidWdnZXIgZ29pbmcgcGFzdCB0aGUgcG9sZSwgbm9ybWFsaXNlIGxhdGl0dWRlIGlmIHNvXG4gICAgaWYgKE1hdGguYWJzKHBoaTIpID4gTWF0aC5QSSAvIDIpIHBoaTIgPSBwaGkyID4gMCA/IE1hdGguUEkgLSBwaGkyIDogLU1hdGguUEkgLSBwaGkyO1xuXG4gICAgdmFyIERlbHRhUHNpID0gTWF0aC5sb2coTWF0aC50YW4ocGhpMiAvIDIgKyBNYXRoLlBJIC8gNCkgLyBNYXRoLnRhbihwaGkxIC8gMiArIE1hdGguUEkgLyA0KSk7XG4gICAgdmFyIHEgPSBNYXRoLmFicyhEZWx0YVBzaSkgPiAxMGUtMTIgPyBEZWx0YVBoaSAvIERlbHRhUHNpIDogTWF0aC5jb3MocGhpMSk7IC8vIEUtVyBjb3Vyc2UgYmVjb21lcyBpbGwtY29uZGl0aW9uZWQgd2l0aCAwLzBcblxuICAgIHZhciBEZWx0YUxhbWJkYSA9IGRlbHRhICogTWF0aC5zaW4odGhldGEpIC8gcTtcbiAgICB2YXIgbGFtYmRhMiA9IGxhbWJkYTEgKyBEZWx0YUxhbWJkYTtcblxuICAgIHJldHVybiBbKChsYW1iZGEyICogMTgwIC8gTWF0aC5QSSkgKyA1NDApICUgMzYwIC0gMTgwLCBwaGkyICogMTgwIC8gTWF0aC5QSV07IC8vIG5vcm1hbGlzZSB0byDiiJIxODAuLisxODDCsFxufVxuXG5leHBvcnQgZGVmYXVsdCByaHVtYkRlc3RpbmF0aW9uO1xuIiwiaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcblxuLyoqXG4gKiBVbndyYXAgYSBjb29yZGluYXRlIGZyb20gYSBQb2ludCBGZWF0dXJlLCBHZW9tZXRyeSBvciBhIHNpbmdsZSBjb29yZGluYXRlLlxuICpcbiAqIEBuYW1lIGdldENvb3JkXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj58R2VvbWV0cnk8UG9pbnQ+fEZlYXR1cmU8UG9pbnQ+fSBjb29yZCBHZW9KU09OIFBvaW50IG9yIGFuIEFycmF5IG9mIG51bWJlcnNcbiAqIEByZXR1cm5zIHtBcnJheTxudW1iZXI+fSBjb29yZGluYXRlc1xuICogQGV4YW1wbGVcbiAqIHZhciBwdCA9IHR1cmYucG9pbnQoWzEwLCAxMF0pO1xuICpcbiAqIHZhciBjb29yZCA9IHR1cmYuZ2V0Q29vcmQocHQpO1xuICogLy89IFsxMCwgMTBdXG4gKi9cbmZ1bmN0aW9uIGdldENvb3JkKGNvb3JkKSB7XG4gICAgaWYgKCFjb29yZCkgdGhyb3cgbmV3IEVycm9yKCdjb29yZCBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChjb29yZC50eXBlID09PSAnRmVhdHVyZScgJiYgY29vcmQuZ2VvbWV0cnkgIT09IG51bGwgJiYgY29vcmQuZ2VvbWV0cnkudHlwZSA9PT0gJ1BvaW50JykgcmV0dXJuIGNvb3JkLmdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgIGlmIChjb29yZC50eXBlID09PSAnUG9pbnQnKSByZXR1cm4gY29vcmQuY29vcmRpbmF0ZXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29vcmQpICYmIGNvb3JkLmxlbmd0aCA+PSAyICYmIGNvb3JkWzBdLmxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIGNvb3JkWzFdLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gY29vcmQ7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkIG11c3QgYmUgR2VvSlNPTiBQb2ludCBvciBhbiBBcnJheSBvZiBudW1iZXJzJyk7XG59XG5cbi8qKlxuICogVW53cmFwIGNvb3JkaW5hdGVzIGZyb20gYSBGZWF0dXJlLCBHZW9tZXRyeSBPYmplY3Qgb3IgYW4gQXJyYXlcbiAqXG4gKiBAbmFtZSBnZXRDb29yZHNcbiAqIEBwYXJhbSB7QXJyYXk8YW55PnxHZW9tZXRyeXxGZWF0dXJlfSBjb29yZHMgRmVhdHVyZSwgR2VvbWV0cnkgT2JqZWN0IG9yIGFuIEFycmF5XG4gKiBAcmV0dXJucyB7QXJyYXk8YW55Pn0gY29vcmRpbmF0ZXNcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seSA9IHR1cmYucG9seWdvbihbW1sxMTkuMzIsIC04LjddLCBbMTE5LjU1LCAtOC42OV0sIFsxMTkuNTEsIC04LjU0XSwgWzExOS4zMiwgLTguN11dXSk7XG4gKlxuICogdmFyIGNvb3JkcyA9IHR1cmYuZ2V0Q29vcmRzKHBvbHkpO1xuICogLy89IFtbWzExOS4zMiwgLTguN10sIFsxMTkuNTUsIC04LjY5XSwgWzExOS41MSwgLTguNTRdLCBbMTE5LjMyLCAtOC43XV1dXG4gKi9cbmZ1bmN0aW9uIGdldENvb3Jkcyhjb29yZHMpIHtcbiAgICBpZiAoIWNvb3JkcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZHMgaXMgcmVxdWlyZWQnKTtcblxuICAgIC8vIEZlYXR1cmVcbiAgICBpZiAoY29vcmRzLnR5cGUgPT09ICdGZWF0dXJlJyAmJiBjb29yZHMuZ2VvbWV0cnkgIT09IG51bGwpIHJldHVybiBjb29yZHMuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG5cbiAgICAvLyBHZW9tZXRyeVxuICAgIGlmIChjb29yZHMuY29vcmRpbmF0ZXMpIHJldHVybiBjb29yZHMuY29vcmRpbmF0ZXM7XG5cbiAgICAvLyBBcnJheSBvZiBudW1iZXJzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29vcmRzKSkgcmV0dXJuIGNvb3JkcztcblxuICAgIHRocm93IG5ldyBFcnJvcignY29vcmRzIG11c3QgYmUgR2VvSlNPTiBGZWF0dXJlLCBHZW9tZXRyeSBPYmplY3Qgb3IgYW4gQXJyYXknKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgY29vcmRpbmF0ZXMgY29udGFpbnMgYSBudW1iZXJcbiAqXG4gKiBAbmFtZSBjb250YWluc051bWJlclxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBjb29yZGluYXRlcyBHZW9KU09OIENvb3JkaW5hdGVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBBcnJheSBjb250YWlucyBhIG51bWJlclxuICovXG5mdW5jdGlvbiBjb250YWluc051bWJlcihjb29yZGluYXRlcykge1xuICAgIGlmIChjb29yZGluYXRlcy5sZW5ndGggPiAxICYmIGlzTnVtYmVyKGNvb3JkaW5hdGVzWzBdKSAmJiBpc051bWJlcihjb29yZGluYXRlc1sxXSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXNbMF0pICYmIGNvb3JkaW5hdGVzWzBdLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gY29udGFpbnNOdW1iZXIoY29vcmRpbmF0ZXNbMF0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3Qgb25seSBjb250YWluIG51bWJlcnMnKTtcbn1cblxuLyoqXG4gKiBFbmZvcmNlIGV4cGVjdGF0aW9ucyBhYm91dCB0eXBlcyBvZiBHZW9KU09OIG9iamVjdHMgZm9yIFR1cmYuXG4gKlxuICogQG5hbWUgZ2VvanNvblR5cGVcbiAqIEBwYXJhbSB7R2VvSlNPTn0gdmFsdWUgYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBleHBlY3RlZCBHZW9KU09OIHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgY2FsbGluZyBmdW5jdGlvblxuICogQHRocm93cyB7RXJyb3J9IGlmIHZhbHVlIGlzIG5vdCB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gZ2VvanNvblR5cGUodmFsdWUsIHR5cGUsIG5hbWUpIHtcbiAgICBpZiAoIXR5cGUgfHwgIW5hbWUpIHRocm93IG5ldyBFcnJvcigndHlwZSBhbmQgbmFtZSByZXF1aXJlZCcpO1xuXG4gICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS50eXBlICE9PSB0eXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCB0byAnICsgbmFtZSArICc6IG11c3QgYmUgYSAnICsgdHlwZSArICcsIGdpdmVuICcgKyB2YWx1ZS50eXBlKTtcbiAgICB9XG59XG5cbi8qKlxuICogRW5mb3JjZSBleHBlY3RhdGlvbnMgYWJvdXQgdHlwZXMgb2Yge0BsaW5rIEZlYXR1cmV9IGlucHV0cyBmb3IgVHVyZi5cbiAqIEludGVybmFsbHkgdGhpcyB1c2VzIHtAbGluayBnZW9qc29uVHlwZX0gdG8ganVkZ2UgZ2VvbWV0cnkgdHlwZXMuXG4gKlxuICogQG5hbWUgZmVhdHVyZU9mXG4gKiBAcGFyYW0ge0ZlYXR1cmV9IGZlYXR1cmUgYSBmZWF0dXJlIHdpdGggYW4gZXhwZWN0ZWQgZ2VvbWV0cnkgdHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgZXhwZWN0ZWQgR2VvSlNPTiB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIGNhbGxpbmcgZnVuY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBlcnJvciBpZiB2YWx1ZSBpcyBub3QgdGhlIGV4cGVjdGVkIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVPZihmZWF0dXJlLCB0eXBlLCBuYW1lKSB7XG4gICAgaWYgKCFmZWF0dXJlKSB0aHJvdyBuZXcgRXJyb3IoJ05vIGZlYXR1cmUgcGFzc2VkJyk7XG4gICAgaWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoJy5mZWF0dXJlT2YoKSByZXF1aXJlcyBhIG5hbWUnKTtcbiAgICBpZiAoIWZlYXR1cmUgfHwgZmVhdHVyZS50eXBlICE9PSAnRmVhdHVyZScgfHwgIWZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHRvICcgKyBuYW1lICsgJywgRmVhdHVyZSB3aXRoIGdlb21ldHJ5IHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghZmVhdHVyZS5nZW9tZXRyeSB8fCBmZWF0dXJlLmdlb21ldHJ5LnR5cGUgIT09IHR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHRvICcgKyBuYW1lICsgJzogbXVzdCBiZSBhICcgKyB0eXBlICsgJywgZ2l2ZW4gJyArIGZlYXR1cmUuZ2VvbWV0cnkudHlwZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEVuZm9yY2UgZXhwZWN0YXRpb25zIGFib3V0IHR5cGVzIG9mIHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gaW5wdXRzIGZvciBUdXJmLlxuICogSW50ZXJuYWxseSB0aGlzIHVzZXMge0BsaW5rIGdlb2pzb25UeXBlfSB0byBqdWRnZSBnZW9tZXRyeSB0eXBlcy5cbiAqXG4gKiBAbmFtZSBjb2xsZWN0aW9uT2ZcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb259IGZlYXR1cmVDb2xsZWN0aW9uIGEgRmVhdHVyZUNvbGxlY3Rpb24gZm9yIHdoaWNoIGZlYXR1cmVzIHdpbGwgYmUganVkZ2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBleHBlY3RlZCBHZW9KU09OIHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgY2FsbGluZyBmdW5jdGlvblxuICogQHRocm93cyB7RXJyb3J9IGlmIHZhbHVlIGlzIG5vdCB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdGlvbk9mKGZlYXR1cmVDb2xsZWN0aW9uLCB0eXBlLCBuYW1lKSB7XG4gICAgaWYgKCFmZWF0dXJlQ29sbGVjdGlvbikgdGhyb3cgbmV3IEVycm9yKCdObyBmZWF0dXJlQ29sbGVjdGlvbiBwYXNzZWQnKTtcbiAgICBpZiAoIW5hbWUpIHRocm93IG5ldyBFcnJvcignLmNvbGxlY3Rpb25PZigpIHJlcXVpcmVzIGEgbmFtZScpO1xuICAgIGlmICghZmVhdHVyZUNvbGxlY3Rpb24gfHwgZmVhdHVyZUNvbGxlY3Rpb24udHlwZSAhPT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQgdG8gJyArIG5hbWUgKyAnLCBGZWF0dXJlQ29sbGVjdGlvbiByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZlYXR1cmVDb2xsZWN0aW9uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmZWF0dXJlID0gZmVhdHVyZUNvbGxlY3Rpb24uZmVhdHVyZXNbaV07XG4gICAgICAgIGlmICghZmVhdHVyZSB8fCBmZWF0dXJlLnR5cGUgIT09ICdGZWF0dXJlJyB8fCAhZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHRvICcgKyBuYW1lICsgJywgRmVhdHVyZSB3aXRoIGdlb21ldHJ5IHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmZWF0dXJlLmdlb21ldHJ5IHx8IGZlYXR1cmUuZ2VvbWV0cnkudHlwZSAhPT0gdHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHRvICcgKyBuYW1lICsgJzogbXVzdCBiZSBhICcgKyB0eXBlICsgJywgZ2l2ZW4gJyArIGZlYXR1cmUuZ2VvbWV0cnkudHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogR2V0IEdlb21ldHJ5IGZyb20gRmVhdHVyZSBvciBHZW9tZXRyeSBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gR2VvSlNPTiBGZWF0dXJlIG9yIEdlb21ldHJ5IE9iamVjdFxuICogQHJldHVybnMge0dlb21ldHJ5fG51bGx9IEdlb0pTT04gR2VvbWV0cnkgT2JqZWN0XG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgZ2VvanNvbiBpcyBub3QgYSBGZWF0dXJlIG9yIEdlb21ldHJ5IE9iamVjdFxuICogQGV4YW1wbGVcbiAqIHZhciBwb2ludCA9IHtcbiAqICAgXCJ0eXBlXCI6IFwiRmVhdHVyZVwiLFxuICogICBcInByb3BlcnRpZXNcIjoge30sXG4gKiAgIFwiZ2VvbWV0cnlcIjoge1xuICogICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgICAgXCJjb29yZGluYXRlc1wiOiBbMTEwLCA0MF1cbiAqICAgfVxuICogfVxuICogdmFyIGdlb20gPSB0dXJmLmdldEdlb20ocG9pbnQpXG4gKiAvLz17XCJ0eXBlXCI6IFwiUG9pbnRcIiwgXCJjb29yZGluYXRlc1wiOiBbMTEwLCA0MF19XG4gKi9cbmZ1bmN0aW9uIGdldEdlb20oZ2VvanNvbikge1xuICAgIGlmICghZ2VvanNvbikgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKGdlb2pzb24uZ2VvbWV0cnkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGdlb2pzb24uZ2VvbWV0cnk7XG4gICAgaWYgKGdlb2pzb24uY29vcmRpbmF0ZXMgfHwgZ2VvanNvbi5nZW9tZXRyaWVzKSByZXR1cm4gZ2VvanNvbjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gbXVzdCBiZSBhIHZhbGlkIEZlYXR1cmUgb3IgR2VvbWV0cnkgT2JqZWN0Jyk7XG59XG5cbi8qKlxuICogR2V0IEdlb21ldHJ5IFR5cGUgZnJvbSBGZWF0dXJlIG9yIEdlb21ldHJ5IE9iamVjdFxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSAqKkRFUFJFQ0FURUQqKiBpbiB2NS4wLjAgaW4gZmF2b3Igb2YgZ2V0VHlwZVxuICovXG5mdW5jdGlvbiBnZXRHZW9tVHlwZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudC5nZXRHZW9tVHlwZSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIHY1LjAgaW4gZmF2b3Igb2YgaW52YXJpYW50LmdldFR5cGUnKTtcbn1cblxuLyoqXG4gKiBHZXQgR2VvSlNPTiBvYmplY3QncyB0eXBlLCBHZW9tZXRyeSB0eXBlIGlzIHByaW9yaXRpemUuXG4gKlxuICogQHBhcmFtIHtHZW9KU09OfSBnZW9qc29uIEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9XCJnZW9qc29uXCJdIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGRpc3BsYXkgaW4gZXJyb3IgbWVzc2FnZVxuICogQHJldHVybnMge3N0cmluZ30gR2VvSlNPTiB0eXBlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvaW50ID0ge1xuICogICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXG4gKiAgIFwicHJvcGVydGllc1wiOiB7fSxcbiAqICAgXCJnZW9tZXRyeVwiOiB7XG4gKiAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAqICAgICBcImNvb3JkaW5hdGVzXCI6IFsxMTAsIDQwXVxuICogICB9XG4gKiB9XG4gKiB2YXIgZ2VvbSA9IHR1cmYuZ2V0VHlwZShwb2ludClcbiAqIC8vPVwiUG9pbnRcIlxuICovXG5mdW5jdGlvbiBnZXRUeXBlKGdlb2pzb24sIG5hbWUpIHtcbiAgICBpZiAoIWdlb2pzb24pIHRocm93IG5ldyBFcnJvcigobmFtZSB8fCAnZ2VvanNvbicpICsgJyBpcyByZXF1aXJlZCcpO1xuICAgIC8vIEdlb0pTT04gRmVhdHVyZSAmIEdlb21ldHJ5Q29sbGVjdGlvblxuICAgIGlmIChnZW9qc29uLmdlb21ldHJ5ICYmIGdlb2pzb24uZ2VvbWV0cnkudHlwZSkgcmV0dXJuIGdlb2pzb24uZ2VvbWV0cnkudHlwZTtcbiAgICAvLyBHZW9KU09OIEdlb21ldHJ5ICYgRmVhdHVyZUNvbGxlY3Rpb25cbiAgICBpZiAoZ2VvanNvbi50eXBlKSByZXR1cm4gZ2VvanNvbi50eXBlO1xuICAgIHRocm93IG5ldyBFcnJvcigobmFtZSB8fCAnZ2VvanNvbicpICsgJyBpcyBpbnZhbGlkJyk7XG59XG5cbmV4cG9ydCB7IGdldENvb3JkLCBnZXRDb29yZHMsIGNvbnRhaW5zTnVtYmVyLCBnZW9qc29uVHlwZSwgZmVhdHVyZU9mLCBjb2xsZWN0aW9uT2YsIGdldEdlb20sIGdldEdlb21UeXBlLCBnZXRUeXBlIH07XG4iLCJpbXBvcnQgeyBjb29yZEVhY2ggfSBmcm9tICdAdHVyZi9tZXRhJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgeyBnZXRDb29yZHMgfSBmcm9tICdAdHVyZi9pbnZhcmlhbnQnO1xuaW1wb3J0IGNsb25lIGZyb20gJ0B0dXJmL2Nsb25lJztcbmltcG9ydCByaHVtYkRlc3RpbmF0aW9uIGZyb20gJ0B0dXJmL3JodW1iLWRlc3RpbmF0aW9uJztcblxuLyoqXG4gKiBNb3ZlcyBhbnkgZ2VvanNvbiBGZWF0dXJlIG9yIEdlb21ldHJ5IG9mIGEgc3BlY2lmaWVkIGRpc3RhbmNlIGFsb25nIGEgUmh1bWIgTGluZVxuICogb24gdGhlIHByb3ZpZGVkIGRpcmVjdGlvbiBhbmdsZS5cbiAqXG4gKiBAbmFtZSB0cmFuc2Zvcm1UcmFuc2xhdGVcbiAqIEBwYXJhbSB7R2VvSlNPTn0gZ2VvanNvbiBvYmplY3QgdG8gYmUgdHJhbnNsYXRlZFxuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIGxlbmd0aCBvZiB0aGUgbW90aW9uOyBuZWdhdGl2ZSB2YWx1ZXMgZGV0ZXJtaW5lIG1vdGlvbiBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJlY3Rpb24gb2YgdGhlIG1vdGlvbjsgYW5nbGUgZnJvbSBOb3J0aCBpbiBkZWNpbWFsIGRlZ3JlZXMsIHBvc2l0aXZlIGNsb2Nrd2lzZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudW5pdHM9J2tpbG9tZXRlcnMnXSBpbiB3aGljaCBgZGlzdGFuY2VgIHdpbGwgYmUgZXhwcmVzczsgbWlsZXMsIGtpbG9tZXRlcnMsIGRlZ3JlZXMsIG9yIHJhZGlhbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy56VHJhbnNsYXRpb249MF0gbGVuZ3RoIG9mIHRoZSB2ZXJ0aWNhbCBtb3Rpb24sIHNhbWUgdW5pdCBvZiBkaXN0YW5jZVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5tdXRhdGU9ZmFsc2VdIGFsbG93cyBHZW9KU09OIGlucHV0IHRvIGJlIG11dGF0ZWQgKHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGluY3JlYXNlIGlmIHRydWUpXG4gKiBAcmV0dXJucyB7R2VvSlNPTn0gdGhlIHRyYW5zbGF0ZWQgR2VvSlNPTiBvYmplY3RcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seSA9IHR1cmYucG9seWdvbihbW1swLDI5XSxbMy41LDI5XSxbMi41LDMyXSxbMCwyOV1dXSk7XG4gKiB2YXIgdHJhbnNsYXRlZFBvbHkgPSB0dXJmLnRyYW5zZm9ybVRyYW5zbGF0ZShwb2x5LCAxMDAsIDM1KTtcbiAqXG4gKiAvL2FkZFRvTWFwXG4gKiB2YXIgYWRkVG9NYXAgPSBbcG9seSwgdHJhbnNsYXRlZFBvbHldO1xuICogdHJhbnNsYXRlZFBvbHkucHJvcGVydGllcyA9IHtzdHJva2U6ICcjRjAwJywgJ3N0cm9rZS13aWR0aCc6IDR9O1xuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1UcmFuc2xhdGUoZ2VvanNvbiwgZGlzdGFuY2UsIGRpcmVjdGlvbiwgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIHBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciB1bml0cyA9IG9wdGlvbnMudW5pdHM7XG4gICAgdmFyIHpUcmFuc2xhdGlvbiA9IG9wdGlvbnMuelRyYW5zbGF0aW9uO1xuICAgIHZhciBtdXRhdGUgPSBvcHRpb25zLm11dGF0ZTtcblxuICAgIC8vIElucHV0IHZhbGlkYXRpb25cbiAgICBpZiAoIWdlb2pzb24pIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChkaXN0YW5jZSA9PT0gdW5kZWZpbmVkIHx8IGRpc3RhbmNlID09PSBudWxsIHx8IGlzTmFOKGRpc3RhbmNlKSkgdGhyb3cgbmV3IEVycm9yKCdkaXN0YW5jZSBpcyByZXF1aXJlZCcpO1xuICAgIGlmICh6VHJhbnNsYXRpb24gJiYgdHlwZW9mIHpUcmFuc2xhdGlvbiAhPT0gJ251bWJlcicgJiYgaXNOYU4oelRyYW5zbGF0aW9uKSkgdGhyb3cgbmV3IEVycm9yKCd6VHJhbnNsYXRpb24gaXMgbm90IGEgbnVtYmVyJyk7XG5cbiAgICAvLyBTaG9ydGN1dCBuby1tb3Rpb25cbiAgICB6VHJhbnNsYXRpb24gPSAoelRyYW5zbGF0aW9uICE9PSB1bmRlZmluZWQpID8gelRyYW5zbGF0aW9uIDogMDtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDAgJiYgelRyYW5zbGF0aW9uID09PSAwKSByZXR1cm4gZ2VvanNvbjtcblxuICAgIGlmIChkaXJlY3Rpb24gPT09IHVuZGVmaW5lZCB8fCBkaXJlY3Rpb24gPT09IG51bGwgfHwgaXNOYU4oZGlyZWN0aW9uKSkgdGhyb3cgbmV3IEVycm9yKCdkaXJlY3Rpb24gaXMgcmVxdWlyZWQnKTtcblxuICAgIC8vIEludmVydCB3aXRoIG5lZ2F0aXZlIGRpc3RhbmNlc1xuICAgIGlmIChkaXN0YW5jZSA8IDApIHtcbiAgICAgICAgZGlzdGFuY2UgPSAtZGlzdGFuY2U7XG4gICAgICAgIGRpcmVjdGlvbiA9IC1kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgLy8gQ2xvbmUgZ2VvanNvbiB0byBhdm9pZCBzaWRlIGVmZmVjdHNcbiAgICBpZiAobXV0YXRlID09PSBmYWxzZSB8fCBtdXRhdGUgPT09IHVuZGVmaW5lZCkgZ2VvanNvbiA9IGNsb25lKGdlb2pzb24pO1xuXG4gICAgLy8gVHJhbnNsYXRlIGVhY2ggY29vcmRpbmF0ZVxuICAgIGNvb3JkRWFjaChnZW9qc29uLCBmdW5jdGlvbiAocG9pbnRDb29yZHMpIHtcbiAgICAgICAgdmFyIG5ld0Nvb3JkcyA9IGdldENvb3JkcyhyaHVtYkRlc3RpbmF0aW9uKHBvaW50Q29vcmRzLCBkaXN0YW5jZSwgZGlyZWN0aW9uLCB7dW5pdHM6IHVuaXRzfSkpO1xuICAgICAgICBwb2ludENvb3Jkc1swXSA9IG5ld0Nvb3Jkc1swXTtcbiAgICAgICAgcG9pbnRDb29yZHNbMV0gPSBuZXdDb29yZHNbMV07XG4gICAgICAgIGlmICh6VHJhbnNsYXRpb24gJiYgcG9pbnRDb29yZHMubGVuZ3RoID09PSAzKSBwb2ludENvb3Jkc1syXSArPSB6VHJhbnNsYXRpb247XG4gICAgfSk7XG4gICAgcmV0dXJuIGdlb2pzb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zZm9ybVRyYW5zbGF0ZTtcbiIsIi8qKlxuICogRWFydGggUmFkaXVzIHVzZWQgd2l0aCB0aGUgSGFydmVzaW5lIGZvcm11bGEgYW5kIGFwcHJveGltYXRlcyB1c2luZyBhIHNwaGVyaWNhbCAobm9uLWVsbGlwc29pZCkgRWFydGguXG4gKi9cbnZhciBlYXJ0aFJhZGl1cyA9IDYzNzEwMDguODtcblxuLyoqXG4gKiBVbml0IG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgdXNpbmcgYSBzcGhlcmljYWwgKG5vbi1lbGxpcHNvaWQpIGVhcnRoIHJhZGl1cy5cbiAqL1xudmFyIGZhY3RvcnMgPSB7XG4gICAgbWV0ZXJzOiBlYXJ0aFJhZGl1cyxcbiAgICBtZXRyZXM6IGVhcnRoUmFkaXVzLFxuICAgIG1pbGxpbWV0ZXJzOiBlYXJ0aFJhZGl1cyAqIDEwMDAsXG4gICAgbWlsbGltZXRyZXM6IGVhcnRoUmFkaXVzICogMTAwMCxcbiAgICBjZW50aW1ldGVyczogZWFydGhSYWRpdXMgKiAxMDAsXG4gICAgY2VudGltZXRyZXM6IGVhcnRoUmFkaXVzICogMTAwLFxuICAgIGtpbG9tZXRlcnM6IGVhcnRoUmFkaXVzIC8gMTAwMCxcbiAgICBraWxvbWV0cmVzOiBlYXJ0aFJhZGl1cyAvIDEwMDAsXG4gICAgbWlsZXM6IGVhcnRoUmFkaXVzIC8gMTYwOS4zNDQsXG4gICAgbmF1dGljYWxtaWxlczogZWFydGhSYWRpdXMgLyAxODUyLFxuICAgIGluY2hlczogZWFydGhSYWRpdXMgKiAzOS4zNzAsXG4gICAgeWFyZHM6IGVhcnRoUmFkaXVzIC8gMS4wOTM2LFxuICAgIGZlZXQ6IGVhcnRoUmFkaXVzICogMy4yODA4NCxcbiAgICByYWRpYW5zOiAxLFxuICAgIGRlZ3JlZXM6IGVhcnRoUmFkaXVzIC8gMTExMzI1LFxufTtcblxuLyoqXG4gKiBVbml0cyBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIGJhc2VkIG9uIDEgbWV0ZXIuXG4gKi9cbnZhciB1bml0c0ZhY3RvcnMgPSB7XG4gICAgbWV0ZXJzOiAxLFxuICAgIG1ldHJlczogMSxcbiAgICBtaWxsaW1ldGVyczogMTAwMCxcbiAgICBtaWxsaW1ldHJlczogMTAwMCxcbiAgICBjZW50aW1ldGVyczogMTAwLFxuICAgIGNlbnRpbWV0cmVzOiAxMDAsXG4gICAga2lsb21ldGVyczogMSAvIDEwMDAsXG4gICAga2lsb21ldHJlczogMSAvIDEwMDAsXG4gICAgbWlsZXM6IDEgLyAxNjA5LjM0NCxcbiAgICBuYXV0aWNhbG1pbGVzOiAxIC8gMTg1MixcbiAgICBpbmNoZXM6IDM5LjM3MCxcbiAgICB5YXJkczogMSAvIDEuMDkzNixcbiAgICBmZWV0OiAzLjI4MDg0LFxuICAgIHJhZGlhbnM6IDEgLyBlYXJ0aFJhZGl1cyxcbiAgICBkZWdyZWVzOiAxIC8gMTExMzI1LFxufTtcblxuLyoqXG4gKiBBcmVhIG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgYmFzZWQgb24gMSBzcXVhcmUgbWV0ZXIuXG4gKi9cbnZhciBhcmVhRmFjdG9ycyA9IHtcbiAgICBtZXRlcnM6IDEsXG4gICAgbWV0cmVzOiAxLFxuICAgIG1pbGxpbWV0ZXJzOiAxMDAwMDAwLFxuICAgIG1pbGxpbWV0cmVzOiAxMDAwMDAwLFxuICAgIGNlbnRpbWV0ZXJzOiAxMDAwMCxcbiAgICBjZW50aW1ldHJlczogMTAwMDAsXG4gICAga2lsb21ldGVyczogMC4wMDAwMDEsXG4gICAga2lsb21ldHJlczogMC4wMDAwMDEsXG4gICAgYWNyZXM6IDAuMDAwMjQ3MTA1LFxuICAgIG1pbGVzOiAzLjg2ZS03LFxuICAgIHlhcmRzOiAxLjE5NTk5MDA0NixcbiAgICBmZWV0OiAxMC43NjM5MTA0MTcsXG4gICAgaW5jaGVzOiAxNTUwLjAwMzEwMDAwNlxufTtcblxuLyoqXG4gKiBXcmFwcyBhIEdlb0pTT04ge0BsaW5rIEdlb21ldHJ5fSBpbiBhIEdlb0pTT04ge0BsaW5rIEZlYXR1cmV9LlxuICpcbiAqIEBuYW1lIGZlYXR1cmVcbiAqIEBwYXJhbSB7R2VvbWV0cnl9IGdlb21ldHJ5IGlucHV0IGdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmV9IGEgR2VvSlNPTiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIGdlb21ldHJ5ID0ge1xuICogICBcInR5cGVcIjogXCJQb2ludFwiLFxuICogICBcImNvb3JkaW5hdGVzXCI6IFsxMTAsIDUwXVxuICogfTtcbiAqXG4gKiB2YXIgZmVhdHVyZSA9IHR1cmYuZmVhdHVyZShnZW9tZXRyeSk7XG4gKlxuICogLy89ZmVhdHVyZVxuICovXG5mdW5jdGlvbiBmZWF0dXJlKGdlb21ldHJ5LCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIGJib3ggPSBvcHRpb25zLmJib3g7XG4gICAgdmFyIGlkID0gb3B0aW9ucy5pZDtcblxuICAgIC8vIFZhbGlkYXRpb25cbiAgICBpZiAoZ2VvbWV0cnkgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdnZW9tZXRyeSBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMuY29uc3RydWN0b3IgIT09IE9iamVjdCkgdGhyb3cgbmV3IEVycm9yKCdwcm9wZXJ0aWVzIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG4gICAgaWYgKGJib3gpIHZhbGlkYXRlQkJveChiYm94KTtcbiAgICBpZiAoaWQpIHZhbGlkYXRlSWQoaWQpO1xuXG4gICAgLy8gTWFpblxuICAgIHZhciBmZWF0ID0ge3R5cGU6ICdGZWF0dXJlJ307XG4gICAgaWYgKGlkKSBmZWF0LmlkID0gaWQ7XG4gICAgaWYgKGJib3gpIGZlYXQuYmJveCA9IGJib3g7XG4gICAgZmVhdC5wcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICBmZWF0Lmdlb21ldHJ5ID0gZ2VvbWV0cnk7XG4gICAgcmV0dXJuIGZlYXQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIEdlb0pTT04ge0BsaW5rIEdlb21ldHJ5fSBmcm9tIGEgR2VvbWV0cnkgc3RyaW5nIHR5cGUgJiBjb29yZGluYXRlcy5cbiAqIEZvciBHZW9tZXRyeUNvbGxlY3Rpb24gdHlwZSB1c2UgYGhlbHBlcnMuZ2VvbWV0cnlDb2xsZWN0aW9uYFxuICpcbiAqIEBuYW1lIGdlb21ldHJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBHZW9tZXRyeSBUeXBlXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGNvb3JkaW5hdGVzIENvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VvbWV0cnlcbiAqIEByZXR1cm5zIHtHZW9tZXRyeX0gYSBHZW9KU09OIEdlb21ldHJ5XG4gKiBAZXhhbXBsZVxuICogdmFyIHR5cGUgPSAnUG9pbnQnO1xuICogdmFyIGNvb3JkaW5hdGVzID0gWzExMCwgNTBdO1xuICpcbiAqIHZhciBnZW9tZXRyeSA9IHR1cmYuZ2VvbWV0cnkodHlwZSwgY29vcmRpbmF0ZXMpO1xuICpcbiAqIC8vPWdlb21ldHJ5XG4gKi9cbmZ1bmN0aW9uIGdlb21ldHJ5KHR5cGUsIGNvb3JkaW5hdGVzLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIGJib3ggPSBvcHRpb25zLmJib3g7XG5cbiAgICAvLyBWYWxpZGF0aW9uXG4gICAgaWYgKCF0eXBlKSB0aHJvdyBuZXcgRXJyb3IoJ3R5cGUgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgaWYgKGJib3gpIHZhbGlkYXRlQkJveChiYm94KTtcblxuICAgIC8vIE1haW5cbiAgICB2YXIgZ2VvbTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdQb2ludCc6IGdlb20gPSBwb2ludChjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOiBnZW9tID0gbGluZVN0cmluZyhjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGNhc2UgJ1BvbHlnb24nOiBnZW9tID0gcG9seWdvbihjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGNhc2UgJ011bHRpUG9pbnQnOiBnZW9tID0gbXVsdGlQb2ludChjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6IGdlb20gPSBtdWx0aUxpbmVTdHJpbmcoY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOiBnZW9tID0gbXVsdGlQb2x5Z29uKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKHR5cGUgKyAnIGlzIGludmFsaWQnKTtcbiAgICB9XG4gICAgaWYgKGJib3gpIGdlb20uYmJveCA9IGJib3g7XG4gICAgcmV0dXJuIGdlb207XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2ludH0ge0BsaW5rIEZlYXR1cmV9IGZyb20gYSBQb3NpdGlvbi5cbiAqXG4gKiBAbmFtZSBwb2ludFxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjb29yZGluYXRlcyBsb25naXR1ZGUsIGxhdGl0dWRlIHBvc2l0aW9uIChlYWNoIGluIGRlY2ltYWwgZGVncmVlcylcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxQb2ludD59IGEgUG9pbnQgZmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2ludCA9IHR1cmYucG9pbnQoWy03NS4zNDMsIDM5Ljk4NF0pO1xuICpcbiAqIC8vPXBvaW50XG4gKi9cbmZ1bmN0aW9uIHBvaW50KGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb29yZGluYXRlcykpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgIGlmIChjb29yZGluYXRlcy5sZW5ndGggPCAyKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYXQgbGVhc3QgMiBudW1iZXJzIGxvbmcnKTtcbiAgICBpZiAoIWlzTnVtYmVyKGNvb3JkaW5hdGVzWzBdKSB8fCAhaXNOdW1iZXIoY29vcmRpbmF0ZXNbMV0pKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgY29udGFpbiBudW1iZXJzJyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9pbnR9IHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBhbiBBcnJheSBvZiBQb2ludCBjb29yZGluYXRlcy5cbiAqXG4gKiBAbmFtZSBwb2ludHNcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBUcmFuc2xhdGUgdGhlc2UgcHJvcGVydGllcyB0byBlYWNoIEZlYXR1cmVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248UG9pbnQ+fSBQb2ludCBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvaW50cyA9IHR1cmYucG9pbnRzKFtcbiAqICAgWy03NSwgMzldLFxuICogICBbLTgwLCA0NV0sXG4gKiAgIFstNzgsIDUwXVxuICogXSk7XG4gKlxuICogLy89cG9pbnRzXG4gKi9cbmZ1bmN0aW9uIHBvaW50cyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gQXJyYXknKTtcblxuICAgIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihjb29yZGluYXRlcy5tYXAoZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gcG9pbnQoY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9KSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2x5Z29ufSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhbiBBcnJheSBvZiBMaW5lYXJSaW5ncy5cbiAqXG4gKiBAbmFtZSBwb2x5Z29uXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZWFyUmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxQb2x5Z29uPn0gUG9seWdvbiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW1tbLTUsIDUyXSwgWy00LCA1Nl0sIFstMiwgNTFdLCBbLTcsIDU0XSwgWy01LCA1Ml1dXSwgeyBuYW1lOiAncG9seTEnIH0pO1xuICpcbiAqIC8vPXBvbHlnb25cbiAqL1xuZnVuY3Rpb24gcG9seWdvbihjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJpbmcgPSBjb29yZGluYXRlc1tpXTtcbiAgICAgICAgaWYgKHJpbmcubGVuZ3RoIDwgNCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFYWNoIExpbmVhclJpbmcgb2YgYSBQb2x5Z29uIG11c3QgaGF2ZSA0IG9yIG1vcmUgUG9zaXRpb25zLicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmluZ1tyaW5nLmxlbmd0aCAtIDFdLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBmaXJzdCBwb2ludCBvZiBQb2x5Z29uIGNvbnRhaW5zIHR3byBudW1iZXJzXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCAmJiBqID09PSAwICYmICFpc051bWJlcihyaW5nWzBdWzBdKSB8fCAhaXNOdW1iZXIocmluZ1swXVsxXSkpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBjb250YWluIG51bWJlcnMnKTtcbiAgICAgICAgICAgIGlmIChyaW5nW3JpbmcubGVuZ3RoIC0gMV1bal0gIT09IHJpbmdbMF1bal0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpcnN0IGFuZCBsYXN0IFBvc2l0aW9uIGFyZSBub3QgZXF1aXZhbGVudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvbHlnb259IHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBhbiBBcnJheSBvZiBQb2x5Z29uIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lIHBvbHlnb25zXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvbHlnb24gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24+fSBQb2x5Z29uIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb25zID0gdHVyZi5wb2x5Z29ucyhbXG4gKiAgIFtbWy01LCA1Ml0sIFstNCwgNTZdLCBbLTIsIDUxXSwgWy03LCA1NF0sIFstNSwgNTJdXV0sXG4gKiAgIFtbWy0xNSwgNDJdLCBbLTE0LCA0Nl0sIFstMTIsIDQxXSwgWy0xNywgNDRdLCBbLTE1LCA0Ml1dXSxcbiAqIF0pO1xuICpcbiAqIC8vPXBvbHlnb25zXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25zKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb29yZGluYXRlcykpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgIHJldHVybiBwb2x5Z29uKGNvb3JkcywgcHJvcGVydGllcyk7XG4gICAgfSksIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgTGluZVN0cmluZ30ge0BsaW5rIEZlYXR1cmV9IGZyb20gYW4gQXJyYXkgb2YgUG9zaXRpb25zLlxuICpcbiAqIEBuYW1lIGxpbmVTdHJpbmdcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvc2l0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBMaW5lU3RyaW5nIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgbGluZXN0cmluZzEgPSB0dXJmLmxpbmVTdHJpbmcoW1stMjQsIDYzXSwgWy0yMywgNjBdLCBbLTI1LCA2NV0sIFstMjAsIDY5XV0sIHtuYW1lOiAnbGluZSAxJ30pO1xuICogdmFyIGxpbmVzdHJpbmcyID0gdHVyZi5saW5lU3RyaW5nKFtbLTE0LCA0M10sIFstMTMsIDQwXSwgWy0xNSwgNDVdLCBbLTEwLCA0OV1dLCB7bmFtZTogJ2xpbmUgMid9KTtcbiAqXG4gKiAvLz1saW5lc3RyaW5nMVxuICogLy89bGluZXN0cmluZzJcbiAqL1xuZnVuY3Rpb24gbGluZVN0cmluZyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoIDwgMikgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIGFycmF5IG9mIHR3byBvciBtb3JlIHBvc2l0aW9ucycpO1xuICAgIC8vIENoZWNrIGlmIGZpcnN0IHBvaW50IG9mIExpbmVTdHJpbmcgY29udGFpbnMgdHdvIG51bWJlcnNcbiAgICBpZiAoIWlzTnVtYmVyKGNvb3JkaW5hdGVzWzBdWzFdKSB8fCAhaXNOdW1iZXIoY29vcmRpbmF0ZXNbMF1bMV0pKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgY29udGFpbiBudW1iZXJzJyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdMaW5lU3RyaW5nJyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBMaW5lU3RyaW5nfSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGZyb20gYW4gQXJyYXkgb2YgTGluZVN0cmluZyBjb29yZGluYXRlcy5cbiAqXG4gKiBAbmFtZSBsaW5lU3RyaW5nc1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZWFyUmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxMaW5lU3RyaW5nPn0gTGluZVN0cmluZyBGZWF0dXJlQ29sbGVjdGlvblxuICogQGV4YW1wbGVcbiAqIHZhciBsaW5lc3RyaW5ncyA9IHR1cmYubGluZVN0cmluZ3MoW1xuICogICBbWy0yNCwgNjNdLCBbLTIzLCA2MF0sIFstMjUsIDY1XSwgWy0yMCwgNjldXSxcbiAqICAgW1stMTQsIDQzXSwgWy0xMywgNDBdLCBbLTE1LCA0NV0sIFstMTAsIDQ5XV1cbiAqIF0pO1xuICpcbiAqIC8vPWxpbmVzdHJpbmdzXG4gKi9cbmZ1bmN0aW9uIGxpbmVTdHJpbmdzKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb29yZGluYXRlcykpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgIHJldHVybiBsaW5lU3RyaW5nKGNvb3JkcywgcHJvcGVydGllcyk7XG4gICAgfSksIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFRha2VzIG9uZSBvciBtb3JlIHtAbGluayBGZWF0dXJlfEZlYXR1cmVzfSBhbmQgY3JlYXRlcyBhIHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0uXG4gKlxuICogQG5hbWUgZmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7RmVhdHVyZVtdfSBmZWF0dXJlcyBpbnB1dCBmZWF0dXJlc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb259IEZlYXR1cmVDb2xsZWN0aW9uIG9mIEZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogdmFyIGxvY2F0aW9uQSA9IHR1cmYucG9pbnQoWy03NS4zNDMsIDM5Ljk4NF0sIHtuYW1lOiAnTG9jYXRpb24gQSd9KTtcbiAqIHZhciBsb2NhdGlvbkIgPSB0dXJmLnBvaW50KFstNzUuODMzLCAzOS4yODRdLCB7bmFtZTogJ0xvY2F0aW9uIEInfSk7XG4gKiB2YXIgbG9jYXRpb25DID0gdHVyZi5wb2ludChbLTc1LjUzNCwgMzkuMTIzXSwge25hbWU6ICdMb2NhdGlvbiBDJ30pO1xuICpcbiAqIHZhciBjb2xsZWN0aW9uID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIGxvY2F0aW9uQSxcbiAqICAgbG9jYXRpb25CLFxuICogICBsb2NhdGlvbkNcbiAqIF0pO1xuICpcbiAqIC8vPWNvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMsIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgYmJveCA9IG9wdGlvbnMuYmJveDtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmlkO1xuXG4gICAgLy8gVmFsaWRhdGlvblxuICAgIGlmICghZmVhdHVyZXMpIHRocm93IG5ldyBFcnJvcignTm8gZmVhdHVyZXMgcGFzc2VkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGZlYXR1cmVzKSkgdGhyb3cgbmV3IEVycm9yKCdmZWF0dXJlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgaWYgKGJib3gpIHZhbGlkYXRlQkJveChiYm94KTtcbiAgICBpZiAoaWQpIHZhbGlkYXRlSWQoaWQpO1xuXG4gICAgLy8gTWFpblxuICAgIHZhciBmYyA9IHt0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nfTtcbiAgICBpZiAoaWQpIGZjLmlkID0gaWQ7XG4gICAgaWYgKGJib3gpIGZjLmJib3ggPSBiYm94O1xuICAgIGZjLmZlYXR1cmVzID0gZmVhdHVyZXM7XG4gICAgcmV0dXJuIGZjO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxNdWx0aUxpbmVTdHJpbmc+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIG11bHRpTGluZVN0cmluZ1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIExpbmVTdHJpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TXVsdGlMaW5lU3RyaW5nPn0gYSBNdWx0aUxpbmVTdHJpbmcgZmVhdHVyZVxuICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1tbMCwwXSxbMTAsMTBdXV0pO1xuICpcbiAqIC8vPW11bHRpTGluZVxuICovXG5mdW5jdGlvbiBtdWx0aUxpbmVTdHJpbmcoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdNdWx0aUxpbmVTdHJpbmcnLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8TXVsdGlQb2ludD59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgbXVsdGlQb2ludFxuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9zaXRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TXVsdGlQb2ludD59IGEgTXVsdGlQb2ludCBmZWF0dXJlXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aVB0ID0gdHVyZi5tdWx0aVBvaW50KFtbMCwwXSxbMTAsMTBdXSk7XG4gKlxuICogLy89bXVsdGlQdFxuICovXG5mdW5jdGlvbiBtdWx0aVBvaW50KGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnTXVsdGlQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxNdWx0aVBvbHlnb24+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIG11bHRpUG9seWdvblxuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb2x5Z29uc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPE11bHRpUG9seWdvbj59IGEgbXVsdGlwb2x5Z29uIGZlYXR1cmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBjb29yZGluYXRlcyBhcmUgcGFzc2VkXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpUG9seSA9IHR1cmYubXVsdGlQb2x5Z29uKFtbW1swLDBdLFswLDEwXSxbMTAsMTBdLFsxMCwwXSxbMCwwXV1dXSk7XG4gKlxuICogLy89bXVsdGlQb2x5XG4gKlxuICovXG5mdW5jdGlvbiBtdWx0aVBvbHlnb24oY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdNdWx0aVBvbHlnb24nLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8R2VvbWV0cnlDb2xsZWN0aW9uPn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBnZW9tZXRyeUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXk8R2VvbWV0cnk+fSBnZW9tZXRyaWVzIGFuIGFycmF5IG9mIEdlb0pTT04gR2VvbWV0cmllc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPEdlb21ldHJ5Q29sbGVjdGlvbj59IGEgR2VvSlNPTiBHZW9tZXRyeUNvbGxlY3Rpb24gRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwdCA9IHtcbiAqICAgICBcInR5cGVcIjogXCJQb2ludFwiLFxuICogICAgICAgXCJjb29yZGluYXRlc1wiOiBbMTAwLCAwXVxuICogICAgIH07XG4gKiB2YXIgbGluZSA9IHtcbiAqICAgICBcInR5cGVcIjogXCJMaW5lU3RyaW5nXCIsXG4gKiAgICAgXCJjb29yZGluYXRlc1wiOiBbIFsxMDEsIDBdLCBbMTAyLCAxXSBdXG4gKiAgIH07XG4gKiB2YXIgY29sbGVjdGlvbiA9IHR1cmYuZ2VvbWV0cnlDb2xsZWN0aW9uKFtwdCwgbGluZV0pO1xuICpcbiAqIC8vPWNvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2VvbWV0cnlDb2xsZWN0aW9uKGdlb21ldHJpZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWdlb21ldHJpZXMpIHRocm93IG5ldyBFcnJvcignZ2VvbWV0cmllcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShnZW9tZXRyaWVzKSkgdGhyb3cgbmV3IEVycm9yKCdnZW9tZXRyaWVzIG11c3QgYmUgYW4gQXJyYXknKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ0dlb21ldHJ5Q29sbGVjdGlvbicsXG4gICAgICAgIGdlb21ldHJpZXM6IGdlb21ldHJpZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBSb3VuZCBudW1iZXIgdG8gcHJlY2lzaW9uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG51bSBOdW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFByZWNpc2lvblxuICogQHJldHVybnMge251bWJlcn0gcm91bmRlZCBudW1iZXJcbiAqIEBleGFtcGxlXG4gKiB0dXJmLnJvdW5kKDEyMC40MzIxKVxuICogLy89MTIwXG4gKlxuICogdHVyZi5yb3VuZCgxMjAuNDMyMSwgMilcbiAqIC8vPTEyMC40M1xuICovXG5mdW5jdGlvbiByb3VuZChudW0sIHByZWNpc2lvbikge1xuICAgIGlmIChudW0gPT09IHVuZGVmaW5lZCB8fCBudW0gPT09IG51bGwgfHwgaXNOYU4obnVtKSkgdGhyb3cgbmV3IEVycm9yKCdudW0gaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAocHJlY2lzaW9uICYmICEocHJlY2lzaW9uID49IDApKSB0aHJvdyBuZXcgRXJyb3IoJ3ByZWNpc2lvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgdmFyIG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDApO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG51bSAqIG11bHRpcGxpZXIpIC8gbXVsdGlwbGllcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIHJhZGlhbnMgdG8gYSBtb3JlIGZyaWVuZGx5IHVuaXQuXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBraWxvbWV0ZXJzLCBjZW50aW1ldGVycywgZmVldFxuICpcbiAqIEBuYW1lIHJhZGlhbnNUb0xlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgaW4gcmFkaWFucyBhY3Jvc3MgdGhlIHNwaGVyZVxuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz0na2lsb21ldGVycyddIGNhbiBiZSBkZWdyZWVzLCByYWRpYW5zLCBtaWxlcywgb3Iga2lsb21ldGVycyBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsIG1ldGVycywga2lsb21ldHJlcywga2lsb21ldGVycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IGRpc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIHJhZGlhbnNUb0xlbmd0aChyYWRpYW5zLCB1bml0cykge1xuICAgIGlmIChyYWRpYW5zID09PSB1bmRlZmluZWQgfHwgcmFkaWFucyA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdyYWRpYW5zIGlzIHJlcXVpcmVkJyk7XG5cbiAgICBpZiAodW5pdHMgJiYgdHlwZW9mIHVuaXRzICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVycm9yKCd1bml0cyBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgdmFyIGZhY3RvciA9IGZhY3RvcnNbdW5pdHMgfHwgJ2tpbG9tZXRlcnMnXTtcbiAgICBpZiAoIWZhY3RvcikgdGhyb3cgbmV3IEVycm9yKHVuaXRzICsgJyB1bml0cyBpcyBpbnZhbGlkJyk7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBmYWN0b3I7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSBhIHJlYWwtd29ybGQgdW5pdCBpbnRvIHJhZGlhbnNcbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGtpbG9tZXRlcnMsIGNlbnRpbWV0ZXJzLCBmZWV0XG4gKlxuICogQG5hbWUgbGVuZ3RoVG9SYWRpYW5zXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2UgaW4gcmVhbCB1bml0c1xuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz0na2lsb21ldGVycyddIGNhbiBiZSBkZWdyZWVzLCByYWRpYW5zLCBtaWxlcywgb3Iga2lsb21ldGVycyBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsIG1ldGVycywga2lsb21ldHJlcywga2lsb21ldGVycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IHJhZGlhbnNcbiAqL1xuZnVuY3Rpb24gbGVuZ3RoVG9SYWRpYW5zKGRpc3RhbmNlLCB1bml0cykge1xuICAgIGlmIChkaXN0YW5jZSA9PT0gdW5kZWZpbmVkIHx8IGRpc3RhbmNlID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ2Rpc3RhbmNlIGlzIHJlcXVpcmVkJyk7XG5cbiAgICBpZiAodW5pdHMgJiYgdHlwZW9mIHVuaXRzICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVycm9yKCd1bml0cyBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgdmFyIGZhY3RvciA9IGZhY3RvcnNbdW5pdHMgfHwgJ2tpbG9tZXRlcnMnXTtcbiAgICBpZiAoIWZhY3RvcikgdGhyb3cgbmV3IEVycm9yKHVuaXRzICsgJyB1bml0cyBpcyBpbnZhbGlkJyk7XG4gICAgcmV0dXJuIGRpc3RhbmNlIC8gZmFjdG9yO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBkaXN0YW5jZSBtZWFzdXJlbWVudCAoYXNzdW1pbmcgYSBzcGhlcmljYWwgRWFydGgpIGZyb20gYSByZWFsLXdvcmxkIHVuaXQgaW50byBkZWdyZWVzXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBjZW50aW1ldGVycywga2lsb21ldHJlcywgZmVldFxuICpcbiAqIEBuYW1lIGxlbmd0aFRvRGVncmVlc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIGluIHJlYWwgdW5pdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9J2tpbG9tZXRlcnMnXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIG9yIGtpbG9tZXRlcnMgaW5jaGVzLCB5YXJkcywgbWV0cmVzLCBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBkZWdyZWVzXG4gKi9cbmZ1bmN0aW9uIGxlbmd0aFRvRGVncmVlcyhkaXN0YW5jZSwgdW5pdHMpIHtcbiAgICByZXR1cm4gcmFkaWFuc1RvRGVncmVlcyhsZW5ndGhUb1JhZGlhbnMoZGlzdGFuY2UsIHVuaXRzKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW55IGJlYXJpbmcgYW5nbGUgZnJvbSB0aGUgbm9ydGggbGluZSBkaXJlY3Rpb24gKHBvc2l0aXZlIGNsb2Nrd2lzZSlcbiAqIGFuZCByZXR1cm5zIGFuIGFuZ2xlIGJldHdlZW4gMC0zNjAgZGVncmVlcyAocG9zaXRpdmUgY2xvY2t3aXNlKSwgMCBiZWluZyB0aGUgbm9ydGggbGluZVxuICpcbiAqIEBuYW1lIGJlYXJpbmdUb0F6aW11dGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWFyaW5nIGFuZ2xlLCBiZXR3ZWVuIC0xODAgYW5kICsxODAgZGVncmVlc1xuICogQHJldHVybnMge251bWJlcn0gYW5nbGUgYmV0d2VlbiAwIGFuZCAzNjAgZGVncmVlc1xuICovXG5mdW5jdGlvbiBiZWFyaW5nVG9BemltdXRoKGJlYXJpbmcpIHtcbiAgICBpZiAoYmVhcmluZyA9PT0gbnVsbCB8fCBiZWFyaW5nID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignYmVhcmluZyBpcyByZXF1aXJlZCcpO1xuXG4gICAgdmFyIGFuZ2xlID0gYmVhcmluZyAlIDM2MDtcbiAgICBpZiAoYW5nbGUgPCAwKSBhbmdsZSArPSAzNjA7XG4gICAgcmV0dXJuIGFuZ2xlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFuZ2xlIGluIHJhZGlhbnMgdG8gZGVncmVlc1xuICpcbiAqIEBuYW1lIHJhZGlhbnNUb0RlZ3JlZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIGFuZ2xlIGluIHJhZGlhbnNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGRlZ3JlZXMgYmV0d2VlbiAwIGFuZCAzNjAgZGVncmVlc1xuICovXG5mdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHtcbiAgICBpZiAocmFkaWFucyA9PT0gbnVsbCB8fCByYWRpYW5zID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcigncmFkaWFucyBpcyByZXF1aXJlZCcpO1xuXG4gICAgdmFyIGRlZ3JlZXMgPSByYWRpYW5zICUgKDIgKiBNYXRoLlBJKTtcbiAgICByZXR1cm4gZGVncmVlcyAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYW5nbGUgaW4gZGVncmVlcyB0byByYWRpYW5zXG4gKlxuICogQG5hbWUgZGVncmVlc1RvUmFkaWFuc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlZ3JlZXMgYW5nbGUgYmV0d2VlbiAwIGFuZCAzNjAgZGVncmVlc1xuICogQHJldHVybnMge251bWJlcn0gYW5nbGUgaW4gcmFkaWFuc1xuICovXG5mdW5jdGlvbiBkZWdyZWVzVG9SYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICBpZiAoZGVncmVlcyA9PT0gbnVsbCB8fCBkZWdyZWVzID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignZGVncmVlcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgdmFyIHJhZGlhbnMgPSBkZWdyZWVzICUgMzYwO1xuICAgIHJldHVybiByYWRpYW5zICogTWF0aC5QSSAvIDE4MDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGxlbmd0aCB0byB0aGUgcmVxdWVzdGVkIHVuaXQuXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBraWxvbWV0ZXJzLCBjZW50aW1ldGVycywgZmVldFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxVbml0IG9mIHRoZSBsZW5ndGhcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmluYWxVbml0PSdraWxvbWV0ZXJzJ10gcmV0dXJuZWQgdW5pdFxuICogQHJldHVybnMge251bWJlcn0gdGhlIGNvbnZlcnRlZCBsZW5ndGhcbiAqL1xuZnVuY3Rpb24gY29udmVydExlbmd0aChsZW5ndGgsIG9yaWdpbmFsVW5pdCwgZmluYWxVbml0KSB7XG4gICAgaWYgKGxlbmd0aCA9PT0gbnVsbCB8fCBsZW5ndGggPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdsZW5ndGggaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIShsZW5ndGggPj0gMCkpIHRocm93IG5ldyBFcnJvcignbGVuZ3RoIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcblxuICAgIHJldHVybiByYWRpYW5zVG9MZW5ndGgobGVuZ3RoVG9SYWRpYW5zKGxlbmd0aCwgb3JpZ2luYWxVbml0KSwgZmluYWxVbml0IHx8ICdraWxvbWV0ZXJzJyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBhcmVhIHRvIHRoZSByZXF1ZXN0ZWQgdW5pdC5cbiAqIFZhbGlkIHVuaXRzOiBraWxvbWV0ZXJzLCBraWxvbWV0cmVzLCBtZXRlcnMsIG1ldHJlcywgY2VudGltZXRyZXMsIG1pbGxpbWV0ZXJzLCBhY3JlcywgbWlsZXMsIHlhcmRzLCBmZWV0LCBpbmNoZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhcmVhIHRvIGJlIGNvbnZlcnRlZFxuICogQHBhcmFtIHtzdHJpbmd9IFtvcmlnaW5hbFVuaXQ9J21ldGVycyddIG9mIHRoZSBkaXN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IFtmaW5hbFVuaXQ9J2tpbG9tZXRlcnMnXSByZXR1cm5lZCB1bml0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgY29udmVydGVkIGRpc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBcmVhKGFyZWEsIG9yaWdpbmFsVW5pdCwgZmluYWxVbml0KSB7XG4gICAgaWYgKGFyZWEgPT09IG51bGwgfHwgYXJlYSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2FyZWEgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIShhcmVhID49IDApKSB0aHJvdyBuZXcgRXJyb3IoJ2FyZWEgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuXG4gICAgdmFyIHN0YXJ0RmFjdG9yID0gYXJlYUZhY3RvcnNbb3JpZ2luYWxVbml0IHx8ICdtZXRlcnMnXTtcbiAgICBpZiAoIXN0YXJ0RmFjdG9yKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3JpZ2luYWwgdW5pdHMnKTtcblxuICAgIHZhciBmaW5hbEZhY3RvciA9IGFyZWFGYWN0b3JzW2ZpbmFsVW5pdCB8fCAna2lsb21ldGVycyddO1xuICAgIGlmICghZmluYWxGYWN0b3IpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmaW5hbCB1bml0cycpO1xuXG4gICAgcmV0dXJuIChhcmVhIC8gc3RhcnRGYWN0b3IpICogZmluYWxGYWN0b3I7XG59XG5cbi8qKlxuICogaXNOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IG51bSBOdW1iZXIgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogdHVyZi5pc051bWJlcigxMjMpXG4gKiAvLz10cnVlXG4gKiB0dXJmLmlzTnVtYmVyKCdmb28nKVxuICogLy89ZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIobnVtKSB7XG4gICAgcmV0dXJuICFpc05hTihudW0pICYmIG51bSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShudW0pO1xufVxuXG4vKipcbiAqIGlzT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSBpbnB1dCB2YXJpYWJsZSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiB0dXJmLmlzT2JqZWN0KHtlbGV2YXRpb246IDEwfSlcbiAqIC8vPXRydWVcbiAqIHR1cmYuaXNPYmplY3QoJ2ZvbycpXG4gKiAvLz1mYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgIHJldHVybiAoISFpbnB1dCkgJiYgKGlucHV0LmNvbnN0cnVjdG9yID09PSBPYmplY3QpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIEJCb3hcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBiYm94IEJCb3ggdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHRocm93cyBFcnJvciBpZiBCQm94IGlzIG5vdCB2YWxpZFxuICogQGV4YW1wbGVcbiAqIHZhbGlkYXRlQkJveChbLTE4MCwgLTQwLCAxMTAsIDUwXSlcbiAqIC8vPU9LXG4gKiB2YWxpZGF0ZUJCb3goWy0xODAsIC00MF0pXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KCdGb28nKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveCg1KVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveChudWxsKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveCh1bmRlZmluZWQpXG4gKiAvLz1FcnJvclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJCb3goYmJveCkge1xuICAgIGlmICghYmJveCkgdGhyb3cgbmV3IEVycm9yKCdiYm94IGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGJib3gpKSB0aHJvdyBuZXcgRXJyb3IoJ2Jib3ggbXVzdCBiZSBhbiBBcnJheScpO1xuICAgIGlmIChiYm94Lmxlbmd0aCAhPT0gNCAmJiBiYm94Lmxlbmd0aCAhPT0gNikgdGhyb3cgbmV3IEVycm9yKCdiYm94IG11c3QgYmUgYW4gQXJyYXkgb2YgNCBvciA2IG51bWJlcnMnKTtcbiAgICBiYm94LmZvckVhY2goZnVuY3Rpb24gKG51bSkge1xuICAgICAgICBpZiAoIWlzTnVtYmVyKG51bSkpIHRocm93IG5ldyBFcnJvcignYmJveCBtdXN0IG9ubHkgY29udGFpbiBudW1iZXJzJyk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgSWRcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCBJZCB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIEVycm9yIGlmIElkIGlzIG5vdCB2YWxpZFxuICogQGV4YW1wbGVcbiAqIHZhbGlkYXRlSWQoWy0xODAsIC00MCwgMTEwLCA1MF0pXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZChbLTE4MCwgLTQwXSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUlkKCdGb28nKVxuICogLy89T0tcbiAqIHZhbGlkYXRlSWQoNSlcbiAqIC8vPU9LXG4gKiB2YWxpZGF0ZUlkKG51bGwpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZCh1bmRlZmluZWQpXG4gKiAvLz1FcnJvclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUlkKGlkKSB7XG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IEVycm9yKCdpZCBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChbJ3N0cmluZycsICdudW1iZXInXS5pbmRleE9mKHR5cGVvZiBpZCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ2lkIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcnKTtcbn1cblxuLy8gRGVwcmVjYXRlZCBtZXRob2RzXG5mdW5jdGlvbiByYWRpYW5zMmRlZ3JlZXMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgcmFkaWFuc1RvRGVncmVlc2AnKTtcbn1cblxuZnVuY3Rpb24gZGVncmVlczJyYWRpYW5zKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRlZ3JlZXNUb1JhZGlhbnNgJyk7XG59XG5cbmZ1bmN0aW9uIGRpc3RhbmNlVG9EZWdyZWVzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGxlbmd0aFRvRGVncmVlc2AnKTtcbn1cblxuZnVuY3Rpb24gZGlzdGFuY2VUb1JhZGlhbnMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgbGVuZ3RoVG9SYWRpYW5zYCcpO1xufVxuXG5mdW5jdGlvbiByYWRpYW5zVG9EaXN0YW5jZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGByYWRpYW5zVG9MZW5ndGhgJyk7XG59XG5cbmZ1bmN0aW9uIGJlYXJpbmdUb0FuZ2xlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGJlYXJpbmdUb0F6aW11dGhgJyk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREaXN0YW5jZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBjb252ZXJ0TGVuZ3RoYCcpO1xufVxuXG5leHBvcnQgeyBlYXJ0aFJhZGl1cywgZmFjdG9ycywgdW5pdHNGYWN0b3JzLCBhcmVhRmFjdG9ycywgZmVhdHVyZSwgZ2VvbWV0cnksIHBvaW50LCBwb2ludHMsIHBvbHlnb24sIHBvbHlnb25zLCBsaW5lU3RyaW5nLCBsaW5lU3RyaW5ncywgZmVhdHVyZUNvbGxlY3Rpb24sIG11bHRpTGluZVN0cmluZywgbXVsdGlQb2ludCwgbXVsdGlQb2x5Z29uLCBnZW9tZXRyeUNvbGxlY3Rpb24sIHJvdW5kLCByYWRpYW5zVG9MZW5ndGgsIGxlbmd0aFRvUmFkaWFucywgbGVuZ3RoVG9EZWdyZWVzLCBiZWFyaW5nVG9BemltdXRoLCByYWRpYW5zVG9EZWdyZWVzLCBkZWdyZWVzVG9SYWRpYW5zLCBjb252ZXJ0TGVuZ3RoLCBjb252ZXJ0QXJlYSwgaXNOdW1iZXIsIGlzT2JqZWN0LCB2YWxpZGF0ZUJCb3gsIHZhbGlkYXRlSWQsIHJhZGlhbnMyZGVncmVlcywgZGVncmVlczJyYWRpYW5zLCBkaXN0YW5jZVRvRGVncmVlcywgZGlzdGFuY2VUb1JhZGlhbnMsIHJhZGlhbnNUb0Rpc3RhbmNlLCBiZWFyaW5nVG9BbmdsZSwgY29udmVydERpc3RhbmNlIH07XG4iLCJpbXBvcnQgeyBnZXRQcm9wLCBwYXJzZVNlcXVlbmNlLCBnZXRDb2xvciwgY2lyY2xlVG9Qb2x5Z29uIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IHBvaW50LCBsaW5lU3RyaW5nLCBwb2x5Z29uIH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgdHJhbnNmb3JtVHJhbnNsYXRlIGZyb20gJ0B0dXJmL3RyYW5zZm9ybS10cmFuc2xhdGUnO1xuaW1wb3J0IGNsb25lIGZyb20gJ0B0dXJmL2Nsb25lJztcbmltcG9ydCBwcm9qNCBmcm9tICdwcm9qNCc7XG5leHBvcnQgY29uc3QgTEFORFhNTF9QSVBFX05FVFdPUktfUElQRSA9ICdwaXBlX25ldHdvcmtfcGlwZSc7XG5leHBvcnQgY29uc3QgTEFORFhNTF9QSVBFX05FVFdPUktfU1RSVUNUID0gJ3BpcGVfbmV0d29ya19zdHJ1Y3QnO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRQaXBlTmV0d29ya3MoeG1sT2JqLCBwcm9qZWN0aW9uLCBvcHRzKSB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSBbXTtcbiAgICBjb25zdCBwaXBlTmV0d29ya3NOb2RlcyA9IGdldFByb3AoeG1sT2JqLCBcIkxhbmRYTUxcIiwgXCJQaXBlTmV0d29ya3NcIik7XG4gICAgaWYgKCFwaXBlTmV0d29ya3NOb2RlcylcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzO1xuICAgIHBpcGVOZXR3b3Jrc05vZGVzLmZvckVhY2gocG4gPT4ge1xuICAgICAgICBjb25zdCBwaXBlTmV0d29ya05vZGVzID0gZ2V0UHJvcChwbiwgXCJQaXBlTmV0d29ya1wiKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBpcGVOZXR3b3JrTm9kZXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgc3RydWN0cyA9IHt9O1xuICAgICAgICBwaXBlTmV0d29ya05vZGVzLmZvckVhY2gocG4gPT4ge1xuICAgICAgICAgICAgY29uc3QgYmFzZVByb3BzID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHBuLiQubmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcG4uJC5kZXNjLFxuICAgICAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IDAuMSxcbiAgICAgICAgICAgICAgICBcImZpbGwtb3BhY2l0eVwiOiAwLjUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxTdHJ1Y3RzID0gY29udmVydFN0cnVjdHMocG4sIHByb2plY3Rpb24sIGJhc2VQcm9wcywgb3B0cyk7XG4gICAgICAgICAgICBmZWF0dXJlcy5wdXNoKC4uLk9iamVjdC52YWx1ZXMobG9jYWxTdHJ1Y3RzKS5tYXAocyA9PiBzLmdlb21ldHJ5KSk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHN0cnVjdHMsIGxvY2FsU3RydWN0cyk7XG4gICAgICAgIH0pO1xuICAgICAgICBwaXBlTmV0d29ya05vZGVzLmZvckVhY2gocG4gPT4ge1xuICAgICAgICAgICAgY29uc3QgYmFzZVByb3BzID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHBuLiQubmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcG4uJC5kZXNjLFxuICAgICAgICAgICAgICAgIGxhbmR4bWxUeXBlOiBMQU5EWE1MX1BJUEVfTkVUV09SS19QSVBFLFxuICAgICAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IDEsXG4gICAgICAgICAgICAgICAgXCJmaWxsLW9wYWNpdHlcIjogMSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBwaXBlcyA9IGNvbnZlcnRQaXBlcyhwbiwgc3RydWN0cywgcHJvamVjdGlvbiwgYmFzZVByb3BzLCBvcHRzKTtcbiAgICAgICAgICAgIGZlYXR1cmVzLnB1c2goLi4ucGlwZXMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmVhdHVyZXM7XG59XG5mdW5jdGlvbiBjb252ZXJ0UGlwZXMocGlwZU5ldHdvcmssIHN0cnVjdHMsIHByb2plY3Rpb24sIGJhc2VQcm9wcywgb3B0cykge1xuICAgIGNvbnN0IHBpcGVzID0gW107XG4gICAgY29uc3QgcGlwZU5vZGVzID0gZ2V0UHJvcChwaXBlTmV0d29yaywgXCJQaXBlc1wiLCAwLCBcIlBpcGVcIik7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBpcGVOb2RlcykpXG4gICAgICAgIHJldHVybjtcbiAgICBwaXBlTm9kZXMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgY29uc3QgY2lyY1BpcGVOb2RlID0gZ2V0UHJvcChwLCBcIkNpcmNQaXBlXCIsIDApO1xuICAgICAgICBjb25zdCBuYW1lID0gYmFzZVByb3BzLm5hbWUgPyBiYXNlUHJvcHMubmFtZSArICcgLSAnICsgcC4kLm5hbWUgOiBwLiQubmFtZTtcbiAgICAgICAgY29uc3QgZmVhdHVyZVByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVByb3BzLCB7XG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGJhc2VQcm9wcy5kZXNjcmlwdGlvbiA/IGJhc2VQcm9wcy5kZXNjcmlwdGlvbiArICcgLSAnICsgcC4kLmRlc2MgOiBwLiQuZGVzYyxcbiAgICAgICAgICAgIHN0cm9rZTogZ2V0Q29sb3IoYHBpcGUtbmV0d29yay1waXBlLSR7bmFtZX1gLCBvcHRzLmNvbG9yT3B0cylcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjaXJjUGlwZU5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYXR0cnMgPSBjaXJjUGlwZU5vZGUuJDtcbiAgICAgICAgICAgIGlmICgnZGlhbWV0ZXInIGluIGF0dHJzKVxuICAgICAgICAgICAgICAgIGZlYXR1cmVQcm9wcy5sYW5keG1sRGlhbWV0ZXIgPSBwYXJzZUZsb2F0KGF0dHJzLmRpYW1ldGVyKTtcbiAgICAgICAgICAgIGlmICgndGhpY2tuZXNzJyBpbiBhdHRycylcbiAgICAgICAgICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbFRoaWNrbmVzcyA9IHBhcnNlRmxvYXQoYXR0cnMudGhpY2tuZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWZTdGFydCA9IHN0cnVjdHNbcC4kLnJlZlN0YXJ0XTtcbiAgICAgICAgY29uc3QgcmVmRW5kID0gc3RydWN0c1twLiQucmVmRW5kXTtcbiAgICAgICAgaWYgKCFyZWZTdGFydClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcGlwZSBcIiR7ZmVhdHVyZVByb3BzLm5hbWV9XCIgcmVmU3RhcnQgXCIke3AuJC5yZWZTdGFydH1cIiAhYCk7XG4gICAgICAgIGlmICghcmVmRW5kKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBwaXBlIFwiJHtmZWF0dXJlUHJvcHMubmFtZX1cIiByZWZFbmQgXCIke3AuJC5yZWZFbmR9XCIgIWApO1xuICAgICAgICBjb25zdCBwaXBlID0gbGluZVN0cmluZyhbXG4gICAgICAgICAgICByZWZTdGFydC5jZW50ZXIsXG4gICAgICAgICAgICByZWZFbmQuY2VudGVyLFxuICAgICAgICBdLCBmZWF0dXJlUHJvcHMpO1xuICAgICAgICBwaXBlcy5wdXNoKHBpcGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBwaXBlcztcbn1cbmZ1bmN0aW9uIGNvbnZlcnRTdHJ1Y3RzKHBpcGVOZXR3b3JrLCBwcm9qZWN0aW9uLCBiYXNlUHJvcHMsIG9wdHMpIHtcbiAgICBjb25zdCBzdHJ1Y3RzID0ge307XG4gICAgY29uc3Qgc3RydWN0Tm9kZXMgPSBnZXRQcm9wKHBpcGVOZXR3b3JrLCBcIlN0cnVjdHNcIiwgMCwgXCJTdHJ1Y3RcIik7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHN0cnVjdE5vZGVzKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHN0cnVjdE5vZGVzLmZvckVhY2gocyA9PiB7XG4gICAgICAgIGNvbnN0IGNlbnRlck5vZGUgPSBnZXRQcm9wKHMsIFwiQ2VudGVyXCIsIDApO1xuICAgICAgICBjb25zdCByZWN0U3RydWN0Tm9kZSA9IGdldFByb3AocywgXCJSZWN0U3RydWN0XCIsIDApO1xuICAgICAgICBjb25zdCBjaXJjU3RydWN0Tm9kZSA9IGdldFByb3AocywgXCJDaXJjU3RydWN0XCIsIDApO1xuICAgICAgICBjb25zdCBpbmxldFN0cnVjdE5vZGUgPSBnZXRQcm9wKHMsIFwiSW5sZXRTdHJ1Y3RcIiwgMCk7XG4gICAgICAgIGNvbnN0IG91dGxldFN0cnVjdE5vZGUgPSBnZXRQcm9wKHMsIFwiT3V0bGV0U3RydWN0XCIsIDApO1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uTm9kZSA9IGdldFByb3AocywgXCJDb25uZWN0aW9uXCIsIDApO1xuICAgICAgICBjb25zdCBzdHJ1Y3RUeXBlID0gcmVjdFN0cnVjdE5vZGUgIT09IHVuZGVmaW5lZCA/IFwicmVjdFwiIDogKChjaXJjU3RydWN0Tm9kZSAhPT0gdW5kZWZpbmVkID8gXCJjaXJjXCIgOlxuICAgICAgICAgICAgKGlubGV0U3RydWN0Tm9kZSAhPT0gdW5kZWZpbmVkID8gXCJpbmxldFwiIDpcbiAgICAgICAgICAgICAgICAob3V0bGV0U3RydWN0Tm9kZSAhPT0gdW5kZWZpbmVkID8gXCJvdXRsZXRcIiA6XG4gICAgICAgICAgICAgICAgICAgIChjb25uZWN0aW9uTm9kZSAhPT0gdW5kZWZpbmVkID8gXCJjb25uZWN0aW9uXCIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwpKSkpKSk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBiYXNlUHJvcHMubmFtZSA/IGJhc2VQcm9wcy5uYW1lICsgJyAtICcgKyBzLiQubmFtZSA6IHMuJC5uYW1lO1xuICAgICAgICBjb25zdCBmZWF0dXJlUHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBiYXNlUHJvcHMsIHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYmFzZVByb3BzLmRlc2NyaXB0aW9uID8gYmFzZVByb3BzLmRlc2NyaXB0aW9uICsgJyAtICcgKyBzLiQuZGVzYyA6IHMuJC5kZXNjLFxuICAgICAgICAgICAgbGFuZHhtbFR5cGU6IExBTkRYTUxfUElQRV9ORVRXT1JLX1NUUlVDVCxcbiAgICAgICAgICAgIGxhbmR4bWxTdHJ1Y3Q6IHN0cnVjdFR5cGUsXG4gICAgICAgICAgICBsYW5keG1sRWxldlJpbTogJ2VsZXZSaW0nIGluIHMuJCA/IHBhcnNlRmxvYXQocy4kLmVsZXZSaW0pIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbGFuZHhtbEVsZXZTdW1wOiAnZWxldlN1bXAnIGluIHMuJCA/IHBhcnNlRmxvYXQocy4kLmVsZXZTdW1wKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZpbGw6IGdldENvbG9yKGBwaXBlLW5ldHdvcmstc3RydWN0LSR7bmFtZX1gLCBvcHRzLmNvbG9yT3B0cylcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjaXJjU3RydWN0Tm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRycyA9IGNpcmNTdHJ1Y3ROb2RlLiQ7XG4gICAgICAgICAgICBpZiAoJ2RpYW1ldGVyJyBpbiBhdHRycylcbiAgICAgICAgICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbERpYW1ldGVyID0gcGFyc2VGbG9hdChhdHRycy5kaWFtZXRlcik7XG4gICAgICAgICAgICBpZiAoJ3RoaWNrbmVzcycgaW4gYXR0cnMpXG4gICAgICAgICAgICAgICAgZmVhdHVyZVByb3BzLmxhbmR4bWxUaGlja25lc3MgPSBwYXJzZUZsb2F0KGF0dHJzLnRoaWNrbmVzcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY3RTdHJ1Y3ROb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gcmVjdFN0cnVjdE5vZGUuJDtcbiAgICAgICAgICAgIGlmICgndGhpY2tuZXNzJyBpbiBhdHRycylcbiAgICAgICAgICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbFRoaWNrbmVzcyA9IHBhcnNlRmxvYXQoYXR0cnMudGhpY2tuZXNzKTtcbiAgICAgICAgICAgIGlmICgnbGVuZ3RoJyBpbiBhdHRycylcbiAgICAgICAgICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbExlbmd0aCA9IHBhcnNlRmxvYXQoYXR0cnMubGVuZ3RoKTtcbiAgICAgICAgICAgIGlmICgnd2lkdGgnIGluIGF0dHJzKVxuICAgICAgICAgICAgICAgIGZlYXR1cmVQcm9wcy5sYW5keG1sV2lkdGggPSBwYXJzZUZsb2F0KGF0dHJzLndpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQYXJzZSBhbmQgY29udmVydCBjZW50ZXIgY29vcmRpbmF0ZXNcbiAgICAgICAgY29uc3Qgc2VxID0gcGFyc2VTZXF1ZW5jZShjZW50ZXJOb2RlKS5tYXAodiA9PiBwYXJzZUZsb2F0KHYpKTtcbiAgICAgICAgbGV0IGNlbnRlciA9IFtzZXFbMV0sIHNlcVswXV07XG4gICAgICAgIGNlbnRlciA9IHByb2o0KHByb2plY3Rpb24sICdXR1M4NCcsIGNlbnRlcik7XG4gICAgICAgIGxldCBnZW9tZXRyeTtcbiAgICAgICAgaWYgKHJlY3RTdHJ1Y3ROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBmZWF0dXJlUHJvcHMubGVuZ3RoID8gZmVhdHVyZVByb3BzLmxlbmd0aCA6IDE7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGZlYXR1cmVQcm9wcy53aWR0aCA/IGZlYXR1cmVQcm9wcy53aWR0aCA6IDE7XG4gICAgICAgICAgICBnZW9tZXRyeSA9IHNxdWFyZUFyb3VuZChjZW50ZXIsIGxlbmd0aCwgd2lkdGgsICdtZXRlcnMnLCBmZWF0dXJlUHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGlhbWV0ZXIgPSBmZWF0dXJlUHJvcHMubGFuZHhtbERpYW1ldGVyID8gZmVhdHVyZVByb3BzLmxhbmR4bWxEaWFtZXRlciA6IDE7XG4gICAgICAgICAgICBnZW9tZXRyeSA9IGNpcmNsZVRvUG9seWdvbihjZW50ZXIsIGRpYW1ldGVyIC8gMiwgMTI4LCBmZWF0dXJlUHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0cnVjdCB0eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIDtcbiAgICAgICAgc3RydWN0c1tzLiQubmFtZV0gPSB7IGdlb21ldHJ5LCBjZW50ZXIgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3RydWN0cztcbn1cbmZ1bmN0aW9uIHNxdWFyZUFyb3VuZChjZW50ZXJDb29yZHMsIGxlbmd0aCwgd2lkdGgsIHVuaXRzLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY2VudGVyID0gcG9pbnQoY2VudGVyQ29vcmRzKTtcbiAgICBjb25zdCBub3J0aEVhc3QgPSBjbG9uZShjZW50ZXIpO1xuICAgIHRyYW5zZm9ybVRyYW5zbGF0ZShub3J0aEVhc3QsIHdpZHRoIC8gMiwgMjcwLCB7IHVuaXRzLCBtdXRhdGU6IHRydWUgfSk7XG4gICAgdHJhbnNmb3JtVHJhbnNsYXRlKG5vcnRoRWFzdCwgbGVuZ3RoIC8gMiwgMCwgeyB1bml0cywgbXV0YXRlOiB0cnVlIH0pO1xuICAgIGNvbnN0IG5vcnRoV2VzdCA9IGNsb25lKGNlbnRlcik7XG4gICAgdHJhbnNmb3JtVHJhbnNsYXRlKG5vcnRoV2VzdCwgd2lkdGggLyAyLCA5MCwgeyB1bml0cywgbXV0YXRlOiB0cnVlIH0pO1xuICAgIHRyYW5zZm9ybVRyYW5zbGF0ZShub3J0aFdlc3QsIGxlbmd0aCAvIDIsIDAsIHsgdW5pdHMsIG11dGF0ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzb3V0aFdlc3QgPSBjbG9uZShjZW50ZXIpO1xuICAgIHRyYW5zZm9ybVRyYW5zbGF0ZShzb3V0aFdlc3QsIHdpZHRoIC8gMiwgOTAsIHsgdW5pdHMsIG11dGF0ZTogdHJ1ZSB9KTtcbiAgICB0cmFuc2Zvcm1UcmFuc2xhdGUoc291dGhXZXN0LCBsZW5ndGggLyAyLCAxODAsIHsgdW5pdHMsIG11dGF0ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzb3V0aEVhc3QgPSBjbG9uZShjZW50ZXIpO1xuICAgIHRyYW5zZm9ybVRyYW5zbGF0ZShzb3V0aEVhc3QsIHdpZHRoIC8gMiwgMjcwLCB7IHVuaXRzLCBtdXRhdGU6IHRydWUgfSk7XG4gICAgdHJhbnNmb3JtVHJhbnNsYXRlKHNvdXRoRWFzdCwgbGVuZ3RoIC8gMiwgMTgwLCB7IHVuaXRzLCBtdXRhdGU6IHRydWUgfSk7XG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgICBub3J0aEVhc3QuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsIG5vcnRoV2VzdC5nZW9tZXRyeS5jb29yZGluYXRlcyxcbiAgICAgICAgc291dGhXZXN0Lmdlb21ldHJ5LmNvb3JkaW5hdGVzLCBzb3V0aEVhc3QuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsXG4gICAgICAgIG5vcnRoRWFzdC5nZW9tZXRyeS5jb29yZGluYXRlc1xuICAgIF07XG4gICAgcmV0dXJuIHBvbHlnb24oW3BvaW50c10sIHByb3BlcnRpZXMpO1xufVxuIiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy9cbmltcG9ydCB4bWwyanMgZnJvbSAneG1sMmpzJztcbi8vLy8vLy8vLy9cbmltcG9ydCB7IGZlYXR1cmVDb2xsZWN0aW9uIH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgYXJlYSBmcm9tICdAdHVyZi9hcmVhJztcbmltcG9ydCBwcm9qNCBmcm9tICdwcm9qNCc7XG5pbXBvcnQgeyBQcm9qNERlZnMgfSBmcm9tICcuL3Byb2plY3Rpb24nO1xuaW1wb3J0IHsgZ2V0UHJvcCB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBjb252ZXJ0U3VyZmFjZXMgfSBmcm9tICcuL3N1cmZhY2UnO1xuaW1wb3J0IHsgY29udmVydFBhcmNlbHMgfSBmcm9tICcuL3BhcmNlbCc7XG5pbXBvcnQgeyBjb252ZXJ0UGlwZU5ldHdvcmtzIH0gZnJvbSAnLi9waXBlLW5ldHdvcmsnO1xuZXhwb3J0IGNvbnN0IFBST0pFQ1RJT05fQVVUT19ERVRFQ1QgPSAnYXV0b19kZXRlY3QnO1xuZXhwb3J0IGNvbnN0IENPTlZFUlRfU1VSRkFDRVMgPSAnc3VyZmFjZXMnO1xuZXhwb3J0IGNvbnN0IENPTlZFUlRfUEFSQ0VMUyA9ICdwYXJjZWxzJztcbmV4cG9ydCBjb25zdCBDT05WRVJUX1BJUEVfTkVUV09SS1MgPSAncGlwZV9uZXR3b3Jrcyc7XG5jb25zdCBjb252ZXJ0ZXJzID0ge1xuICAgIFtDT05WRVJUX1BBUkNFTFNdOiBjb252ZXJ0UGFyY2VscyxcbiAgICBbQ09OVkVSVF9TVVJGQUNFU106IGNvbnZlcnRTdXJmYWNlcyxcbiAgICBbQ09OVkVSVF9QSVBFX05FVFdPUktTXTogY29udmVydFBpcGVOZXR3b3Jrcyxcbn07XG4vLyBCYXNlZCBvbiBhbGV4Z2xlaXRoJ3MgcHJlbGltaW5hcnkgd29ya1xuLy8gZ2l0aHViLmNvbS9hbGV4Z2xlaXRoL2xhbmQteG1sLXRvLWdlb2pzb25cbmV4cG9ydCBjbGFzcyBDb252ZXJ0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICAgICAgcHJvamVjdGlvbjogUFJPSkVDVElPTl9BVVRPX0RFVEVDVCxcbiAgICAgICAgICAgIGVuYWJsZWRDb252ZXJ0ZXJzOiBbQ09OVkVSVF9TVVJGQUNFUywgQ09OVkVSVF9QQVJDRUxTLCBDT05WRVJUX1BJUEVfTkVUV09SS1NdLFxuICAgICAgICAgICAgcGFyc2VyOiB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvajREZWZzOiBbXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBcIkVQU0c6MjgzNTVcIixcbiAgICAgICAgICAgICAgICAgICAgXCIrcHJvaj11dG0gK3pvbmU9NTUgK3NvdXRoICtlbGxwcz1HUlM4MCArdG93Z3M4ND0wLDAsMCwwLDAsMCwwICt1bml0cz1tICtub19kZWZzXCIsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAuLi5Qcm9qNERlZnMsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZmVhdHVyZU1hcHBlcjogKGZlYXR1cmUsIG9wdHMpID0+IGZlYXR1cmUsXG4gICAgICAgICAgICBjb2xvck9wdHM6IHtcbiAgICAgICAgICAgICAgICBodWU6ICdtb25vY2hyb21lJyxcbiAgICAgICAgICAgICAgICBsdW1pbm9zaXR5OiAnZGFyaycsXG4gICAgICAgICAgICAgICAgc2VlZDogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRvR2VvSlNPTih4bWwsIG9wdHMgPSB7fSkge1xuICAgICAgICBjb25zdCBwYXJzZXJPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucy5wYXJzZXIsIG9wdHMucGFyc2VyKTtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IHhtbDJqcy5QYXJzZXIocGFyc2VyT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlUHJvajQob3B0cy5wcm9qNERlZnMpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgcGFyc2VyLnBhcnNlU3RyaW5nKHhtbCwgKGVyciwgeG1sT2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIGxldCBnZW9qc29uO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGdlb2pzb24gPSB0aGlzLmNvbnZlcnRUb0dlb0pTT04oeG1sT2JqLCBvcHRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGdlb2pzb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb252ZXJ0VG9HZW9KU09OKHhtbE9iaiwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBvcHRzKTtcbiAgICAgICAgLy8gVXNlIHNwZWNpZmllZCBwcm9qZWN0aW9uIG9yIHRyeSB0byBmaW5kIG9uZSBpbiB0aGUgTGFuZFhNTCBmaWxlXG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24gPSB0aGlzLmdldExhbmRYTUxQcm9qZWN0aW9uKHhtbE9iaiwgb3B0aW9ucy5wcm9qZWN0aW9uIHx8IHRoaXMuZGVmYXVsdE9wdGlvbnMucHJvamVjdGlvbik7XG4gICAgICAgIGlmICghcHJvamVjdGlvbilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvdXJjZSBwcm9qZWN0aW9uIGNhbiBub3QgYmUgZm91bmQgIVwiKTtcbiAgICAgICAgLy8gTGlzdCBlbmFibGVkIGNvbnZlcnRlcnNcbiAgICAgICAgY29uc3QgZW5hYmxlZENvbnZlcnRlcnMgPSBBcnJheS5pc0FycmF5KG9wdHMuZW5hYmxlZENvbnZlcnRlcnMpID9cbiAgICAgICAgICAgIG9wdHMuZW5hYmxlZENvbnZlcnRlcnMgOlxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0T3B0aW9ucy5lbmFibGVkQ29udmVydGVycztcbiAgICAgICAgbGV0IGZlYXR1cmVzID0gW107XG4gICAgICAgIC8vIENvbnZlcnQgTGFuZFhNTCBlbnRpdGllcyB0byBHZW9KU09OIGZlYXR1cmVzXG4gICAgICAgIGVuYWJsZWRDb252ZXJ0ZXJzLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgICBpZiAoIShjIGluIGNvbnZlcnRlcnMpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0aW5nIGNvbnZlcnQgJyVzJy4uLlwiLCBjKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0ZlYXR1cmVzID0gY29udmVydGVyc1tjXSh4bWxPYmosIHByb2plY3Rpb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgZmVhdHVyZXMucHVzaCguLi5uZXdGZWF0dXJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBcHBseSBmZWF0dXJlcyBtYXBwZXIgZnVuY3Rpb24gaWYgZGVmaW5lZFxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmVhdHVyZU1hcHBlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZmVhdHVyZXMgPSBmZWF0dXJlcy5tYXAoZiA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZmVhdHVyZU1hcHBlcihmLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnQgZmVhdHVyZSBieSByZXZlcnNlIGFyZWFcbiAgICAgICAgLy8gdG8gZWFzZSByZW5kZXJpbmdcbiAgICAgICAgZmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgaWYgKGFyZWEoYSkgPiBhcmVhKGIpKVxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChhcmVhKGEpIDwgYXJlYShiKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmV0dXJuIGV4dHJhY3RlZCBmZWF0dXJlcyBhcyBhIGZlYXR1cmUgY29sbGVjdGlvblxuICAgICAgICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMpO1xuICAgIH1cbiAgICBjb25maWd1cmVQcm9qNChhZGRpdGlvbmFsUHJvajREZWZzKSB7XG4gICAgICAgIGNvbnN0IHByb2o0RGVmcyA9IHRoaXMuZGVmYXVsdE9wdGlvbnMucHJvajREZWZzLnNsaWNlKDApO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhZGRpdGlvbmFsUHJvajREZWZzKSlcbiAgICAgICAgICAgIHByb2o0RGVmcy5wdXNoKC4uLmFkZGl0aW9uYWxQcm9qNERlZnMpO1xuICAgICAgICBwcm9qNC5kZWZzKHByb2o0RGVmcyk7XG4gICAgfVxuICAgIGdldExhbmRYTUxQcm9qZWN0aW9uKHhtbE9iaiwgbWFudWFsUHJvamVjdGlvbikge1xuICAgICAgICBpZiAobWFudWFsUHJvamVjdGlvbiAhPT0gUFJPSkVDVElPTl9BVVRPX0RFVEVDVClcbiAgICAgICAgICAgIHJldHVybiBtYW51YWxQcm9qZWN0aW9uO1xuICAgICAgICBsZXQgcHJvamVjdGlvbiA9IG51bGw7XG4gICAgICAgIGlmICghcHJvamVjdGlvbilcbiAgICAgICAgICAgIHByb2plY3Rpb24gPSB0aGlzLmZpbmRVVE1Qcm9qZWN0aW9uKHhtbE9iaik7XG4gICAgICAgIHJldHVybiBwcm9qZWN0aW9uO1xuICAgIH1cbiAgICBmaW5kVVRNUHJvamVjdGlvbih4bWxPYmopIHtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IGdldFByb3AoeG1sT2JqLCBcIkxhbmRYTUxcIiwgXCJDb29yZGluYXRlU3lzdGVtXCIsIDAsIFwiJFwiLCBcImRhdHVtXCIpO1xuICAgICAgICBjb25zdCB6b25lID0gZ2V0UHJvcCh4bWxPYmosIFwiTGFuZFhNTFwiLCBcIkNnUG9pbnRzXCIsIDAsIFwiJFwiLCBcInpvbmVOdW1iZXJcIik7XG4gICAgICAgIGxldCB1dG1Qcm9qZWN0aW9uID0gbnVsbDtcbiAgICAgICAgaWYgKHByb2plY3Rpb24gJiYgem9uZSkge1xuICAgICAgICAgICAgdXRtUHJvamVjdGlvbiA9IGArcHJvaj11dG0gK3pvbmU9JHt6b25lfSArc291dGggK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnMgYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXRtUHJvamVjdGlvbjtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBnZXRQcm9wLCBwYXJzZVNlcXVlbmNlIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IHBvbHlnb24gfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBwcm9qNCBmcm9tICdwcm9qNCc7XG5leHBvcnQgY29uc3QgTEFORFhNTF9QQVJDRUwgPSAncGFyY2VsJztcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UGFyY2Vscyh4bWxPYmosIHByb2plY3Rpb24sIG9wdHMpIHtcbiAgICBjb25zdCBvcmlnaW5hbFBvaW50cyA9IGdldFByb3AoeG1sT2JqLCBcIkxhbmRYTUxcIiwgXCJDZ1BvaW50c1wiLCAwLCBcIkNnUG9pbnRcIik7XG4gICAgY29uc3Qgb3JpZ2luYWxQYXJjZWxzID0gZ2V0UHJvcCh4bWxPYmosIFwiTGFuZFhNTFwiLCBcIlBhcmNlbHNcIiwgMCwgXCJQYXJjZWxcIik7XG4gICAgY29uc3QgcG9pbnRzID0ge307XG4gICAgY29uc3QgcG9seWdvbnMgPSBbXTtcbiAgICAvLyBQYXJzZSBvdXQgdGhlIHBvaW50c1xuICAgIGZvciAobGV0IHB0IGluIG9yaWdpbmFsUG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IG9wdCA9IG9yaWdpbmFsUG9pbnRzW3B0XTtcbiAgICAgICAgY29uc3QgbmFtZSA9IG9wdC4kLm5hbWUucmVwbGFjZSgvIC9nLCAnJyk7XG4gICAgICAgIGxldCBjb29yZHMgPSBwYXJzZVNlcXVlbmNlKG9wdC5fKS5tYXAoY29vcmQgPT4gcGFyc2VGbG9hdChjb29yZCkpO1xuICAgICAgICBjb29yZHMgPSBbY29vcmRzWzFdLCBjb29yZHNbMF1dO1xuICAgICAgICBjb29yZHMgPSBwcm9qNChwcm9qZWN0aW9uLCAnV0dTODQnLCBjb29yZHMpO1xuICAgICAgICBwb2ludHNbbmFtZV0gPSBjb29yZHM7XG4gICAgfVxuICAgIC8vIFBhcnNlIG91dCB0aGUgcGFyY2Vsc1xuICAgIGZvciAobGV0IHBjIGluIG9yaWdpbmFsUGFyY2Vscykge1xuICAgICAgICB2YXIgb3BjID0gb3JpZ2luYWxQYXJjZWxzW3BjXTtcbiAgICAgICAgdmFyIGdlb20gPSBvcGMuQ29vcmRHZW9tO1xuICAgICAgICBpZiAoZ2VvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgY29vcmRzID0gW107XG4gICAgICAgICAgICAvLyBOZWVkIHRvIHN0b3JlIHRoZSBzdGFydCB0byBhZGQgYXQgdGhlIGVuZFxuICAgICAgICAgICAgdmFyIGVuZENvb3JkID0gbnVsbDtcbiAgICAgICAgICAgIHZhciBvcmlnQ29vcmRzID0gb3BjLkNvb3JkR2VvbVswXS5MaW5lO1xuICAgICAgICAgICAgZm9yIChsZXQgb2MgaW4gb3JpZ0Nvb3Jkcykge1xuICAgICAgICAgICAgICAgIC8vIFZFUlkgaW1wb3J0YW50IG5vdGUuIFRoaXMgY29kZSBkb2VzIE5PVCBoYW5kbGUgdGhlIG90aGVyIHR3byB0eXBlc1xuICAgICAgICAgICAgICAgIC8vIG9mIGNvb3JkaW5hdGUgZGVmaW5pdGlvbnMsIGN1cnZlcyBhbmQgaXJyZWd1bGFyIGxpbmVzLiBUT0RPOiBmaXhtZS5cbiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBvcmlnQ29vcmRzW29jXS5TdGFydFswXS4kLnBudFJlZjtcbiAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB1c2UgdGhlIGVuZCAoaXQgcHJvYmFibHkgc2hvdWxkIGJlIGNoZWNrZWQsIGJlY2F1c2UgaWYgdGhlIGVuZCBpc24ndCB0aGUgc3RhcnQpXG4gICAgICAgICAgICAgICAgdmFyIGVuZCA9IG9yaWdDb29yZHNbb2NdLkVuZFswXS4kLnBudFJlZjtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb2ludCA9IHBvaW50c1tzdGFydF07XG4gICAgICAgICAgICAgICAgaWYgKCFzdGFydFBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gZ2V0IHN0YXJ0IHBvaW50Jywgc3RhcnQsIHN0YXJ0UG9pbnQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBjcmVhdGluZyB0aGUgcG9seWdvblxuICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChwb2ludHNbc3RhcnRdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmRDb29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGZpcnN0IGNvb3JkLCB0byBwdXQgYmFjayBvbiB0byBjbG9zZSB0aGUgcG9seWdvblxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ29vcmQgPSBwb2ludHNbc3RhcnRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvb3Jkcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgY29vcmRzLnB1c2goZW5kQ29vcmQpO1xuICAgICAgICAgICAgICAgIGNvb3JkcyA9IFtjb29yZHNdO1xuICAgICAgICAgICAgICAgIC8vIG5hbWU9XCIxMDFcIiBjbGFzcz1cIkxvdFwiIHN0YXRlPVwicHJvcG9zZWRcIiAgcGFyY2VsVHlwZT1cIlNpbmdsZVwiXG4gICAgICAgICAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG9wYy4kLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxhbmR4bWxDbGFzczogb3BjLiQuY2xhc3MsXG4gICAgICAgICAgICAgICAgICAgIGxhbmR4bWxTdGF0ZTogb3BjLiQuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGxhbmR4bWxQYXJjZWxUeXBlOiBvcGMuJC5wYXJjZWxUeXBlLFxuICAgICAgICAgICAgICAgICAgICBsYW5keG1sVHlwZTogTEFORFhNTF9QQVJDRUwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwb2x5Z29ucy5wdXNoKHBvbHlnb24oY29vcmRzLCBwYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkNvdWxkbid0IGNyZWF0ZSBhIHBvbHlnb24gYmVjYXVzZSB3ZSBmb3VuZCBsZXNzIHRoYW4gMiBjb29yZHNcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiTm8gZ2VvbWV0cnlcIilcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcG9seWdvbnM7XG59XG4iLCJpbXBvcnQgeyBnZXRQcm9wLCBwYXJzZVNlcXVlbmNlLCBnZXRDb2xvciB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBwb2x5Z29uIH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgdW5pb24gZnJvbSAnQHR1cmYvdW5pb24nO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmV4cG9ydCBjb25zdCBMQU5EWE1MX1NVUkZBQ0UgPSAnc3VyZmFjZSc7XG5leHBvcnQgZnVuY3Rpb24gY29udmVydFN1cmZhY2VzKHhtbE9iaiwgcHJvamVjdGlvbiwgb3B0cykge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gW107XG4gICAgY29uc3Qgc3VyZmFjZXNDb250YWluZXJOb2RlcyA9IGdldFByb3AoeG1sT2JqLCBcIkxhbmRYTUxcIiwgXCJTdXJmYWNlc1wiKTtcbiAgICBpZiAoIXN1cmZhY2VzQ29udGFpbmVyTm9kZXMpXG4gICAgICAgIHJldHVybiBmZWF0dXJlcztcbiAgICBzdXJmYWNlc0NvbnRhaW5lck5vZGVzLmZvckVhY2goc2MgPT4ge1xuICAgICAgICBjb25zdCBhdHRycyA9IChzYy4kIHx8IHt9KTtcbiAgICAgICAgY29uc3QgYmFzZVByb3BzID0ge1xuICAgICAgICAgICAgbmFtZTogYXR0cnMubmFtZSB8fCBcIlwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGF0dHJzLmRlc2MsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN1cmZhY2VOb2RlcyA9IGdldFByb3Aoc2MsIFwiU3VyZmFjZVwiKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHN1cmZhY2VOb2RlcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN1cmZhY2VOb2Rlcy5mb3JFYWNoKHMgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGJhc2VQcm9wcy5uYW1lID8gKGJhc2VQcm9wcy5uYW1lICsgJyAtICcgKyBzLiQubmFtZSkgOiBzLiQubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYmFzZVByb3BzLmRlc2NyaXB0aW9uID8gKGJhc2VQcm9wcy5kZXNjcmlwdGlvbiArICcgLSAnICsgcy4kLmRlc2MpIDogcy4kLmRlc2M7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlUHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgbGFuZHhtbFR5cGU6IExBTkRYTUxfU1VSRkFDRSxcbiAgICAgICAgICAgICAgICBcInN0cm9rZS13aWR0aFwiOiAwLFxuICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgICAgICAgICAgIFwiZmlsbFwiOiBnZXRDb2xvcihgc3VyZmFjZS0ke25hbWV9YCwgb3B0cy5jb2xvck9wdHMpLFxuICAgICAgICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCI6IDAuMyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsZXQgc3VyZmFjZUZlYXR1cmVzID0gY29udmVydEJvdW5kYXJpZXMocywgcHJvamVjdGlvbiwgZmVhdHVyZVByb3BzLCBvcHRzKTtcbiAgICAgICAgICAgIGlmIChzdXJmYWNlRmVhdHVyZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgZmVhdHVyZXMucHVzaCguLi5zdXJmYWNlRmVhdHVyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3VyZmFjZUZlYXR1cmVzID0gY29udmVydEZhY2VzKHMsIHByb2plY3Rpb24sIGZlYXR1cmVQcm9wcywgb3B0cyk7XG4gICAgICAgICAgICAgICAgbGV0IG1lcmdlZCA9IHN1cmZhY2VGZWF0dXJlc1swXTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQXBwbHlpbmcgdW5pb24gdG8gJXMgZmFjZXMgKCVkIGZhY2VzIHRvIG1lcmdlKVwiLCBtZXJnZWQucHJvcGVydGllcy5uYW1lLCBzdXJmYWNlRmVhdHVyZXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHN1cmZhY2VGZWF0dXJlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHN1cmZhY2VGZWF0dXJlc1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZCA9IHVuaW9uKG1lcmdlZCwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIi0tPiBDb3VsZCBub3QgYXBwbHkgdW5pb24gdG8gJXMgKCMlZClcIiwgbmV4dC5wcm9wZXJ0aWVzLm5hbWUsIGkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1lcmdlZC5wcm9wZXJ0aWVzID0gZmVhdHVyZVByb3BzO1xuICAgICAgICAgICAgICAgIGZlYXR1cmVzLnB1c2gobWVyZ2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZlYXR1cmVzO1xufVxuZnVuY3Rpb24gY29udmVydEZhY2VzKHN1cmZhY2UsIHByb2plY3Rpb24sIGZlYXR1cmVQcm9wcywgb3B0cykge1xuICAgIGNvbnN0IHBvaW50Tm9kZXMgPSBnZXRQcm9wKHN1cmZhY2UsIFwiRGVmaW5pdGlvblwiLCAwLCBcIlBudHNcIiwgMCwgXCJQXCIpO1xuICAgIGNvbnN0IGZhY2VOb2RlcyA9IGdldFByb3Aoc3VyZmFjZSwgXCJEZWZpbml0aW9uXCIsIDAsIFwiRmFjZXNcIiwgMCwgXCJGXCIpO1xuICAgIGNvbnN0IHBvaW50cyA9IHt9O1xuICAgIHBvaW50Tm9kZXMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgbGV0IHBvaW50Q29vcmRzID0gcGFyc2VTZXF1ZW5jZShwLl8pLm1hcCh2ID0+IHBhcnNlRmxvYXQodikpO1xuICAgICAgICBwb2ludENvb3JkcyA9IFtwb2ludENvb3Jkc1sxXSwgcG9pbnRDb29yZHNbMF1dO1xuICAgICAgICBwb2ludENvb3JkcyA9IHByb2o0KHByb2plY3Rpb24sICdXR1M4NCcsIHBvaW50Q29vcmRzKTtcbiAgICAgICAgY29uc3QgcG9pbnRJZCA9IHAuJC5pZDtcbiAgICAgICAgcG9pbnRzW3BvaW50SWRdID0geyBuYW1lOiBwLiQubmFtZSwgY29vcmRzOiBwb2ludENvb3JkcyB9O1xuICAgIH0pO1xuICAgIGNvbnN0IGZhY2VzID0gW107XG4gICAgZmFjZU5vZGVzLmZvckVhY2goZiA9PiB7XG4gICAgICAgIGNvbnN0IHBvaW50SWRzID0gcGFyc2VTZXF1ZW5jZShmKTtcbiAgICAgICAgY29uc3QgY29vcmRzID0gW107XG4gICAgICAgIHBvaW50SWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcCA9IHBvaW50c1tpZF07XG4gICAgICAgICAgICBjb29yZHMucHVzaChwLmNvb3Jkcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb29yZHMucHVzaChwb2ludHNbcG9pbnRJZHNbMF1dLmNvb3Jkcyk7XG4gICAgICAgIGZhY2VzLnB1c2gocG9seWdvbihbY29vcmRzXSwgZmVhdHVyZVByb3BzKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFsuLi5mYWNlc107XG59XG5mdW5jdGlvbiBjb252ZXJ0Qm91bmRhcmllcyhzdXJmYWNlLCBwcm9qZWN0aW9uLCBmZWF0dXJlUHJvcHMsIG9wdHMpIHtcbiAgICBjb25zdCBib3VuZGFyeU5vZGVzID0gZ2V0UHJvcChzdXJmYWNlLCBcIlNvdXJjZURhdGFcIiwgMCwgXCJCb3VuZGFyaWVzXCIsIDAsIFwiQm91bmRhcnlcIik7XG4gICAgaWYgKCFib3VuZGFyeU5vZGVzKVxuICAgICAgICByZXR1cm4gW107XG4gICAgY29uc3QgcG9seWdvbnMgPSBbXTtcbiAgICBib3VuZGFyeU5vZGVzLmZvckVhY2goYm91bmRhcnkgPT4ge1xuICAgICAgICBjb25zdCBwbnRMaXN0M0ROb2RlID0gZ2V0UHJvcChib3VuZGFyeSwgJ1BudExpc3QzRCcsIDApO1xuICAgICAgICBjb25zdCBzZXEgPSBwYXJzZVNlcXVlbmNlKHBudExpc3QzRE5vZGUpLm1hcChwID0+IHBhcnNlRmxvYXQocCkpO1xuICAgICAgICBjb25zdCBjb29yZHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXEubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgIGxldCBjID0gW3NlcVtpICsgMV0sIHNlcVtpXV07XG4gICAgICAgICAgICBjID0gcHJvajQocHJvamVjdGlvbiwgJ1dHUzg0JywgYyk7XG4gICAgICAgICAgICBjb29yZHMucHVzaChjKTtcbiAgICAgICAgfVxuICAgICAgICBjb29yZHMucHVzaChjb29yZHNbMF0pO1xuICAgICAgICBwb2x5Z29ucy5wdXNoKHBvbHlnb24oW2Nvb3Jkc10sIGZlYXR1cmVQcm9wcykpO1xuICAgIH0pO1xuICAgIHJldHVybiBwb2x5Z29ucztcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDYwMDcpO1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oNDIzNyk7XG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUucGF0aHMgPSBbXTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiXSwic291cmNlUm9vdCI6IiJ9