@touchtech/baselayer-ui 2.21.35 → 2.21.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { ChangeEvent } from "react";
|
|
2
2
|
import { Size } from "../../types";
|
|
3
3
|
export declare type FileInputSize = Size;
|
|
4
4
|
declare type Props = {
|
|
5
|
-
onChange: () => void;
|
|
5
|
+
onChange: (e: ChangeEvent<HTMLInputElement>) => void;
|
|
6
6
|
children: React.ReactNode;
|
|
7
7
|
accept?: string;
|
|
8
8
|
multiple?: boolean;
|
package/dist/index.js
CHANGED
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
* Licensed under the MIT license.
|
|
10
10
|
*/
|
|
11
11
|
var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function a(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function o(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function u(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var i={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},l={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},d={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},f={16:!1,18:!1,17:!1,91:!1},c={},s=1;s<20;s++)i["f".concat(s)]=111+s;var v=[],_="all",p=[],m=function(e){return i[e.toLowerCase()]||l[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function h(e){_=e||"all"}function y(){return _||"all"}var b=function(e){var t=e.key,n=e.scope,r=e.method,a=e.splitKey,i=void 0===a?"+":a;u(t).forEach((function(e){var t=e.split(i),a=t.length,u=t[a-1],d="*"===u?"*":m(u);if(c[d]){n||(n=y());var f=a>1?o(l,t):[];c[d]=c[d].map((function(e){return(!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,a=!0,o=0;o<n.length;o++)-1===r.indexOf(n[o])&&(a=!1);return a}(e.mods,f)?{}:e}))}}))};function g(e,t,n){var r;if(t.scope===n||"all"===t.scope){for(var a in r=t.mods.length>0,f)Object.prototype.hasOwnProperty.call(f,a)&&(!f[a]&&t.mods.indexOf(+a)>-1||f[a]&&-1===t.mods.indexOf(+a))&&(r=!1);(0!==t.mods.length||f[16]||f[18]||f[17]||f[91])&&!r&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function O(e){var t=c["*"],n=e.keyCode||e.which||e.charCode;if(P.filter.call(this,e)){if(93!==n&&224!==n||(n=91),-1===v.indexOf(n)&&229!==n&&v.push(n),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=d[t];e[t]&&-1===v.indexOf(n)?v.push(n):!e[t]&&v.indexOf(n)>-1?v.splice(v.indexOf(n),1):"metaKey"===t&&e[t]&&3===v.length&&(e.ctrlKey||e.shiftKey||e.altKey||(v=v.slice(v.indexOf(n))))})),n in f){for(var r in f[n]=!0,l)l[r]===n&&(P[r]=!0);if(!t)return}for(var a in f)Object.prototype.hasOwnProperty.call(f,a)&&(f[a]=e[d[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===v.indexOf(17)&&v.push(17),-1===v.indexOf(18)&&v.push(18),f[17]=!0,f[18]=!0);var o=y();if(t)for(var u=0;u<t.length;u++)t[u].scope===o&&("keydown"===e.type&&t[u].keydown||"keyup"===e.type&&t[u].keyup)&&g(e,t[u],o);if(n in c)for(var i=0;i<c[n].length;i++)if(("keydown"===e.type&&c[n][i].keydown||"keyup"===e.type&&c[n][i].keyup)&&c[n][i].key){for(var s=c[n][i],_=s.splitKey,p=s.key.split(_),h=[],b=0;b<p.length;b++)h.push(m(p[b]));h.sort().join("")===v.sort().join("")&&g(e,s,o)}}}function P(e,t,n){v=[];var r=u(e),i=[],d="all",s=document,_=0,h=!1,y=!0,b="+";for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(d=t.scope),t.element&&(s=t.element),t.keyup&&(h=t.keyup),void 0!==t.keydown&&(y=t.keydown),"string"==typeof t.splitKey&&(b=t.splitKey)),"string"==typeof t&&(d=t);_<r.length;_++)i=[],(e=r[_].split(b)).length>1&&(i=o(l,e)),(e="*"===(e=e[e.length-1])?"*":m(e))in c||(c[e]=[]),c[e].push({keyup:h,keydown:y,scope:d,mods:i,shortcut:r[_],method:n,key:r[_],splitKey:b});void 0!==s&&!function(e){return p.indexOf(e)>-1}(s)&&window&&(p.push(s),a(s,"keydown",(function(e){O(e)})),a(window,"focus",(function(){v=[]})),a(s,"keyup",(function(e){O(e),function(e){var t=e.keyCode||e.which||e.charCode,n=v.indexOf(t);if(n>=0&&v.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&v.splice(0,v.length),93!==t&&224!==t||(t=91),t in f)for(var r in f[t]=!1,l)l[r]===t&&(P[r]=!1)}(e)})))}var j={setScope:h,getScope:y,deleteScope:function(e,t){var n,r;for(var a in e||(e=y()),c)if(Object.prototype.hasOwnProperty.call(c,a))for(n=c[a],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;y()===e&&h(t||"all")},getPressedKeyCodes:function(){return v.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=m(e)),-1!==v.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},unbind:function(e){if(e){if(Array.isArray(e))e.forEach((function(e){e.key&&b(e)}));else if("object"==typeof e)e.key&&b(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var a=n[0],o=n[1];"function"==typeof a&&(o=a,a=""),b({key:e,scope:a,method:o,splitKey:"+"})}}else Object.keys(c).forEach((function(e){return delete c[e]}))}};for(var M in j)Object.prototype.hasOwnProperty.call(j,M)&&(P[M]=j[M]);if("undefined"!=typeof window){var w=window.hotkeys;P.noConflict=function(e){return e&&window.hotkeys===P&&(window.hotkeys=w),P},window.hotkeys=P}var E=P,k=n(0);function C(){return E.isPressed}E.filter=function(){return!0};var x=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))};function S(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var a=n||{},o=a.enableOnTags,u=a.filter,i=a.keyup,l=a.keydown,d=a.filterPreventDefault,f=void 0===d||d,c=a.enabled,s=void 0===c||c,v=a.enableOnContentEditable,_=void 0!==v&&v,p=Object(k.useRef)(null),m=Object(k.useCallback)((function(e,n){var r;return u&&!u(e)?!f:!!(x(e,["INPUT","TEXTAREA","SELECT"])&&!x(e,o)||null!=(r=e.target)&&r.isContentEditable&&!_)||(null===p.current||document.activeElement===p.current)&&(t(e,n),!0)}),r?[p,o,u].concat(r):[p,o,u]);return Object(k.useEffect)((function(){if(s)return i&&!0!==l&&(n.keydown=!1),E(e,n||{},m),function(){return E.unbind(e,m)}}),[m,e,s]),p}var N=E.isPressed}]));
|
|
12
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/OWE0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/MzJhYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLm1vZHVsZS5jc3M/Y2Q0NiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzPzA4NDEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC5tb2R1bGUuY3NzPzFmMTEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gubW9kdWxlLmNzcz80ZWViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gubW9kdWxlLmNzcz8yM2ViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ZTE4OCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLm1vZHVsZS5jc3M/MGVkZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzPzI3YjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQubW9kdWxlLmNzcz8xMjk5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzcz83YWJmIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9JY29uLm1vZHVsZS5jc3M/OWI5MyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/ZDI4ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz9jYzM3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzPzk1YTciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/NDY0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8zNzA5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/OTZkMiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLm1vZHVsZS5jc3M/NTA0OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz8wNDI3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8yMWM1Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9va3MvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9va3MvdXNlT3V0c2lkZUNsaWNrLnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ob3RrZXlzLWpzL2Rpc3QvaG90a2V5cy5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdGtleXMtaG9vay9kaXN0L3JlYWN0LWhvdGtleXMtaG9vay5lc20uanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJyZXF1aXJlIiwiaXNBcnJheSIsIkFycmF5IiwiY2MiLCJvYmoiLCJvdXQiLCJ0bXAiLCJrIiwibGVuZ3RoIiwiZGVmYXVsdCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiYnV0dG9uQmFkZ2UiLCJvbkNsaWNrIiwiY29udGFpbmVyUmVmIiwiZGlzYWJsZWQiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoSG9yaXpvbnRhbGx5Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsImFsaWduIiwic2l6ZSIsInR5cGUiLCJyZWYiLCJjb250YWluZXIiLCJsZWZ0T2Zmc2V0IiwiaW5jbHVkZXMiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiQ29tcG9uZW50IiwicHJvcHMiLCJsYWJlbCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwiZSIsInRhcmdldCIsIkxhYmVsIiwiaW5wdXRSZWYiLCJpbnB1dCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImRpcmVjdGlvbiIsImNvbG9yUGlja2VyIiwibWFwIiwiY29sb3IiLCJDb2xvclN3YXRjaCIsImlzU2VsZWN0ZWQiLCJjb2xvclN3YXRjaCIsInNlbGVjdGVkIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwiYnV0dG9uIiwidXNlSG90a2V5cyIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm92ZXJsYXkiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpZCIsImxheW91dCIsInBsYWNlbWVudCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwic3JjIiwiYWx0IiwiaWNvbiIsImNyb3NzT3JpZ2luIiwiYmFkZ2VDb250ZW50IiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0IiwiSWNvbiIsIkJ1dHRvbkJhZGdlIiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsIndpZHRoIiwiaGVpZ2h0IiwiaGFzT3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsImxpc3QiLCJhY3RpdmUiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b24iLCJCdXR0b25MaW5rIiwiYXMiLCJmb290ZXIiLCJtZW51Iiwib3BlbiIsInNjcm9sbENvbnRhaW5lciIsImZvcndhcmRSZWYiLCJtZW51Q29udGFpbmVyIiwiaXNBY3RpdmUiLCJtZW51SXRlbSIsIm1lbnVMaW5rSXRlbSIsImlzRml4ZWQiLCJvbkJsdXIiLCJvbktleURvd24iLCJpbnB1dEVsZW1lbnQiLCJ0ZXh0SW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwicG9zdGVyIiwibXV0ZWQiLCJsb29wIiwiYXV0b1BsYXkiLCJ2aWRlbyIsInBsYXlzSW5saW5lIiwiaW5pdGlhbFZhbHVlIiwidXNlU3RhdGUiLCJzZXRWYWx1ZSIsIm5ld1ZhbHVlIiwicHJldlZhbHVlIiwiY2FsbGJhY2siLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJoYW5kbGVDbGljayIsImV2ZW50IiwiY3VycmVudCIsImNvbnRhaW5zIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImlzZmYiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImluZGV4T2YiLCJhZGRFdmVudCIsIm1ldGhvZCIsImF0dGFjaEV2ZW50IiwiY29uY2F0Iiwid2luZG93IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsInNsaWNlIiwiZ2V0S2V5cyIsImtleXMiLCJyZXBsYWNlIiwic3BsaXQiLCJpbmRleCIsImxhc3RJbmRleE9mIiwic3BsaWNlIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsImxlZnQiLCJ1cCIsInJpZ2h0IiwiZG93biIsImRlbCIsImRlbGV0ZSIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiJyIsIl9tb2RpZmllciIsInNoaWZ0Iiwib3B0aW9uIiwiY3RybCIsImNvbnRyb2wiLCJjbWQiLCJjb21tYW5kIiwibW9kaWZpZXJNYXAiLCIxNiIsIjE4IiwiMTciLCI5MSIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwieCIsInRvVXBwZXJDYXNlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmIiwiX3JlZiRzcGxpdEtleSIsInNwbGl0S2V5IiwiZm9yRWFjaCIsIm9yaWdpbktleSIsInVuYmluZEtleXMiLCJsZW4iLCJsYXN0S2V5Iiwia2V5Q29kZSIsInJlY29yZCIsImExIiwiYTIiLCJhcnIxIiwiYXJyMiIsImlzSW5kZXgiLCJjb21wYXJlQXJyYXkiLCJldmVudEhhbmRsZXIiLCJoYW5kbGVyIiwibW9kaWZpZXJzTWF0Y2giLCJ5Iiwic2hvcnRjdXQiLCJwcmV2ZW50RGVmYXVsdCIsInJldHVyblZhbHVlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2FuY2VsQnViYmxlIiwiZGlzcGF0Y2giLCJhc3RlcmlzayIsIndoaWNoIiwiY2hhckNvZGUiLCJob3RrZXlzIiwiZmlsdGVyIiwidGhpcyIsInB1c2giLCJrZXlOYW1lIiwia2V5TnVtIiwiZ2V0TW9kaWZpZXJTdGF0ZSIsImtleWRvd24iLCJrZXl1cCIsIl9pIiwia2V5U2hvcnRjdXQiLCJfZG93bktleXNDdXJyZW50IiwiYSIsInNvcnQiLCJqb2luIiwiZWxlbWVudCIsInVuZGVmaW5lZCIsInRvU3RyaW5nIiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInVuYmluZCIsImtleXNJbmZvIiwiaW5mbyIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiQm9vbGVhbiIsIm9wdGlvbnMiLCJkZXBzIiwiX3JlZjIiLCJfcmVmMiRmaWx0ZXJQcmV2ZW50RGUiLCJmaWx0ZXJQcmV2ZW50RGVmYXVsdCIsIl9yZWYyJGVuYWJsZWQiLCJlbmFibGVkIiwiX3JlZjIkZW5hYmxlT25Db250ZW50IiwiZW5hYmxlT25Db250ZW50RWRpdGFibGUiLCJtZW1vaXNlZENhbGxiYWNrIiwia2V5Ym9hcmRFdmVudCIsImhvdGtleXNFdmVudCIsIl9rZXlib2FyZEV2ZW50JHRhcmdldCIsImFjdGl2ZUVsZW1lbnQiLCJpc0hvdGtleVByZXNzZWQiXSwibWFwcGluZ3MiOiI2REFDRSxJQUFJQSxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVQyxRQUduQyxJQUFJQyxFQUFTSixFQUFpQkUsR0FBWSxDQUN6Q0csRUFBR0gsRUFDSEksR0FBRyxFQUNISCxRQUFTLElBVVYsT0FOQUksRUFBUUwsR0FBVU0sS0FBS0osRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU0YsR0FHL0RHLEVBQU9FLEdBQUksRUFHSkYsRUFBT0QsUUEwRGYsT0FyREFGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxF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SCxFQUFNSSxRQUN0QkEsT0FBNEIsSUFBbEJELEdBQWtDQSxFQUM1Q0UsRUFBd0JMLEVBQU1NLHdCQUM5QkEsT0FBb0QsSUFBMUJELEdBQTJDQSxFQUVyRTlTLEVBQU0saUJBQU8sTUFFYmdULEVBQW1CLHVCQUFZLFNBQVVDLEVBQWVDLEdBQzFELElBQUlDLEVBRUosT0FBSXpELElBQVdBLEVBQU91RCxJQUNaTixLQTNCTFIsRUErQitCYyxFQS9CakIsQ0FBQyxRQUFTLFdBQVksYUErQmNkLEVBQVVjLEVBQWViLElBQW1FLE9BQWpEZSxFQUF3QkYsRUFBY2hTLFNBQW1Ca1MsRUFBc0I3QixvQkFBc0J5QixLQUluTCxPQUFoQi9TLEVBQUk4SCxTQUFvQkUsU0FBU29MLGdCQUFrQnBULEVBQUk4SCxXQUN6REwsRUFBU3dMLEVBQWVDLElBQ2pCLEtBSVJWLEVBQU8sQ0FBQ3hTLEVBQUtvUyxFQUFjMUMsR0FBUS9HLE9BQU82SixHQUFRLENBQUN4UyxFQUFLb1MsRUFBYzFDLElBZ0J6RSxPQWZBLHFCQUFVLFdBQ1IsR0FBS21ELEVBVUwsT0FMSTVDLElBQXFCLElBQVpELElBQ1h1QyxFQUFRdkMsU0FBVSxHQUdwQixFQUFROUcsRUFBTXFKLEdBQVcsR0FBSVMsR0FDdEIsV0FDTCxPQUFPLEVBQVF4QixPQUFPdEksRUFBTThKLE1BRTdCLENBQUNBLEVBQWtCOUosRUFBTTJKLElBQ3JCN1MsRUFHVCxJQUFJcVQsRUFBa0IsRUFBUW5DIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEwKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsInZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYyhvYmopIHtcbiAgdmFyIG91dCA9IFwiXCJcblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiKSByZXR1cm4gb2JqIHx8IFwiXCJcblxuICBpZiAoaXNBcnJheShvYmopKVxuICAgIGZvciAodmFyIGsgPSAwLCB0bXA7IGsgPCBvYmoubGVuZ3RoOyBrKyspIHtcbiAgICAgIGlmICgodG1wID0gY2Mob2JqW2tdKSkgIT09IFwiXCIpIHtcbiAgICAgICAgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsgdG1wXG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykgJiYgb2JqW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi9CdXR0b25CYWRnZVwiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIExhYmVsIH0gZnJvbSBcIi4vTGFiZWxcIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uIH0gZnJvbSBcIi4vSWNvblwiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvblwiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9CdXR0b25MaW5rXCI7XHJcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi9Db2xvclN3YXRjaFwiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJsaXN0Vmlld0l0ZW1cIjpcIl8xZmoyYW5pZVEwSkt4Q0Faa1NhYXBrXCJ9OyIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25cIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25MaW5rXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclBpY2tlclwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbG9yU3dhdGNoXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GaWxlSW5wdXRcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25cIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uTGlua1wiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGlzdFZpZXdcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9NZW51XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9PdmVybGF5XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0SW5wdXRcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub2FzdFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1ZpZGVvXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2hvb2tzXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25CYWRnZS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIEJ1dHRvbkJhZGdlUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBCdXR0b25CYWRnZSh7IGNoaWxkcmVuLCBjbGFzc05hbWUgfTogQnV0dG9uQmFkZ2VQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5idXR0b25CYWRnZSwgY2xhc3NOYW1lXSl9PntjaGlsZHJlbn08L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYWRnZTtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJidXR0b25CYWRnZVwiOlwiXzFVbFlGRUdjM2RNZ3RvTmlsNlNPeDVcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgQnV0dG9uUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xyXG4gIHJvdW5kZWQ/OiBib29sZWFuO1xyXG4gIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcclxuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XHJcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xyXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XHJcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcclxuICBzaXplPzogU2l6ZTtcclxuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XHJcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XHJcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcImxlZnRcIiB8IFwicmlnaHRcIj47XHJcbn07XHJcblxyXG5mdW5jdGlvbiBCdXR0b24oe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNsYXNzTmFtZSxcclxuICBvbkNsaWNrLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbiAgcm91bmRlZCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcclxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxyXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxyXG4gIG9mZnNldFNpZGVzID0gW10sXHJcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIHR5cGUsXHJcbn06IEJ1dHRvblByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxidXR0b25cclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcclxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxyXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcclxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcclxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgXSl9XHJcbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XHJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICAgIHR5cGU9e3R5cGV9XHJcbiAgICAgIHJvbGU9XCJidXR0b25cIlxyXG4gICAgPlxyXG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXHJcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXHJcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgKSA6IChcclxuICAgICAgICBjaGlsZHJlblxyXG4gICAgICApfVxyXG4gICAgPC9idXR0b24+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzEydzVXT0YzS3NhMkpCNS1ZT1h5RDdcIixcImxlZnRcIjpcIl8yVEZWNzJEclF4NUpHU2hOY3V0NEUtXCIsXCJzbWFsbFwiOlwidVRCcmNqcEhwOTZSQ3dGNVVEemYwXCIsXCJsYXJnZVwiOlwiXzE0U1NmczVTVldLN054dVpCcU1nekJcIixcInhsYXJnZVwiOlwiXzFTUXUyUVd3MmE3ZXc0N1dXMTJaU2dcIixcImludmVydGVkXCI6XCJfMmhaaGhpOEJnRV9la1FWbjllWDlEWFwiLFwicm91bmRlZFwiOlwiVkJET1NjWWNRblUyZXl0a0FfUGM2XCIsXCJyaWdodE9mZnNldFwiOlwiXzJHVFkzWG1hT3U5MjNNOXNFUnM2YWtcIixcImxlZnRPZmZzZXRcIjpcIl8xNVEwR0drZ1lKX2FMbTAxbkdFNVloXCIsXCJub1NoYWRvd1wiOlwiUmV3bURxanA2blVlRVlIRUt6VEpEXCIsXCJub0JvcmRlclwiOlwiblpxSVVQVDhjWjg3Qlc0cjhreFVcIixcInRyYW5zcGFyZW50XCI6XCJfNjY5bFI0eTJBSDk3QTFseTVNWVdPXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJfM2ljdXRYSHd6SWlvd3Q3YlZhM1lpYlwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl8ya0NreFBrcGxQMXhxamZrZXBveU5wXCIsXCJub1BhZGRpbmdcIjpcIl8za05iQ2djSS1SX0ZGUS0zTzZUMGxhXCIsXCJjb250ZW50XCI6XCJfMmJGMUFTY0V4c2t1T3B1emQtY0RfNlwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgT2Zmc2V0U2lkZSA9IFwibGVmdFwiIHwgXCJyaWdodFwiO1xyXG5cclxudHlwZSBCdXR0b25MaW5rUHJvcHMgPVxyXG4gIHwge1xyXG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xyXG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XHJcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcclxuICAgICAgcm91bmRlZD86IGJvb2xlYW47XHJcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xyXG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XHJcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xyXG4gICAgICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XHJcbiAgICAgIHNpemU/OiBTaXplO1xyXG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xyXG4gICAgICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcclxuICAgIH1cclxuICB8IGFueTtcclxuXHJcbmZ1bmN0aW9uIEJ1dHRvbkxpbmsoe1xyXG4gIGFzOiBDb21wb25lbnQsXHJcbiAgY2hpbGRyZW4sXHJcbiAgY2xhc3NOYW1lLFxyXG4gIHNpemUsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbiAgcm91bmRlZCA9IGZhbHNlLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgbm9TaGFkb3cgPSBmYWxzZSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICBub0JvcmRlciA9IGZhbHNlLFxyXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcclxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxyXG4gIG9mZnNldFNpZGVzID0gW10sXHJcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxyXG4gIC4uLnByb3BzXHJcbn06IEJ1dHRvbkxpbmtQcm9wcykge1xyXG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICBDb21wb25lbnQgPSBcImFcIjtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8Q29tcG9uZW50XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1saW5rXCJcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXHJcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxyXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICBdKX1cclxuICAgICAgey4uLnByb3BzfVxyXG4gICAgPlxyXG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXHJcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXHJcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgKSA6IChcclxuICAgICAgICBjaGlsZHJlblxyXG4gICAgICApfVxyXG4gICAgPC9Db21wb25lbnQ+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uTGluaztcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8yUXU5UmFHNTVwV3lKYVRfXzNfb0ZBXCIsXCJsZWZ0XCI6XCJfM254M2dOUHpqNkxUXzFod25RSHhPSlwiLFwic21hbGxcIjpcIl8yTHZfNnh4MkdsMzM1S1Q5SW9vajNnXCIsXCJtZWRpdW1cIjpcIl8zSHg4cGhhejN6THFOc2VBcE5JV1pIXCIsXCJsYXJnZVwiOlwiXzItT0VZRm9JdmxzNE4yQ1J1WS1lSnJcIixcInhsYXJnZVwiOlwiXzZ4RllBUEFQd0FXbGhtMGdkdG9aUlwiLFwiaW52ZXJ0ZWRcIjpcIl8ycEVHaUszS3VQbkV2d2lPQ0RnRkRhXCIsXCJyb3VuZGVkXCI6XCJfMXp5VktzbW96UFJ0TEhEdF9qNjE0TlwiLFwicmlnaHRPZmZzZXRcIjpcIl8xcll2dHFuWnlJNFJydWxDN0tHY291XCIsXCJsZWZ0T2Zmc2V0XCI6XCJfM1RyN2VPNEVzMUJvdGgyS19zaVRBTlwiLFwibm9TaGFkb3dcIjpcIl8yd1ozR0lJM29OZDhJWDdhZ2EtYU11XCIsXCJ0cmFuc3BhcmVudFwiOlwiXzFUS2dwU1lsX0EwSVNrQmNUMWpseTdcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIl8zcDJUWTRub2RWaXU5angtTHpHQ05lXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiXzNnRXdrUnByblNfSVJFdTNLdE56TURcIixcIm5vUGFkZGluZ1wiOlwiXzJKcEtKcnVtQVRjVFRSVDd4aWZmOWlcIixcIm5vQm9yZGVyXCI6XCJfMVAzUDI3NHdvdTZsRUE4N2c2ckZWMlwiLFwiY29udGVudFwiOlwic05EcnEzY1g2STZRLU91dXN6N1RpXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9DaGVja2JveFwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9DaGVja2JveC5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBvbkNoYW5nZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gIGNoZWNrZWQ/OiBib29sZWFuO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBuYW1lPzogc3RyaW5nO1xyXG4gIHNpemU/OiBTaXplO1xyXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XHJcbiAgaW5kZXRlcm1pbmF0ZT86IGJvb2xlYW47XHJcbn07XHJcblxyXG5mdW5jdGlvbiBDaGVja2JveCh7XHJcbiAgbGFiZWwsXHJcbiAgb25DaGFuZ2UsXHJcbiAgcGxhY2Vob2xkZXIsXHJcbiAgY2hlY2tlZCxcclxuICBkaXNhYmxlZCxcclxuICBuYW1lLFxyXG4gIGluZGV0ZXJtaW5hdGUsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXHJcbn06IENoZWNrYm94UHJvcHMpIHtcclxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcclxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XHJcbiAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKSxcclxuICAgIFtvbkNoYW5nZV1cclxuICApO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPExhYmVsIHZhbHVlPXtsYWJlbH0+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiY2hlY2tib3hcIlxyXG4gICAgICAgIHJlZj17KGlucHV0UmVmKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW5wdXRSZWYpIHtcclxuICAgICAgICAgICAgaW5wdXRSZWYuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfX1cclxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxyXG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW5wdXQsIHN0eWxlc1tzaXplXV0pfVxyXG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxyXG4gICAgICAgIG5hbWU9e25hbWV9XHJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cclxuICAgICAgLz5cclxuICAgIDwvTGFiZWw+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTGFiZWxJbnB1dFByb3BzID0ge1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTExhYmVsRWxlbWVudD47XHJcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGxhYmVsXHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX1cclxuICAgID5cclxuICAgICAge3ZhbHVlfVxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2xhYmVsPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzE1RGJzX1g1SVQ5dGttQXNNWFBOVkpcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpbnB1dFwiOlwiXzFwMmhtam1NMXFOWlRaSWlGSEZJeHVcIixcInNtYWxsXCI6XCJfMUppX185VS1ENVVkVzJOSldXVVByQ1wiLFwibWVkaXVtXCI6XCJfM0tKUzJGUlMydGQ5MFFyNnIzM0wyOFwiLFwibGFyZ2VcIjpcIl8xajdvZENFRVgyRGtnZ3BJWnVGNE1JXCIsXCJ4bGFyZ2VcIjpcIl8zS1p3aFVteEJKZWIyeHRrODhnYUdXXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JQaWNrZXIgfSBmcm9tIFwiLi9Db2xvclBpY2tlclwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IENvbG9yU3dhdGNoIH0gZnJvbSBcIi4uL0NvbG9yU3dhdGNoXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5cclxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xyXG4gIGNvbG9yczogQ29sb3JbXTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xyXG4gIG9uU2VsZWN0OiAoY29sb3I6IENvbG9yKSA9PiB2b2lkO1xyXG4gIHNlbGVjdGVkQ29sb3I/OiBDb2xvcjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIENvbG9yUGlja2VyKHtcclxuICBjb2xvcnMsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIG9uU2VsZWN0LFxyXG4gIHNlbGVjdGVkQ29sb3IsXHJcbiAgZGlyZWN0aW9uID0gXCJ2ZXJ0aWNhbFwiLFxyXG59OiBDb2xvclBpY2tlclByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb2xvclBpY2tlciwgc3R5bGVzW2RpcmVjdGlvbl1dKX1cclxuICAgID5cclxuICAgICAge2NvbG9ycy5tYXAoKGNvbG9yOiBDb2xvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8Q29sb3JTd2F0Y2hcclxuICAgICAgICAgICAga2V5PXtjb2xvci5rZXl9XHJcbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcn1cclxuICAgICAgICAgICAgaXNTZWxlY3RlZD17Y29sb3IgPT09IHNlbGVjdGVkQ29sb3J9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2VsZWN0KGNvbG9yKX1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKTtcclxuICAgICAgfSl9XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb2xvclBpY2tlcjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3NcIjtcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgQ29sb3JTd2F0Y2hQcm9wcyA9IHtcclxuICBjb2xvcjogQ29sb3I7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcclxuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcclxuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIENvbG9yU3dhdGNoKHtcclxuICBjb2xvcixcclxuICBjb250YWluZXJSZWYsXHJcbiAgb25DbGljayxcclxuICBpc1NlbGVjdGVkID0gZmFsc2UsXHJcbn06IENvbG9yU3dhdGNoUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGJ1dHRvblxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmNvbG9yU3dhdGNoLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc1NlbGVjdGVkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cImNvbG9yLXN3YXRjaFwiXHJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogY29sb3IuaGV4Q29kZSB9fVxyXG4gICAgPlxyXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zck9ubHl9PntgU2VsZWN0ICR7Y29sb3IubGFiZWx9IGNvbG9yYH08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb2xvclN3YXRjaDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclN3YXRjaFwiOlwiZHY3aXVjVFFxLVpoVVJVdXAtUHVWXCIsXCJzZWxlY3RlZFwiOlwiXzFMYkFneWlpRV8xdWpXOTBkLTZpdXVcIixcInNyT25seVwiOlwiXzFldGt1c2xoWlZFUE5zazFRZ2hURW9cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclBpY2tlclwiOlwiXzJGMU9uLVNBM21Na2haUEZyRGpXSWNcIixcImhvcml6b250YWxcIjpcIl8xV0ZZeU1ra1lMTDczbl9fclBVVWJ2XCIsXCJ2ZXJ0aWNhbFwiOlwiXzFsSW9hMmJqX3Ria1FpZTBJcEUyTG5cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4uL01vZGFsXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBDb25maXJtYXRpb25Nb2RhbFByb3BzID0ge1xyXG4gIGJ1dHRvbnNMZWZ0PzogUmVhY3RFbGVtZW50W107XHJcbiAgYnV0dG9uc1JpZ2h0PzogUmVhY3RFbGVtZW50W107XHJcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBoZWFkZXI6IHN0cmluZztcclxuICBpc09wZW46IGJvb2xlYW47XHJcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcclxuICBub092ZXJsYXk/OiBib29sZWFuO1xyXG4gIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcclxuICBiYXNlWkluZGV4PzogbnVtYmVyO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQ29uZmlybWF0aW9uTW9kYWwoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBoZWFkZXIsXHJcbiAgaXNPcGVuLFxyXG4gIGJ1dHRvbnNMZWZ0ID0gW10sXHJcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXHJcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgYmFzZVpJbmRleCA9IDEwMTksXHJcbn06IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPE1vZGFsXHJcbiAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBpc09wZW49e2lzT3Blbn1cclxuICAgICAgb25DbG9zZT17b25DbG9zZX1cclxuICAgICAgbm9PdmVybGF5PXtub092ZXJsYXl9XHJcbiAgICAgIG5vU2hhZG93PXtub1NoYWRvd31cclxuICAgICAgYmFzZVpJbmRleD17YmFzZVpJbmRleH1cclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxyXG4gICAgICAgIDxoMSBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEhlYWRlcn0+e2hlYWRlcn08L2gxPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgICBzdHlsZXMubW9kYWxDb250ZW50LFxyXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXHJcbiAgICAgICAgICBdKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnNDb250YWluZXJ9PlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zTGVmdH08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc1JpZ2h0fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvTW9kYWw+XHJcbiAgKTtcclxufVxyXG5cclxuQ29uZmlybWF0aW9uTW9kYWwuZGlzcGxheU5hbWUgPSBcIkNvbmZpcm1hdGlvbk1vZGFsXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb25maXJtYXRpb25Nb2RhbDtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyB1c2VIb3RrZXlzIH0gZnJvbSBcInJlYWN0LWhvdGtleXMtaG9va1wiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01vZGFsLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTW9kYWxQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgaXNPcGVuOiBib29sZWFuO1xyXG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xyXG4gIGJ1dHRvbj86IFJlYWN0Tm9kZTtcclxuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xyXG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XHJcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIE1vZGFsKHtcclxuICBjaGlsZHJlbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgaXNPcGVuLFxyXG4gIGJ1dHRvbixcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9PdmVybGF5ID0gZmFsc2UsXHJcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxyXG4gIGJhc2VaSW5kZXggPSAxMDA5LFxyXG59OiBNb2RhbFByb3BzKSB7XHJcbiAgdXNlSG90a2V5cyhcIkVzY2FwZVwiLCBvbkNsb3NlKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlT3ZlcmxheUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgb25DbG9zZSgpO1xyXG4gIH0sIFtvbkNsb3NlXSk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBpc09wZW4gJiYgKFxyXG4gICAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgICBzdHlsZXMub3ZlcmxheSxcclxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSB9LFxyXG4gICAgICAgICAgXSl9XHJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLW92ZXJsYXlcIlxyXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlT3ZlcmxheUNsaWNrfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMSB9fVxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcclxuICAgICAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdKX1cclxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7YnV0dG9uICYmIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMiB9fVxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge2J1dHRvbn1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1vZGFsO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcIl8yMFpLR1k0VHdaeHAwS1o2RTd5NFdCXCIsXCJub092ZXJsYXlcIjpcIl8yQUx3MnAtREh4WURoWXZSelE0aW5CXCIsXCJtb2RhbFwiOlwiXzI1TEJOMzFfbUkxSTF1SEREUDRPMElcIixcInRyYW5zcGFyZW50XCI6XCJfM1oyS2wxckVIWlFNTFVzWEYxZjdsb1wiLFwibm9TaGFkb3dcIjpcIl8zQ2ZTVC10bi10c3Zjb2RTeGVsaVFxXCIsXCJtb2RhbEJ1dHRvblwiOlwiXzFlTzB4M00wcE44LTc5SXVZdVRfQ2xcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIktnQzVwd3RzSGF2dVZPTHViQUxhZVwiLFwibW9kYWxIZWFkZXJcIjpcIl8xYlROWE1SNW1aRlhzMW8wdXhraFJQXCIsXCJtb2RhbENvbnRlbnRcIjpcInF1UDVvNFE5bmxVbzFmVDdzYlBWQVwiLFwibm9QYWRkaW5nXCI6XCJfMVVnb19ESFNUNFJiV3pJeEhQaGo3blwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJfMmJHTDdYakR5NnNFM0psZVU5OGhqeVwiLFwibW9kYWxCdXR0b25zXCI6XCJfM1hmZkZlTjlWRUlweXRobVZKMlU4Q1wifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEZpbGVJbnB1dCB9IGZyb20gXCIuL0ZpbGVJbnB1dFwiO1xyXG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ZpbGVJbnB1dC5tb2R1bGUuY3NzXCI7XHJcblxyXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcclxuXHJcbnR5cGUgUHJvcHMgPSB7XHJcbiAgb25DaGFuZ2U6ICgpID0+IHZvaWQ7XHJcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcclxuICBhY2NlcHQ/OiBzdHJpbmc7XHJcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBpbnZlcnRlZD86IGJvb2xlYW47XHJcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xyXG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcclxuICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcclxuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XHJcbiAgcm91bmRlZD86IGJvb2xlYW47XHJcbiAgc2l6ZT86IEZpbGVJbnB1dFNpemU7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBGaWxlSW5wdXQoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGFjY2VwdCxcclxuICBvbkNoYW5nZSxcclxuICBpbnB1dFJlZixcclxuICBtdWx0aXBsZSA9IGZhbHNlLFxyXG4gIGRpc2FibGVkID0gZmFsc2UsXHJcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcclxuICBub1NoYWRvdyA9IGZhbHNlLFxyXG4gIG5vQm9yZGVyID0gZmFsc2UsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXHJcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcclxuICByb3VuZGVkID0gZmFsc2UsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbn06IFByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxsYWJlbFxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMubGFiZWwsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcclxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXHJcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcclxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcclxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXHJcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXHJcbiAgICAgICAgfSxcclxuICAgICAgXSl9XHJcbiAgICA+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxyXG4gICAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICBpZD1cImZpbGVcIlxyXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxyXG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cclxuICAgICAgICByZWY9e2lucHV0UmVmfVxyXG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XHJcbiAgICAgIC8+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvbGFiZWw+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmlsZUlucHV0O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJfM1ZYenI2em1XN1Q2YXJ4OV92Q0FGVlwiLFwibGFiZWxcIjpcIno3czJoZHdHVDNrY3o1MV9tSnhtdlwiLFwic21hbGxcIjpcIl8yenI1OGhLa2djd1lNQjF3dUFKdG9SXCIsXCJsYXJnZVwiOlwiXzFDTmJMZWpJNDZqM0NTUlU3dFFHYmVcIixcInhsYXJnZVwiOlwiXzJ0amVYZHd4My1kblNfOTIxcnVwQmxcIixcImludmVydGVkXCI6XCJfMzJsZExNRUxrU3lkWGVvZzhCQ0JpLVwiLFwicm91bmRlZFwiOlwiWG40RGY3clF4bTBRQUhOZXV2TkxcIixcIm5vU2hhZG93XCI6XCJOZUFPb1lnYjBoT1BuVFZ6d3RnRERcIixcIm5vQm9yZGVyXCI6XCJfM3dWemI0UFJxaHh1cFhqdUIwUkJsU1wiLFwibm9QYWRkaW5nXCI6XCJfMXhQdFhlal9taFBEYmx6dmNybGZPOFwiLFwidHJhbnNwYXJlbnRcIjpcIlMwekRmZ3NVMURnTzBVdVRTT2ZrNFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiZW1lZ0xDSC1XX243S3VUSmxPc1FBXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiVkhaUjZoV0s2ZlNEZlJMdWhIN29OXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIFBsYWNlbWVudCA9IHtcclxuICBob3Jpem9udGFsOlxyXG4gICAgfCBcInJpZ2h0XCJcclxuICAgIHwgXCJyaWdodEVkZ2VcIlxyXG4gICAgfCBcInJpZ2h0T25FZGdlXCJcclxuICAgIHwgXCJsZWZ0XCJcclxuICAgIHwgXCJsZWZ0RWRnZVwiXHJcbiAgICB8IFwibGVmdE9uRWRnZVwiXHJcbiAgICB8IFwibGVmdE9uRWRnZVwiXHJcbiAgICB8IFwiY2VudGVyXCI7XHJcbiAgdmVydGljYWw6XHJcbiAgICB8IFwidG9wXCJcclxuICAgIHwgXCJ0b3BFZGdlXCJcclxuICAgIHwgXCJ0b3BPbkVkZ2VcIlxyXG4gICAgfCBcImJvdHRvbVwiXHJcbiAgICB8IFwiYm90dG9tRWRnZVwiXHJcbiAgICB8IFwiYm90dG9tT25FZGdlXCJcclxuICAgIHwgXCJjZW50ZXJcIjtcclxuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XHJcbn07XHJcblxyXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgbGF5b3V0PzogXCJjb2x1bW5cIiB8IFwicm93XCI7XHJcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gRmxvYXRpbmdQYW5lbCh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGxheW91dCA9IFwiY29sdW1uXCIsXHJcbiAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImNlbnRlclwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiwgcGFyZW50OiBcInZpZXdwb3J0XCIgfSxcclxufTogRmxvYXRpbmdQYW5lbFByb3BzKSB7XHJcbiAgY29uc3QgaG9yaXpvbnRhbFBsYWNlbWVudCA9XHJcbiAgICBwbGFjZW1lbnQuaG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIlxyXG4gICAgICA/IFwiaG9yaXpvbnRhbENlbnRlclwiXHJcbiAgICAgIDogcGxhY2VtZW50Lmhvcml6b250YWw7XHJcblxyXG4gIGNvbnN0IHZlcnRpY2FsUGxhY2VtZW50ID1cclxuICAgIHBsYWNlbWVudC52ZXJ0aWNhbCA9PT0gXCJjZW50ZXJcIiA/IFwidmVydGljYWxDZW50ZXJcIiA6IHBsYWNlbWVudC52ZXJ0aWNhbDtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGRhdGEtdGVzdGlkPVwiZmxvYXRpbmctcGFuZWxcIlxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxyXG4gICAgICAgIHN0eWxlc1tob3Jpem9udGFsUGxhY2VtZW50XSxcclxuICAgICAgICBzdHlsZXNbdmVydGljYWxQbGFjZW1lbnRdLFxyXG4gICAgICAgIHN0eWxlc1tsYXlvdXRdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBwbGFjZW1lbnQucGFyZW50ICE9PSBcImNvbnRhaW5lclwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pfVxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGbG9hdGluZ1BhbmVsO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzJyMEZrWUo3U0sxWWpCM0hLSE1BaWhcIixcInJvd1wiOlwiXzNSLUZGOGVNdTBDUzRlTlgzbFRkQ1JcIixcImNvbHVtblwiOlwiXzFvS09lQWdaand4Tk0zdUdmTHQ2SU9cIixcImZpeGVkXCI6XCJfM29RR1dnU0lOYnl0YjR1djkyQ1N2VFwiLFwicGxhaW5cIjpcImlNZjhvZC1iSXFzSEF2eG9mRHV6YlwiLFwidHJhbnNwYXJlbnRcIjpcImQyb3l4NXB5c3FqODk4YVM4RzNFOFwiLFwidG9wXCI6XCJfMTFjUFlxMWRoUXl6VklNWmVrMV9Jb1wiLFwidG9wRWRnZVwiOlwiXzJfaW5lQ3kxTVFsWVA2cU1ld2QxejVcIixcInRvcE9uRWRnZVwiOlwiXzFydkNzRG9kNWJsVE95QWw0a0R3TjBcIixcInJpZ2h0XCI6XCJfMVNJWUJjUmdxUzRWUGhXOU04MFk0elwiLFwicmlnaHRFZGdlXCI6XCJRQTY5ZjBEOGJUQ0pIckRPcjhtMXJcIixcInJpZ2h0T25FZGdlXCI6XCJfMlBpVFVsMEpZekVDbk8wODUxZ3ozYVwiLFwiYm90dG9tXCI6XCJfMzA1Z0JtVHdBZVhaZkFfTTl0c1ZOb1wiLFwiYm90dG9tRWRnZVwiOlwiXzFQY0RYYkxaMlhIUGtlaV9IX3I1OHBcIixcImJvdHRvbU9uRWRnZVwiOlwiXzJ2b3Q0cXByNThXbmI2cHZIWW5qa2NcIixcImxlZnRcIjpcInNJdGdCVjRXdER4NHZaM2EtUDRpeFwiLFwibGVmdEVkZ2VcIjpcIl8xTkoxRnpJX2FiS2ktVzZrYzJyMmM2XCIsXCJsZWZ0T25FZGdlXCI6XCJfMTJFdndiYVZRTldQWmUzN1NvOExfbVwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiXzJqaVN4RWJDVEtWekR0ZUdRMXVvRWZcIixcInZlcnRpY2FsQ2VudGVyXCI6XCJfMmY5RDQ2QkItZ2V6UHZ3OFRaeEp2cFwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgSWNvblByb3BzID0ge1xyXG4gIGFsdD86IHN0cmluZztcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEltYWdlRWxlbWVudD47XHJcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xyXG4gIHNyYzogc3RyaW5nO1xyXG4gIHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiIHwgXCJ4bGFyZ2VcIjtcclxufTtcclxuZnVuY3Rpb24gSWNvbih7XHJcbiAgc3JjLFxyXG4gIGFsdCxcclxuICBjb250YWluZXJSZWYsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcclxufTogSWNvblByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxpbWdcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5pY29uLFxyXG4gICAgICAgIHN0eWxlc1tzaXplXSxcclxuICAgICAgICB7IFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCB9LFxyXG4gICAgICBdKX1cclxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxyXG4gICAgICBkYXRhLXRlc3RpZD1cImljb25cIlxyXG4gICAgICBhbHQ9e2FsdH1cclxuICAgICAgc3JjPXtzcmN9XHJcbiAgICAvPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEljb247XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaWNvblwiOlwiXzMzY1RNOGk4cWFqRkd5LTAwdHkwUndcIixcInNtYWxsXCI6XCJNVWkzaWt6Y1BaZG81OUFmb1hkT0ZcIixcIm1lZGl1bVwiOlwiXzJWQ0txeTU5TlNGZGZEaUUwb3hhc3pcIixcImxhcmdlXCI6XCJfMlVVVWYybl9hMFBZcFE4a293S0h6cFwiLFwieGxhcmdlXCI6XCJvRElFWThVNFR3Q0prakY3eGFRQk9cIixcImludmVydGVkXCI6XCJfMnF6VXRVMVRkX2M1OHZNOEFMcVNWV1wifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbi5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xyXG4gIHNyYzogc3RyaW5nO1xyXG4gIGFsdDogc3RyaW5nO1xyXG4gIGJhZGdlQ29udGVudD86IFJlYWN0Tm9kZTtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xyXG4gIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICBub0JvcmRlcj86IGJvb2xlYW47XHJcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gIHJvdW5kZWQ/OiBib29sZWFuO1xyXG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XHJcbiAgc2l6ZT86IFNpemU7XHJcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xyXG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIj47XHJcbn07XHJcblxyXG5mdW5jdGlvbiBJY29uQnV0dG9uKHtcclxuICBjbGFzc05hbWUsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIHNyYyxcclxuICBhbHQsXHJcbiAgYmFkZ2VDb250ZW50ID0gbnVsbCxcclxuICBvZmZzZXRTaWRlcyA9IFtdLFxyXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcclxuICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbiAgbm9TaGFkb3cgPSBmYWxzZSxcclxuICBub0JvcmRlciA9IGZhbHNlLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgcm91bmRlZCA9IGZhbHNlLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxyXG59OiBJY29uQnV0dG9uUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGJ1dHRvblxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcclxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcclxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcclxuICAgICAgICAgIFtzdHlsZXMudG9wT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInRvcFwiKSxcclxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXHJcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgXSl9XHJcbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgb25DbGljaz17b25DbGlja31cclxuICAgICAgdHlwZT17dHlwZX1cclxuICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICA+XHJcbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxyXG4gICAgICB7YmFkZ2VDb250ZW50ICYmIDxCdXR0b25CYWRnZT57YmFkZ2VDb250ZW50fTwvQnV0dG9uQmFkZ2U+fVxyXG4gICAgPC9idXR0b24+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbjtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlJneWxsWFRxcDNfalo2QTJOYnZnNlwiLFwic21hbGxcIjpcIl8xdzBoWmxPYmVMN0VHODd6c0wtOXZOXCIsXCJtZWRpdW1cIjpcIkVLMWJ2SlpqVzExOURvNzlTdEw3SVwiLFwibGFyZ2VcIjpcIlBneVFYSzF5eUNNcThCU2FZQ2JjaFwiLFwieGxhcmdlXCI6XCJxaGtIeklvSW93bnJleEh6UVN1dVVcIixcInJvdW5kZWRcIjpcIl8zcXFhMWswQzlKTVBzQlJTejZaMHlZXCIsXCJ0b3BPZmZzZXRcIjpcIl8zVlpQN0RvaGhaN3o4Zmk0ei1IOGpOXCIsXCJyaWdodE9mZnNldFwiOlwiXzJYWGhKMy1jWWNYYklWTm1tbk84eUhcIixcImJvdHRvbU9mZnNldFwiOlwiWkpJWDdWcTVtdXNqZDZzNGhDU2JQXCIsXCJsZWZ0T2Zmc2V0XCI6XCJfMVFWV2l5aXZXOVV4ZW9OdTNVZG52NlwiLFwiaW52ZXJ0ZWRcIjpcIl8yalp6WGhuSHFxYnR1bTRkQmRsMWxLXCIsXCJub1NoYWRvd1wiOlwiXzNmeHZXaU9ORkZZdE11RGNYcDhzeXVcIixcIm5vQm9yZGVyXCI6XCJfM0V1eHVwbnFPVnVTb1VzYkt6Tm5cIixcInRyYW5zcGFyZW50XCI6XCJfMzViUklpOEJ0RDRSS1NKdlpial9zbVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b25MaW5rIH0gZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmtcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcclxuXHJcbnR5cGUgT2Zmc2V0U2lkZSA9IFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI7XHJcblxyXG50eXBlIEljb25CdXR0b25MaW5rUHJvcHMgPVxyXG4gIHwge1xyXG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xyXG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xyXG4gICAgICBzcmM6IHN0cmluZztcclxuICAgICAgYWx0OiBzdHJpbmc7XHJcbiAgICAgIGJhZGdlQ29udGVudD86IFJlYWN0Tm9kZTtcclxuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XHJcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xyXG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xyXG4gICAgICBzaXplPzogU2l6ZTtcclxuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcclxuICAgIH1cclxuICB8IGFueTtcclxuXHJcbmZ1bmN0aW9uIEljb25CdXR0b25MaW5rKHtcclxuICBhczogQ29tcG9uZW50LFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBjbGFzc05hbWUsXHJcbiAgc3JjLFxyXG4gIGFsdCxcclxuICBiYWRnZUNvbnRlbnQgPSBudWxsLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbiAgbm9TaGFkb3cgPSBmYWxzZSxcclxuICBub0JvcmRlciA9IGZhbHNlLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgcm91bmRlZCA9IGZhbHNlLFxyXG4gIG9mZnNldFNpZGVzID0gW10sXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgLi4ucHJvcHNcclxufTogSWNvbkJ1dHRvbkxpbmtQcm9wcykge1xyXG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICBDb21wb25lbnQgPSBcImFcIjtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8Q29tcG9uZW50XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cImljb24tYnV0dG9uLWxpbmtcIlxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxyXG4gICAgICAgIHN0eWxlc1tzaXplXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxyXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxyXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxyXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcclxuICAgICAgICAgIFtzdHlsZXMuYm90dG9tT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImJvdHRvbVwiKSxcclxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICBdKX1cclxuICAgICAgey4uLnByb3BzfVxyXG4gICAgPlxyXG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cclxuICAgICAge2JhZGdlQ29udGVudCAmJiA8QnV0dG9uQmFkZ2U+e2JhZGdlQ29udGVudH08L0J1dHRvbkJhZGdlPn1cclxuICAgIDwvQ29tcG9uZW50PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b25MaW5rO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzN3anhqQ3p2X2xwaGRXbTczSmdBeXBcIixcInNtYWxsXCI6XCJfMzJNWW1aYkh6VVUwYjNkTWNtSnNpTVwiLFwibWVkaXVtXCI6XCJfMTg5cllKMlR2YUJ5ckMzUzdDZjNubVwiLFwibGFyZ2VcIjpcIl8yYVlTU1RVZzh3dnJBRE9TMTg4eE1cIixcInhsYXJnZVwiOlwidnMzS1l2VTdaY25odzJTT3lTQ05mXCIsXCJyb3VuZGVkXCI6XCJfMThpaDY3TEwwbjdYbDYxZ0xHOHMwa1wiLFwidG9wT2Zmc2V0XCI6XCJfMXA3aDdXNlFzREhwYmE2bWd5V1VMOVwiLFwicmlnaHRPZmZzZXRcIjpcIl8zZnhNSUJfSno1Q1lJZnd1WmhRMjhpXCIsXCJib3R0b21PZmZzZXRcIjpcIl8xMTNtNENXaW1MdnNqVTl4SXhQcTdpXCIsXCJsZWZ0T2Zmc2V0XCI6XCJfNkNob3YyTW95VXh5aFd4S24zNjhLXCIsXCJpbnZlcnRlZFwiOlwiXzNlcU9KUXo0dWUtZVhMdnEyN0FzWTVcIixcIm5vU2hhZG93XCI6XCJsRjZEX1YyMHgzMnY5WnlzcXdDNjhcIixcIm5vQm9yZGVyXCI6XCJfM3M2cUNvbExqcGpsNFJybzdtVlR4U1wiLFwidHJhbnNwYXJlbnRcIjpcIl8ySVpPOXBLMTMxVTkxY3lLWGl4Z3hEXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiLi9JbWFnZVwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSW1hZ2UubW9kdWxlLmNzc1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgSW1hZ2VQcm9wcyA9IHtcclxuICBhbHQ/OiBzdHJpbmc7XHJcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBsYXlvdXQ/OiBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xyXG4gIHNyYzogc3RyaW5nO1xyXG4gIHNyY1dpZHRoPzogbnVtYmVyO1xyXG4gIHNyY0hlaWdodD86IG51bWJlcjtcclxuICBkZWNvZGluZz86IFwiYXN5bmNcIiB8IFwic3luY1wiIHwgXCJhdXRvXCIsXHJcbiAgbG9hZGluZz86IFwiZWFnZXJcIiB8IFwibGF6eVwiXHJcbn07XHJcblxyXG5mdW5jdGlvbiBJbWFnZUNvbXBvbmVudCh7XHJcbiAgc3JjLFxyXG4gIGFsdCxcclxuICBzcmNXaWR0aCxcclxuICBzcmNIZWlnaHQsXHJcbiAgY2hpbGRyZW4sXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxyXG4gIGRlY29kaW5nPSBcImF1dG9cIixcclxuICBsb2FkaW5nPSBcImVhZ2VyXCJcclxufTogSW1hZ2VQcm9wcykge1xyXG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IChcclxuICAgIDxpbWdcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmltYWdlLCBzdHlsZXNbbGF5b3V0XV0pfVxyXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXHJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2VcIlxyXG4gICAgICBhbHQ9e2FsdH1cclxuICAgICAgc3JjPXtzcmN9XHJcbiAgICAgIHdpZHRoPXtzcmNXaWR0aH1cclxuICAgICAgaGVpZ2h0PXtzcmNIZWlnaHR9XHJcbiAgICAgIGRlY29kaW5nPXtkZWNvZGluZ31cclxuICAgICAgbG9hZGluZz17bG9hZGluZ31cclxuICAgIC8+XHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxyXG4gICAgPGRpdlxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cclxuICAgID5cclxuICAgICAge2ltYWdlRWxlbWVudH1cclxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cclxuICAgIDwvZGl2PlxyXG4gICkgOiAoXHJcbiAgICBpbWFnZUVsZW1lbnRcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJbWFnZUNvbXBvbmVudDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8xVjAwR3B6X2tlcVVXR0VmWjc0d2pTXCIsXCJoYXNPdmVybGF5XCI6XCJfMk10VWZZcHc1VjhVcHJ4cV9FX3lTYVwiLFwib3ZlcmxheVwiOlwiejFEVkh4ajFaUEs3M09JUVJjazdqXCIsXCJpbWFnZVwiOlwiXzM5T2pUR1dkN3hteGNsNm51SS1nMkxcIixcImNvdmVyXCI6XCJfM3FLZHAybUs2ZjdHNXpBelhsemdyRVwiLFwiY29udGFpblwiOlwiXzJvX0c0WGJCLVFvemJmdWs0X1YwMGhcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIl8yeGd1RGtHdTFtUjJ5UGFZLWh6TjhvXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiXzE5V01hM3RxUnh2VWhES0ZaOFkyUEJcIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0VmlldyB9IGZyb20gXCIuL0xpc3RWaWV3XCI7XHJcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdJdGVtXCI7XHJcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdMaW5rSXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3TGlua0l0ZW1cIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXcubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBMaXN0Vmlld1Byb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgaGVhZGVyPzogc3RyaW5nO1xyXG4gIGhlYWRlckFjdGlvbnM/OiBSZWFjdE5vZGU7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBMaXN0Vmlldyh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY2xhc3NOYW1lLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBoZWFkZXIsXHJcbiAgaGVhZGVyQWN0aW9ucyxcclxufTogTGlzdFZpZXdQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XHJcbiAgICAgIHsoaGVhZGVyIHx8IGhlYWRlckFjdGlvbnMpICYmIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XHJcbiAgICAgICAgICB7aGVhZGVyICYmIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJMYWJlbH0+e2hlYWRlcn08L2gzPn1cclxuICAgICAgICAgIHtoZWFkZXJBY3Rpb25zfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgICA8dWwgY2xhc3NOYW1lPXtzdHlsZXMubGlzdH0+e2NoaWxkcmVufTwvdWw+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaXN0VmlldztcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkRjV29FYmlvbDlweC1GUUFfVHBPa1wiLFwiaGVhZGVyXCI6XCJfMmphdkI4c0FEeDZkRGdxWE4zTUNMUFwiLFwiaGVhZGVyTGFiZWxcIjpcIl8zaU1PZkl5TkwxU0VtdjJKOFpERG1XXCIsXCJsaXN0XCI6XCJfM19LbXRiTVBwUEhnSkZNOVpCX3huQVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcclxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIExpc3RWaWV3SXRlbVByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgYWN0aXZlPzogYm9vbGVhbjtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgc2l6ZT86IFNpemU7XHJcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XHJcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBMaXN0Vmlld0l0ZW0oe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGFjdGl2ZSA9IGZhbHNlLFxyXG4gIGRpc2FibGVkID0gZmFsc2UsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICBhbGlnbiA9IFwiY2VudGVyXCIsXHJcbiAgb25DbGljayA9ICgpID0+IHt9LFxyXG59OiBMaXN0Vmlld0l0ZW1Qcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cclxuICAgICAgPEJ1dHRvblxyXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XHJcbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxyXG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxyXG4gICAgICAgIGFsaWduPXthbGlnbn1cclxuICAgICAgICBzaXplPXtzaXplfVxyXG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcclxuICAgICAgICBub1NoYWRvd1xyXG4gICAgICAgIG5vQm9yZGVyXHJcbiAgICAgID5cclxuICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgIDwvQnV0dG9uPlxyXG4gICAgPC9saT5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0l0ZW07XHJcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi4vQnV0dG9uTGlua1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgTGlzdFZpZXdMaW5rSXRlbVByb3BzID1cclxuICB8IHtcclxuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcclxuICAgICAgYWN0aXZlOiBib29sZWFuO1xyXG4gICAgICB0cmFuc3BhcmVudDogYm9vbGVhbjtcclxuICAgICAgbm9QYWRkaW5nOiBib29sZWFuO1xyXG4gICAgICBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xyXG4gICAgICBzaXplOiBTaXplO1xyXG4gICAgfVxyXG4gIHwgYW55O1xyXG5cclxuZnVuY3Rpb24gTGlzdFZpZXdMaW5rSXRlbSh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgYXM6IENvbXBvbmVudCxcclxuICBhY3RpdmUgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIGFsaWduID0gXCJjZW50ZXJcIixcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICAuLi5wcm9wc1xyXG59OiBMaXN0Vmlld0xpbmtJdGVtUHJvcHMpIHtcclxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XHJcbiAgICAgIDxCdXR0b25MaW5rXHJcbiAgICAgICAgYXM9e0NvbXBvbmVudH1cclxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxyXG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cclxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cclxuICAgICAgICBhbGlnbj17YWxpZ259XHJcbiAgICAgICAgc2l6ZT17c2l6ZX1cclxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XHJcbiAgICAgICAgbm9TaGFkb3dcclxuICAgICAgICBub0JvcmRlclxyXG4gICAgICAgIHsuLi5wcm9wc31cclxuICAgICAgPlxyXG4gICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgPC9CdXR0b25MaW5rPlxyXG4gICAgPC9saT5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0xpbmtJdGVtO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1lbnUgfSBmcm9tIFwiLi9NZW51XCI7XHJcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUNvbnRhaW5lciwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51SXRlbSB9IGZyb20gXCIuL01lbnVJdGVtXCI7XHJcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUxpbmtJdGVtIH0gZnJvbSBcIi4vTWVudUxpbmtJdGVtXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnUubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBNZW51UHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBpc09wZW4/OiBib29sZWFuO1xyXG4gIGhlYWRlcj86IHN0cmluZztcclxuICBmb290ZXI/OiBSZWFjdE5vZGU7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBNZW51KHtcclxuICBjaGlsZHJlbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgY2xhc3NOYW1lLFxyXG4gIGlzT3BlbiA9IHRydWUsXHJcbiAgaGVhZGVyLFxyXG4gIGZvb3RlcixcclxufTogTWVudVByb3BzKSB7XHJcbiAgaWYgKCFpc09wZW4pIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDw+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICAgIHN0eWxlcy5tZW51LFxyXG4gICAgICAgICAgeyBbc3R5bGVzLm9wZW5dOiBpc09wZW4gfSxcclxuICAgICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgICBdKX1cclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2Nyb2xsQ29udGFpbmVyfT5cclxuICAgICAgICAgIHtoZWFkZXIgJiYgaXNPcGVuICYmIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PntoZWFkZXJ9PC9oMz59XHJcbiAgICAgICAgICA8dWw+e2lzT3BlbiAmJiBjaGlsZHJlbn08L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtmb290ZXIgJiYgaXNPcGVuICYmIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgICAgICAgc3R5bGVzLmZvb3RlcixcclxuICAgICAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiAhY2hpbGRyZW4gfSxcclxuICAgICAgICAgICAgXSl9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtmb290ZXJ9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lbnU7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudVwiOlwiXzFMNS1wdl9QNk0yb0dlb1JlTW5PMkpcIixcIm9wZW5cIjpcIl8xSjdwRmt2a2pRUVJXa21nLTBYVFdaXCIsXCJlbnRyYW5jZVwiOlwiXzNjcWVzUUdmOUN5dTY2RHNvS3RGMHFcIixcImhlYWRlclwiOlwicE9QWWFWMDFvOVdCN0J3NFZnaXdcIixcImZvb3RlclwiOlwiXzNtQ2NjbnZOZE4tWFpaUzdQTHhhdjBcIixcIm5vQm9yZGVyXCI6XCJfMjZ0VU9mOWdJLWFSZmFmX0lleVBVSVwiLFwic2Nyb2xsQ29udGFpbmVyXCI6XCJfMW1xTVVyZDEzLTFUbG92R0NCT2VwZlwifTsiLCJpbXBvcnQgUmVhY3QsIHtcclxuICBSZWFjdE5vZGUsXHJcbiAgUmVhY3RFbGVtZW50LFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgRm9yd2FyZGVkUmVmLFxyXG59IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVDb250YWluZXIubW9kdWxlLmNzc1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgTWVudVBsYWNlbWVudCA9IHtcclxuICBob3Jpem9udGFsOiBcInJpZ2h0XCIgfCBcImxlZnRcIjtcclxuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XHJcbn07XHJcblxyXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGJ1dHRvbj86IFJlYWN0RWxlbWVudDtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIE1lbnVDb250YWluZXIoXHJcbiAge1xyXG4gICAgY2hpbGRyZW4sXHJcbiAgICBidXR0b24sXHJcbiAgICBjbGFzc05hbWUsXHJcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxyXG4gIH06IE1lbnVDb250YWluZXJQcm9wcyxcclxuICByZWY6IEZvcndhcmRlZFJlZjxIVE1MRGl2RWxlbWVudD5cclxuKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cclxuICAgICAge2J1dHRvbn1cclxuXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICAgIHN0eWxlcy5tZW51Q29udGFpbmVyLFxyXG4gICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC5ob3Jpem9udGFsXSxcclxuICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQudmVydGljYWxdLFxyXG4gICAgICAgIF0pfVxyXG4gICAgICA+XHJcbiAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZvcndhcmRSZWYoTWVudUNvbnRhaW5lcik7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfM0Q0SVFaV0N0SDhNVFhydjU5TVlLRlwiLFwibWVudUNvbnRhaW5lclwiOlwiXzFfMnNGRlZ6TlhtSlhfUFRwSFpnRUxcIixcInRvcFwiOlwiUXZDNHk2bWYxWVctYmxLNlBTTjVJXCIsXCJyaWdodFwiOlwiXzNtclZid2ttVm1sY0ZEYWRQb2VjYzdcIixcImxlZnRcIjpcIlhmUTRiam5LRmFBWW1RVHVSSy02QVwiLFwiYm90dG9tXCI6XCJfMzlfdHliWDVKWjZZLXVqNDdnUHNLVlwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVJdGVtLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTWVudUl0ZW1Qcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBpc0FjdGl2ZT86IGJvb2xlYW47XHJcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcclxuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBNZW51SXRlbSh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY2xhc3NOYW1lLFxyXG4gIG9uQ2xpY2ssXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgaXNBY3RpdmUgPSBmYWxzZSxcclxufTogTWVudUl0ZW1Qcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8bGlcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLm1lbnVJdGVtLFxyXG4gICAgICAgIHsgW3N0eWxlcy5hY3RpdmVdOiBpc0FjdGl2ZSB9LFxyXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcclxuICAgICAgICBjbGFzc05hbWUsXHJcbiAgICAgIF0pfVxyXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2xpPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVJdGVtXCI6XCJfMktzUkNFZ0VfTTd3b1hqaHBSdVZ1b1wiLFwibm9QYWRkaW5nXCI6XCJfMmNxTUpISnlDakFVOFpQWkFWMFlENVwiLFwiYWN0aXZlXCI6XCJfMVhuWFppQXJodlVleVhncVVhRy1QN1wifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVMaW5rSXRlbS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIE1lbnVMaW5rSXRlbVByb3BzID1cclxuICB8IHtcclxuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xyXG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gICAgICBjbGFzc05hbWU6IHN0cmluZztcclxuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcclxuICAgIH1cclxuICB8IGFueTtcclxuXHJcbmZ1bmN0aW9uIE1lbnVMaW5rSXRlbSh7XHJcbiAgYXM6IENvbXBvbmVudCxcclxuICBjaGlsZHJlbixcclxuICBjbGFzc05hbWUsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgLi4ucHJvcHNcclxufTogTWVudUxpbmtJdGVtUHJvcHMpIHtcclxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPENvbXBvbmVudFxyXG4gICAgICBkYXRhLXRlc3RpZD1cIm1lbnUtbGluay1pdGVtXCJcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLm1lbnVMaW5rSXRlbSxcclxuICAgICAgICBjbGFzc05hbWUsXHJcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxyXG4gICAgICBdKX1cclxuICAgICAgey4uLnByb3BzfVxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L0NvbXBvbmVudD5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUxpbmtJdGVtXCI6XCJfM3o1dDlDQWhjQXdWT3RPVmxBXzRHd1wiLFwibm9QYWRkaW5nXCI6XCJiTlhpa3lFWklJT00xSGdzQWkzZnRcIixcImFjdGl2ZVwiOlwiXzFaLW1QdmV3R1VnNDg0UVBjOUh4cTJcIixcIm1lbnVJdGVtXCI6XCJfM3RJV0FoTUR0UHpBSDRiQXJ3cFJPdlwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIE92ZXJsYXkgfSBmcm9tIFwiLi9PdmVybGF5XCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3ZlcmxheS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIE92ZXJsYXlQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gIGlzRml4ZWQ/OiBib29sZWFuO1xyXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gT3ZlcmxheSh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgaXNGaXhlZCA9IGZhbHNlLFxyXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcclxufTogT3ZlcmxheVByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5vdmVybGF5LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcclxuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBpc0ZpeGVkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pfVxyXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBPdmVybGF5O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcIkkwZG0tTGRtLVNpUzB2NVgtdm8wZ1wiLFwidHJhbnNwYXJlbnRcIjpcIl8zcWREZGx5bkhMbm9mTjFES3Z2WVE4XCIsXCJmaXhlZFwiOlwiXzFnWHk5WFMzRi1KdHFkalpCY29LU3dcIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0SW5wdXQgfSBmcm9tIFwiLi9UZXh0SW5wdXRcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcclxuaW1wb3J0IHsgU2l6ZSwgVGV4dElucHV0VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5cclxudHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xyXG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XHJcbiAgb25LZXlEb3duPzogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XHJcbiAgc2l6ZT86IFNpemU7XHJcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xyXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XHJcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XHJcbn07XHJcblxyXG5mdW5jdGlvbiBUZXh0SW5wdXQoe1xyXG4gIGxhYmVsLFxyXG4gIG9uQ2hhbmdlLFxyXG4gIG9uQmx1cixcclxuICBvbktleURvd24sXHJcbiAgcGxhY2Vob2xkZXIsXHJcbiAgdmFsdWUsXHJcbiAgbmFtZSxcclxuICBpbnB1dFJlZixcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICB0eXBlID0gXCJ0ZXh0XCIsXHJcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxufTogVGV4dElucHV0UHJvcHMpIHtcclxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcclxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcclxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XHJcbiAgICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIFtvbkNoYW5nZV1cclxuICApO1xyXG5cclxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXHJcbiAgICA8aW5wdXRcclxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXHJcbiAgICAgIHJlZj17aW5wdXRSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50ZXh0SW5wdXQsIHN0eWxlc1tzaXplXSwge1tzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcn1dKX1cclxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cclxuICAgICAgb25CbHVyPXtvbkJsdXJ9XHJcbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxyXG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XHJcbiAgICAgIG5hbWU9e25hbWV9XHJcbiAgICAgIHR5cGU9e3R5cGV9XHJcbiAgICAgIHZhbHVlPXt2YWx1ZX1cclxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XHJcbiAgICAvPlxyXG4gICk7XHJcbiAgaWYgKGxhYmVsKSB7XHJcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIDw+e2lucHV0RWxlbWVudH08Lz47XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFRleHRJbnB1dDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcIl8yaWZGVEJ5eHZRRjVlUll3TUFTYWU3XCIsXCJzbWFsbFwiOlwiXzE4aUxOaHFjNVR6NVBQbzJrNF9UQmhcIixcIm1lZGl1bVwiOlwiXzFqYVJ5amVhdEpSeEV1amdQR3pXenhcIixcImxhcmdlXCI6XCJfMzRkNUgzWDhXMFVnWDlCOGR0UFJBT1wiLFwieGxhcmdlXCI6XCJfM3N0OEVHb3VuT2dqTnVMcG9FckMwc1wiLFwibm9Cb3JkZXJcIjpcInB0Ulo3QTVnaVc3RkIzbWs4UUxDTVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0IH0gZnJvbSBcIi4vVG9hc3RcIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdENvbnRhaW5lciB9IGZyb20gXCIuL1RvYXN0Q29udGFpbmVyXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIFRvYXN0UHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gVG9hc3QoeyBjaGlsZHJlbiwgY29udGFpbmVyUmVmLCBvbkNsaWNrID0gKCkgPT4ge30gfTogVG9hc3RQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy50b2FzdH1cclxuICAgICAgb25DbGljaz17b25DbGlja31cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdFwiXHJcbiAgICA+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRvYXN0O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0XCI6XCJfMk4zWGlIOFJWbkVBWWx6QkRfSkNxWlwiLFwiZW50cmFuY2VcIjpcIl8xOWN3M3p4NmZVNFJNR01hR001ekpaXCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuXHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XHJcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcclxufTtcclxuZnVuY3Rpb24gVG9hc3RDb250YWluZXIoeyBjaGlsZHJlbiwgYmFzZVpJbmRleCB9OiBUb2FzdENvbnRhaW5lclByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRvYXN0Q29udGFpbmVyXSl9XHJcbiAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxyXG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXHJcbiAgICA+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRvYXN0Q29udGFpbmVyO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0Q29udGFpbmVyXCI6XCJfM1JUMmFiZnpLMHJ0LVlqY3JxWExuclwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFZpZGVvLCBWaWRlb1Byb3BzIH0gZnJvbSBcIi4vVmlkZW9cIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVmlkZW8ubW9kdWxlLmNzc1wiO1xyXG5cclxuLyoqXHJcbiAqIFRoZXJlIGlzIGEga25vd24gaXNzdWUgaW4gUmVhY3QgaW4gcmVnYXJkcyB0byB0aGUgJ211dGVkJyBwcm9wZXJ0eSB3aGljaCBjYXVzZXMgdGhlIHdhcm5pbmc6XHJcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcclxuICpcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMDM4OVxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcclxuICogaHR0cHM6Ly9naXRodWIuY29tL3Rlc3RpbmctbGlicmFyeS9yZWFjdC10ZXN0aW5nLWxpYnJhcnkvaXNzdWVzLzQ3MFxyXG4gKi9cclxuXHJcbnR5cGUgTGF5b3V0ID0gXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcclxuXHJcbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSB7XHJcbiAgc3JjOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIGxheW91dD86IExheW91dDtcclxuICBhdXRvUGxheT86IGJvb2xlYW47XHJcbiAgbG9vcD86IGJvb2xlYW47XHJcbiAgbXV0ZWQ/OiBib29sZWFuO1xyXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgcG9zdGVyPzogc3RyaW5nO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gVmlkZW8oe1xyXG4gIHNyYyxcclxuICB0eXBlLFxyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBwb3N0ZXIsXHJcbiAgbXV0ZWQgPSB0cnVlLFxyXG4gIGxvb3AgPSB0cnVlLFxyXG4gIGF1dG9QbGF5ID0gdHJ1ZSxcclxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcclxufTogVmlkZW9Qcm9wcykge1xyXG4gIHJldHVybiBjaGlsZHJlbiA/IChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XHJcbiAgICA+XHJcbiAgICAgIDx2aWRlb1xyXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxyXG4gICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XHJcbiAgICAgICAgbXV0ZWQ9e211dGVkfVxyXG4gICAgICAgIGxvb3A9e2xvb3B9XHJcbiAgICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxyXG4gICAgICAgIHBvc3Rlcj17cG9zdGVyfVxyXG4gICAgICAgIHBsYXlzSW5saW5lXHJcbiAgICAgID5cclxuICAgICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XHJcbiAgICAgIDwvdmlkZW8+XHJcbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XHJcbiAgICA8L2Rpdj5cclxuICApIDogKFxyXG4gICAgPHZpZGVvXHJcbiAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxyXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cclxuICAgICAgbXV0ZWQ9e211dGVkfVxyXG4gICAgICBsb29wPXtsb29wfVxyXG4gICAgICBhdXRvUGxheT17YXV0b1BsYXl9XHJcbiAgICAgIHBvc3Rlcj17cG9zdGVyfVxyXG4gICAgICBwbGF5c0lubGluZVxyXG4gICAgPlxyXG4gICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XHJcbiAgICA8L3ZpZGVvPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZpZGVvO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzFkNTV3WHVRS3B0OTdQcVFIWXg1bVdcIixcImhhc092ZXJsYXlcIjpcIl8yREFNMXg3UDF3dVlOUDhURG1YR1hjXCIsXCJ2aWRlb1wiOlwiXzNqUV9xcFVMdHIwdUZTVFdiRDBOVlpcIixcImNvdmVyXCI6XCJfMXFuVkxoZUd6REk2Tm85X253YjdobFwiLFwiY29udGFpblwiOlwiXzFYMjg2TklTSTB3cTJLSzNkalZodTNcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIk9lZ2wtOGdkMks1bHozbVVHSl9VelwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl8xLUh6cFRZX1d0R2NaYzI1d0NvdGVZXCIsXCJvdmVybGF5XCI6XCJfMlR2WHNxQUlVbkdTcW02a25KRmhMM1wifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIHVzZVRvZ2dsZSB9IGZyb20gXCIuL3VzZVRvZ2dsZVwiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZU91dHNpZGVDbGljayB9IGZyb20gXCIuL3VzZU91dHNpZGVDbGlja1wiO1xyXG4iLCJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRvZ2dsZShcclxuICBpbml0aWFsVmFsdWUgPSBmYWxzZVxyXG4pOiBbYm9vbGVhbiwgKG5ld1ZhbHVlPzogYm9vbGVhbikgPT4gdm9pZF0ge1xyXG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGU8Ym9vbGVhbj4oaW5pdGlhbFZhbHVlKTtcclxuXHJcbiAgY29uc3QgdG9nZ2xlID0gdXNlQ2FsbGJhY2soKG5ld1ZhbHVlPzogYm9vbGVhbikgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VmFsdWUoKHByZXZWYWx1ZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiAhcHJldlZhbHVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9LCBbXSk7XHJcblxyXG4gIHJldHVybiBbdmFsdWUsIHRvZ2dsZV07XHJcbn1cclxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcclxuXHJcbnR5cGUgQ2FsbGJhY2sgPSAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT3V0c2lkZUNsaWNrKGNhbGxiYWNrOiBDYWxsYmFjaykge1xyXG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKGV2ZW50OiBFdmVudCkgPT4ge1xyXG4gICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljayk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2spO1xyXG5cclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrKTtcclxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrKTtcclxuICAgIH07XHJcbiAgfSwgW2NhbGxiYWNrXSk7XHJcblxyXG4gIHJldHVybiByZWY7XHJcbn1cclxuIiwiLyohXG4gKiBob3RrZXlzLWpzIHYzLjguN1xuICogQSBzaW1wbGUgbWljcm8tbGlicmFyeSBmb3IgZGVmaW5pbmcgYW5kIGRpc3BhdGNoaW5nIGtleWJvYXJkIHNob3J0Y3V0cy4gSXQgaGFzIG5vIGRlcGVuZGVuY2llcy5cbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDIxIGtlbm55IHdvbmcgPHdvd29ob29AcXEuY29tPlxuICogaHR0cDovL2pheXdjamxvdmUuZ2l0aHViLmlvL2hvdGtleXNcbiAqIFxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbnZhciBpc2ZmID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gMCA6IGZhbHNlOyAvLyDnu5Hlrprkuovku7ZcblxuZnVuY3Rpb24gYWRkRXZlbnQob2JqZWN0LCBldmVudCwgbWV0aG9kKSB7XG4gIGlmIChvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBtZXRob2QsIGZhbHNlKTtcbiAgfSBlbHNlIGlmIChvYmplY3QuYXR0YWNoRXZlbnQpIHtcbiAgICBvYmplY3QuYXR0YWNoRXZlbnQoXCJvblwiLmNvbmNhdChldmVudCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1ldGhvZCh3aW5kb3cuZXZlbnQpO1xuICAgIH0pO1xuICB9XG59IC8vIOS/rumlsOmUrui9rOaNouaIkOWvueW6lOeahOmUrueggVxuXG5cbmZ1bmN0aW9uIGdldE1vZHMobW9kaWZpZXIsIGtleSkge1xuICB2YXIgbW9kcyA9IGtleS5zbGljZSgwLCBrZXkubGVuZ3RoIC0gMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgbW9kc1tpXSA9IG1vZGlmaWVyW21vZHNbaV0udG9Mb3dlckNhc2UoKV07XG4gIH1cblxuICByZXR1cm4gbW9kcztcbn0gLy8g5aSE55CG5Lyg55qEa2V55a2X56ym5Liy6L2s5o2i5oiQ5pWw57uEXG5cblxuZnVuY3Rpb24gZ2V0S2V5cyhrZXkpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBrZXkgPSAnJztcbiAga2V5ID0ga2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7IC8vIOWMuemFjeS7u+S9leepuueZveWtl+espizljIXmi6znqbrmoLzjgIHliLbooajnrKbjgIHmjaLpobXnrKbnrYnnrYlcblxuICB2YXIga2V5cyA9IGtleS5zcGxpdCgnLCcpOyAvLyDlkIzml7borr7nva7lpJrkuKrlv6vmjbfplK7vvIzku6UnLCfliIblibJcblxuICB2YXIgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTsgLy8g5b+r5o236ZSu5Y+v6IO95YyF5ZCrJywn77yM6ZyA54m55q6K5aSE55CGXG5cbiAgZm9yICg7IGluZGV4ID49IDA7KSB7XG4gICAga2V5c1tpbmRleCAtIDFdICs9ICcsJztcbiAgICBrZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufSAvLyDmr5TovoPkv67ppbDplK7nmoTmlbDnu4RcblxuXG5mdW5jdGlvbiBjb21wYXJlQXJyYXkoYTEsIGEyKSB7XG4gIHZhciBhcnIxID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGExIDogYTI7XG4gIHZhciBhcnIyID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGEyIDogYTE7XG4gIHZhciBpc0luZGV4ID0gdHJ1ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyMi5pbmRleE9mKGFycjFbaV0pID09PSAtMSkgaXNJbmRleCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzSW5kZXg7XG59XG5cbnZhciBfa2V5TWFwID0ge1xuICBiYWNrc3BhY2U6IDgsXG4gIHRhYjogOSxcbiAgY2xlYXI6IDEyLFxuICBlbnRlcjogMTMsXG4gIHJldHVybjogMTMsXG4gIGVzYzogMjcsXG4gIGVzY2FwZTogMjcsXG4gIHNwYWNlOiAzMixcbiAgbGVmdDogMzcsXG4gIHVwOiAzOCxcbiAgcmlnaHQ6IDM5LFxuICBkb3duOiA0MCxcbiAgZGVsOiA0NixcbiAgZGVsZXRlOiA0NixcbiAgaW5zOiA0NSxcbiAgaW5zZXJ0OiA0NSxcbiAgaG9tZTogMzYsXG4gIGVuZDogMzUsXG4gIHBhZ2V1cDogMzMsXG4gIHBhZ2Vkb3duOiAzNCxcbiAgY2Fwc2xvY2s6IDIwLFxuICBudW1fMDogOTYsXG4gIG51bV8xOiA5NyxcbiAgbnVtXzI6IDk4LFxuICBudW1fMzogOTksXG4gIG51bV80OiAxMDAsXG4gIG51bV81OiAxMDEsXG4gIG51bV82OiAxMDIsXG4gIG51bV83OiAxMDMsXG4gIG51bV84OiAxMDQsXG4gIG51bV85OiAxMDUsXG4gIG51bV9tdWx0aXBseTogMTA2LFxuICBudW1fYWRkOiAxMDcsXG4gIG51bV9lbnRlcjogMTA4LFxuICBudW1fc3VidHJhY3Q6IDEwOSxcbiAgbnVtX2RlY2ltYWw6IDExMCxcbiAgbnVtX2RpdmlkZTogMTExLFxuICAn4oeqJzogMjAsXG4gICcsJzogMTg4LFxuICAnLic6IDE5MCxcbiAgJy8nOiAxOTEsXG4gICdgJzogMTkyLFxuICAnLSc6IGlzZmYgPyAxNzMgOiAxODksXG4gICc9JzogaXNmZiA/IDYxIDogMTg3LFxuICAnOyc6IGlzZmYgPyA1OSA6IDE4NixcbiAgJ1xcJyc6IDIyMixcbiAgJ1snOiAyMTksXG4gICddJzogMjIxLFxuICAnXFxcXCc6IDIyMFxufTsgLy8gTW9kaWZpZXIgS2V5c1xuXG52YXIgX21vZGlmaWVyID0ge1xuICAvLyBzaGlmdEtleVxuICAn4oenJzogMTYsXG4gIHNoaWZ0OiAxNixcbiAgLy8gYWx0S2V5XG4gICfijKUnOiAxOCxcbiAgYWx0OiAxOCxcbiAgb3B0aW9uOiAxOCxcbiAgLy8gY3RybEtleVxuICAn4oyDJzogMTcsXG4gIGN0cmw6IDE3LFxuICBjb250cm9sOiAxNyxcbiAgLy8gbWV0YUtleVxuICAn4oyYJzogOTEsXG4gIGNtZDogOTEsXG4gIGNvbW1hbmQ6IDkxXG59O1xudmFyIG1vZGlmaWVyTWFwID0ge1xuICAxNjogJ3NoaWZ0S2V5JyxcbiAgMTg6ICdhbHRLZXknLFxuICAxNzogJ2N0cmxLZXknLFxuICA5MTogJ21ldGFLZXknLFxuICBzaGlmdEtleTogMTYsXG4gIGN0cmxLZXk6IDE3LFxuICBhbHRLZXk6IDE4LFxuICBtZXRhS2V5OiA5MVxufTtcbnZhciBfbW9kcyA9IHtcbiAgMTY6IGZhbHNlLFxuICAxODogZmFsc2UsXG4gIDE3OiBmYWxzZSxcbiAgOTE6IGZhbHNlXG59O1xudmFyIF9oYW5kbGVycyA9IHt9OyAvLyBGMX5GMTIgc3BlY2lhbCBrZXlcblxuZm9yICh2YXIgayA9IDE7IGsgPCAyMDsgaysrKSB7XG4gIF9rZXlNYXBbXCJmXCIuY29uY2F0KGspXSA9IDExMSArIGs7XG59XG5cbnZhciBfZG93bktleXMgPSBbXTsgLy8g6K6w5b2V5pGB5LiL55qE57uR5a6a6ZSuXG5cbnZhciBfc2NvcGUgPSAnYWxsJzsgLy8g6buY6K6k54Ot6ZSu6IyD5Zu0XG5cbnZhciBlbGVtZW50SGFzQmluZEV2ZW50ID0gW107IC8vIOW3sue7keWumuS6i+S7tueahOiKgueCueiusOW9lVxuLy8g6L+U5Zue6ZSu56CBXG5cbnZhciBjb2RlID0gZnVuY3Rpb24gY29kZSh4KSB7XG4gIHJldHVybiBfa2V5TWFwW3gudG9Mb3dlckNhc2UoKV0gfHwgX21vZGlmaWVyW3gudG9Mb3dlckNhc2UoKV0gfHwgeC50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCk7XG59OyAvLyDorr7nva7ojrflj5blvZPliY3ojIPlm7TvvIjpu5jorqTkuLon5omA5pyJJ++8iVxuXG5cbmZ1bmN0aW9uIHNldFNjb3BlKHNjb3BlKSB7XG4gIF9zY29wZSA9IHNjb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5blvZPliY3ojIPlm7RcblxuXG5mdW5jdGlvbiBnZXRTY29wZSgpIHtcbiAgcmV0dXJuIF9zY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5pGB5LiL57uR5a6a6ZSu55qE6ZSu5YC8XG5cblxuZnVuY3Rpb24gZ2V0UHJlc3NlZEtleUNvZGVzKCkge1xuICByZXR1cm4gX2Rvd25LZXlzLnNsaWNlKDApO1xufSAvLyDooajljZXmjqfku7bmjqfku7bliKTmlq0g6L+U5ZueIEJvb2xlYW5cbi8vIGhvdGtleSBpcyBlZmZlY3RpdmUgb25seSB3aGVuIGZpbHRlciByZXR1cm4gdHJ1ZVxuXG5cbmZ1bmN0aW9uIGZpbHRlcihldmVudCkge1xuICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIHZhciB0YWdOYW1lID0gdGFyZ2V0LnRhZ05hbWU7XG4gIHZhciBmbGFnID0gdHJ1ZTsgLy8gaWdub3JlOiBpc0NvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnLCA8aW5wdXQ+IGFuZCA8dGV4dGFyZWE+IHdoZW4gcmVhZE9ubHkgc3RhdGUgaXMgZmFsc2UsIDxzZWxlY3Q+XG5cbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSB8fCAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8IHRhZ05hbWUgPT09ICdTRUxFQ1QnKSAmJiAhdGFyZ2V0LnJlYWRPbmx5KSB7XG4gICAgZmxhZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZsYWc7XG59IC8vIOWIpOaWreaRgeS4i+eahOmUruaYr+WQpuS4uuafkOS4qumUru+8jOi/lOWbnnRydWXmiJbogIVmYWxzZVxuXG5cbmZ1bmN0aW9uIGlzUHJlc3NlZChrZXlDb2RlKSB7XG4gIGlmICh0eXBlb2Yga2V5Q29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICBrZXlDb2RlID0gY29kZShrZXlDb2RlKTsgLy8g6L2s5o2i5oiQ6ZSu56CBXG4gIH1cblxuICByZXR1cm4gX2Rvd25LZXlzLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xO1xufSAvLyDlvqrnjq/liKDpmaRoYW5kbGVyc+S4reeahOaJgOaciSBzY29wZSjojIPlm7QpXG5cblxuZnVuY3Rpb24gZGVsZXRlU2NvcGUoc2NvcGUsIG5ld1Njb3BlKSB7XG4gIHZhciBoYW5kbGVycztcbiAgdmFyIGk7IC8vIOayoeacieaMh+WumnNjb3Bl77yM6I635Y+Wc2NvcGVcblxuICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG5cbiAgZm9yICh2YXIga2V5IGluIF9oYW5kbGVycykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2hhbmRsZXJzLCBrZXkpKSB7XG4gICAgICBoYW5kbGVycyA9IF9oYW5kbGVyc1trZXldO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOykge1xuICAgICAgICBpZiAoaGFuZGxlcnNbaV0uc2NvcGUgPT09IHNjb3BlKSBoYW5kbGVycy5zcGxpY2UoaSwgMSk7ZWxzZSBpKys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIOWmguaenHNjb3Bl6KKr5Yig6Zmk77yM5bCGc2NvcGXph43nva7kuLphbGxcblxuXG4gIGlmIChnZXRTY29wZSgpID09PSBzY29wZSkgc2V0U2NvcGUobmV3U2NvcGUgfHwgJ2FsbCcpO1xufSAvLyDmuIXpmaTkv67ppbDplK5cblxuXG5mdW5jdGlvbiBjbGVhck1vZGlmaWVyKGV2ZW50KSB7XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlO1xuXG4gIHZhciBpID0gX2Rvd25LZXlzLmluZGV4T2Yoa2V5KTsgLy8g5LuO5YiX6KGo5Lit5riF6Zmk5oyJ5Y6L6L+H55qE6ZSuXG5cblxuICBpZiAoaSA+PSAwKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZShpLCAxKTtcbiAgfSAvLyDnibnmrorlpITnkIYgY21tYW5kIOmUru+8jOWcqCBjbW1hbmQg57uE5ZCI5b+r5o236ZSuIGtleXVwIOWPquaJp+ihjOS4gOasoeeahOmXrumimFxuXG5cbiAgaWYgKGV2ZW50LmtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ21ldGEnKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZSgwLCBfZG93bktleXMubGVuZ3RoKTtcbiAgfSAvLyDkv67ppbDplK4gc2hpZnRLZXkgYWx0S2V5IGN0cmxLZXkgKGNvbW1hbmR8fG1ldGFLZXkpIOa4hemZpFxuXG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gZmFsc2U7IC8vIOWwhuS/rumlsOmUrumHjee9ruS4umZhbHNlXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVuYmluZChrZXlzSW5mbykge1xuICAvLyB1bmJpbmQoKSwgdW5iaW5kIGFsbCBrZXlzXG4gIGlmICgha2V5c0luZm8pIHtcbiAgICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGRlbGV0ZSBfaGFuZGxlcnNba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXNJbmZvKSkge1xuICAgIC8vIHN1cHBvcnQgbGlrZSA6IHVuYmluZChbe2tleTogJ2N0cmwrYScsIHNjb3BlOiAnczEnfSwge2tleTogJ2N0cmwtYScsIHNjb3BlOiAnczInLCBzcGxpdEtleTogJy0nfV0pXG4gICAga2V5c0luZm8uZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgaWYgKGluZm8ua2V5KSBlYWNoVW5iaW5kKGluZm8pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgdW5iaW5kKHtrZXk6ICdjdHJsK2EsIGN0cmwrYicsIHNjb3BlOidhYmMnfSlcbiAgICBpZiAoa2V5c0luZm8ua2V5KSBlYWNoVW5iaW5kKGtleXNJbmZvKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBvbGQgbWV0aG9kXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBzY29wZSA9IGFyZ3NbMF0sXG4gICAgICAgIG1ldGhvZCA9IGFyZ3NbMV07XG5cbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtZXRob2QgPSBzY29wZTtcbiAgICAgIHNjb3BlID0gJyc7XG4gICAgfVxuXG4gICAgZWFjaFVuYmluZCh7XG4gICAgICBrZXk6IGtleXNJbmZvLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBzcGxpdEtleTogJysnXG4gICAgfSk7XG4gIH1cbn0gLy8g6Kej6Zmk57uR5a6a5p+Q5Liq6IyD5Zu055qE5b+r5o236ZSuXG5cblxudmFyIGVhY2hVbmJpbmQgPSBmdW5jdGlvbiBlYWNoVW5iaW5kKF9yZWYpIHtcbiAgdmFyIGtleSA9IF9yZWYua2V5LFxuICAgICAgc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgbWV0aG9kID0gX3JlZi5tZXRob2QsXG4gICAgICBfcmVmJHNwbGl0S2V5ID0gX3JlZi5zcGxpdEtleSxcbiAgICAgIHNwbGl0S2V5ID0gX3JlZiRzcGxpdEtleSA9PT0gdm9pZCAwID8gJysnIDogX3JlZiRzcGxpdEtleTtcbiAgdmFyIG11bHRpcGxlS2V5cyA9IGdldEtleXMoa2V5KTtcbiAgbXVsdGlwbGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbktleSkge1xuICAgIHZhciB1bmJpbmRLZXlzID0gb3JpZ2luS2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICB2YXIgbGVuID0gdW5iaW5kS2V5cy5sZW5ndGg7XG4gICAgdmFyIGxhc3RLZXkgPSB1bmJpbmRLZXlzW2xlbiAtIDFdO1xuICAgIHZhciBrZXlDb2RlID0gbGFzdEtleSA9PT0gJyonID8gJyonIDogY29kZShsYXN0S2V5KTtcbiAgICBpZiAoIV9oYW5kbGVyc1trZXlDb2RlXSkgcmV0dXJuOyAvLyDliKTmlq3mmK/lkKbkvKDlhaXojIPlm7TvvIzmsqHmnInlsLHojrflj5bojIPlm7RcblxuICAgIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICB2YXIgbW9kcyA9IGxlbiA+IDEgPyBnZXRNb2RzKF9tb2RpZmllciwgdW5iaW5kS2V5cykgOiBbXTtcbiAgICBfaGFuZGxlcnNba2V5Q29kZV0gPSBfaGFuZGxlcnNba2V5Q29kZV0ubWFwKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgIC8vIOmAmui/h+WHveaVsOWIpOaWre+8jOaYr+WQpuino+mZpOe7keWumu+8jOWHveaVsOebuOetieebtOaOpei/lOWbnlxuICAgICAgdmFyIGlzTWF0Y2hpbmdNZXRob2QgPSBtZXRob2QgPyByZWNvcmQubWV0aG9kID09PSBtZXRob2QgOiB0cnVlO1xuXG4gICAgICBpZiAoaXNNYXRjaGluZ01ldGhvZCAmJiByZWNvcmQuc2NvcGUgPT09IHNjb3BlICYmIGNvbXBhcmVBcnJheShyZWNvcmQubW9kcywgbW9kcykpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH0pO1xuICB9KTtcbn07IC8vIOWvueebkeWQrOWvueW6lOW/q+aNt+mUrueahOWbnuiwg+WHveaVsOi/m+ihjOWkhOeQhlxuXG5cbmZ1bmN0aW9uIGV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlciwgc2NvcGUpIHtcbiAgdmFyIG1vZGlmaWVyc01hdGNoOyAvLyDnnIvlroPmmK/lkKblnKjlvZPliY3ojIPlm7RcblxuICBpZiAoaGFuZGxlci5zY29wZSA9PT0gc2NvcGUgfHwgaGFuZGxlci5zY29wZSA9PT0gJ2FsbCcpIHtcbiAgICAvLyDmo4Dmn6XmmK/lkKbljLnphY3kv67ppbDnrKbvvIjlpoLmnpzmnInov5Tlm550cnVl77yJXG4gICAgbW9kaWZpZXJzTWF0Y2ggPSBoYW5kbGVyLm1vZHMubGVuZ3RoID4gMDtcblxuICAgIGZvciAodmFyIHkgaW4gX21vZHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIHkpKSB7XG4gICAgICAgIGlmICghX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID4gLTEgfHwgX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID09PSAtMSkge1xuICAgICAgICAgIG1vZGlmaWVyc01hdGNoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIOiwg+eUqOWkhOeQhueoi+W6j++8jOWmguaenOaYr+S/rumlsOmUruS4jeWBmuWkhOeQhlxuXG5cbiAgICBpZiAoaGFuZGxlci5tb2RzLmxlbmd0aCA9PT0gMCAmJiAhX21vZHNbMTZdICYmICFfbW9kc1sxOF0gJiYgIV9tb2RzWzE3XSAmJiAhX21vZHNbOTFdIHx8IG1vZGlmaWVyc01hdGNoIHx8IGhhbmRsZXIuc2hvcnRjdXQgPT09ICcqJykge1xuICAgICAgaWYgKGhhbmRsZXIubWV0aG9kKGV2ZW50LCBoYW5kbGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChldmVudC5jYW5jZWxCdWJibGUpIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWkhOeQhmtleWRvd27kuovku7ZcblxuXG5mdW5jdGlvbiBkaXNwYXRjaChldmVudCkge1xuICB2YXIgYXN0ZXJpc2sgPSBfaGFuZGxlcnNbJyonXTtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7IC8vIOihqOWNleaOp+S7tui/h+a7pCDpu5jorqTooajljZXmjqfku7bkuI3op6blj5Hlv6vmjbfplK5cblxuICBpZiAoIWhvdGtleXMuZmlsdGVyLmNhbGwodGhpcywgZXZlbnQpKSByZXR1cm47IC8vIEdlY2tvKEZpcmVmb3gp55qEY29tbWFuZOmUruWAvDIyNO+8jOWcqFdlYmtpdChDaHJvbWUp5Lit5L+d5oyB5LiA6Ie0XG4gIC8vIFdlYmtpdOW3puWPsyBjb21tYW5kIOmUruWAvOS4jeS4gOagt1xuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcbiAgLyoqXG4gICAqIENvbGxlY3QgYm91bmQga2V5c1xuICAgKiBJZiBhbiBJbnB1dCBNZXRob2QgRWRpdG9yIGlzIHByb2Nlc3Npbmcga2V5IGlucHV0IGFuZCB0aGUgZXZlbnQgaXMga2V5ZG93biwgcmV0dXJuIDIyOS5cbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjUwNDM5MzQvaXMtaXQtb2stdG8taWdub3JlLWtleWRvd24tZXZlbnRzLXdpdGgta2V5Y29kZS0yMjlcbiAgICogaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LWRvbS8yMDEwSnVsU2VwL2F0dC0wMTgyL2tleUNvZGUtc3BlYy5odG1sXG4gICAqL1xuXG4gIGlmIChfZG93bktleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJiBrZXkgIT09IDIyOSkgX2Rvd25LZXlzLnB1c2goa2V5KTtcbiAgLyoqXG4gICAqIEplc3QgdGVzdCBjYXNlcyBhcmUgcmVxdWlyZWQuXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICovXG5cbiAgWydjdHJsS2V5JywgJ2FsdEtleScsICdzaGlmdEtleScsICdtZXRhS2V5J10uZm9yRWFjaChmdW5jdGlvbiAoa2V5TmFtZSkge1xuICAgIHZhciBrZXlOdW0gPSBtb2RpZmllck1hcFtrZXlOYW1lXTtcblxuICAgIGlmIChldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goa2V5TnVtKTtcbiAgICB9IGVsc2UgaWYgKCFldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID4gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5zcGxpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSwgMSk7XG4gICAgfSBlbHNlIGlmIChrZXlOYW1lID09PSAnbWV0YUtleScgJiYgZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmxlbmd0aCA9PT0gMykge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXggaWYgQ29tbWFuZCBpcyBwcmVzc2VkOlxuICAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICovXG4gICAgICBpZiAoIShldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSkpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gX2Rvd25LZXlzLnNsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gdHJ1ZTsgLy8g5bCG54m55q6K5a2X56ym55qEa2V55rOo5YaM5YiwIGhvdGtleXMg5LiKXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFzdGVyaXNrKSByZXR1cm47XG4gIH0gLy8g5bCGIG1vZGlmaWVyTWFwIOmHjOmdoueahOS/rumlsOmUrue7keWumuWIsCBldmVudCDkuK1cblxuXG4gIGZvciAodmFyIGUgaW4gX21vZHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCBlKSkge1xuICAgICAgX21vZHNbZV0gPSBldmVudFttb2RpZmllck1hcFtlXV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vamF5d2NqbG92ZS9ob3RrZXlzL3B1bGwvMTI5XG4gICAqIFRoaXMgc29sdmVzIHRoZSBpc3N1ZSBpbiBGaXJlZm94IG9uIFdpbmRvd3Mgd2hlcmUgaG90a2V5cyBjb3JyZXNwb25kaW5nIHRvIHNwZWNpYWwgY2hhcmFjdGVycyB3b3VsZCBub3QgdHJpZ2dlci5cbiAgICogQW4gZXhhbXBsZSBvZiB0aGlzIGlzIGN0cmwrYWx0K20gb24gYSBTd2VkaXNoIGtleWJvYXJkIHdoaWNoIGlzIHVzZWQgdG8gdHlwZSDOvC5cbiAgICogQnJvd3NlciBzdXBwb3J0OiBodHRwczovL2Nhbml1c2UuY29tLyNmZWF0PWtleWJvYXJkZXZlbnQtZ2V0bW9kaWZpZXJzdGF0ZVxuICAgKi9cblxuXG4gIGlmIChldmVudC5nZXRNb2RpZmllclN0YXRlICYmICEoZXZlbnQuYWx0S2V5ICYmICFldmVudC5jdHJsS2V5KSAmJiBldmVudC5nZXRNb2RpZmllclN0YXRlKCdBbHRHcmFwaCcpKSB7XG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE3KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE3KTtcbiAgICB9XG5cbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTgpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTgpO1xuICAgIH1cblxuICAgIF9tb2RzWzE3XSA9IHRydWU7XG4gICAgX21vZHNbMThdID0gdHJ1ZTtcbiAgfSAvLyDojrflj5bojIPlm7Qg6buY6K6k5Li6IGBhbGxgXG5cblxuICB2YXIgc2NvcGUgPSBnZXRTY29wZSgpOyAvLyDlr7nku7vkvZXlv6vmjbfplK7pg73pnIDopoHlgZrnmoTlpITnkIZcblxuICBpZiAoYXN0ZXJpc2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzdGVyaXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXN0ZXJpc2tbaV0uc2NvcGUgPT09IHNjb3BlICYmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgYXN0ZXJpc2tbaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGFzdGVyaXNrW2ldLmtleXVwKSkge1xuICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIGFzdGVyaXNrW2ldLCBzY29wZSk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGtleSDkuI3lnKggX2hhbmRsZXJzIOS4rei/lOWbnlxuXG5cbiAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIHJldHVybjtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgX2hhbmRsZXJzW2tleV0ubGVuZ3RoOyBfaSsrKSB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXl1cCkge1xuICAgICAgaWYgKF9oYW5kbGVyc1trZXldW19pXS5rZXkpIHtcbiAgICAgICAgdmFyIHJlY29yZCA9IF9oYW5kbGVyc1trZXldW19pXTtcbiAgICAgICAgdmFyIHNwbGl0S2V5ID0gcmVjb3JkLnNwbGl0S2V5O1xuICAgICAgICB2YXIga2V5U2hvcnRjdXQgPSByZWNvcmQua2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICAgICAgdmFyIF9kb3duS2V5c0N1cnJlbnQgPSBbXTsgLy8g6K6w5b2V5b2T5YmN5oyJ6ZSu6ZSu5YC8XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBrZXlTaG9ydGN1dC5sZW5ndGg7IGErKykge1xuICAgICAgICAgIF9kb3duS2V5c0N1cnJlbnQucHVzaChjb2RlKGtleVNob3J0Y3V0W2FdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2Rvd25LZXlzQ3VycmVudC5zb3J0KCkuam9pbignJykgPT09IF9kb3duS2V5cy5zb3J0KCkuam9pbignJykpIHtcbiAgICAgICAgICAvLyDmib7liLDlpITnkIblhoXlrrlcbiAgICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIHJlY29yZCwgc2NvcGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWIpOaWrSBlbGVtZW50IOaYr+WQpuW3sue7j+e7keWumuS6i+S7tlxuXG5cbmZ1bmN0aW9uIGlzRWxlbWVudEJpbmQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudEhhc0JpbmRFdmVudC5pbmRleE9mKGVsZW1lbnQpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGhvdGtleXMoa2V5LCBvcHRpb24sIG1ldGhvZCkge1xuICBfZG93bktleXMgPSBbXTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKGtleSk7IC8vIOmcgOimgeWkhOeQhueahOW/q+aNt+mUruWIl+ihqFxuXG4gIHZhciBtb2RzID0gW107XG4gIHZhciBzY29wZSA9ICdhbGwnOyAvLyBzY29wZem7mOiupOS4umFsbO+8jOaJgOacieiMg+WbtOmDveacieaViFxuXG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQ7IC8vIOW/q+aNt+mUruS6i+S7tue7keWumuiKgueCuVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIGtleXVwID0gZmFsc2U7XG4gIHZhciBrZXlkb3duID0gdHJ1ZTtcbiAgdmFyIHNwbGl0S2V5ID0gJysnOyAvLyDlr7nkuLrorr7lrprojIPlm7TnmoTliKTmlq1cblxuICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG1ldGhvZCA9IG9wdGlvbjtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob3B0aW9uKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBpZiAob3B0aW9uLnNjb3BlKSBzY29wZSA9IG9wdGlvbi5zY29wZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5lbGVtZW50KSBlbGVtZW50ID0gb3B0aW9uLmVsZW1lbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5dXApIGtleXVwID0gb3B0aW9uLmtleXVwOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleWRvd24gIT09IHVuZGVmaW5lZCkga2V5ZG93biA9IG9wdGlvbi5rZXlkb3duOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbi5zcGxpdEtleSA9PT0gJ3N0cmluZycpIHNwbGl0S2V5ID0gb3B0aW9uLnNwbGl0S2V5OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHNjb3BlID0gb3B0aW9uOyAvLyDlr7nkuo7mr4/kuKrlv6vmjbfplK7ov5vooYzlpITnkIZcblxuICBmb3IgKDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldLnNwbGl0KHNwbGl0S2V5KTsgLy8g5oyJ6ZSu5YiX6KGoXG5cbiAgICBtb2RzID0gW107IC8vIOWmguaenOaYr+e7hOWQiOW/q+aNt+mUruWPluW+l+e7hOWQiOW/q+aNt+mUrlxuXG4gICAgaWYgKGtleS5sZW5ndGggPiAxKSBtb2RzID0gZ2V0TW9kcyhfbW9kaWZpZXIsIGtleSk7IC8vIOWwhumdnuS/rumlsOmUrui9rOWMluS4uumUrueggVxuXG4gICAga2V5ID0ga2V5W2tleS5sZW5ndGggLSAxXTtcbiAgICBrZXkgPSBrZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUoa2V5KTsgLy8gKuihqOekuuWMuemFjeaJgOacieW/q+aNt+mUrlxuICAgIC8vIOWIpOaWrWtleeaYr+WQpuWcqF9oYW5kbGVyc+S4re+8jOS4jeWcqOWwsei1i+S4gOS4quepuuaVsOe7hFxuXG4gICAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIF9oYW5kbGVyc1trZXldID0gW107XG5cbiAgICBfaGFuZGxlcnNba2V5XS5wdXNoKHtcbiAgICAgIGtleXVwOiBrZXl1cCxcbiAgICAgIGtleWRvd246IGtleWRvd24sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtb2RzOiBtb2RzLFxuICAgICAgc2hvcnRjdXQ6IGtleXNbaV0sXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGtleToga2V5c1tpXSxcbiAgICAgIHNwbGl0S2V5OiBzcGxpdEtleVxuICAgIH0pO1xuICB9IC8vIOWcqOWFqOWxgGRvY3VtZW505LiK6K6+572u5b+r5o236ZSuXG5cblxuICBpZiAodHlwZW9mIGVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmICFpc0VsZW1lbnRCaW5kKGVsZW1lbnQpICYmIHdpbmRvdykge1xuICAgIGVsZW1lbnRIYXNCaW5kRXZlbnQucHVzaChlbGVtZW50KTtcbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlKTtcbiAgICB9KTtcbiAgICBhZGRFdmVudCh3aW5kb3csICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF9kb3duS2V5cyA9IFtdO1xuICAgIH0pO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXl1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlKTtcbiAgICAgIGNsZWFyTW9kaWZpZXIoZSk7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIF9hcGkgPSB7XG4gIHNldFNjb3BlOiBzZXRTY29wZSxcbiAgZ2V0U2NvcGU6IGdldFNjb3BlLFxuICBkZWxldGVTY29wZTogZGVsZXRlU2NvcGUsXG4gIGdldFByZXNzZWRLZXlDb2RlczogZ2V0UHJlc3NlZEtleUNvZGVzLFxuICBpc1ByZXNzZWQ6IGlzUHJlc3NlZCxcbiAgZmlsdGVyOiBmaWx0ZXIsXG4gIHVuYmluZDogdW5iaW5kXG59O1xuXG5mb3IgKHZhciBhIGluIF9hcGkpIHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfYXBpLCBhKSkge1xuICAgIGhvdGtleXNbYV0gPSBfYXBpW2FdO1xuICB9XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgX2hvdGtleXMgPSB3aW5kb3cuaG90a2V5cztcblxuICBob3RrZXlzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoZGVlcCkge1xuICAgIGlmIChkZWVwICYmIHdpbmRvdy5ob3RrZXlzID09PSBob3RrZXlzKSB7XG4gICAgICB3aW5kb3cuaG90a2V5cyA9IF9ob3RrZXlzO1xuICAgIH1cblxuICAgIHJldHVybiBob3RrZXlzO1xuICB9O1xuXG4gIHdpbmRvdy5ob3RrZXlzID0gaG90a2V5cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaG90a2V5cztcbiIsImltcG9ydCBob3RrZXlzIGZyb20gJ2hvdGtleXMtanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIGlzSG90a2V5UHJlc3NlZCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgdmVyc2lvbiA0LlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlSXNIb3RrZXlQcmVzc2VkKCkge1xuICByZXR1cm4gaG90a2V5cy5pc1ByZXNzZWQ7XG59XG5cbmhvdGtleXMuZmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciB0YWdGaWx0ZXIgPSBmdW5jdGlvbiB0YWdGaWx0ZXIoX3JlZiwgZW5hYmxlT25UYWdzKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgdmFyIHRhcmdldFRhZ05hbWUgPSB0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWU7XG4gIHJldHVybiBCb29sZWFuKHRhcmdldFRhZ05hbWUgJiYgZW5hYmxlT25UYWdzICYmIGVuYWJsZU9uVGFncy5pbmNsdWRlcyh0YXJnZXRUYWdOYW1lKSk7XG59O1xuXG52YXIgaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCA9IGZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoZXYpIHtcbiAgcmV0dXJuIHRhZ0ZpbHRlcihldiwgWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXSk7XG59O1xuXG5mdW5jdGlvbiB1c2VIb3RrZXlzKGtleXMsIGNhbGxiYWNrLCBvcHRpb25zLCBkZXBzKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBkZXBzID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIF9yZWYyID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgIGVuYWJsZU9uVGFncyA9IF9yZWYyLmVuYWJsZU9uVGFncyxcbiAgICAgIGZpbHRlciA9IF9yZWYyLmZpbHRlcixcbiAgICAgIGtleXVwID0gX3JlZjIua2V5dXAsXG4gICAgICBrZXlkb3duID0gX3JlZjIua2V5ZG93bixcbiAgICAgIF9yZWYyJGZpbHRlclByZXZlbnREZSA9IF9yZWYyLmZpbHRlclByZXZlbnREZWZhdWx0LFxuICAgICAgZmlsdGVyUHJldmVudERlZmF1bHQgPSBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUsXG4gICAgICBfcmVmMiRlbmFibGVkID0gX3JlZjIuZW5hYmxlZCxcbiAgICAgIGVuYWJsZWQgPSBfcmVmMiRlbmFibGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZW5hYmxlZCxcbiAgICAgIF9yZWYyJGVuYWJsZU9uQ29udGVudCA9IF9yZWYyLmVuYWJsZU9uQ29udGVudEVkaXRhYmxlLFxuICAgICAgZW5hYmxlT25Db250ZW50RWRpdGFibGUgPSBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZW5hYmxlT25Db250ZW50O1xuXG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7IC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIGlmIHRoZSBicm93c2VycyBkZWZhdWx0IGJlaGF2aW9yIGlzIHByZXZlbnRlZC5cblxuICB2YXIgbWVtb2lzZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpIHtcbiAgICB2YXIgX2tleWJvYXJkRXZlbnQkdGFyZ2V0O1xuXG4gICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKGtleWJvYXJkRXZlbnQpKSB7XG4gICAgICByZXR1cm4gIWZpbHRlclByZXZlbnREZWZhdWx0O1xuICAgIH0gLy8gQ2hlY2sgd2hldGhlciB0aGUgaG90a2V5cyB3YXMgdHJpZ2dlcmVkIGluc2lkZSBhbiBpbnB1dCBhbmQgdGhhdCBpbnB1dCBpcyBlbmFibGVkIG9yIGlmIGl0IHdhcyB0cmlnZ2VyZWQgYnkgYSBjb250ZW50IGVkaXRhYmxlIHRhZyBhbmQgaXQgaXMgZW5hYmxlZC5cblxuXG4gICAgaWYgKGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoa2V5Ym9hcmRFdmVudCkgJiYgIXRhZ0ZpbHRlcihrZXlib2FyZEV2ZW50LCBlbmFibGVPblRhZ3MpIHx8IChfa2V5Ym9hcmRFdmVudCR0YXJnZXQgPSBrZXlib2FyZEV2ZW50LnRhcmdldCkgIT0gbnVsbCAmJiBfa2V5Ym9hcmRFdmVudCR0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgJiYgIWVuYWJsZU9uQ29udGVudEVkaXRhYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IG51bGwgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhbGxiYWNrKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIGRlcHMgPyBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0uY29uY2F0KGRlcHMpIDogW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHRoaXMgY2FzZSBrZXlkb3duIGlzIGxpa2VseSB1bmRlZmluZWQsIHNvIHdlIHNldCBpdCB0byBmYWxzZSwgc2luY2UgaG90a2V5cyBuZWVkcyB0aGUgYGtleWRvd25gIGtleSB0byBoYXZlIGEgdmFsdWUuXG5cblxuICAgIGlmIChrZXl1cCAmJiBrZXlkb3duICE9PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmtleWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBob3RrZXlzKGtleXMsIG9wdGlvbnMgfHwge30sIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW21lbW9pc2VkQ2FsbGJhY2ssIGtleXMsIGVuYWJsZWRdKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleXMuaXNQcmVzc2VkO1xuXG5leHBvcnQgeyBpc0hvdGtleVByZXNzZWQsIHVzZUhvdGtleXMsIHVzZUlzSG90a2V5UHJlc3NlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=
|
|
12
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/OWE0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/MzJhYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLm1vZHVsZS5jc3M/Y2Q0NiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzPzA4NDEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC5tb2R1bGUuY3NzPzFmMTEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gubW9kdWxlLmNzcz80ZWViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gubW9kdWxlLmNzcz8yM2ViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ZTE4OCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLm1vZHVsZS5jc3M/MGVkZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzPzI3YjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQubW9kdWxlLmNzcz8xMjk5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzcz83YWJmIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9JY29uLm1vZHVsZS5jc3M/OWI5MyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/ZDI4ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz9jYzM3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzPzk1YTciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/NDY0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8zNzA5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/OTZkMiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLm1vZHVsZS5jc3M/NTA0OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz8wNDI3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8yMWM1Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9va3MvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9va3MvdXNlT3V0c2lkZUNsaWNrLnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ob3RrZXlzLWpzL2Rpc3QvaG90a2V5cy5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdGtleXMtaG9vay9kaXN0L3JlYWN0LWhvdGtleXMtaG9vay5lc20uanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJyZXF1aXJlIiwiaXNBcnJheSIsIkFycmF5IiwiY2MiLCJvYmoiLCJvdXQiLCJ0bXAiLCJrIiwibGVuZ3RoIiwiZGVmYXVsdCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiYnV0dG9uQmFkZ2UiLCJvbkNsaWNrIiwiY29udGFpbmVyUmVmIiwiZGlzYWJsZWQiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoSG9yaXpvbnRhbGx5Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsImFsaWduIiwic2l6ZSIsInR5cGUiLCJyZWYiLCJjb250YWluZXIiLCJsZWZ0T2Zmc2V0IiwiaW5jbHVkZXMiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiQ29tcG9uZW50IiwicHJvcHMiLCJsYWJlbCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwiZSIsInRhcmdldCIsIkxhYmVsIiwiaW5wdXRSZWYiLCJpbnB1dCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImRpcmVjdGlvbiIsImNvbG9yUGlja2VyIiwibWFwIiwiY29sb3IiLCJDb2xvclN3YXRjaCIsImlzU2VsZWN0ZWQiLCJjb2xvclN3YXRjaCIsInNlbGVjdGVkIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwiYnV0dG9uIiwidXNlSG90a2V5cyIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm92ZXJsYXkiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpZCIsImxheW91dCIsInBsYWNlbWVudCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwic3JjIiwiYWx0IiwiaWNvbiIsImNyb3NzT3JpZ2luIiwiYmFkZ2VDb250ZW50IiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0IiwiSWNvbiIsIkJ1dHRvbkJhZGdlIiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsIndpZHRoIiwiaGVpZ2h0IiwiaGFzT3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsImxpc3QiLCJhY3RpdmUiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b24iLCJCdXR0b25MaW5rIiwiYXMiLCJmb290ZXIiLCJtZW51Iiwib3BlbiIsInNjcm9sbENvbnRhaW5lciIsImZvcndhcmRSZWYiLCJtZW51Q29udGFpbmVyIiwiaXNBY3RpdmUiLCJtZW51SXRlbSIsIm1lbnVMaW5rSXRlbSIsImlzRml4ZWQiLCJvbkJsdXIiLCJvbktleURvd24iLCJpbnB1dEVsZW1lbnQiLCJ0ZXh0SW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwicG9zdGVyIiwibXV0ZWQiLCJsb29wIiwiYXV0b1BsYXkiLCJ2aWRlbyIsInBsYXlzSW5saW5lIiwiaW5pdGlhbFZhbHVlIiwidXNlU3RhdGUiLCJzZXRWYWx1ZSIsIm5ld1ZhbHVlIiwicHJldlZhbHVlIiwiY2FsbGJhY2siLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJoYW5kbGVDbGljayIsImV2ZW50IiwiY3VycmVudCIsImNvbnRhaW5zIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImlzZmYiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImluZGV4T2YiLCJhZGRFdmVudCIsIm1ldGhvZCIsImF0dGFjaEV2ZW50IiwiY29uY2F0Iiwid2luZG93IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsInNsaWNlIiwiZ2V0S2V5cyIsImtleXMiLCJyZXBsYWNlIiwic3BsaXQiLCJpbmRleCIsImxhc3RJbmRleE9mIiwic3BsaWNlIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsImxlZnQiLCJ1cCIsInJpZ2h0IiwiZG93biIsImRlbCIsImRlbGV0ZSIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiJyIsIl9tb2RpZmllciIsInNoaWZ0Iiwib3B0aW9uIiwiY3RybCIsImNvbnRyb2wiLCJjbWQiLCJjb21tYW5kIiwibW9kaWZpZXJNYXAiLCIxNiIsIjE4IiwiMTciLCI5MSIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwieCIsInRvVXBwZXJDYXNlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmIiwiX3JlZiRzcGxpdEtleSIsInNwbGl0S2V5IiwiZm9yRWFjaCIsIm9yaWdpbktleSIsInVuYmluZEtleXMiLCJsZW4iLCJsYXN0S2V5Iiwia2V5Q29kZSIsInJlY29yZCIsImExIiwiYTIiLCJhcnIxIiwiYXJyMiIsImlzSW5kZXgiLCJjb21wYXJlQXJyYXkiLCJldmVudEhhbmRsZXIiLCJoYW5kbGVyIiwibW9kaWZpZXJzTWF0Y2giLCJ5Iiwic2hvcnRjdXQiLCJwcmV2ZW50RGVmYXVsdCIsInJldHVyblZhbHVlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2FuY2VsQnViYmxlIiwiZGlzcGF0Y2giLCJhc3RlcmlzayIsIndoaWNoIiwiY2hhckNvZGUiLCJob3RrZXlzIiwiZmlsdGVyIiwidGhpcyIsInB1c2giLCJrZXlOYW1lIiwia2V5TnVtIiwiZ2V0TW9kaWZpZXJTdGF0ZSIsImtleWRvd24iLCJrZXl1cCIsIl9pIiwia2V5U2hvcnRjdXQiLCJfZG93bktleXNDdXJyZW50IiwiYSIsInNvcnQiLCJqb2luIiwiZWxlbWVudCIsInVuZGVmaW5lZCIsInRvU3RyaW5nIiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInVuYmluZCIsImtleXNJbmZvIiwiaW5mbyIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiQm9vbGVhbiIsIm9wdGlvbnMiLCJkZXBzIiwiX3JlZjIiLCJfcmVmMiRmaWx0ZXJQcmV2ZW50RGUiLCJmaWx0ZXJQcmV2ZW50RGVmYXVsdCIsIl9yZWYyJGVuYWJsZWQiLCJlbmFibGVkIiwiX3JlZjIkZW5hYmxlT25Db250ZW50IiwiZW5hYmxlT25Db250ZW50RWRpdGFibGUiLCJtZW1vaXNlZENhbGxiYWNrIiwia2V5Ym9hcmRFdmVudCIsImhvdGtleXNFdmVudCIsIl9rZXlib2FyZEV2ZW50JHRhcmdldCIsImFjdGl2ZUVsZW1lbnQiLCJpc0hvdGtleVByZXNzZWQiXSwibWFwcGluZ3MiOiI2REFDRSxJQUFJQSxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVQyxRQUduQyxJQUFJQyxFQUFTSixFQUFpQkUsR0FBWSxDQUN6Q0csRUFBR0gsRUFDSEksR0FBRyxFQUNISCxRQUFTLElBVVYsT0FOQUksRUFBUUwsR0FBVU0sS0FBS0osRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU0YsR0FHL0RHLEVBQU9FLEdBQUksRUFHSkYsRUFBT0QsUUEwRGYsT0FyREFGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxF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SCxFQUFNSSxRQUN0QkEsT0FBNEIsSUFBbEJELEdBQWtDQSxFQUM1Q0UsRUFBd0JMLEVBQU1NLHdCQUM5QkEsT0FBb0QsSUFBMUJELEdBQTJDQSxFQUVyRTlTLEVBQU0saUJBQU8sTUFFYmdULEVBQW1CLHVCQUFZLFNBQVVDLEVBQWVDLEdBQzFELElBQUlDLEVBRUosT0FBSXpELElBQVdBLEVBQU91RCxJQUNaTixLQTNCTFIsRUErQitCYyxFQS9CakIsQ0FBQyxRQUFTLFdBQVksYUErQmNkLEVBQVVjLEVBQWViLElBQW1FLE9BQWpEZSxFQUF3QkYsRUFBY2hTLFNBQW1Ca1MsRUFBc0I3QixvQkFBc0J5QixLQUluTCxPQUFoQi9TLEVBQUk4SCxTQUFvQkUsU0FBU29MLGdCQUFrQnBULEVBQUk4SCxXQUN6REwsRUFBU3dMLEVBQWVDLElBQ2pCLEtBSVJWLEVBQU8sQ0FBQ3hTLEVBQUtvUyxFQUFjMUMsR0FBUS9HLE9BQU82SixHQUFRLENBQUN4UyxFQUFLb1MsRUFBYzFDLElBZ0J6RSxPQWZBLHFCQUFVLFdBQ1IsR0FBS21ELEVBVUwsT0FMSTVDLElBQXFCLElBQVpELElBQ1h1QyxFQUFRdkMsU0FBVSxHQUdwQixFQUFROUcsRUFBTXFKLEdBQVcsR0FBSVMsR0FDdEIsV0FDTCxPQUFPLEVBQVF4QixPQUFPdEksRUFBTThKLE1BRTdCLENBQUNBLEVBQWtCOUosRUFBTTJKLElBQ3JCN1MsRUFHVCxJQUFJcVQsRUFBa0IsRUFBUW5DIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEwKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsInZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYyhvYmopIHtcbiAgdmFyIG91dCA9IFwiXCJcblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiKSByZXR1cm4gb2JqIHx8IFwiXCJcblxuICBpZiAoaXNBcnJheShvYmopKVxuICAgIGZvciAodmFyIGsgPSAwLCB0bXA7IGsgPCBvYmoubGVuZ3RoOyBrKyspIHtcbiAgICAgIGlmICgodG1wID0gY2Mob2JqW2tdKSkgIT09IFwiXCIpIHtcbiAgICAgICAgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsgdG1wXG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykgJiYgb2JqW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi9CdXR0b25CYWRnZVwiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIExhYmVsIH0gZnJvbSBcIi4vTGFiZWxcIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uIH0gZnJvbSBcIi4vSWNvblwiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvblwiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9CdXR0b25MaW5rXCI7XHJcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi9Db2xvclN3YXRjaFwiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJsaXN0Vmlld0l0ZW1cIjpcIl8xZmoyYW5pZVEwSkt4Q0Faa1NhYXBrXCJ9OyIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25cIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25MaW5rXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclBpY2tlclwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbG9yU3dhdGNoXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GaWxlSW5wdXRcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25cIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uTGlua1wiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGlzdFZpZXdcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9NZW51XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9PdmVybGF5XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0SW5wdXRcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub2FzdFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1ZpZGVvXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2hvb2tzXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25CYWRnZS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIEJ1dHRvbkJhZGdlUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBCdXR0b25CYWRnZSh7IGNoaWxkcmVuLCBjbGFzc05hbWUgfTogQnV0dG9uQmFkZ2VQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5idXR0b25CYWRnZSwgY2xhc3NOYW1lXSl9PntjaGlsZHJlbn08L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYWRnZTtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJidXR0b25CYWRnZVwiOlwiXzFVbFlGRUdjM2RNZ3RvTmlsNlNPeDVcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgQnV0dG9uUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xyXG4gIHJvdW5kZWQ/OiBib29sZWFuO1xyXG4gIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcclxuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XHJcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xyXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XHJcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcclxuICBzaXplPzogU2l6ZTtcclxuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XHJcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XHJcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcImxlZnRcIiB8IFwicmlnaHRcIj47XHJcbn07XHJcblxyXG5mdW5jdGlvbiBCdXR0b24oe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNsYXNzTmFtZSxcclxuICBvbkNsaWNrLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbiAgcm91bmRlZCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcclxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxyXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxyXG4gIG9mZnNldFNpZGVzID0gW10sXHJcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIHR5cGUsXHJcbn06IEJ1dHRvblByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxidXR0b25cclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcclxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxyXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcclxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcclxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgXSl9XHJcbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XHJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICAgIHR5cGU9e3R5cGV9XHJcbiAgICAgIHJvbGU9XCJidXR0b25cIlxyXG4gICAgPlxyXG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXHJcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXHJcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgKSA6IChcclxuICAgICAgICBjaGlsZHJlblxyXG4gICAgICApfVxyXG4gICAgPC9idXR0b24+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzEydzVXT0YzS3NhMkpCNS1ZT1h5RDdcIixcImxlZnRcIjpcIl8yVEZWNzJEclF4NUpHU2hOY3V0NEUtXCIsXCJzbWFsbFwiOlwidVRCcmNqcEhwOTZSQ3dGNVVEemYwXCIsXCJsYXJnZVwiOlwiXzE0U1NmczVTVldLN054dVpCcU1nekJcIixcInhsYXJnZVwiOlwiXzFTUXUyUVd3MmE3ZXc0N1dXMTJaU2dcIixcImludmVydGVkXCI6XCJfMmhaaGhpOEJnRV9la1FWbjllWDlEWFwiLFwicm91bmRlZFwiOlwiVkJET1NjWWNRblUyZXl0a0FfUGM2XCIsXCJyaWdodE9mZnNldFwiOlwiXzJHVFkzWG1hT3U5MjNNOXNFUnM2YWtcIixcImxlZnRPZmZzZXRcIjpcIl8xNVEwR0drZ1lKX2FMbTAxbkdFNVloXCIsXCJub1NoYWRvd1wiOlwiUmV3bURxanA2blVlRVlIRUt6VEpEXCIsXCJub0JvcmRlclwiOlwiblpxSVVQVDhjWjg3Qlc0cjhreFVcIixcInRyYW5zcGFyZW50XCI6XCJfNjY5bFI0eTJBSDk3QTFseTVNWVdPXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJfM2ljdXRYSHd6SWlvd3Q3YlZhM1lpYlwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl8ya0NreFBrcGxQMXhxamZrZXBveU5wXCIsXCJub1BhZGRpbmdcIjpcIl8za05iQ2djSS1SX0ZGUS0zTzZUMGxhXCIsXCJjb250ZW50XCI6XCJfMmJGMUFTY0V4c2t1T3B1emQtY0RfNlwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgT2Zmc2V0U2lkZSA9IFwibGVmdFwiIHwgXCJyaWdodFwiO1xyXG5cclxudHlwZSBCdXR0b25MaW5rUHJvcHMgPVxyXG4gIHwge1xyXG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xyXG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XHJcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcclxuICAgICAgcm91bmRlZD86IGJvb2xlYW47XHJcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xyXG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XHJcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xyXG4gICAgICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XHJcbiAgICAgIHNpemU/OiBTaXplO1xyXG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xyXG4gICAgICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcclxuICAgIH1cclxuICB8IGFueTtcclxuXHJcbmZ1bmN0aW9uIEJ1dHRvbkxpbmsoe1xyXG4gIGFzOiBDb21wb25lbnQsXHJcbiAgY2hpbGRyZW4sXHJcbiAgY2xhc3NOYW1lLFxyXG4gIHNpemUsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbiAgcm91bmRlZCA9IGZhbHNlLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgbm9TaGFkb3cgPSBmYWxzZSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICBub0JvcmRlciA9IGZhbHNlLFxyXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcclxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxyXG4gIG9mZnNldFNpZGVzID0gW10sXHJcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxyXG4gIC4uLnByb3BzXHJcbn06IEJ1dHRvbkxpbmtQcm9wcykge1xyXG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICBDb21wb25lbnQgPSBcImFcIjtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8Q29tcG9uZW50XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1saW5rXCJcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXHJcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxyXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICBdKX1cclxuICAgICAgey4uLnByb3BzfVxyXG4gICAgPlxyXG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXHJcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXHJcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgKSA6IChcclxuICAgICAgICBjaGlsZHJlblxyXG4gICAgICApfVxyXG4gICAgPC9Db21wb25lbnQ+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uTGluaztcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8yUXU5UmFHNTVwV3lKYVRfXzNfb0ZBXCIsXCJsZWZ0XCI6XCJfM254M2dOUHpqNkxUXzFod25RSHhPSlwiLFwic21hbGxcIjpcIl8yTHZfNnh4MkdsMzM1S1Q5SW9vajNnXCIsXCJtZWRpdW1cIjpcIl8zSHg4cGhhejN6THFOc2VBcE5JV1pIXCIsXCJsYXJnZVwiOlwiXzItT0VZRm9JdmxzNE4yQ1J1WS1lSnJcIixcInhsYXJnZVwiOlwiXzZ4RllBUEFQd0FXbGhtMGdkdG9aUlwiLFwiaW52ZXJ0ZWRcIjpcIl8ycEVHaUszS3VQbkV2d2lPQ0RnRkRhXCIsXCJyb3VuZGVkXCI6XCJfMXp5VktzbW96UFJ0TEhEdF9qNjE0TlwiLFwicmlnaHRPZmZzZXRcIjpcIl8xcll2dHFuWnlJNFJydWxDN0tHY291XCIsXCJsZWZ0T2Zmc2V0XCI6XCJfM1RyN2VPNEVzMUJvdGgyS19zaVRBTlwiLFwibm9TaGFkb3dcIjpcIl8yd1ozR0lJM29OZDhJWDdhZ2EtYU11XCIsXCJ0cmFuc3BhcmVudFwiOlwiXzFUS2dwU1lsX0EwSVNrQmNUMWpseTdcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIl8zcDJUWTRub2RWaXU5angtTHpHQ05lXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiXzNnRXdrUnByblNfSVJFdTNLdE56TURcIixcIm5vUGFkZGluZ1wiOlwiXzJKcEtKcnVtQVRjVFRSVDd4aWZmOWlcIixcIm5vQm9yZGVyXCI6XCJfMVAzUDI3NHdvdTZsRUE4N2c2ckZWMlwiLFwiY29udGVudFwiOlwic05EcnEzY1g2STZRLU91dXN6N1RpXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9DaGVja2JveFwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9DaGVja2JveC5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBvbkNoYW5nZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gIGNoZWNrZWQ/OiBib29sZWFuO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBuYW1lPzogc3RyaW5nO1xyXG4gIHNpemU/OiBTaXplO1xyXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XHJcbiAgaW5kZXRlcm1pbmF0ZT86IGJvb2xlYW47XHJcbn07XHJcblxyXG5mdW5jdGlvbiBDaGVja2JveCh7XHJcbiAgbGFiZWwsXHJcbiAgb25DaGFuZ2UsXHJcbiAgcGxhY2Vob2xkZXIsXHJcbiAgY2hlY2tlZCxcclxuICBkaXNhYmxlZCxcclxuICBuYW1lLFxyXG4gIGluZGV0ZXJtaW5hdGUsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXHJcbn06IENoZWNrYm94UHJvcHMpIHtcclxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcclxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XHJcbiAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKSxcclxuICAgIFtvbkNoYW5nZV1cclxuICApO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPExhYmVsIHZhbHVlPXtsYWJlbH0+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiY2hlY2tib3hcIlxyXG4gICAgICAgIHJlZj17KGlucHV0UmVmKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW5wdXRSZWYpIHtcclxuICAgICAgICAgICAgaW5wdXRSZWYuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfX1cclxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxyXG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW5wdXQsIHN0eWxlc1tzaXplXV0pfVxyXG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxyXG4gICAgICAgIG5hbWU9e25hbWV9XHJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cclxuICAgICAgLz5cclxuICAgIDwvTGFiZWw+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTGFiZWxJbnB1dFByb3BzID0ge1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTExhYmVsRWxlbWVudD47XHJcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGxhYmVsXHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX1cclxuICAgID5cclxuICAgICAge3ZhbHVlfVxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2xhYmVsPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzE1RGJzX1g1SVQ5dGttQXNNWFBOVkpcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpbnB1dFwiOlwiXzFwMmhtam1NMXFOWlRaSWlGSEZJeHVcIixcInNtYWxsXCI6XCJfMUppX185VS1ENVVkVzJOSldXVVByQ1wiLFwibWVkaXVtXCI6XCJfM0tKUzJGUlMydGQ5MFFyNnIzM0wyOFwiLFwibGFyZ2VcIjpcIl8xajdvZENFRVgyRGtnZ3BJWnVGNE1JXCIsXCJ4bGFyZ2VcIjpcIl8zS1p3aFVteEJKZWIyeHRrODhnYUdXXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JQaWNrZXIgfSBmcm9tIFwiLi9Db2xvclBpY2tlclwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IENvbG9yU3dhdGNoIH0gZnJvbSBcIi4uL0NvbG9yU3dhdGNoXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5cclxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xyXG4gIGNvbG9yczogQ29sb3JbXTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xyXG4gIG9uU2VsZWN0OiAoY29sb3I6IENvbG9yKSA9PiB2b2lkO1xyXG4gIHNlbGVjdGVkQ29sb3I/OiBDb2xvcjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIENvbG9yUGlja2VyKHtcclxuICBjb2xvcnMsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIG9uU2VsZWN0LFxyXG4gIHNlbGVjdGVkQ29sb3IsXHJcbiAgZGlyZWN0aW9uID0gXCJ2ZXJ0aWNhbFwiLFxyXG59OiBDb2xvclBpY2tlclByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb2xvclBpY2tlciwgc3R5bGVzW2RpcmVjdGlvbl1dKX1cclxuICAgID5cclxuICAgICAge2NvbG9ycy5tYXAoKGNvbG9yOiBDb2xvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8Q29sb3JTd2F0Y2hcclxuICAgICAgICAgICAga2V5PXtjb2xvci5rZXl9XHJcbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcn1cclxuICAgICAgICAgICAgaXNTZWxlY3RlZD17Y29sb3IgPT09IHNlbGVjdGVkQ29sb3J9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2VsZWN0KGNvbG9yKX1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKTtcclxuICAgICAgfSl9XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb2xvclBpY2tlcjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3NcIjtcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgQ29sb3JTd2F0Y2hQcm9wcyA9IHtcclxuICBjb2xvcjogQ29sb3I7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcclxuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcclxuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIENvbG9yU3dhdGNoKHtcclxuICBjb2xvcixcclxuICBjb250YWluZXJSZWYsXHJcbiAgb25DbGljayxcclxuICBpc1NlbGVjdGVkID0gZmFsc2UsXHJcbn06IENvbG9yU3dhdGNoUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGJ1dHRvblxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmNvbG9yU3dhdGNoLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc1NlbGVjdGVkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cImNvbG9yLXN3YXRjaFwiXHJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogY29sb3IuaGV4Q29kZSB9fVxyXG4gICAgPlxyXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zck9ubHl9PntgU2VsZWN0ICR7Y29sb3IubGFiZWx9IGNvbG9yYH08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb2xvclN3YXRjaDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclN3YXRjaFwiOlwiZHY3aXVjVFFxLVpoVVJVdXAtUHVWXCIsXCJzZWxlY3RlZFwiOlwiXzFMYkFneWlpRV8xdWpXOTBkLTZpdXVcIixcInNyT25seVwiOlwiXzFldGt1c2xoWlZFUE5zazFRZ2hURW9cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclBpY2tlclwiOlwiXzJGMU9uLVNBM21Na2haUEZyRGpXSWNcIixcImhvcml6b250YWxcIjpcIl8xV0ZZeU1ra1lMTDczbl9fclBVVWJ2XCIsXCJ2ZXJ0aWNhbFwiOlwiXzFsSW9hMmJqX3Ria1FpZTBJcEUyTG5cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4uL01vZGFsXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBDb25maXJtYXRpb25Nb2RhbFByb3BzID0ge1xyXG4gIGJ1dHRvbnNMZWZ0PzogUmVhY3RFbGVtZW50W107XHJcbiAgYnV0dG9uc1JpZ2h0PzogUmVhY3RFbGVtZW50W107XHJcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBoZWFkZXI6IHN0cmluZztcclxuICBpc09wZW46IGJvb2xlYW47XHJcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcclxuICBub092ZXJsYXk/OiBib29sZWFuO1xyXG4gIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcclxuICBiYXNlWkluZGV4PzogbnVtYmVyO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQ29uZmlybWF0aW9uTW9kYWwoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBoZWFkZXIsXHJcbiAgaXNPcGVuLFxyXG4gIGJ1dHRvbnNMZWZ0ID0gW10sXHJcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXHJcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgYmFzZVpJbmRleCA9IDEwMTksXHJcbn06IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPE1vZGFsXHJcbiAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBpc09wZW49e2lzT3Blbn1cclxuICAgICAgb25DbG9zZT17b25DbG9zZX1cclxuICAgICAgbm9PdmVybGF5PXtub092ZXJsYXl9XHJcbiAgICAgIG5vU2hhZG93PXtub1NoYWRvd31cclxuICAgICAgYmFzZVpJbmRleD17YmFzZVpJbmRleH1cclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxyXG4gICAgICAgIDxoMSBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEhlYWRlcn0+e2hlYWRlcn08L2gxPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgICBzdHlsZXMubW9kYWxDb250ZW50LFxyXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXHJcbiAgICAgICAgICBdKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnNDb250YWluZXJ9PlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zTGVmdH08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc1JpZ2h0fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvTW9kYWw+XHJcbiAgKTtcclxufVxyXG5cclxuQ29uZmlybWF0aW9uTW9kYWwuZGlzcGxheU5hbWUgPSBcIkNvbmZpcm1hdGlvbk1vZGFsXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb25maXJtYXRpb25Nb2RhbDtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyB1c2VIb3RrZXlzIH0gZnJvbSBcInJlYWN0LWhvdGtleXMtaG9va1wiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01vZGFsLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTW9kYWxQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgaXNPcGVuOiBib29sZWFuO1xyXG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xyXG4gIGJ1dHRvbj86IFJlYWN0Tm9kZTtcclxuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xyXG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XHJcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIE1vZGFsKHtcclxuICBjaGlsZHJlbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgaXNPcGVuLFxyXG4gIGJ1dHRvbixcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9PdmVybGF5ID0gZmFsc2UsXHJcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxyXG4gIGJhc2VaSW5kZXggPSAxMDA5LFxyXG59OiBNb2RhbFByb3BzKSB7XHJcbiAgdXNlSG90a2V5cyhcIkVzY2FwZVwiLCBvbkNsb3NlKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlT3ZlcmxheUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgb25DbG9zZSgpO1xyXG4gIH0sIFtvbkNsb3NlXSk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBpc09wZW4gJiYgKFxyXG4gICAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgICBzdHlsZXMub3ZlcmxheSxcclxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSB9LFxyXG4gICAgICAgICAgXSl9XHJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLW92ZXJsYXlcIlxyXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlT3ZlcmxheUNsaWNrfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMSB9fVxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcclxuICAgICAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdKX1cclxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7YnV0dG9uICYmIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMiB9fVxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge2J1dHRvbn1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1vZGFsO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcIl8yMFpLR1k0VHdaeHAwS1o2RTd5NFdCXCIsXCJub092ZXJsYXlcIjpcIl8yQUx3MnAtREh4WURoWXZSelE0aW5CXCIsXCJtb2RhbFwiOlwiXzI1TEJOMzFfbUkxSTF1SEREUDRPMElcIixcInRyYW5zcGFyZW50XCI6XCJfM1oyS2wxckVIWlFNTFVzWEYxZjdsb1wiLFwibm9TaGFkb3dcIjpcIl8zQ2ZTVC10bi10c3Zjb2RTeGVsaVFxXCIsXCJtb2RhbEJ1dHRvblwiOlwiXzFlTzB4M00wcE44LTc5SXVZdVRfQ2xcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIktnQzVwd3RzSGF2dVZPTHViQUxhZVwiLFwibW9kYWxIZWFkZXJcIjpcIl8xYlROWE1SNW1aRlhzMW8wdXhraFJQXCIsXCJtb2RhbENvbnRlbnRcIjpcInF1UDVvNFE5bmxVbzFmVDdzYlBWQVwiLFwibm9QYWRkaW5nXCI6XCJfMVVnb19ESFNUNFJiV3pJeEhQaGo3blwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJfMmJHTDdYakR5NnNFM0psZVU5OGhqeVwiLFwibW9kYWxCdXR0b25zXCI6XCJfM1hmZkZlTjlWRUlweXRobVZKMlU4Q1wifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEZpbGVJbnB1dCB9IGZyb20gXCIuL0ZpbGVJbnB1dFwiO1xyXG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcclxuXHJcbmV4cG9ydCB0eXBlIEZpbGVJbnB1dFNpemUgPSBTaXplO1xyXG5cclxudHlwZSBQcm9wcyA9IHtcclxuICBvbkNoYW5nZTogKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xyXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgYWNjZXB0Pzogc3RyaW5nO1xyXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XHJcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xyXG4gIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICBub0JvcmRlcj86IGJvb2xlYW47XHJcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcclxuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XHJcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xyXG4gIHJvdW5kZWQ/OiBib29sZWFuO1xyXG4gIHNpemU/OiBGaWxlSW5wdXRTaXplO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gRmlsZUlucHV0KHtcclxuICBjaGlsZHJlbixcclxuICBhY2NlcHQsXHJcbiAgb25DaGFuZ2UsXHJcbiAgaW5wdXRSZWYsXHJcbiAgbXVsdGlwbGUgPSBmYWxzZSxcclxuICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbiAgbm9TaGFkb3cgPSBmYWxzZSxcclxuICBub0JvcmRlciA9IGZhbHNlLFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxyXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXHJcbiAgcm91bmRlZCA9IGZhbHNlLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG59OiBQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8bGFiZWxcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmxhYmVsLFxyXG4gICAgICAgIHN0eWxlc1tzaXplXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxyXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXHJcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pfVxyXG4gICAgPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5pbnB1dH1cclxuICAgICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgaWQ9XCJmaWxlXCJcclxuICAgICAgICBhY2NlcHQ9e2FjY2VwdH1cclxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XHJcbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cclxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxyXG4gICAgICAvPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2xhYmVsPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZpbGVJbnB1dDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpbnB1dFwiOlwiXzNWWHpyNnptVzdUNmFyeDlfdkNBRlZcIixcImxhYmVsXCI6XCJ6N3MyaGR3R1Qza2N6NTFfbUp4bXZcIixcInNtYWxsXCI6XCJfMnpyNThoS2tnY3dZTUIxd3VBSnRvUlwiLFwibGFyZ2VcIjpcIl8xQ05iTGVqSTQ2ajNDU1JVN3RRR2JlXCIsXCJ4bGFyZ2VcIjpcIl8ydGplWGR3eDMtZG5TXzkyMXJ1cEJsXCIsXCJpbnZlcnRlZFwiOlwiXzMybGRMTUVMa1N5ZFhlb2c4QkNCaS1cIixcInJvdW5kZWRcIjpcIlhuNERmN3JReG0wUUFITmV1dk5MXCIsXCJub1NoYWRvd1wiOlwiTmVBT29ZZ2IwaE9QblRWend0Z0REXCIsXCJub0JvcmRlclwiOlwiXzN3VnpiNFBScWh4dXBYanVCMFJCbFNcIixcIm5vUGFkZGluZ1wiOlwiXzF4UHRYZWpfbWhQRGJsenZjcmxmTzhcIixcInRyYW5zcGFyZW50XCI6XCJTMHpEZmdzVTFEZ08wVXVUU09mazRcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcImVtZWdMQ0gtV19uN0t1VEpsT3NRQVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIlZIWlI2aFdLNmZTRGZSTHVoSDdvTlwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEZsb2F0aW5nUGFuZWwgfSBmcm9tIFwiLi9GbG9hdGluZ1BhbmVsXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBQbGFjZW1lbnQgPSB7XHJcbiAgaG9yaXpvbnRhbDpcclxuICAgIHwgXCJyaWdodFwiXHJcbiAgICB8IFwicmlnaHRFZGdlXCJcclxuICAgIHwgXCJyaWdodE9uRWRnZVwiXHJcbiAgICB8IFwibGVmdFwiXHJcbiAgICB8IFwibGVmdEVkZ2VcIlxyXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxyXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxyXG4gICAgfCBcImNlbnRlclwiO1xyXG4gIHZlcnRpY2FsOlxyXG4gICAgfCBcInRvcFwiXHJcbiAgICB8IFwidG9wRWRnZVwiXHJcbiAgICB8IFwidG9wT25FZGdlXCJcclxuICAgIHwgXCJib3R0b21cIlxyXG4gICAgfCBcImJvdHRvbUVkZ2VcIlxyXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXHJcbiAgICB8IFwiY2VudGVyXCI7XHJcbiAgcGFyZW50OiBcInZpZXdwb3J0XCIgfCBcImNvbnRhaW5lclwiO1xyXG59O1xyXG5cclxudHlwZSBGbG9hdGluZ1BhbmVsUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGxheW91dD86IFwiY29sdW1uXCIgfCBcInJvd1wiO1xyXG4gIHBsYWNlbWVudD86IFBsYWNlbWVudDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIEZsb2F0aW5nUGFuZWwoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBsYXlvdXQgPSBcImNvbHVtblwiLFxyXG4gIHBsYWNlbWVudCA9IHsgaG9yaXpvbnRhbDogXCJjZW50ZXJcIiwgdmVydGljYWw6IFwiYm90dG9tXCIsIHBhcmVudDogXCJ2aWV3cG9ydFwiIH0sXHJcbn06IEZsb2F0aW5nUGFuZWxQcm9wcykge1xyXG4gIGNvbnN0IGhvcml6b250YWxQbGFjZW1lbnQgPVxyXG4gICAgcGxhY2VtZW50Lmhvcml6b250YWwgPT09IFwiY2VudGVyXCJcclxuICAgICAgPyBcImhvcml6b250YWxDZW50ZXJcIlxyXG4gICAgICA6IHBsYWNlbWVudC5ob3Jpem9udGFsO1xyXG5cclxuICBjb25zdCB2ZXJ0aWNhbFBsYWNlbWVudCA9XHJcbiAgICBwbGFjZW1lbnQudmVydGljYWwgPT09IFwiY2VudGVyXCIgPyBcInZlcnRpY2FsQ2VudGVyXCIgOiBwbGFjZW1lbnQudmVydGljYWw7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cImZsb2F0aW5nLXBhbmVsXCJcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcclxuICAgICAgICBzdHlsZXNbaG9yaXpvbnRhbFBsYWNlbWVudF0sXHJcbiAgICAgICAgc3R5bGVzW3ZlcnRpY2FsUGxhY2VtZW50XSxcclxuICAgICAgICBzdHlsZXNbbGF5b3V0XSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogcGxhY2VtZW50LnBhcmVudCAhPT0gXCJjb250YWluZXJcIixcclxuICAgICAgICB9LFxyXG4gICAgICBdKX1cclxuICAgID5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8ycjBGa1lKN1NLMVlqQjNIS0hNQWloXCIsXCJyb3dcIjpcIl8zUi1GRjhlTXUwQ1M0ZU5YM2xUZENSXCIsXCJjb2x1bW5cIjpcIl8xb0tPZUFnWmp3eE5NM3VHZkx0NklPXCIsXCJmaXhlZFwiOlwiXzNvUUdXZ1NJTmJ5dGI0dXY5MkNTdlRcIixcInBsYWluXCI6XCJpTWY4b2QtYklxc0hBdnhvZkR1emJcIixcInRyYW5zcGFyZW50XCI6XCJkMm95eDVweXNxajg5OGFTOEczRThcIixcInRvcFwiOlwiXzExY1BZcTFkaFF5elZJTVplazFfSW9cIixcInRvcEVkZ2VcIjpcIl8yX2luZUN5MU1RbFlQNnFNZXdkMXo1XCIsXCJ0b3BPbkVkZ2VcIjpcIl8xcnZDc0RvZDVibFRPeUFsNGtEd04wXCIsXCJyaWdodFwiOlwiXzFTSVlCY1JncVM0VlBoVzlNODBZNHpcIixcInJpZ2h0RWRnZVwiOlwiUUE2OWYwRDhiVENKSHJET3I4bTFyXCIsXCJyaWdodE9uRWRnZVwiOlwiXzJQaVRVbDBKWXpFQ25PMDg1MWd6M2FcIixcImJvdHRvbVwiOlwiXzMwNWdCbVR3QWVYWmZBX005dHNWTm9cIixcImJvdHRvbUVkZ2VcIjpcIl8xUGNEWGJMWjJYSFBrZWlfSF9yNThwXCIsXCJib3R0b21PbkVkZ2VcIjpcIl8ydm90NHFwcjU4V25iNnB2SFluamtjXCIsXCJsZWZ0XCI6XCJzSXRnQlY0V3REeDR2WjNhLVA0aXhcIixcImxlZnRFZGdlXCI6XCJfMU5KMUZ6SV9hYktpLVc2a2MycjJjNlwiLFwibGVmdE9uRWRnZVwiOlwiXzEyRXZ3YmFWUU5XUFplMzdTbzhMX21cIixcImhvcml6b250YWxDZW50ZXJcIjpcIl8yamlTeEViQ1RLVnpEdGVHUTF1b0VmXCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiXzJmOUQ0NkJCLWdlelB2dzhUWnhKdnBcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbi5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIEljb25Qcm9wcyA9IHtcclxuICBhbHQ/OiBzdHJpbmc7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxJbWFnZUVsZW1lbnQ+O1xyXG4gIGludmVydGVkPzogYm9vbGVhbjtcclxuICBzcmM6IHN0cmluZztcclxuICBzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIiB8IFwieGxhcmdlXCI7XHJcbn07XHJcbmZ1bmN0aW9uIEljb24oe1xyXG4gIHNyYyxcclxuICBhbHQsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIGludmVydGVkID0gZmFsc2UsXHJcbn06IEljb25Qcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8aW1nXHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMuaWNvbixcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAgeyBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQgfSxcclxuICAgICAgXSl9XHJcbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcclxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uXCJcclxuICAgICAgYWx0PXthbHR9XHJcbiAgICAgIHNyYz17c3JjfVxyXG4gICAgLz5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJY29uO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImljb25cIjpcIl8zM2NUTThpOHFhakZHeS0wMHR5MFJ3XCIsXCJzbWFsbFwiOlwiTVVpM2lremNQWmRvNTlBZm9YZE9GXCIsXCJtZWRpdW1cIjpcIl8yVkNLcXk1OU5TRmRmRGlFMG94YXN6XCIsXCJsYXJnZVwiOlwiXzJVVVVmMm5fYTBQWXBROGtvd0tIenBcIixcInhsYXJnZVwiOlwib0RJRVk4VTRUd0NKa2pGN3hhUUJPXCIsXCJpbnZlcnRlZFwiOlwiXzJxelV0VTFUZF9jNTh2TThBTHFTVldcIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uIH0gZnJvbSBcIi4vSWNvbkJ1dHRvblwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b24ubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBCdXR0b25CYWRnZSB9IGZyb20gXCIuLi9CdXR0b25CYWRnZVwiO1xyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG50eXBlIEljb25CdXR0b25Qcm9wcyA9IHtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcclxuICBzcmM6IHN0cmluZztcclxuICBhbHQ6IHN0cmluZztcclxuICBiYWRnZUNvbnRlbnQ/OiBSZWFjdE5vZGU7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIGludmVydGVkPzogYm9vbGVhbjtcclxuICBub1NoYWRvdz86IGJvb2xlYW47XHJcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xyXG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICByb3VuZGVkPzogYm9vbGVhbjtcclxuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xyXG4gIHNpemU/OiBTaXplO1xyXG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcclxuICBvZmZzZXRTaWRlcz86IEFycmF5PFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI+O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gSWNvbkJ1dHRvbih7XHJcbiAgY2xhc3NOYW1lLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBzcmMsXHJcbiAgYWx0LFxyXG4gIGJhZGdlQ29udGVudCA9IG51bGwsXHJcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcclxuICBvbkNsaWNrID0gKCkgPT4ge30sXHJcbiAgZGlzYWJsZWQgPSBmYWxzZSxcclxuICBpbnZlcnRlZCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIHJvdW5kZWQgPSBmYWxzZSxcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICB0eXBlID0gXCJidXR0b25cIixcclxufTogSWNvbkJ1dHRvblByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxidXR0b25cclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcclxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXHJcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXHJcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGFzc05hbWUsXHJcbiAgICAgIF0pfVxyXG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICAgIHR5cGU9e3R5cGV9XHJcbiAgICAgIHJvbGU9XCJidXR0b25cIlxyXG4gICAgPlxyXG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cclxuICAgICAge2JhZGdlQ29udGVudCAmJiA8QnV0dG9uQmFkZ2U+e2JhZGdlQ29udGVudH08L0J1dHRvbkJhZGdlPn1cclxuICAgIDwvYnV0dG9uPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b247XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJSZ3lsbFhUcXAzX2paNkEyTmJ2ZzZcIixcInNtYWxsXCI6XCJfMXcwaFpsT2JlTDdFRzg3enNMLTl2TlwiLFwibWVkaXVtXCI6XCJFSzFidkpaalcxMTlEbzc5U3RMN0lcIixcImxhcmdlXCI6XCJQZ3lRWEsxeXlDTXE4QlNhWUNiY2hcIixcInhsYXJnZVwiOlwicWhrSHpJb0lvd25yZXhIelFTdXVVXCIsXCJyb3VuZGVkXCI6XCJfM3FxYTFrMEM5Sk1Qc0JSU3o2WjB5WVwiLFwidG9wT2Zmc2V0XCI6XCJfM1ZaUDdEb2hoWjd6OGZpNHotSDhqTlwiLFwicmlnaHRPZmZzZXRcIjpcIl8yWFhoSjMtY1ljWGJJVk5tbW5POHlIXCIsXCJib3R0b21PZmZzZXRcIjpcIlpKSVg3VnE1bXVzamQ2czRoQ1NiUFwiLFwibGVmdE9mZnNldFwiOlwiXzFRVldpeWl2VzlVeGVvTnUzVWRudjZcIixcImludmVydGVkXCI6XCJfMmpaelhobkhxcWJ0dW00ZEJkbDFsS1wiLFwibm9TaGFkb3dcIjpcIl8zZnh2V2lPTkZGWXRNdURjWHA4c3l1XCIsXCJub0JvcmRlclwiOlwiXzNFdXh1cG5xT1Z1U29Vc2JLek5uXCIsXCJ0cmFuc3BhcmVudFwiOlwiXzM1YlJJaThCdEQ0UktTSnZaYmpfc21cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uTGluayB9IGZyb20gXCIuL0ljb25CdXR0b25MaW5rXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuXHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XHJcblxyXG50eXBlIE9mZnNldFNpZGUgPSBcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiO1xyXG5cclxudHlwZSBJY29uQnV0dG9uTGlua1Byb3BzID1cclxuICB8IHtcclxuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcclxuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcclxuICAgICAgc3JjOiBzdHJpbmc7XHJcbiAgICAgIGFsdDogc3RyaW5nO1xyXG4gICAgICBiYWRnZUNvbnRlbnQ/OiBSZWFjdE5vZGU7XHJcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcclxuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xyXG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcclxuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XHJcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcclxuICAgICAgc2l6ZT86IFNpemU7XHJcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XHJcbiAgICB9XHJcbiAgfCBhbnk7XHJcblxyXG5mdW5jdGlvbiBJY29uQnV0dG9uTGluayh7XHJcbiAgYXM6IENvbXBvbmVudCxcclxuICBjb250YWluZXJSZWYsXHJcbiAgY2xhc3NOYW1lLFxyXG4gIHNyYyxcclxuICBhbHQsXHJcbiAgYmFkZ2VDb250ZW50ID0gbnVsbCxcclxuICBpbnZlcnRlZCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIHJvdW5kZWQgPSBmYWxzZSxcclxuICBvZmZzZXRTaWRlcyA9IFtdLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIC4uLnByb3BzXHJcbn06IEljb25CdXR0b25MaW5rUHJvcHMpIHtcclxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPENvbXBvbmVudFxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uLWJ1dHRvbi1saW5rXCJcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcclxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcclxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcclxuICAgICAgICAgIFtzdHlsZXMudG9wT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInRvcFwiKSxcclxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXHJcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgXSl9XHJcbiAgICAgIHsuLi5wcm9wc31cclxuICAgID5cclxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XHJcbiAgICAgIHtiYWRnZUNvbnRlbnQgJiYgPEJ1dHRvbkJhZGdlPntiYWRnZUNvbnRlbnR9PC9CdXR0b25CYWRnZT59XHJcbiAgICA8L0NvbXBvbmVudD5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uTGluaztcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8zd2p4akN6dl9scGhkV203M0pnQXlwXCIsXCJzbWFsbFwiOlwiXzMyTVltWmJIelVVMGIzZE1jbUpzaU1cIixcIm1lZGl1bVwiOlwiXzE4OXJZSjJUdmFCeXJDM1M3Q2Yzbm1cIixcImxhcmdlXCI6XCJfMmFZU1NUVWc4d3ZyQURPUzE4OHhNXCIsXCJ4bGFyZ2VcIjpcInZzM0tZdlU3WmNuaHcyU095U0NOZlwiLFwicm91bmRlZFwiOlwiXzE4aWg2N0xMMG43WGw2MWdMRzhzMGtcIixcInRvcE9mZnNldFwiOlwiXzFwN2g3VzZRc0RIcGJhNm1neVdVTDlcIixcInJpZ2h0T2Zmc2V0XCI6XCJfM2Z4TUlCX0p6NUNZSWZ3dVpoUTI4aVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJfMTEzbTRDV2ltTHZzalU5eEl4UHE3aVwiLFwibGVmdE9mZnNldFwiOlwiXzZDaG92Mk1veVV4eWhXeEtuMzY4S1wiLFwiaW52ZXJ0ZWRcIjpcIl8zZXFPSlF6NHVlLWVYTHZxMjdBc1k1XCIsXCJub1NoYWRvd1wiOlwibEY2RF9WMjB4MzJ2OVp5c3F3QzY4XCIsXCJub0JvcmRlclwiOlwiXzNzNnFDb2xManBqbDRScm83bVZUeFNcIixcInRyYW5zcGFyZW50XCI6XCJfMklaTzlwSzEzMVU5MWN5S1hpeGd4RFwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEltYWdlLCBJbWFnZVByb3BzIH0gZnJvbSBcIi4vSW1hZ2VcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ltYWdlLm1vZHVsZS5jc3NcIjtcclxuXHJcbmV4cG9ydCB0eXBlIEltYWdlUHJvcHMgPSB7XHJcbiAgYWx0Pzogc3RyaW5nO1xyXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgbGF5b3V0PzogXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcclxuICBzcmM6IHN0cmluZztcclxuICBzcmNXaWR0aD86IG51bWJlcjtcclxuICBzcmNIZWlnaHQ/OiBudW1iZXI7XHJcbiAgZGVjb2Rpbmc/OiBcImFzeW5jXCIgfCBcInN5bmNcIiB8IFwiYXV0b1wiLFxyXG4gIGxvYWRpbmc/OiBcImVhZ2VyXCIgfCBcImxhenlcIlxyXG59O1xyXG5cclxuZnVuY3Rpb24gSW1hZ2VDb21wb25lbnQoe1xyXG4gIHNyYyxcclxuICBhbHQsXHJcbiAgc3JjV2lkdGgsXHJcbiAgc3JjSGVpZ2h0LFxyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcclxuICBkZWNvZGluZz0gXCJhdXRvXCIsXHJcbiAgbG9hZGluZz0gXCJlYWdlclwiXHJcbn06IEltYWdlUHJvcHMpIHtcclxuICBjb25zdCBpbWFnZUVsZW1lbnQgPSAoXHJcbiAgICA8aW1nXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5pbWFnZSwgc3R5bGVzW2xheW91dF1dKX1cclxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxyXG4gICAgICBkYXRhLXRlc3RpZD1cImltYWdlXCJcclxuICAgICAgYWx0PXthbHR9XHJcbiAgICAgIHNyYz17c3JjfVxyXG4gICAgICB3aWR0aD17c3JjV2lkdGh9XHJcbiAgICAgIGhlaWdodD17c3JjSGVpZ2h0fVxyXG4gICAgICBkZWNvZGluZz17ZGVjb2Rpbmd9XHJcbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XHJcbiAgICAvPlxyXG4gICk7XHJcblxyXG4gIHJldHVybiBjaGlsZHJlbiA/IChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XHJcbiAgICA+XHJcbiAgICAgIHtpbWFnZUVsZW1lbnR9XHJcbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XHJcbiAgICA8L2Rpdj5cclxuICApIDogKFxyXG4gICAgaW1hZ2VFbGVtZW50XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VDb21wb25lbnQ7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfMVYwMEdwel9rZXFVV0dFZlo3NHdqU1wiLFwiaGFzT3ZlcmxheVwiOlwiXzJNdFVmWXB3NVY4VXByeHFfRV95U2FcIixcIm92ZXJsYXlcIjpcInoxRFZIeGoxWlBLNzNPSVFSY2s3alwiLFwiaW1hZ2VcIjpcIl8zOU9qVEdXZDd4bXhjbDZudUktZzJMXCIsXCJjb3ZlclwiOlwiXzNxS2RwMm1LNmY3RzV6QXpYbHpnckVcIixcImNvbnRhaW5cIjpcIl8yb19HNFhiQi1Rb3piZnVrNF9WMDBoXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJfMnhndURrR3UxbVIyeVBhWS1oek44b1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl8xOVdNYTN0cVJ4dlVoREtGWjhZMlBCXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXcgfSBmcm9tIFwiLi9MaXN0Vmlld1wiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3SXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3SXRlbVwiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3TGlua0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0xpbmtJdGVtXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3Lm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTGlzdFZpZXdQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGhlYWRlcj86IHN0cmluZztcclxuICBoZWFkZXJBY3Rpb25zPzogUmVhY3ROb2RlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTGlzdFZpZXcoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNsYXNzTmFtZSxcclxuICBjb250YWluZXJSZWYsXHJcbiAgaGVhZGVyLFxyXG4gIGhlYWRlckFjdGlvbnMsXHJcbn06IExpc3RWaWV3UHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxyXG4gICAgICB7KGhlYWRlciB8fCBoZWFkZXJBY3Rpb25zKSAmJiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PlxyXG4gICAgICAgICAge2hlYWRlciAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9PntoZWFkZXJ9PC9oMz59XHJcbiAgICAgICAgICB7aGVhZGVyQWN0aW9uc31cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKX1cclxuICAgICAgPHVsIGNsYXNzTmFtZT17c3R5bGVzLmxpc3R9PntjaGlsZHJlbn08L3VsPlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXc7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJEY1dvRWJpb2w5cHgtRlFBX1RwT2tcIixcImhlYWRlclwiOlwiXzJqYXZCOHNBRHg2ZERncVhOM01DTFBcIixcImhlYWRlckxhYmVsXCI6XCJfM2lNT2ZJeU5MMVNFbXYySjhaRERtV1wiLFwibGlzdFwiOlwiXzNfS210Yk1QcFBIZ0pGTTlaQl94bkFcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XHJcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBMaXN0Vmlld0l0ZW1Qcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gIHNpemU/OiBTaXplO1xyXG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xyXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTGlzdFZpZXdJdGVtKHtcclxuICBjaGlsZHJlbixcclxuICBhY3RpdmUgPSBmYWxzZSxcclxuICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxyXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcclxufTogTGlzdFZpZXdJdGVtUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XHJcbiAgICAgIDxCdXR0b25cclxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxyXG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cclxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cclxuICAgICAgICBhbGlnbj17YWxpZ259XHJcbiAgICAgICAgc2l6ZT17c2l6ZX1cclxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XHJcbiAgICAgICAgbm9TaGFkb3dcclxuICAgICAgICBub0JvcmRlclxyXG4gICAgICA+XHJcbiAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICA8L0J1dHRvbj5cclxuICAgIDwvbGk+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdJdGVtO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBCdXR0b25MaW5rIH0gZnJvbSBcIi4uL0J1dHRvbkxpbmtcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG50eXBlIExpc3RWaWV3TGlua0l0ZW1Qcm9wcyA9XHJcbiAgfCB7XHJcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XHJcbiAgICAgIGFjdGl2ZTogYm9vbGVhbjtcclxuICAgICAgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XHJcbiAgICAgIG5vUGFkZGluZzogYm9vbGVhbjtcclxuICAgICAgYWxpZ246IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcclxuICAgICAgc2l6ZTogU2l6ZTtcclxuICAgIH1cclxuICB8IGFueTtcclxuXHJcbmZ1bmN0aW9uIExpc3RWaWV3TGlua0l0ZW0oe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGFzOiBDb21wb25lbnQsXHJcbiAgYWN0aXZlID0gZmFsc2UsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICBhbGlnbiA9IFwiY2VudGVyXCIsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgLi4ucHJvcHNcclxufTogTGlzdFZpZXdMaW5rSXRlbVByb3BzKSB7XHJcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgIENvbXBvbmVudCA9IFwiYVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxyXG4gICAgICA8QnV0dG9uTGlua1xyXG4gICAgICAgIGFzPXtDb21wb25lbnR9XHJcbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cclxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XHJcbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XHJcbiAgICAgICAgYWxpZ249e2FsaWdufVxyXG4gICAgICAgIHNpemU9e3NpemV9XHJcbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxyXG4gICAgICAgIG5vU2hhZG93XHJcbiAgICAgICAgbm9Cb3JkZXJcclxuICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgID5cclxuICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgIDwvQnV0dG9uTGluaz5cclxuICAgIDwvbGk+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdMaW5rSXRlbTtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51IH0gZnJvbSBcIi4vTWVudVwiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XHJcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUl0ZW0gfSBmcm9tIFwiLi9NZW51SXRlbVwiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVMaW5rSXRlbSB9IGZyb20gXCIuL01lbnVMaW5rSXRlbVwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Lm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTWVudVByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgaXNPcGVuPzogYm9vbGVhbjtcclxuICBoZWFkZXI/OiBzdHJpbmc7XHJcbiAgZm9vdGVyPzogUmVhY3ROb2RlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTWVudSh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGNsYXNzTmFtZSxcclxuICBpc09wZW4gPSB0cnVlLFxyXG4gIGhlYWRlcixcclxuICBmb290ZXIsXHJcbn06IE1lbnVQcm9wcykge1xyXG4gIGlmICghaXNPcGVuKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgICBzdHlsZXMubWVudSxcclxuICAgICAgICAgIHsgW3N0eWxlcy5vcGVuXTogaXNPcGVuIH0sXHJcbiAgICAgICAgICBjbGFzc05hbWUsXHJcbiAgICAgICAgXSl9XHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnNjcm9sbENvbnRhaW5lcn0+XHJcbiAgICAgICAgICB7aGVhZGVyICYmIGlzT3BlbiAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT57aGVhZGVyfTwvaDM+fVxyXG4gICAgICAgICAgPHVsPntpc09wZW4gJiYgY2hpbGRyZW59PC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7Zm9vdGVyICYmIGlzT3BlbiAmJiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgICAgIHN0eWxlcy5mb290ZXIsXHJcbiAgICAgICAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogIWNoaWxkcmVuIH0sXHJcbiAgICAgICAgICAgIF0pfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7Zm9vdGVyfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8Lz5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNZW51O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVcIjpcIl8xTDUtcHZfUDZNMm9HZW9SZU1uTzJKXCIsXCJvcGVuXCI6XCJfMUo3cEZrdmtqUVFSV2ttZy0wWFRXWlwiLFwiZW50cmFuY2VcIjpcIl8zY3Flc1FHZjlDeXU2NkRzb0t0RjBxXCIsXCJoZWFkZXJcIjpcInBPUFlhVjAxbzlXQjdCdzRWZ2l3XCIsXCJmb290ZXJcIjpcIl8zbUNjY252TmROLVhaWlM3UEx4YXYwXCIsXCJub0JvcmRlclwiOlwiXzI2dFVPZjlnSS1hUmZhZl9JZXlQVUlcIixcInNjcm9sbENvbnRhaW5lclwiOlwiXzFtcU1VcmQxMy0xVGxvdkdDQk9lcGZcIn07IiwiaW1wb3J0IFJlYWN0LCB7XHJcbiAgUmVhY3ROb2RlLFxyXG4gIFJlYWN0RWxlbWVudCxcclxuICBmb3J3YXJkUmVmLFxyXG4gIEZvcndhcmRlZFJlZixcclxufSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcclxuXHJcbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XHJcbiAgaG9yaXpvbnRhbDogXCJyaWdodFwiIHwgXCJsZWZ0XCI7XHJcbiAgdmVydGljYWw6IFwidG9wXCIgfCBcImJvdHRvbVwiO1xyXG59O1xyXG5cclxudHlwZSBNZW51Q29udGFpbmVyUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBidXR0b24/OiBSZWFjdEVsZW1lbnQ7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxyXG4gIHtcclxuICAgIGNoaWxkcmVuLFxyXG4gICAgYnV0dG9uLFxyXG4gICAgY2xhc3NOYW1lLFxyXG4gICAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImxlZnRcIiwgdmVydGljYWw6IFwiYm90dG9tXCIgfSxcclxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXHJcbiAgcmVmOiBGb3J3YXJkZWRSZWY8SFRNTERpdkVsZW1lbnQ+XHJcbikge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IHJlZj17cmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XHJcbiAgICAgIHtidXR0b259XHJcblxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgICBzdHlsZXMubWVudUNvbnRhaW5lcixcclxuICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQuaG9yaXpvbnRhbF0sXHJcbiAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50LnZlcnRpY2FsXSxcclxuICAgICAgICBdKX1cclxuICAgICAgPlxyXG4gICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmb3J3YXJkUmVmKE1lbnVDb250YWluZXIpO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzNENElRWldDdEg4TVRYcnY1OU1ZS0ZcIixcIm1lbnVDb250YWluZXJcIjpcIl8xXzJzRkZWek5YbUpYX1BUcEhaZ0VMXCIsXCJ0b3BcIjpcIlF2QzR5Nm1mMVlXLWJsSzZQU041SVwiLFwicmlnaHRcIjpcIl8zbXJWYndrbVZtbGNGRGFkUG9lY2M3XCIsXCJsZWZ0XCI6XCJYZlE0YmpuS0ZhQVltUVR1UkstNkFcIixcImJvdHRvbVwiOlwiXzM5X3R5Ylg1Slo2WS11ajQ3Z1BzS1ZcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51SXRlbS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xyXG4gIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxMSUVsZW1lbnQ+KSA9PiB2b2lkO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTWVudUl0ZW0oe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNsYXNzTmFtZSxcclxuICBvbkNsaWNrLFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIGlzQWN0aXZlID0gZmFsc2UsXHJcbn06IE1lbnVJdGVtUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGxpXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcclxuICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUgfSxcclxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXHJcbiAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICBdKX1cclxuICAgICAgb25DbGljaz17b25DbGlja31cclxuICAgID5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9saT5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51SXRlbVwiOlwiXzJLc1JDRWdFX003d29YamhwUnVWdW9cIixcIm5vUGFkZGluZ1wiOlwiXzJjcU1KSEp5Q2pBVThaUFpBVjBZRDVcIixcImFjdGl2ZVwiOlwiXzFYblhaaUFyaHZVZXlYZ3FVYUctUDdcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51TGlua0l0ZW0ubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XHJcbiAgfCB7XHJcbiAgICAgIGFzOiBFbGVtZW50VHlwZTtcclxuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XHJcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgICB9XHJcbiAgfCBhbnk7XHJcblxyXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xyXG4gIGFzOiBDb21wb25lbnQsXHJcbiAgY2hpbGRyZW4sXHJcbiAgY2xhc3NOYW1lLFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIC4uLnByb3BzXHJcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XHJcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgIENvbXBvbmVudCA9IFwiYVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxDb21wb25lbnRcclxuICAgICAgZGF0YS10ZXN0aWQ9XCJtZW51LWxpbmstaXRlbVwiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXHJcbiAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcclxuICAgICAgXSl9XHJcbiAgICAgIHsuLi5wcm9wc31cclxuICAgID5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9Db21wb25lbnQ+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVudUxpbmtJdGVtO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwiXzN6NXQ5Q0FoY0F3Vk90T1ZsQV80R3dcIixcIm5vUGFkZGluZ1wiOlwiYk5YaWt5RVpJSU9NMUhnc0FpM2Z0XCIsXCJhY3RpdmVcIjpcIl8xWi1tUHZld0dVZzQ4NFFQYzlIeHEyXCIsXCJtZW51SXRlbVwiOlwiXzN0SVdBaE1EdFB6QUg0YkFyd3BST3ZcIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5IH0gZnJvbSBcIi4vT3ZlcmxheVwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL092ZXJsYXkubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBPdmVybGF5UHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICBpc0ZpeGVkPzogYm9vbGVhbjtcclxuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIE92ZXJsYXkoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIGlzRml4ZWQgPSBmYWxzZSxcclxuICBvbkNsaWNrID0gKCkgPT4ge30sXHJcbn06IE92ZXJsYXlQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cIm92ZXJsYXlcIlxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMub3ZlcmxheSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogaXNGaXhlZCxcclxuICAgICAgICB9LFxyXG4gICAgICBdKX1cclxuICAgICAgb25DbGljaz17b25DbGlja31cclxuICAgID5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgT3ZlcmxheTtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJJMGRtLUxkbS1TaVMwdjVYLXZvMGdcIixcInRyYW5zcGFyZW50XCI6XCJfM3FkRGRseW5ITG5vZk4xREt2dllROFwiLFwiZml4ZWRcIjpcIl8xZ1h5OVhTM0YtSnRxZGpaQmNvS1N3XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGV4dElucHV0IH0gZnJvbSBcIi4vVGV4dElucHV0XCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IFNpemUsIFRleHRJbnB1dFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgVGV4dElucHV0UHJvcHMgPSB7XHJcbiAgbGFiZWw/OiBzdHJpbmc7XHJcbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcclxuICBvbkJsdXI/OiAoKSA9PiB2b2lkO1xyXG4gIG9uS2V5RG93bj86IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICB2YWx1ZT86IHN0cmluZztcclxuICBuYW1lPzogc3RyaW5nO1xyXG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xyXG4gIHNpemU/OiBTaXplO1xyXG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcclxuICBhdXRvRm9jdXM/OiBib29sZWFuO1xyXG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gVGV4dElucHV0KHtcclxuICBsYWJlbCxcclxuICBvbkNoYW5nZSxcclxuICBvbkJsdXIsXHJcbiAgb25LZXlEb3duLFxyXG4gIHBsYWNlaG9sZGVyLFxyXG4gIHZhbHVlLFxyXG4gIG5hbWUsXHJcbiAgaW5wdXRSZWYsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgdHlwZSA9IFwidGV4dFwiLFxyXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxyXG4gIG5vQm9yZGVyID0gZmFsc2UsXHJcbn06IFRleHRJbnB1dFByb3BzKSB7XHJcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXHJcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XHJcbiAgICAgIGlmIChvbkNoYW5nZSkge1xyXG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBbb25DaGFuZ2VdXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxyXG4gICAgPGlucHV0XHJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxyXG4gICAgICByZWY9e2lucHV0UmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudGV4dElucHV0LCBzdHlsZXNbc2l6ZV0sIHtbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXJ9XSl9XHJcbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgIG9uQmx1cj17b25CbHVyfVxyXG4gICAgICBvbktleURvd249e29uS2V5RG93bn1cclxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxyXG4gICAgICBuYW1lPXtuYW1lfVxyXG4gICAgICB0eXBlPXt0eXBlfVxyXG4gICAgICB2YWx1ZT17dmFsdWV9XHJcbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxyXG4gICAgLz5cclxuICApO1xyXG4gIGlmIChsYWJlbCkge1xyXG4gICAgcmV0dXJuIDxMYWJlbCB2YWx1ZT17bGFiZWx9PntpbnB1dEVsZW1lbnR9PC9MYWJlbD47XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiA8PntpbnB1dEVsZW1lbnR9PC8+O1xyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBUZXh0SW5wdXQ7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGV4dElucHV0XCI6XCJfMmlmRlRCeXh2UUY1ZVJZd01BU2FlN1wiLFwic21hbGxcIjpcIl8xOGlMTmhxYzVUejVQUG8yazRfVEJoXCIsXCJtZWRpdW1cIjpcIl8xamFSeWplYXRKUnhFdWpnUEd6V3p4XCIsXCJsYXJnZVwiOlwiXzM0ZDVIM1g4VzBVZ1g5QjhkdFBSQU9cIixcInhsYXJnZVwiOlwiXzNzdDhFR291bk9nak51THBvRXJDMHNcIixcIm5vQm9yZGVyXCI6XCJwdFJaN0E1Z2lXN0ZCM21rOFFMQ01cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdCB9IGZyb20gXCIuL1RvYXN0XCI7XHJcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3RDb250YWluZXIgfSBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lclwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBUb2FzdFByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIFRvYXN0KHsgY2hpbGRyZW4sIGNvbnRhaW5lclJlZiwgb25DbGljayA9ICgpID0+IHt9IH06IFRvYXN0UHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdlxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudG9hc3R9XHJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3RcIlxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUb2FzdDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdFwiOlwiXzJOM1hpSDhSVm5FQVlsekJEX0pDcVpcIixcImVudHJhbmNlXCI6XCJfMTljdzN6eDZmVTRSTUdNYUdNNXpKWlwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcblxyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBUb2FzdENvbnRhaW5lclByb3BzID0ge1xyXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xyXG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XHJcbn07XHJcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxyXG4gICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdC1jb250YWluZXJcIlxyXG4gICAgPlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdENvbnRhaW5lclwiOlwiXzNSVDJhYmZ6SzBydC1ZamNycVhMbnJcIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlbywgVmlkZW9Qcm9wcyB9IGZyb20gXCIuL1ZpZGVvXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1ZpZGVvLm1vZHVsZS5jc3NcIjtcclxuXHJcbi8qKlxyXG4gKiBUaGVyZSBpcyBhIGtub3duIGlzc3VlIGluIFJlYWN0IGluIHJlZ2FyZHMgdG8gdGhlICdtdXRlZCcgcHJvcGVydHkgd2hpY2ggY2F1c2VzIHRoZSB3YXJuaW5nOlxyXG4gKiBcIldhcm5pbmc6IHVuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLlwiXHJcbiAqXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTAzODlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NTQ0XHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcclxuICovXHJcblxyXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XHJcblxyXG5leHBvcnQgdHlwZSBWaWRlb1Byb3BzID0ge1xyXG4gIHNyYzogc3RyaW5nO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBsYXlvdXQ/OiBMYXlvdXQ7XHJcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xyXG4gIGxvb3A/OiBib29sZWFuO1xyXG4gIG11dGVkPzogYm9vbGVhbjtcclxuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIHBvc3Rlcj86IHN0cmluZztcclxufTtcclxuXHJcbmZ1bmN0aW9uIFZpZGVvKHtcclxuICBzcmMsXHJcbiAgdHlwZSxcclxuICBjaGlsZHJlbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgcG9zdGVyLFxyXG4gIG11dGVkID0gdHJ1ZSxcclxuICBsb29wID0gdHJ1ZSxcclxuICBhdXRvUGxheSA9IHRydWUsXHJcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXHJcbn06IFZpZGVvUHJvcHMpIHtcclxuICByZXR1cm4gY2hpbGRyZW4gPyAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxyXG4gICAgPlxyXG4gICAgICA8dmlkZW9cclxuICAgICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcclxuICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxyXG4gICAgICAgIG11dGVkPXttdXRlZH1cclxuICAgICAgICBsb29wPXtsb29wfVxyXG4gICAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cclxuICAgICAgICBwb3N0ZXI9e3Bvc3Rlcn1cclxuICAgICAgICBwbGF5c0lubGluZVxyXG4gICAgICA+XHJcbiAgICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxyXG4gICAgICA8L3ZpZGVvPlxyXG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxyXG4gICAgPC9kaXY+XHJcbiAgKSA6IChcclxuICAgIDx2aWRlb1xyXG4gICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcclxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XHJcbiAgICAgIG11dGVkPXttdXRlZH1cclxuICAgICAgbG9vcD17bG9vcH1cclxuICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxyXG4gICAgICBwb3N0ZXI9e3Bvc3Rlcn1cclxuICAgICAgcGxheXNJbmxpbmVcclxuICAgID5cclxuICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxyXG4gICAgPC92aWRlbz5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8xZDU1d1h1UUtwdDk3UHFRSFl4NW1XXCIsXCJoYXNPdmVybGF5XCI6XCJfMkRBTTF4N1Axd3VZTlA4VERtWEdYY1wiLFwidmlkZW9cIjpcIl8zalFfcXBVTHRyMHVGU1RXYkQwTlZaXCIsXCJjb3ZlclwiOlwiXzFxblZMaGVHekRJNk5vOV9ud2I3aGxcIixcImNvbnRhaW5cIjpcIl8xWDI4Nk5JU0kwd3EyS0szZGpWaHUzXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJPZWdsLThnZDJLNWx6M21VR0pfVXpcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJfMS1IenBUWV9XdEdjWmMyNXdDb3RlWVwiLFwib3ZlcmxheVwiOlwiXzJUdlhzcUFJVW5HU3FtNmtuSkZoTDNcIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VUb2dnbGUgfSBmcm9tIFwiLi91c2VUb2dnbGVcIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VPdXRzaWRlQ2xpY2sgfSBmcm9tIFwiLi91c2VPdXRzaWRlQ2xpY2tcIjtcclxuIiwiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUb2dnbGUoXHJcbiAgaW5pdGlhbFZhbHVlID0gZmFsc2VcclxuKTogW2Jvb2xlYW4sIChuZXdWYWx1ZT86IGJvb2xlYW4pID0+IHZvaWRdIHtcclxuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGluaXRpYWxWYWx1ZSk7XHJcblxyXG4gIGNvbnN0IHRvZ2dsZSA9IHVzZUNhbGxiYWNrKChuZXdWYWx1ZT86IGJvb2xlYW4pID0+IHtcclxuICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFZhbHVlKChwcmV2VmFsdWUpID0+IHtcclxuICAgICAgICByZXR1cm4gIXByZXZWYWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSwgW10pO1xyXG5cclxuICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xyXG59XHJcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XHJcblxyXG50eXBlIENhbGxiYWNrID0gKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU91dHNpZGVDbGljayhjYWxsYmFjazogQ2FsbGJhY2spIHtcclxuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBjb25zdCBoYW5kbGVDbGljayA9IChldmVudDogRXZlbnQpID0+IHtcclxuICAgICAgaWYgKCFyZWYuY3VycmVudCB8fCByZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2spO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrKTtcclxuXHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljayk7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljayk7XHJcbiAgICB9O1xyXG4gIH0sIFtjYWxsYmFja10pO1xyXG5cclxuICByZXR1cm4gcmVmO1xyXG59XHJcbiIsIi8qIVxuICogaG90a2V5cy1qcyB2My44LjdcbiAqIEEgc2ltcGxlIG1pY3JvLWxpYnJhcnkgZm9yIGRlZmluaW5nIGFuZCBkaXNwYXRjaGluZyBrZXlib2FyZCBzaG9ydGN1dHMuIEl0IGhhcyBubyBkZXBlbmRlbmNpZXMuXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAyMSBrZW5ueSB3b25nIDx3b3dvaG9vQHFxLmNvbT5cbiAqIGh0dHA6Ly9qYXl3Y2psb3ZlLmdpdGh1Yi5pby9ob3RrZXlzXG4gKiBcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG52YXIgaXNmZiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnID8gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IDAgOiBmYWxzZTsgLy8g57uR5a6a5LqL5Lu2XG5cbmZ1bmN0aW9uIGFkZEV2ZW50KG9iamVjdCwgZXZlbnQsIG1ldGhvZCkge1xuICBpZiAob2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbWV0aG9kLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0LmF0dGFjaEV2ZW50KSB7XG4gICAgb2JqZWN0LmF0dGFjaEV2ZW50KFwib25cIi5jb25jYXQoZXZlbnQpLCBmdW5jdGlvbiAoKSB7XG4gICAgICBtZXRob2Qod2luZG93LmV2ZW50KTtcbiAgICB9KTtcbiAgfVxufSAvLyDkv67ppbDplK7ovazmjaLmiJDlr7nlupTnmoTplK7noIFcblxuXG5mdW5jdGlvbiBnZXRNb2RzKG1vZGlmaWVyLCBrZXkpIHtcbiAgdmFyIG1vZHMgPSBrZXkuc2xpY2UoMCwga2V5Lmxlbmd0aCAtIDEpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kcy5sZW5ndGg7IGkrKykge1xuICAgIG1vZHNbaV0gPSBtb2RpZmllclttb2RzW2ldLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgcmV0dXJuIG1vZHM7XG59IC8vIOWkhOeQhuS8oOeahGtleeWtl+espuS4sui9rOaNouaIkOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGdldEtleXMoa2V5KSB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykga2V5ID0gJyc7XG4gIGtleSA9IGtleS5yZXBsYWNlKC9cXHMvZywgJycpOyAvLyDljLnphY3ku7vkvZXnqbrnmb3lrZfnrKYs5YyF5ous56m65qC844CB5Yi26KGo56ym44CB5o2i6aG156ym562J562JXG5cbiAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJywnKTsgLy8g5ZCM5pe26K6+572u5aSa5Liq5b+r5o236ZSu77yM5LulJywn5YiG5YmyXG5cbiAgdmFyIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7IC8vIOW/q+aNt+mUruWPr+iDveWMheWQqycsJ++8jOmcgOeJueauiuWkhOeQhlxuXG4gIGZvciAoOyBpbmRleCA+PSAwOykge1xuICAgIGtleXNbaW5kZXggLSAxXSArPSAnLCc7XG4gICAga2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn0gLy8g5q+U6L6D5L+u6aWw6ZSu55qE5pWw57uEXG5cblxuZnVuY3Rpb24gY29tcGFyZUFycmF5KGExLCBhMikge1xuICB2YXIgYXJyMSA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMSA6IGEyO1xuICB2YXIgYXJyMiA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMiA6IGExO1xuICB2YXIgaXNJbmRleCA9IHRydWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycjIuaW5kZXhPZihhcnIxW2ldKSA9PT0gLTEpIGlzSW5kZXggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0luZGV4O1xufVxuXG52YXIgX2tleU1hcCA9IHtcbiAgYmFja3NwYWNlOiA4LFxuICB0YWI6IDksXG4gIGNsZWFyOiAxMixcbiAgZW50ZXI6IDEzLFxuICByZXR1cm46IDEzLFxuICBlc2M6IDI3LFxuICBlc2NhcGU6IDI3LFxuICBzcGFjZTogMzIsXG4gIGxlZnQ6IDM3LFxuICB1cDogMzgsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gIGRlbDogNDYsXG4gIGRlbGV0ZTogNDYsXG4gIGluczogNDUsXG4gIGluc2VydDogNDUsXG4gIGhvbWU6IDM2LFxuICBlbmQ6IDM1LFxuICBwYWdldXA6IDMzLFxuICBwYWdlZG93bjogMzQsXG4gIGNhcHNsb2NrOiAyMCxcbiAgbnVtXzA6IDk2LFxuICBudW1fMTogOTcsXG4gIG51bV8yOiA5OCxcbiAgbnVtXzM6IDk5LFxuICBudW1fNDogMTAwLFxuICBudW1fNTogMTAxLFxuICBudW1fNjogMTAyLFxuICBudW1fNzogMTAzLFxuICBudW1fODogMTA0LFxuICBudW1fOTogMTA1LFxuICBudW1fbXVsdGlwbHk6IDEwNixcbiAgbnVtX2FkZDogMTA3LFxuICBudW1fZW50ZXI6IDEwOCxcbiAgbnVtX3N1YnRyYWN0OiAxMDksXG4gIG51bV9kZWNpbWFsOiAxMTAsXG4gIG51bV9kaXZpZGU6IDExMSxcbiAgJ+KHqic6IDIwLFxuICAnLCc6IDE4OCxcbiAgJy4nOiAxOTAsXG4gICcvJzogMTkxLFxuICAnYCc6IDE5MixcbiAgJy0nOiBpc2ZmID8gMTczIDogMTg5LFxuICAnPSc6IGlzZmYgPyA2MSA6IDE4NyxcbiAgJzsnOiBpc2ZmID8gNTkgOiAxODYsXG4gICdcXCcnOiAyMjIsXG4gICdbJzogMjE5LFxuICAnXSc6IDIyMSxcbiAgJ1xcXFwnOiAyMjBcbn07IC8vIE1vZGlmaWVyIEtleXNcblxudmFyIF9tb2RpZmllciA9IHtcbiAgLy8gc2hpZnRLZXlcbiAgJ+KHpyc6IDE2LFxuICBzaGlmdDogMTYsXG4gIC8vIGFsdEtleVxuICAn4oylJzogMTgsXG4gIGFsdDogMTgsXG4gIG9wdGlvbjogMTgsXG4gIC8vIGN0cmxLZXlcbiAgJ+KMgyc6IDE3LFxuICBjdHJsOiAxNyxcbiAgY29udHJvbDogMTcsXG4gIC8vIG1ldGFLZXlcbiAgJ+KMmCc6IDkxLFxuICBjbWQ6IDkxLFxuICBjb21tYW5kOiA5MVxufTtcbnZhciBtb2RpZmllck1hcCA9IHtcbiAgMTY6ICdzaGlmdEtleScsXG4gIDE4OiAnYWx0S2V5JyxcbiAgMTc6ICdjdHJsS2V5JyxcbiAgOTE6ICdtZXRhS2V5JyxcbiAgc2hpZnRLZXk6IDE2LFxuICBjdHJsS2V5OiAxNyxcbiAgYWx0S2V5OiAxOCxcbiAgbWV0YUtleTogOTFcbn07XG52YXIgX21vZHMgPSB7XG4gIDE2OiBmYWxzZSxcbiAgMTg6IGZhbHNlLFxuICAxNzogZmFsc2UsXG4gIDkxOiBmYWxzZVxufTtcbnZhciBfaGFuZGxlcnMgPSB7fTsgLy8gRjF+RjEyIHNwZWNpYWwga2V5XG5cbmZvciAodmFyIGsgPSAxOyBrIDwgMjA7IGsrKykge1xuICBfa2V5TWFwW1wiZlwiLmNvbmNhdChrKV0gPSAxMTEgKyBrO1xufVxuXG52YXIgX2Rvd25LZXlzID0gW107IC8vIOiusOW9leaRgeS4i+eahOe7keWumumUrlxuXG52YXIgX3Njb3BlID0gJ2FsbCc7IC8vIOm7mOiupOeDremUruiMg+WbtFxuXG52YXIgZWxlbWVudEhhc0JpbmRFdmVudCA9IFtdOyAvLyDlt7Lnu5Hlrprkuovku7bnmoToioLngrnorrDlvZVcbi8vIOi/lOWbnumUrueggVxuXG52YXIgY29kZSA9IGZ1bmN0aW9uIGNvZGUoeCkge1xuICByZXR1cm4gX2tleU1hcFt4LnRvTG93ZXJDYXNlKCldIHx8IF9tb2RpZmllclt4LnRvTG93ZXJDYXNlKCldIHx8IHgudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xufTsgLy8g6K6+572u6I635Y+W5b2T5YmN6IyD5Zu077yI6buY6K6k5Li6J+aJgOaciSfvvIlcblxuXG5mdW5jdGlvbiBzZXRTY29wZShzY29wZSkge1xuICBfc2NvcGUgPSBzY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5b2T5YmN6IyD5Zu0XG5cblxuZnVuY3Rpb24gZ2V0U2NvcGUoKSB7XG4gIHJldHVybiBfc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluaRgeS4i+e7keWumumUrueahOmUruWAvFxuXG5cbmZ1bmN0aW9uIGdldFByZXNzZWRLZXlDb2RlcygpIHtcbiAgcmV0dXJuIF9kb3duS2V5cy5zbGljZSgwKTtcbn0gLy8g6KGo5Y2V5o6n5Lu25o6n5Lu25Yik5patIOi/lOWbniBCb29sZWFuXG4vLyBob3RrZXkgaXMgZWZmZWN0aXZlIG9ubHkgd2hlbiBmaWx0ZXIgcmV0dXJuIHRydWVcblxuXG5mdW5jdGlvbiBmaWx0ZXIoZXZlbnQpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB2YXIgdGFnTmFtZSA9IHRhcmdldC50YWdOYW1lO1xuICB2YXIgZmxhZyA9IHRydWU7IC8vIGlnbm9yZTogaXNDb250ZW50RWRpdGFibGUgPT09ICd0cnVlJywgPGlucHV0PiBhbmQgPHRleHRhcmVhPiB3aGVuIHJlYWRPbmx5IHN0YXRlIGlzIGZhbHNlLCA8c2VsZWN0PlxuXG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgfHwgKHRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCB0YWdOYW1lID09PSAnU0VMRUNUJykgJiYgIXRhcmdldC5yZWFkT25seSkge1xuICAgIGZsYWcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmbGFnO1xufSAvLyDliKTmlq3mkYHkuIvnmoTplK7mmK/lkKbkuLrmn5DkuKrplK7vvIzov5Tlm550cnVl5oiW6ICFZmFsc2VcblxuXG5mdW5jdGlvbiBpc1ByZXNzZWQoa2V5Q29kZSkge1xuICBpZiAodHlwZW9mIGtleUNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAga2V5Q29kZSA9IGNvZGUoa2V5Q29kZSk7IC8vIOi9rOaNouaIkOmUrueggVxuICB9XG5cbiAgcmV0dXJuIF9kb3duS2V5cy5pbmRleE9mKGtleUNvZGUpICE9PSAtMTtcbn0gLy8g5b6q546v5Yig6ZmkaGFuZGxlcnPkuK3nmoTmiYDmnIkgc2NvcGUo6IyD5Zu0KVxuXG5cbmZ1bmN0aW9uIGRlbGV0ZVNjb3BlKHNjb3BlLCBuZXdTY29wZSkge1xuICB2YXIgaGFuZGxlcnM7XG4gIHZhciBpOyAvLyDmsqHmnInmjIflrppzY29wZe+8jOiOt+WPlnNjb3BlXG5cbiAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuXG4gIGZvciAodmFyIGtleSBpbiBfaGFuZGxlcnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9oYW5kbGVycywga2V5KSkge1xuICAgICAgaGFuZGxlcnMgPSBfaGFuZGxlcnNba2V5XTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDspIHtcbiAgICAgICAgaWYgKGhhbmRsZXJzW2ldLnNjb3BlID09PSBzY29wZSkgaGFuZGxlcnMuc3BsaWNlKGksIDEpO2Vsc2UgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyDlpoLmnpxzY29wZeiiq+WIoOmZpO+8jOWwhnNjb3Bl6YeN572u5Li6YWxsXG5cblxuICBpZiAoZ2V0U2NvcGUoKSA9PT0gc2NvcGUpIHNldFNjb3BlKG5ld1Njb3BlIHx8ICdhbGwnKTtcbn0gLy8g5riF6Zmk5L+u6aWw6ZSuXG5cblxuZnVuY3Rpb24gY2xlYXJNb2RpZmllcihldmVudCkge1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTtcblxuICB2YXIgaSA9IF9kb3duS2V5cy5pbmRleE9mKGtleSk7IC8vIOS7juWIl+ihqOS4rea4hemZpOaMieWOi+i/h+eahOmUrlxuXG5cbiAgaWYgKGkgPj0gMCkge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoaSwgMSk7XG4gIH0gLy8g54m55q6K5aSE55CGIGNtbWFuZCDplK7vvIzlnKggY21tYW5kIOe7hOWQiOW/q+aNt+mUriBrZXl1cCDlj6rmiafooYzkuIDmrKHnmoTpl67pophcblxuXG4gIGlmIChldmVudC5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtZXRhJykge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoMCwgX2Rvd25LZXlzLmxlbmd0aCk7XG4gIH0gLy8g5L+u6aWw6ZSuIHNoaWZ0S2V5IGFsdEtleSBjdHJsS2V5IChjb21tYW5kfHxtZXRhS2V5KSDmuIXpmaRcblxuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IGZhbHNlOyAvLyDlsIbkv67ppbDplK7ph43nva7kuLpmYWxzZVxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bmJpbmQoa2V5c0luZm8pIHtcbiAgLy8gdW5iaW5kKCksIHVuYmluZCBhbGwga2V5c1xuICBpZiAoIWtleXNJbmZvKSB7XG4gICAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBkZWxldGUgX2hhbmRsZXJzW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzSW5mbykpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgOiB1bmJpbmQoW3trZXk6ICdjdHJsK2EnLCBzY29wZTogJ3MxJ30sIHtrZXk6ICdjdHJsLWEnLCBzY29wZTogJ3MyJywgc3BsaXRLZXk6ICctJ31dKVxuICAgIGtleXNJbmZvLmZvckVhY2goZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgIGlmIChpbmZvLmtleSkgZWFjaFVuYmluZChpbmZvKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdvYmplY3QnKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIHVuYmluZCh7a2V5OiAnY3RybCthLCBjdHJsK2InLCBzY29wZTonYWJjJ30pXG4gICAgaWYgKGtleXNJbmZvLmtleSkgZWFjaFVuYmluZChrZXlzSW5mbyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnc3RyaW5nJykge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnQgb2xkIG1ldGhvZFxuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB2YXIgc2NvcGUgPSBhcmdzWzBdLFxuICAgICAgICBtZXRob2QgPSBhcmdzWzFdO1xuXG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWV0aG9kID0gc2NvcGU7XG4gICAgICBzY29wZSA9ICcnO1xuICAgIH1cblxuICAgIGVhY2hVbmJpbmQoe1xuICAgICAga2V5OiBrZXlzSW5mbyxcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgc3BsaXRLZXk6ICcrJ1xuICAgIH0pO1xuICB9XG59IC8vIOino+mZpOe7keWumuafkOS4quiMg+WbtOeahOW/q+aNt+mUrlxuXG5cbnZhciBlYWNoVW5iaW5kID0gZnVuY3Rpb24gZWFjaFVuYmluZChfcmVmKSB7XG4gIHZhciBrZXkgPSBfcmVmLmtleSxcbiAgICAgIHNjb3BlID0gX3JlZi5zY29wZSxcbiAgICAgIG1ldGhvZCA9IF9yZWYubWV0aG9kLFxuICAgICAgX3JlZiRzcGxpdEtleSA9IF9yZWYuc3BsaXRLZXksXG4gICAgICBzcGxpdEtleSA9IF9yZWYkc3BsaXRLZXkgPT09IHZvaWQgMCA/ICcrJyA6IF9yZWYkc3BsaXRLZXk7XG4gIHZhciBtdWx0aXBsZUtleXMgPSBnZXRLZXlzKGtleSk7XG4gIG11bHRpcGxlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChvcmlnaW5LZXkpIHtcbiAgICB2YXIgdW5iaW5kS2V5cyA9IG9yaWdpbktleS5zcGxpdChzcGxpdEtleSk7XG4gICAgdmFyIGxlbiA9IHVuYmluZEtleXMubGVuZ3RoO1xuICAgIHZhciBsYXN0S2V5ID0gdW5iaW5kS2V5c1tsZW4gLSAxXTtcbiAgICB2YXIga2V5Q29kZSA9IGxhc3RLZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUobGFzdEtleSk7XG4gICAgaWYgKCFfaGFuZGxlcnNba2V5Q29kZV0pIHJldHVybjsgLy8g5Yik5pat5piv5ZCm5Lyg5YWl6IyD5Zu077yM5rKh5pyJ5bCx6I635Y+W6IyD5Zu0XG5cbiAgICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgdmFyIG1vZHMgPSBsZW4gPiAxID8gZ2V0TW9kcyhfbW9kaWZpZXIsIHVuYmluZEtleXMpIDogW107XG4gICAgX2hhbmRsZXJzW2tleUNvZGVdID0gX2hhbmRsZXJzW2tleUNvZGVdLm1hcChmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgICAvLyDpgJrov4flh73mlbDliKTmlq3vvIzmmK/lkKbop6PpmaTnu5HlrprvvIzlh73mlbDnm7jnrYnnm7TmjqXov5Tlm55cbiAgICAgIHZhciBpc01hdGNoaW5nTWV0aG9kID0gbWV0aG9kID8gcmVjb3JkLm1ldGhvZCA9PT0gbWV0aG9kIDogdHJ1ZTtcblxuICAgICAgaWYgKGlzTWF0Y2hpbmdNZXRob2QgJiYgcmVjb3JkLnNjb3BlID09PSBzY29wZSAmJiBjb21wYXJlQXJyYXkocmVjb3JkLm1vZHMsIG1vZHMpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9KTtcbiAgfSk7XG59OyAvLyDlr7nnm5HlkKzlr7nlupTlv6vmjbfplK7nmoTlm57osIPlh73mlbDov5vooYzlpITnkIZcblxuXG5mdW5jdGlvbiBldmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIHNjb3BlKSB7XG4gIHZhciBtb2RpZmllcnNNYXRjaDsgLy8g55yL5a6D5piv5ZCm5Zyo5b2T5YmN6IyD5Zu0XG5cbiAgaWYgKGhhbmRsZXIuc2NvcGUgPT09IHNjb3BlIHx8IGhhbmRsZXIuc2NvcGUgPT09ICdhbGwnKSB7XG4gICAgLy8g5qOA5p+l5piv5ZCm5Yy56YWN5L+u6aWw56ym77yI5aaC5p6c5pyJ6L+U5ZuedHJ1Ze+8iVxuICAgIG1vZGlmaWVyc01hdGNoID0gaGFuZGxlci5tb2RzLmxlbmd0aCA+IDA7XG5cbiAgICBmb3IgKHZhciB5IGluIF9tb2RzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCB5KSkge1xuICAgICAgICBpZiAoIV9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA+IC0xIHx8IF9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA9PT0gLTEpIHtcbiAgICAgICAgICBtb2RpZmllcnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyDosIPnlKjlpITnkIbnqIvluo/vvIzlpoLmnpzmmK/kv67ppbDplK7kuI3lgZrlpITnkIZcblxuXG4gICAgaWYgKGhhbmRsZXIubW9kcy5sZW5ndGggPT09IDAgJiYgIV9tb2RzWzE2XSAmJiAhX21vZHNbMThdICYmICFfbW9kc1sxN10gJiYgIV9tb2RzWzkxXSB8fCBtb2RpZmllcnNNYXRjaCB8fCBoYW5kbGVyLnNob3J0Y3V0ID09PSAnKicpIHtcbiAgICAgIGlmIChoYW5kbGVyLm1ldGhvZChldmVudCwgaGFuZGxlcikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNlIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDlpITnkIZrZXlkb3du5LqL5Lu2XG5cblxuZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnQpIHtcbiAgdmFyIGFzdGVyaXNrID0gX2hhbmRsZXJzWycqJ107XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlOyAvLyDooajljZXmjqfku7bov4fmu6Qg6buY6K6k6KGo5Y2V5o6n5Lu25LiN6Kem5Y+R5b+r5o236ZSuXG5cbiAgaWYgKCFob3RrZXlzLmZpbHRlci5jYWxsKHRoaXMsIGV2ZW50KSkgcmV0dXJuOyAvLyBHZWNrbyhGaXJlZm94KeeahGNvbW1hbmTplK7lgLwyMjTvvIzlnKhXZWJraXQoQ2hyb21lKeS4reS/neaMgeS4gOiHtFxuICAvLyBXZWJraXTlt6blj7MgY29tbWFuZCDplK7lgLzkuI3kuIDmoLdcblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG4gIC8qKlxuICAgKiBDb2xsZWN0IGJvdW5kIGtleXNcbiAgICogSWYgYW4gSW5wdXQgTWV0aG9kIEVkaXRvciBpcyBwcm9jZXNzaW5nIGtleSBpbnB1dCBhbmQgdGhlIGV2ZW50IGlzIGtleWRvd24sIHJldHVybiAyMjkuXG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1MDQzOTM0L2lzLWl0LW9rLXRvLWlnbm9yZS1rZXlkb3duLWV2ZW50cy13aXRoLWtleWNvZGUtMjI5XG4gICAqIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1kb20vMjAxMEp1bFNlcC9hdHQtMDE4Mi9rZXlDb2RlLXNwZWMuaHRtbFxuICAgKi9cblxuICBpZiAoX2Rvd25LZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYga2V5ICE9PSAyMjkpIF9kb3duS2V5cy5wdXNoKGtleSk7XG4gIC8qKlxuICAgKiBKZXN0IHRlc3QgY2FzZXMgYXJlIHJlcXVpcmVkLlxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqL1xuXG4gIFsnY3RybEtleScsICdhbHRLZXknLCAnc2hpZnRLZXknLCAnbWV0YUtleSddLmZvckVhY2goZnVuY3Rpb24gKGtleU5hbWUpIHtcbiAgICB2YXIga2V5TnVtID0gbW9kaWZpZXJNYXBba2V5TmFtZV07XG5cbiAgICBpZiAoZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKGtleU51bSk7XG4gICAgfSBlbHNlIGlmICghZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA+IC0xKSB7XG4gICAgICBfZG93bktleXMuc3BsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSksIDEpO1xuICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PT0gJ21ldGFLZXknICYmIGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRml4IGlmIENvbW1hbmQgaXMgcHJlc3NlZDpcbiAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAqL1xuICAgICAgaWYgKCEoZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IF9kb3duS2V5cy5zbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IHRydWU7IC8vIOWwhueJueauiuWtl+espueahGtleeazqOWGjOWIsCBob3RrZXlzIOS4ilxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhc3RlcmlzaykgcmV0dXJuO1xuICB9IC8vIOWwhiBtb2RpZmllck1hcCDph4zpnaLnmoTkv67ppbDplK7nu5HlrprliLAgZXZlbnQg5LitXG5cblxuICBmb3IgKHZhciBlIGluIF9tb2RzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgZSkpIHtcbiAgICAgIF9tb2RzW2VdID0gZXZlbnRbbW9kaWZpZXJNYXBbZV1dO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvaG90a2V5cy9wdWxsLzEyOVxuICAgKiBUaGlzIHNvbHZlcyB0aGUgaXNzdWUgaW4gRmlyZWZveCBvbiBXaW5kb3dzIHdoZXJlIGhvdGtleXMgY29ycmVzcG9uZGluZyB0byBzcGVjaWFsIGNoYXJhY3RlcnMgd291bGQgbm90IHRyaWdnZXIuXG4gICAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBjdHJsK2FsdCttIG9uIGEgU3dlZGlzaCBrZXlib2FyZCB3aGljaCBpcyB1c2VkIHRvIHR5cGUgzrwuXG4gICAqIEJyb3dzZXIgc3VwcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1rZXlib2FyZGV2ZW50LWdldG1vZGlmaWVyc3RhdGVcbiAgICovXG5cblxuICBpZiAoZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAhKGV2ZW50LmFsdEtleSAmJiAhZXZlbnQuY3RybEtleSkgJiYgZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSgnQWx0R3JhcGgnKSkge1xuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxNykgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxNyk7XG4gICAgfVxuXG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE4KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE4KTtcbiAgICB9XG5cbiAgICBfbW9kc1sxN10gPSB0cnVlO1xuICAgIF9tb2RzWzE4XSA9IHRydWU7XG4gIH0gLy8g6I635Y+W6IyD5Zu0IOm7mOiupOS4uiBgYWxsYFxuXG5cbiAgdmFyIHNjb3BlID0gZ2V0U2NvcGUoKTsgLy8g5a+55Lu75L2V5b+r5o236ZSu6YO96ZyA6KaB5YGa55qE5aSE55CGXG5cbiAgaWYgKGFzdGVyaXNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3Rlcmlzay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzdGVyaXNrW2ldLnNjb3BlID09PSBzY29wZSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIGFzdGVyaXNrW2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBhc3Rlcmlza1tpXS5rZXl1cCkpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCBhc3Rlcmlza1tpXSwgc2NvcGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBrZXkg5LiN5ZyoIF9oYW5kbGVycyDkuK3ov5Tlm55cblxuXG4gIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSByZXR1cm47XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9oYW5kbGVyc1trZXldLmxlbmd0aDsgX2krKykge1xuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5dXApIHtcbiAgICAgIGlmIChfaGFuZGxlcnNba2V5XVtfaV0ua2V5KSB7XG4gICAgICAgIHZhciByZWNvcmQgPSBfaGFuZGxlcnNba2V5XVtfaV07XG4gICAgICAgIHZhciBzcGxpdEtleSA9IHJlY29yZC5zcGxpdEtleTtcbiAgICAgICAgdmFyIGtleVNob3J0Y3V0ID0gcmVjb3JkLmtleS5zcGxpdChzcGxpdEtleSk7XG4gICAgICAgIHZhciBfZG93bktleXNDdXJyZW50ID0gW107IC8vIOiusOW9leW9k+WJjeaMiemUrumUruWAvFxuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwga2V5U2hvcnRjdXQubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICBfZG93bktleXNDdXJyZW50LnB1c2goY29kZShrZXlTaG9ydGN1dFthXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9kb3duS2V5c0N1cnJlbnQuc29ydCgpLmpvaW4oJycpID09PSBfZG93bktleXMuc29ydCgpLmpvaW4oJycpKSB7XG4gICAgICAgICAgLy8g5om+5Yiw5aSE55CG5YaF5a65XG4gICAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCByZWNvcmQsIHNjb3BlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDliKTmlq0gZWxlbWVudCDmmK/lkKblt7Lnu4/nu5Hlrprkuovku7ZcblxuXG5mdW5jdGlvbiBpc0VsZW1lbnRCaW5kKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnRIYXNCaW5kRXZlbnQuaW5kZXhPZihlbGVtZW50KSA+IC0xO1xufVxuXG5mdW5jdGlvbiBob3RrZXlzKGtleSwgb3B0aW9uLCBtZXRob2QpIHtcbiAgX2Rvd25LZXlzID0gW107XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhrZXkpOyAvLyDpnIDopoHlpITnkIbnmoTlv6vmjbfplK7liJfooahcblxuICB2YXIgbW9kcyA9IFtdO1xuICB2YXIgc2NvcGUgPSAnYWxsJzsgLy8gc2NvcGXpu5jorqTkuLphbGzvvIzmiYDmnInojIPlm7Tpg73mnInmlYhcblxuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50OyAvLyDlv6vmjbfplK7kuovku7bnu5HlrproioLngrlcblxuICB2YXIgaSA9IDA7XG4gIHZhciBrZXl1cCA9IGZhbHNlO1xuICB2YXIga2V5ZG93biA9IHRydWU7XG4gIHZhciBzcGxpdEtleSA9ICcrJzsgLy8g5a+55Li66K6+5a6a6IyD5Zu055qE5Yik5patXG5cbiAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBtZXRob2QgPSBvcHRpb247XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgaWYgKG9wdGlvbi5zY29wZSkgc2NvcGUgPSBvcHRpb24uc2NvcGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uZWxlbWVudCkgZWxlbWVudCA9IG9wdGlvbi5lbGVtZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleXVwKSBrZXl1cCA9IG9wdGlvbi5rZXl1cDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXlkb3duICE9PSB1bmRlZmluZWQpIGtleWRvd24gPSBvcHRpb24ua2V5ZG93bjsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uc3BsaXRLZXkgPT09ICdzdHJpbmcnKSBzcGxpdEtleSA9IG9wdGlvbi5zcGxpdEtleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSBzY29wZSA9IG9wdGlvbjsgLy8g5a+55LqO5q+P5Liq5b+r5o236ZSu6L+b6KGM5aSE55CGXG5cbiAgZm9yICg7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXS5zcGxpdChzcGxpdEtleSk7IC8vIOaMiemUruWIl+ihqFxuXG4gICAgbW9kcyA9IFtdOyAvLyDlpoLmnpzmmK/nu4TlkIjlv6vmjbfplK7lj5blvpfnu4TlkIjlv6vmjbfplK5cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMSkgbW9kcyA9IGdldE1vZHMoX21vZGlmaWVyLCBrZXkpOyAvLyDlsIbpnZ7kv67ppbDplK7ovazljJbkuLrplK7noIFcblxuICAgIGtleSA9IGtleVtrZXkubGVuZ3RoIC0gMV07XG4gICAga2V5ID0ga2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGtleSk7IC8vICrooajnpLrljLnphY3miYDmnInlv6vmjbfplK5cbiAgICAvLyDliKTmlq1rZXnmmK/lkKblnKhfaGFuZGxlcnPkuK3vvIzkuI3lnKjlsLHotYvkuIDkuKrnqbrmlbDnu4RcblxuICAgIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSBfaGFuZGxlcnNba2V5XSA9IFtdO1xuXG4gICAgX2hhbmRsZXJzW2tleV0ucHVzaCh7XG4gICAgICBrZXl1cDoga2V5dXAsXG4gICAgICBrZXlkb3duOiBrZXlkb3duLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbW9kczogbW9kcyxcbiAgICAgIHNob3J0Y3V0OiBrZXlzW2ldLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBrZXk6IGtleXNbaV0sXG4gICAgICBzcGxpdEtleTogc3BsaXRLZXlcbiAgICB9KTtcbiAgfSAvLyDlnKjlhajlsYBkb2N1bWVudOS4iuiuvue9ruW/q+aNt+mUrlxuXG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhaXNFbGVtZW50QmluZChlbGVtZW50KSAmJiB3aW5kb3cpIHtcbiAgICBlbGVtZW50SGFzQmluZEV2ZW50LnB1c2goZWxlbWVudCk7XG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSk7XG4gICAgfSk7XG4gICAgYWRkRXZlbnQod2luZG93LCAnZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfZG93bktleXMgPSBbXTtcbiAgICB9KTtcbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5dXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSk7XG4gICAgICBjbGVhck1vZGlmaWVyKGUpO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBfYXBpID0ge1xuICBzZXRTY29wZTogc2V0U2NvcGUsXG4gIGdldFNjb3BlOiBnZXRTY29wZSxcbiAgZGVsZXRlU2NvcGU6IGRlbGV0ZVNjb3BlLFxuICBnZXRQcmVzc2VkS2V5Q29kZXM6IGdldFByZXNzZWRLZXlDb2RlcyxcbiAgaXNQcmVzc2VkOiBpc1ByZXNzZWQsXG4gIGZpbHRlcjogZmlsdGVyLFxuICB1bmJpbmQ6IHVuYmluZFxufTtcblxuZm9yICh2YXIgYSBpbiBfYXBpKSB7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2FwaSwgYSkpIHtcbiAgICBob3RrZXlzW2FdID0gX2FwaVthXTtcbiAgfVxufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIF9ob3RrZXlzID0gd2luZG93LmhvdGtleXM7XG5cbiAgaG90a2V5cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKGRlZXApIHtcbiAgICBpZiAoZGVlcCAmJiB3aW5kb3cuaG90a2V5cyA9PT0gaG90a2V5cykge1xuICAgICAgd2luZG93LmhvdGtleXMgPSBfaG90a2V5cztcbiAgICB9XG5cbiAgICByZXR1cm4gaG90a2V5cztcbiAgfTtcblxuICB3aW5kb3cuaG90a2V5cyA9IGhvdGtleXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhvdGtleXM7XG4iLCJpbXBvcnQgaG90a2V5cyBmcm9tICdob3RrZXlzLWpzJztcbmltcG9ydCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIFVzZSBpc0hvdGtleVByZXNzZWQgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIHZlcnNpb24gNC5cclxuICovXG5cbmZ1bmN0aW9uIHVzZUlzSG90a2V5UHJlc3NlZCgpIHtcbiAgcmV0dXJuIGhvdGtleXMuaXNQcmVzc2VkO1xufVxuXG5ob3RrZXlzLmZpbHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG52YXIgdGFnRmlsdGVyID0gZnVuY3Rpb24gdGFnRmlsdGVyKF9yZWYsIGVuYWJsZU9uVGFncykge1xuICB2YXIgdGFyZ2V0ID0gX3JlZi50YXJnZXQ7XG4gIHZhciB0YXJnZXRUYWdOYW1lID0gdGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lO1xuICByZXR1cm4gQm9vbGVhbih0YXJnZXRUYWdOYW1lICYmIGVuYWJsZU9uVGFncyAmJiBlbmFibGVPblRhZ3MuaW5jbHVkZXModGFyZ2V0VGFnTmFtZSkpO1xufTtcblxudmFyIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQgPSBmdW5jdGlvbiBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGV2KSB7XG4gIHJldHVybiB0YWdGaWx0ZXIoZXYsIFsnSU5QVVQnLCAnVEVYVEFSRUEnLCAnU0VMRUNUJ10pO1xufTtcblxuZnVuY3Rpb24gdXNlSG90a2V5cyhrZXlzLCBjYWxsYmFjaywgb3B0aW9ucywgZGVwcykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgZGVwcyA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBfcmVmMiA9IG9wdGlvbnMgfHwge30sXG4gICAgICBlbmFibGVPblRhZ3MgPSBfcmVmMi5lbmFibGVPblRhZ3MsXG4gICAgICBmaWx0ZXIgPSBfcmVmMi5maWx0ZXIsXG4gICAgICBrZXl1cCA9IF9yZWYyLmtleXVwLFxuICAgICAga2V5ZG93biA9IF9yZWYyLmtleWRvd24sXG4gICAgICBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPSBfcmVmMi5maWx0ZXJQcmV2ZW50RGVmYXVsdCxcbiAgICAgIGZpbHRlclByZXZlbnREZWZhdWx0ID0gX3JlZjIkZmlsdGVyUHJldmVudERlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZmlsdGVyUHJldmVudERlLFxuICAgICAgX3JlZjIkZW5hYmxlZCA9IF9yZWYyLmVuYWJsZWQsXG4gICAgICBlbmFibGVkID0gX3JlZjIkZW5hYmxlZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGVuYWJsZWQsXG4gICAgICBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPSBfcmVmMi5lbmFibGVPbkNvbnRlbnRFZGl0YWJsZSxcbiAgICAgIGVuYWJsZU9uQ29udGVudEVkaXRhYmxlID0gX3JlZjIkZW5hYmxlT25Db250ZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGVuYWJsZU9uQ29udGVudDtcblxuICB2YXIgcmVmID0gdXNlUmVmKG51bGwpOyAvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgY2FsbGJhY2sgZGV0ZXJtaW5lcyBpZiB0aGUgYnJvd3NlcnMgZGVmYXVsdCBiZWhhdmlvciBpcyBwcmV2ZW50ZWQuXG5cbiAgdmFyIG1lbW9pc2VkQ2FsbGJhY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KSB7XG4gICAgdmFyIF9rZXlib2FyZEV2ZW50JHRhcmdldDtcblxuICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihrZXlib2FyZEV2ZW50KSkge1xuICAgICAgcmV0dXJuICFmaWx0ZXJQcmV2ZW50RGVmYXVsdDtcbiAgICB9IC8vIENoZWNrIHdoZXRoZXIgdGhlIGhvdGtleXMgd2FzIHRyaWdnZXJlZCBpbnNpZGUgYW4gaW5wdXQgYW5kIHRoYXQgaW5wdXQgaXMgZW5hYmxlZCBvciBpZiBpdCB3YXMgdHJpZ2dlcmVkIGJ5IGEgY29udGVudCBlZGl0YWJsZSB0YWcgYW5kIGl0IGlzIGVuYWJsZWQuXG5cblxuICAgIGlmIChpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGtleWJvYXJkRXZlbnQpICYmICF0YWdGaWx0ZXIoa2V5Ym9hcmRFdmVudCwgZW5hYmxlT25UYWdzKSB8fCAoX2tleWJvYXJkRXZlbnQkdGFyZ2V0ID0ga2V5Ym9hcmRFdmVudC50YXJnZXQpICE9IG51bGwgJiYgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlICYmICFlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSBudWxsIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHJlZi5jdXJyZW50KSB7XG4gICAgICBjYWxsYmFjayhrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBkZXBzID8gW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdLmNvbmNhdChkZXBzKSA6IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJbiB0aGlzIGNhc2Uga2V5ZG93biBpcyBsaWtlbHkgdW5kZWZpbmVkLCBzbyB3ZSBzZXQgaXQgdG8gZmFsc2UsIHNpbmNlIGhvdGtleXMgbmVlZHMgdGhlIGBrZXlkb3duYCBrZXkgdG8gaGF2ZSBhIHZhbHVlLlxuXG5cbiAgICBpZiAoa2V5dXAgJiYga2V5ZG93biAhPT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5rZXlkb3duID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaG90a2V5cyhrZXlzLCBvcHRpb25zIHx8IHt9LCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIH07XG4gIH0sIFttZW1vaXNlZENhbGxiYWNrLCBrZXlzLCBlbmFibGVkXSk7XG4gIHJldHVybiByZWY7XG59XG5cbnZhciBpc0hvdGtleVByZXNzZWQgPSBob3RrZXlzLmlzUHJlc3NlZDtcblxuZXhwb3J0IHsgaXNIb3RrZXlQcmVzc2VkLCB1c2VIb3RrZXlzLCB1c2VJc0hvdGtleVByZXNzZWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlYWN0LWhvdGtleXMtaG9vay5lc20uanMubWFwXG4iXSwic291cmNlUm9vdCI6IiJ9
|
package/package.json
CHANGED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { ReactNode, RefObject } from "react";
|
|
2
|
-
declare type MenuProps = {
|
|
3
|
-
children: ReactNode;
|
|
4
|
-
containerRef?: RefObject<HTMLDivElement>;
|
|
5
|
-
className?: string;
|
|
6
|
-
isOpen?: boolean;
|
|
7
|
-
header?: string;
|
|
8
|
-
};
|
|
9
|
-
declare function LayeredMenu({ children, containerRef, className, isOpen, header, }: MenuProps): JSX.Element;
|
|
10
|
-
export default LayeredMenu;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { ReactNode, RefObject } from "react";
|
|
2
|
-
import { MenuPlacement } from "./Menu";
|
|
3
|
-
declare type MenuProps = {
|
|
4
|
-
children: ReactNode;
|
|
5
|
-
containerRef?: RefObject<HTMLDivElement>;
|
|
6
|
-
placement?: MenuPlacement;
|
|
7
|
-
};
|
|
8
|
-
declare function LayeredMenuContainer({ children, containerRef, placement, }: MenuProps): JSX.Element;
|
|
9
|
-
export default LayeredMenuContainer;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { ReactNode, RefObject } from "react";
|
|
2
|
-
declare type MenuProps = {
|
|
3
|
-
children: ReactNode;
|
|
4
|
-
containerRef?: RefObject<HTMLDivElement>;
|
|
5
|
-
};
|
|
6
|
-
declare function MultiMenusContainer({ children, containerRef }: MenuProps): JSX.Element;
|
|
7
|
-
export default MultiMenusContainer;
|